calliope-studio 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- calliope_studio-0.1.0/.gitattributes +21 -0
- calliope_studio-0.1.0/.github/dependabot.yml +63 -0
- calliope_studio-0.1.0/.github/workflows/ci.yml +437 -0
- calliope_studio-0.1.0/.github/workflows/release.yml +246 -0
- calliope_studio-0.1.0/.github/workflows/screenshots.yml +164 -0
- calliope_studio-0.1.0/.gitignore +47 -0
- calliope_studio-0.1.0/CHANGELOG.md +5 -0
- calliope_studio-0.1.0/LICENSE +661 -0
- calliope_studio-0.1.0/MANIFEST.in +6 -0
- calliope_studio-0.1.0/PKG-INFO +122 -0
- calliope_studio-0.1.0/README.md +81 -0
- calliope_studio-0.1.0/codecov.yml +39 -0
- calliope_studio-0.1.0/pixi.lock +13992 -0
- calliope_studio-0.1.0/pyproject.toml +305 -0
- calliope_studio-0.1.0/scripts/check_dist.py +186 -0
- calliope_studio-0.1.0/scripts/make_examples.py +163 -0
- calliope_studio-0.1.0/setup.cfg +4 -0
- calliope_studio-0.1.0/src/calliope_studio/__init__.py +30 -0
- calliope_studio-0.1.0/src/calliope_studio/cli.py +209 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/__init__.py +20 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/csv_io.py +50 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/data_tables.py +261 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/entities.py +273 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/filekinds.py +85 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/geo.py +244 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/imports.py +327 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/mathdef.py +249 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/overrides.py +188 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/paths.py +185 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/scaffold.py +85 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/schema.py +136 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/snapshot.py +262 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/validate.py +31 -0
- calliope_studio-0.1.0/src/calliope_studio/modeldef/yaml_io.py +233 -0
- calliope_studio-0.1.0/src/calliope_studio/results/__init__.py +24 -0
- calliope_studio-0.1.0/src/calliope_studio/results/catalog.py +288 -0
- calliope_studio-0.1.0/src/calliope_studio/results/colors.py +44 -0
- calliope_studio-0.1.0/src/calliope_studio/results/frames.py +221 -0
- calliope_studio-0.1.0/src/calliope_studio/results/geo.py +194 -0
- calliope_studio-0.1.0/src/calliope_studio/results/links.py +163 -0
- calliope_studio-0.1.0/src/calliope_studio/results/query.py +120 -0
- calliope_studio-0.1.0/src/calliope_studio/results/store.py +531 -0
- calliope_studio-0.1.0/src/calliope_studio/results/summaries.py +82 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/__init__.py +28 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/manager.py +605 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/mathcache.py +170 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/mathdoc.py +413 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/process.py +368 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/protocol.py +332 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/solvers.py +104 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/stages.py +170 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/validate.py +59 -0
- calliope_studio-0.1.0/src/calliope_studio/runs/worker.py +590 -0
- calliope_studio-0.1.0/src/calliope_studio/server/__init__.py +21 -0
- calliope_studio-0.1.0/src/calliope_studio/server/app.py +188 -0
- calliope_studio-0.1.0/src/calliope_studio/server/deps.py +121 -0
- calliope_studio-0.1.0/src/calliope_studio/server/mode.py +130 -0
- calliope_studio-0.1.0/src/calliope_studio/server/resolution.py +401 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/__init__.py +43 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/browse.py +95 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/csv.py +37 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/files.py +160 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/math.py +296 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/overrides.py +137 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/projects.py +182 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/results.py +239 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/runs.py +421 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/schema.py +44 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/structure.py +77 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/validate.py +158 -0
- calliope_studio-0.1.0/src/calliope_studio/server/routes/yaml_sections.py +78 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/AppShell-BdDJc6dW.css +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/AppShell-D2u8D6BC.js +1271 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/FilesSection-DbWKr_og.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ModelSection-BUVZG55I.js +26 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/OpenProjectView-BdOz_BK3.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/OpenResultsView-B_oqTAB8.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ProjectListView-CFPFGpbv.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/RunStatusPill.vue_vue_type_script_setup_true_lang-B_0xBWOk.js +2 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/RunsSection-BPj8i2gA.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/SelectValue.vue_vue_type_script_setup_true_lang-Bx9iGq77.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/StateMessage.vue_vue_type_script_setup_true_lang-BuqQEo1R.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/TooltipButton.vue_vue_type_script_setup_true_lang-ZT9lqzIQ.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/TreeSearch.vue_vue_type_script_setup_true_lang-41hTKiuj.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/abap-CRCWOmpq.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/apex-DnsZk_dE.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/azcli-1IWB1ccx.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/bat-DPkNLes8.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/bicep-Corcdgou.js +2 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/cameligo-CGrWLZr3.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/chevron-right-BRfJzHgy.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/clojure-D9WOWImG.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/codicon-DCmgc-ay.ttf +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/coffee-B7EJu28W.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/componentTree-C-wHDQDl.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/cpp-SEyurbux.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/csharp-BoL64M5l.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/csp-C46ZqvIl.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/css-DQU6DXDx.js +3 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/cssMode-BxllqVTV.js +4 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/cypher-D84EuPTj.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/dart-D8lhlL1r.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/dockerfile-DLk6rpji.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ecl-BO6FnfXk.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/editor.worker-B4pQIWZD.js +12 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/elixir-BRjLKONM.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/flow9-Cac8vKd7.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/folder-plus-JJY8OCXw.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/format-B_d8noaY.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/freemarker2-uONZOifM.js +3 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/fsharp-fd1GTHhf.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/go-O9LJTZXk.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/graphql-LQdxqEYJ.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/handlebars-CR_9Uoy0.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/hcl-DxDQ3s82.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/html-CsO_tunk.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/htmlMode-DT80rgdc.js +4 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/index-B2TA6wAb.css +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/index-DXLTCQjx.js +740 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ini-BvajGCUy.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/java-SYsfObOQ.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/javascript--eUKt1In.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/jsonMode-BFpS5S9D.js +10 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/julia-DQXNmw_w.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/kotlin-qQ0MG-9I.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/less-GGFNNJHn.js +2 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/lexon-Canl7DCW.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/liquid-BByO3Ohw.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/lua-D28Ae8-K.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/m3-DPitgjJI.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/maplibre-gl-worker-IbxDsVLX.js +2 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/markdown-B811l8j2.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/mdx-3pW_PSEc.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/mips-CdjsipkG.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/msdax-CYqgjx_P.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/mysql-BHd6q0vd.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/objective-c-B1aVtJYH.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/openIntent-D8R4JCyS.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/pascal-BhNW15KB.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/pascaligo-5jv8CcQD.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/perl-DlYyT36c.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/pgsql-Dy0bjov7.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/php-120yhfDK.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/pla-CjnFlu4u.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/postiats-CQpG440k.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/powerquery-DdJtto1Z.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/powershell-Bu_VLpJB.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/project-7deFrcrD.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/projects-COKZ9mG6.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/protobuf-IBS6jZEB.js +2 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/pug-kFxLfcjb.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/python-BlQxj-SX.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/qsharp-q7JyzKFN.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/r-BIFz-_sK.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/razor-DDzIazS6.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/redis-CHOsPHWR.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/redshift-CBifECDb.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/refresh-cw-DORD2fO7.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/restructuredtext-CghPJEOS.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/ruby-CYWGW-b1.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/runs-OyWlK5s7.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/rust-DMDD0SHb.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/sb-BYAiYHFx.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/scala-Bqvq8jcR.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/scheme-Dhb-2j9p.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/scss-CTwUZ5N7.js +3 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/shell-CsDZo4DB.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/solidity-CME5AdoB.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/sophia-RYC1BQQz.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/sparql-KEyrF7De.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/sql-BdTr02Mf.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/st-C7iG7M4S.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/swift-D7IUmUK8.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/system-DF3Lx2aO.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/systemverilog-DgMryOEJ.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/tcl-PloMZuKG.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/tsMode-DbBrsT3L.js +11 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/twig-BfRIq3la.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/typescript-l72YPfuF.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/typespec-CzxlYoT_.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/useTreeSearch-B0VKj4Uv.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/vb-BwAE3J76.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/version-DJ3dZTBB.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/wgsl-B_1kOXbF.js +298 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/xml-BjsDdNTa.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/yaml-Bkpi6Wxi.js +1 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/assets/yaml.worker-CY09xy5R.js +455 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/favicon.svg +52 -0
- calliope_studio-0.1.0/src/calliope_studio/server/static/index.html +43 -0
- calliope_studio-0.1.0/src/calliope_studio/server/storage.py +577 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/PKG-INFO +122 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/SOURCES.txt +621 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/dependency_links.txt +1 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/entry_points.txt +2 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/requires.txt +12 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/scm_file_list.json +439 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/scm_version.json +8 -0
- calliope_studio-0.1.0/src/calliope_studio.egg-info/top_level.txt +1 -0
- calliope_studio-0.1.0/tests/conftest.py +96 -0
- calliope_studio-0.1.0/tests/layouts.py +151 -0
- calliope_studio-0.1.0/tests/oracle/README.md +48 -0
- calliope_studio-0.1.0/tests/oracle/__init__.py +9 -0
- calliope_studio-0.1.0/tests/oracle/colors.py +34 -0
- calliope_studio-0.1.0/tests/oracle/model.py +159 -0
- calliope_studio-0.1.0/tests/oracle/query.py +71 -0
- calliope_studio-0.1.0/tests/oracle/variables.py +95 -0
- calliope_studio-0.1.0/tests/test_api.py +571 -0
- calliope_studio-0.1.0/tests/test_app_startup.py +392 -0
- calliope_studio-0.1.0/tests/test_csv_io.py +64 -0
- calliope_studio-0.1.0/tests/test_entities.py +225 -0
- calliope_studio-0.1.0/tests/test_filekinds.py +74 -0
- calliope_studio-0.1.0/tests/test_layering.py +122 -0
- calliope_studio-0.1.0/tests/test_math_render.py +289 -0
- calliope_studio-0.1.0/tests/test_mathcache.py +347 -0
- calliope_studio-0.1.0/tests/test_mathdef.py +267 -0
- calliope_studio-0.1.0/tests/test_modeldef_geo.py +214 -0
- calliope_studio-0.1.0/tests/test_oracle.py +279 -0
- calliope_studio-0.1.0/tests/test_overrides.py +396 -0
- calliope_studio-0.1.0/tests/test_paths.py +73 -0
- calliope_studio-0.1.0/tests/test_process.py +243 -0
- calliope_studio-0.1.0/tests/test_resolution_parity.py +338 -0
- calliope_studio-0.1.0/tests/test_results.py +657 -0
- calliope_studio-0.1.0/tests/test_results_api.py +451 -0
- calliope_studio-0.1.0/tests/test_results_layouts.py +383 -0
- calliope_studio-0.1.0/tests/test_run_stages.py +189 -0
- calliope_studio-0.1.0/tests/test_runs.py +1148 -0
- calliope_studio-0.1.0/tests/test_snapshot.py +200 -0
- calliope_studio-0.1.0/tests/test_solvers.py +85 -0
- calliope_studio-0.1.0/tests/test_state_dir.py +103 -0
- calliope_studio-0.1.0/tests/test_storage.py +309 -0
- calliope_studio-0.1.0/tests/test_yaml_io.py +193 -0
- calliope_studio-0.1.0/web/.oxlintrc.json +15 -0
- calliope_studio-0.1.0/web/components.json +20 -0
- calliope_studio-0.1.0/web/index.html +42 -0
- calliope_studio-0.1.0/web/package.json +79 -0
- calliope_studio-0.1.0/web/pnpm-lock.yaml +3724 -0
- calliope_studio-0.1.0/web/pnpm-workspace.yaml +66 -0
- calliope_studio-0.1.0/web/public/favicon.svg +52 -0
- calliope_studio-0.1.0/web/scripts/confirm-check.mjs +118 -0
- calliope_studio-0.1.0/web/scripts/file-actions.mjs +283 -0
- calliope_studio-0.1.0/web/scripts/harness.mjs +300 -0
- calliope_studio-0.1.0/web/scripts/map-edit.mjs +395 -0
- calliope_studio-0.1.0/web/scripts/math-check.mjs +379 -0
- calliope_studio-0.1.0/web/scripts/menu-check.mjs +117 -0
- calliope_studio-0.1.0/web/scripts/model-picker.mjs +223 -0
- calliope_studio-0.1.0/web/scripts/monaco-check.mjs +175 -0
- calliope_studio-0.1.0/web/scripts/results-page.mjs +163 -0
- calliope_studio-0.1.0/web/scripts/run-lifecycle.mjs +260 -0
- calliope_studio-0.1.0/web/scripts/save-check.mjs +214 -0
- calliope_studio-0.1.0/web/scripts/screenshots.mjs +326 -0
- calliope_studio-0.1.0/web/scripts/smoke-charts.mjs +155 -0
- calliope_studio-0.1.0/web/scripts/smoke-layout.mjs +247 -0
- calliope_studio-0.1.0/web/scripts/smoke-map.mjs +167 -0
- calliope_studio-0.1.0/web/scripts/smoke-results.mjs +144 -0
- calliope_studio-0.1.0/web/scripts/smoke-table.mjs +386 -0
- calliope_studio-0.1.0/web/scripts/smoke.mjs +162 -0
- calliope_studio-0.1.0/web/scripts/source-link.mjs +178 -0
- calliope_studio-0.1.0/web/scripts/tab-drag.mjs +220 -0
- calliope_studio-0.1.0/web/scripts/token-check.mjs +398 -0
- calliope_studio-0.1.0/web/scripts/tree-search.mjs +135 -0
- calliope_studio-0.1.0/web/src/App.vue +37 -0
- calliope_studio-0.1.0/web/src/api/client.ts +8 -0
- calliope_studio-0.1.0/web/src/api/errors.ts +56 -0
- calliope_studio-0.1.0/web/src/api/paths.ts +26 -0
- calliope_studio-0.1.0/web/src/api/projects.ts +57 -0
- calliope_studio-0.1.0/web/src/api/results.ts +244 -0
- calliope_studio-0.1.0/web/src/api/runs.ts +119 -0
- calliope_studio-0.1.0/web/src/api/system.ts +82 -0
- calliope_studio-0.1.0/web/src/api/versions.ts +423 -0
- calliope_studio-0.1.0/web/src/assets/maplibre-overrides.css +251 -0
- calliope_studio-0.1.0/web/src/assets/markdown.css +173 -0
- calliope_studio-0.1.0/web/src/assets/math.css +81 -0
- calliope_studio-0.1.0/web/src/assets/tokens.css +297 -0
- calliope_studio-0.1.0/web/src/charts/layout.test.ts +40 -0
- calliope_studio-0.1.0/web/src/charts/layout.ts +60 -0
- calliope_studio-0.1.0/web/src/charts/theme.ts +137 -0
- calliope_studio-0.1.0/web/src/components/app/ConfirmDialog.vue +57 -0
- calliope_studio-0.1.0/web/src/components/app/Eyebrow.vue +19 -0
- calliope_studio-0.1.0/web/src/components/app/FieldRow.vue +169 -0
- calliope_studio-0.1.0/web/src/components/app/InfoTip.vue +50 -0
- calliope_studio-0.1.0/web/src/components/app/Metric.vue +100 -0
- calliope_studio-0.1.0/web/src/components/app/Panel.vue +35 -0
- calliope_studio-0.1.0/web/src/components/app/PanelDisclosure.vue +74 -0
- calliope_studio-0.1.0/web/src/components/app/PanelFooter.vue +26 -0
- calliope_studio-0.1.0/web/src/components/app/PanelHeader.vue +67 -0
- calliope_studio-0.1.0/web/src/components/app/PanelTitle.vue +20 -0
- calliope_studio-0.1.0/web/src/components/app/ProgressHairline.vue +29 -0
- calliope_studio-0.1.0/web/src/components/app/Segmented.vue +161 -0
- calliope_studio-0.1.0/web/src/components/app/SidebarSection.vue +29 -0
- calliope_studio-0.1.0/web/src/components/app/SourceLink.vue +69 -0
- calliope_studio-0.1.0/web/src/components/app/StateMessage.vue +70 -0
- calliope_studio-0.1.0/web/src/components/app/TooltipButton.vue +87 -0
- calliope_studio-0.1.0/web/src/components/app/TreeSearch.vue +62 -0
- calliope_studio-0.1.0/web/src/components/app/segmented.ts +186 -0
- calliope_studio-0.1.0/web/src/components/editor/ConfigEditor.vue +247 -0
- calliope_studio-0.1.0/web/src/components/editor/CsvGrid.vue +57 -0
- calliope_studio-0.1.0/web/src/components/editor/CsvGridEditor.vue +73 -0
- calliope_studio-0.1.0/web/src/components/editor/DataTableFields.vue +76 -0
- calliope_studio-0.1.0/web/src/components/editor/DataTablesEditor.vue +425 -0
- calliope_studio-0.1.0/web/src/components/editor/EditorMapPane.vue +138 -0
- calliope_studio-0.1.0/web/src/components/editor/EditorToolbar.vue +96 -0
- calliope_studio-0.1.0/web/src/components/editor/EntryAccordionRow.vue +57 -0
- calliope_studio-0.1.0/web/src/components/editor/FileViewer.vue +75 -0
- calliope_studio-0.1.0/web/src/components/editor/LinkFields.vue +159 -0
- calliope_studio-0.1.0/web/src/components/editor/LinksEditor.vue +497 -0
- calliope_studio-0.1.0/web/src/components/editor/MarkdownView.vue +75 -0
- calliope_studio-0.1.0/web/src/components/editor/MonacoYamlEditor.vue +309 -0
- calliope_studio-0.1.0/web/src/components/editor/NewFileDialog.vue +176 -0
- calliope_studio-0.1.0/web/src/components/editor/NodeFields.vue +219 -0
- calliope_studio-0.1.0/web/src/components/editor/NodesEditor.vue +347 -0
- calliope_studio-0.1.0/web/src/components/editor/OverridesEditor.vue +271 -0
- calliope_studio-0.1.0/web/src/components/editor/ParamRows.vue +144 -0
- calliope_studio-0.1.0/web/src/components/editor/ScalarOrDataVar.vue +159 -0
- calliope_studio-0.1.0/web/src/components/editor/ScenariosEditor.vue +240 -0
- calliope_studio-0.1.0/web/src/components/editor/SchemaKindPicker.vue +93 -0
- calliope_studio-0.1.0/web/src/components/editor/SchemaObjectEditor.vue +460 -0
- calliope_studio-0.1.0/web/src/components/editor/TechsEditor.vue +283 -0
- calliope_studio-0.1.0/web/src/components/layout/ImportGraphDialog.vue +241 -0
- calliope_studio-0.1.0/web/src/components/layout/LogoMark.vue +41 -0
- calliope_studio-0.1.0/web/src/components/layout/ThemeToggle.vue +43 -0
- calliope_studio-0.1.0/web/src/components/map/MapLegend.vue +135 -0
- calliope_studio-0.1.0/web/src/components/map/ModelMap.vue +902 -0
- calliope_studio-0.1.0/web/src/components/math/MathComponentRow.vue +71 -0
- calliope_studio-0.1.0/web/src/components/math/MathFilesPanel.vue +263 -0
- calliope_studio-0.1.0/web/src/components/math/MathTabView.vue +455 -0
- calliope_studio-0.1.0/web/src/components/results/FigurePanel.vue +109 -0
- calliope_studio-0.1.0/web/src/components/results/MapFigure.vue +248 -0
- calliope_studio-0.1.0/web/src/components/results/ResultChart.vue +397 -0
- calliope_studio-0.1.0/web/src/components/results/ResultsLayoutBar.vue +95 -0
- calliope_studio-0.1.0/web/src/components/results/TimeseriesFigure.vue +188 -0
- calliope_studio-0.1.0/web/src/components/results/TotalsFigure.vue +139 -0
- calliope_studio-0.1.0/web/src/components/runs/RunConfigPanel.vue +268 -0
- calliope_studio-0.1.0/web/src/components/runs/RunFilterPanel.vue +137 -0
- calliope_studio-0.1.0/web/src/components/runs/RunListItem.vue +234 -0
- calliope_studio-0.1.0/web/src/components/runs/RunLogPanel.vue +197 -0
- calliope_studio-0.1.0/web/src/components/runs/RunProgress.vue +91 -0
- calliope_studio-0.1.0/web/src/components/runs/RunResultsPanel.vue +232 -0
- calliope_studio-0.1.0/web/src/components/runs/RunRoundingPanel.vue +111 -0
- calliope_studio-0.1.0/web/src/components/runs/RunStatusPill.vue +69 -0
- calliope_studio-0.1.0/web/src/components/runs/RunTabView.vue +178 -0
- calliope_studio-0.1.0/web/src/components/runs/RunTablePanel.vue +264 -0
- calliope_studio-0.1.0/web/src/components/runs/RunUnitsPanel.vue +119 -0
- calliope_studio-0.1.0/web/src/components/sections/FilesSection.vue +189 -0
- calliope_studio-0.1.0/web/src/components/sections/ModelSection.vue +313 -0
- calliope_studio-0.1.0/web/src/components/sections/RunsSection.vue +336 -0
- calliope_studio-0.1.0/web/src/components/shell/AppShell.vue +125 -0
- calliope_studio-0.1.0/web/src/components/shell/AppSidebar.vue +53 -0
- calliope_studio-0.1.0/web/src/components/shell/ProjectSwitcher.vue +131 -0
- calliope_studio-0.1.0/web/src/components/shell/SidebarNav.vue +114 -0
- calliope_studio-0.1.0/web/src/components/shell/StructuredEditorHost.vue +91 -0
- calliope_studio-0.1.0/web/src/components/shell/TabBar.vue +313 -0
- calliope_studio-0.1.0/web/src/components/shell/TabBody.vue +179 -0
- calliope_studio-0.1.0/web/src/components/shell/TabHistory.vue +42 -0
- calliope_studio-0.1.0/web/src/components/ui/accordion/Accordion.vue +18 -0
- calliope_studio-0.1.0/web/src/components/ui/accordion/AccordionContent.vue +23 -0
- calliope_studio-0.1.0/web/src/components/ui/accordion/AccordionItem.vue +24 -0
- calliope_studio-0.1.0/web/src/components/ui/accordion/AccordionTrigger.vue +37 -0
- calliope_studio-0.1.0/web/src/components/ui/accordion/index.ts +4 -0
- calliope_studio-0.1.0/web/src/components/ui/badge/Badge.vue +26 -0
- calliope_studio-0.1.0/web/src/components/ui/badge/index.ts +27 -0
- calliope_studio-0.1.0/web/src/components/ui/button/Button.vue +31 -0
- calliope_studio-0.1.0/web/src/components/ui/button/index.ts +68 -0
- calliope_studio-0.1.0/web/src/components/ui/checkbox/Checkbox.vue +37 -0
- calliope_studio-0.1.0/web/src/components/ui/checkbox/index.ts +1 -0
- calliope_studio-0.1.0/web/src/components/ui/command/Command.vue +88 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandDialog.vue +31 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandEmpty.vue +27 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandGroup.vue +45 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandInput.vue +39 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandItem.vue +76 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandList.vue +25 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandSeparator.vue +21 -0
- calliope_studio-0.1.0/web/src/components/ui/command/CommandShortcut.vue +17 -0
- calliope_studio-0.1.0/web/src/components/ui/command/index.ts +25 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/Dialog.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogClose.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogContent.vue +53 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogDescription.vue +23 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogFooter.vue +27 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogHeader.vue +17 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogOverlay.vue +21 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogScrollContent.vue +59 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogTitle.vue +23 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/DialogTrigger.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/dialog/index.ts +10 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- calliope_studio-0.1.0/web/src/components/ui/dropdown-menu/index.ts +16 -0
- calliope_studio-0.1.0/web/src/components/ui/multi-select/MultiSelect.test.ts +122 -0
- calliope_studio-0.1.0/web/src/components/ui/multi-select/MultiSelect.vue +226 -0
- calliope_studio-0.1.0/web/src/components/ui/multi-select/index.ts +1 -0
- calliope_studio-0.1.0/web/src/components/ui/popover/Popover.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/popover/PopoverAnchor.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/popover/PopoverContent.vue +45 -0
- calliope_studio-0.1.0/web/src/components/ui/popover/PopoverTrigger.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/popover/index.ts +4 -0
- calliope_studio-0.1.0/web/src/components/ui/resizable/ResizableHandle.vue +30 -0
- calliope_studio-0.1.0/web/src/components/ui/resizable/ResizablePanel.vue +21 -0
- calliope_studio-0.1.0/web/src/components/ui/resizable/ResizablePanelGroup.vue +25 -0
- calliope_studio-0.1.0/web/src/components/ui/resizable/index.ts +3 -0
- calliope_studio-0.1.0/web/src/components/ui/select/Select.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectContent.vue +51 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectGroup.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectItem.vue +45 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectItemText.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectLabel.vue +17 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectScrollDownButton.vue +26 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectScrollUpButton.vue +26 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectSeparator.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectTrigger.vue +34 -0
- calliope_studio-0.1.0/web/src/components/ui/select/SelectValue.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/select/index.ts +11 -0
- calliope_studio-0.1.0/web/src/components/ui/switch/Switch.vue +38 -0
- calliope_studio-0.1.0/web/src/components/ui/switch/index.ts +1 -0
- calliope_studio-0.1.0/web/src/components/ui/toggle/Toggle.vue +35 -0
- calliope_studio-0.1.0/web/src/components/ui/toggle/index.ts +35 -0
- calliope_studio-0.1.0/web/src/components/ui/toggle-group/ToggleGroup.vue +49 -0
- calliope_studio-0.1.0/web/src/components/ui/toggle-group/ToggleGroupItem.vue +46 -0
- calliope_studio-0.1.0/web/src/components/ui/toggle-group/index.ts +2 -0
- calliope_studio-0.1.0/web/src/components/ui/tooltip/Tooltip.vue +19 -0
- calliope_studio-0.1.0/web/src/components/ui/tooltip/TooltipContent.vue +45 -0
- calliope_studio-0.1.0/web/src/components/ui/tooltip/TooltipProvider.vue +14 -0
- calliope_studio-0.1.0/web/src/components/ui/tooltip/TooltipTrigger.vue +15 -0
- calliope_studio-0.1.0/web/src/components/ui/tooltip/index.ts +4 -0
- calliope_studio-0.1.0/web/src/components/ui/tree/Tree.test.ts +134 -0
- calliope_studio-0.1.0/web/src/components/ui/tree/Tree.vue +110 -0
- calliope_studio-0.1.0/web/src/components/ui/tree/index.ts +1 -0
- calliope_studio-0.1.0/web/src/components/validation/ValidationTabView.vue +168 -0
- calliope_studio-0.1.0/web/src/components/workspace/FolderBrowser.vue +118 -0
- calliope_studio-0.1.0/web/src/components/workspace/ModelDialogs.vue +61 -0
- calliope_studio-0.1.0/web/src/components/workspace/NewModelDialog.vue +183 -0
- calliope_studio-0.1.0/web/src/components/workspace/OpenModelDialog.vue +113 -0
- calliope_studio-0.1.0/web/src/components/workspace/browse.ts +24 -0
- calliope_studio-0.1.0/web/src/composables/useCsvGrid.test.ts +146 -0
- calliope_studio-0.1.0/web/src/composables/useCsvGrid.ts +145 -0
- calliope_studio-0.1.0/web/src/composables/useFigurePanels.ts +651 -0
- calliope_studio-0.1.0/web/src/composables/useModelGeo.ts +83 -0
- calliope_studio-0.1.0/web/src/composables/useResultFrame.ts +86 -0
- calliope_studio-0.1.0/web/src/composables/useSectionEditor.ts +194 -0
- calliope_studio-0.1.0/web/src/composables/useTreeSearch.ts +80 -0
- calliope_studio-0.1.0/web/src/editor/monacoTheme.ts +88 -0
- calliope_studio-0.1.0/web/src/lib/agTheme.ts +70 -0
- calliope_studio-0.1.0/web/src/lib/basemap.ts +332 -0
- calliope_studio-0.1.0/web/src/lib/calliopeSchema.test.ts +137 -0
- calliope_studio-0.1.0/web/src/lib/calliopeSchema.ts +149 -0
- calliope_studio-0.1.0/web/src/lib/chartControls.ts +57 -0
- calliope_studio-0.1.0/web/src/lib/cssColor.test.ts +89 -0
- calliope_studio-0.1.0/web/src/lib/cssColor.ts +182 -0
- calliope_studio-0.1.0/web/src/lib/dataTableParams.test.ts +102 -0
- calliope_studio-0.1.0/web/src/lib/dataTableParams.ts +56 -0
- calliope_studio-0.1.0/web/src/lib/design.test.ts +502 -0
- calliope_studio-0.1.0/web/src/lib/download.test.ts +112 -0
- calliope_studio-0.1.0/web/src/lib/download.ts +100 -0
- calliope_studio-0.1.0/web/src/lib/entries.test.ts +184 -0
- calliope_studio-0.1.0/web/src/lib/entries.ts +223 -0
- calliope_studio-0.1.0/web/src/lib/fileKind.test.ts +61 -0
- calliope_studio-0.1.0/web/src/lib/fileKind.ts +113 -0
- calliope_studio-0.1.0/web/src/lib/fileTree.test.ts +118 -0
- calliope_studio-0.1.0/web/src/lib/fileTree.ts +120 -0
- calliope_studio-0.1.0/web/src/lib/formClasses.ts +265 -0
- calliope_studio-0.1.0/web/src/lib/format.test.ts +138 -0
- calliope_studio-0.1.0/web/src/lib/format.ts +147 -0
- calliope_studio-0.1.0/web/src/lib/frameCsv.test.ts +273 -0
- calliope_studio-0.1.0/web/src/lib/frameCsv.ts +171 -0
- calliope_studio-0.1.0/web/src/lib/frameExport.ts +49 -0
- calliope_studio-0.1.0/web/src/lib/frameIndex.test.ts +103 -0
- calliope_studio-0.1.0/web/src/lib/frameIndex.ts +93 -0
- calliope_studio-0.1.0/web/src/lib/icons.ts +70 -0
- calliope_studio-0.1.0/web/src/lib/inherited.test.ts +171 -0
- calliope_studio-0.1.0/web/src/lib/inherited.ts +147 -0
- calliope_studio-0.1.0/web/src/lib/mapGeo.test.ts +189 -0
- calliope_studio-0.1.0/web/src/lib/mapGeo.ts +230 -0
- calliope_studio-0.1.0/web/src/lib/mapValues.test.ts +116 -0
- calliope_studio-0.1.0/web/src/lib/mapValues.ts +101 -0
- calliope_studio-0.1.0/web/src/lib/markdown.test.ts +98 -0
- calliope_studio-0.1.0/web/src/lib/markdown.ts +99 -0
- calliope_studio-0.1.0/web/src/lib/mathRender.test.ts +129 -0
- calliope_studio-0.1.0/web/src/lib/mathRender.ts +92 -0
- calliope_studio-0.1.0/web/src/lib/modelPaths.test.ts +73 -0
- calliope_studio-0.1.0/web/src/lib/modelPaths.ts +66 -0
- calliope_studio-0.1.0/web/src/lib/modelTree.test.ts +157 -0
- calliope_studio-0.1.0/web/src/lib/modelTree.ts +136 -0
- calliope_studio-0.1.0/web/src/lib/monacoBuffer.ts +41 -0
- calliope_studio-0.1.0/web/src/lib/navHistory.test.ts +144 -0
- calliope_studio-0.1.0/web/src/lib/navHistory.ts +127 -0
- calliope_studio-0.1.0/web/src/lib/openIntent.ts +23 -0
- calliope_studio-0.1.0/web/src/lib/pieMarker.test.ts +94 -0
- calliope_studio-0.1.0/web/src/lib/pieMarker.ts +163 -0
- calliope_studio-0.1.0/web/src/lib/precision.test.ts +117 -0
- calliope_studio-0.1.0/web/src/lib/precision.ts +99 -0
- calliope_studio-0.1.0/web/src/lib/resultsLayouts.test.ts +156 -0
- calliope_studio-0.1.0/web/src/lib/resultsLayouts.ts +229 -0
- calliope_studio-0.1.0/web/src/lib/seriesColors.ts +31 -0
- calliope_studio-0.1.0/web/src/lib/seriesLabel.test.ts +50 -0
- calliope_studio-0.1.0/web/src/lib/seriesLabel.ts +41 -0
- calliope_studio-0.1.0/web/src/lib/sourceTargets.test.ts +90 -0
- calliope_studio-0.1.0/web/src/lib/sourceTargets.ts +52 -0
- calliope_studio-0.1.0/web/src/lib/storageKeys.test.ts +75 -0
- calliope_studio-0.1.0/web/src/lib/storageKeys.ts +51 -0
- calliope_studio-0.1.0/web/src/lib/tabId.test.ts +120 -0
- calliope_studio-0.1.0/web/src/lib/tabId.ts +139 -0
- calliope_studio-0.1.0/web/src/lib/tableRows.test.ts +126 -0
- calliope_studio-0.1.0/web/src/lib/tableRows.ts +93 -0
- calliope_studio-0.1.0/web/src/lib/techs.test.ts +108 -0
- calliope_studio-0.1.0/web/src/lib/techs.ts +63 -0
- calliope_studio-0.1.0/web/src/lib/tokens.test.ts +155 -0
- calliope_studio-0.1.0/web/src/lib/treeFilter.test.ts +178 -0
- calliope_studio-0.1.0/web/src/lib/treeFilter.ts +109 -0
- calliope_studio-0.1.0/web/src/lib/units.test.ts +303 -0
- calliope_studio-0.1.0/web/src/lib/units.ts +327 -0
- calliope_studio-0.1.0/web/src/lib/utils.ts +13 -0
- calliope_studio-0.1.0/web/src/main.ts +19 -0
- calliope_studio-0.1.0/web/src/monacoSetup.test.ts +102 -0
- calliope_studio-0.1.0/web/src/monacoSetup.ts +184 -0
- calliope_studio-0.1.0/web/src/router/index.ts +127 -0
- calliope_studio-0.1.0/web/src/stores/componentTree.ts +38 -0
- calliope_studio-0.1.0/web/src/stores/confirm.ts +51 -0
- calliope_studio-0.1.0/web/src/stores/explorer.test.ts +59 -0
- calliope_studio-0.1.0/web/src/stores/explorer.ts +67 -0
- calliope_studio-0.1.0/web/src/stores/math.ts +351 -0
- calliope_studio-0.1.0/web/src/stores/project.ts +66 -0
- calliope_studio-0.1.0/web/src/stores/rounding.test.ts +137 -0
- calliope_studio-0.1.0/web/src/stores/rounding.ts +135 -0
- calliope_studio-0.1.0/web/src/stores/runSelection.test.ts +922 -0
- calliope_studio-0.1.0/web/src/stores/runSelection.ts +791 -0
- calliope_studio-0.1.0/web/src/stores/runs.test.ts +503 -0
- calliope_studio-0.1.0/web/src/stores/runs.ts +532 -0
- calliope_studio-0.1.0/web/src/stores/schema.test.ts +122 -0
- calliope_studio-0.1.0/web/src/stores/schema.ts +94 -0
- calliope_studio-0.1.0/web/src/stores/schemaKinds.ts +130 -0
- calliope_studio-0.1.0/web/src/stores/sectionData.ts +54 -0
- calliope_studio-0.1.0/web/src/stores/tabs.test.ts +721 -0
- calliope_studio-0.1.0/web/src/stores/tabs.ts +898 -0
- calliope_studio-0.1.0/web/src/stores/templates.ts +41 -0
- calliope_studio-0.1.0/web/src/stores/ui.test.ts +377 -0
- calliope_studio-0.1.0/web/src/stores/ui.ts +416 -0
- calliope_studio-0.1.0/web/src/stores/units.test.ts +110 -0
- calliope_studio-0.1.0/web/src/stores/units.ts +107 -0
- calliope_studio-0.1.0/web/src/stores/validation.ts +177 -0
- calliope_studio-0.1.0/web/src/stores/version.ts +65 -0
- calliope_studio-0.1.0/web/src/style.css +332 -0
- calliope_studio-0.1.0/web/src/test-setup.ts +55 -0
- calliope_studio-0.1.0/web/src/test-stubs/browserOnly.ts +16 -0
- calliope_studio-0.1.0/web/src/views/OpenProjectView.vue +48 -0
- calliope_studio-0.1.0/web/src/views/OpenResultsView.vue +95 -0
- calliope_studio-0.1.0/web/src/views/ProjectListView.vue +173 -0
- calliope_studio-0.1.0/web/src/vite-env.d.ts +7 -0
- calliope_studio-0.1.0/web/tsconfig.json +34 -0
- calliope_studio-0.1.0/web/tsconfig.node.json +13 -0
- calliope_studio-0.1.0/web/vite.config.ts +64 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Line endings are LF in the repository and LF in the working tree, on every
|
|
2
|
+
# platform. Without this, a Windows checkout with git's default `core.autocrlf`
|
|
3
|
+
# hands CRLF to the YAML and CSV fixtures — and the round-trip tests assert that
|
|
4
|
+
# a rewrite preserves comments and line count, while `save-check` asserts that a
|
|
5
|
+
# no-op save changes nothing at all. Both would be measuring git's translation
|
|
6
|
+
# rather than this project's, and the CSVs are read by pandas besides.
|
|
7
|
+
#
|
|
8
|
+
# `eol=lf` rather than bare `text=auto`, which normalises on commit but still
|
|
9
|
+
# lets the working tree be CRLF.
|
|
10
|
+
* text=auto eol=lf
|
|
11
|
+
|
|
12
|
+
# Binary, so git neither translates nor tries to merge them.
|
|
13
|
+
*.nc binary
|
|
14
|
+
*.ico binary
|
|
15
|
+
*.icns binary
|
|
16
|
+
*.png binary
|
|
17
|
+
*.woff binary
|
|
18
|
+
*.woff2 binary
|
|
19
|
+
*.ttf binary
|
|
20
|
+
|
|
21
|
+
pixi.lock linguist-generated=true merge=binary
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
# Nothing surfaced dependency advisories before this: there was no audit step,
|
|
4
|
+
# no update automation, and nine open advisories in the frontend tree that the
|
|
5
|
+
# pnpm migration was the first thing to notice.
|
|
6
|
+
#
|
|
7
|
+
# Grouped, because ungrouped updates across three ecosystems open a PR per
|
|
8
|
+
# package and the review then never happens. Note that pixi.lock is *not*
|
|
9
|
+
# covered by any of this — conda dependencies stay a manual job.
|
|
10
|
+
updates:
|
|
11
|
+
# Dependabot reads pnpm-lock.yaml under the "npm" ecosystem.
|
|
12
|
+
- package-ecosystem: npm
|
|
13
|
+
directory: /web
|
|
14
|
+
schedule:
|
|
15
|
+
interval: weekly
|
|
16
|
+
open-pull-requests-limit: 5
|
|
17
|
+
groups:
|
|
18
|
+
minor-and-patch:
|
|
19
|
+
update-types: [minor, patch]
|
|
20
|
+
# Majors are grouped for the same reason the others are, learned the hard
|
|
21
|
+
# way: left ungrouped they arrive one PR per package, and five of them —
|
|
22
|
+
# typescript, maplibre-gl, echarts, apache-arrow, vitest — filled
|
|
23
|
+
# `open-pull-requests-limit` exactly, which then blocked the
|
|
24
|
+
# minor-and-patch PR from opening at all. The group carrying routine
|
|
25
|
+
# updates was starved by the group nobody merges in a hurry. (Security
|
|
26
|
+
# updates have their own separate limit and were never at risk.)
|
|
27
|
+
major:
|
|
28
|
+
update-types: [major]
|
|
29
|
+
ignore:
|
|
30
|
+
# Pinned deliberately: 0.53 changed how a worker hands its foreign module
|
|
31
|
+
# to the main thread, monaco-yaml still speaks the older protocol, and
|
|
32
|
+
# under 0.55 the YAML language worker answered nothing at all. Lifting
|
|
33
|
+
# the pin is a decision `pixi run -- pnpm --dir web run monaco-check`
|
|
34
|
+
# makes, not one a bot should.
|
|
35
|
+
- dependency-name: monaco-editor
|
|
36
|
+
update-types:
|
|
37
|
+
- "version-update:semver-minor"
|
|
38
|
+
- "version-update:semver-major"
|
|
39
|
+
# TypeScript 7 is the Go compiler, and vue-tsc cannot run on it: Volar
|
|
40
|
+
# embeds TypeScript's classic programmatic API, which 7.0 ships without a
|
|
41
|
+
# stable replacement for — that is 7.1's headline, expected around
|
|
42
|
+
# October 2026. `pixi run web-typecheck` *is* vue-tsc, so a bump here is
|
|
43
|
+
# not a config nit but a dead type check: it fails in vue-tsc's own
|
|
44
|
+
# entry point with ERR_PACKAGE_PATH_NOT_EXPORTED. Lift the pin when
|
|
45
|
+
# vue-tsc declares support, not when 7.x merely installs.
|
|
46
|
+
- dependency-name: typescript
|
|
47
|
+
update-types:
|
|
48
|
+
- "version-update:semver-major"
|
|
49
|
+
|
|
50
|
+
# This is what keeps the SHA-pinned actions in ci.yml current. Without it,
|
|
51
|
+
# pinning by SHA means pinning to whatever was true the day it was written.
|
|
52
|
+
- package-ecosystem: github-actions
|
|
53
|
+
directory: /
|
|
54
|
+
schedule:
|
|
55
|
+
interval: weekly
|
|
56
|
+
groups:
|
|
57
|
+
actions:
|
|
58
|
+
patterns: ["*"]
|
|
59
|
+
|
|
60
|
+
- package-ecosystem: pip
|
|
61
|
+
directory: /
|
|
62
|
+
schedule:
|
|
63
|
+
interval: monthly
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
# Nothing in this workflow writes back to the repository, so the default
|
|
9
|
+
# token scope is more than any job needs. Dependabot keeps the SHA pins below
|
|
10
|
+
# current; pinning by tag would let a retagged action ship new code silently.
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
16
|
+
cancel-in-progress: true
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
python:
|
|
20
|
+
name: Python
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
|
+
with:
|
|
25
|
+
# setuptools-scm derives the version from tags.
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
28
|
+
with:
|
|
29
|
+
cache: true
|
|
30
|
+
- name: Lint
|
|
31
|
+
run: pixi run lint
|
|
32
|
+
- name: Check formatting
|
|
33
|
+
run: pixi run format-check
|
|
34
|
+
# The sample .nc files are gitignored, and the numerical comparison
|
|
35
|
+
# against v0.2.0 skips without them — which meant the only evidence the
|
|
36
|
+
# results layer is correct never ran here. Solving Calliope's own two
|
|
37
|
+
# templates takes a minute and removes the skip.
|
|
38
|
+
- name: Solve the example models
|
|
39
|
+
run: pixi run solve-examples
|
|
40
|
+
- name: Test
|
|
41
|
+
run: pixi run test-cov
|
|
42
|
+
|
|
43
|
+
# `fail_ci_if_error` stays false, which is the action's own default and
|
|
44
|
+
# deliberate here: `secrets.CODECOV_TOKEN` is not readable by a
|
|
45
|
+
# Dependabot-triggered run unless the same value is also stored under the
|
|
46
|
+
# repository's *Dependabot* secrets, so a strict upload would turn every
|
|
47
|
+
# dependency PR red over something that is not a test failure. A Codecov
|
|
48
|
+
# outage should not gate a merge either.
|
|
49
|
+
- name: Upload coverage
|
|
50
|
+
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
|
51
|
+
with:
|
|
52
|
+
files: coverage.xml
|
|
53
|
+
flags: python
|
|
54
|
+
# The report names exactly one file, so searching the tree for others
|
|
55
|
+
# can only find something unintended.
|
|
56
|
+
disable_search: true
|
|
57
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
58
|
+
fail_ci_if_error: false
|
|
59
|
+
|
|
60
|
+
web:
|
|
61
|
+
name: Frontend
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
steps:
|
|
64
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
65
|
+
# Node and pnpm both come from pixi, so their versions are pinned in
|
|
66
|
+
# pixi.lock alongside everything else rather than drifting against it.
|
|
67
|
+
# Every step below is a pixi task, which is why there is no
|
|
68
|
+
# `working-directory` here: the tasks carry their own `cwd = "web"`.
|
|
69
|
+
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
70
|
+
with:
|
|
71
|
+
cache: true
|
|
72
|
+
- name: Install
|
|
73
|
+
run: pixi run web-install
|
|
74
|
+
- name: Lint
|
|
75
|
+
run: pixi run web-lint
|
|
76
|
+
- name: Type check
|
|
77
|
+
run: pixi run web-typecheck
|
|
78
|
+
- name: Audit
|
|
79
|
+
run: pixi run web-audit
|
|
80
|
+
- name: Test
|
|
81
|
+
run: pixi run -- pnpm --dir web run test:coverage
|
|
82
|
+
|
|
83
|
+
# vitest writes lcov paths relative to `web/`, so the report says
|
|
84
|
+
# `src/App.vue` where the repository says `web/src/App.vue`. Codecov
|
|
85
|
+
# resolves that by matching the report path against its file network, and
|
|
86
|
+
# `network_filter` is what makes the match unambiguous: without it the
|
|
87
|
+
# network also holds the Python `src/`, and the two trees are one bad
|
|
88
|
+
# guess apart. See the `python` job above for `fail_ci_if_error`.
|
|
89
|
+
- name: Upload coverage
|
|
90
|
+
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
|
91
|
+
with:
|
|
92
|
+
files: web/coverage/lcov.info
|
|
93
|
+
flags: web
|
|
94
|
+
network_filter: web/
|
|
95
|
+
disable_search: true
|
|
96
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
97
|
+
fail_ci_if_error: false
|
|
98
|
+
|
|
99
|
+
- name: Build
|
|
100
|
+
run: pixi run web-build
|
|
101
|
+
|
|
102
|
+
windows:
|
|
103
|
+
name: Windows
|
|
104
|
+
runs-on: windows-latest
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
107
|
+
with:
|
|
108
|
+
fetch-depth: 0
|
|
109
|
+
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
110
|
+
with:
|
|
111
|
+
cache: true
|
|
112
|
+
|
|
113
|
+
# Windows is where this project's platform-specific code lives, and until
|
|
114
|
+
# this job existed none of it had run: the job-object process group, the
|
|
115
|
+
# native stdio capture, the `os.replace` retry, and every relative path
|
|
116
|
+
# that reaches the API or `snapshot.json`. Real solves included — pixi
|
|
117
|
+
# brings coin-or-cbc here as it does everywhere else.
|
|
118
|
+
#
|
|
119
|
+
# The exclusions below are a *deny* list on purpose. A new test file runs
|
|
120
|
+
# here by default and has to be excluded deliberately, because a forgotten
|
|
121
|
+
# exclusion costs a little CPU while a forgotten inclusion costs coverage
|
|
122
|
+
# on the platform least likely to be tried by hand. Each name below has no
|
|
123
|
+
# platform surface at all — YAML and math semantics, source scanning, log
|
|
124
|
+
# parsing, and numerics against the frozen v0.2.0 implementation. They are
|
|
125
|
+
# fully covered by the Linux job.
|
|
126
|
+
#
|
|
127
|
+
# Skipping `test_oracle.py` is also what lets this job skip
|
|
128
|
+
# `solve-examples`: it is the only selection that needs the sample `.nc`
|
|
129
|
+
# files. Reading them is pure xarray, and `test_results.py` still solves a
|
|
130
|
+
# model here and reads the result back.
|
|
131
|
+
- name: Test
|
|
132
|
+
run: >
|
|
133
|
+
pixi run test
|
|
134
|
+
--ignore=tests/test_entities.py
|
|
135
|
+
--ignore=tests/test_layering.py
|
|
136
|
+
--ignore=tests/test_math_render.py
|
|
137
|
+
--ignore=tests/test_mathcache.py
|
|
138
|
+
--ignore=tests/test_mathdef.py
|
|
139
|
+
--ignore=tests/test_modeldef_geo.py
|
|
140
|
+
--ignore=tests/test_oracle.py
|
|
141
|
+
--ignore=tests/test_overrides.py
|
|
142
|
+
--ignore=tests/test_resolution_parity.py
|
|
143
|
+
--ignore=tests/test_results_api.py
|
|
144
|
+
--ignore=tests/test_run_stages.py
|
|
145
|
+
|
|
146
|
+
browser:
|
|
147
|
+
name: Browser
|
|
148
|
+
runs-on: ubuntu-latest
|
|
149
|
+
steps:
|
|
150
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
151
|
+
with:
|
|
152
|
+
fetch-depth: 0
|
|
153
|
+
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
154
|
+
with:
|
|
155
|
+
cache: true
|
|
156
|
+
|
|
157
|
+
- name: Install the frontend and build it into the package
|
|
158
|
+
run: pixi run web-build
|
|
159
|
+
|
|
160
|
+
- name: Install Chromium
|
|
161
|
+
# The scripts use playwright-core, which ships no browsers. Matching the
|
|
162
|
+
# installer's version to playwright-core's is what makes
|
|
163
|
+
# `chromium.executablePath()` resolve to the one it just downloaded.
|
|
164
|
+
run: |
|
|
165
|
+
version=$(pixi run -- pnpm --dir web exec node -p "require('playwright-core/package.json').version")
|
|
166
|
+
pixi run -- pnpm --dir web dlx playwright@$version install --with-deps chromium
|
|
167
|
+
echo "CHROMIUM=$(pixi run -- pnpm --dir web exec node -e "console.log(require('playwright-core').chromium.executablePath())")" >> "$GITHUB_ENV"
|
|
168
|
+
|
|
169
|
+
- name: Scaffold a model to drive
|
|
170
|
+
run: pixi run example
|
|
171
|
+
|
|
172
|
+
# `http-get://`, not `http://`. wait-on's `http://` scheme issues a
|
|
173
|
+
# **HEAD**, and `/api/health` answers GET only: Starlette's `Route` adds
|
|
174
|
+
# HEAD wherever GET is present, and FastAPI's `APIRoute` does not. So the
|
|
175
|
+
# endpoint returned 405 to every probe and wait-on burned its full 120s,
|
|
176
|
+
# which is why this step had never passed in any recorded run.
|
|
177
|
+
#
|
|
178
|
+
# The server was never at fault, which took capturing its output to
|
|
179
|
+
# establish — it had been discarded. That capture stays: a `wait-on`
|
|
180
|
+
# timeout with no other evidence is exactly what cost three runs.
|
|
181
|
+
- name: Start the server on it
|
|
182
|
+
run: |
|
|
183
|
+
pixi run calliope-studio --no-browser --port 8791 example-model \
|
|
184
|
+
> server.log 2>&1 &
|
|
185
|
+
echo $! > server.pid
|
|
186
|
+
if ! pixi run -- pnpm dlx wait-on -t 120000 http-get://127.0.0.1:8791/api/health
|
|
187
|
+
then
|
|
188
|
+
echo "::group::server.log"
|
|
189
|
+
cat server.log || echo "(no server.log)"
|
|
190
|
+
echo "::endgroup::"
|
|
191
|
+
echo "::group::is the process alive?"
|
|
192
|
+
ps -p "$(cat server.pid)" -o pid,stat,etime,cmd || echo "(gone)"
|
|
193
|
+
echo "::endgroup::"
|
|
194
|
+
echo "::group::is anything listening on 8791?"
|
|
195
|
+
ss -ltnp 2>/dev/null | grep 8791 || echo "(nothing listening)"
|
|
196
|
+
echo "::endgroup::"
|
|
197
|
+
echo "::group::what does the endpoint say?"
|
|
198
|
+
curl -sv -m 10 http://127.0.0.1:8791/api/health 2>&1 | tail -30 \
|
|
199
|
+
|| echo "(curl failed)"
|
|
200
|
+
echo "::endgroup::"
|
|
201
|
+
exit 1
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
# The design tokens, and every renderer that reads them outside the DOM.
|
|
205
|
+
# Every check below records a marker instead of aborting the job, and the
|
|
206
|
+
# gate at the end fails if any exist. These are the only coverage of a
|
|
207
|
+
# dozen behaviours that nothing else tests, and finding them one push at a
|
|
208
|
+
# time — three minutes each — is not a reasonable way to learn what is
|
|
209
|
+
# already broken.
|
|
210
|
+
#
|
|
211
|
+
# The step re-raises after recording, so it shows as failed rather than
|
|
212
|
+
# green; `continue-on-error` is what carries the job on to the remaining
|
|
213
|
+
# checks; and the marker is what the gate reads at the end. All three, and
|
|
214
|
+
# the first is easy to lose: a bare `cmd || touch marker` exits 0, so the
|
|
215
|
+
# step reports success and only the gate knows anything went wrong.
|
|
216
|
+
#
|
|
217
|
+
# They share one server and one model, and some mutate it: a check that
|
|
218
|
+
# dies before its own cleanup can make later ones fail for reasons of its
|
|
219
|
+
# making. Read the first failure as the real one.
|
|
220
|
+
- name: Collect check failures
|
|
221
|
+
run: mkdir -p .check-failed
|
|
222
|
+
|
|
223
|
+
- name: Token check
|
|
224
|
+
continue-on-error: true
|
|
225
|
+
run: pixi run -- pnpm --dir web run token-check http://127.0.0.1:8791 || { touch .check-failed/token-check; exit 1; }
|
|
226
|
+
|
|
227
|
+
# The YAML language worker, which answered nothing at all until the
|
|
228
|
+
# monaco-editor pin. This is what notices if the pin is lifted.
|
|
229
|
+
- name: Monaco check
|
|
230
|
+
continue-on-error: true
|
|
231
|
+
run: pixi run -- pnpm --dir web run monaco-check http://127.0.0.1:8791 || { touch .check-failed/monaco-check; exit 1; }
|
|
232
|
+
|
|
233
|
+
# A no-op save must not change the file, across every structured section.
|
|
234
|
+
- name: Faithful-save check
|
|
235
|
+
continue-on-error: true
|
|
236
|
+
run: pixi run -- pnpm --dir web run save-check http://127.0.0.1:8791 || { touch .check-failed/save-check; exit 1; }
|
|
237
|
+
|
|
238
|
+
# The guard between a user and their unsaved edits. A no-op guard fails
|
|
239
|
+
# silently — no error, no console output, just the edits gone — so the
|
|
240
|
+
# only way to know it still works is to dirty a tab and try to leave.
|
|
241
|
+
- name: Unsaved-changes guard
|
|
242
|
+
continue-on-error: true
|
|
243
|
+
run: pixi run -- pnpm --dir web run confirm-check http://127.0.0.1:8791 || { touch .check-failed/confirm-check; exit 1; }
|
|
244
|
+
|
|
245
|
+
# The explorer filters. A search borrows Reka's expansion model and has to
|
|
246
|
+
# give it back exactly as it was, which nothing but a rendered tree shows:
|
|
247
|
+
# with the two sets confused, collapsing a branch mid-search silently does
|
|
248
|
+
# nothing and clearing the field loses the expansion the user built.
|
|
249
|
+
- name: Tree search
|
|
250
|
+
continue-on-error: true
|
|
251
|
+
run: pixi run -- pnpm --dir web run tree-search http://127.0.0.1:8791 || { touch .check-failed/tree-search; exit 1; }
|
|
252
|
+
|
|
253
|
+
# Every popup lands where a person can see it. A popper with no anchor
|
|
254
|
+
# stays at Reka's off-screen default while the DOM looks entirely healthy,
|
|
255
|
+
# so presence is not the property — position is.
|
|
256
|
+
- name: Popup placement
|
|
257
|
+
continue-on-error: true
|
|
258
|
+
run: pixi run -- pnpm --dir web run menu-check http://127.0.0.1:8791 || { touch .check-failed/menu-check; exit 1; }
|
|
259
|
+
|
|
260
|
+
# The map as an input: it has a size at all, a node drags, a link draws.
|
|
261
|
+
- name: Map editing
|
|
262
|
+
continue-on-error: true
|
|
263
|
+
run: pixi run -- pnpm --dir web run map-edit http://127.0.0.1:8791 || { touch .check-failed/map-edit; exit 1; }
|
|
264
|
+
|
|
265
|
+
# Where an inherited value comes from, and that clicking it goes there. A
|
|
266
|
+
# source that fails to resolve renders as plain text, which is
|
|
267
|
+
# indistinguishable from a deliberate design, and a link to the wrong file
|
|
268
|
+
# opens a file and says nothing — neither is visible without a browser.
|
|
269
|
+
- name: Source links
|
|
270
|
+
continue-on-error: true
|
|
271
|
+
run: pixi run -- pnpm --dir web run source-link http://127.0.0.1:8791 || { touch .check-failed/source-link; exit 1; }
|
|
272
|
+
|
|
273
|
+
# The picker's entries are not clipped, and a model can be created.
|
|
274
|
+
- name: Model picker
|
|
275
|
+
continue-on-error: true
|
|
276
|
+
run: pixi run -- pnpm --dir web run model-picker http://127.0.0.1:8791 || { touch .check-failed/model-picker; exit 1; }
|
|
277
|
+
|
|
278
|
+
# Custom math, end to end: a file is declared, enabled, rendered and read.
|
|
279
|
+
# Both halves are invisible without a browser — KaTeX turns an equation it
|
|
280
|
+
# cannot parse into markup rather than an exception, so a formulation with
|
|
281
|
+
# one missing looks exactly like one without it; and a math file declared
|
|
282
|
+
# but never enabled is read by nobody with Calliope saying nothing at all.
|
|
283
|
+
- name: Custom math
|
|
284
|
+
continue-on-error: true
|
|
285
|
+
run: pixi run -- pnpm --dir web run math-check http://127.0.0.1:8791 || { touch .check-failed/math-check; exit 1; }
|
|
286
|
+
|
|
287
|
+
# Creating a file and a folder, and what a file that is not text shows.
|
|
288
|
+
# A binary used to open in Monaco as a screenful of replacement
|
|
289
|
+
# characters, which Ctrl/Cmd+S then wrote back over the original bytes —
|
|
290
|
+
# so the save keystroke is asserted here, not only the message.
|
|
291
|
+
- name: File actions and viewers
|
|
292
|
+
continue-on-error: true
|
|
293
|
+
run: pixi run -- pnpm --dir web run file-actions http://127.0.0.1:8791 || { touch .check-failed/file-actions; exit 1; }
|
|
294
|
+
|
|
295
|
+
# Reordering tabs by dragging them. The order is applied mid-drag, so the
|
|
296
|
+
# element under the pointer is re-parented while it is being held — which
|
|
297
|
+
# cancels the drag outright if Vue rebuilds the row rather than moving it.
|
|
298
|
+
# And the drag must offer a payload no one else takes: as `text/plain` a
|
|
299
|
+
# tab released over the editor pastes its own id into the user's file,
|
|
300
|
+
# which this check does end to end because it really happened.
|
|
301
|
+
- name: Tab reordering
|
|
302
|
+
continue-on-error: true
|
|
303
|
+
run: pixi run -- pnpm --dir web run tab-drag http://127.0.0.1:8791 || { touch .check-failed/tab-drag; exit 1; }
|
|
304
|
+
|
|
305
|
+
# Really solves, with CBC, and drives the run tab from log to charts.
|
|
306
|
+
- name: Run lifecycle
|
|
307
|
+
continue-on-error: true
|
|
308
|
+
run: pixi run -- pnpm --dir web run run-lifecycle http://127.0.0.1:8791 || { touch .check-failed/run-lifecycle; exit 1; }
|
|
309
|
+
|
|
310
|
+
# The README's pictures, taken but not published — publishing happens on a
|
|
311
|
+
# tag, in its own workflow, and a selector that has moved should be found
|
|
312
|
+
# here rather than in the middle of cutting a release. Nearly free: it
|
|
313
|
+
# reuses the run `run-lifecycle` has just left in the model, so it solves
|
|
314
|
+
# nothing.
|
|
315
|
+
- name: README screenshots
|
|
316
|
+
continue-on-error: true
|
|
317
|
+
run: |
|
|
318
|
+
pixi run -- pnpm --dir web run screenshots http://127.0.0.1:8791 results /tmp/shots \
|
|
319
|
+
&& pixi run -- pnpm --dir web run screenshots http://127.0.0.1:8791 editor /tmp/shots \
|
|
320
|
+
|| { touch .check-failed/screenshots; exit 1; }
|
|
321
|
+
|
|
322
|
+
# Not on what `run-lifecycle` just produced: smoke-charts asserts that
|
|
323
|
+
# with nothing summed *no* technology colour is painted, and whether that
|
|
324
|
+
# holds is a property of the model. `choose_index` puts techs on the index
|
|
325
|
+
# for urban_scale and nodes on it for national_scale, so that assertion
|
|
326
|
+
# legitimately fails against a national_scale run on working code.
|
|
327
|
+
- name: Results view, on the urban_scale example
|
|
328
|
+
continue-on-error: true
|
|
329
|
+
run: |
|
|
330
|
+
pixi run solve-examples urban_scale
|
|
331
|
+
pixi run calliope-studio --no-browser --port 8792 examples/nc_files/urban_scale.nc &
|
|
332
|
+
pixi run -- pnpm dlx wait-on -t 120000 http-get://127.0.0.1:8792/api/health
|
|
333
|
+
pixi run -- pnpm --dir web run smoke http://127.0.0.1:8792 || { touch .check-failed/smoke; exit 1; }
|
|
334
|
+
|
|
335
|
+
- name: Fail if any browser check failed
|
|
336
|
+
run: |
|
|
337
|
+
if [ -n "$(ls -A .check-failed 2>/dev/null)" ]; then
|
|
338
|
+
echo "::error::browser checks failed: $(ls .check-failed | tr '\n' ' ')"
|
|
339
|
+
exit 1
|
|
340
|
+
fi
|
|
341
|
+
echo "every browser check passed"
|
|
342
|
+
|
|
343
|
+
- name: Keep the screenshots when something fails
|
|
344
|
+
if: failure()
|
|
345
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
346
|
+
with:
|
|
347
|
+
name: browser-screenshots
|
|
348
|
+
path: /tmp/calliope-studio-*.png
|
|
349
|
+
if-no-files-found: ignore
|
|
350
|
+
|
|
351
|
+
# The README's, always — the only way to see what a change did to them
|
|
352
|
+
# without cutting a release to find out.
|
|
353
|
+
- name: Keep the README screenshots
|
|
354
|
+
if: always()
|
|
355
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
356
|
+
with:
|
|
357
|
+
name: readme-screenshots
|
|
358
|
+
path: /tmp/shots/*.png
|
|
359
|
+
if-no-files-found: ignore
|
|
360
|
+
|
|
361
|
+
package:
|
|
362
|
+
name: Package
|
|
363
|
+
runs-on: ubuntu-latest
|
|
364
|
+
steps:
|
|
365
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
366
|
+
with:
|
|
367
|
+
fetch-depth: 0
|
|
368
|
+
- uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
369
|
+
with:
|
|
370
|
+
cache: true
|
|
371
|
+
- name: Build wheel and check the interface is bundled
|
|
372
|
+
# `python -m build` alone succeeds without the frontend and produces a
|
|
373
|
+
# wheel with no interface, so the check is the point of this job.
|
|
374
|
+
run: pixi run -e build build
|
|
375
|
+
|
|
376
|
+
# Handed to `interpreters` below rather than rebuilt there: that job is
|
|
377
|
+
# about the *artefact* installing, and a wheel built per interpreter would
|
|
378
|
+
# not be the one we ship.
|
|
379
|
+
- name: Keep the artefacts
|
|
380
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
381
|
+
with:
|
|
382
|
+
name: dist
|
|
383
|
+
path: dist/
|
|
384
|
+
retention-days: 1
|
|
385
|
+
|
|
386
|
+
# `pixi run test` covers one interpreter — whichever `pixi.lock` pins — so
|
|
387
|
+
# nothing here used to exercise the rest of the declared `requires-python`
|
|
388
|
+
# range. This installs the built wheel from PyPI-resolved dependencies on each
|
|
389
|
+
# supported version, which is what a user actually does, and is the only place
|
|
390
|
+
# a version-specific resolution failure or C-extension mismatch would show up.
|
|
391
|
+
#
|
|
392
|
+
# Deliberately not pixi: conda-forge resolves a different dependency set, so a
|
|
393
|
+
# pixi environment per interpreter would test the one path this job is not
|
|
394
|
+
# about.
|
|
395
|
+
interpreters:
|
|
396
|
+
name: Python ${{ matrix.python-version }}
|
|
397
|
+
needs: package
|
|
398
|
+
runs-on: ubuntu-latest
|
|
399
|
+
strategy:
|
|
400
|
+
fail-fast: false
|
|
401
|
+
matrix:
|
|
402
|
+
# Must stay equal to `requires-python` in `pyproject.toml`. 3.14 is
|
|
403
|
+
# absent because pandas ships no cp314 wheel before 2.3.3 and Calliope
|
|
404
|
+
# 0.7.0.dev7 caps pandas below that; see the comment there.
|
|
405
|
+
python-version: ["3.12", "3.13"]
|
|
406
|
+
steps:
|
|
407
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
408
|
+
with:
|
|
409
|
+
name: dist
|
|
410
|
+
path: dist/
|
|
411
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
412
|
+
with:
|
|
413
|
+
python-version: ${{ matrix.python-version }}
|
|
414
|
+
|
|
415
|
+
- name: Install the wheel
|
|
416
|
+
# No `--pre`, on purpose: Calliope 0.7 is a pre-release, and this asserts
|
|
417
|
+
# that the `>=0.7.0.dev7` lower bound is enough to resolve it the way the
|
|
418
|
+
# README's install line promises.
|
|
419
|
+
run: pip install dist/*.whl
|
|
420
|
+
|
|
421
|
+
- name: Import the stack
|
|
422
|
+
# An import is what catches a version-specific break — a C extension
|
|
423
|
+
# built for the wrong ABI, or a dependency that resolved but cannot load.
|
|
424
|
+
# `server.app` is included because importing it builds the FastAPI app.
|
|
425
|
+
run: |
|
|
426
|
+
python - <<'EOF'
|
|
427
|
+
import calliope, calliope_studio, netCDF4, numpy, pandas, pyarrow, xarray
|
|
428
|
+
from calliope_studio.server.app import app
|
|
429
|
+
print("studio ", calliope_studio.__version__)
|
|
430
|
+
print("calliope", calliope.__version__)
|
|
431
|
+
print("pandas ", pandas.__version__)
|
|
432
|
+
print("xarray ", xarray.__version__)
|
|
433
|
+
print("routes ", len(app.routes))
|
|
434
|
+
EOF
|
|
435
|
+
|
|
436
|
+
- name: Run the console script
|
|
437
|
+
run: calliope-studio --help
|