diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index a6f844d..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Keep captured command output verbatim, including terminal whitespace. -evidence/r2/*.log -whitespace diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d049e3b..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules/ -.astro/ -dist/ -.DS_Store -evidence/r2/local-screens/ diff --git a/README.md b/README.md index 631dd14..794cb6a 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,42 @@ -# askclaw.dev +# AskClaw 🦀 -AskClaw 官网源码。首页 = AMBER(琥珀式封存的历史回放评测)主站;`/amber/` 重定向回首页。 +端到端实现一人公司(OPC)。 +用 AI agents 构建、运行、扩展一个人的公司。 -The askclaw.dev site source. The homepage IS the AMBER site (sealed-replay evaluation); `/amber/` redirects to `/`. +Build, run & scale your one-person company end-to-end with AI agents. -## 结构 +## 我们在构建 / What we build -- `index.html` / `en.html` — 首页(中/英) -- `amber/` — 重定向页 -- `assets/` — 图(PNG 兜底 + Vega-Lite spec + 自托管 vega/vega-embed) +AskClaw 构建面向一人公司和小团队的 agentic AI 工作流:产品、工程、运营、支持、增长,从想法到交付端到端完成。 -## 部署(DEPLOY) +AskClaw builds agentic AI workflows for one-person companies and small teams: product, engineering, operations, support, and growth — from idea to delivery. -托管:26430 的 Caddy,文档根 `/var/www/askclaw-site`,域名块在 `/etc/caddy/Caddyfile`(改前必备份,改后 `caddy validate && systemctl reload caddy`)。 +## 方向 / Focus -同步流程(在 2651 上): +- 一人公司(OPC)的端到端 AI 工作流 + End-to-end AI workflows for one-person companies -```bash -cd ~/2609/askclaw-dev-site # 编辑工作区 -tar czf /tmp/site.tgz index.html en.html amber assets -scp /tmp/site.tgz 26430.tail744929.ts.net:/tmp/ -ssh 26430.tail744929.ts.net 'sudo tar xzf /tmp/site.tgz -C /var/www/askclaw-site' -``` +- OpenClaw、Hermes、多 agent 协作 + OpenClaw, Hermes, and multi-agent collaboration -改完务必同步本仓(PR → review → merge)。图的真源在 [getaskclaw/amber](https://github.com/getaskclaw/amber) 的 `docs/images/`。 +- 开发者工具、自动化、异步执行 + Developer tools, automation, and async-first execution + +- 让人和 AI agents 一起把真实工作做完 + Helping humans and AI agents finish real work together + +## 链接 / Links + +- Website: https://askclaw.dev +- X: https://x.com/GetAskClaw +- GitHub: https://github.com/getaskclaw + +## 文档 / Docs + +- [AskClaw docs](docs/README.md) ## 联系 / Contact +- Admin: admin@askclaw.dev - GitHub: github@askclaw.dev - Security: security@askclaw.dev diff --git a/amber/en.html b/amber/en.html deleted file mode 100644 index 9601ab2..0000000 --- a/amber/en.html +++ /dev/null @@ -1 +0,0 @@ -
→ askclaw.dev/en diff --git a/amber/index.html b/amber/index.html deleted file mode 100644 index 36dcae2..0000000 --- a/amber/index.html +++ /dev/null @@ -1 +0,0 @@ -→ askclaw.dev diff --git a/assets/completion-matrix-7way.en.png b/assets/completion-matrix-7way.en.png deleted file mode 100644 index d4b0f29..0000000 Binary files a/assets/completion-matrix-7way.en.png and /dev/null differ diff --git a/assets/completion-matrix-7way.png b/assets/completion-matrix-7way.png deleted file mode 100644 index da77549..0000000 Binary files a/assets/completion-matrix-7way.png and /dev/null differ diff --git a/assets/effort-curves-20260911.en.png b/assets/effort-curves-20260911.en.png deleted file mode 100644 index ed26347..0000000 Binary files a/assets/effort-curves-20260911.en.png and /dev/null differ diff --git a/assets/effort-curves-20260911.png b/assets/effort-curves-20260911.png deleted file mode 100644 index 60ff9dd..0000000 Binary files a/assets/effort-curves-20260911.png and /dev/null differ diff --git a/assets/score-vs-tokens-2026-w37.en.png b/assets/score-vs-tokens-2026-w37.en.png deleted file mode 100644 index 56aa07b..0000000 Binary files a/assets/score-vs-tokens-2026-w37.en.png and /dev/null differ diff --git a/assets/score-vs-tokens-2026-w37.png b/assets/score-vs-tokens-2026-w37.png deleted file mode 100644 index 2df72b0..0000000 Binary files a/assets/score-vs-tokens-2026-w37.png and /dev/null differ diff --git a/assets/specs/completion-matrix-7way.en.vega-lite.json b/assets/specs/completion-matrix-7way.en.vega-lite.json deleted file mode 100644 index cabc0e8..0000000 --- a/assets/specs/completion-matrix-7way.en.vega-lite.json +++ /dev/null @@ -1,826 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "width": 620, - "height": 372, - "title": { - "text": "Five-way 17/23 tie + doubao 16/23 + gp27b 14/23: nine-axis completion matrix (21-case subset)", - "subtitle": "bigger dot = higher completion; doubao verification axes = 3600s-makeup real scores (addendum 1); gp27b = one-shot snapshot of a community self-hosted endpoint (effort knob proven inert)", - "fontSize": 15, - "subtitleFontSize": 11 - }, - "layer": [ - { - "data": { - "values": [ - { - "key": "Vision", - "lane": "k3 @ Kimi official coding", - "value": 0.778 - }, - { - "key": "UI", - "lane": "k3 @ Kimi official coding", - "value": 0.0 - }, - { - "key": "Requirements", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Ops", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Review", - "lane": "k3 @ Kimi official coding", - "value": 0.556 - }, - { - "key": "Attribution", - "lane": "k3 @ Kimi official coding", - "value": 0.667 - }, - { - "key": "Defense", - "lane": "k3 @ Kimi official coding", - "value": 0.389 - }, - { - "key": "Delivery", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Coding", - "lane": "k3 @ Kimi official coding", - "value": 0.958 - }, - { - "key": "Coding", - "lane": "v4.1-flash @ CommandCode", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "v4.1-flash @ CommandCode", - "value": 0.611 - }, - { - "key": "Attribution", - "lane": "v4.1-flash @ CommandCode", - "value": 0.867 - }, - { - "key": "Review", - "lane": "v4.1-flash @ CommandCode", - "value": 0.556 - }, - { - "key": "Ops", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "v4.1-flash @ CommandCode", - "value": 0.333 - }, - { - "key": "Coding", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.389 - }, - { - "key": "Attribution", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.933 - }, - { - "key": "Review", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.667 - }, - { - "key": "Ops", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.917 - }, - { - "key": "Vision", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.778 - }, - { - "key": "Coding", - "lane": "v4.1-flash @ Ollama", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "v4.1-flash @ Ollama", - "value": 0.389 - }, - { - "key": "Attribution", - "lane": "v4.1-flash @ Ollama", - "value": 0.467 - }, - { - "key": "Review", - "lane": "v4.1-flash @ Ollama", - "value": 0.667 - }, - { - "key": "Ops", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "v4.1-flash @ Ollama", - "value": 0.222 - }, - { - "key": "Coding", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "Attribution", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.933 - }, - { - "key": "Review", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.556 - }, - { - "key": "Ops", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "UI", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "Coding", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.5 - }, - { - "key": "Attribution", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.467 - }, - { - "key": "Review", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.333 - }, - { - "key": "Ops", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "UI", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.0 - }, - { - "key": "Vision", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.0 - }, - { - "key": "Coding", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.833 - }, - { - "key": "Delivery", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 1.0 - }, - { - "key": "Attribution", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.4 - }, - { - "key": "Ops", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.967 - }, - { - "key": "Requirements", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 1.0 - }, - { - "key": "UI", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Vision", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Review", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Defense", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.389 - } - ] - }, - "encoding": { - "x": { - "field": "key", - "type": "nominal", - "sort": [ - "Coding", - "Delivery", - "Attribution", - "Ops", - "Requirements", - "UI", - "Vision", - "Review", - "Defense" - ], - "title": null, - "axis": { - "labelFontSize": 13, - "labelAngle": 0, - "domain": false, - "ticks": false - } - }, - "y": { - "field": "lane", - "type": "nominal", - "sort": [ - "k3 @ Kimi official coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ Ark Agent Plan", - "Qwen3.8-27B @ goldenpotato self-hosted" - ], - "title": null, - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "domain": false, - "ticks": false - } - }, - "color": { - "field": "lane", - "type": "nominal", - "scale": { - "domain": [ - "k3 @ Kimi official coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ Ark Agent Plan", - "Qwen3.8-27B @ goldenpotato self-hosted" - ], - "range": [ - "#26C6DA", - "#2e8b57", - "#2a9d8f", - "#e76f51", - "#8d6fd1", - "#f4a261", - "#e9c46a" - ] - }, - "legend": null - }, - "size": { - "field": "value", - "type": "quantitative", - "scale": { - "domain": [ - 0, - 1 - ], - "range": [ - 90, - 420 - ] - }, - "legend": null - } - }, - "mark": { - "type": "point", - "filled": true, - "opacity": 0.95, - "stroke": "#bbb", - "strokeWidth": 1, - "tooltip": true - } - }, - { - "data": { - "values": [ - { - "key": "Vision", - "lane": "k3 @ Kimi official coding", - "value": 0.778 - }, - { - "key": "UI", - "lane": "k3 @ Kimi official coding", - "value": 0.0 - }, - { - "key": "Requirements", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Ops", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Review", - "lane": "k3 @ Kimi official coding", - "value": 0.556 - }, - { - "key": "Attribution", - "lane": "k3 @ Kimi official coding", - "value": 0.667 - }, - { - "key": "Defense", - "lane": "k3 @ Kimi official coding", - "value": 0.389 - }, - { - "key": "Delivery", - "lane": "k3 @ Kimi official coding", - "value": 1.0 - }, - { - "key": "Coding", - "lane": "k3 @ Kimi official coding", - "value": 0.958 - }, - { - "key": "Coding", - "lane": "v4.1-flash @ CommandCode", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "v4.1-flash @ CommandCode", - "value": 0.611 - }, - { - "key": "Attribution", - "lane": "v4.1-flash @ CommandCode", - "value": 0.867 - }, - { - "key": "Review", - "lane": "v4.1-flash @ CommandCode", - "value": 0.556 - }, - { - "key": "Ops", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "v4.1-flash @ CommandCode", - "value": 0.333 - }, - { - "key": "Coding", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.389 - }, - { - "key": "Attribution", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.933 - }, - { - "key": "Review", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.667 - }, - { - "key": "Ops", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.917 - }, - { - "key": "Vision", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.778 - }, - { - "key": "Coding", - "lane": "v4.1-flash @ Ollama", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "v4.1-flash @ Ollama", - "value": 0.389 - }, - { - "key": "Attribution", - "lane": "v4.1-flash @ Ollama", - "value": 0.467 - }, - { - "key": "Review", - "lane": "v4.1-flash @ Ollama", - "value": 0.667 - }, - { - "key": "Ops", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "v4.1-flash @ Ollama", - "value": 0.222 - }, - { - "key": "Coding", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "Attribution", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.933 - }, - { - "key": "Review", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.556 - }, - { - "key": "Ops", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "UI", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "Vision", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "Coding", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.958 - }, - { - "key": "Delivery", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "Defense", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.5 - }, - { - "key": "Attribution", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.467 - }, - { - "key": "Review", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.333 - }, - { - "key": "Ops", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "Requirements", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 1.0 - }, - { - "key": "UI", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.0 - }, - { - "key": "Vision", - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "value": 0.0 - }, - { - "key": "Coding", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.833 - }, - { - "key": "Delivery", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 1.0 - }, - { - "key": "Attribution", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.4 - }, - { - "key": "Ops", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.967 - }, - { - "key": "Requirements", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 1.0 - }, - { - "key": "UI", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Vision", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Review", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.0 - }, - { - "key": "Defense", - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "value": 0.389 - } - ] - }, - "encoding": { - "x": { - "field": "key", - "type": "nominal", - "sort": [ - "Coding", - "Delivery", - "Attribution", - "Ops", - "Requirements", - "UI", - "Vision", - "Review", - "Defense" - ], - "title": null, - "axis": { - "labelFontSize": 13, - "labelAngle": 0, - "domain": false, - "ticks": false - } - }, - "y": { - "field": "lane", - "type": "nominal", - "sort": [ - "k3 @ Kimi official coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ Ark Agent Plan", - "Qwen3.8-27B @ goldenpotato self-hosted" - ], - "title": null, - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "domain": false, - "ticks": false - } - }, - "color": { - "field": "lane", - "type": "nominal", - "scale": { - "domain": [ - "k3 @ Kimi official coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ Ark Agent Plan", - "Qwen3.8-27B @ goldenpotato self-hosted" - ], - "range": [ - "#26C6DA", - "#2e8b57", - "#2a9d8f", - "#e76f51", - "#8d6fd1", - "#f4a261", - "#e9c46a" - ] - }, - "legend": null - }, - "text": { - "field": "value", - "format": ".2f" - } - }, - "mark": { - "type": "text", - "fontSize": 10, - "dy": 16, - "color": "#555" - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/completion-matrix-7way.vega-lite.json b/assets/specs/completion-matrix-7way.vega-lite.json deleted file mode 100644 index 8ebaf7c..0000000 --- a/assets/specs/completion-matrix-7way.vega-lite.json +++ /dev/null @@ -1,826 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "width": 620, - "height": 372, - "title": { - "text": "五家 17/23 + doubao 16/23 + gp27b 14/23:九轴完成度矩阵(21 案子集)", - "subtitle": "点越大 = 该面完成度越高;doubao 核验两轴为 3600s 补考真值(addendum 1);gp27b = 社区自部署端点一次性快照(effort 旋钮实证无效,按端点默认档记)", - "fontSize": 15, - "subtitleFontSize": 11 - }, - "layer": [ - { - "data": { - "values": [ - { - "key": "视觉", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.778 - }, - { - "key": "UI", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.0 - }, - { - "key": "需求", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "运维", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "审查", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.556 - }, - { - "key": "归因", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.667 - }, - { - "key": "防御", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.389 - }, - { - "key": "交付", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "编码", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.958 - }, - { - "key": "编码", - "lane": "v4.1-flash @ CommandCode", - "value": 0.958 - }, - { - "key": "交付", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "防御", - "lane": "v4.1-flash @ CommandCode", - "value": 0.611 - }, - { - "key": "归因", - "lane": "v4.1-flash @ CommandCode", - "value": 0.867 - }, - { - "key": "审查", - "lane": "v4.1-flash @ CommandCode", - "value": 0.556 - }, - { - "key": "运维", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "需求", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "v4.1-flash @ CommandCode", - "value": 0.333 - }, - { - "key": "编码", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.958 - }, - { - "key": "交付", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "防御", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.389 - }, - { - "key": "归因", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.933 - }, - { - "key": "审查", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.667 - }, - { - "key": "运维", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "需求", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.917 - }, - { - "key": "视觉", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.778 - }, - { - "key": "编码", - "lane": "v4.1-flash @ Ollama", - "value": 0.958 - }, - { - "key": "交付", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "防御", - "lane": "v4.1-flash @ Ollama", - "value": 0.389 - }, - { - "key": "归因", - "lane": "v4.1-flash @ Ollama", - "value": 0.467 - }, - { - "key": "审查", - "lane": "v4.1-flash @ Ollama", - "value": 0.667 - }, - { - "key": "运维", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "需求", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "v4.1-flash @ Ollama", - "value": 0.222 - }, - { - "key": "编码", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.958 - }, - { - "key": "交付", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "防御", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "归因", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.933 - }, - { - "key": "审查", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.556 - }, - { - "key": "运维", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "需求", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "UI", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "编码", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.958 - }, - { - "key": "交付", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "防御", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.5 - }, - { - "key": "归因", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.467 - }, - { - "key": "审查", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.333 - }, - { - "key": "运维", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "需求", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "UI", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.0 - }, - { - "key": "视觉", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.0 - }, - { - "key": "编码", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.833 - }, - { - "key": "交付", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 1.0 - }, - { - "key": "归因", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.4 - }, - { - "key": "运维", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.967 - }, - { - "key": "需求", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 1.0 - }, - { - "key": "UI", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "视觉", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "审查", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "防御", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.389 - } - ] - }, - "encoding": { - "x": { - "field": "key", - "type": "nominal", - "sort": [ - "编码", - "交付", - "归因", - "运维", - "需求", - "UI", - "视觉", - "审查", - "防御" - ], - "title": null, - "axis": { - "labelFontSize": 13, - "labelAngle": 0, - "domain": false, - "ticks": false - } - }, - "y": { - "field": "lane", - "type": "nominal", - "sort": [ - "k3 @ Kimi 官方 coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ 火山方舟 Agent Plan", - "Qwen3.8-27B @ goldenpotato 自部署" - ], - "title": null, - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "domain": false, - "ticks": false - } - }, - "color": { - "field": "lane", - "type": "nominal", - "scale": { - "domain": [ - "k3 @ Kimi 官方 coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ 火山方舟 Agent Plan", - "Qwen3.8-27B @ goldenpotato 自部署" - ], - "range": [ - "#26C6DA", - "#2e8b57", - "#2a9d8f", - "#e76f51", - "#8d6fd1", - "#f4a261", - "#e9c46a" - ] - }, - "legend": null - }, - "size": { - "field": "value", - "type": "quantitative", - "scale": { - "domain": [ - 0, - 1 - ], - "range": [ - 90, - 420 - ] - }, - "legend": null - } - }, - "mark": { - "type": "point", - "filled": true, - "opacity": 0.95, - "stroke": "#bbb", - "strokeWidth": 1, - "tooltip": true - } - }, - { - "data": { - "values": [ - { - "key": "视觉", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.778 - }, - { - "key": "UI", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.0 - }, - { - "key": "需求", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "运维", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "审查", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.556 - }, - { - "key": "归因", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.667 - }, - { - "key": "防御", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.389 - }, - { - "key": "交付", - "lane": "k3 @ Kimi 官方 coding", - "value": 1.0 - }, - { - "key": "编码", - "lane": "k3 @ Kimi 官方 coding", - "value": 0.958 - }, - { - "key": "编码", - "lane": "v4.1-flash @ CommandCode", - "value": 0.958 - }, - { - "key": "交付", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "防御", - "lane": "v4.1-flash @ CommandCode", - "value": 0.611 - }, - { - "key": "归因", - "lane": "v4.1-flash @ CommandCode", - "value": 0.867 - }, - { - "key": "审查", - "lane": "v4.1-flash @ CommandCode", - "value": 0.556 - }, - { - "key": "运维", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "需求", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ CommandCode", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "v4.1-flash @ CommandCode", - "value": 0.333 - }, - { - "key": "编码", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.958 - }, - { - "key": "交付", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "防御", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.389 - }, - { - "key": "归因", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.933 - }, - { - "key": "审查", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.667 - }, - { - "key": "运维", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "需求", - "lane": "glm-5.3-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.917 - }, - { - "key": "视觉", - "lane": "glm-5.3-flash @ Ollama", - "value": 0.778 - }, - { - "key": "编码", - "lane": "v4.1-flash @ Ollama", - "value": 0.958 - }, - { - "key": "交付", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "防御", - "lane": "v4.1-flash @ Ollama", - "value": 0.389 - }, - { - "key": "归因", - "lane": "v4.1-flash @ Ollama", - "value": 0.467 - }, - { - "key": "审查", - "lane": "v4.1-flash @ Ollama", - "value": 0.667 - }, - { - "key": "运维", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "需求", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "UI", - "lane": "v4.1-flash @ Ollama", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "v4.1-flash @ Ollama", - "value": 0.222 - }, - { - "key": "编码", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.958 - }, - { - "key": "交付", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "防御", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "归因", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.933 - }, - { - "key": "审查", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.556 - }, - { - "key": "运维", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "需求", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "UI", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 1.0 - }, - { - "key": "视觉", - "lane": "hy4-preview-f @ WorkBuddy", - "value": 0.333 - }, - { - "key": "编码", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.958 - }, - { - "key": "交付", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "防御", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.5 - }, - { - "key": "归因", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.467 - }, - { - "key": "审查", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.333 - }, - { - "key": "运维", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "需求", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 1.0 - }, - { - "key": "UI", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.0 - }, - { - "key": "视觉", - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "value": 0.0 - }, - { - "key": "编码", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.833 - }, - { - "key": "交付", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 1.0 - }, - { - "key": "归因", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.4 - }, - { - "key": "运维", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.967 - }, - { - "key": "需求", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 1.0 - }, - { - "key": "UI", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "视觉", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "审查", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.0 - }, - { - "key": "防御", - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "value": 0.389 - } - ] - }, - "encoding": { - "x": { - "field": "key", - "type": "nominal", - "sort": [ - "编码", - "交付", - "归因", - "运维", - "需求", - "UI", - "视觉", - "审查", - "防御" - ], - "title": null, - "axis": { - "labelFontSize": 13, - "labelAngle": 0, - "domain": false, - "ticks": false - } - }, - "y": { - "field": "lane", - "type": "nominal", - "sort": [ - "k3 @ Kimi 官方 coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ 火山方舟 Agent Plan", - "Qwen3.8-27B @ goldenpotato 自部署" - ], - "title": null, - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "domain": false, - "ticks": false - } - }, - "color": { - "field": "lane", - "type": "nominal", - "scale": { - "domain": [ - "k3 @ Kimi 官方 coding", - "hy4-preview-f @ WorkBuddy", - "v4.1-flash @ CommandCode", - "glm-5.3-flash @ Ollama", - "v4.1-flash @ Ollama", - "doubao-seed-evolving @ 火山方舟 Agent Plan", - "Qwen3.8-27B @ goldenpotato 自部署" - ], - "range": [ - "#26C6DA", - "#2e8b57", - "#2a9d8f", - "#e76f51", - "#8d6fd1", - "#f4a261", - "#e9c46a" - ] - }, - "legend": null - }, - "text": { - "field": "value", - "format": ".2f" - } - }, - "mark": { - "type": "text", - "fontSize": 10, - "dy": 16, - "color": "#555" - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/effort-curves-20260911.en.vega-lite.json b/assets/specs/effort-curves-20260911.en.vega-lite.json deleted file mode 100644 index a489c04..0000000 --- a/assets/specs/effort-curves-20260911.en.vega-lite.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "background": "white", - "title": { - "text": [ - "effort curves: top-band backlash is a family script, not a law", - "(four families, case-level pass rate %; swe-2 non-decreasing: low 15 = medium 15 < high 16 < max 18)" - ], - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "effort": "low", - "pct": 57.1, - "model": "gpt-6-astra-900k (21 cases)" - }, - { - "effort": "medium", - "pct": 66.7, - "model": "gpt-6-astra-900k (21 cases)" - }, - { - "effort": "high", - "pct": 66.7, - "model": "gpt-6-astra-900k (21 cases)" - }, - { - "effort": "xhigh", - "pct": 47.6, - "model": "gpt-6-astra-900k (21 cases)" - }, - { - "effort": "max", - "pct": 47.6, - "model": "gpt-6-astra-900k (21 cases)" - }, - { - "effort": "none", - "pct": 73.9, - "model": "deepseek-v4.1-flash @ cc (23 cases)" - }, - { - "effort": "low", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc (23 cases)" - }, - { - "effort": "medium", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc (23 cases)" - }, - { - "effort": "high", - "pct": 73.9, - "model": "deepseek-v4.1-flash @ cc (23 cases)" - }, - { - "effort": "xhigh", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc (23 cases)" - }, - { - "effort": "high", - "pct": 73.9, - "model": "glm-5.3-flash @ ollama (23 cases)" - }, - { - "effort": "xhigh", - "pct": 52.2, - "model": "glm-5.3-flash @ ollama (23 cases)" - }, - { - "effort": "medium", - "pct": 65.2, - "model": "swe-2 @ devin (23 cases)" - }, - { - "effort": "high", - "pct": 69.6, - "model": "swe-2 @ devin (23 cases)" - }, - { - "effort": "max", - "pct": 78.3, - "model": "swe-2 @ devin (23 cases)" - }, - { - "effort": "low", - "pct": 65.2, - "model": "swe-2 @ devin (23 cases)" - } - ] - }, - "width": 640, - "height": 320, - "layer": [ - { - "mark": { - "type": "line", - "strokeWidth": 2.5, - "point": { - "size": 70, - "opacity": 1 - }, - "tooltip": true - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ], - "axis": { - "title": "reasoning effort", - "labelAngle": 0 - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 40, - 85 - ] - }, - "axis": { - "title": "case-level pass rate (%)" - } - }, - "color": { - "field": "model", - "type": "nominal", - "scale": { - "range": [ - "#00838F", - "#E67E22", - "#6A5ACD", - "#8D6E63" - ] - }, - "legend": { - "title": null, - "labelLimit": 0, - "orient": "bottom" - } - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"gpt-6-astra-900k (21 cases)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": -14 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"deepseek-v4.1-flash @ cc (23 cases)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": 12 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"glm-5.3-flash @ ollama (23 cases)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": -24 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"swe-2 @ devin (23 cases)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": 22 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/effort-curves-20260911.vega-lite.json b/assets/specs/effort-curves-20260911.vega-lite.json deleted file mode 100644 index 8f87c8d..0000000 --- a/assets/specs/effort-curves-20260911.vega-lite.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "background": "white", - "title": { - "text": [ - "effort 曲线:顶档反噬是家族剧本,不是定律", - "(四家族,案级通过率 %;swe-2 四档不减:low 15 = medium 15 < high 16 < max 18)" - ], - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "effort": "low", - "pct": 57.1, - "model": "gpt-6-astra-900k(21 案)" - }, - { - "effort": "medium", - "pct": 66.7, - "model": "gpt-6-astra-900k(21 案)" - }, - { - "effort": "high", - "pct": 66.7, - "model": "gpt-6-astra-900k(21 案)" - }, - { - "effort": "xhigh", - "pct": 47.6, - "model": "gpt-6-astra-900k(21 案)" - }, - { - "effort": "max", - "pct": 47.6, - "model": "gpt-6-astra-900k(21 案)" - }, - { - "effort": "none", - "pct": 73.9, - "model": "deepseek-v4.1-flash @ cc(23 案)" - }, - { - "effort": "low", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc(23 案)" - }, - { - "effort": "medium", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc(23 案)" - }, - { - "effort": "high", - "pct": 73.9, - "model": "deepseek-v4.1-flash @ cc(23 案)" - }, - { - "effort": "xhigh", - "pct": 65.2, - "model": "deepseek-v4.1-flash @ cc(23 案)" - }, - { - "effort": "high", - "pct": 73.9, - "model": "glm-5.3-flash @ ollama(23 案)" - }, - { - "effort": "xhigh", - "pct": 52.2, - "model": "glm-5.3-flash @ ollama(23 案)" - }, - { - "effort": "medium", - "pct": 65.2, - "model": "swe-2 @ devin(23 案)" - }, - { - "effort": "high", - "pct": 69.6, - "model": "swe-2 @ devin(23 案)" - }, - { - "effort": "max", - "pct": 78.3, - "model": "swe-2 @ devin(23 案)" - }, - { - "effort": "low", - "pct": 65.2, - "model": "swe-2 @ devin(23 案)" - } - ] - }, - "width": 640, - "height": 320, - "layer": [ - { - "mark": { - "type": "line", - "strokeWidth": 2.5, - "point": { - "size": 70, - "opacity": 1 - }, - "tooltip": true - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ], - "axis": { - "title": "reasoning effort", - "labelAngle": 0 - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 40, - 85 - ] - }, - "axis": { - "title": "案级通过率(%)" - } - }, - "color": { - "field": "model", - "type": "nominal", - "scale": { - "range": [ - "#00838F", - "#E67E22", - "#6A5ACD", - "#8D6E63" - ] - }, - "legend": { - "title": null, - "labelLimit": 0, - "orient": "bottom" - } - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"gpt-6-astra-900k(21 案)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": -14 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"deepseek-v4.1-flash @ cc(23 案)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": 12 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"glm-5.3-flash @ ollama(23 案)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": -24 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - }, - { - "transform": [ - { - "filter": "datum.model == \"swe-2 @ devin(23 案)\"" - } - ], - "mark": { - "type": "text", - "fontSize": 11, - "color": "#555", - "align": "left", - "dx": 6, - "dy": 22 - }, - "encoding": { - "x": { - "field": "effort", - "type": "ordinal", - "sort": [ - "none", - "low", - "medium", - "high", - "xhigh", - "max" - ] - }, - "y": { - "field": "pct", - "type": "quantitative" - }, - "text": { - "field": "pct", - "type": "quantitative", - "format": ".0f" - }, - "detail": { - "field": "model", - "type": "nominal" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/score-vs-tokens-2026-w37.en.vega-lite.json b/assets/specs/score-vs-tokens-2026-w37.en.vega-lite.json deleted file mode 100644 index 9032ddd..0000000 --- a/assets/specs/score-vs-tokens-2026-w37.en.vega-lite.json +++ /dev/null @@ -1,1201 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "title": { - "text": [ - "output tokens x case pass rate: same high band, 17x apart in thinking budget", - "(circles = W37 board lanes; dashed diamonds = same-model effort ladders; tokens are a cost proxy, not $)" - ], - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ ollama", - "family": "glm", - "tokens": 840000, - "pct": 73.9, - "align": "left", - "baseline": "middle", - "dx": 10, - "dy": 0 - }, - { - "kind": "board", - "label": "v4.1f @ cc", - "family": "deepseek", - "tokens": 640000, - "pct": 73.9, - "align": "right", - "baseline": "middle", - "dx": -10, - "dy": 0 - }, - { - "kind": "board", - "label": "v4.1f @ ocgo", - "family": "deepseek", - "tokens": 720000, - "pct": 69.6, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -5 - }, - { - "kind": "board", - "label": "v4.1f @ ds", - "family": "deepseek", - "tokens": 820000, - "pct": 69.6, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 5 - }, - { - "kind": "board", - "label": "qwen3.8 @ crof", - "family": "qwen", - "tokens": 690000, - "pct": 69.6, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - }, - { - "kind": "board", - "label": "astra-900k (h)", - "family": "gpt", - "tokens": 147000, - "pct": 69.6, - "align": "center", - "baseline": "bottom", - "dx": 0, - "dy": -10 - }, - { - "kind": "board", - "label": "luna-900k (h)", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 10 - }, - { - "kind": "board", - "label": "0731 @ ollama", - "family": "deepseek", - "tokens": 2500000, - "pct": 65.2, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -8 - }, - { - "kind": "board", - "label": "0731 @ crof", - "family": "deepseek", - "tokens": 690000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 10, - "dy": 2 - }, - { - "kind": "board", - "label": "sol-900k (h)", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 10 - }, - { - "kind": "board", - "label": "v4.1f-exp @ ds", - "family": "deepseek", - "tokens": 1070000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - }, - { - "kind": "board", - "label": "g53f @ crof", - "family": "glm", - "tokens": 1380000, - "pct": 60.9, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -6 - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 77000, - "pct": 57.1, - "band": "low", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 81000, - "pct": 66.7, - "band": "medium", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 147000, - "pct": 66.7, - "band": "high", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 225000, - "pct": 47.6, - "band": "xhigh", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 195000, - "pct": 47.6, - "band": "max", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 104000, - "pct": 65.2, - "band": "medium", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "band": "high", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 303000, - "pct": 65.2, - "band": "xhigh", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 204000, - "pct": 60.9, - "band": "medium", - "series": "sol-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "band": "high", - "series": "sol-900k" - } - ] - }, - "width": 700, - "height": 380, - "layer": [ - { - "data": { - "values": [ - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 77000, - "pct": 57.1, - "band": "low", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 81000, - "pct": 66.7, - "band": "medium", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 147000, - "pct": 66.7, - "band": "high", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 225000, - "pct": 47.6, - "band": "xhigh", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 195000, - "pct": 47.6, - "band": "max", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 104000, - "pct": 65.2, - "band": "medium", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "band": "high", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 303000, - "pct": 65.2, - "band": "xhigh", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 204000, - "pct": 60.9, - "band": "medium", - "series": "sol-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "band": "high", - "series": "sol-900k" - } - ] - }, - "mark": { - "type": "line", - "strokeWidth": 2, - "strokeDash": [ - 4, - 3 - ], - "opacity": 0.7, - "tooltip": true - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "color": { - "field": "family", - "type": "nominal" - }, - "detail": { - "field": "series", - "type": "nominal" - } - } - }, - { - "mark": { - "type": "point", - "size": 110, - "filled": true, - "opacity": 1, - "tooltip": true - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false, - "title": "full-library output tokens (log)" - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - }, - "axis": { - "title": "case-level pass rate (%)" - } - }, - "color": { - "field": "family", - "type": "nominal", - "scale": { - "domain": [ - "deepseek", - "gpt", - "glm", - "qwen" - ], - "range": [ - "#00838F", - "#6A5ACD", - "#E67E22", - "#8D6E63" - ] - }, - "legend": { - "title": null, - "orient": "bottom" - } - }, - "shape": { - "field": "kind", - "type": "nominal", - "scale": { - "domain": [ - "board", - "ladder" - ], - "range": [ - "circle", - "diamond" - ] - }, - "legend": null - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ cc", - "family": "deepseek", - "tokens": 640000, - "pct": 73.9, - "align": "right", - "baseline": "middle", - "dx": -10, - "dy": 0 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "middle" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ ollama", - "family": "glm", - "tokens": 840000, - "pct": 73.9, - "align": "left", - "baseline": "middle", - "dx": 10, - "dy": 0 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "middle" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ crof", - "family": "glm", - "tokens": 1380000, - "pct": 60.9, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -6 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ ocgo", - "family": "deepseek", - "tokens": 720000, - "pct": 69.6, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 16 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 16 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "luna-900k (h)", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 10 - }, - { - "kind": "board", - "label": "0731 @ crof", - "family": "deepseek", - "tokens": 690000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 10, - "dy": 2 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "top" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ ds", - "family": "deepseek", - "tokens": 820000, - "pct": 69.6, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -14 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -14 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "sol-900k (h)", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 10 - }, - { - "kind": "board", - "label": "v4.1f-exp @ ds", - "family": "deepseek", - "tokens": 1070000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "top" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "qwen3.8 @ crof", - "family": "qwen", - "tokens": 690000, - "pct": 69.6, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 16 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 16 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "astra-900k (h)", - "family": "gpt", - "tokens": 147000, - "pct": 69.6, - "align": "center", - "baseline": "bottom", - "dx": 0, - "dy": -10 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "center", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "0731 @ ollama", - "family": "deepseek", - "tokens": 2500000, - "pct": 65.2, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -8 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/score-vs-tokens-2026-w37.vega-lite.json b/assets/specs/score-vs-tokens-2026-w37.vega-lite.json deleted file mode 100644 index cdf46af..0000000 --- a/assets/specs/score-vs-tokens-2026-w37.vega-lite.json +++ /dev/null @@ -1,1201 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "title": { - "text": [ - "全库输出 token × 案级通过率:同 high 档,思考预算差 17 倍", - "(圆点 = 各道 W37 榜分;虚线菱形 = 同模型档位天梯;token 是成本代理,非美元)" - ], - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ ollama", - "family": "glm", - "tokens": 840000, - "pct": 73.9, - "align": "left", - "baseline": "middle", - "dx": 10, - "dy": 0 - }, - { - "kind": "board", - "label": "v4.1f @ cc", - "family": "deepseek", - "tokens": 640000, - "pct": 73.9, - "align": "right", - "baseline": "middle", - "dx": -10, - "dy": 0 - }, - { - "kind": "board", - "label": "v4.1f @ ocgo", - "family": "deepseek", - "tokens": 720000, - "pct": 69.6, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -5 - }, - { - "kind": "board", - "label": "v4.1f @ ds", - "family": "deepseek", - "tokens": 820000, - "pct": 69.6, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 5 - }, - { - "kind": "board", - "label": "qwen3.8 @ crof", - "family": "qwen", - "tokens": 690000, - "pct": 69.6, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - }, - { - "kind": "board", - "label": "astra-900k (h)", - "family": "gpt", - "tokens": 147000, - "pct": 69.6, - "align": "center", - "baseline": "bottom", - "dx": 0, - "dy": -10 - }, - { - "kind": "board", - "label": "luna-900k (h)", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 10 - }, - { - "kind": "board", - "label": "0731 @ ollama", - "family": "deepseek", - "tokens": 2500000, - "pct": 65.2, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -8 - }, - { - "kind": "board", - "label": "0731 @ crof", - "family": "deepseek", - "tokens": 690000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 10, - "dy": 2 - }, - { - "kind": "board", - "label": "sol-900k (h)", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 10 - }, - { - "kind": "board", - "label": "v4.1f-exp @ ds", - "family": "deepseek", - "tokens": 1070000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - }, - { - "kind": "board", - "label": "g53f @ crof", - "family": "glm", - "tokens": 1380000, - "pct": 60.9, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -6 - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 77000, - "pct": 57.1, - "band": "low", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 81000, - "pct": 66.7, - "band": "medium", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 147000, - "pct": 66.7, - "band": "high", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 225000, - "pct": 47.6, - "band": "xhigh", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 195000, - "pct": 47.6, - "band": "max", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 104000, - "pct": 65.2, - "band": "medium", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "band": "high", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 303000, - "pct": 65.2, - "band": "xhigh", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 204000, - "pct": 60.9, - "band": "medium", - "series": "sol-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "band": "high", - "series": "sol-900k" - } - ] - }, - "width": 700, - "height": 380, - "layer": [ - { - "data": { - "values": [ - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 77000, - "pct": 57.1, - "band": "low", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 81000, - "pct": 66.7, - "band": "medium", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 147000, - "pct": 66.7, - "band": "high", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 225000, - "pct": 47.6, - "band": "xhigh", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "astra-900k", - "family": "gpt", - "tokens": 195000, - "pct": 47.6, - "band": "max", - "series": "astra-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 104000, - "pct": 65.2, - "band": "medium", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "band": "high", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "luna-900k", - "family": "gpt", - "tokens": 303000, - "pct": 65.2, - "band": "xhigh", - "series": "luna-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 204000, - "pct": 60.9, - "band": "medium", - "series": "sol-900k" - }, - { - "kind": "ladder", - "label": "sol-900k", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "band": "high", - "series": "sol-900k" - } - ] - }, - "mark": { - "type": "line", - "strokeWidth": 2, - "strokeDash": [ - 4, - 3 - ], - "opacity": 0.7, - "tooltip": true - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "color": { - "field": "family", - "type": "nominal" - }, - "detail": { - "field": "series", - "type": "nominal" - } - } - }, - { - "mark": { - "type": "point", - "size": 110, - "filled": true, - "opacity": 1, - "tooltip": true - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false, - "title": "全库输出 token(log)" - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - }, - "axis": { - "title": "案级通过率(%)" - } - }, - "color": { - "field": "family", - "type": "nominal", - "scale": { - "domain": [ - "deepseek", - "gpt", - "glm", - "qwen" - ], - "range": [ - "#00838F", - "#6A5ACD", - "#E67E22", - "#8D6E63" - ] - }, - "legend": { - "title": null, - "orient": "bottom" - } - }, - "shape": { - "field": "kind", - "type": "nominal", - "scale": { - "domain": [ - "board", - "ladder" - ], - "range": [ - "circle", - "diamond" - ] - }, - "legend": null - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ cc", - "family": "deepseek", - "tokens": 640000, - "pct": 73.9, - "align": "right", - "baseline": "middle", - "dx": -10, - "dy": 0 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "middle" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ ollama", - "family": "glm", - "tokens": 840000, - "pct": 73.9, - "align": "left", - "baseline": "middle", - "dx": 10, - "dy": 0 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "middle" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "g53f @ crof", - "family": "glm", - "tokens": 1380000, - "pct": 60.9, - "align": "left", - "baseline": "bottom", - "dx": 8, - "dy": -6 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ ocgo", - "family": "deepseek", - "tokens": 720000, - "pct": 69.6, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 16 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 16 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "luna-900k (h)", - "family": "gpt", - "tokens": 239000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 10 - }, - { - "kind": "board", - "label": "0731 @ crof", - "family": "deepseek", - "tokens": 690000, - "pct": 65.2, - "align": "left", - "baseline": "top", - "dx": 10, - "dy": 2 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "top" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "v4.1f @ ds", - "family": "deepseek", - "tokens": 820000, - "pct": 69.6, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -14 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -14 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "sol-900k (h)", - "family": "gpt", - "tokens": 175000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 10 - }, - { - "kind": "board", - "label": "v4.1f-exp @ ds", - "family": "deepseek", - "tokens": 1070000, - "pct": 60.9, - "align": "right", - "baseline": "top", - "dx": -8, - "dy": 6 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "top" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "qwen3.8 @ crof", - "family": "qwen", - "tokens": 690000, - "pct": 69.6, - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 16 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "left", - "baseline": "top", - "dx": 8, - "dy": 16 - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "astra-900k (h)", - "family": "gpt", - "tokens": 147000, - "pct": 69.6, - "align": "center", - "baseline": "bottom", - "dx": 0, - "dy": -10 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "center", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - }, - { - "data": { - "values": [ - { - "kind": "board", - "label": "0731 @ ollama", - "family": "deepseek", - "tokens": 2500000, - "pct": 65.2, - "align": "right", - "baseline": "bottom", - "dx": -8, - "dy": -8 - } - ] - }, - "mark": { - "type": "text", - "fontSize": 10, - "color": "#333", - "align": "right", - "baseline": "bottom" - }, - "encoding": { - "x": { - "field": "tokens", - "type": "quantitative", - "scale": { - "type": "log", - "domain": [ - 60000, - 4000000 - ] - }, - "axis": { - "format": "~s", - "values": [ - 100000, - 200000, - 500000, - 1000000, - 2000000 - ], - "labelFlush": false - } - }, - "y": { - "field": "pct", - "type": "quantitative", - "scale": { - "domain": [ - 44, - 80 - ] - } - }, - "text": { - "field": "label", - "type": "nominal" - }, - "dx": { - "field": "dx", - "type": "quantitative" - }, - "dy": { - "field": "dy", - "type": "quantitative" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/top5-2026-w38.en.vega-lite.json b/assets/specs/top5-2026-w38.en.vega-lite.json deleted file mode 100644 index 388b1c3..0000000 --- a/assets/specs/top5-2026-w38.en.vega-lite.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "background": "white", - "title": { - "text": "AMBER full board: five rank tiers (2026-W38, 23-case library)", - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "lane": "swe-2-max @ Devin", - "pass": 18, - "rank": "#1" - }, - { - "lane": "glm-5.3-flash @ Ollama Cloud", - "pass": 17, - "rank": "#2 tie" - }, - { - "lane": "deepseek-v4.1-flash @ CommandCode", - "pass": 17, - "rank": "#2 tie" - }, - { - "lane": "deepseek-v4.1-flash @ Ollama Cloud", - "pass": 17, - "rank": "#2 tie" - }, - { - "lane": "k3 @ Kimi official coding", - "pass": 17, - "rank": "#2 tie" - }, - { - "lane": "hy4-preview-f @ WorkBuddy", - "pass": 17, - "rank": "#2 tie" - }, - { - "lane": "gpt-6-astra-900k @ OpenAI Codex", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "qwen3.8-27b @ CrofAI", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "deepseek-flash @ OpenCode Go", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "deepseek-v4.1-flash @ DeepSeek official", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "swe-2-high @ Devin", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "doubao-seed-evolving @ Ark Agent Plan", - "pass": 16, - "rank": "#3 tie" - }, - { - "lane": "gpt-5.6-sol-900k @ OpenAI Codex", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "gpt-5.6-luna-900k @ OpenAI Codex", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "deepseek-v4-flash-0731 @ CrofAI", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "deepseek-v4-flash:0731 @ Ollama Cloud", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "swe-2-medium @ Devin", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "swe-2-high @ Devin (re-run)", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "deepseek-v4.1-flash @ WorkBuddy", - "pass": 15, - "rank": "#4 tie" - }, - { - "lane": "glm-5.3-flash @ CrofAI", - "pass": 14, - "rank": "#5 tie" - }, - { - "lane": "swe-1-7-medium @ Devin", - "pass": 14, - "rank": "#5 tie" - }, - { - "lane": "deepseek-v4.1-flash-exp @ DeepSeek official (preview)", - "pass": 14, - "rank": "#5 tie" - }, - { - "lane": "kimi-for-coding @ Kimi official coding", - "pass": 14, - "rank": "#5 tie" - }, - { - "lane": "Qwen3.8-27B @ goldenpotato self-hosted", - "pass": 14, - "rank": "#5 tie" - } - ] - }, - "width": 620, - "height": 700, - "layer": [ - { - "mark": { - "type": "bar", - "cornerRadiusEnd": 3, - "height": 20, - "stroke": "#00414A", - "strokeWidth": 0.75, - "tooltip": true - }, - "encoding": { - "y": { - "field": "lane", - "type": "nominal", - "sort": "-x", - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "title": null - } - }, - "x": { - "field": "pass", - "type": "quantitative", - "scale": { - "domain": [ - 0, - 23 - ] - }, - "axis": { - "title": "cases passed (/ 23)", - "grid": true - } - }, - "color": { - "field": "rank", - "type": "nominal", - "scale": { - "range": [ - "#003A44", - "#00695F", - "#0097A7", - "#26C6DA", - "#80DEEA" - ] - }, - "legend": { - "title": "rank" - } - } - } - }, - { - "mark": { - "type": "text", - "align": "left", - "dx": 4, - "fontSize": 12, - "color": "#006064" - }, - "encoding": { - "y": { - "field": "lane", - "type": "nominal", - "sort": "-x" - }, - "x": { - "field": "pass", - "type": "quantitative" - }, - "text": { - "field": "pass", - "type": "quantitative" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/specs/top5-2026-w38.vega-lite.json b/assets/specs/top5-2026-w38.vega-lite.json deleted file mode 100644 index bd4404d..0000000 --- a/assets/specs/top5-2026-w38.vega-lite.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "$schema": "https://vega.github.io/schema/vega-lite/v5.json", - "background": "white", - "title": { - "text": "AMBER 当前总榜:五个名次档(2026-W38,全库 23 案)", - "fontSize": 16, - "anchor": "start" - }, - "data": { - "values": [ - { - "lane": "swe-2-max @ Devin", - "pass": 18, - "rank": "#1" - }, - { - "lane": "glm-5.3-flash @ Ollama Cloud", - "pass": 17, - "rank": "#2 并列" - }, - { - "lane": "deepseek-v4.1-flash @ CommandCode", - "pass": 17, - "rank": "#2 并列" - }, - { - "lane": "deepseek-v4.1-flash @ Ollama Cloud", - "pass": 17, - "rank": "#2 并列" - }, - { - "lane": "k3 @ Kimi 官方 coding", - "pass": 17, - "rank": "#2 并列" - }, - { - "lane": "hy4-preview-f @ WorkBuddy", - "pass": 17, - "rank": "#2 并列" - }, - { - "lane": "gpt-6-astra-900k @ OpenAI Codex", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "qwen3.8-27b @ CrofAI", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "deepseek-flash @ OpenCode Go", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "deepseek-v4.1-flash @ DeepSeek 官方", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "swe-2-high @ Devin", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "doubao-seed-evolving @ 火山方舟 Agent Plan", - "pass": 16, - "rank": "#3 并列" - }, - { - "lane": "gpt-5.6-sol-900k @ OpenAI Codex", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "gpt-5.6-luna-900k @ OpenAI Codex", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "deepseek-v4-flash-0731 @ CrofAI", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "deepseek-v4-flash:0731 @ Ollama Cloud", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "swe-2-medium @ Devin", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "swe-2-high @ Devin (二跑)", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "deepseek-v4.1-flash @ WorkBuddy", - "pass": 15, - "rank": "#4 并列" - }, - { - "lane": "glm-5.3-flash @ CrofAI", - "pass": 14, - "rank": "#5 并列" - }, - { - "lane": "swe-1-7-medium @ Devin", - "pass": 14, - "rank": "#5 并列" - }, - { - "lane": "deepseek-v4.1-flash-exp @ DeepSeek 官方(预览)", - "pass": 14, - "rank": "#5 并列" - }, - { - "lane": "kimi-for-coding @ Kimi 官方 coding", - "pass": 14, - "rank": "#5 并列" - }, - { - "lane": "Qwen3.8-27B @ goldenpotato 自部署", - "pass": 14, - "rank": "#5 并列" - } - ] - }, - "width": 620, - "height": 700, - "layer": [ - { - "mark": { - "type": "bar", - "cornerRadiusEnd": 3, - "height": 20, - "stroke": "#00414A", - "strokeWidth": 0.75, - "tooltip": true - }, - "encoding": { - "y": { - "field": "lane", - "type": "nominal", - "sort": "-x", - "axis": { - "labelFontSize": 12, - "labelLimit": 0, - "title": null - } - }, - "x": { - "field": "pass", - "type": "quantitative", - "scale": { - "domain": [ - 0, - 23 - ] - }, - "axis": { - "title": "通过案数(/ 23)", - "grid": true - } - }, - "color": { - "field": "rank", - "type": "nominal", - "scale": { - "range": [ - "#003A44", - "#00695F", - "#0097A7", - "#26C6DA", - "#80DEEA" - ] - }, - "legend": { - "title": "名次" - } - } - } - }, - { - "mark": { - "type": "text", - "align": "left", - "dx": 4, - "fontSize": 12, - "color": "#006064" - }, - "encoding": { - "y": { - "field": "lane", - "type": "nominal", - "sort": "-x" - }, - "x": { - "field": "pass", - "type": "quantitative" - }, - "text": { - "field": "pass", - "type": "quantitative" - } - } - } - ] -} \ No newline at end of file diff --git a/assets/top5-2026-w38.en.png b/assets/top5-2026-w38.en.png deleted file mode 100644 index 82b7f82..0000000 Binary files a/assets/top5-2026-w38.en.png and /dev/null differ diff --git a/assets/top5-2026-w38.png b/assets/top5-2026-w38.png deleted file mode 100644 index c80cb89..0000000 Binary files a/assets/top5-2026-w38.png and /dev/null differ diff --git a/assets/top5-card.en.png b/assets/top5-card.en.png deleted file mode 100644 index 515ecb5..0000000 Binary files a/assets/top5-card.en.png and /dev/null differ diff --git a/assets/top5-card.png b/assets/top5-card.png deleted file mode 100644 index 2e6c50c..0000000 Binary files a/assets/top5-card.png and /dev/null differ diff --git a/assets/trust-chain.en.png b/assets/trust-chain.en.png deleted file mode 100644 index e9f2e42..0000000 Binary files a/assets/trust-chain.en.png and /dev/null differ diff --git a/assets/trust-chain.png b/assets/trust-chain.png deleted file mode 100644 index 68f266e..0000000 Binary files a/assets/trust-chain.png and /dev/null differ diff --git a/assets/vendor/vega-embed.min.js b/assets/vendor/vega-embed.min.js deleted file mode 100644 index 8ae6223..0000000 --- a/assets/vendor/vega-embed.min.js +++ /dev/null @@ -1,7 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vega"),require("vega-lite")):"function"==typeof define&&define.amd?define(["vega","vega-lite"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).vegaEmbed=t(e.vega,e.vegaLite)}(this,(function(e,t){"use strict";function n(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var r,i=n(e),o=n(t),a=(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),s=Object.prototype.hasOwnProperty;function l(e,t){return s.call(e,t)}function c(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n0)throw new E('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,n);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new E("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new E("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&h(e.value))throw new E("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,n);if(n)if("add"==e.op){var i=e.path.split("/").length,o=r.split("/").length;if(i!==o+1&&i!==o)throw new E("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,n)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==r)throw new E("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,n)}else if("move"===e.op||"copy"===e.op){var a=x([{op:"_get",path:e.from,value:void 0}],n);if(a&&"OPERATION_PATH_UNRESOLVABLE"===a.name)throw new E("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,n)}}function x(e,t,n){try{if(!Array.isArray(e))throw new E("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)A(f(t),f(e),n||!0);else{n=n||I;for(var r=0;r >1)+h+t+k+E.slice(M);break;default:t=E+h+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=Re(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ne(e)/3))),i=Math.pow(10,-r),o=Ye[8+r/3];return function(t){return n(i*t)+o}}}}function Ve(t){return Math.max(0,-Ne(Math.abs(t)))}function Xe(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ne(e)/3)))-Ne(Math.abs(t)))}function Je(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ne(e)-Ne(t))+1}!function(t){je=Ge(t),Ie=je.format,We=je.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});const Ze=new Date,Qe=new Date;function Ke(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e t+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+Ct(e)));return e}function Cb(t,e,n){return Z(t)&&(e||n)?yp(t,Fb(e||[0,1],n)):t}function Fb(t,e){return e?t.slice().reverse():t}function Sb(t){Ja.call(this,null,t)}dt(Eb,Ja,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===Ud)return Ud+"-"+Td;(function(t){const e=t.type;return cp(e)&&e!==Rd&&e!==Ld&&(t.scheme||t.range&&t.range.length&&t.range.every(xt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?Ud+"-":3===e?qd+"-":"");return(r+n||Td).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=sp(i)()),t)if(!Mb[i]){if("padding"===i&&Ab(r.type))continue;Z(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==Yd&&t!==Hd&&s("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Hd?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*$d(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;A(e.scheme)?r=vp(e.scheme,e.interpolate,e.interpolateGamma):(r=Mp(e.scheme.toLowerCase()))||s(`Unrecognized scheme name: ${e.scheme}`);return n=t===Id?n+1:t===Gd?n-1:t===Pd||t===jd?+e.schemeCount||kb:n,pp(t)?Cb(r,i,e.reverse):Z(r)?_p(Cb(r,i),n):t===Wd?r:r.slice(0,n)}(r,e,n),Z(o))){if(t.interpolator)return t.interpolator(o);s(`Scale type ${r} does not support interpolating color schemes.`)}if(o&&pp(r))return t.interpolator(vp(Fb(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(bp(e.interpolate,e.interpolateGamma)):Z(t.round)?t.round(i):Z(t.rangeRound)&&t.interpolate(i?yh:mh);o&&t.range(Fb(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!A(r)){const e=t.domain(),n=e[0],i=S(e),o=r.step;let a=null==r.start?n:r.start,u=null==r.stop?i:r.stop;o||s("Scale bins parameter missing step property."),a 0&&c>0?(pE(d,p,g,m,l),gE(d,p,m,g,c),pE(d,p,g,m,l),gE(d,p,m,g,c),pE(d,p,g,m,l),gE(d,p,m,g,c)):l>0?(pE(d,p,g,m,l),pE(d,p,m,g,l),pE(d,p,g,m,l),y=m):c>0&&(gE(d,p,g,m,c),gE(d,p,m,g,c),gE(d,p,g,m,c),y=m);const v=u?Math.pow(2,-2*a):1/$e(y);for(let t=0,e=d*p;t${t(o)}
`),a&&(i+=``);const l=Object.keys(s);if(l.length>0){i+="
";for(const e of l){let r=s[e];void 0!==r&&(Jt(r)&&(r=Qt(r,n)),i+=`
"}return i||"{}"}return t(e)},baseURL:"",anchor:"cursor",position:["top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"]};function tn(e,t,{offsetX:n,offsetY:r}){const i=nn({x1:e.clientX,x2:e.clientX,y1:e.clientY,y2:e.clientY},t,n,r),o=["bottom-right","bottom-left","top-right","top-left"];for(const e of o)if(rn(i[e],t))return i[e];return i["top-left"]}function nn(e,t,n,r){const i=(e.x1+e.x2)/2,o=(e.y1+e.y2)/2,a=e.x1-t.width-n,s=i-t.width/2,l=e.x2+n,c=e.y1-t.height-r,f=o-t.height/2,d=e.y2+r;return{top:{x:s,y:c},bottom:{x:s,y:d},left:{x:a,y:f},right:{x:l,y:f},"top-left":{x:a,y:c},"top-right":{x:l,y:c},"bottom-left":{x:a,y:d},"bottom-right":{x:l,y:d}}}function rn(e,t){return e.x>=0&&e.y>=0&&e.x+t.width<=window.innerWidth&&e.y+t.height<=window.innerHeight}function on(e,t,n){return e.clientX>=t.x&&e.clientX<=t.x+n.width&&e.clientY>=t.y&&e.clientY<=t.y+n.height}class an{constructor(e){this.options={...en,...e};const t=this.options.id;if(this.el=null,this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){const e=document.createElement("style");e.setAttribute("id",this.options.styleId),e.innerHTML=function(e){if(!/^[A-Za-z]+[-:.\w]*$/.test(e))throw new Error("Invalid HTML ID");return Zt.toString().replace(Kt,e)}(t);const n=document.head;n.childNodes.length>0?n.insertBefore(e,n.childNodes[0]):n.appendChild(e)}}tooltipHandler(e,t,n,r){if(this.el=document.getElementById(this.options.id),!this.el){this.el=document.createElement("div"),this.el.setAttribute("id",this.options.id),this.el.classList.add("vg-tooltip");(document.fullscreenElement??document.body).appendChild(this.el)}if(null==r||""===r)return void this.el.classList.remove("visible",`${this.options.theme}-theme`);this.el.innerHTML=this.options.formatTooltip(r,this.options.sanitize,this.options.maxDepth,this.options.baseURL),this.el.classList.add("visible",`${this.options.theme}-theme`);const{x:i,y:o}="mark"===this.options.anchor?function(e,t,n,r,i){const{position:o,offsetX:a,offsetY:s}=i,l=function(e,t,n){const r=n.isVoronoi?n.datum.bounds:n.bounds;let i=e.left+t[0]+r.x1,o=e.top+t[1]+r.y1,a=n;for(;a.mark.group;)a=a.mark.group,i+=a.x??0,o+=a.y??0;return{x1:i,x2:i+(r.x2-r.x1),y1:o,y2:o+(r.y2-r.y1)}}(e._el.getBoundingClientRect(),e._origin,n),c=nn(l,r,a,s),f=Array.isArray(o)?o:[o];for(const e of f)if(rn(c[e],r)&&!on(t,c[e],r))return c[e];return tn(t,r,i)}(e,t,n,this.el.getBoundingClientRect(),this.options):tn(t,this.el.getBoundingClientRect(),this.options);this.el.style.top=`${o}px`,this.el.style.left=`${i}px`}}var sn='.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n}\n.vega-embed.has-actions {\n padding-right: 38px;\n}\n.vega-embed details:not([open]) > :not(summary) {\n display: none !important;\n}\n.vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n cursor: pointer;\n line-height: 0px;\n}\n.vega-embed summary::-webkit-details-marker {\n display: none;\n}\n.vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset;\n}\n.vega-embed summary svg {\n width: 14px;\n height: 14px;\n}\n.vega-embed details[open] summary {\n opacity: 0.7;\n}\n.vega-embed:hover summary, .vega-embed:focus-within summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease;\n}\n.vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left;\n}\n.vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none;\n}\n.vega-embed .vega-actions a:hover, .vega-embed .vega-actions a:focus {\n background-color: #f7f7f9;\n color: black;\n}\n.vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: "";\n display: inline-block;\n position: absolute;\n}\n.vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid rgba(0, 0, 0, 0);\n border-bottom-color: #d9d9d9;\n}\n.vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid rgba(0, 0, 0, 0);\n border-bottom-color: #fff;\n}\n.vega-embed .chart-wrapper.fit-x {\n width: 100%;\n}\n.vega-embed .chart-wrapper.fit-y {\n height: 100%;\n}\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: auto;\n padding-right: 14px;\n}\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n';function ln(e,...t){for(const n of t)cn(e,n);return e}function cn(t,n){for(const r of Object.keys(n))e.writeConfig(t,r,n[r],!0)}const fn="6.29.0",dn=i;let pn=o;const un="undefined"!=typeof window?window:void 0;void 0===pn&&un?.vl?.compile&&(pn=un.vl);const hn={export:{svg:!0,png:!0},source:!0,compiled:!0,editor:!0},gn={CLICK_TO_VIEW_ACTIONS:"Click to view actions",COMPILED_ACTION:"View Compiled Vega",EDITOR_ACTION:"Open in Vega Editor",PNG_ACTION:"Save as PNG",SOURCE_ACTION:"View Source",SVG_ACTION:"Save as SVG"},mn={vega:"Vega","vega-lite":"Vega-Lite"},En={vega:dn.version,"vega-lite":pn?pn.version:"not available"},vn={vega:e=>e,"vega-lite":(e,t)=>pn.compile(e,{config:t}).spec},bn='\n',yn="chart-wrapper";function wn(e,t,n,r){const i=`${t} `)}i+="${t(e)} ${t(r)}
${n}`,a=window.open("");a.document.write(i+e+o),a.document.title=`${mn[r]} JSON Source`}function On(e){return!(!e||!("load"in e))}function An(e){return On(e)?e:dn.loader(e)}async function In(t,n,r={}){let i,o;e.isString(n)?(o=An(r.loader),i=JSON.parse(await o.load(n))):i=n;const a=function(t){const n=t.usermeta?.embedOptions??{};return e.isString(n.defaultStyle)&&(n.defaultStyle=!1),n}(i),s=a.loader;o&&!s||(o=An(r.loader??s));const l=await xn(a,o),c=await xn(r,o),f={...ln(c,l),config:e.mergeConfig(c.config??{},l.config??{})};return await async function(t,n,r={},i){const o=r.theme?e.mergeConfig(Wt[r.theme],r.config??{}):r.config,a=e.isBoolean(r.actions)?r.actions:ln({},hn,r.actions??{}),s={...gn,...r.i18n},l=r.renderer??"canvas",c=r.logLevel??dn.Warn,f=r.downloadFileName??"visualization",d="string"==typeof t?document.querySelector(t):t;if(!d)throw new Error(`${t} does not exist`);if(!1!==r.defaultStyle){const e="vega-embed-style",{root:t,rootContainer:n}=function(e){const t=e.getRootNode?e.getRootNode():document;return t instanceof ShadowRoot?{root:t,rootContainer:t}:{root:document,rootContainer:document.head??document.body}}(d);if(!t.getElementById(e)){const t=document.createElement("style");t.id=e,t.innerHTML=void 0===r.defaultStyle||!0===r.defaultStyle?sn.toString():r.defaultStyle,n.appendChild(t)}}const p=function(e,t){if(e.$schema){const n=je(e.$schema);t&&t!==n.library&&console.warn(`The given visualization spec is written in ${mn[n.library]}, but mode argument sets ${mn[t]??t}.`);const r=n.library;return $e(En[r],`^${n.version.slice(1)}`)||console.warn(`The input spec uses ${mn[r]} ${n.version}, but the current version of ${mn[r]} is v${En[r]}.`),r}return"mark"in e||"encoding"in e||"layer"in e||"hconcat"in e||"vconcat"in e||"facet"in e||"repeat"in e?"vega-lite":"marks"in e||"signals"in e||"scales"in e||"axes"in e?"vega":t??"vega"}(n,r.mode);let u=vn[p](n,o);if("vega-lite"===p&&u.$schema){const e=je(u.$schema);$e(En.vega,`^${e.version.slice(1)}`)||console.warn(`The compiled spec uses Vega ${e.version}, but current version is v${En.vega}.`)}d.classList.add("vega-embed"),a&&d.classList.add("has-actions");d.innerHTML="";let h=d;if(a){const e=document.createElement("div");e.classList.add(yn),d.appendChild(e),h=e}const g=r.patch;g&&(u=g instanceof Function?g(u):A(u,g,!0,!1).newDocument);r.formatLocale&&dn.formatLocale(r.formatLocale);r.timeFormatLocale&&dn.timeFormatLocale(r.timeFormatLocale);if(r.expressionFunctions)for(const e in r.expressionFunctions){const t=r.expressionFunctions[e];"fn"in t?dn.expressionFunction(e,t.fn,t.visitor):t instanceof Function&&dn.expressionFunction(e,t)}const{ast:m}=r,E=dn.parse(u,"vega-lite"===p?{}:o,{ast:m}),v=new(r.viewClass||dn.View)(E,{loader:i,logLevel:c,renderer:l,...m?{expr:dn.expressionInterpreter??r.expr??ze}:{}});if(v.addSignalListener("autosize",((e,t)=>{const{type:n}=t;"fit-x"==n?(h.classList.add("fit-x"),h.classList.remove("fit-y")):"fit-y"==n?(h.classList.remove("fit-x"),h.classList.add("fit-y")):"fit"==n?h.classList.add("fit-x","fit-y"):h.classList.remove("fit-x","fit-y")})),!1!==r.tooltip){const{loader:e,tooltip:t}=r,n=e&&!On(e)?e?.baseURL:void 0,i="function"==typeof t?t:new an({baseURL:n,...!0===t?{}:t}).call;v.tooltip(i)}let b,{hover:y}=r;void 0===y&&(y="vega"===p);if(y){const{hoverSet:e,updateSet:t}="boolean"==typeof y?{}:y;v.hover(e,t)}r&&(null!=r.width&&v.width(r.width),null!=r.height&&v.height(r.height),null!=r.padding&&v.padding(r.padding));if(await v.initialize(h,r.bind).runAsync(),!1!==a){let t=d;if(!1!==r.defaultStyle||r.forceActionsMenu){const e=document.createElement("details");e.title=s.CLICK_TO_VIEW_ACTIONS,d.append(e),t=e;const n=document.createElement("summary");n.innerHTML=bn,e.append(n),b=t=>{e.contains(t.target)||e.removeAttribute("open")},document.addEventListener("click",b)}const i=document.createElement("div");if(t.append(i),i.classList.add("vega-actions"),!0===a||!1!==a.export)for(const t of["svg","png"])if(!0===a||!0===a.export||a.export[t]){const n=s[`${t.toUpperCase()}_ACTION`],o=document.createElement("a"),a=e.isObject(r.scaleFactor)?r.scaleFactor[t]:r.scaleFactor;o.text=n,o.href="#",o.target="_blank",o.download=`${f}.${t}`,o.addEventListener("mousedown",(async function(e){e.preventDefault();const n=await v.toImageURL(t,a);this.href=n})),i.append(o)}if(!0===a||!1!==a.source){const e=document.createElement("a");e.text=s.SOURCE_ACTION,e.href="#",e.addEventListener("click",(function(e){wn(k(n),r.sourceHeader??"",r.sourceFooter??"",p),e.preventDefault()})),i.append(e)}if("vega-lite"===p&&(!0===a||!1!==a.compiled)){const e=document.createElement("a");e.text=s.COMPILED_ACTION,e.href="#",e.addEventListener("click",(function(e){wn(k(u),r.sourceHeader??"",r.sourceFooter??"","vega"),e.preventDefault()})),i.append(e)}if(!0===a||!1!==a.editor){const e=r.editorUrl??"https://vega.github.io/editor/",t=document.createElement("a");t.text=s.EDITOR_ACTION,t.href="#",t.addEventListener("click",(function(t){!function(e,t,n){const r=e.open(t),{origin:i}=new URL(t);let o=40;e.addEventListener("message",(function t(n){n.source===r&&(o=0,e.removeEventListener("message",t,!1))}),!1),setTimeout((function e(){o<=0||(r.postMessage(n,i),setTimeout(e,250),o-=1)}),250)}(window,e,{config:o,mode:g?"vega":p,renderer:l,spec:k(g?u:n)}),t.preventDefault()})),i.append(t)}}function w(){b&&document.removeEventListener("click",b),v.finalize()}return{view:v,spec:n,vgSpec:u,finalize:w,embedOptions:r}}(t,i,f,o)}async function xn(t,n){const r=e.isString(t.config)?JSON.parse(await n.load(t.config)):t.config??{},i=e.isString(t.patch)?JSON.parse(await n.load(t.patch)):t.patch;return{...t,...i?{patch:i}:{},...r?{config:r}:{}}}async function Ln(e,t={}){const n=document.createElement("div");n.classList.add("vega-embed-wrapper");const r=document.createElement("div");n.appendChild(r);const i=!0===t.actions||!1===t.actions?t.actions:{export:!0,source:!1,compiled:!0,editor:!0,...t.actions},o=await In(r,e,{actions:i,...t});return n.value=o.view,n}const Nn=(...t)=>{return t.length>1&&(e.isString(t[0])&&!((n=t[0]).startsWith("http://")||n.startsWith("https://")||n.startsWith("//"))||t[0]instanceof HTMLElement||3===t.length)?In(t[0],t[1],t[2]):Ln(t[0],t[1]);var n};return Nn.vegaLite=pn,Nn.vl=pn,Nn.container=Ln,Nn.embed=In,Nn.vega=dn,Nn.default=In,Nn.version=fn,Nn}));
-//# sourceMappingURL=vega-embed.min.js.map
diff --git a/assets/vendor/vega-lite.min.js b/assets/vendor/vega-lite.min.js
deleted file mode 100644
index 31b0032..0000000
--- a/assets/vendor/vega-lite.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vega")):"function"==typeof define&&define.amd?define(["exports","vega"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vegaLite={},e.vega)}(this,(function(e,t){"use strict";var n="5.23.0";function i(e){return J(e,"or")}function r(e){return J(e,"and")}function o(e){return J(e,"not")}function a(e,t){if(o(e))a(e.not,t);else if(r(e))for(const n of e.and)a(n,t);else if(i(e))for(const n of e.or)a(n,t);else t(e)}function s(e,t){return o(e)?{not:s(e.not,t)}:r(e)?{and:e.and.map((e=>s(e,t)))}:i(e)?{or:e.or.map((e=>s(e,t)))}:t(e)}const l=structuredClone;function c(e){throw new Error(e)}function u(e,n){const i={};for(const r of n)t.hasOwnProperty(e,r)&&(i[r]=e[r]);return i}function f(e,t){const n={...e};for(const e of t)delete n[e];return n}function d(e){if(t.isNumber(e))return e;const n=t.isString(e)?e:Q(e);if(n.length<250)return n;let i=0;for(let e=0;e`,o=`1&&void 0!==arguments[1]?arguments[1]:{},n=e.field;const i=t.prefix;let r=t.suffix,o="";if(function(e){return"count"===e.aggregate}(e))n=B("count");else{let i;if(!t.nofn)if(function(e){return J(e,"op")}(e))i=e.op;else{const{bin:a,aggregate:s,timeUnit:l}=e;mn(a)?(i=dn(a),r=(t.binSuffix??"")+(t.suffix??"")):s?an(s)?(o=`["${n}"]`,n=`argmax_${s.argmax}`):on(s)?(o=`["${n}"]`,n=`argmin_${s.argmin}`):i=String(s):l&&!Ti(l)&&(i=function(e){const{utc:t,...n}=Ii(e);return n.unit?(t?"utc":"")+D(n).map((e=>C(`${"unit"===e?"":`_${e}_`}${n[e]}`))).join(""):(t?"utc":"")+"timeunit"+D(n).map((e=>C(`_${e}_${n[e]}`))).join("")}(l),r=(!["range","mid"].includes(t.binSuffix)&&t.binSuffix||"")+(t.suffix??""))}i&&(n=n?`${i}_${n}`:i)}return r&&(n=`${n}_${r}`),i&&(n=`${i}_${n}`),t.forAs?L(n):t.expr?T(n,t.expr)+o:M(n)+o}function pa(e){switch(e.type){case"nominal":case"ordinal":case"geojson":return!0;case"quantitative":return Zo(e)&&!!e.bin;case"temporal":return!1}throw new Error(oi(e.type))}const ga=(e,t)=>{switch(t.fieldTitle){case"plain":return e.field;case"functional":return function(e){const{aggregate:t,bin:n,timeUnit:i,field:r}=e;if(an(t))return`${r} for argmax(${t.argmax})`;if(on(t))return`${r} for argmin(${t.argmin})`;const o=i&&!Ti(i)?Ii(i):void 0,a=t||o?.unit||o?.maxbins&&"timeunit"||mn(n)&&"bin";return a?`${a.toUpperCase()}(${r})`:r}(e);default:return function(e,t){const{field:n,bin:i,timeUnit:r,aggregate:o}=e;if("count"===o)return t.countTitle;if(mn(i))return`${n} (binned)`;if(r&&!Ti(r)){const e=Ii(r)?.unit;if(e)return`${n} (${Ri(e).join("-")})`}else if(o)return an(o)?`${n} for max ${o.argmax}`:on(o)?`${n} for min ${o.argmin}`:`${N(o)} of ${n}`;return n}(e,t)}};let ha=ga;function ya(e){ha=e}function va(e,t,n){let{allowDisabling:i,includeDefault:r=!0}=n;const o=ba(e)?.title;if(!Zo(e))return o??e.title;const a=e,s=r?xa(a,t):void 0;return i?U(o,a.title,s):o??a.title??s}function ba(e){return ca(e)&&e.axis?e.axis:ua(e)&&e.legend?e.legend:Wo(e)&&e.header?e.header:void 0}function xa(e,t){return ha(e,t)}function $a(e){if(fa(e)){const{format:t,formatType:n}=e;return{format:t,formatType:n}}{const t=ba(e)??{},{format:n,formatType:i}=t;return{format:n,formatType:i}}}function wa(e){return Zo(e)?e:Jo(e)?e.condition:void 0}function ka(e){return oa(e)?e:Ko(e)?e.condition:void 0}function Sa(e,n,i){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(t.isString(e)||t.isNumber(e)||t.isBoolean(e)){return Si(function(e,t,n){return`Channel ${e} is a ${t}. Converted to {value: ${Q(n)}}.`}(n,t.isString(e)?"string":t.isNumber(e)?"number":"boolean",e)),{value:e}}return oa(e)?Da(e,n,i,r):Ko(e)?{...e,condition:Da(e.condition,n,i,r)}:e}function Da(e,n,i,r){if(fa(e)){const{format:t,formatType:o,...a}=e;if(So(o)&&!i.customFormatTypes)return Si(ii(n)),Da(a,n,i,r)}else{const t=ca(e)?"axis":ua(e)?"legend":Wo(e)?"header":null;if(t&&e[t]){const{format:o,formatType:a,...s}=e[t];if(So(a)&&!i.customFormatTypes)return Si(ii(n)),Da({...e,[t]:s},n,i,r)}}return Zo(e)?Fa(e,n,r):function(e){let n=e.type;if(n)return e;const{datum:i}=e;return n=t.isNumber(i)?"quantitative":t.isString(i)?"nominal":Di(i)?"temporal":void 0,{...e,type:n}}(e)}function Fa(e,n){let{compositeMark:i=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{aggregate:r,timeUnit:o,bin:a,field:s}=e,l={...e};if(i||!r||sn(r)||an(r)||on(r)||(Si(function(e){return`Invalid aggregation operator "${e}".`}(r)),delete l.aggregate),o&&(l.timeUnit=Ii(o)),s&&(l.field=`${s}`),mn(a)&&(l.bin=Oa(a,n)),pn(a)&&!_t(n)&&Si(function(e){return`Channel ${e} should not be used with "binned" bin.`}(n)),aa(l)){const{type:e}=l,t=function(e){if(e)switch(e=e.toLowerCase()){case"q":case sr:return"quantitative";case"t":case cr:return"temporal";case"o":case lr:return"ordinal";case"n":case ur:return"nominal";case fr:return"geojson"}}(e);e!==t&&(l.type=t),"quantitative"!==e&&cn(r)&&(Si(function(e,t){return`Invalid field type "${e}" for aggregate: "${t}", using "quantitative" instead.`}(e,r)),l.type="quantitative")}else if(!it(n)){const e=function(e,n){switch(n){case"latitude":case"longitude":return"quantitative";case"row":case"column":case"facet":case"shape":case"strokeDash":return"nominal";case"order":return"ordinal"}if(Vo(e)&&t.isArray(e.sort))return"ordinal";const{aggregate:i,bin:r,timeUnit:o}=e;if(o)return"temporal";if(r||i&&!an(i)&&!on(i))return"quantitative";if(la(e)&&e.scale?.type)switch(mr[e.scale.type]){case"numeric":case"discretizing":return"quantitative";case"time":return"temporal"}return"nominal"}(l,n);l.type=e}if(aa(l)){const{compatible:e,warning:t}=function(e,t){const n=e.type;if("geojson"===n&&"shape"!==t)return{compatible:!1,warning:`Channel ${t} should not be used with a geojson data.`};switch(t){case K:case Z:case ee:return pa(e)?za:{compatible:!1,warning:ci(t)};case te:case ne:case oe:case ae:case he:case ye:case ve:case Oe:case Ce:case _e:case Pe:case Ne:case Ae:case $e:case ce:case se:case Te:return za;case de:case pe:case fe:case me:return n!==sr?{compatible:!1,warning:`Channel ${t} should be used with a quantitative field only, not ${e.type} field.`}:za;case we:case ke:case Se:case De:case xe:case ue:case le:case ie:case re:case ge:return"nominal"!==n||e.sort?za:{compatible:!1,warning:`Channel ${t} should not be used with an unsorted discrete field.`};case be:case Fe:return pa(e)||la(i=e)&&Fr(i.scale?.type)?za:{compatible:!1,warning:ui(t)};case ze:return"nominal"!==e.type||"sort"in e?za:{compatible:!1,warning:"Channel order is inappropriate for nominal field, which has no inherent order."}}var i}(l,n)||{};!1===e&&Si(t)}if(Vo(l)&&t.isString(l.sort)){const{sort:e}=l;if(Ro(e))return{...l,sort:{encoding:e}};const t=e.substring(1);if("-"===e.charAt(0)&&Ro(t))return{...l,sort:{encoding:t,order:"descending"}}}if(Wo(l)){const{header:e}=l;if(e){const{orient:t,...n}=e;if(t)return{...l,header:{...n,labelOrient:e.labelOrient||t,titleOrient:e.titleOrient||t}}}}return l}function Oa(e,n){return t.isBoolean(e)?{maxbins:yn(n)}:"binned"===e?{binned:!0}:e.maxbins||e.step?e:{...e,maxbins:yn(n)}}const za={compatible:!0};function Ca(e){const{formatType:t}=$a(e);return"time"===t||!t&&((n=e)&&("temporal"===n.type||Zo(n)&&!!n.timeUnit));var n}function _a(e,n){let{timeUnit:i,type:r,wrapTime:o,undefinedIfExprNotRequired:a}=n;const s=i&&Ii(i)?.unit;let l,c=s||"temporal"===r;return vn(e)?l=e.expr:wn(e)?l=e.signal:Di(e)?(c=!0,l=Pi(e)):(t.isString(e)||t.isNumber(e))&&c&&(l=`datetime(${Q(e)})`,function(e){return t.hasOwnProperty(Ni,e)}(s)&&(t.isNumber(e)&&e<1e4||t.isString(e)&&isNaN(Date.parse(e)))&&(l=Pi({[s]:e}))),l?o&&c?`time(${l})`:l:a?void 0:Q(e)}function Pa(e,t){const{type:n}=e;return t.map((t=>{const i=_a(t,{timeUnit:Zo(e)&&!Ti(e.timeUnit)?e.timeUnit:void 0,type:n,undefinedIfExprNotRequired:!0});return void 0!==i?{signal:i}:t}))}function Na(e,t){return mn(e.bin)?Qt(t)&&["ordinal","nominal"].includes(e.type):(console.warn("Only call this method for binned field defs."),!1)}const Aa={labelAlign:{part:"labels",vgProp:"align"},labelBaseline:{part:"labels",vgProp:"baseline"},labelColor:{part:"labels",vgProp:"fill"},labelFont:{part:"labels",vgProp:"font"},labelFontSize:{part:"labels",vgProp:"fontSize"},labelFontStyle:{part:"labels",vgProp:"fontStyle"},labelFontWeight:{part:"labels",vgProp:"fontWeight"},labelOpacity:{part:"labels",vgProp:"opacity"},labelOffset:null,labelPadding:null,gridColor:{part:"grid",vgProp:"stroke"},gridDash:{part:"grid",vgProp:"strokeDash"},gridDashOffset:{part:"grid",vgProp:"strokeDashOffset"},gridOpacity:{part:"grid",vgProp:"opacity"},gridWidth:{part:"grid",vgProp:"strokeWidth"},tickColor:{part:"ticks",vgProp:"stroke"},tickDash:{part:"ticks",vgProp:"strokeDash"},tickDashOffset:{part:"ticks",vgProp:"strokeDashOffset"},tickOpacity:{part:"ticks",vgProp:"opacity"},tickSize:null,tickWidth:{part:"ticks",vgProp:"strokeWidth"}};function Ta(e){return e?.condition}const ja=["domain","grid","labels","ticks","title"],Ea={grid:"grid",gridCap:"grid",gridColor:"grid",gridDash:"grid",gridDashOffset:"grid",gridOpacity:"grid",gridScale:"grid",gridWidth:"grid",orient:"main",bandPosition:"both",aria:"main",description:"main",domain:"main",domainCap:"main",domainColor:"main",domainDash:"main",domainDashOffset:"main",domainOpacity:"main",domainWidth:"main",format:"main",formatType:"main",labelAlign:"main",labelAngle:"main",labelBaseline:"main",labelBound:"main",labelColor:"main",labelFlush:"main",labelFlushOffset:"main",labelFont:"main",labelFontSize:"main",labelFontStyle:"main",labelFontWeight:"main",labelLimit:"main",labelLineHeight:"main",labelOffset:"main",labelOpacity:"main",labelOverlap:"main",labelPadding:"main",labels:"main",labelSeparation:"main",maxExtent:"main",minExtent:"main",offset:"both",position:"main",tickCap:"main",tickColor:"main",tickDash:"main",tickDashOffset:"main",tickMinStep:"both",tickOffset:"both",tickOpacity:"main",tickRound:"both",ticks:"main",tickSize:"main",tickWidth:"both",title:"main",titleAlign:"main",titleAnchor:"main",titleAngle:"main",titleBaseline:"main",titleColor:"main",titleFont:"main",titleFontSize:"main",titleFontStyle:"main",titleFontWeight:"main",titleLimit:"main",titleLineHeight:"main",titleOpacity:"main",titlePadding:"main",titleX:"main",titleY:"main",encode:"both",scale:"both",tickBand:"both",tickCount:"both",tickExtra:"both",translate:"both",values:"both",zindex:"both"},Ma={orient:1,aria:1,bandPosition:1,description:1,domain:1,domainCap:1,domainColor:1,domainDash:1,domainDashOffset:1,domainOpacity:1,domainWidth:1,format:1,formatType:1,grid:1,gridCap:1,gridColor:1,gridDash:1,gridDashOffset:1,gridOpacity:1,gridWidth:1,labelAlign:1,labelAngle:1,labelBaseline:1,labelBound:1,labelColor:1,labelFlush:1,labelFlushOffset:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelLineHeight:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labels:1,labelSeparation:1,maxExtent:1,minExtent:1,offset:1,position:1,tickBand:1,tickCap:1,tickColor:1,tickCount:1,tickDash:1,tickDashOffset:1,tickExtra:1,tickMinStep:1,tickOffset:1,tickOpacity:1,tickRound:1,ticks:1,tickSize:1,tickWidth:1,title:1,titleAlign:1,titleAnchor:1,titleAngle:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titlePadding:1,titleX:1,titleY:1,translate:1,values:1,zindex:1},Ra={...Ma,style:1,labelExpr:1,encoding:1};function La(e){return t.hasOwnProperty(Ra,e)}const qa=D({axis:1,axisBand:1,axisBottom:1,axisDiscrete:1,axisLeft:1,axisPoint:1,axisQuantitative:1,axisRight:1,axisTemporal:1,axisTop:1,axisX:1,axisXBand:1,axisXDiscrete:1,axisXPoint:1,axisXQuantitative:1,axisXTemporal:1,axisY:1,axisYBand:1,axisYDiscrete:1,axisYPoint:1,axisYQuantitative:1,axisYTemporal:1});function Ua(e){return J(e,"mark")}class Wa{constructor(e,t){this.name=e,this.run=t}hasMatchingType(e){return!!Ua(e)&&(no(t=e.mark)?t.type:t)===this.name;var t}}function Ia(e,n){const i=e&&e[n];return!!i&&(t.isArray(i)?g(i,(e=>!!e.field)):Zo(i)||Jo(i))}function Ba(e,n){const i=e&&e[n];return!!i&&(t.isArray(i)?g(i,(e=>!!e.field)):Zo(i)||ta(i)||Ko(i))}function Va(e,t){if(_t(t)){const n=e[t];if((Zo(n)||ta(n))&&(ar(n.type)||Zo(n)&&n.timeUnit)){return Ba(e,ct(t))}}return!1}function Ha(e){return g(He,(n=>{if(Ia(e,n)){const i=e[n];if(t.isArray(i))return g(i,(e=>!!e.aggregate));{const e=wa(i);return e&&!!e.aggregate}}return!1}))}function Ga(e,n){const i=[],r=[],o=[],a=[],s={};return Qa(e,((l,c)=>{if(Zo(l)){const{field:u,aggregate:f,bin:d,timeUnit:m,...p}=l;if(f||m||d){const e=ba(l),g=e?.title;let h=ma(l,{forAs:!0});const y={...g?[]:{title:va(l,n,{allowDisabling:!0})},...p,field:h};if(f){let e;if(an(f)?(e="argmax",h=ma({op:"argmax",field:f.argmax},{forAs:!0}),y.field=`${h}.${u}`):on(f)?(e="argmin",h=ma({op:"argmin",field:f.argmin},{forAs:!0}),y.field=`${h}.${u}`):"boxplot"!==f&&"errorbar"!==f&&"errorband"!==f&&(e=f),e){const t={op:e,as:h};u&&(t.field=u),a.push(t)}}else if(i.push(h),aa(l)&&mn(d)){if(r.push({bin:d,field:u,as:h}),i.push(ma(l,{binSuffix:"end"})),Na(l,c)&&i.push(ma(l,{binSuffix:"range"})),_t(c)){const e={field:`${h}_end`};s[`${c}2`]=e}y.bin="binned",it(c)||(y.type=sr)}else if(m&&!Ti(m)){o.push({timeUnit:m,field:u,as:h});const e=aa(l)&&l.type!==cr&&"time";e&&(c===Oe||c===Pe?y.formatType=e:!function(e){return t.hasOwnProperty(Ft,e)}(c)?_t(c)&&(y.axis={formatType:e,...y.axis}):y.legend={formatType:e,...y.legend})}s[c]=y}else i.push(u),s[c]=e[c]}else s[c]=e[c]})),{bins:r,timeUnits:o,aggregate:a,groupby:i,encoding:s}}function Ya(e,t,n){const i=Jt(t,n);if(!i)return!1;if("binned"===i){const n=e[t===ie?te:ne];return!!(Zo(n)&&Zo(e[t])&&pn(n.bin))}return!0}function Xa(e,t){const n={};for(const i of D(e)){const r=Sa(e[i],i,t,{compositeMark:!0});n[i]=r}return n}function Qa(e,n,i){if(e)for(const r of D(e)){const o=e[r];if(t.isArray(o))for(const e of o)n.call(i,e,r);else n.call(i,o,r)}}function Ja(e,n){return D(n).reduce(((i,r)=>{switch(r){case te:case ne:case Ne:case Te:case Ae:case ie:case re:case oe:case ae:case ce:case ue:case se:case le:case ge:case fe:case de:case me:case pe:case Oe:case be:case $e:case Pe:return i;case ze:if("line"===e||"trail"===e)return i;case Ce:case _e:{const e=n[r];if(t.isArray(e)||Zo(e))for(const n of t.array(e))n.aggregate||i.push(ma(n,{}));return i}case xe:if("trail"===e)return i;case he:case ye:case ve:case we:case ke:case Se:case Fe:case De:{const e=wa(n[r]);return e&&!e.aggregate&&i.push(ma(e,{})),i}}}),[])}function Ka(e,n,i){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if("tooltip"in i)return{tooltip:i.tooltip};return{tooltip:[...e.map((e=>{let{fieldPrefix:t,titlePrefix:i}=e;const o=r?` of ${Za(n)}`:"";return{field:t+n.field,type:n.type,title:wn(i)?{signal:`${i}"${escape(o)}"`}:i+o}})),...b(function(e){const n=[];for(const i of D(e))if(Ia(e,i)){const r=e[i],o=t.array(r);for(const e of o)Zo(e)?n.push(e):Jo(e)&&n.push(e.condition)}return n}(i).map(da),d)]}}function Za(e){const{title:t,field:n}=e;return U(t,n)}function es(e,n,i,r,o){const{scale:a,axis:s}=i;return l=>{let{partName:c,mark:u,positionPrefix:f,endPositionPrefix:d,extraEncoding:m={}}=l;const p=Za(i);return ts(e,c,o,{mark:u,encoding:{[n]:{field:`${f}_${i.field}`,type:i.type,...void 0!==p?{title:p}:{},...void 0!==a?{scale:a}:{},...void 0!==s?{axis:s}:{}},...t.isString(d)?{[`${n}2`]:{field:`${d}_${i.field}`}}:{},...r,...m}})}}function ts(e,n,i,r){const{clip:o,color:a,opacity:s}=e,l=e.type;return e[n]||void 0===e[n]&&i[n]?[{...r,mark:{...i[n],...o?{clip:o}:{},...a?{color:a}:{},...s?{opacity:s}:{},...no(r.mark)?r.mark:{type:r.mark},style:`${l}-${String(n)}`,...t.isBoolean(e[n])?{}:e[n]}}]:[]}function ns(e,t,n){const{encoding:i}=e,r="vertical"===t?"y":"x",o=i[r],a=i[`${r}2`],s=i[`${r}Error`],l=i[`${r}Error2`];return{continuousAxisChannelDef:is(o,n),continuousAxisChannelDef2:is(a,n),continuousAxisChannelDefError:is(s,n),continuousAxisChannelDefError2:is(l,n),continuousAxis:r}}function is(e,t){if(e?.aggregate){const{aggregate:n,...i}=e;return n!==t&&Si(function(e,t){return`Continuous axis should not have customized aggregation function ${e}; ${t} already agregates the axis.`}(n,t)),i}return e}function rs(e,t){const{mark:n,encoding:i}=e,{x:r,y:o}=i;if(no(n)&&n.orient)return n.orient;if(na(r)){if(na(o)){const e=Zo(r)&&r.aggregate,n=Zo(o)&&o.aggregate;if(e||n!==t){if(n||e!==t){if(e===t&&n===t)throw new Error("Both x and y cannot have aggregate");return Ca(o)&&!Ca(r)?"horizontal":"vertical"}return"horizontal"}return"vertical"}return"horizontal"}if(na(o))return"vertical";throw new Error(`Need a valid continuous axis for ${t}s`)}const os="boxplot",as=new Wa(os,ls);function ss(e){return t.isNumber(e)?"tukey":e}function ls(e,n){let{config:i}=n;e={...e,encoding:Xa(e.encoding,i)};const{mark:r,encoding:o,params:a,projection:s,...l}=e,c=no(r)?r:{type:r};a&&Si(Kn("boxplot"));const u=c.extent??i.boxplot.extent,d=En("size",c,i),m=c.invalid,p=ss(u),{bins:g,timeUnits:h,transform:y,continuousAxisChannelDef:v,continuousAxis:b,groupby:x,aggregate:$,encodingWithoutContinuousAxis:w,ticksOrient:k,boxOrient:D,customTooltipWithoutAggregatedField:F}=function(e,n,i){const r=rs(e,os),{continuousAxisChannelDef:o,continuousAxis:a}=ns(e,r,os),s=o.field,l=L(s),c=ss(n),u=[...cs(s),{op:"median",field:s,as:`mid_box_${l}`},{op:"min",field:s,as:("min-max"===c?"lower_whisker_":"min_")+l},{op:"max",field:s,as:("min-max"===c?"upper_whisker_":"max_")+l}],f="min-max"===c||"tukey"===c?[]:[{calculate:`${j(`upper_box_${l}`)} - ${j(`lower_box_${l}`)}`,as:`iqr_${l}`},{calculate:`min(${j(`upper_box_${l}`)} + ${j(`iqr_${l}`)} * ${n}, ${j(`max_${l}`)})`,as:`upper_whisker_${l}`},{calculate:`max(${j(`lower_box_${l}`)} - ${j(`iqr_${l}`)} * ${n}, ${j(`min_${l}`)})`,as:`lower_whisker_${l}`}],{[a]:d,...m}=e.encoding,{customTooltipWithoutAggregatedField:p,filteredEncoding:g}=function(e){const{tooltip:n,...i}=e;if(!n)return{filteredEncoding:i};let r,o;if(t.isArray(n)){for(const e of n)e.aggregate?(r||(r=[]),r.push(e)):(o||(o=[]),o.push(e));r&&(i.tooltip=r)}else n.aggregate?i.tooltip=n:o=n;return t.isArray(o)&&1===o.length&&(o=o[0]),{customTooltipWithoutAggregatedField:o,filteredEncoding:i}}(m),{bins:h,timeUnits:y,aggregate:v,groupby:b,encoding:x}=Ga(g,i),$="vertical"===r?"horizontal":"vertical",w=r,k=[...h,...y,{aggregate:[...v,...u],groupby:b},...f];return{bins:h,timeUnits:y,transform:k,groupby:b,aggregate:v,continuousAxisChannelDef:o,continuousAxis:a,encodingWithoutContinuousAxis:x,ticksOrient:$,boxOrient:w,customTooltipWithoutAggregatedField:p}}(e,u,i),O=L(v.field),{color:z,size:C,..._}=w,P=e=>es(c,b,v,e,i.boxplot),N=P(_),A=P(w),T=(t.isObject(i.boxplot.box)?i.boxplot.box.color:i.mark.color)||"#4c78a8",E=P({..._,...C?{size:C}:{},color:{condition:{test:`${j(`lower_box_${v.field}`)} >= ${j(`upper_box_${v.field}`)}`,...z||{value:T}}}}),M=Ka([{fieldPrefix:"min-max"===p?"upper_whisker_":"max_",titlePrefix:"Max"},{fieldPrefix:"upper_box_",titlePrefix:"Q3"},{fieldPrefix:"mid_box_",titlePrefix:"Median"},{fieldPrefix:"lower_box_",titlePrefix:"Q1"},{fieldPrefix:"min-max"===p?"lower_whisker_":"min_",titlePrefix:"Min"}],v,w),R={type:"tick",color:"black",opacity:1,orient:k,invalid:m,aria:!1},q="min-max"===p?M:Ka([{fieldPrefix:"upper_whisker_",titlePrefix:"Upper Whisker"},{fieldPrefix:"lower_whisker_",titlePrefix:"Lower Whisker"}],v,w),U=[...N({partName:"rule",mark:{type:"rule",invalid:m,aria:!1},positionPrefix:"lower_whisker",endPositionPrefix:"lower_box",extraEncoding:q}),...N({partName:"rule",mark:{type:"rule",invalid:m,aria:!1},positionPrefix:"upper_box",endPositionPrefix:"upper_whisker",extraEncoding:q}),...N({partName:"ticks",mark:R,positionPrefix:"lower_whisker",extraEncoding:q}),...N({partName:"ticks",mark:R,positionPrefix:"upper_whisker",extraEncoding:q})],W=[..."tukey"!==p?U:[],...A({partName:"box",mark:{type:"bar",...d?{size:d}:{},orient:D,invalid:m,ariaRoleDescription:"box"},positionPrefix:"lower_box",endPositionPrefix:"upper_box",extraEncoding:M}),...E({partName:"median",mark:{type:"tick",invalid:m,...t.isObject(i.boxplot.median)&&i.boxplot.median.color?{color:i.boxplot.median.color}:{},...d?{size:d}:{},orient:k,aria:!1},positionPrefix:"mid_box",extraEncoding:M})];if("min-max"===p)return{...l,transform:(l.transform??[]).concat(y),layer:W};const I=j(`lower_box_${v.field}`),B=j(`upper_box_${v.field}`),V=`(${B} - ${I})`,H=`${I} - ${u} * ${V}`,G=`${B} + ${u} * ${V}`,Y=j(v.field),X={joinaggregate:cs(v.field),groupby:x},Q={transform:[{filter:`(${H} <= ${Y}) && (${Y} <= ${G})`},{aggregate:[{op:"min",field:v.field,as:`lower_whisker_${O}`},{op:"max",field:v.field,as:`upper_whisker_${O}`},{op:"min",field:`lower_box_${v.field}`,as:`lower_box_${O}`},{op:"max",field:`upper_box_${v.field}`,as:`upper_box_${O}`},...$],groupby:x}],layer:U},{tooltip:J,...K}=_,{scale:Z,axis:ee}=v,te=Za(v),ne=f(ee,["title"]),ie=ts(c,"outliers",i.boxplot,{transform:[{filter:`(${Y} < ${H}) || (${Y} > ${G})`}],mark:"point",encoding:{[b]:{field:v.field,type:v.type,...void 0!==te?{title:te}:{},...void 0!==Z?{scale:Z}:{},...S(ne)?{}:{axis:ne}},...K,...z?{color:z}:{},...F?{tooltip:F}:{}}})[0];let re;const oe=[...g,...h,X];return ie?re={transform:oe,layer:[ie,Q]}:(re=Q,re.transform.unshift(...oe)),{...l,layer:[re,{transform:y,layer:W}]}}function cs(e){const t=L(e);return[{op:"q1",field:e,as:`lower_box_${t}`},{op:"q3",field:e,as:`upper_box_${t}`}]}const us="errorbar",fs=new Wa(us,ds);function ds(e,t){let{config:n}=t;e={...e,encoding:Xa(e.encoding,n)};const{transform:i,continuousAxisChannelDef:r,continuousAxis:o,encodingWithoutContinuousAxis:a,ticksOrient:s,markDef:l,outerSpec:c,tooltipEncoding:u}=ps(e,us,n);delete a.size;const f=es(l,o,r,a,n.errorbar),d=l.thickness,m=l.size,p={type:"tick",orient:s,aria:!1,...void 0!==d?{thickness:d}:{},...void 0!==m?{size:m}:{}},g=[...f({partName:"ticks",mark:p,positionPrefix:"lower",extraEncoding:u}),...f({partName:"ticks",mark:p,positionPrefix:"upper",extraEncoding:u}),...f({partName:"rule",mark:{type:"rule",ariaRoleDescription:"errorbar",...void 0!==d?{size:d}:{}},positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:u})];return{...c,transform:i,...g.length>1?{layer:g}:{...g[0]}}}function ms(e,t){const{encoding:n}=e;if(function(e){return(oa(e.x)||oa(e.y))&&!oa(e.x2)&&!oa(e.y2)&&!oa(e.xError)&&!oa(e.xError2)&&!oa(e.yError)&&!oa(e.yError2)}(n))return{orient:rs(e,t),inputType:"raw"};const i=function(e){return oa(e.x2)||oa(e.y2)}(n),r=function(e){return oa(e.xError)||oa(e.xError2)||oa(e.yError)||oa(e.yError2)}(n),o=n.x,a=n.y;if(i){if(r)throw new Error(`${t} cannot be both type aggregated-upper-lower and aggregated-error`);const e=n.x2,i=n.y2;if(oa(e)&&oa(i))throw new Error(`${t} cannot have both x2 and y2`);if(oa(e)){if(na(o))return{orient:"horizontal",inputType:"aggregated-upper-lower"};throw new Error(`Both x and x2 have to be quantitative in ${t}`)}if(oa(i)){if(na(a))return{orient:"vertical",inputType:"aggregated-upper-lower"};throw new Error(`Both y and y2 have to be quantitative in ${t}`)}throw new Error("No ranged axis")}{const e=n.xError,i=n.xError2,r=n.yError,s=n.yError2;if(oa(i)&&!oa(e))throw new Error(`${t} cannot have xError2 without xError`);if(oa(s)&&!oa(r))throw new Error(`${t} cannot have yError2 without yError`);if(oa(e)&&oa(r))throw new Error(`${t} cannot have both xError and yError with both are quantiative`);if(oa(e)){if(na(o))return{orient:"horizontal",inputType:"aggregated-error"};throw new Error("All x, xError, and xError2 (if exist) have to be quantitative")}if(oa(r)){if(na(a))return{orient:"vertical",inputType:"aggregated-error"};throw new Error("All y, yError, and yError2 (if exist) have to be quantitative")}throw new Error("No ranged axis")}}function ps(e,t,n){const{mark:i,encoding:r,params:o,projection:a,...s}=e,l=no(i)?i:{type:i};o&&Si(Kn(t));const{orient:c,inputType:u}=ms(e,t),{continuousAxisChannelDef:f,continuousAxisChannelDef2:d,continuousAxisChannelDefError:m,continuousAxisChannelDefError2:p,continuousAxis:g}=ns(e,c,t),{errorBarSpecificAggregate:h,postAggregateCalculates:y,tooltipSummary:v,tooltipTitleWithFieldName:b}=function(e,t,n,i,r,o,a,s){let l=[],c=[];const u=t.field;let f,d=!1;if("raw"===o){const t=e.center?e.center:e.extent?"iqr"===e.extent?"median":"mean":s.errorbar.center,n=e.extent?e.extent:"mean"===t?"stderr":"iqr";if("median"===t!=("iqr"===n)&&Si(function(e,t,n){return`${e} is not usually used with ${t} for ${n}.`}(t,n,a)),"stderr"===n||"stdev"===n)l=[{op:n,field:u,as:`extent_${u}`},{op:t,field:u,as:`center_${u}`}],c=[{calculate:`${j(`center_${u}`)} + ${j(`extent_${u}`)}`,as:`upper_${u}`},{calculate:`${j(`center_${u}`)} - ${j(`extent_${u}`)}`,as:`lower_${u}`}],f=[{fieldPrefix:"center_",titlePrefix:N(t)},{fieldPrefix:"upper_",titlePrefix:gs(t,n,"+")},{fieldPrefix:"lower_",titlePrefix:gs(t,n,"-")}],d=!0;else{let e,t,i;"ci"===n?(e="mean",t="ci0",i="ci1"):(e="median",t="q1",i="q3"),l=[{op:t,field:u,as:`lower_${u}`},{op:i,field:u,as:`upper_${u}`},{op:e,field:u,as:`center_${u}`}],f=[{fieldPrefix:"upper_",titlePrefix:va({field:u,aggregate:i,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"lower_",titlePrefix:va({field:u,aggregate:t,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"center_",titlePrefix:va({field:u,aggregate:e,type:"quantitative"},s,{allowDisabling:!1})}]}}else{(e.center||e.extent)&&Si((m=e.center,`${(p=e.extent)?"extent ":""}${p&&m?"and ":""}${m?"center ":""}${p&&m?"are ":"is "}not needed when data are aggregated.`)),"aggregated-upper-lower"===o?(f=[],c=[{calculate:j(n.field),as:`upper_${u}`},{calculate:j(u),as:`lower_${u}`}]):"aggregated-error"===o&&(f=[{fieldPrefix:"",titlePrefix:u}],c=[{calculate:`${j(u)} + ${j(i.field)}`,as:`upper_${u}`}],r?c.push({calculate:`${j(u)} + ${j(r.field)}`,as:`lower_${u}`}):c.push({calculate:`${j(u)} - ${j(i.field)}`,as:`lower_${u}`}));for(const e of c)f.push({fieldPrefix:e.as.substring(0,6),titlePrefix:R(R(e.calculate,"datum['",""),"']","")})}var m,p;return{postAggregateCalculates:c,errorBarSpecificAggregate:l,tooltipSummary:f,tooltipTitleWithFieldName:d}}(l,f,d,m,p,u,t,n),{[g]:x,["x"===g?"x2":"y2"]:$,["x"===g?"xError":"yError"]:w,["x"===g?"xError2":"yError2"]:k,...S}=r,{bins:D,timeUnits:F,aggregate:O,groupby:z,encoding:C}=Ga(S,n),_=[...O,...h],P="raw"!==u?[]:z,A=Ka(v,f,C,b);return{transform:[...s.transform??[],...D,...F,...0===_.length?[]:[{aggregate:_,groupby:P}],...y],groupby:P,continuousAxisChannelDef:f,continuousAxis:g,encodingWithoutContinuousAxis:C,ticksOrient:"vertical"===c?"horizontal":"vertical",markDef:l,outerSpec:s,tooltipEncoding:A}}function gs(e,t,n){return`${N(e)} ${n} ${t}`}const hs="errorband",ys=new Wa(hs,vs);function vs(e,t){let{config:n}=t;e={...e,encoding:Xa(e.encoding,n)};const{transform:i,continuousAxisChannelDef:r,continuousAxis:o,encodingWithoutContinuousAxis:a,markDef:s,outerSpec:l,tooltipEncoding:c}=ps(e,hs,n),u=s,f=es(u,o,r,a,n.errorband),d=void 0!==e.encoding.x&&void 0!==e.encoding.y;let m={type:d?"area":"rect"},p={type:d?"line":"rule"};const g={...u.interpolate?{interpolate:u.interpolate}:{},...u.tension&&u.interpolate?{tension:u.tension}:{}};return d?(m={...m,...g,ariaRoleDescription:"errorband"},p={...p,...g,aria:!1}):u.interpolate?Si(bi("interpolate")):u.tension&&Si(bi("tension")),{...l,transform:i,layer:[...f({partName:"band",mark:m,positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:c}),...f({partName:"borders",mark:p,positionPrefix:"lower",extraEncoding:c}),...f({partName:"borders",mark:p,positionPrefix:"upper",extraEncoding:c})]}}const bs={};function xs(e,t,n){const i=new Wa(e,t);bs[e]={normalizer:i,parts:n}}xs(os,ls,["box","median","outliers","rule","ticks"]),xs(us,ds,["ticks","rule"]),xs(hs,vs,["band","borders"]);const $s=["gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity"],ws={titleAlign:"align",titleAnchor:"anchor",titleAngle:"angle",titleBaseline:"baseline",titleColor:"color",titleFont:"font",titleFontSize:"fontSize",titleFontStyle:"fontStyle",titleFontWeight:"fontWeight",titleLimit:"limit",titleLineHeight:"lineHeight",titleOrient:"orient",titlePadding:"offset"},ks={labelAlign:"align",labelAnchor:"anchor",labelAngle:"angle",labelBaseline:"baseline",labelColor:"color",labelFont:"font",labelFontSize:"fontSize",labelFontStyle:"fontStyle",labelFontWeight:"fontWeight",labelLimit:"limit",labelLineHeight:"lineHeight",labelOrient:"orient",labelPadding:"offset"},Ss=D(ws),Ds=D(ks),Fs=D({header:1,headerRow:1,headerColumn:1,headerFacet:1}),Os=["size","shape","fill","stroke","strokeDash","strokeWidth","opacity"],zs="_vgsid_",Cs={point:{on:"click",fields:[zs],toggle:"event.shiftKey",resolve:"global",clear:"dblclick"},interval:{on:"[pointerdown, window:pointerup] > window:pointermove!",encodings:["x","y"],translate:"[pointerdown, window:pointerup] > window:pointermove!",zoom:"wheel!",mark:{fill:"#333",fillOpacity:.125,stroke:"white"},resolve:"global",clear:"dblclick"}};function _s(e){return"legend"===e||!!e?.legend}function Ps(e){return _s(e)&&t.isObject(e)}function Ns(e){return!!e?.select}function As(e){const t=[];for(const n of e||[]){if(Ns(n))continue;const{expr:e,bind:i,...r}=n;if(i&&e){const n={...r,bind:i,init:e};t.push(n)}else{const n={...r,...e?{update:e}:{},...i?{bind:i}:{}};t.push(n)}}return t}function Ts(e){return J(e,"concat")}function js(e){return J(e,"vconcat")}function Es(e){return J(e,"hconcat")}function Ms(e){let{step:t,offsetIsDiscrete:n}=e;return n?t.for??"offset":"position"}function Rs(e){return J(e,"step")}function Ls(e){return J(e,"view")||J(e,"width")||J(e,"height")}const qs=D({align:1,bounds:1,center:1,columns:1,spacing:1});function Us(e,t){return e[t]??e["width"===t?"continuousWidth":"continuousHeight"]}function Ws(e,t){const n=Is(e,t);return Rs(n)?n.step:Bs}function Is(e,t){return U(e[t]??e["width"===t?"discreteWidth":"discreteHeight"],{step:e.step})}const Bs=20,Vs={background:"white",padding:5,timeFormat:"%b %d, %Y",countTitle:"Count of Records",view:{continuousWidth:200,continuousHeight:200,step:Bs},mark:{color:"#4c78a8",invalid:"break-paths-show-path-domains",timeUnitBandSize:1},arc:{},area:{},bar:fo,circle:{},geoshape:{},image:{},line:{},point:{},rect:uo,rule:{color:"black"},square:{},text:{color:"black"},tick:mo,trail:{},boxplot:{size:14,extent:1.5,box:{},median:{color:"white"},outliers:{},rule:{},ticks:null},errorbar:{center:"mean",rule:!0,ticks:!1},errorband:{band:{opacity:.3},borders:!1},scale:{pointPadding:.5,barBandPaddingInner:.1,rectBandPaddingInner:0,tickBandPaddingInner:.25,bandWithNestedOffsetPaddingInner:.2,bandWithNestedOffsetPaddingOuter:.2,minBandSize:2,minFontSize:8,maxFontSize:40,minOpacity:.3,maxOpacity:.8,minSize:4,minStrokeWidth:1,maxStrokeWidth:4,quantileCount:4,quantizeCount:4,zero:!0,framesPerSecond:2,animationDuration:5},projection:{},legend:{gradientHorizontalMaxLength:200,gradientHorizontalMinLength:100,gradientVerticalMaxLength:200,gradientVerticalMinLength:64,unselectedOpacity:.35},header:{titlePadding:10,labelPadding:10},headerColumn:{},headerRow:{},headerFacet:{},selection:Cs,style:{},title:{},facet:{spacing:20},concat:{spacing:20},normalizedNumberFormat:".0%"},Hs=["#4c78a8","#f58518","#e45756","#72b7b2","#54a24b","#eeca3b","#b279a2","#ff9da6","#9d755d","#bab0ac"],Gs={text:11,guideLabel:10,guideTitle:11,groupTitle:13,groupSubtitle:12},Ys={blue:Hs[0],orange:Hs[1],red:Hs[2],teal:Hs[3],green:Hs[4],yellow:Hs[5],purple:Hs[6],pink:Hs[7],brown:Hs[8],gray0:"#000",gray1:"#111",gray2:"#222",gray3:"#333",gray4:"#444",gray5:"#555",gray6:"#666",gray7:"#777",gray8:"#888",gray9:"#999",gray10:"#aaa",gray11:"#bbb",gray12:"#ccc",gray13:"#ddd",gray14:"#eee",gray15:"#fff"};function Xs(e){const t=D(e||{}),n={};for(const i of t){const t=e[i];n[i]=Ta(t)?zn(t):Cn(t)}return n}const Qs=[...so,...qa,...Fs,"background","padding","legend","lineBreak","scale","style","title","view"];function Js(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{color:n,font:i,fontSize:r,selection:o,...a}=e,s=t.mergeConfig({},l(Vs),i?function(e){return{text:{font:e},style:{"guide-label":{font:e},"guide-title":{font:e},"group-title":{font:e},"group-subtitle":{font:e}}}}(i):{},n?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{signals:[{name:"color",value:t.isObject(e)?{...Ys,...e}:Ys}],mark:{color:{signal:"color.blue"}},rule:{color:{signal:"color.gray0"}},text:{color:{signal:"color.gray0"}},style:{"guide-label":{fill:{signal:"color.gray0"}},"guide-title":{fill:{signal:"color.gray0"}},"group-title":{fill:{signal:"color.gray0"}},"group-subtitle":{fill:{signal:"color.gray0"}},cell:{stroke:{signal:"color.gray8"}}},axis:{domainColor:{signal:"color.gray13"},gridColor:{signal:"color.gray8"},tickColor:{signal:"color.gray13"}},range:{category:[{signal:"color.blue"},{signal:"color.orange"},{signal:"color.red"},{signal:"color.teal"},{signal:"color.green"},{signal:"color.yellow"},{signal:"color.purple"},{signal:"color.pink"},{signal:"color.brown"},{signal:"color.grey8"}]}}}(n):{},r?function(e){return{signals:[{name:"fontSize",value:t.isObject(e)?{...Gs,...e}:Gs}],text:{fontSize:{signal:"fontSize.text"}},style:{"guide-label":{fontSize:{signal:"fontSize.guideLabel"}},"guide-title":{fontSize:{signal:"fontSize.guideTitle"}},"group-title":{fontSize:{signal:"fontSize.groupTitle"}},"group-subtitle":{fontSize:{signal:"fontSize.groupSubtitle"}}}}}(r):{},a||{});o&&t.writeConfig(s,"selection",o,!0);const c=f(s,Qs);for(const e of["background","lineBreak","padding"])s[e]&&(c[e]=Cn(s[e]));for(const e of so)s[e]&&(c[e]=bn(s[e]));for(const e of qa)s[e]&&(c[e]=Xs(s[e]));for(const e of Fs)s[e]&&(c[e]=bn(s[e]));if(s.legend&&(c.legend=bn(s.legend)),s.scale){const{invalid:e,...t}=s.scale,n=bn(e,{level:1});c.scale={...bn(t),...D(n).length>0?{invalid:n}:{}}}return s.style&&(c.style=function(e){const t=D(e),n={};for(const i of t)n[i]=Xs(e[i]);return n}(s.style)),s.title&&(c.title=bn(s.title)),s.view&&(c.view=bn(s.view)),c}const Ks=new Set(["view",...to]),Zs=["color","fontSize","background","padding","facet","concat","numberFormat","numberFormatType","normalizedNumberFormat","normalizedNumberFormatType","timeFormat","countTitle","header","axisQuantitative","axisTemporal","axisDiscrete","axisPoint","axisXBand","axisXPoint","axisXDiscrete","axisXQuantitative","axisXTemporal","axisYBand","axisYPoint","axisYDiscrete","axisYQuantitative","axisYTemporal","scale","selection","overlay"],el={view:["continuousWidth","continuousHeight","discreteWidth","discreteHeight","step"],...ao};function tl(e){e=l(e);for(const t of Zs)delete e[t];if(e.axis)for(const t in e.axis)Ta(e.axis[t])&&delete e.axis[t];if(e.legend)for(const t of $s)delete e.legend[t];if(e.mark){for(const t of ro)delete e.mark[t];e.mark.tooltip&&t.isObject(e.mark.tooltip)&&delete e.mark.tooltip}e.params&&(e.signals=(e.signals||[]).concat(As(e.params)),delete e.params);for(const t of Ks){for(const n of ro)delete e[t][n];const n=el[t];if(n)for(const i of n)delete e[t][i];nl(e,t)}for(const t of D(bs))delete e[t];!function(e){const{titleMarkConfig:t,subtitleMarkConfig:n,subtitle:i}=xn(e.title);S(t)||(e.style["group-title"]={...e.style["group-title"],...t});S(n)||(e.style["group-subtitle"]={...e.style["group-subtitle"],...n});S(i)?delete e.title:e.title=i}(e);for(const n in e)t.isObject(e[n])&&S(e[n])&&delete e[n];return S(e)?void 0:e}function nl(e,t,n,i){"view"===t&&(n="cell");const r={...e[t],...e.style[n??t]};S(r)||(e.style[n??t]=r),delete e[t]}function il(e){return J(e,"layer")}class rl{map(e,t){return Io(e)?this.mapFacet(e,t):function(e){return J(e,"repeat")}(e)?this.mapRepeat(e,t):Es(e)?this.mapHConcat(e,t):js(e)?this.mapVConcat(e,t):Ts(e)?this.mapConcat(e,t):this.mapLayerOrUnit(e,t)}mapLayerOrUnit(e,t){if(il(e))return this.mapLayer(e,t);if(Ua(e))return this.mapUnit(e,t);throw new Error(Bn(e))}mapLayer(e,t){return{...e,layer:e.layer.map((e=>this.mapLayerOrUnit(e,t)))}}mapHConcat(e,t){return{...e,hconcat:e.hconcat.map((e=>this.map(e,t)))}}mapVConcat(e,t){return{...e,vconcat:e.vconcat.map((e=>this.map(e,t)))}}mapConcat(e,t){const{concat:n,...i}=e;return{...i,concat:n.map((e=>this.map(e,t)))}}mapFacet(e,t){return{...e,spec:this.map(e.spec,t)}}mapRepeat(e,t){return{...e,spec:this.map(e.spec,t)}}}const ol={zero:1,center:1,normalize:1};const al=new Set([Lr,Ur,qr,Hr,Br,Qr,Jr,Ir,Gr,Yr]),sl=new Set([Ur,qr,Lr]);function ll(e){return Zo(e)&&"quantitative"===ea(e)&&!e.bin}function cl(e,t,n){let{orient:i,type:r}=n;const o="x"===t?"y":"radius",a="x"===t&&["bar","area"].includes(r),s=e[t],l=e[o];if(Zo(s)&&Zo(l))if(ll(s)&&ll(l)){if(s.stack)return t;if(l.stack)return o;const e=Zo(s)&&!!s.aggregate;if(e!==(Zo(l)&&!!l.aggregate))return e?t:o;if(a){if("vertical"===i)return o;if("horizontal"===i)return t}}else{if(ll(s))return t;if(ll(l))return o}else{if(ll(s)){if(a&&"vertical"===i)return;return t}if(ll(l)){if(a&&"horizontal"===i)return;return o}}}function ul(e,n){const i=no(e)?e:{type:e},r=i.type;if(!al.has(r))return null;const o=cl(n,"x",i)||cl(n,"theta",i);if(!o)return null;const a=n[o],s=Zo(a)?ma(a,{}):void 0,l=function(e){switch(e){case"x":return"y";case"y":return"x";case"theta":return"radius";case"radius":return"theta"}}(o),c=[],u=new Set;if(n[l]){const e=n[l],t=Zo(e)?ma(e,{}):void 0;t&&t!==s&&(c.push(l),u.add(t))}const f="x"===l?"xOffset":"yOffset",d=n[f],m=Zo(d)?ma(d,{}):void 0;m&&m!==s&&(c.push(f),u.add(m));const p=Ot.reduce(((e,i)=>{if("tooltip"!==i&&Ia(n,i)){const r=n[i];for(const n of t.array(r)){const t=wa(n);if(t.aggregate)continue;const r=ma(t,{});r&&u.has(r)||e.push({channel:i,fieldDef:t})}}return e}),[]);let g;return void 0!==a.stack?g=t.isBoolean(a.stack)?a.stack?"zero":null:a.stack:sl.has(r)&&(g="zero"),g&&(h=g,t.hasOwnProperty(ol,h))?Ha(n)&&0===p.length?null:(a?.scale?.type&&a?.scale?.type!==dr.LINEAR&&a?.stack&&Si(function(e){return`Stack is applied to a non-linear scale (${e}).`}(a.scale.type)),oa(n[at(o)])?(void 0!==a.stack&&Si(`Cannot stack "${y=o}" if there is already "${y}2".`),null):(Zo(a)&&a.aggregate&&!un.has(a.aggregate)&&Si(`Stacking is applied even though the aggregate function is non-summative ("${a.aggregate}").`),{groupbyChannels:c,groupbyFields:u,fieldChannel:o,impute:null!==a.impute&&Zr(r),stackBy:p,offset:g})):null;var h,y}function fl(e,t,n){const i=bn(e),r=En("orient",i,n);if(i.orient=function(e,t,n){switch(e){case Br:case Qr:case Jr:case Gr:case Vr:case Wr:return}const{x:i,y:r,x2:o,y2:a}=t;switch(e){case Ur:if(Zo(i)&&(pn(i.bin)||Zo(r)&&r.aggregate&&!i.aggregate))return"vertical";if(Zo(r)&&(pn(r.bin)||Zo(i)&&i.aggregate&&!r.aggregate))return"horizontal";if(a||o){if(n)return n;if(!o)return(Zo(i)&&i.type===sr&&!mn(i.bin)||ra(i))&&Zo(r)&&pn(r.bin)?"horizontal":"vertical";if(!a)return(Zo(r)&&r.type===sr&&!mn(r.bin)||ra(r))&&Zo(i)&&pn(i.bin)?"vertical":"horizontal"}case Hr:if(o&&(!Zo(i)||!pn(i.bin))&&a&&(!Zo(r)||!pn(r.bin)))return;case qr:if(a)return Zo(r)&&pn(r.bin)?"horizontal":"vertical";if(o)return Zo(i)&&pn(i.bin)?"vertical":"horizontal";if(e===Hr){if(i&&!r)return"vertical";if(r&&!i)return"horizontal"}case Ir:case Yr:{const t=ia(i),o=ia(r);if(n)return n;if(t&&!o)return"tick"!==e?"horizontal":"vertical";if(!t&&o)return"tick"!==e?"vertical":"horizontal";if(t&&o)return"vertical";{const e=aa(i)&&i.type===cr,t=aa(r)&&r.type===cr;if(e&&!t)return"vertical";if(!e&&t)return"horizontal"}return}}return"vertical"}(i.type,t,r),void 0!==r&&r!==i.orient&&Si(`Specified orient "${i.orient}" overridden with "${r}".`),"bar"===i.type&&i.orient){const e=En("cornerRadiusEnd",i,n);if(void 0!==e){const n="horizontal"===i.orient&&t.x2||"vertical"===i.orient&&t.y2?["cornerRadius"]:co[i.orient];for(const t of n)i[t]=e;void 0!==i.cornerRadiusEnd&&delete i.cornerRadiusEnd}}const o=En("opacity",i,n),a=En("fillOpacity",i,n);void 0===o&&void 0===a&&(i.opacity=function(e,t){if(p([Br,Yr,Qr,Jr],e)&&!Ha(t))return.7;return}(i.type,t));return void 0===En("cursor",i,n)&&(i.cursor=function(e,t,n){if(t.href||e.href||En("href",e,n))return"pointer";return e.cursor}(i,t,n)),i}function dl(e){const{point:t,line:n,...i}=e;return D(i).length>1?i:i.type}function ml(e){for(const t of["line","area","rule","trail"])e[t]&&(e={...e,[t]:f(e[t],["point","line"])});return e}function pl(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2?arguments[2]:void 0;return"transparent"===e.point?{opacity:0}:e.point?t.isObject(e.point)?e.point:{}:void 0!==e.point?null:n.point||i.shape?t.isObject(n.point)?n.point:{}:void 0}function gl(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.line?!0===e.line?{}:e.line:void 0!==e.line?null:t.line?!0===t.line?{}:t.line:void 0}class hl{name="path-overlay";hasMatchingType(e,t){if(Ua(e)){const{mark:n,encoding:i}=e,r=no(n)?n:{type:n};switch(r.type){case"line":case"rule":case"trail":return!!pl(r,t[r.type],i);case"area":return!!pl(r,t[r.type],i)||!!gl(r,t[r.type])}}return!1}run(e,t,n){const{config:i}=t,{params:r,projection:o,mark:a,name:s,encoding:l,...c}=e,d=Xa(l,i),m=no(a)?a:{type:a},p=pl(m,i[m.type],d),g="area"===m.type&&gl(m,i[m.type]),h=[{name:s,...r?{params:r}:{},mark:dl({..."area"===m.type&&void 0===m.opacity&&void 0===m.fillOpacity?{opacity:.7}:{},...m}),encoding:f(d,["shape"])}],y=ul(fl(m,d,i),d);let v=d;if(y){const{fieldChannel:e,offset:t}=y;v={...d,[e]:{...d[e],...t?{stack:t}:{}}}}return v=f(v,["y2","x2"]),g&&h.push({...o?{projection:o}:{},mark:{type:"line",...u(m,["clip","interpolate","tension","tooltip"]),...g},encoding:v}),p&&h.push({...o?{projection:o}:{},mark:{type:"point",opacity:1,filled:!0,...u(m,["clip","tooltip"]),...p},encoding:v}),n({...c,layer:h},{...t,config:ml(i)})}}function yl(e,t){return t?Uo(e)?kl(e,t):xl(e,t):e}function vl(e,t){return t?kl(e,t):e}function bl(e,n,i){const r=n[e];return o=r,!t.isString(o)&&J(o,"repeat")?r.repeat in i?{...n,[e]:i[r.repeat]}:void Si(function(e){return`Unknown repeated value "${e}".`}(r.repeat)):n;var o}function xl(e,t){if(void 0!==(e=bl("field",e,t))){if(null===e)return null;if(Vo(e)&&Lo(e.sort)){const n=bl("field",e.sort,t);e={...e,...n?{sort:n}:{}}}return e}}function $l(e,t){if(Zo(e))return xl(e,t);{const n=bl("datum",e,t);return n===e||n.type||(n.type="nominal"),n}}function wl(e,t){if(!oa(e)){if(Ko(e)){const n=$l(e.condition,t);if(n)return{...e,condition:n};{const{condition:t,...n}=e;return n}}return e}{const n=$l(e,t);if(n)return n;if(Qo(e))return{condition:e.condition}}}function kl(e,n){const i={};for(const r in e)if(J(e,r)){const o=e[r];if(t.isArray(o))i[r]=o.map((e=>wl(e,n))).filter((e=>e));else{const e=wl(o,n);void 0!==e&&(i[r]=e)}}return i}class Sl{name="RuleForRangedLine";hasMatchingType(e){if(Ua(e)){const{encoding:t,mark:n}=e;if("line"===n||no(n)&&"line"===n.type)for(const e of nt){const n=t[rt(e)];if(t[e]&&(Zo(n)&&!pn(n.bin)||ta(n)))return!0}}return!1}run(e,n,i){const{encoding:r,mark:o}=e;var a,s;return Si((a=!!r.x2,s=!!r.y2,`Line mark is for continuous lines and thus cannot be used with ${a&&s?"x2 and y2":a?"x2":"y2"}. We will use the rule mark (line segments) instead.`)),i({...e,mark:t.isObject(o)?{...o,type:"rule"}:"rule"},n)}}function Dl(e){let{parentEncoding:n,encoding:i={},layer:r}=e,o={};if(n){const e=new Set([...D(n),...D(i)]);for(const a of e){const e=i[a],s=n[a];if(oa(e)){const t={...s,...e};o[a]=t}else Ko(e)?o[a]={...e,condition:{...s,...e.condition}}:e||null===e?o[a]=e:(r||sa(s)||wn(s)||oa(s)||t.isArray(s))&&(o[a]=s)}}else o=i;return!o||S(o)?void 0:o}function Fl(e){const{parentProjection:t,projection:n}=e;return t&&n&&Si(function(e){const{parentProjection:t,projection:n}=e;return`Layer's shared projection ${Q(t)} is overridden by a child projection ${Q(n)}.`}({parentProjection:t,projection:n})),n??t}function Ol(e){return J(e,"filter")}function zl(e){return J(e,"lookup")}function Cl(e){return J(e,"pivot")}function _l(e){return J(e,"density")}function Pl(e){return J(e,"quantile")}function Nl(e){return J(e,"regression")}function Al(e){return J(e,"loess")}function Tl(e){return J(e,"sample")}function jl(e){return J(e,"window")}function El(e){return J(e,"joinaggregate")}function Ml(e){return J(e,"flatten")}function Rl(e){return J(e,"calculate")}function Ll(e){return J(e,"bin")}function ql(e){return J(e,"impute")}function Ul(e){return J(e,"timeUnit")}function Wl(e){return J(e,"aggregate")}function Il(e){return J(e,"stack")}function Bl(e){return J(e,"fold")}function Vl(e){return J(e,"extent")&&!J(e,"density")&&!J(e,"regression")}function Hl(e,t){const{transform:n,...i}=e;if(n){return{...i,transform:n.map((e=>{if(Ol(e))return{filter:Xl(e,t)};if(Ll(e)&&gn(e.bin))return{...e,bin:Yl(e.bin)};if(zl(e)){const{selection:t,...n}=e.from;return t?{...e,from:{param:t,...n}}:e}return e}))}}return e}function Gl(e,n){const i=l(e);if(Zo(i)&&gn(i.bin)&&(i.bin=Yl(i.bin)),la(i)&&i.scale?.domain?.selection){const{selection:e,...t}=i.scale.domain;i.scale.domain={...t,...e?{param:e}:{}}}if(Qo(i))if(t.isArray(i.condition))i.condition=i.condition.map((e=>{const{selection:t,param:i,test:r,...o}=e;return i?e:{...o,test:Xl(e,n)}}));else{const{selection:e,param:t,test:r,...o}=Gl(i.condition,n);i.condition=t?i.condition:{...o,test:Xl(i.condition,n)}}return i}function Yl(e){const t=e.extent;if(t?.selection){const{selection:n,...i}=t;return{...e,extent:{...i,param:n}}}return e}function Xl(e,t){const n=e=>s(e,(e=>{const n={param:e,empty:t.emptySelections[e]??!0};return t.selectionPredicates[e]??=[],t.selectionPredicates[e].push(n),n}));return e.selection?n(e.selection):s(e.test||e.filter,(e=>e.selection?n(e.selection):e))}class Ql extends rl{map(e,t){const n=t.selections??[];if(e.params&&!Ua(e)){const t=[];for(const i of e.params)Ns(i)?n.push(i):t.push(i);e.params=t}return t.selections=n,super.map(e,t)}mapUnit(e,n){const i=n.selections;if(!i||!i.length)return e;const r=(n.path??[]).concat(e.name),o=[];for(const n of i)if(n.views&&n.views.length)for(const i of n.views)(t.isString(i)&&(i===e.name||r.includes(i))||t.isArray(i)&&i.map((e=>r.indexOf(e))).every(((e,t,n)=>-1!==e&&(0===t||e>n[t-1]))))&&o.push(n);else o.push(n);return o.length&&(e.params=o),e}}for(const e of["mapFacet","mapRepeat","mapHConcat","mapVConcat","mapLayer"]){const t=Ql.prototype[e];Ql.prototype[e]=function(e,n){return t.call(this,e,Jl(e,n))}}function Jl(e,t){return e.name?{...t,path:(t.path??[]).concat(e.name)}:t}function Kl(e,t){void 0===t&&(t=Js(e.config));const n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={config:t};return tc.map(Zl.map(ec.map(e,n),n),n)}(e,t),{width:i,height:r}=e,o=function(e,t,n){let{width:i,height:r}=t;const o=Ua(e)||il(e),a={};o?"container"==i&&"container"==r?(a.type="fit",a.contains="padding"):"container"==i?(a.type="fit-x",a.contains="padding"):"container"==r&&(a.type="fit-y",a.contains="padding"):("container"==i&&(Si(Hn("width")),i=void 0),"container"==r&&(Si(Hn("height")),r=void 0));const s={type:"pad",...a,...n?nc(n.autosize):{},...nc(e.autosize)};"fit"!==s.type||o||(Si(Vn),s.type="pad");"container"==i&&"fit"!=s.type&&"fit-x"!=s.type&&Si(Gn("width"));"container"==r&&"fit"!=s.type&&"fit-y"!=s.type&&Si(Gn("height"));if(X(s,{type:"pad"}))return;return s}(n,{width:i,height:r,autosize:e.autosize},t);return{...n,...o?{autosize:o}:{}}}const Zl=new class extends rl{nonFacetUnitNormalizers=(()=>[as,fs,ys,new hl,new Sl])();map(e,t){if(Ua(e)){const n=Ia(e.encoding,K),i=Ia(e.encoding,Z),r=Ia(e.encoding,ee);if(n||i||r)return this.mapFacetedUnit(e,t)}return super.map(e,t)}mapUnit(e,t){const{parentEncoding:n,parentProjection:i}=t,r=vl(e.encoding,t.repeater),o={...e,...e.name?{name:[t.repeaterPrefix,e.name].filter((e=>e)).join("_")}:{},...r?{encoding:r}:{}};if(n||i)return this.mapUnitWithParentEncodingOrProjection(o,t);const a=this.mapLayerOrUnit.bind(this);for(const e of this.nonFacetUnitNormalizers)if(e.hasMatchingType(o,t.config))return e.run(o,t,a);return o}mapRepeat(e,n){return function(e){return!t.isArray(e.repeat)&&J(e.repeat,"layer")}(e)?this.mapLayerRepeat(e,n):this.mapNonLayerRepeat(e,n)}mapLayerRepeat(e,t){const{repeat:n,spec:i,...r}=e,{row:o,column:a,layer:s}=n,{repeater:l={},repeaterPrefix:c=""}=t;return o||a?this.mapRepeat({...e,repeat:{...o?{row:o}:{},...a?{column:a}:{}},spec:{repeat:{layer:s},spec:i}},t):{...r,layer:s.map((e=>{const n={...l,layer:e},r=`${(i.name?`${i.name}_`:"")+c}child__layer_${C(e)}`,o=this.mapLayerOrUnit(i,{...t,repeater:n,repeaterPrefix:r});return o.name=r,o}))}}mapNonLayerRepeat(e,n){const{repeat:i,spec:r,data:o,...a}=e;!t.isArray(i)&&e.columns&&(e=f(e,["columns"]),Si(ei("repeat")));const s=[],{repeater:l={},repeaterPrefix:c=""}=n,u=!t.isArray(i)&&i.row||[l?l.row:null],d=!t.isArray(i)&&i.column||[l?l.column:null],m=t.isArray(i)&&i||[l?l.repeat:null];for(const e of m)for(const o of u)for(const a of d){const u={repeat:e,row:o,column:a,layer:l.layer},d=(r.name?`${r.name}_`:"")+c+"child__"+(t.isArray(i)?`${C(e)}`:(i.row?`row_${C(o)}`:"")+(i.column?`column_${C(a)}`:"")),m=this.map(r,{...n,repeater:u,repeaterPrefix:d});m.name=d,s.push(f(m,["data"]))}const p=t.isArray(i)?e.columns:i.column?i.column.length:1;return{data:r.data??o,align:"all",...a,columns:p,concat:s}}mapFacet(e,t){const{facet:n}=e;return Uo(n)&&e.columns&&(e=f(e,["columns"]),Si(ei("facet"))),super.mapFacet(e,t)}mapUnitWithParentEncodingOrProjection(e,t){const{encoding:n,projection:i}=e,{parentEncoding:r,parentProjection:o,config:a}=t,s=Fl({parentProjection:o,projection:i}),l=Dl({parentEncoding:r,encoding:vl(n,t.repeater)});return this.mapUnit({...e,...s?{projection:s}:{},...l?{encoding:l}:{}},{config:a})}mapFacetedUnit(e,t){const{row:n,column:i,facet:r,...o}=e.encoding,{mark:a,width:s,projection:l,height:c,view:u,params:f,encoding:d,...m}=e,{facetMapping:p,layout:g}=this.getFacetMappingAndLayout({row:n,column:i,facet:r},t),h=vl(o,t.repeater);return this.mapFacet({...m,...g,facet:p,spec:{...s?{width:s}:{},...c?{height:c}:{},...u?{view:u}:{},...l?{projection:l}:{},mark:a,encoding:h,...f?{params:f}:{}}},t)}getFacetMappingAndLayout(e,t){const{row:n,column:i,facet:r}=e;if(n||i){r&&Si(`Facet encoding dropped as ${(o=[...n?[K]:[],...i?[Z]:[]]).join(" and ")} ${o.length>1?"are":"is"} also specified.`);const t={},a={};for(const n of[K,Z]){const i=e[n];if(i){const{align:e,center:r,spacing:o,columns:s,...l}=i;t[n]=l;for(const e of["align","center","spacing"])void 0!==i[e]&&(a[e]??={},a[e][n]=i[e])}}return{facetMapping:t,layout:a}}{const{align:e,center:n,spacing:i,columns:o,...a}=r;return{facetMapping:yl(a,t.repeater),layout:{...e?{align:e}:{},...n?{center:n}:{},...i?{spacing:i}:{},...o?{columns:o}:{}}}}var o}mapLayer(e,t){let{parentEncoding:n,parentProjection:i,...r}=t;const{encoding:o,projection:a,...s}=e,l={...r,parentEncoding:Dl({parentEncoding:n,encoding:o,layer:!0}),parentProjection:Fl({parentProjection:i,projection:a})};return super.mapLayer({...s,...e.name?{name:[l.repeaterPrefix,e.name].filter((e=>e)).join("_")}:{}},l)}},ec=new class extends rl{map(e,t){return t.emptySelections??={},t.selectionPredicates??={},e=Hl(e,t),super.map(e,t)}mapLayerOrUnit(e,t){if((e=Hl(e,t)).encoding){const n={};for(const[i,r]of O(e.encoding))n[i]=Gl(r,t);e={...e,encoding:n}}return super.mapLayerOrUnit(e,t)}mapUnit(e,t){const{selection:n,...i}=e;return n?{...i,params:O(n).map((e=>{let[n,i]=e;const{init:r,bind:o,empty:a,...s}=i;"single"===s.type?(s.type="point",s.toggle=!1):"multi"===s.type&&(s.type="point"),t.emptySelections[n]="none"!==a;for(const e of F(t.selectionPredicates[n]??{}))e.empty="none"!==a;return{name:n,value:r,select:s,bind:o}}))}:e}},tc=new Ql;function nc(e){return t.isString(e)?{type:e}:e??{}}const ic=["background","padding"];function rc(e,t){const n={};for(const t of ic)e&&void 0!==e[t]&&(n[t]=Cn(e[t]));return t&&(n.params=e.params),n}class oc{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.explicit=e,this.implicit=t}clone(){return new oc(l(this.explicit),l(this.implicit))}combine(){return{...this.explicit,...this.implicit}}get(e){return U(this.explicit[e],this.implicit[e])}getWithExplicit(e){return void 0!==this.explicit[e]?{explicit:!0,value:this.explicit[e]}:void 0!==this.implicit[e]?{explicit:!1,value:this.implicit[e]}:{explicit:!1,value:void 0}}setWithExplicit(e,t){let{value:n,explicit:i}=t;void 0!==n&&this.set(e,n,i)}set(e,t,n){return delete this[n?"implicit":"explicit"][e],this[n?"explicit":"implicit"][e]=t,this}copyKeyFromSplit(e,t){let{explicit:n,implicit:i}=t;void 0!==n[e]?this.set(e,n[e],!0):void 0!==i[e]&&this.set(e,i[e],!1)}copyKeyFromObject(e,t){void 0!==t[e]&&this.set(e,t[e],!0)}copyAll(e){for(const t of D(e.combine())){const n=e.getWithExplicit(t);this.setWithExplicit(t,n)}}}function ac(e){return{explicit:!0,value:e}}function sc(e){return{explicit:!1,value:e}}function lc(e){return(t,n,i,r)=>{const o=e(t.value,n.value);return o>0?t:o<0?n:cc(t,n,i,r)}}function cc(e,t,n,i){return e.explicit&&t.explicit&&Si(function(e,t,n,i){return`Conflicting ${t.toString()} property "${e.toString()}" (${Q(n)} and ${Q(i)}). Using ${Q(n)}.`}(n,i,e.value,t.value)),e}function uc(e,t,n,i){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:cc;return void 0===e||void 0===e.value?t:e.explicit&&!t.explicit?e:t.explicit&&!e.explicit?t:X(e.value,t.value)?e:r(e,t,n,i)}class fc extends oc{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];super(e,t),this.explicit=e,this.implicit=t,this.parseNothing=n}clone(){const e=super.clone();return e.parseNothing=this.parseNothing,e}}function dc(e){return J(e,"url")}function mc(e){return J(e,"values")}function pc(e){return J(e,"name")&&!dc(e)&&!mc(e)&&!gc(e)}function gc(e){return e&&(hc(e)||yc(e)||vc(e))}function hc(e){return J(e,"sequence")}function yc(e){return J(e,"sphere")}function vc(e){return J(e,"graticule")}let bc=function(e){return e[e.Raw=0]="Raw",e[e.Main=1]="Main",e[e.Row=2]="Row",e[e.Column=3]="Column",e[e.Lookup=4]="Lookup",e[e.PreFilterInvalid=5]="PreFilterInvalid",e[e.PostFilterInvalid=6]="PostFilterInvalid",e}({});function xc(e){let{invalid:t,isPath:n}=e;switch(po(t,{isPath:n})){case"filter":return{marks:"exclude-invalid-values",scales:"exclude-invalid-values"};case"break-paths-show-domains":return{marks:n?"include-invalid-values":"exclude-invalid-values",scales:"include-invalid-values"};case"break-paths-filter-domains":return{marks:n?"include-invalid-values":"exclude-invalid-values",scales:"exclude-invalid-values"};case"show":return{marks:"include-invalid-values",scales:"include-invalid-values"}}}class $c{_children=[];_parent=null;constructor(e,t){this.debugName=t,e&&(this.parent=e)}clone(){throw new Error("Cannot clone node")}get parent(){return this._parent}set parent(e){this._parent=e,e&&e.addChild(this)}get children(){return this._children}numChildren(){return this._children.length}addChild(e,t){this._children.includes(e)?Si("Attempt to add the same child twice."):void 0!==t?this._children.splice(t,0,e):this._children.push(e)}removeChild(e){const t=this._children.indexOf(e);return this._children.splice(t,1),t}remove(){let e=this._parent.removeChild(this);for(const t of this._children)t._parent=this._parent,this._parent.addChild(t,e++)}insertAsParentOf(e){const t=e.parent;t.removeChild(this),this.parent=t,e.parent=this}swapWithParent(){const e=this._parent,t=e.parent;for(const t of this._children)t.parent=e;this._children=[],e.removeChild(this);const n=e.parent.removeChild(e);this._parent=t,t.addChild(this,n),e.parent=this}}class wc extends $c{clone(){const e=new this.constructor;return e.debugName=`clone_${this.debugName}`,e._source=this._source,e._name=`clone_${this._name}`,e.type=this.type,e.refCounts=this.refCounts,e.refCounts[e._name]=0,e}constructor(e,t,n,i){super(e,t),this.type=n,this.refCounts=i,this._source=this._name=t,this.refCounts&&!(this._name in this.refCounts)&&(this.refCounts[this._name]=0)}dependentFields(){return new Set}producedFields(){return new Set}hash(){return void 0===this._hash&&(this._hash=`Output ${I()}`),this._hash}getSource(){return this.refCounts[this._name]++,this._source}isRequired(){return!!this.refCounts[this._name]}setSource(e){this._source=e}}function kc(e){return void 0!==e.as}function Sc(e){return`${e}_end`}class Dc extends $c{clone(){return new Dc(null,l(this.timeUnits))}constructor(e,t){super(e),this.timeUnits=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{const{field:r,timeUnit:o}=n;if(o){let a;if(Ti(o)){if(qm(t)){const{mark:e,markDef:i,config:s}=t,l=Ho({fieldDef:n,markDef:i,config:s});(eo(e)||l)&&(a={timeUnit:Ii(o),field:r})}}else a={as:ma(n,{forAs:!0}),field:r,timeUnit:o};if(qm(t)){const{mark:e,markDef:r,config:o}=t,s=Ho({fieldDef:n,markDef:r,config:o});eo(e)&&_t(i)&&.5!==s&&(a.rectBandPosition=s)}a&&(e[d(a)]=a)}return e}),{});return S(n)?null:new Dc(e,n)}static makeFromTransform(e,t){const{timeUnit:n,...i}={...t},r={...i,timeUnit:Ii(n)};return new Dc(e,{[d(r)]:r})}merge(e){this.timeUnits={...this.timeUnits};for(const t in e.timeUnits)this.timeUnits[t]||(this.timeUnits[t]=e.timeUnits[t]);for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}removeFormulas(e){const t={};for(const[n,i]of O(this.timeUnits)){const r=kc(i)?i.as:`${i.field}_end`;e.has(r)||(t[n]=i)}this.timeUnits=t}producedFields(){return new Set(F(this.timeUnits).map((e=>kc(e)?e.as:Sc(e.field))))}dependentFields(){return new Set(F(this.timeUnits).map((e=>e.field)))}hash(){return`TimeUnit ${d(this.timeUnits)}`}assemble(){const e=[];for(const t of F(this.timeUnits)){const{rectBandPosition:n}=t,i=Ii(t.timeUnit);if(kc(t)){const{field:r,as:o}=t,{unit:a,utc:s,...l}=i,c=[o,`${o}_end`];e.push({field:M(r),type:"timeunit",...a?{units:Ri(a)}:{},...s?{timezone:"utc"}:{},...l,as:c}),e.push(...Cc(c,n,i))}else if(t){const{field:r}=t,o=r.replaceAll("\\.","."),a=zc({timeUnit:i,field:o}),s=Sc(o);e.push({type:"formula",expr:a,as:s}),e.push(...Cc([o,s],n,i))}}return e}}const Fc="offsetted_rect_start",Oc="offsetted_rect_end";function zc(e){let{timeUnit:t,field:n,reverse:i}=e;const{unit:r,utc:o}=t,a=Li(r),{part:s,step:l}=Hi(a,t.step);return`${o?"utcOffset":"timeOffset"}('${s}', ${j(n)}, ${i?-l:l})`}function Cc(e,t,n){let[i,r]=e;if(void 0!==t&&.5!==t){const e=j(i),o=j(r);return[{type:"formula",expr:_c([zc({timeUnit:n,field:i,reverse:!0}),e],t+.5),as:`${i}_${Fc}`},{type:"formula",expr:_c([e,o],t+.5),as:`${i}_${Oc}`}]}return[]}function _c(e,t){let[n,i]=e;return`${1-t} * ${n} + ${t} * ${i}`}const Pc="_tuple_fields";class Nc{constructor(){for(var e=arguments.length,t=new Array(e),n=0;n0))return[];if((t=+t)===(e=+e))return[t];const r=e=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function ke(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Ae(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/0,i=arguments.length>4?arguments[4]:void 0;if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=void 0===i?pe:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Kt;if(t===Kt)return pe;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(i);r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,s=Math.log(o),u=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*u*(o-u)/o)*(a-o/2<0?-1:1);Ae(t,e,Math.max(n,Math.floor(e-a*u/o+l)),Math.min(r,Math.floor(e+(o-a)*u/o+l)),i)}const o=t[e];let a=n,s=r;for(Me(t,n,e),i(t[r],o)>0&&Me(t,n,r);a0;)--s}0===i(t[n],o)?Me(t,n,s):(++s,Me(t,s,r)),s<=e&&(n=s+1),e<=s&&(r=s-1)}return t}function Me(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function Ee(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return ke(t);if(e>=1)return we(t);var r,i=(r-1)*e,o=Math.floor(i),a=we(Ae(t,o).subarray(0,o+1));return a+(ke(t.subarray(o+1))-a)*(i-o)}}function De(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:re;if((r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function Ce(t,e){return Ee(t,.5,e)}function Fe(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function Se(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Ne(t){return(t=Be(Math.abs(t)))?t[1]:NaN}var ze,Oe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Re(t){if(!(e=Oe.exec(t)))throw new Error("invalid format: "+t);var e;return new Le({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Le(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Ue(t,e){var n=Be(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Re.prototype=Le.prototype,Le.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var qe={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Ue(100*t,e),r:Ue,s:function(t,e){var n=Be(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(ze=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Be(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Pe(t){return t}var je,Ie,We,He=Array.prototype.map,Ye=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Ge(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Pe:(e=He.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,s=e[0],u=0;i>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),o.push(t.substring(i-=s,i+s)),!((u+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Pe:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(He.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Re(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):qe[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?u:"",b=qe[v],w=/[defgprs%]/.test(v);function k(t){var i,o,u,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var A=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r=u)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in ai?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var ei,ni,ri,ii,oi,ai={"-":"",_:" ",0:"0"},si=/^\s*\d+/,ui=/^%/,li=/[\\^$*+?|[\]().{}]/g;function ci(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:$s(t,e,n,a,w)}}function Rs(t,e,n,r){if(0===r)return Ds(t,e,n);if(1===r)return Ts(t,e,n);if(2===r)return Os(t,e,n);const[i,o,a,s]=Fs(t,e,n),u=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;ht.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&s("Invalid density method: "+a),t.extent||r.data||s("Missing density extent parameter."),a=r[a];const u=t.as||["value","density"],l=Is(a,t.extent||st(r.data()),i,o).map((t=>{const e={};return e[u[0]]=t[0],e[u[1]]=t[1],_a(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function wu(t){Ja.call(this,null,t)}wu.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function ku(t){Sa.call(this,null,Au,t),this.modified(!0)}function Au(t){const i=t.expr;return this.value&&!t.modified("expr")?this.value:e((e=>i(e,t)),r(i),n(i))}function Mu(t){Ja.call(this,[void 0,void 0],t)}function Eu(t,e){Sa.call(this,t),this.parent=e,this.count=0}function Du(t){Ja.call(this,{},t),this._keys=ft();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;n{for(let e,n=0;n+t}function Sg(t,e,n){return Math.max(e,Math.min(t,n))}function $g(){var t=Mg,e=Eg,n=Dg,r=Cg,i=Fg(0),o=i,a=i,s=i,u=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=Sg(+i.call(this,l),0,y),_=Sg(+o.call(this,l),0,y),x=Sg(+a.call(this,l),0,y),b=Sg(+s.call(this,l),0,y);if(u||(u=h=Rl()),v<=0&&_<=0&&x<=0&&b<=0)u.rect(d,p,g,m);else{var w=d+g,k=p+m;u.moveTo(d+v,p),u.lineTo(w-_,p),u.bezierCurveTo(w-Ag*_,p,w,p+Ag*_,w,p+_),u.lineTo(w,k-b),u.bezierCurveTo(w,k-Ag*b,w-Ag*b,k,w-b,k),u.lineTo(d+x,k),u.bezierCurveTo(d+Ag*x,k,d,k-Ag*x,d,k-x),u.lineTo(d,p+v),u.bezierCurveTo(d,p+Ag*v,d+Ag*v,p,d+v,p),u.closePath()}if(h)return u=null,h+""||null}return l.x=function(e){return arguments.length?(t=Fg(e),l):t},l.y=function(t){return arguments.length?(e=Fg(t),l):e},l.width=function(t){return arguments.length?(n=Fg(t),l):n},l.height=function(t){return arguments.length?(r=Fg(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=Fg(t),o=null!=e?Fg(e):i,s=null!=n?Fg(n):i,a=null!=r?Fg(r):o,l):i},l.context=function(t){return arguments.length?(u=null==t?null:t,l):u},l}function Tg(){var t,e,n,r,i,o,a,s,u=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.hypot(l,c),h=(l/=f)*s,d=(c/=f)*s,p=Math.atan2(c,l);u.moveTo(o-h,a-d),u.lineTo(t-l*r,e-c*r),u.arc(t,e,r,p-Math.PI,p),u.lineTo(o+h,a+d),u.arc(o,a,s,p,p+Math.PI)}else u.arc(t,e,r,0,cg);u.closePath()}else i=1;o=t,a=e,s=r}function c(o){var a,s,c,f=o.length,h=!1;for(null==u&&(u=c=Rl()),a=0;a<=f;++a)!(a1?0:t<-1?Dl:Math.acos(t)}((P*I+j*W)/(Ml(P*P+j*j)*Ml(I*I+W*W)))/2),Y=Ml(O[0]*O[0]+O[1]*O[1]);C=kl(D,(f-Y)/(H-1)),F=kl(D,(h-Y)/(H+1))}else C=F=0}A>El?F>El?(y=Wl(U,q,T,B,h,F,m),v=Wl(R,L,N,z,h,F,m),s.moveTo(y.cx+y.x01,y.cy+y.y01),F
.5&&e<1.5?.5-Math.abs(e-1):0}function ry(t,e){const n=ny(e);t("d",Hg(null,e,n,n))}function iy(t,e,n,r){const i=ny(e);t.beginPath(),Hg(t,e,(n||0)+i,(r||0)+i)}const oy=Ym(iy),ay=Ym(iy,!1),sy=Ym(iy,!0);var uy={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Jm(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&by(t,e,r)&&($m(t,e),t.stroke())}}))},pick:Hm((function(t,e,n,r){return!!t.isPointInStroke&&(by(t,e,1)&&t.isPointInStroke(n,r))})),isect:Fm},ky=Zm("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),Ay=Zm("symbol",(function(t,e){return jg.context(t)(e)}),Dm);const My=kt();var Ey={height:Ty,measureWidth:Sy,estimateWidth:Cy,width:Cy,canvas:Dy};function Dy(t){Ey.width=t&&Am?Sy:Cy}function Cy(t,e){return Fy(Oy(t,e),Ty(t))}function Fy(t,e){return~~(.8*t.length*e)}function Sy(t,e){return Ty(t)<=0||!(e=Oy(t,e))?0:$y(e,Ly(t))}function $y(t,e){const n=`(${e}) ${t}`;let r=My.get(n);return void 0===r&&(Am.font=e,r=Am.measureText(t).width,My.set(n,r)),r}function Ty(t){return null!=t.fontSize?+t.fontSize||0:11}function By(t){return null!=t.lineHeight?t.lineHeight:Ty(t)+2}function Ny(t){return e=t.lineBreak&&t.text&&!A(t.text)?t.text.split(t.lineBreak):t.text,A(e)?e.length>1?e:e[0]:e;var e}function zy(t){const e=Ny(t);return(A(e)?e.length-1:0)*By(t)}function Oy(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(Ey.width===Sy){const e=Ly(t);return t=>$y(t,e)}if(Ey.width===Cy){const e=Ty(t);return t=>Fy(t,e)}return e=>Ey.width(t,e)}(t);if(r(e){(o=t.orient||H_)!==xx&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];Jx(t,i,nb(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),!n.autosize||n.autosize.type!==mx&&n.autosize.type!==yx&&n.autosize.type!==vx)f.union(r);else switch(e.orient){case W_:case H_:f.add(r.x1,0).add(r.x2,0);break;case I_:case Y_:f.add(0,r.y1).add(0,r.y2)}}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],s=a.frame,u=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=u===W_||u===H_?r:n,g=0,m=0,y=0,v=0,_=0;if(s!==nx?u===W_?(g=i.y2,p=i.y1):u===H_?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):u===W_&&(g=r,p=0),o=l===Z_?g:l===K_?p:(g+p)/2,d&&d.text){switch(u){case I_:case Y_:_=h.bounds.height()+f;break;case W_:v=h.bounds.width()+f;break;case H_:v=-h.bounds.width()-f}Ux.clear().union(d.bounds),Ux.translate(v-(d.x||0),_-(d.y||0)),qx(d,"x",v)|qx(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(Ux),d.mark.bounds.clear().union(Ux),t.dirty(d)),Ux.clear().union(d.bounds)}else Ux.clear();switch(Ux.union(h.bounds),u){case I_:m=o,y=i.y1-Ux.height()-c;break;case W_:m=i.x1-Ux.width()-c,y=o;break;case H_:m=i.x2+Ux.width()+c,y=o;break;case Y_:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return qx(a,"x",m)|qx(a,"y",y)&&(Ux.translate(m,y),t.dirty(a),a.bounds.clear().union(Ux),e.bounds.clear().union(Ux),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,s=t._height,u=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-u)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===px){const e=t.padding();a-=e.left+e.right,s-=e.top+e.bottom}o===xx?(l=0,f=0,u=a,c=s):o===mx?(u=Math.max(0,a-l-h),c=Math.max(0,s-f-d)):o===yx?(u=Math.max(0,a-l-h),s=c+f+d):o===vx?(a=u+l+h,c=Math.max(0,s-f-d)):o===_x&&(a=u+l+h,s=c+f+d);t._resizeView(a,s,u,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var sb=Object.freeze({__proto__:null,bound:Ex,identifier:Fx,mark:Sx,overlap:$x,render:Lx,viewlayout:ab});function ub(t){Ja.call(this,null,t)}function lb(t){Ja.call(this,null,t)}function cb(){return _a({})}function fb(t){Ja.call(this,null,t)}function hb(t){Ja.call(this,[],t)}dt(ub,Ja,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=$p(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),s=t.format||Np(n,o,a,t.formatSpecifier,t.formatType,!!t.values),u=t.values?Tp(o,t.values,a):Bp(o,a);return i&&(r.rem=i),i=u.map(((t,e)=>_a({index:e/(u.length-1||1),value:t,label:s(t)}))),t.extra&&i.length&&i.push(_a({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),dt(lb,Ja,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||cb,o=t.key||ya,a=this.value;return A(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&s("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=ft().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),dt(fb,Ja,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(A(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,s=i.update||g,u=i.enter||g,l=i.exit||g,c=(o&&!a?i[o]:s)||g;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{u(e,t),s(e,t)})),n.modifies(u.output),n.modifies(s.output),c!==g&&c!==s&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==g&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==g){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=u(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(u.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),dt(hb,Ja,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,s=e.dataflow.locale(),u=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||Ep,f=t.scale,h=+t.limit,d=$p(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===Ep,g=t.format||qp(s,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Lp(f,d);return l&&(u.rem=l),c===Ep?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,Z(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=it(o=i||8),l=l.map(((e,n)=>_a({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(_a({index:l.length,label:`…${m.length-l.length} entries`,value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=xp(f,n[0],S(n)),m.length<3&&!t.values&&n[0]!==S(n)&&(m=[n[0],S(n)]),l=m.map(((t,e)=>_a({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+S(e),o=i-r;if(t.type===Id){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>_a({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),u.source=l,u.add=l,this.value=l,u}});const db=t=>t.source.x,pb=t=>t.source.y,gb=t=>t.target.x,mb=t=>t.target.y;function yb(t){Ja.call(this,{},t)}yb.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},dt(yb,Ja,{transform(t,e){var n=t.sourceX||db,r=t.sourceY||pb,i=t.targetX||gb,o=t.targetY||mb,a=t.as||"path",u=t.orient||"vertical",l=t.shape||"line",c=bb.get(l+"-"+u)||bb.get(l);return c||s("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const vb=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,_b=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.hypot(i,o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},xb=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),s=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+s)+" "+(n+s)+","+(r-a)+" "+n+","+r},bb=ft({line:vb,"line-radial":(t,e,n,r)=>vb(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:_b,"arc-radial":(t,e,n,r)=>_b(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:xb,"curve-radial":(t,e,n,r)=>xb(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),s=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*s+"L"+r*a+","+r*s},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),s=Math.sin(n),u=(e+r)/2;return"M"+e*i+","+e*o+"C"+u*i+","+u*o+" "+u*a+","+u*s+" "+r*a+","+r*s}});function wb(t){Ja.call(this,null,t)}wb.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},dt(wb,Ja,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],s=o[1],u=t.field||d,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(u),p=h.length,g=l,m=(c-l)/$e(h),y=Se(p);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nAw&&(Aw=e)),l?t