from __future__ import annotations import html import inspect import json import math import re from datetime import datetime from functools import lru_cache from pathlib import Path from typing import Any import gradio as gr from packing_benchmark.dates import ( date_from_friedman_record, date_from_submission, display_date_info, is_recent_date_info, parse_friedman_date_text, ) from packing_benchmark.hub_sync import maybe_hydrate_from_dataset from packing_benchmark.store import SolutionStore, is_trivial_record from packing_benchmark.verifier import ( DEFAULT_TOLERANCE, load_solution_json, make_container_shape, make_item_shape, normalize_solution, solution_case, solution_hash, verify_solution, ) SPACE_ROOT = Path(__file__).resolve().parent DATA_DIR = SPACE_ROOT / "data" DATA_DIR.mkdir(parents=True, exist_ok=True) FAVICON_PATH = SPACE_ROOT / "assets" / "favicon.svg" HYDRATE_STATUS = maybe_hydrate_from_dataset(DATA_DIR) STORE = SolutionStore(DATA_DIR) SUBMISSION_MIN_IMPROVEMENT = 1.0e-4 SUBMISSION_MAX_NEW_CASE_N = 100 VERIFIER_REPO_URL = "https://github.com/Nathan-Roll1/packing-verifier" @lru_cache(maxsize=1) def cached_reference_records() -> list[dict[str, Any]]: return STORE.load_reference_records() @lru_cache(maxsize=1) def cached_verified_records() -> list[dict[str, Any]]: return STORE.load_records() @lru_cache(maxsize=1) def cached_family_updates() -> dict[str, Any]: path = DATA_DIR / "friedman_family_updates.json" if not path.exists(): return {} try: payload = json.loads(path.read_text()) except Exception: return {} families = payload.get("families", {}) return families if isinstance(families, dict) else {} @lru_cache(maxsize=64) def cached_public_records(setup: str = "", show_all: bool = False) -> list[dict[str, Any]]: return STORE.public_records(setup or None, show_all=show_all) def clear_page_caches() -> None: cached_reference_records.cache_clear() cached_verified_records.cache_clear() cached_family_updates.cache_clear() cached_public_records.cache_clear() setup_choices.cache_clear() coordinate_records_by_case.cache_clear() family_page_html.cache_clear() directory_html.cache_clear() CSS = """ :root { color-scheme: light; --page: #f3eddf; --paper: #fffdf7; --paper-soft: #faf6ec; --ink: #151515; --muted: #58544d; --quiet: #7b766d; --line: #1b1b1b; --line-soft: #d4cab8; --green: #b9e7bd; --green-strong: #2e7d32; --link: #174f8a; --tri: #e69f00; --cir: #56b4e9; --squ: #009e73; --pen: #f0e442; --hex: #0072b2; --oct: #d55e00; --dom: #cc79a7; --unknown-shape: #999999; --radius: 6px; } html, body, gradio-app, .gradio-container, .main, .app { background: var(--page) !important; color: var(--ink) !important; font-family: Helvetica, Arial, sans-serif !important; } .gradio-container { max-width: none !important; margin: 0 !important; padding: 0 !important; font-family: Helvetica, Arial, sans-serif !important; line-height: 1.45; } .gradio-container *, .gradio-container button, .gradio-container input, .gradio-container textarea, .gradio-container select { box-sizing: border-box; font-family: Helvetica, Arial, sans-serif !important; letter-spacing: 0 !important; } .gradio-container a { color: var(--link) !important; text-decoration: underline; text-underline-offset: 2px; } .contain { width: min(1180px, calc(100% - 32px)); margin: 0 auto; } .packing-shell { min-height: 0; background: var(--page); color: var(--ink); font-family: Helvetica, Arial, sans-serif !important; padding-bottom: 44px; } .packing-shell * { font-family: Helvetica, Arial, sans-serif !important; } #leaderboard-panel, #submit-entry-panel { display: none; } #leaderboard-panel:target, #submit-entry-panel:target, #leaderboard-panel:target #leaderboard-panel, #submit-entry-panel:target #submit-entry-panel, html:has(#leaderboard-table:target) #leaderboard-panel, html:has(.leaderboard-modal:target) #leaderboard-panel { display: block !important; } html:has(#leaderboard-panel:target) #home-panel, html:has(#submit-entry-panel:target) #home-panel, html:has(#leaderboard-table:target) #home-panel, html:has(.leaderboard-modal:target) #home-panel { display: none !important; } html:has(#leaderboard-panel:target) #submit-entry-panel, html:has(#leaderboard-table:target) #submit-entry-panel, html:has(.leaderboard-modal:target) #submit-entry-panel, html:has(#submit-entry-panel:target) #leaderboard-panel { display: none !important; } .hero-stage { border-bottom: 2px solid var(--line); padding: 30px 0 20px; } .hero-stage h1 { margin: 0 0 10px; color: var(--ink); font-size: 36px; line-height: 1.05; font-weight: 700; } .hero-copy { max-width: 820px; margin: 0; color: var(--muted); font-size: 16px; line-height: 1.55; } .gradio-container .tab-nav, .gradio-container [role="tablist"] { display: none !important; } .site-nav { position: sticky !important; top: 0; z-index: 50; min-height: 48px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 7px max(16px, calc((100% - 1180px) / 2)) !important; background: rgba(243, 237, 223, 0.98) !important; border-bottom: 1px solid var(--line) !important; } .site-nav-link { display: inline-flex; align-items: center; justify-content: center; min-height: 32px !important; padding: 5px 11px !important; background: transparent !important; border: 1px solid transparent !important; border-radius: 4px !important; box-shadow: none !important; color: var(--ink) !important; font-size: 14px !important; font-weight: 700 !important; line-height: 1.2; text-decoration: none !important; } .site-nav-link:hover, .site-nav-link.active { background: var(--paper) !important; border-color: var(--line) !important; } .site-nav-link.submit-link { margin-left: auto !important; background: var(--green-strong) !important; border-color: #1f5d25 !important; color: #fff !important; } .site-nav-link.submit-link:hover, .site-nav-link.submit-link.active { background: #236c29 !important; color: #fff !important; } footer, .gradio-container footer, .gradio-container .footer, .gradio-container .built-with, .gradio-container .api-docs, .gradio-container .app > header, .gradio-container .app > .header, .gradio-container .contain > button:not(.site-nav-link), .gradio-container a[href*="view=api"], .gradio-container a[href*="/api"], .gradio-container button[aria-label="Settings"], .gradio-container button[title="Settings"], .gradio-container button[aria-label="More"], .gradio-container button[aria-label="More options"], .gradio-container button[title="More"], .gradio-container button[title="More options"], .gradio-container [data-testid="settings-button"], .gradio-container [data-testid="more-button"], .gradio-container [data-testid="app-menu"], .gradio-container [data-testid="menu-button"], .gradio-container [class*="settings"], .gradio-container [class*="kebab"], .gradio-container [class*="ellipsis"] { display: none !important; } .section { padding: 30px 0 8px; } .section-head { display: flex; justify-content: space-between; gap: 20px; align-items: end; margin-bottom: 16px; } .section-head h2, .family-title-card h2 { margin: 0 0 4px; color: var(--ink); font-size: 24px; line-height: 1.2; font-weight: 700; } .section-note, .family-subtitle { margin: 0; color: var(--muted); font-size: 14px; line-height: 1.45; } .family-matrix { display: grid; gap: 22px; } .family-row { padding-top: 14px; border-top: 1px solid var(--line); } .family-row:first-child { padding-top: 0; border-top: 0; } .family-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(178px, 1fr)); gap: 10px; } .family-card { display: block; min-height: 218px; padding: 12px; color: var(--ink) !important; text-decoration: none !important; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); } .family-card:hover, .family-card:focus-visible { background: #fffaf0; outline: 2px solid var(--line); outline-offset: 2px; } .family-card-top { display: block; } .family-render { height: 150px; margin: 8px 0 10px; } .family-render .packing-svg { max-width: 160px; max-height: 160px; } .family-code { margin: 0 0 7px; color: var(--quiet); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace !important; font-size: 12px; text-transform: uppercase; } .family-card h3 { margin: 0; color: var(--ink); font-size: 18px; line-height: 1.22; font-weight: 700; } .front-family-card { min-height: 232px; margin-bottom: 8px; } .front-family-card .family-render { height: 154px; } .record-book { padding: 10px 0 0; } .family-section { margin-top: 34px; padding-top: 22px; border-top: 2px solid var(--line); } .family-title-card { display: flex; align-items: end; justify-content: space-between; gap: 18px; margin-bottom: 14px; } .record-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(178px, 1fr)); gap: 12px; } .record-card { overflow: hidden; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); color: var(--ink); } .record-card:hover, .record-card:focus-within { background: #fffaf0; outline: 2px solid var(--line); outline-offset: 2px; } .record-open { display: block; color: inherit !important; text-decoration: none !important; } .record-top { padding: 9px 10px 0; } .record-case { color: var(--ink); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace !important; font-size: 12px; font-weight: 700; } .recent-dot { display: inline-block; width: 9px; height: 9px; margin-left: 7px; background: var(--green-strong); border: 1px solid #174c1b; border-radius: 999px; vertical-align: 1px; } .family-card h3 .recent-dot { width: 10px; height: 10px; vertical-align: 2px; } .render-stage { height: 178px; margin: 8px 10px 0; display: grid; place-items: center; background: transparent; border: 0; border-radius: 0; } .placeholder, .empty-state { padding: 0 14px; color: var(--quiet); font-size: 12px; line-height: 1.35; text-align: center; } .packing-svg { display: block; width: 100%; height: 100%; max-width: 162px; max-height: 162px; overflow: visible; } .shape-item { fill: var(--unknown-shape); stroke: #000; stroke-width: 1.5px !important; stroke-linejoin: round; vector-effect: non-scaling-stroke; } .shape-item.inner-tri { fill: var(--tri); } .shape-item.inner-cir { fill: var(--cir); } .shape-item.inner-squ { fill: var(--squ); } .shape-item.inner-pen { fill: var(--pen); } .shape-item.inner-hex { fill: var(--hex); } .shape-item.inner-oct { fill: var(--oct); } .shape-item.inner-dom { fill: var(--dom); } .shape-container { fill: none; stroke: #000; stroke-width: 2.6px !important; stroke-linejoin: round; vector-effect: non-scaling-stroke; } .record-body { padding: 9px 10px 12px; } .metric { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; color: var(--ink); } .metric strong { color: var(--ink); font-size: 17px; line-height: 1.2; } .metric span { color: var(--muted); font-size: 12px; white-space: nowrap; } .expression { min-height: 18px; margin-top: 4px; color: var(--muted); font-size: 12px; line-height: 1.35; overflow-wrap: anywhere; } .meta { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line-soft); color: var(--muted); font-size: 12px; line-height: 1.4; } .meta strong { color: var(--ink); } .record-author { margin-top: 8px; color: var(--muted); font-size: 12px; line-height: 1.35; } .record-author strong { color: var(--ink); } .trivial-badge { display: inline-flex; align-items: center; min-height: 22px; padding: 2px 7px; background: var(--paper-soft); border: 1px solid var(--line); border-radius: 4px; color: var(--ink); font-size: 11px; font-weight: 700; line-height: 1.1; text-transform: uppercase; } .page-card { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; } .record-modal { display: none; position: fixed; inset: 0; z-index: 1000; align-items: center; justify-content: center; padding: 24px; } .record-modal:target { display: flex; } .modal-backdrop { position: absolute; inset: 0; background: rgba(21, 21, 21, 0.42); } .modal-panel { position: relative; z-index: 1; width: min(920px, calc(100vw - 32px)); max-height: calc(100vh - 32px); overflow: auto; background: var(--paper) !important; border: 2px solid var(--line); border-radius: var(--radius); color: var(--ink) !important; box-shadow: 0 16px 40px rgba(0, 0, 0, 0.24); } .record-modal, .record-modal .modal-panel, .record-modal .modal-panel * { color: var(--ink) !important; } .modal-close { position: absolute; top: 12px; right: 12px; display: grid; place-items: center; width: 32px; height: 32px; background: var(--paper) !important; border: 1px solid var(--line); border-radius: 4px; color: var(--ink) !important; font-size: 18px; font-weight: 700; line-height: 1; text-decoration: none !important; } .modal-close:hover, .modal-close:focus-visible { background: #fffaf0 !important; outline: 2px solid var(--line); outline-offset: 2px; } .modal-head { padding: 18px 58px 12px 18px; border-bottom: 1px solid var(--line); } .modal-case { margin: 0 0 4px; color: var(--quiet) !important; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace !important; font-size: 12px; font-weight: 700; text-transform: uppercase; } .modal-head h3 { margin: 0; color: var(--ink) !important; font-size: 22px; line-height: 1.2; } .modal-subtitle { margin-top: 7px; color: var(--muted) !important; font-size: 13px; line-height: 1.45; } .modal-layout { display: grid; grid-template-columns: minmax(240px, 340px) 1fr; gap: 18px; padding: 18px; } .modal-visual .render-stage { height: 320px; margin: 0; } .modal-visual .packing-svg { max-width: 300px; max-height: 300px; } .download-actions { display: flex; justify-content: center; gap: 8px; margin-top: 10px; } .download-btn { appearance: none; min-height: 32px; padding: 6px 10px; background: var(--paper-soft) !important; border: 1px solid var(--line); border-radius: 4px; color: var(--ink) !important; cursor: pointer; font-size: 12px; font-weight: 700; line-height: 1; } .download-btn:hover, .download-btn:focus-visible { background: #fffaf0 !important; outline: 2px solid var(--line); outline-offset: 2px; } .modal-metric { margin-bottom: 14px; padding: 10px 12px; background: var(--paper-soft) !important; border: 1px solid var(--line-soft); border-radius: var(--radius); } .modal-metric strong { display: block; color: var(--ink) !important; font-size: 20px; line-height: 1.2; } .modal-metric span { display: block; margin-top: 3px; color: var(--muted) !important; font-size: 13px; } .modal-details { margin: 0; display: grid; grid-template-columns: 142px minmax(0, 1fr); gap: 8px 14px; color: var(--muted) !important; font-size: 13px; line-height: 1.42; } .modal-details dt { color: var(--ink) !important; font-weight: 700; } .modal-details dd { margin: 0; color: var(--muted) !important; overflow-wrap: anywhere; } .modal-details a { color: var(--link) !important; } .previous-bests-table { width: 100%; border-collapse: collapse; background: var(--paper) !important; color: var(--ink) !important; font-size: 12px; } .previous-bests-table th, .previous-bests-table td { padding: 6px 7px; border: 1px solid var(--line-soft); color: var(--ink) !important; text-align: left; vertical-align: top; } .previous-bests-table th { background: var(--paper-soft) !important; font-weight: 700; } .date-source { color: var(--muted) !important; } .record-modal .modal-panel .modal-case { color: var(--quiet) !important; } .record-modal .modal-panel .modal-subtitle, .record-modal .modal-panel .modal-metric span, .record-modal .modal-panel .modal-details, .record-modal .modal-panel .modal-details dd { color: var(--muted) !important; } .record-modal .modal-panel .modal-head h3, .record-modal .modal-panel .modal-metric strong, .record-modal .modal-panel .modal-details dt, .record-modal .modal-panel .modal-subtitle strong, .record-modal .modal-panel .modal-close { color: var(--ink) !important; } .record-modal .modal-panel .modal-details a { color: var(--link) !important; } .leaderboard-table { width: 100%; border-collapse: collapse; background: var(--paper); border: 1px solid var(--line); } .leaderboard-table th, .leaderboard-table td { padding: 10px 12px; border-bottom: 1px solid var(--line-soft); color: var(--ink); text-align: left; vertical-align: top; } .leaderboard-table th { background: var(--paper-soft); font-size: 12px; text-transform: uppercase; } .leaderboard-table th:not(:nth-child(2)), .leaderboard-table td:not(:nth-child(2)) { text-align: center; } .leaderboard-table th:nth-child(2), .leaderboard-table td:nth-child(2) { text-align: left; } .leaderboard-table strong, .leaderboard-table a { color: var(--ink) !important; } .leaderboard-best { font-weight: 800; } .leaderboard-best strong { font-weight: 800; } .case-links { max-width: 560px; color: var(--ink); font-size: 13px; line-height: 1.55; } .case-links a { display: inline-block; margin-right: 6px; color: var(--link) !important; } .leaderboard-author-link, .leaderboard-author-link strong { color: var(--ink) !important; font-weight: 700; } .leaderboard-author-link { text-decoration: underline; text-underline-offset: 2px; } .leaderboard-table .leaderboard-open { white-space: nowrap; } .leaderboard-stat-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 0 0 16px; } .leaderboard-stat { padding: 10px 12px; background: var(--paper-soft); border: 1px solid var(--line-soft); border-radius: var(--radius); } .leaderboard-stat strong { display: block; color: var(--ink) !important; font-size: 22px; line-height: 1.15; } .leaderboard-stat span { display: block; margin-top: 3px; color: var(--muted) !important; font-size: 12px; } .leaderboard-class-strip { display: flex; flex-wrap: wrap; gap: 7px; margin: 0 0 14px; } .leaderboard-class-strip span { display: inline-flex; align-items: center; gap: 5px; padding: 4px 7px; background: #fff !important; border: 1px solid var(--line-soft); border-radius: 4px; color: var(--muted) !important; font-size: 12px; } .leaderboard-class-strip strong { color: var(--ink) !important; } .leaderboard-full-list { display: flex; flex-wrap: wrap; gap: 6px; max-height: 260px; overflow: auto; padding: 1px; } .leaderboard-full-list a { display: inline-block; padding: 4px 7px; color: var(--ink) !important; background: #fff !important; border: 1px solid var(--line-soft); border-radius: 4px; font-size: 12px; line-height: 1.2; text-decoration: none; } .leaderboard-modal .modal-layout { grid-template-columns: 1fr; } .leaderboard-modal .case-links { max-width: none; margin-bottom: 14px; } .submit-shell, .schema-shell, .family-button-shell { width: min(1180px, calc(100% - 32px)); margin: 18px auto 44px; color: var(--ink) !important; } .submit-hero { padding-bottom: 0; } .submit-hero .section-head { align-items: start; } .submit-flow { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 16px; } .submission-guide { margin-top: 18px; } .guide-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .guide-card { min-width: 0; padding: 14px; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); } .guide-card.wide { grid-column: 1 / -1; } .guide-card h3 { margin: 0 0 8px; color: var(--ink); font-size: 16px; line-height: 1.25; } .guide-card p, .guide-card li { color: var(--muted) !important; font-size: 13px; line-height: 1.45; } .guide-card ul { margin: 8px 0 0; padding-left: 18px; } .code-block { max-height: 360px; overflow: auto; margin: 10px 0 0; padding: 12px; background: #fff !important; color: var(--ink) !important; border: 1px solid var(--line-soft); border-radius: var(--radius); font-size: 12px; line-height: 1.45; white-space: pre; } .code-block code { color: var(--ink) !important; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace !important; } .submit-step { min-height: 96px; padding: 12px; background: var(--paper-soft); border: 1px solid var(--line); border-radius: var(--radius); } .submit-step strong { display: block; margin-bottom: 4px; color: var(--ink); font-size: 14px; } .submit-step span { color: var(--muted) !important; font-size: 13px; line-height: 1.4; } .submit-shell > .gradio-group, .schema-shell > .gradio-group, .family-button-shell > .gradio-group, .gradio-container .accordion, .gradio-container .block, .gradio-container .form, .gradio-container .panel, .gradio-container .input-container, .gradio-container .wrap { background: var(--paper) !important; color: var(--ink) !important; border-color: var(--line-soft) !important; box-shadow: none !important; } .submit-shell > .gradio-group { padding: 0 !important; background: transparent !important; border: 0 !important; } .submit-layout { align-items: stretch !important; gap: 14px !important; } .submit-editor, .submit-meta, .submit-results { min-width: 0; } .submit-panel, .submit-doc-panel, .submit-results-card { height: 100%; padding: 14px !important; background: var(--paper) !important; border: 1px solid var(--line) !important; border-radius: var(--radius) !important; box-shadow: none !important; } .submit-panel-title { margin: 0 0 10px; color: var(--ink); font-size: 16px; line-height: 1.25; font-weight: 700; } .submit-panel-note { margin: -4px 0 12px; color: var(--muted) !important; font-size: 13px; line-height: 1.45; } .submit-actions { gap: 8px !important; } .submit-actions button { min-height: 38px !important; font-weight: 700 !important; } .verification-report { min-height: 152px; margin-top: 8px; padding: 12px; background: var(--paper-soft) !important; color: var(--ink) !important; border: 1px solid var(--line-soft) !important; border-radius: var(--radius); } .verification-report, .verification-report *, .submit-results-card .verification-report, .submit-results-card .verification-report * { color: var(--ink) !important; } .verification-report .markdown, .verification-report .prose, .verification-report [data-testid="markdown"], .verification-report [class*="markdown"], .verification-report [class*="prose"] { background: transparent !important; color: var(--ink) !important; } .verification-report h1, .verification-report h2, .verification-report h3, .verification-report h4 { margin-top: 0 !important; color: var(--ink) !important; } .verification-report p, .verification-report li, .verification-report ul, .verification-report ol { color: var(--ink) !important; } .verification-report code { display: inline-block; padding: 1px 5px; background: #fff !important; color: var(--ink) !important; border: 1px solid var(--line-soft); border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace !important; } .verification-report pre, .verification-report pre code { display: block; background: #fff !important; color: var(--ink) !important; border-color: var(--line-soft) !important; } .submit-docs { margin-top: 14px; } .submit-docs .accordion, .submit-docs details { border: 1px solid var(--line) !important; border-radius: var(--radius) !important; background: var(--paper) !important; } .submit-docs code, .submit-docs pre { background: #fff !important; border-color: var(--line-soft) !important; } .gradio-container label, .gradio-container .label-wrap, .gradio-container .markdown, .gradio-container .prose, .gradio-container p, .gradio-container span, .gradio-container h1, .gradio-container h2, .gradio-container h3, .gradio-container h4, .gradio-container code, .gradio-container pre { color: var(--ink) !important; } .gradio-container textarea, .gradio-container input, .gradio-container select, .gradio-container [role="combobox"], .gradio-container .input-container textarea, .gradio-container .input-container input { background: #fff !important; color: var(--ink) !important; border-color: var(--line-soft) !important; } .gradio-container [role="listbox"], .gradio-container [role="option"], .gradio-container .dropdown, .gradio-container .options, .gradio-container .item { background: #fff !important; color: var(--ink) !important; } .gradio-container .code_wrap, .gradio-container .cm-editor, .gradio-container .cm-scroller, .gradio-container .cm-content, .gradio-container .cm-gutters, .gradio-container .cm-line, .gradio-container .cm-activeLine, .gradio-container .cm-activeLineGutter { background: #fff !important; color: var(--ink) !important; border-color: var(--line-soft) !important; } .gradio-container .cm-cursor { border-left-color: var(--ink) !important; } .gradio-container button { border-radius: 4px !important; border: 1px solid var(--line) !important; box-shadow: none !important; color: var(--ink) !important; background: #fff !important; } .gradio-container button.primary, .gradio-container button[variant="primary"] { color: #fff !important; background: var(--green-strong) !important; } .preview-card { max-width: 420px; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px; } .preview-card .render-stage { height: 340px; margin: 0; } .preview-card .packing-svg { max-width: 315px; max-height: 315px; } @media (max-width: 720px) { .contain, .submit-shell, .schema-shell, .family-button-shell { width: min(100% - 22px, 1180px); } .hero-stage { padding-top: 26px; } .hero-stage h1 { font-size: 30px; } .family-title-card, .section-head { display: block; } .submit-flow { grid-template-columns: 1fr; } .guide-grid { grid-template-columns: 1fr; } .site-nav { padding: 7px 11px !important; } .site-nav-link.submit-link { margin-left: 0 !important; } .record-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); } .record-modal { padding: 12px; } .modal-head { padding: 16px 54px 12px 14px; } .modal-layout { display: block; padding: 14px; } .modal-visual { margin-bottom: 14px; } .modal-visual .render-stage { height: 240px; } .modal-visual .packing-svg { max-width: 220px; max-height: 220px; } .modal-details { grid-template-columns: 1fr; gap: 3px; } .modal-details dd { margin-bottom: 8px; } .leaderboard-stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .render-stage { height: 154px; } .packing-svg { max-width: 140px; max-height: 140px; } } """ APP_JS = """ () => { const cleanHomeUrl = () => `${window.location.origin}${window.location.pathname}`; const SVG_DOWNLOAD_STYLE = ` .shape-item { fill: #999999; stroke: #000000; stroke-width: 1.5px; stroke-linejoin: round; vector-effect: non-scaling-stroke; } .shape-item.inner-tri { fill: #e69f00; } .shape-item.inner-cir { fill: #56b4e9; } .shape-item.inner-squ { fill: #009e73; } .shape-item.inner-pen { fill: #f0e442; } .shape-item.inner-hex { fill: #0072b2; } .shape-item.inner-oct { fill: #d55e00; } .shape-item.inner-dom { fill: #cc79a7; } .shape-container { fill: none; stroke: #000000; stroke-width: 2.6px; stroke-linejoin: round; vector-effect: non-scaling-stroke; } `; const sanitizedFileName = (name, extension) => { const base = (name || "packing-record") .replace(/@/g, "-") .replace(/[^a-zA-Z0-9._-]+/g, "-") .replace(/^-+|-+$/g, "") || "packing-record"; return base.toLowerCase().endsWith(`.${extension}`) ? base : `${base}.${extension}`; }; const serializePackingSvg = (svg) => { const clone = svg.cloneNode(true); clone.setAttribute("xmlns", "http://www.w3.org/2000/svg"); clone.setAttribute("width", "900"); clone.setAttribute("height", "900"); if (!clone.getAttribute("viewBox")) { const box = svg.getBBox ? svg.getBBox() : null; if (box) { clone.setAttribute("viewBox", `${box.x} ${box.y} ${box.width} ${box.height}`); } } const style = document.createElementNS("http://www.w3.org/2000/svg", "style"); style.textContent = SVG_DOWNLOAD_STYLE; clone.insertBefore(style, clone.firstChild); return `\n${new XMLSerializer().serializeToString(clone)}`; }; const triggerFileDownload = (blob, filename) => { const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = filename; document.body.appendChild(link); link.click(); link.remove(); window.setTimeout(() => URL.revokeObjectURL(url), 1000); }; const downloadSvg = (svg, filenameBase) => { const source = serializePackingSvg(svg); triggerFileDownload(new Blob([source], {type: "image/svg+xml;charset=utf-8"}), sanitizedFileName(filenameBase, "svg")); }; const downloadPng = (svg, filenameBase) => { const source = serializePackingSvg(svg); const svgBlob = new Blob([source], {type: "image/svg+xml;charset=utf-8"}); const url = URL.createObjectURL(svgBlob); const image = new Image(); image.onload = () => { const size = 900; const canvas = document.createElement("canvas"); canvas.width = size; canvas.height = size; const context = canvas.getContext("2d"); context.clearRect(0, 0, size, size); context.drawImage(image, 0, 0, size, size); URL.revokeObjectURL(url); canvas.toBlob((blob) => { if (blob) { triggerFileDownload(blob, sanitizedFileName(filenameBase, "png")); } }, "image/png"); }; image.onerror = () => { URL.revokeObjectURL(url); window.alert("Could not prepare this rendering for download."); }; image.src = url; }; const handleImageDownload = (event) => { const button = event.target && event.target.closest ? event.target.closest("[data-download-image]") : null; if (!button) { return; } event.preventDefault(); event.stopPropagation(); if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } const scope = button.closest(".modal-panel, .preview-card, .record-card, .family-card, .packing-shell") || document; const svg = scope.querySelector("svg.packing-svg"); if (!svg) { window.alert("No coordinate rendering is available for this record yet."); return; } const format = button.getAttribute("data-download-image"); const filenameBase = button.getAttribute("data-download-filename") || svg.getAttribute("aria-label") || "packing-record"; if (format === "png") { downloadPng(svg, filenameBase); } else { downloadSvg(svg, filenameBase); } }; const normalizedLabels = (element) => { if (!element) { return []; } return [ element.getAttribute("aria-label"), element.innerText, element.textContent, ].map((value) => (value || "").replace(/\\s+/g, " ").trim().toLowerCase()).filter(Boolean); }; const isInsideBenchmarkUi = (element) => Boolean( element.closest(".packing-shell, .site-nav, .submit-shell, .schema-shell, .record-modal, .modal-panel") ); const hideGradioChrome = () => { Array.from(document.querySelectorAll("footer, button, a")).forEach((element) => { if (isInsideBenchmarkUi(element)) { return; } const labels = normalizedLabels(element).join(" "); const text = (element.innerText || element.textContent || "").replace(/\\s+/g, "").trim(); const rect = element.getBoundingClientRect ? element.getBoundingClientRect() : null; const iconOnlyTopRight = rect && rect.top >= 0 && rect.top < 84 && rect.right > window.innerWidth - 120 && rect.width <= 84 && rect.height <= 84 && Boolean(element.querySelector && element.querySelector("svg")); const chromeText = /settings|more|menu|useviaapi|builtwithgradio/.test(labels.replace(/\\s+/g, "")) || /^(\\.\\.\\.|…|⋯|⋮)$/.test(text); if (chromeText || iconOnlyTopRight || element.tagName.toLowerCase() === "footer") { element.style.setProperty("display", "none", "important"); element.setAttribute("aria-hidden", "true"); } }); }; const panelIds = { home: "home-panel", leaderboard: "leaderboard-panel", submit: "submit-entry-panel", }; const panelElements = (id) => Array.from(document.querySelectorAll(`[id="${id}"]`)); const setPanelVisible = (id, visible) => { const elements = panelElements(id); if (!elements.length) { return; } elements.forEach((element) => { if (visible) { element.style.setProperty("display", "block", "important"); } else { element.style.setProperty("display", "none", "important"); } }); }; const applyRoute = (route) => { const selected = route === "leaderboard" || route === "submit" ? route : "home"; if (document.body) { document.body.dataset.packingRoute = selected; } Object.entries(panelIds).forEach(([name, id]) => setPanelVisible(id, name === selected)); document.querySelectorAll("[data-route]").forEach((element) => { element.classList.toggle("active", element.getAttribute("data-route") === selected); }); hideGradioChrome(); }; const currentRoute = () => { const hash = (window.location.hash || "").replace(/^#/, ""); if (hash === "home" || hash === "home-panel") { return "home"; } if (hash === "leaderboard" || hash === "leaderboard-panel") { return "leaderboard"; } if (hash === "submit" || hash === "submit-entry-panel") { return "submit"; } if (hash === "leaderboard-table" || hash.startsWith("leaderboard-author-")) { return "leaderboard"; } const view = new URLSearchParams(window.location.search).get("view"); if (view === "leaderboard" || view === "submit") { return view; } return (document.body && document.body.dataset.packingRoute) || "home"; }; const syncRoute = () => applyRoute(currentRoute()); const routeFromClick = (event) => { const control = event.target && event.target.closest ? event.target.closest("[data-route], .site-nav-link") : null; if (!control) { return; } const route = control.getAttribute("data-route"); if (!route) { return; } if (route === "home") { event.preventDefault(); event.stopPropagation(); if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } window.location.assign(cleanHomeUrl()); return; } if (route === "leaderboard" || route === "submit") { event.preventDefault(); event.stopPropagation(); if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } window.history.pushState(null, "", `${cleanHomeUrl()}#${panelIds[route]}`); applyRoute(route); window.setTimeout(syncRoute, 40); } }; document.addEventListener("click", handleImageDownload, true); document.addEventListener("click", routeFromClick, true); window.addEventListener("popstate", syncRoute); window.addEventListener("hashchange", syncRoute); document.addEventListener("DOMContentLoaded", syncRoute); syncRoute(); [40, 140, 400, 900, 1800, 3200].forEach((delay) => window.setTimeout(syncRoute, delay)); new MutationObserver(syncRoute).observe(document.documentElement || document, {childList: true, subtree: true}); } """ APP_HEAD = f""" """ SAMPLE_JSON = """{ "schema_version": "packing-benchmark/v1", "case": "triincir@3", "item": {"type": "regular_polygon", "sides": 3, "side_length": 1}, "container": {"type": "circle", "radius": 0.9535486885675039}, "placements": [ {"x": -0.48390173508543094, "y": -0.09165750515220272, "rotation_radians": 2.1788614979094425}, {"x": 0.3742168507072296, "y": 0.03886972736029847, "rotation_radians": 2.1788160455636896}, {"x": -0.23841900077460812, "y": 0.43093650446493803, "rotation_radians": 3.2260428170876376} ] }""" CIRCLE_SQUARE_JSON = """{ "schema_version": "packing-benchmark/v1", "case": "cirinsqu@4", "item": {"type": "circle", "radius": 0.5}, "container": {"type": "rectangle", "width": 2.0, "height": 2.0}, "placements": [ {"x": -0.5, "y": -0.5, "rotation_radians": 0.0}, {"x": 0.5, "y": -0.5, "rotation_radians": 0.0}, {"x": -0.5, "y": 0.5, "rotation_radians": 0.0}, {"x": 0.5, "y": 0.5, "rotation_radians": 0.0} ] }""" RECTANGLE_JSON = """{ "schema_version": "packing-benchmark/v1", "case": "rectinrect@2", "item": {"type": "rectangle", "width": 2.0, "height": 1.0}, "container": {"type": "rectangle", "width": 2.0, "height": 2.0}, "placements": [ {"x": 0.0, "y": -0.5, "rotation_radians": 0.0}, {"x": 0.0, "y": 0.5, "rotation_radians": 0.0} ] }""" PYTHON_GENERATOR_SNIPPET = """import json def placement(x, y, rotation=0.0): return {"x": float(x), "y": float(y), "rotation_radians": float(rotation)} solution = { "schema_version": "packing-benchmark/v1", "case": "cirinsqu@4", "item": {"type": "circle", "radius": 0.5}, "container": {"type": "rectangle", "width": 2.0, "height": 2.0}, "placements": [ placement(-0.5, -0.5), placement(0.5, -0.5), placement(-0.5, 0.5), placement(0.5, 0.5), ], } print(json.dumps(solution, indent=2))""" JAVASCRIPT_GENERATOR_SNIPPET = """const placement = (x, y, rotation = 0) => ({ x, y, rotation_radians: rotation, }); const solution = { schema_version: "packing-benchmark/v1", case: "rectinrect@2", item: {type: "rectangle", width: 2.0, height: 1.0}, container: {type: "rectangle", width: 2.0, height: 2.0}, placements: [ placement(0, -0.5), placement(0, 0.5), ], }; console.log(JSON.stringify(solution, null, 2));""" SCHEMA_TEXT = """Canonical submission JSON: { "schema_version": "packing-benchmark/v1", "case": "triintri@1", "item": { "type": "regular_polygon", "sides": 3, "side_length": 1 }, "container": { "type": "regular_polygon", "sides": 3, "side_length": 1, "orientation_radians": 0 }, "placements": [ {"x": 0, "y": 0, "rotation_radians": 0} ] } Supported shapes: - regular_polygon: sides plus side_length or circumradius - circle: radius or diameter - rectangle: width and height If redundant dimensions are included, they must agree. For example, side_length and circumradius must describe the same regular polygon. The metric is computed from the geometry that is actually verified. Coordinate convention: - origin at the container center - item placements are item centers - rotations are radians counterclockwise - touching is legal; overlap and protrusion are rejected """ EXAMPLES_MD = f"""### How Submission Works Paste one canonical coordinate JSON object, click **Verify**, then click **Submit Entry** if it passes. The geometry tolerance is fixed by the evaluator and is not user-selectable. For an existing case, a submission must improve the current top metric by at least `0.0001` to be accepted as a new record. Cases with no current record can be submitted through `n = {SUBMISSION_MAX_NEW_CASE_N}`. In these tables, smaller metric values are better. ### Test Locally With The Open Verifier The verifier code is public at [{VERIFIER_REPO_URL}]({VERIFIER_REPO_URL}). It is dependency-free Python and exposes the same geometry check used by this Space. ```bash python -m pip install git+{VERIFIER_REPO_URL}.git packing-verifier verify solution.json packing-verifier verify solution.json --json ``` The local verifier checks geometry and reports the leaderboard metric. The Space still applies the live record gate when you submit: existing cases must improve the current top metric by at least `0.0001`. ### Three Triangles In A Circle Example This prefilled example is a verified `triincir@3` coordinate layout and a good shape for checking the schema: ```json {SAMPLE_JSON} ``` ### Submission Checklist - The `case` suffix must match the number of placements, for example `triincir@3` has three placements. - Use container-centered coordinates. - Use radians for `rotation_radians`. - Click **Verify** before submitting; the preview is rendered from the same canonical JSON that is archived. - Existing cases must beat the current top metric by at least `0.0001`. - Cases with no current record can be submitted when `n <= {SUBMISSION_MAX_NEW_CASE_N}`. """ SCHEMA_DOCS_MD = """### Canonical Fields Required top-level fields: ```json { "case": "triintri@1", "item": {"type": "regular_polygon", "sides": 3, "side_length": 1}, "container": {"type": "regular_polygon", "sides": 3, "side_length": 1}, "placements": [{"x": 0, "y": 0, "rotation_radians": 0}] } ``` Supported shape specs: - `regular_polygon`: `sides` plus `side_length` or `circumradius` - `circle`: `radius` or `diameter` - `rectangle`: `width` and `height` The verifier uses a fixed geometry tolerance. Existing cases must improve the current top metric by at least `0.0001` before they can be submitted as records. Cases with no current record can be submitted through `n = 100`. """ + f""" ### Four Circles In A Square ```json {CIRCLE_SQUARE_JSON} ``` ### Two Rectangles In A Rectangle ```json {RECTANGLE_JSON} ``` """ MONTHS = ( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ) def esc(value: Any) -> str: return html.escape("" if value is None else str(value), quote=True) def code_block(code: str, language: str = "json") -> str: return f'
{esc(code)}
' def submission_guide_html() -> str: return f"""

Canonical Coordinate JSON

A submission is one JSON object. The container is centered at the origin, every placement is an item center, rotations are counterclockwise radians, and the number after @ in case must match the number of placements.

  • regular_polygon: use sides plus side_length or circumradius.
  • circle: use radius or diameter.
  • rectangle: use width and height. Use this for square containers too.

Redundant dimensions must agree. If both side_length and circumradius are present, the verifier rejects the JSON unless they describe the same polygon.

{code_block(SAMPLE_JSON)}

Example: Four Circles In A Square

This is a compact sanity check for circle placements and square containers.

{code_block(CIRCLE_SQUARE_JSON)}

Example: Two Rectangles

Rectangles use the same center and rotation convention as polygons.

{code_block(RECTANGLE_JSON)}

Generate JSON With Python

Use this pattern when exporting coordinates from a solver or notebook.

{code_block(PYTHON_GENERATOR_SNIPPET, "python")}

Generate JSON With JavaScript

This produces the same canonical shape from a browser, Node script, or visualization tool.

{code_block(JAVASCRIPT_GENERATOR_SNIPPET, "javascript")}
""" def setup_title(setup: str) -> str: for record in cached_reference_records(): if record.get("setup") == setup and record.get("title"): return str(record["title"]) return setup def setup_updated(setup: str) -> str: update = cached_family_updates().get(setup) if isinstance(update, dict): text = str(update.get("text") or "").strip() if text: return text for record in cached_reference_records(): if record.get("setup") != setup: continue meta = record.get("friedman_reference") if isinstance(meta, dict) and meta.get("family_updated"): return str(meta["family_updated"]) if record.get("friedman_family_updated"): return str(record["friedman_family_updated"]) return "" def setup_update_date_info(setup: str) -> dict[str, Any] | None: update = cached_family_updates().get(setup) if isinstance(update, dict): return update updated = setup_updated(setup) return parse_friedman_date_text(updated, "Erich Friedman Packing Center index") if updated else None @lru_cache(maxsize=96) def setup_choices() -> list[str]: choices = { str(record["setup"]) for record in cached_reference_records() if record.get("setup") } choices.update( str(record["setup"]) for record in cached_verified_records() if record.get("verified") and record.get("setup") ) return sorted(choices, key=lambda setup: (setup_title(setup).lower(), setup.lower())) def is_analytical(record: dict[str, Any]) -> bool: text = f"{record.get('reference_text', '')} {record.get('metric_expression', '')}".lower() expression = str(record.get("metric_expression") or "") exact_tokens = ("√", "pi", "π", "cos", "sin", "tan", "/", "^") proof_tokens = ("trivial", "proved", "proven", "optimal") return any(token in text for token in proof_tokens) or any(token in expression.lower() for token in exact_tokens) def effective_record_date(record: dict[str, Any]) -> dict[str, Any]: info = record.get("record_date") if isinstance(info, dict): return info if record.get("record_type") == "reference" or record.get("frontend_seed") or is_trivial_record(record): return date_from_friedman_record(record) return date_from_submission(record) def display_date(record: dict[str, Any]) -> str: return display_date_info(effective_record_date(record)) def record_date_with_source(record: dict[str, Any]) -> str: info = effective_record_date(record) text = display_date_info(info) source = str(info.get("source") or "").strip() if isinstance(info, dict) else "" if source and text != "date not listed": return f"{esc(text)} ({esc(source)})" return esc(text) def is_recent_record(record: dict[str, Any]) -> bool: return is_recent_date_info(effective_record_date(record)) def friedman_reference(record: dict[str, Any]) -> dict[str, Any]: meta = record.get("friedman_reference") if isinstance(meta, dict): return meta return { "title": record.get("title") or record.get("friedman_title"), "metric_symbol": record.get("metric_symbol") or record.get("friedman_metric_symbol"), "metric_value": record.get("metric_value") or record.get("friedman_metric_value"), "metric_expression": record.get("metric_expression") or record.get("friedman_metric_expression"), "credit": record.get("submitted_by") or record.get("friedman_credit"), "date": record.get("friedman_date"), "source_page": record.get("source_url") or record.get("friedman_source_url"), "source_image": record.get("source_image") or record.get("friedman_source_image"), "source_image_url": record.get("external_image_url") or record.get("friedman_external_image_url"), "reference_text": record.get("reference_text") or record.get("friedman_reference_text"), "analytical_or_proved": is_analytical(record), } def reference_date(record: dict[str, Any]) -> str: meta = friedman_reference(record) date = str(meta.get("date") or "").strip() if date: return date return display_date({"reference_text": meta.get("reference_text", "")}) def reference_credit(record: dict[str, Any]) -> str: meta = friedman_reference(record) return str(meta.get("credit") or "unknown").strip() or "unknown" def source_image_name(record: dict[str, Any]) -> str: meta = friedman_reference(record) return str(meta.get("source_image") or "").strip() def author_name(record: dict[str, Any]) -> str: return str(record.get("submitted_by") or "unknown").strip() or "unknown" def display_author(record: dict[str, Any]) -> str: try: if int(record.get("n") or 0) == 1: return "Trivial" except (TypeError, ValueError): pass if record.get("record_type") == "reference": return reference_credit(record) author = author_name(record) if record.get("frontend_seed"): prior = reference_credit(record) if prior not in {"unknown", "Erich Friedman Packing Center"}: return prior return author def author_credit_html(author: str) -> str: if author.strip().lower() == "trivial": return 'Trivial' return f"by {esc(author)}" def existing_author_choices() -> list[str]: seen: dict[str, str] = {} for record in [*cached_reference_records(), *cached_verified_records()]: name = display_author(record) normalized = name.strip() if not normalized or normalized.lower() in {"unknown", "anonymous"}: continue seen.setdefault(normalized.casefold(), normalized) return sorted(seen.values(), key=lambda value: value.casefold()) def metric_symbol(record: dict[str, Any]) -> str: return str(record.get("metric_symbol") or "s") def metric_value(record: dict[str, Any]) -> str: value = record.get("metric_value") if value is None: value = record.get("side") if value is None: return "not reported" try: return f"{float(value):.5f}" except (TypeError, ValueError): return str(value) def numeric_metric(record: dict[str, Any]) -> float | None: value = record.get("metric_value") if value is None: value = record.get("side") try: parsed = float(value) except (TypeError, ValueError): return None return parsed if math.isfinite(parsed) else None def compact_expression(record: dict[str, Any]) -> str: expression = str(record.get("metric_expression") or "").strip() if record.get("metric_value_source") == "exact_expression" and "=" in expression: value = numeric_metric(record) if value is not None: expression = f"{expression.split('=', 1)[0].strip()} = {value:.5f}" expression = re.sub(r"\s+", " ", expression) if len(expression) > 92: expression = expression[:89].rstrip() + "..." return expression def shape_points(shape: dict[str, Any]) -> list[tuple[float, float]]: if shape["kind"] == "circle": cx, cy = shape["center"] r = shape["radius"] return [(cx - r, cy - r), (cx + r, cy + r)] return list(shape["vertices"]) def inline_solution_svg(solution: dict[str, Any]) -> str: solution = normalize_solution(solution) container = make_container_shape(solution["container"]) shapes = [make_item_shape(solution["item"], placement) for placement in solution["placements"]] points = shape_points(container) for shape in shapes: points.extend(shape_points(shape)) xs = [x for x, _ in points] ys = [y for _, y in points] minx, maxx = min(xs), max(xs) miny, maxy = min(ys), max(ys) span = max(maxx - minx, maxy - miny, 1.0e-9) pad = span * 0.075 view = f"{minx - pad:.12g} {-maxy - pad:.12g} {maxx - minx + 2 * pad:.12g} {maxy - miny + 2 * pad:.12g}" item_stroke = max(span / 360.0, 0.004) container_stroke = item_stroke * 2.2 item_class = item_class_from_spec(solution["item"]) def pts(poly: list[tuple[float, float]]) -> str: return " ".join(f"{x:.12g},{-y:.12g}" for x, y in poly) body = [ f'', f" {esc(solution_case(solution))}", " ", ] for shape in shapes: if shape["kind"] == "circle": cx, cy = shape["center"] body.append( f' ' ) else: body.append(f' ') if container["kind"] == "circle": cx, cy = container["center"] body.append( f' ' ) else: body.append(f' ') body.extend([" ", ""]) return "\n".join(body) def source_link(record: dict[str, Any]) -> str: meta = friedman_reference(record) url = str(meta.get("source_page") or record.get("source_url") or "").strip() if not url: return "" return f'page' @lru_cache(maxsize=1) def coordinate_records_by_case() -> dict[str, dict[str, Any]]: best: dict[str, dict[str, Any]] = {} for record in cached_verified_records(): if not record.get("verified") or not record.get("solution_path"): continue case = str(record.get("case") or "") if not case: continue value = record.get("metric_value") if value is None: value = record.get("side") try: metric = float(value) except (TypeError, ValueError): metric = float("inf") current = best.get(case) current_value = current.get("metric_value") if current else None if current_value is None and current: current_value = current.get("side") try: current_metric = float(current_value) if current_value is not None else float("inf") except (TypeError, ValueError): current_metric = float("inf") if current is None or metric < current_metric: best[case] = record return best def visual_record_for(record: dict[str, Any], coordinates: dict[str, dict[str, Any]]) -> dict[str, Any]: visual_record = record if record.get("record_type") != "verified": visual_record = coordinates.get(str(record.get("case") or ""), record) return visual_record def record_visual(record: dict[str, Any], coordinates: dict[str, dict[str, Any]]) -> str: visual_record = visual_record_for(record, coordinates) if visual_record.get("record_type") == "verified" or visual_record.get("verified"): try: solution = STORE.solution_for_record(visual_record) return f'
{inline_solution_svg(solution)}
' except Exception as exc: return f'
render unavailable: {esc(exc)}
' return '
coordinate JSON not available yet
' def download_actions(filename: str) -> str: safe = esc(filename or "packing-record") return f"""
""" def detail_row(label: str, value: str) -> str: value = value.strip() if not value: return "" return f"
{esc(label)}
{value}
" def metric_text_from_values(symbol: Any, value: Any) -> str: try: return f"{esc(symbol or 's')} = {float(value):.5f}" except (TypeError, ValueError): return f"{esc(symbol or 's')} = {esc(value)}" def previous_bests_table(record: dict[str, Any]) -> str: previous = record.get("previous_bests") if not isinstance(previous, list) or not previous: return "" rows = [] for item in previous: if not isinstance(item, dict): continue date_info = item.get("date") date_text = display_date_info(date_info if isinstance(date_info, dict) else None) source_url = str(item.get("source_url") or "").strip() source = str(item.get("source") or "previous record").strip() source_cell = f'{esc(source)}' if source_url else esc(source) rows.append( "" f"{esc(item.get('author') or 'unknown')}" f"{esc(date_text)}" f"{metric_text_from_values(item.get('metric_symbol') or metric_symbol(record), item.get('metric_value'))}" f"{source_cell}" "" ) if not rows: return "" return ( '' "" f"{''.join(rows)}
AuthorDateMetricSource
" ) def visual_provenance(record: dict[str, Any], visual_record: dict[str, Any]) -> str: source_case = str(visual_record.get("monotone_upper_bound_from_case") or "").strip() if source_case: visual_metric = metric_value(visual_record) shown_metric = metric_value(record) suffix = "" if visual_metric != shown_metric: suffix = f" Coordinate JSON evaluator metric: {esc(metric_symbol(visual_record))} = {esc(visual_metric)}; Friedman reported metric: {esc(metric_symbol(record))} = {esc(shown_metric)}." return ( f"Verified monotone upper-bound layout derived by deleting items from {esc(source_case)}; " "the Friedman-listed finder remains credited for this row." ) + suffix if visual_record.get("frontend_seed"): visual_metric = metric_value(visual_record) shown_metric = metric_value(record) notes = str(visual_record.get("notes") or "").lower() suffix = "" if visual_metric != shown_metric: suffix = f" Coordinate JSON evaluator metric: {esc(metric_symbol(visual_record))} = {esc(visual_metric)}; Friedman reported metric: {esc(metric_symbol(record))} = {esc(shown_metric)}." if "image-seeded" in notes or "image seeded" in notes: return "Image-seeded from the Friedman source image and verified for rendering." + suffix if visual_record is record or visual_record.get("id") == record.get("id"): return "Verified coordinate layout credited under the public attribution policy." + suffix return "Verified coordinate rendering for the listed reference." + suffix if visual_record is record or visual_record.get("id") == record.get("id"): if visual_record.get("frontend_seed"): return "Generated verified coordinate layout; no Friedman coordinate record was listed for this case." return "Submitted coordinate JSON." return "Coordinate rendering attached to this case." def display_metric_record(record: dict[str, Any], visual_record: dict[str, Any]) -> dict[str, Any]: return record def record_detail_rows(record: dict[str, Any], visual_record: dict[str, Any], source: str, image_name: str, expression: str, analytical: Any) -> list[str]: rows: list[str] = [] rows.append(detail_row("Rendering", esc(visual_provenance(record, visual_record)))) rows.append(detail_row("Record date", record_date_with_source(record))) if record.get("record_type") == "reference" and visual_record.get("verified"): if is_trivial_record(record): rows.append( detail_row( "Coordinate JSON", "used only for rendering; the exact trivial value is shown as the record", ) ) else: rows.append( detail_row( "Coordinate JSON", f"{esc(metric_symbol(visual_record))} = {esc(metric_value(visual_record))} from the stored evaluator", ) ) rows.append( detail_row( "Friedman reference", f"{esc(metric_symbol(record))} = {esc(metric_value(record))} by {esc(reference_credit(record))}, {esc(reference_date(record))}", ) ) if record.get("record_type") == "verified": database_inserted_at = str(record.get("database_inserted_at") or record.get("submitted_at") or "").strip() database_info = date_from_submission({"submitted_at": database_inserted_at}) rows.append(detail_row("Database entry", esc(display_date_info(database_info)))) notes = str(record.get("notes") or "").strip() if notes: rows.append(detail_row("Notes", esc(notes))) rows.append(detail_row("Previous bests", previous_bests_table(record))) rows.append(detail_row("Formula", esc(expression))) if image_name: rows.append(detail_row("Source image", esc(image_name))) if source: rows.append(detail_row("Source", source)) if analytical: rows.append(detail_row("Status", "analytical/proved")) reference_text = str(friedman_reference(record).get("reference_text") or "").strip() rows.append(detail_row("Reference text", esc(reference_text))) return rows def record_modal( record: dict[str, Any], visual_record: dict[str, Any], display_record: dict[str, Any], coordinates: dict[str, dict[str, Any]], source: str, image_name: str, expression: str, analytical: Any, anchor: str, modal_id: str, visible_author: str, ) -> str: rows = record_detail_rows(record, visual_record, source, image_name, expression, analytical) visual_controls = download_actions(str(record.get("case") or modal_id)) if visual_record.get("verified") or visual_record.get("record_type") == "verified" else "" return f"""
""" def record_card(record: dict[str, Any], coordinates: dict[str, dict[str, Any]]) -> str: verified = record.get("record_type") == "verified" visual_record = visual_record_for(record, coordinates) display_record = display_metric_record(record, visual_record) source = source_link(record) expression = compact_expression(record) image_name = source_image_name(record) analytical = friedman_reference(record).get("analytical_or_proved") visible_author = display_author(record) card_class = "verified" if verified else "reference" if is_recent_record(record): card_class += " recent-record" recent = '' if is_recent_record(record) else "" anchor = f"{record.get('setup')}-{record.get('n')}" modal_id = f"modal-{anchor}" return f"""
{esc(record.get("case"))}{recent}
{record_visual(record, coordinates)}
{esc(metric_symbol(display_record))} = {esc(metric_value(display_record))}n={esc(record.get("n"))}
{esc(expression)}
{author_credit_html(visible_author)}
{record_modal(record, visual_record, display_record, coordinates, source, image_name, expression, analytical, anchor, modal_id, visible_author)} """ def setup_summary(setup: str) -> dict[str, Any]: records = cached_public_records(setup, False) coordinate_count = sum( 1 for record in cached_verified_records() if record.get("verified") and record.get("solution_path") and record.get("setup") == setup ) n_values = [int(r.get("n", 0)) for r in records if r.get("n") is not None] return { "setup": setup, "title": setup_title(setup), "records": records, "count": len(records), "verified": sum(1 for r in records if r.get("record_type") == "verified"), "coordinate_count": coordinate_count, "analytic": sum(1 for r in records if is_analytical(r)), "updated": setup_updated(setup), "updated_recent": is_recent_date_info(setup_update_date_info(setup)), "n_range": f"{min(n_values)}-{max(n_values)}" if n_values else "not listed", } def shape_phrase(code: str, plural: bool = False) -> str: names = { "cir": ("circle", "circles"), "dom": ("domino", "dominoes"), "tri": ("triangle", "triangles"), "squ": ("square", "squares"), "pen": ("regular pentagon", "regular pentagons"), "hex": ("regular hexagon", "regular hexagons"), "oct": ("regular octagon", "regular octagons"), "rect": ("rectangle", "rectangles"), } singular, many = names.get(code, (code, code + "s")) return many if plural else singular def parse_setup_codes(setup: str) -> tuple[str, str]: if "in" not in setup: return setup, "" return tuple(setup.split("in", 1)) # type: ignore[return-value] def inner_class(setup: str) -> str: item_code, _ = parse_setup_codes(setup) return f"inner-{re.sub(r'[^A-Za-z0-9_-]', '', item_code).lower()}" def item_class_from_spec(spec: dict[str, Any]) -> str: kind = str(spec.get("type") or "").strip().lower() if kind == "regular_polygon": sides = int(spec.get("sides", 0) or 0) code = {3: "tri", 4: "squ", 5: "pen", 6: "hex", 8: "oct"}.get(sides, "unknown") elif kind == "circle": code = "cir" elif kind == "rectangle": width = float(spec.get("width", 0) or 0) height = float(spec.get("height", 0) or 0) code = "dom" if width > 0 and height > 0 and abs(max(width, height) / min(width, height) - 2.0) < 1.0e-6 else "squ" else: code = "unknown" return f"inner-{code}" def family_description(summary: dict[str, Any]) -> str: item_code, container_code = parse_setup_codes(str(summary["setup"])) item = shape_phrase(item_code, plural=True) container = shape_phrase(container_code) updated = f" Friedman lists this family as updated {esc(summary['updated'])}." if summary.get("updated") else "" return ( f"This page tracks the smallest known container metric for packing n equal {esc(item)} " f"inside a {esc(container)}. The number shown on each card is the verified coordinate metric " f"for current coordinate records, or the listed reference metric when that is the better value. " f"Click a card to view the coordinate JSON metric, source information, and previous bests.{updated}" ) def family_preview(setup: str, coordinates: dict[str, dict[str, Any]]) -> str: record = coordinates.get(f"{setup}@10") if record is None: records = [ candidate for case, candidate in coordinates.items() if case.startswith(f"{setup}@") ] records.sort(key=lambda candidate: abs(int(candidate.get("n", 0)) - 10)) record = records[0] if records else None if record is None: return '
coordinate JSON not available yet
' try: return f'
{inline_solution_svg(STORE.solution_for_record(record))}
' except Exception as exc: return f'
render unavailable: {esc(exc)}
' def family_card(summary: dict[str, Any], coordinates: dict[str, dict[str, Any]]) -> str: setup = str(summary["setup"]) cls = inner_class(setup) recent = '' if summary.get("updated_recent") else "" return f""" {family_preview(setup, coordinates)}
{esc(setup)}

{esc(summary["title"])}{recent}

""" def front_family_card_html(setup: str, coordinates: dict[str, dict[str, Any]]) -> str: return family_card({"setup": setup, "title": setup_title(setup)}, coordinates) def family_rows_html(summaries: list[dict[str, Any]], coordinates: dict[str, dict[str, Any]]) -> str: container_order = {"tri": 0, "squ": 1, "pen": 2, "hex": 3, "oct": 4, "cir": 5, "dom": 6} rows: dict[str, list[dict[str, Any]]] = {} for summary in summaries: _, container_code = parse_setup_codes(str(summary["setup"])) rows.setdefault(container_code, []).append(summary) body = [] for container_code in sorted(rows, key=lambda code: (container_order.get(code, 99), shape_phrase(code))): cards = "".join( family_card(summary, coordinates) for summary in sorted(rows[container_code], key=lambda item: (parse_setup_codes(str(item["setup"]))[0], str(item["setup"]))) ) body.append( f"""
{cards}
""" ) return f'
{"".join(body)}
' @lru_cache(maxsize=96) def family_page_html(setup: str | None = None) -> str: choices = setup_choices() setup = setup if setup in choices else (choices[0] if choices else "") summary = setup_summary(setup) if setup else {"records": [], "setup": "", "title": ""} coordinates = coordinate_records_by_case() setup = str(summary["setup"]) records = summary["records"] cards = "".join(record_card(record, coordinates) for record in records) return f"""
{top_nav("home")}
{esc(setup)}

{esc(summary["title"])}

{family_description(summary)}

{cards}
""" def top_nav(active: str = "home") -> str: def nav_class(route: str, extra: str = "") -> str: classes = ["site-nav-link"] if route == active: classes.append("active") if extra: classes.append(extra) return " ".join(classes) return f""" """ @lru_cache(maxsize=4) def directory_html() -> str: choices = setup_choices() summaries = [setup_summary(setup) for setup in choices] coordinates = coordinate_records_by_case() family_rows = family_rows_html(summaries, coordinates) return f"""
{top_nav("home")}

Packing Benchmark

verified shape packing records, heavily inspired by Erich Friedman's Packing Center.

Choose a family

Choose a family to view its verified packing records.

{family_rows}
""" def browse_html() -> str: return directory_html() def loading_html() -> str: return """

Packing Benchmark

Loading records...

""" def home_page_for_request(request: gr.Request): try: query = dict(request.query_params) if request else {} except Exception: query = {} setup = str(query.get("family") or "").strip() if setup in setup_choices(): return family_page_html(setup) return gr.update() def condensed_case_links(cases: list[str]) -> str: grouped: dict[str, list[int]] = {} for case in cases: if "@" not in case: continue setup, n_text = case.rsplit("@", 1) try: n = int(n_text) except ValueError: continue grouped.setdefault(setup, []).append(n) links = [] for setup in sorted(grouped, key=lambda value: (setup_title(value).lower(), value)): values = sorted(set(grouped[setup])) n_text = ",".join(str(value) for value in values) label = f"{setup}@{{{n_text}}}" href = f"?family={setup}#{setup}-{values[0]}" links.append(f'{esc(label)}') return '" def slug_id(value: str) -> str: slug = re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-") return slug or "author" def sorted_case_names(cases: list[str]) -> list[str]: def key(case: str) -> tuple[str, int, str]: if "@" not in case: return (case.lower(), -1, case) setup, n_text = case.rsplit("@", 1) try: n = int(n_text) except ValueError: n = -1 return (setup_title(setup).lower(), n, case) return sorted(set(cases), key=key) def case_link(case: str) -> str: if "@" not in case: return esc(case) setup, n_text = case.rsplit("@", 1) href = f"?family={setup}#{setup}-{n_text}" return f'{esc(case)}' SHAPE_CLASS_ORDER = ("tri", "squ", "pen", "hex", "oct", "cir", "dom", "rect") def shape_class_sort_key(code: str) -> tuple[int, str]: try: index = SHAPE_CLASS_ORDER.index(code) except ValueError: index = len(SHAPE_CLASS_ORDER) return (index, shape_phrase(code, plural=True)) def leaderboard_shape_label(code: str) -> str: return shape_phrase(code, plural=True).replace("regular ", "") def setup_item_code(record: dict[str, Any]) -> str: setup = str(record.get("setup") or "") if not setup and record.get("case") and "@" in str(record.get("case")): setup = str(record["case"]).split("@", 1)[0] item_code, _ = parse_setup_codes(setup) return item_code or "other" def leaderboard_class_columns(rows: dict[str, dict[str, Any]]) -> list[str]: codes = { str(code) for stats in rows.values() for code, count in dict(stats.get("class_counts", {})).items() if int(count) > 0 } return sorted(codes, key=shape_class_sort_key) def leaderboard_author_modal(author: str, stats: dict[str, Any], rank: int, modal_id: str) -> str: cases = sorted_case_names([str(case) for case in stats.get("cases", [])]) family_count = len({case.rsplit("@", 1)[0] for case in cases if "@" in case}) all_links = "".join(case_link(case) for case in cases) grouped_links = condensed_case_links(cases) class_counts = dict(stats.get("class_counts", {})) class_badges = "".join( f'{int(class_counts.get(code, 0))}{esc(leaderboard_shape_label(code))}' for code in sorted(class_counts, key=shape_class_sort_key) if int(class_counts.get(code, 0)) > 0 ) return f"""
""" def leaderboard_html() -> str: rows: dict[str, dict[str, Any]] = {} coordinates = coordinate_records_by_case() for record in cached_public_records("", False): author = display_author(record) if author.strip().lower() == "trivial": continue entry = rows.setdefault(author, {"total_top": 0, "verified": 0, "cases": [], "class_counts": {}}) entry["total_top"] += 1 item_code = setup_item_code(record) entry["class_counts"][item_code] = int(entry["class_counts"].get(item_code, 0)) + 1 if record.get("record_type") == "verified": entry["verified"] += 1 entry["cases"].append(str(record.get("case"))) class_columns = leaderboard_class_columns(rows) class_headers = "".join(f"{esc(leaderboard_shape_label(code).title())}" for code in class_columns) total_top_max = max((int(stats["total_top"]) for stats in rows.values()), default=0) class_maxima = { code: max((int(dict(stats.get("class_counts", {})).get(code, 0)) for stats in rows.values()), default=0) for code in class_columns } sorted_rows = sorted(rows.items(), key=lambda item: (-int(item[1]["total_top"]), item[0].lower())) body_parts = [] modal_parts = [] for rank, (author, stats) in enumerate(sorted_rows, start=1): modal_id = f"leaderboard-author-{rank}-{slug_id(author)}" total_top = int(stats["total_top"]) total_cell_class = ' class="leaderboard-best"' if total_top == total_top_max and total_top > 0 else "" class_cells = "".join( ( f'{value}' if value == class_maxima.get(code, 0) and value > 0 else f"{value}" ) for code in class_columns for value in [int(dict(stats.get("class_counts", {})).get(code, 0))] ) body_parts.append( f""" {rank} {esc(author)} {f"{total_top}" if total_cell_class else total_top} {class_cells} """ ) modal_parts.append(leaderboard_author_modal(author, stats, rank, modal_id)) body = "\n".join(body_parts) modals = "\n".join(modal_parts) return f"""
{top_nav("leaderboard")}

Leaderboard

{class_headers}{body}
#AuthorTotal top
{modals}
""" def submit_schema_intro_html() -> str: return f"""
{top_nav("submit")}

Submit Entry

Paste one canonical coordinate JSON object. Existing cases must beat the current top metric by at least 0.0001; new no-record cases are accepted through n={SUBMISSION_MAX_NEW_CASE_N}. The open-source local verifier is available at github.com/Nathan-Roll1/packing-verifier.

""" def load_submission(json_text: str) -> dict[str, Any]: if not json_text or not json_text.strip(): raise ValueError("Paste canonical coordinate JSON.") return load_solution_json(json_text) def record_metric_float(record: dict[str, Any]) -> float | None: value = record.get("metric_value") if value is None: value = record.get("side") try: metric = float(value) except (TypeError, ValueError): return None return metric if math.isfinite(metric) else None def current_top_for_case(case: str) -> dict[str, Any] | None: candidates = [record for record in cached_public_records("", False) if str(record.get("case")) == case] candidates = [record for record in candidates if record_metric_float(record) is not None] if not candidates: return None return min(candidates, key=lambda record: record_metric_float(record) or float("inf")) def submitted_metric_for_result(result: dict[str, Any], current: dict[str, Any] | None) -> tuple[str, float | None]: symbol = str(result.get("metric_symbol") or (current or {}).get("metric_symbol") or "s") try: metric = float(result.get("metric_value")) except (TypeError, ValueError): try: side = float(result.get("side")) except (TypeError, ValueError): return symbol, None metric = side * 0.5 if symbol == "r" else side if not math.isfinite(metric): return symbol, None return symbol, metric def submission_gate(result: dict[str, Any]) -> tuple[bool, str]: if not result.get("ok"): return False, "Geometry verification failed." try: submitted_n = int(result.get("n") or 0) except (TypeError, ValueError): return False, "The evaluator could not determine the number of submitted items." current = current_top_for_case(str(result.get("case") or "")) symbol, submitted_metric = submitted_metric_for_result(result, current) if submitted_metric is None: return False, "The evaluator could not compute a submitted metric." if current is None: if submitted_n > SUBMISSION_MAX_NEW_CASE_N: return ( False, f"No current top record exists for this case, and new no-record cases are accepted only through n={SUBMISSION_MAX_NEW_CASE_N}.", ) return True, f"No current top record exists for this case; valid new cases can be submitted through n={SUBMISSION_MAX_NEW_CASE_N}." current_symbol = str(current.get("metric_symbol") or symbol) if current_symbol != symbol: return False, f"Submitted metric symbol {symbol!r} does not match current record metric symbol {current_symbol!r}." current_metric = record_metric_float(current) if current_metric is None: return True, "No comparable current top metric exists; a valid geometry can be submitted." improvement = current_metric - submitted_metric if improvement >= SUBMISSION_MIN_IMPROVEMENT: return ( True, f"Improves the current top {symbol} metric by {improvement:.10f}; required improvement is at least {SUBMISSION_MIN_IMPROVEMENT:.4f}.", ) return ( False, f"Current top {symbol} metric is {current_metric:.10f}. Submitted {symbol} metric is {submitted_metric:.10f}. " f"Improvement is {improvement:.10f}; required improvement is at least {SUBMISSION_MIN_IMPROVEMENT:.4f}.", ) def result_markdown(result: dict[str, Any], gate: tuple[bool, str] | None = None) -> str: if result["ok"]: metric_symbol_text = result.get("metric_symbol") or "s" metric_value_text = result.get("metric_value") try: metric_line = f"- Container metric: `{metric_symbol_text} = {float(metric_value_text):.10f}`\n" except (TypeError, ValueError): metric_line = "" text = ( "### Verification Passed\n\n" f"- Case: `{result['case']}`\n" f"- Items: `{result['n']}`\n" f"{metric_line}" f"- Container side/diameter: `{result['side']:.10f}`\n" f"- Density: `{result['density']:.6f}`\n" f"- Max boundary excess: `{result['max_boundary_excess']:.3e}`\n" f"- Max pair overlap depth: `{result['max_pair_overlap_depth']:.3e}`\n" ) if gate is not None: passed, message = gate status = "Passed" if passed else "Needs improvement" text += f"\n### Record Gate\n\n- Status: `{status}`\n- {message}\n" return text errors = "\n".join(f"- {e}" for e in result["errors"]) return "### Verification Failed\n\n" + errors def empty_report_markdown() -> str: return f"### Ready To Verify\n\nPaste canonical JSON, then run the verifier. Existing cases must improve the current top metric by at least `0.0001`; cases with no current record can be submitted through `n = {SUBMISSION_MAX_NEW_CASE_N}`." def empty_preview_html() -> str: return """
verified geometry preview
""" def supported_gradio_kwargs(component: Any, **kwargs: Any) -> dict[str, Any]: try: parameters = inspect.signature(component.__init__).parameters except (TypeError, ValueError): return kwargs return {key: value for key, value in kwargs.items() if key in parameters} def supported_call_kwargs(callable_obj: Any, **kwargs: Any) -> dict[str, Any]: try: parameters = inspect.signature(callable_obj).parameters except (TypeError, ValueError): return {} return {key: value for key, value in kwargs.items() if key in parameters} def preview_html(solution: dict[str, Any]) -> str: filename = solution_case(solution) or "submission-preview" return f"""
{inline_solution_svg(solution)}
{download_actions(filename)}
""" def verify_only(json_text: str): try: solution = normalize_solution(load_submission(json_text)) result = verify_solution(solution, tolerance=DEFAULT_TOLERANCE).as_dict() gate = submission_gate(result) if result["ok"] else None pretty = json.dumps(solution, indent=2, sort_keys=True) preview = preview_html(solution) if result["ok"] else "" return result_markdown(result, gate), preview, pretty except Exception as exc: return f"### Verification Failed\n\n- {exc}", empty_preview_html(), json_text def submit_solution( json_text: str, submitter: str, notes: str, source_url: str, ): try: solution = normalize_solution(load_submission(json_text)) preflight = verify_solution(solution, tolerance=DEFAULT_TOLERANCE).as_dict() gate_ok, gate_message = submission_gate(preflight) if not gate_ok: return ( result_markdown(preflight, (gate_ok, gate_message)), preview_html(solution), json.dumps(solution, indent=2, sort_keys=True), gr.update(), gr.update(), gr.update(), ) record, result = STORE.append_verified_submission( solution, submitter=submitter, notes=notes, source_url=source_url, tolerance=DEFAULT_TOLERANCE, ) stored = STORE.solution_for_record(record) pretty = json.dumps(stored, indent=2, sort_keys=True) sync_status = record.get("sync_status", "dataset sync disabled") clear_page_caches() current = current_top_for_case(str(record.get("case") or result.get("case") or "")) leaderboard_updated = bool(current and str(current.get("id")) == str(record.get("id"))) leaderboard_status = ( f"\n\n### Leaderboard Updated\n\nRecord `{record['id']}` is now the current public top for `{record['case']}`." if leaderboard_updated else ( "\n\n### Leaderboard Not Changed\n\n" "The entry was archived, but another row is still the current public top for this case." ) ) message = ( result_markdown(result, (gate_ok, gate_message)) + f"\n\nSaved as record `{record['id']}`." + leaderboard_status + f"\n\nDataset sync: `{sync_status}`." ) refreshed_home = family_page_html(str(record.get("setup") or result.get("setup") or "")) if record.get("setup") or result.get("setup") else directory_html() return ( message, preview_html(stored), pretty, leaderboard_html(), gr.update(choices=existing_author_choices(), value=submitter), refreshed_home, ) except Exception as exc: return f"### Submission Rejected\n\n- {exc}", empty_preview_html(), json_text, gr.update(), gr.update(), gr.update() THEME = gr.themes.Base() def prewarm_pages() -> None: directory_html() for setup in setup_choices(): family_page_html(setup) with gr.Blocks( **supported_gradio_kwargs( gr.Blocks, title="Packing Benchmark", analytics_enabled=False, head=APP_HEAD, footer_links=[], ) ) as demo: browse_page = gr.HTML(directory_html(), elem_id="home-panel") leaderboard_page = gr.HTML(leaderboard_html(), elem_id="leaderboard-panel") with gr.Group(elem_id="submit-entry-panel", elem_classes=["submit-entry-panel"]): gr.HTML(submit_schema_intro_html()) with gr.Group(elem_classes=["submit-shell"]): with gr.Row(elem_classes=["submit-layout"]): with gr.Column(scale=7, elem_classes=["submit-editor"]): with gr.Group(elem_classes=["submit-panel"]): gr.HTML('
Paste JSON
') gr.HTML(f'

Paste one canonical coordinate JSON object. The evaluator uses a fixed tolerance, requires a 0.0001 metric improvement for existing cases, and accepts new no-record cases through n={SUBMISSION_MAX_NEW_CASE_N}.

') json_code = gr.Textbox( **supported_gradio_kwargs( gr.Textbox, value=SAMPLE_JSON, label="Coordinate JSON", lines=18, max_lines=30, show_copy_button=True, ) ) with gr.Column(scale=5, elem_classes=["submit-meta"]): with gr.Group(elem_classes=["submit-panel"]): gr.HTML('
Author
') gr.HTML('

Choose an existing credited author or type a new name.

') submitter = gr.Dropdown( **supported_gradio_kwargs( gr.Dropdown, choices=existing_author_choices(), label="Author", value=None, allow_custom_value=True, filterable=True, info="Start typing to search existing authors. New names are accepted.", ) ) source_url = gr.Textbox(label="Source URL", placeholder="Optional") notes = gr.Textbox(label="Notes", lines=3, placeholder="Optional method or provenance note") with gr.Row(elem_classes=["submit-actions"]): verify_btn = gr.Button("Verify", variant="secondary") submit_btn = gr.Button("Submit Entry", variant="primary") with gr.Row(elem_classes=["submit-layout"]): with gr.Column(scale=5, elem_classes=["submit-results"]): with gr.Group(elem_classes=["submit-results-card"]): gr.HTML('
Verification
') report = gr.Markdown(value=empty_report_markdown(), elem_classes=["verification-report"]) with gr.Column(scale=4, elem_classes=["submit-results"]): with gr.Group(elem_classes=["submit-results-card"]): gr.HTML('
Preview
') preview = gr.HTML(value=empty_preview_html(), label="Browser render") with gr.Column(scale=5, elem_classes=["submit-results"]): with gr.Group(elem_classes=["submit-results-card"]): with gr.Accordion("Normalized JSON", open=False): normalized_json = gr.Textbox( **supported_gradio_kwargs( gr.Textbox, label="Verifier-normalized payload", lines=12, show_copy_button=True, ) ) with gr.Group(elem_classes=["submit-docs"]): with gr.Accordion("Submission Documentation", open=False): gr.Markdown(EXAMPLES_MD + "\n\n" + SCHEMA_DOCS_MD) demo.load(home_page_for_request, outputs=[browse_page], show_progress="hidden") verify_btn.click(verify_only, inputs=[json_code], outputs=[report, preview, normalized_json]) submit_btn.click( submit_solution, inputs=[json_code, submitter, notes, source_url], outputs=[report, preview, normalized_json, leaderboard_page, submitter, browse_page], ) if __name__ == "__main__": demo.launch( theme=THEME, css=CSS, js=APP_JS, server_name="0.0.0.0", ssr_mode=False, **supported_call_kwargs(demo.launch, show_api=False, footer_links=[], favicon_path=str(FAVICON_PATH)), )