diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 010aabfe8..ff9f093d0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,18 +18,18 @@ ci: repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.16 + rev: v0.16.5 hooks: - id: ruff-check args: - --fix - id: ruff-format - repo: https://github.com/oxc-project/mirrors-oxfmt - rev: v0.54.0 + rev: v0.65.0 hooks: - id: oxfmt - repo: https://github.com/oxc-project/mirrors-oxlint - rev: v1.69.0 + rev: v1.60.0 hooks: - id: oxlint - repo: https://github.com/pre-commit/pre-commit-hooks @@ -52,10 +52,10 @@ repos: hooks: - id: actionlint - repo: https://github.com/rvben/rumdl-pre-commit - rev: v0.2.10 + rev: v0.2.62 hooks: - id: rumdl-fmt - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.11.0.1 + rev: v0.11.0.1-1 hooks: - id: shellcheck diff --git a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics.json b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics.json index 18b901c7e..39971bce3 100644 --- a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics.json +++ b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics.json @@ -26,4 +26,4 @@ "forward_best_objective": 1481.1424852869957, "finite_outputs": true } -] \ No newline at end of file +] diff --git a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy.json b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy.json index c061b297c..94d53e89e 100644 --- a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy.json +++ b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy.json @@ -38,4 +38,4 @@ "adjoint-relative-residual": "/home/liblaf/github/liblaf/apple/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics-adjoint-relative-residual.png", "inverse-grad-absolute": "/home/liblaf/github/liblaf/apple/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-easy-metrics-inverse-grad-absolute.png" } -} \ No newline at end of file +} diff --git a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics.json b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics.json index e3eae723a..ed4812d40 100644 --- a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics.json +++ b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics.json @@ -404,4 +404,4 @@ "forward_best_objective": 1485.5675728610533, "finite_outputs": true } -] \ No newline at end of file +] diff --git a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero.json b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero.json index dc9f6ea0e..2f7ccd935 100644 --- a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero.json +++ b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero.json @@ -43,4 +43,4 @@ "adjoint-relative-residual": "/home/liblaf/github/liblaf/apple/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics-adjoint-relative-residual.png", "inverse-grad-absolute": "/home/liblaf/github/liblaf/apple/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean-zero-metrics-inverse-grad-absolute.png" } -} \ No newline at end of file +} diff --git a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean.json b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean.json index d95032cbc..541e835f1 100644 --- a/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean.json +++ b/exp/2026/01/28/smas/data/31-inverse-smas46-muscle46-activation-stable-neo-hookean.json @@ -88,4 +88,4 @@ } } ] -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/20-inverse-face-3152k-summary.json b/exp/2026/05/20/inverse-face/data/20-inverse-face-3152k-summary.json index c72671419..48ca2367c 100644 --- a/exp/2026/05/20/inverse-face/data/20-inverse-face-3152k-summary.json +++ b/exp/2026/05/20/inverse-face/data/20-inverse-face-3152k-summary.json @@ -136,4 +136,4 @@ "repeated/forward_failure": false, "repeated/adjoint_failure": false, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/20-inverse-face-fresh-nu049-smas1-noclamp-super-loose-reg-summary.json b/exp/2026/05/20/inverse-face/data/20-inverse-face-fresh-nu049-smas1-noclamp-super-loose-reg-summary.json index 7f2af9301..5e39a8d43 100644 --- a/exp/2026/05/20/inverse-face/data/20-inverse-face-fresh-nu049-smas1-noclamp-super-loose-reg-summary.json +++ b/exp/2026/05/20/inverse-face/data/20-inverse-face-fresh-nu049-smas1-noclamp-super-loose-reg-summary.json @@ -16721,4 +16721,4 @@ "repeated/forward_failure": false, "repeated/adjoint_failure": false, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/20-inverse-face-summary.json b/exp/2026/05/20/inverse-face/data/20-inverse-face-summary.json index 31070dead..ebdafb629 100644 --- a/exp/2026/05/20/inverse-face/data/20-inverse-face-summary.json +++ b/exp/2026/05/20/inverse-face/data/20-inverse-face-summary.json @@ -125,4 +125,4 @@ "repeated/forward_failure": false, "repeated/adjoint_failure": false, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/30-transfer-activation-3152k-summary.json b/exp/2026/05/20/inverse-face/data/30-transfer-activation-3152k-summary.json index 112c021e3..d07d13a71 100644 --- a/exp/2026/05/20/inverse-face/data/30-transfer-activation-3152k-summary.json +++ b/exp/2026/05/20/inverse-face/data/30-transfer-activation-3152k-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 16.038381466001738 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/31-transfer-activation-3152k-smas1-summary.json b/exp/2026/05/20/inverse-face/data/31-transfer-activation-3152k-smas1-summary.json index 88e5908c8..26b87edcf 100644 --- a/exp/2026/05/20/inverse-face/data/31-transfer-activation-3152k-smas1-summary.json +++ b/exp/2026/05/20/inverse-face/data/31-transfer-activation-3152k-smas1-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 6.737611743999878 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/40-transfer-activation-515k-smas100-summary.json b/exp/2026/05/20/inverse-face/data/40-transfer-activation-515k-smas100-summary.json index 8a94d6b97..ce007c5f4 100644 --- a/exp/2026/05/20/inverse-face/data/40-transfer-activation-515k-smas100-summary.json +++ b/exp/2026/05/20/inverse-face/data/40-transfer-activation-515k-smas100-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 3.82475233200239 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/41-transfer-activation-515k-smas1-summary.json b/exp/2026/05/20/inverse-face/data/41-transfer-activation-515k-smas1-summary.json index ca81a08ec..b24ce90cc 100644 --- a/exp/2026/05/20/inverse-face/data/41-transfer-activation-515k-smas1-summary.json +++ b/exp/2026/05/20/inverse-face/data/41-transfer-activation-515k-smas1-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 3.6330396700068377 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/42-transfer-activation-3152k-smas100-summary.json b/exp/2026/05/20/inverse-face/data/42-transfer-activation-3152k-smas100-summary.json index 5bc1f9207..a83e3f59c 100644 --- a/exp/2026/05/20/inverse-face/data/42-transfer-activation-3152k-smas100-summary.json +++ b/exp/2026/05/20/inverse-face/data/42-transfer-activation-3152k-smas100-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 4.520490328024607 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/data/43-transfer-activation-3152k-smas1-summary.json b/exp/2026/05/20/inverse-face/data/43-transfer-activation-3152k-smas1-summary.json index 40b9e0d5e..0da3a73a5 100644 --- a/exp/2026/05/20/inverse-face/data/43-transfer-activation-3152k-smas1-summary.json +++ b/exp/2026/05/20/inverse-face/data/43-transfer-activation-3152k-smas1-summary.json @@ -57,4 +57,4 @@ "forward/line_search_steps": 0, "forward/stagnation_count": 0, "time/forward_s": 6.646797652996611 -} \ No newline at end of file +} diff --git a/exp/2026/05/20/inverse-face/docs/40-transfer-activation-matrix.md b/exp/2026/05/20/inverse-face/docs/40-transfer-activation-matrix.md index 0aeca9e25..2a24f0793 100644 --- a/exp/2026/05/20/inverse-face/docs/40-transfer-activation-matrix.md +++ b/exp/2026/05/20/inverse-face/docs/40-transfer-activation-matrix.md @@ -29,7 +29,7 @@ The four concrete cases were: ## Results | case | cells | active tets | steps | target mean cm | target RMS cm | target max cm | all RMS cm | all max cm | forward s | -|---|---:|---:|---:|---:|---:|---:|---:|---:|---:| +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | 515k, SMAS 100 | 253876 | 58494 | 421 | 0.422151 | 0.475055 | 1.297573 | 0.368954 | 9.127733 | 3.825 | | 515k, SMAS 1 | 253876 | 58494 | 244 | 0.274502 | 0.318913 | 0.942866 | 0.243835 | 1.195187 | 3.633 | | 3152k, SMAS 100 | 1127541 | 283391 | 82 | 0.242941 | 0.309361 | 1.033624 | 0.200444 | 3.558038 | 4.520 | diff --git a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-a087-summary.json b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-a087-summary.json index 70a9d80fb..4d107a992 100644 --- a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-a087-summary.json +++ b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-a087-summary.json @@ -56,4 +56,4 @@ "IsLipBottom/target_rms": 0.3993310920970844, "IsLipBottom/target_max": 1.0284059764202034, "IsLipBottom/rms_ratio_to_target": 0.30975080437456287 -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-rerun-summary.json b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-rerun-summary.json index 2615451e4..f9105a622 100644 --- a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-rerun-summary.json +++ b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-rerun-summary.json @@ -57,4 +57,4 @@ "IsLipBottom/target_rms": 0.5516204314457805, "IsLipBottom/target_max": 1.2535219973603913, "IsLipBottom/rms_ratio_to_target": 0.27845097750790243 -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-summary.json b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-summary.json index a7ada2d13..2654f1d35 100644 --- a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-summary.json +++ b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-expr001-smas100-summary.json @@ -57,4 +57,4 @@ "IsLipBottom/target_rms": 0.5516204314457805, "IsLipBottom/target_max": 1.2535219973603913, "IsLipBottom/rms_ratio_to_target": 0.2790818390528039 -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-summary.json b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-summary.json index 15b3211b9..947ada679 100644 --- a/exp/2026/05/27/forward-face/data/20-forward-face-3152k-summary.json +++ b/exp/2026/05/27/forward-face/data/20-forward-face-3152k-summary.json @@ -56,4 +56,4 @@ "IsLipBottom/target_rms": 0.3993310920970844, "IsLipBottom/target_max": 1.0284059764202034, "IsLipBottom/rms_ratio_to_target": 0.3094006908630162 -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/20-forward-face-515k-nosmas-summary.json b/exp/2026/05/27/forward-face/data/20-forward-face-515k-nosmas-summary.json index d74e2fae6..3b99316af 100644 --- a/exp/2026/05/27/forward-face/data/20-forward-face-515k-nosmas-summary.json +++ b/exp/2026/05/27/forward-face/data/20-forward-face-515k-nosmas-summary.json @@ -57,4 +57,4 @@ "IsLipBottom/target_rms": 0.42244197929946425, "IsLipBottom/target_max": 1.016519397545366, "IsLipBottom/rms_ratio_to_target": 0.12364134545496203 -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-activation-only-summary.json b/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-activation-only-summary.json index bacf42bc0..56427115c 100644 --- a/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-activation-only-summary.json +++ b/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-activation-only-summary.json @@ -145,4 +145,4 @@ "activation_inv/error_rms": 2.3418743890439707e-07, "activation_inv/error_max_norm": 7.913257834049561e-07, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-diag-warm-state-summary.json b/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-diag-warm-state-summary.json index 76c91a9c3..c1145d9c3 100644 --- a/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-diag-warm-state-summary.json +++ b/exp/2026/05/27/forward-face/data/30-inverse-face-3152k-expr001-smas100-diag-warm-state-summary.json @@ -399,4 +399,4 @@ "activation_inv/error_rms": 0.0715948619403249, "activation_inv/error_max_norm": 0.17537109179907334, "passed": false -} \ No newline at end of file +} diff --git a/exp/2026/05/27/forward-face/data/30-inverse-face-515k-nosmas-summary.json b/exp/2026/05/27/forward-face/data/30-inverse-face-515k-nosmas-summary.json index 5efd622ac..a450b5688 100644 --- a/exp/2026/05/27/forward-face/data/30-inverse-face-515k-nosmas-summary.json +++ b/exp/2026/05/27/forward-face/data/30-inverse-face-515k-nosmas-summary.json @@ -4974,4 +4974,4 @@ "activation_inv/error_rms": 0.2491769718442089, "activation_inv/error_max_norm": 0.6141888156955176, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/05/27/inverse-face/data/20-inverse-face-3152k-summary.json b/exp/2026/05/27/inverse-face/data/20-inverse-face-3152k-summary.json index 1bf0ccd18..e94a2b936 100644 --- a/exp/2026/05/27/inverse-face/data/20-inverse-face-3152k-summary.json +++ b/exp/2026/05/27/inverse-face/data/20-inverse-face-3152k-summary.json @@ -8190,4 +8190,4 @@ "repeated/forward_failure": false, "repeated/adjoint_failure": false, "passed": true -} \ No newline at end of file +} diff --git a/exp/2026/06/10/human-face-inverse-activation/data/10-human-face-prepared-summary.json b/exp/2026/06/10/human-face-inverse-activation/data/10-human-face-prepared-summary.json index 1a404af82..c468a14bf 100644 --- a/exp/2026/06/10/human-face-inverse-activation/data/10-human-face-prepared-summary.json +++ b/exp/2026/06/10/human-face-inverse-activation/data/10-human-face-prepared-summary.json @@ -29,4 +29,4 @@ "volume/fat": 0.0017507733994702207, "volume/muscle": 0.00039386254501003594, "volume/total": 0.0021975124039796358 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-cont1-d2e8-summary.json b/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-cont1-d2e8-summary.json index 07729250b..fc245aad9 100644 --- a/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-cont1-d2e8-summary.json +++ b/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-cont1-d2e8-summary.json @@ -1323,4 +1323,4 @@ "volume/fat": 0.0017507733994702207, "volume/muscle": 0.00039386254501003594, "volume/total": 0.0021975124039796358 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-summary.json b/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-summary.json index 57392243d..05e9a1063 100644 --- a/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-summary.json +++ b/exp/2026/06/10/human-face-inverse-activation/data/20-human-face-smile-lr03-summary.json @@ -3008,4 +3008,4 @@ "volume/fat": 0.0017507733994702207, "volume/muscle": 0.00039386254501003594, "volume/total": 0.0021975124039796358 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/human-face-inverse-activation/data/20-inverse-summary.json b/exp/2026/06/10/human-face-inverse-activation/data/20-inverse-summary.json index a16d2ceef..3c7178439 100644 --- a/exp/2026/06/10/human-face-inverse-activation/data/20-inverse-summary.json +++ b/exp/2026/06/10/human-face-inverse-activation/data/20-inverse-summary.json @@ -1332,4 +1332,4 @@ "inverse/lr": 0.3, "inverse/max_steps": 80, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/10-meshes/lr001/summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/10-meshes/lr001/summary.json index 0ff07e2d4..95d8c8224 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/10-meshes/lr001/summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/10-meshes/lr001/summary.json @@ -43,4 +43,4 @@ "volume/fat": 0.13329921086861263, "volume/muscle": 0.0017756840189898041, "volume/total": 0.15316865449508538 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json index e9993d2e9..be5226bab 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json @@ -1656,4 +1656,4 @@ "volume/fat": 0.13329921086861263, "volume/muscle": 0.0017756840189898041, "volume/total": 0.15316865449508538 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/summary.json index 7eec5b5fb..a1466e0e7 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/20-squash-lr001/skin-prestrain5/summary.json @@ -1660,4 +1660,4 @@ "volume/total": 0.15316865449508538 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json index b03378896..716238333 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json @@ -1656,4 +1656,4 @@ "volume/fat": 0.13329921086861263, "volume/muscle": 0.0017756840189898041, "volume/total": 0.15316865449508538 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/summary.json index 9fcac7d58..c2921c8fa 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/21-squash-lr001/skin-prestrain5-lr1/summary.json @@ -1660,4 +1660,4 @@ "volume/total": 0.15316865449508538 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json index ed7641c5e..d7e6d642e 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain5-activation-per_tet-summary.json @@ -1656,4 +1656,4 @@ "volume/fat": 0.13329921086861263, "volume/muscle": 0.0017756840189898041, "volume/total": 0.15316865449508538 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/summary.json index 4dfcb1258..6b4877512 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/22-squash-lr001/skin-e005-prestrain5-lr02/summary.json @@ -1660,4 +1660,4 @@ "volume/total": 0.15316865449508538 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index 284e335b3..b8c41c592 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1656,4 +1656,4 @@ "volume/fat": 0.13329921086861263, "volume/muscle": 0.0017756840189898041, "volume/total": 0.15316865449508538 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/summary.json b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/summary.json index 8ed5053dd..9c13ffe91 100644 --- a/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/summary.json +++ b/exp/2026/06/10/unreachable-toy-parabolic-skin-tetwild/data/23-squash-lr001/skin-e020-prestrain10-lr02/summary.json @@ -1660,4 +1660,4 @@ "volume/total": 0.15316865449508538 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr0005/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr0005/summary.json index acf47e3fb..f8b32d9a3 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr0005/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr0005/summary.json @@ -26,4 +26,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr001/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr001/summary.json index 476b73173..5e4739a8c 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr001/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/10-meshes/lr001/summary.json @@ -26,4 +26,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/20-toy-tetwild-squash-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/20-toy-tetwild-squash-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json index b8ab3b13c..0c0df1b33 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/20-toy-tetwild-squash-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/20-toy-tetwild-squash-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -883,4 +883,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/summary.json index 3fd7d8832..6834cccf0 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/baseline/summary.json @@ -887,4 +887,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/20-toy-tetwild-squash-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/20-toy-tetwild-squash-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json index a8db97b5b..db6213d47 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/20-toy-tetwild-squash-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/20-toy-tetwild-squash-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json @@ -883,4 +883,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/summary.json index 812eb49dd..442f13e5c 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin-prestrain/summary.json @@ -887,4 +887,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/20-toy-tetwild-squash-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/20-toy-tetwild-squash-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json index 4e7f1a556..68e19222c 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/20-toy-tetwild-squash-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/20-toy-tetwild-squash-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json @@ -883,4 +883,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/summary.json index ab1212bbb..2d0a65a05 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/skin/summary.json @@ -887,4 +887,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/summary.json index 909650464..e69611436 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr0005/summary.json @@ -2673,4 +2673,4 @@ "mode": "squash", "observed/n_cases": 3, "observed/n_expected_cases": 3 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/20-toy-tetwild-squash-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/20-toy-tetwild-squash-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json index 4e6f6a747..5e2ecc03b 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/20-toy-tetwild-squash-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/20-toy-tetwild-squash-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -957,4 +957,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/summary.json index 381f77ea7..de7649283 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/baseline/summary.json @@ -961,4 +961,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index 1ae108cc9..5d65906fc 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -883,4 +883,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/summary.json index 3449c3882..0277f1bfb 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin-prestrain/summary.json @@ -887,4 +887,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/20-toy-tetwild-squash-lr001-l2-skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/20-toy-tetwild-squash-lr001-l2-skin-prestrain0-activation-per_tet-summary.json index e3d28be89..eec971a8d 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/20-toy-tetwild-squash-lr001-l2-skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/20-toy-tetwild-squash-lr001-l2-skin-prestrain0-activation-per_tet-summary.json @@ -957,4 +957,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/summary.json index 68f130c36..8fe9ea4bf 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/skin/summary.json @@ -961,4 +961,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/summary.json index 58c4b3118..8d2542291 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-squash-lr001/summary.json @@ -2821,4 +2821,4 @@ "mode": "squash", "observed/n_cases": 3, "observed/n_expected_cases": 3 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/20-toy-tetwild-stretch-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/20-toy-tetwild-stretch-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json index 96a32cce0..d8e066500 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/20-toy-tetwild-stretch-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/20-toy-tetwild-stretch-lr0005-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -2955,4 +2955,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/summary.json index a67e28a32..00f774864 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/baseline/summary.json @@ -2959,4 +2959,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json index aaa553c17..09044e6fe 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain10-activation-per_tet-summary.json @@ -3066,4 +3066,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/summary.json index ea16346b0..4544cef3f 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin-prestrain/summary.json @@ -3070,4 +3070,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json index 2e7dc3c1e..28e5a26f3 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/20-toy-tetwild-stretch-lr0005-l2-skin-prestrain0-activation-per_tet-summary.json @@ -2955,4 +2955,4 @@ "volume/fat": 0.0799493036484506, "volume/muscle": 0.002002171921340503, "volume/total": 0.09997023902706675 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/summary.json index bb1551497..f22231fc3 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/skin/summary.json @@ -2959,4 +2959,4 @@ "volume/total": 0.09997023902706675 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/summary.json index db9aef9d3..818f60a8c 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr0005/summary.json @@ -9000,4 +9000,4 @@ "mode": "stretch", "observed/n_cases": 3, "observed/n_expected_cases": 3 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/20-toy-tetwild-stretch-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/20-toy-tetwild-stretch-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json index 21e8b8e43..40a24cc05 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/20-toy-tetwild-stretch-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/20-toy-tetwild-stretch-lr001-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -1993,4 +1993,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/summary.json index 071d6d84d..c65c5832a 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/baseline/summary.json @@ -1997,4 +1997,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/20-toy-tetwild-stretch-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/20-toy-tetwild-stretch-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index e6bab765a..89abcb457 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/20-toy-tetwild-stretch-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/20-toy-tetwild-stretch-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -2030,4 +2030,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/summary.json index d03c74213..baa8013a9 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin-prestrain/summary.json @@ -2034,4 +2034,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/20-toy-tetwild-stretch-lr001-l2-skin-prestrain0-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/20-toy-tetwild-stretch-lr001-l2-skin-prestrain0-activation-per_tet-summary.json index 46b27ab6a..1efb9c3aa 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/20-toy-tetwild-stretch-lr001-l2-skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/20-toy-tetwild-stretch-lr001-l2-skin-prestrain0-activation-per_tet-summary.json @@ -2141,4 +2141,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/summary.json index b6c6adef3..120c32a23 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/skin/summary.json @@ -2145,4 +2145,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/summary.json index c586b8604..e07617d27 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/20-stretch-lr001/summary.json @@ -6188,4 +6188,4 @@ "mode": "stretch", "observed/n_cases": 3, "observed/n_expected_cases": 3 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index a9c2958a3..47fcb5fa8 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -4625,4 +4625,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/summary.json index 365a46e4b..d5dd3bc9b 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/21-squash-tuning-lr001/prestrain-lr1-steps120/summary.json @@ -4629,4 +4629,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index a5acd8814..9e06ead14 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1636,4 +1636,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/summary.json index 87c358be0..5222ff666 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e005_p02/summary.json @@ -1640,4 +1640,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index 15f05561f..e6e81ecad 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1636,4 +1636,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/summary.json index 1ef427733..0e2e34cda 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e010_p02/summary.json @@ -1640,4 +1640,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index 4eb2aded3..f846e0221 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1636,4 +1636,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/summary.json index e61e0462b..1ccc2d835 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p00/summary.json @@ -1640,4 +1640,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index d83947bc7..2c8fe4855 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1636,4 +1636,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/summary.json index 6386931e4..dee5a31c2 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p02/summary.json @@ -1640,4 +1640,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index aae0fcdcc..ab663e2e8 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -1636,4 +1636,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/summary.json index f33b337a0..38ff646c3 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/22-skin-param-sweep-lr001/e020_p05/summary.json @@ -1640,4 +1640,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json index a21344c9d..f9d099b2a 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/20-toy-tetwild-squash-lr001-l2-skin-prestrain10-activation-per_tet-summary.json @@ -4626,4 +4626,4 @@ "volume/fat": 0.0795857757649098, "volume/muscle": 0.0020367889498087207, "volume/total": 0.10000234115417504 -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/summary.json b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/summary.json index 4881733f7..822b8a9af 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/summary.json +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/data/23-skin-param-confirm-lr001/e020_p05_lr05/summary.json @@ -4630,4 +4630,4 @@ "volume/total": 0.10000234115417504 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/10/unreachable-toy-skin-tetwild/src/_toy_skin_tetwild.py b/exp/2026/06/10/unreachable-toy-skin-tetwild/src/_toy_skin_tetwild.py index 3b854f18c..06efbc6e5 100644 --- a/exp/2026/06/10/unreachable-toy-skin-tetwild/src/_toy_skin_tetwild.py +++ b/exp/2026/06/10/unreachable-toy-skin-tetwild/src/_toy_skin_tetwild.py @@ -213,7 +213,9 @@ def label_percent(value: float) -> str: def case_output_stem(case: ToyCase, cfg: InverseConfig) -> str: stem = case.stem if case.variant.skin_energy and case.variant.skin_prestrain: - stem = stem.replace("prestrain10", f"prestrain{label_percent(cfg.skin_prestrain)}") + stem = stem.replace( + "prestrain10", f"prestrain{label_percent(cfg.skin_prestrain)}" + ) return stem @@ -338,12 +340,16 @@ def mesh_geometry_kind(mesh: pv.DataSet) -> str: return field_string(mesh, GEOMETRY_KIND, "box") -def mesh_muscle_bounds(mesh: pv.DataSet) -> tuple[float, float, float, float, float, float]: +def mesh_muscle_bounds( + mesh: pv.DataSet, +) -> tuple[float, float, float, float, float, float]: if MUSCLE_BOUNDS_FIELD not in mesh.field_data: if mesh_geometry_kind(mesh) == "parabolic": return PARABOLIC_MUSCLE_BOUNDS return MUSCLE_BOUNDS - values = tuple(float(x) for x in np.asarray(mesh.field_data[MUSCLE_BOUNDS_FIELD]).ravel()) + values = tuple( + float(x) for x in np.asarray(mesh.field_data[MUSCLE_BOUNDS_FIELD]).ravel() + ) if len(values) != 6: msg = f"{MUSCLE_BOUNDS_FIELD} must contain 6 values, got {len(values)}" raise ValueError(msg) @@ -523,9 +529,7 @@ def make_tetwild_mesh( mesh.field_data[GEOMETRY_KIND] = np.asarray([geometry]) if geometry == "parabolic": mesh.field_data[MUSCLE_BOUNDS_FIELD] = np.asarray(PARABOLIC_MUSCLE_BOUNDS) - mesh.field_data[PARABOLIC_RIM_HEIGHT_FIELD] = np.asarray( - [parabolic_rim_height] - ) + mesh.field_data[PARABOLIC_RIM_HEIGHT_FIELD] = np.asarray([parabolic_rim_height]) mesh.field_data[PARABOLIC_REST_AMPLITUDE_FIELD] = np.asarray( [parabolic_rest_amplitude] ) @@ -1616,9 +1620,7 @@ def solve_case( # noqa: PLR0915 f"{stem}/loss": row["loss/total"], f"{stem}/data_loss": row["loss/data"], f"{stem}/laplacian_loss": row["loss/residual_laplacian"], - f"{stem}/activation_smooth_loss": row[ - "loss/activation_smooth" - ], + f"{stem}/activation_smooth_loss": row["loss/activation_smooth"], f"{stem}/error_rms": row["target/error_rms"], f"{stem}/error_max": row["target/error_max"], f"{stem}/activation_inv_rms": row["activation_inv/rms"], @@ -1850,7 +1852,9 @@ def write_table(path: Path, rows: list[dict[str, Any]]) -> None: format_float(row["best/error_rms_fraction_of_target"]), format_float(row["bumpiness/top_y_mean"]), format_float(row["bumpiness/top_y_std"]), - format_float(row.get("surface/top_area_target_over_rest", math.nan)), + format_float( + row.get("surface/top_area_target_over_rest", math.nan) + ), format_float( row.get("surface/top_area_deformed_over_rest", math.nan) ), diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/10-human-face-prepared-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/10-human-face-prepared-summary.json index c32ec52b3..20a67cda2 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/10-human-face-prepared-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/10-human-face-prepared-summary.json @@ -39,4 +39,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-no-skin-lr03-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-no-skin-lr03-summary.json index ca8d2f3e1..24b405865 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-no-skin-lr03-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-no-skin-lr03-summary.json @@ -3163,4 +3163,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-skin-pre0pct-lr03-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-skin-pre0pct-lr03-summary.json index 5264daa8f..6cc0a66b5 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-skin-pre0pct-lr03-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/20-human-face-smile-skin-pre0pct-lr03-summary.json @@ -859,4 +859,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/20-inverse-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/20-inverse-summary.json index 9e73d939b..9abdb0ced 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/20-inverse-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/20-inverse-summary.json @@ -4035,4 +4035,4 @@ "inverse/lr": 0.03, "note": "Combined from converged skin and no-skin case summaries; per-case inverse/max_steps fields are authoritative.", "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/30-lips-corners-down-volume-prestrain-rest-recovery-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/30-lips-corners-down-volume-prestrain-rest-recovery-summary.json index e905e2259..dce0f1418 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/30-lips-corners-down-volume-prestrain-rest-recovery-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/30-lips-corners-down-volume-prestrain-rest-recovery-summary.json @@ -148,4 +148,4 @@ "volume/stretch/min": 0.003117728317294988, "volume/stretch/rms": 1.0001621789314339, "volume/stretch_eigenvalues_clipped": 0 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/30-volume-prestrain-rest-recovery-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/30-volume-prestrain-rest-recovery-summary.json index 6de550099..531938434 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/30-volume-prestrain-rest-recovery-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/30-volume-prestrain-rest-recovery-summary.json @@ -105,4 +105,4 @@ "volume/stretch/min": 0.0031350666581729737, "volume/stretch/rms": 1.0013908295118106, "volume/stretch_eigenvalues_clipped": 0 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/31-uniform-5pct-isface-volume-prestrain-rest-recovery-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/31-uniform-5pct-isface-volume-prestrain-rest-recovery-summary.json index 6ef78f9b2..b8640ca61 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/31-uniform-5pct-isface-volume-prestrain-rest-recovery-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/31-uniform-5pct-isface-volume-prestrain-rest-recovery-summary.json @@ -155,4 +155,4 @@ "volume/stretch/min": 0.01717198636900026, "volume/stretch/rms": 1.005707476857779, "volume/stretch_eigenvalues_clipped": 0 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/32-uniform-5pct-isface-boundary-pullback-rest-recovery-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/32-uniform-5pct-isface-boundary-pullback-rest-recovery-summary.json index 2b0d2255a..8c5aa06f0 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/32-uniform-5pct-isface-boundary-pullback-rest-recovery-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/32-uniform-5pct-isface-boundary-pullback-rest-recovery-summary.json @@ -181,4 +181,4 @@ "volume/estimated_activation_inv/norm/rms": 2.665322599234553, "volume/estimation_mode": "boundary-pullback", "volume/implied_prestrain_source": "polar_stretch_of_boundary_pullback_deformation" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/35-expression-area-probe.json b/exp/2026/06/17/human-face-skin-prestrain/data/35-expression-area-probe.json index 3c75d7953..0699a6974 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/35-expression-area-probe.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/35-expression-area-probe.json @@ -919,4 +919,4 @@ "score": 1.3081459519902876 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/36-lips-corners-down-area-change-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/36-lips-corners-down-area-change-summary.json index 2b2df5bf2..96eb0b76c 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/36-lips-corners-down-area-change-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/36-lips-corners-down-area-change-summary.json @@ -20,4 +20,4 @@ "frac_abs_log_gt_2x": 0.0009699321047526673, "frac_stretch_gt_10pct": 0.0661226127964146, "frac_shrink_gt_10pct": 0.03959998662162614 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/37-lips-corners-down-skin-prestrain-forward-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/37-lips-corners-down-skin-prestrain-forward-summary.json index 74193d246..9ac0ce5d4 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/37-lips-corners-down-skin-prestrain-forward-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/37-lips-corners-down-skin-prestrain-forward-summary.json @@ -85,4 +85,4 @@ "target/loss_points": 15302, "target/name": "LipsCornersDown", "volume/prestrain": "zero" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/38-expression000-smile-area-change-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/38-expression000-smile-area-change-summary.json index 306f17b6f..f5d5d3b5e 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/38-expression000-smile-area-change-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/38-expression000-smile-area-change-summary.json @@ -105,4 +105,4 @@ "area_isface_frac_shrink_gt_10pct": 0.1279641459580588 } ] -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/39-smile-isface-area-prestrain-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/39-smile-isface-area-prestrain-summary.json index 189829e17..81c820e80 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/39-smile-isface-area-prestrain-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/39-smile-isface-area-prestrain-summary.json @@ -54,4 +54,4 @@ "mean": 0.04938135520810551, "rms": 0.08887072925055116 } -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/data/41-smile-shrink-volume-prestrain-rest-recovery-summary.json b/exp/2026/06/17/human-face-skin-prestrain/data/41-smile-shrink-volume-prestrain-rest-recovery-summary.json index a244fccf1..b43c979e6 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/data/41-smile-shrink-volume-prestrain-rest-recovery-summary.json +++ b/exp/2026/06/17/human-face-skin-prestrain/data/41-smile-shrink-volume-prestrain-rest-recovery-summary.json @@ -158,4 +158,4 @@ "volume/stretch/min": 0.03709357066459659, "volume/stretch/rms": 1.003418136784782, "volume/stretch_eigenvalues_clipped": 0 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-skin-prestrain/docs/30-lips-corners-down-volume-prestrain-rest-recovery.md b/exp/2026/06/17/human-face-skin-prestrain/docs/30-lips-corners-down-volume-prestrain-rest-recovery.md index 5155fd1a5..ffdf71478 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/docs/30-lips-corners-down-volume-prestrain-rest-recovery.md +++ b/exp/2026/06/17/human-face-skin-prestrain/docs/30-lips-corners-down-volume-prestrain-rest-recovery.md @@ -61,7 +61,7 @@ displacements plus `SkinActivationInvDiag`, `StressFreeAreaRatio`, Rest-shape displacement improved modestly: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | free displacement RMS | 2.5835e-4 | 2.2186e-4 | | surface displacement RMS | 3.0677e-4 | 2.6585e-4 | | target-mask displacement RMS | 4.3319e-4 | 3.8539e-4 | @@ -72,14 +72,14 @@ about 14% of the skin-only rest-shape drift. Surface area did not move much back toward the rest area: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | `IsFace` area ratio | 0.988566 | 0.989211 | | active prestrain triangle area ratio | 0.951060 | 0.952263 | Local tet quality worsened: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | inverted tets | 1 | 3 | | `detF < 0.5` tets | 25 | 47 | | min `detF` | -0.096376 | -0.568362 | diff --git a/exp/2026/06/17/human-face-skin-prestrain/docs/31-uniform-5pct-isface-volume-prestrain-rest-recovery.md b/exp/2026/06/17/human-face-skin-prestrain/docs/31-uniform-5pct-isface-volume-prestrain-rest-recovery.md index 09774f8d1..a7ec1104c 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/docs/31-uniform-5pct-isface-volume-prestrain-rest-recovery.md +++ b/exp/2026/06/17/human-face-skin-prestrain/docs/31-uniform-5pct-isface-volume-prestrain-rest-recovery.md @@ -50,14 +50,14 @@ The result VTU stores `SkinOnlyDisplacement`, `SkinOnlyPoint`, Forward convergence: | solve | steps | relative grad norm | -|---|---:|---:| +| --- | ---: | ---: | | skin only | 3814 | 4.980e-4 | | compensated | 1635 | 4.936e-4 | Rest-shape displacement improved, but only modestly: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | free displacement RMS | 1.3814e-3 | 1.2022e-3 | | surface displacement RMS | 1.5851e-3 | 1.3849e-3 | | target-mask displacement RMS | 2.4073e-3 | 2.1075e-3 | @@ -68,7 +68,7 @@ skin-only rest-shape drift. Surface area moves slightly back toward rest: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | all surface area ratio | 0.973699 | 0.976278 | | `IsFace` area ratio | 0.913890 | 0.922100 | | active prestrain area ratio | 0.913890 | 0.922100 | @@ -76,7 +76,7 @@ Surface area moves slightly back toward rest: Local tet quality worsened significantly: | metric | skin only | compensated | -|---|---:|---:| +| --- | ---: | ---: | | inverted tets | 1 | 29 | | `detF < 0.5` tets | 50 | 113 | | min `detF` | -0.141225 | -0.740954 | diff --git a/exp/2026/06/17/human-face-skin-prestrain/docs/32-uniform-5pct-isface-boundary-pullback-rest-recovery.md b/exp/2026/06/17/human-face-skin-prestrain/docs/32-uniform-5pct-isface-boundary-pullback-rest-recovery.md index 27d18e395..736c3b01a 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/docs/32-uniform-5pct-isface-boundary-pullback-rest-recovery.md +++ b/exp/2026/06/17/human-face-skin-prestrain/docs/32-uniform-5pct-isface-boundary-pullback-rest-recovery.md @@ -57,7 +57,7 @@ The result VTU stores `SkinOnlyPoint`, `BoundaryPullbackPoint`, Displacement improved more than the direct estimate, but the solve is not valid: | metric | skin only | boundary pullback | compensated | -|---|---:|---:|---:| +| --- | ---: | ---: | ---: | | non-skull free displacement RMS | 1.3814e-3 | 5.4838e-5 | 9.6780e-4 | | non-boundary interior RMS | 1.1661e-3 | 6.0689e-5 | 7.8507e-4 | | surface/boundary RMS | 1.5850e-3 | ~0 | 1.1681e-3 | @@ -67,7 +67,7 @@ Displacement improved more than the direct estimate, but the solve is not valid: Local tet quality is the blocker: | metric | skin only | boundary pullback | compensated | -|---|---:|---:|---:| +| --- | ---: | ---: | ---: | | inverted tets | 1 | 149 | 277 | | `detF < 0.5` tets | 50 | 458 | 947 | | min `detF` | -0.195268 | -20.717782 | -15.549032 | diff --git a/exp/2026/06/17/human-face-skin-prestrain/src/35-probe-expression-area-change.py b/exp/2026/06/17/human-face-skin-prestrain/src/35-probe-expression-area-change.py index 311a55d70..b8ac21b9e 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/src/35-probe-expression-area-change.py +++ b/exp/2026/06/17/human-face-skin-prestrain/src/35-probe-expression-area-change.py @@ -62,7 +62,11 @@ def expression_names(mesh: pv.UnstructuredGrid) -> list[str]: values = np.asarray(mesh.point_data[name]) if name in non_expr: continue - if values.ndim == 2 and values.shape[1] == 3 and np.issubdtype(values.dtype, np.floating): + if ( + values.ndim == 2 + and values.shape[1] == 3 + and np.issubdtype(values.dtype, np.floating) + ): names.append(name) return names @@ -102,7 +106,9 @@ def probe_expression( target_area = triangle_areas(np.asarray(surface.points) + surface_disp, faces) ratio = target_area[valid] / rest_area[valid] log_ratio = np.log(np.maximum(ratio, np.finfo(np.float64).tiny)) - area_quantiles = np.quantile(ratio, [0, 0.001, 0.01, 0.05, 0.5, 0.95, 0.99, 0.999, 1]) + area_quantiles = np.quantile( + ratio, [0, 0.001, 0.01, 0.05, 0.5, 0.95, 0.99, 0.999, 1] + ) is_face = np.asarray(mesh.point_data[IS_FACE], dtype=bool) point_mask = is_face & point_finite @@ -111,7 +117,9 @@ def probe_expression( "name": name, "jaw_filtered": jaw_like_expression(name), "n_isface_triangles": int(valid.sum()), - "disp_rms": float(np.linalg.norm(disp[point_mask]) / math.sqrt(max(1, int(point_mask.sum())))), + "disp_rms": float( + np.linalg.norm(disp[point_mask]) / math.sqrt(max(1, int(point_mask.sum()))) + ), "disp_mean": float(disp_norm.mean()), "disp_max": float(disp_norm.max()), "area_total_ratio": float(target_area[valid].sum() / rest_area[valid].sum()), @@ -273,7 +281,9 @@ def run_probe(cfg: ProbeConfig) -> dict[str, Any]: face_point_mask = np.asarray(mesh.point_data[IS_FACE], dtype=bool)[original_ids] valid_cells = np.all(face_point_mask[faces], axis=1) & (rest_area > 0.0) rows = [ - probe_expression(mesh, surface, faces, original_ids, rest_area, valid_cells, name) + probe_expression( + mesh, surface, faces, original_ids, rest_area, valid_cells, name + ) for name in expression_names(mesh) ] rows = sorted(rows, key=lambda row: (row["jaw_filtered"], row["score"])) diff --git a/exp/2026/06/17/human-face-skin-prestrain/src/37-forward-expression-skin-prestrain.py b/exp/2026/06/17/human-face-skin-prestrain/src/37-forward-expression-skin-prestrain.py index 66357086e..498f74c70 100644 --- a/exp/2026/06/17/human-face-skin-prestrain/src/37-forward-expression-skin-prestrain.py +++ b/exp/2026/06/17/human-face-skin-prestrain/src/37-forward-expression-skin-prestrain.py @@ -66,9 +66,7 @@ class ForwardSkinPrestrainConfig(cherries.BaseConfig): output_skin_inspect: Path = cherries.output( "37-lips-corners-down-skin-prestrain-inspect.vtp", mkdir=True ) - output_target: Path = cherries.output( - "37-lips-corners-down-target.vtu", mkdir=True - ) + output_target: Path = cherries.output("37-lips-corners-down-target.vtu", mkdir=True) target_expression: str = "LipsCornersDown" area_ratio_floor: float = 1.0e-6 @@ -117,7 +115,9 @@ def vector_stats( return stats(prefix, np.linalg.norm(np.asarray(values, dtype=np.float64), axis=1)) -def prepare_simulation_mesh(cfg: ForwardSkinPrestrainConfig) -> tuple[pv.UnstructuredGrid, dict[str, Any]]: +def prepare_simulation_mesh( + cfg: ForwardSkinPrestrainConfig, +) -> tuple[pv.UnstructuredGrid, dict[str, Any]]: mesh = pv.read(cfg.input_mesh) if not isinstance(mesh, pv.UnstructuredGrid): mesh = mesh.cast_to_unstructured_grid() @@ -152,16 +152,20 @@ def target_displacement( msg = f"{expression!r} selected no finite IsFace target points" raise ValueError(msg) target_norm = np.linalg.norm(target[loss_mask], axis=1) - return target, loss_mask, { - "target/name": expression, - "target/loss_points": int(loss_mask.sum()), - "target/fixed_overlap_points": int((loss_mask & fixed).sum()), - "target/displacement_rms": float( - np.linalg.norm(target[loss_mask]) / math.sqrt(int(loss_mask.sum())) - ), - "target/displacement_mean": float(target_norm.mean()), - "target/displacement_max": float(target_norm.max()), - } + return ( + target, + loss_mask, + { + "target/name": expression, + "target/loss_points": int(loss_mask.sum()), + "target/fixed_overlap_points": int((loss_mask & fixed).sum()), + "target/displacement_rms": float( + np.linalg.norm(target[loss_mask]) / math.sqrt(int(loss_mask.sum())) + ), + "target/displacement_mean": float(target_norm.mean()), + "target/displacement_max": float(target_norm.max()), + }, + ) def make_area_skin( @@ -187,7 +191,9 @@ def make_area_skin( target_area = triangle_areas(target_points, faces) valid_rest_area = rest_area > 0.0 area_ratio = np.ones_like(rest_area) - area_ratio[valid_rest_area] = target_area[valid_rest_area] / rest_area[valid_rest_area] + area_ratio[valid_rest_area] = ( + target_area[valid_rest_area] / rest_area[valid_rest_area] + ) stretched_face_cells = face_cells & (area_ratio > 1.0) effective_area_ratio = np.ones_like(area_ratio) @@ -276,7 +282,9 @@ def make_forward( fraction=np.asarray(mesh.cell_data[MUSCLE_FRACTION], dtype=np.float64), ) builder.add_potential(StableNeoHookeanActive.from_pyvista(mesh, name="muscle")) - builder.add_potential(Koiter.from_pyvista(skin, name="skin", thickness=SKIN_THICKNESS)) + builder.add_potential( + Koiter.from_pyvista(skin, name="skin", thickness=SKIN_THICKNESS) + ) forward = Forward(builder.finalize()) forward.optimizer = forward.default_optimizer( @@ -305,7 +313,9 @@ def run_skin_only_forward( return to_numpy(forward.state.u), forward_solution_metrics(solution) -def deformation_det(points: np.ndarray, displacement: np.ndarray, tets: np.ndarray) -> np.ndarray: +def deformation_det( + points: np.ndarray, displacement: np.ndarray, tets: np.ndarray +) -> np.ndarray: X = points[tets] x = X + displacement[tets] Dm = np.stack((X[:, 1] - X[:, 0], X[:, 2] - X[:, 0], X[:, 3] - X[:, 0]), axis=2) @@ -339,7 +349,9 @@ def write_outputs( target_mesh.point_data["TargetPoint"] = target_mesh.points + target skin_inspect = skin.copy(deep=True) - surface_ids = np.asarray(skin_inspect.point_data[GLOBAL_POINT_ID.vtk], dtype=np.int64) + surface_ids = np.asarray( + skin_inspect.point_data[GLOBAL_POINT_ID.vtk], dtype=np.int64 + ) skin_inspect.point_data["TargetDisplacement"] = target[surface_ids] skin_inspect.point_data["TargetPoint"] = skin_inspect.points + target[surface_ids] skin_inspect.point_data["SkinPrestrainDisplacement"] = displacement[surface_ids] @@ -384,7 +396,9 @@ def run_forward_skin_prestrain(cfg: ForwardSkinPrestrainConfig) -> dict[str, Any target, loss_mask, target_metrics = target_displacement(mesh, cfg.target_expression) skin, skin_metrics = make_area_skin(mesh, target, cfg) - logger.info("Running skin-prestrain-only forward solve for %s", cfg.target_expression) + logger.info( + "Running skin-prestrain-only forward solve for %s", cfg.target_expression + ) displacement, forward_metrics = run_skin_only_forward(mesh, skin, cfg) fixed = np.asarray(mesh.point_data[IS_FIXED], dtype=bool) diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/10-human-face-prepared-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/10-human-face-prepared-summary.json index cebf84290..ed48da3e6 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/10-human-face-prepared-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/10-human-face-prepared-summary.json @@ -82,4 +82,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/15-estimated-skin-prestrain-forward-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/15-estimated-skin-prestrain-forward-summary.json index 48662bc52..47952c56d 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/15-estimated-skin-prestrain-forward-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/15-estimated-skin-prestrain-forward-summary.json @@ -58,4 +58,4 @@ "target/loss_mask/mean": 0.003748274294930983, "target/loss_mask/rms": 0.005310139062299789, "target/loss_points": 15302 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/16-estimated-plus-tightening-forward-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/16-estimated-plus-tightening-forward-summary.json index 889fd6010..bdc6f9d75 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/16-estimated-plus-tightening-forward-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/16-estimated-plus-tightening-forward-summary.json @@ -58,4 +58,4 @@ "target/loss_mask/mean": 0.003748274294930983, "target/loss_mask/rms": 0.005310139062299789, "target/loss_points": 15302 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-baseline-inverse-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-baseline-inverse-summary.json index 835d030fe..1c9bcaa0c 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-baseline-inverse-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-baseline-inverse-summary.json @@ -381,4 +381,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 1, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-lr1-inverse-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-lr1-inverse-summary.json index 65828e056..4bcb3bdd5 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-lr1-inverse-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-lr1-inverse-summary.json @@ -249,4 +249,4 @@ "inverse/max_steps": 1, "segment_steps": 1, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-mm2-inverse-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-mm2-inverse-summary.json index 7cc39fc07..167cec2c9 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-mm2-inverse-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-mm2-inverse-summary.json @@ -291,4 +291,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 1, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-scaled-inverse-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-scaled-inverse-summary.json index 72681cbf0..17c02d23f 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-scaled-inverse-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/19-smoke-scaled-inverse-summary.json @@ -259,4 +259,4 @@ "loss/scale": 1000000.0, "segment_steps": 1, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-baseline-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-baseline-summary.json index d4a071e8a..d2485303e 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-baseline-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-baseline-summary.json @@ -367,4 +367,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-lr1-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-lr1-summary.json index 9db35543d..8a8f82c39 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-lr1-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-lr1-summary.json @@ -238,4 +238,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-mm2-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-mm2-summary.json index 2a974dd33..159582af1 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-mm2-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-mm2-summary.json @@ -278,4 +278,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-scaled-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-scaled-summary.json index a48cd5385..55499f17e 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-scaled-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-smoke-scaled-summary.json @@ -247,4 +247,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-summary.json index 34f41073d..9f5a535ff 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr1-summary.json @@ -12261,4 +12261,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr3-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr3-summary.json index 6d039cc26..e75b91bfd 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr3-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-no-skin-lr3-summary.json @@ -11681,4 +11681,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr1-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr1-summary.json index d3d8c2c7f..288e898c9 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr1-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr1-summary.json @@ -11701,4 +11701,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr2-cont-lr02-warm-from-best-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr2-cont-lr02-warm-from-best-summary.json index d36c3e6ef..1bc3d48e7 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr2-cont-lr02-warm-from-best-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-estimated-plus-tightening-lr2-cont-lr02-warm-from-best-summary.json @@ -3195,4 +3195,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr1-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr1-summary.json index baa714ebe..93f30e5b9 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr1-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr1-summary.json @@ -11701,4 +11701,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr3-cont-lr03-from-best-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr3-cont-lr03-from-best-summary.json index a43c8241e..0a0712996 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr3-cont-lr03-from-best-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-human-face-smile-skin-no-prestrain-lr3-cont-lr03-from-best-summary.json @@ -5261,4 +5261,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-inverse-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-inverse-summary.json index 5ea433b8d..15a725f80 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-inverse-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/20-inverse-summary.json @@ -35683,4 +35683,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 8, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-no-prestrain-cont-lr03-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-no-prestrain-cont-lr03-summary.json index c68da4fe0..4f28164f6 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-no-prestrain-cont-lr03-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-no-prestrain-cont-lr03-summary.json @@ -5275,4 +5275,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 8, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-plus-tightening-cont-lr02-warm-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-plus-tightening-cont-lr02-warm-summary.json index 87d47741f..f9e6c1d0f 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-plus-tightening-cont-lr02-warm-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/21-skin-plus-tightening-cont-lr02-warm-summary.json @@ -3209,4 +3209,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 8, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/17/human-face-smile-prestrain-v2/data/22-no-skin-lr03-summary.json b/exp/2026/06/17/human-face-smile-prestrain-v2/data/22-no-skin-lr03-summary.json index 893e46028..3221f294a 100644 --- a/exp/2026/06/17/human-face-smile-prestrain-v2/data/22-no-skin-lr03-summary.json +++ b/exp/2026/06/17/human-face-smile-prestrain-v2/data/22-no-skin-lr03-summary.json @@ -11695,4 +11695,4 @@ "optimizer/adam_eps": 0.01, "segment_steps": 8, "target/requested": "smile" -} \ No newline at end of file +} diff --git a/exp/2026/06/23/head-face-relative-area-change/data/10-face-relative-area-change-summary.json b/exp/2026/06/23/head-face-relative-area-change/data/10-face-relative-area-change-summary.json index 97e78e75f..1369fa99c 100644 --- a/exp/2026/06/23/head-face-relative-area-change/data/10-face-relative-area-change-summary.json +++ b/exp/2026/06/23/head-face-relative-area-change/data/10-face-relative-area-change-summary.json @@ -81,4 +81,4 @@ "summary": "/home/liblaf/github/liblaf/apple/exp/2026/06/23/head-face-relative-area-change/data/10-face-relative-area-change-summary.json", "expression_table": "/home/liblaf/github/liblaf/apple/exp/2026/06/23/head-face-relative-area-change/data/10-expression-area-change-summary.csv" } -} \ No newline at end of file +} diff --git a/exp/2026/06/23/head-face-relative-area-change/src/10-compute-face-relative-area-change.py b/exp/2026/06/23/head-face-relative-area-change/src/10-compute-face-relative-area-change.py index 3f8256dcb..82cb76f6f 100644 --- a/exp/2026/06/23/head-face-relative-area-change/src/10-compute-face-relative-area-change.py +++ b/exp/2026/06/23/head-face-relative-area-change/src/10-compute-face-relative-area-change.py @@ -50,9 +50,7 @@ def expression_names(mesh: pv.UnstructuredGrid) -> list[str]: array = np.asarray(values) if name in ignored: continue - if array.shape == (mesh.n_points, 3) and np.issubdtype( - array.dtype, np.number - ): + if array.shape == (mesh.n_points, 3) and np.issubdtype(array.dtype, np.number): names.append(name) return names diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/current/prepare-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/current/prepare-summary.json index 64bfa2534..a3d9777e2 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/current/prepare-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/current/prepare-summary.json @@ -42,4 +42,4 @@ "volume/fat": 0.13316596665291325, "volume/muscle": 0.0017931932518405207, "volume/total": 0.1531418427466466 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thick/prepare-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thick/prepare-summary.json index 5cd12891d..62f409e45 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thick/prepare-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thick/prepare-summary.json @@ -42,4 +42,4 @@ "volume/fat": 0.17305135476577205, "volume/muscle": 0.001803698312701696, "volume/total": 0.19313104758023508 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thin/prepare-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thin/prepare-summary.json index 9deb5f21c..fd9628ffa 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thin/prepare-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/10-meshes/thin/prepare-summary.json @@ -42,4 +42,4 @@ "volume/fat": 0.10320851060656903, "volume/muscle": 0.001780259532888751, "volume/total": 0.12313761124291259 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json b/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json index 74bf85b0d..80310ebc8 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json @@ -143,4 +143,4 @@ "parabolic_target_amplitude": 0.02, "schema_version": 1, "tetwild_lr": 0.02 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward-manifest.json b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward-manifest.json index 3a6d2fa73..952368a33 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward-manifest.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward-manifest.json @@ -291,4 +291,4 @@ "skin_prestrain_enabled": false, "skin_thickness": 0.005, "source_manifest": "/home/liblaf/Projects/liblaf/apple/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json" -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/current/forward-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/current/forward-summary.json index a67325480..703af5189 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/current/forward-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/current/forward-summary.json @@ -86,4 +86,4 @@ "volume/fat": 0.13316596665291325, "volume/muscle": 0.0017931932518405207, "volume/total": 0.1531418427466466 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thick/forward-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thick/forward-summary.json index 5b2b5f2b0..ba1cc8afc 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thick/forward-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thick/forward-summary.json @@ -86,4 +86,4 @@ "volume/fat": 0.17305135476577205, "volume/muscle": 0.001803698312701696, "volume/total": 0.19313104758023508 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thin/forward-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thin/forward-summary.json index 5db3752f3..62e702ab4 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thin/forward-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward/no-skin/thin/forward-summary.json @@ -86,4 +86,4 @@ "volume/fat": 0.10320851060656903, "volume/muscle": 0.001780259532888751, "volume/total": 0.12313761124291259 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/30-cross-grid-metrics.json b/exp/2026/08/17/fat-thickness-bumpiness/data/30-cross-grid-metrics.json index c9d62038f..3540da5e4 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/30-cross-grid-metrics.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/30-cross-grid-metrics.json @@ -148,4 +148,4 @@ "laplacian_smoothing_length": 0.04, "schema_version": 1, "source_manifest": "/home/liblaf/Projects/liblaf/apple/exp/2026/08/17/fat-thickness-bumpiness/data/20-forward-manifest.json" -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse-manifest.json b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse-manifest.json index 7830ef772..973967aa3 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse-manifest.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse-manifest.json @@ -22526,4 +22526,4 @@ "schema_version": 1, "setup": "no-skin-l2-per-tet-6dof", "source_manifest": "/home/liblaf/Projects/liblaf/apple/exp/2026/08/17/fat-thickness-bumpiness/data/10-prepare-manifest.json" -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/current/20-toy-tetwild-squash-current-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/current/20-toy-tetwild-squash-current-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json index b34642a92..fc280691a 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/current/20-toy-tetwild-squash-current-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/current/20-toy-tetwild-squash-current-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -7778,4 +7778,4 @@ "volume/fat": 0.13316596665291325, "volume/muscle": 0.0017931932518405207, "volume/total": 0.1531418427466466 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thick/20-toy-tetwild-squash-thick-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thick/20-toy-tetwild-squash-thick-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json index fe190d0de..c25590d31 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thick/20-toy-tetwild-squash-thick-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thick/20-toy-tetwild-squash-thick-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -7778,4 +7778,4 @@ "volume/fat": 0.17305135476577205, "volume/muscle": 0.001803698312701696, "volume/total": 0.19313104758023508 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thin/20-toy-tetwild-squash-thin-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thin/20-toy-tetwild-squash-thin-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json index c2ee86880..192bd4a40 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thin/20-toy-tetwild-squash-thin-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/40-inverse/no-skin/thin/20-toy-tetwild-squash-thin-lr002-l2-no_skin-prestrain0-activation-per_tet-summary.json @@ -6904,4 +6904,4 @@ "volume/fat": 0.10320851060656903, "volume/muscle": 0.001780259532888751, "volume/total": 0.12313761124291259 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/fat-thickness-bumpiness/data/50-matched-fidelity.json b/exp/2026/08/17/fat-thickness-bumpiness/data/50-matched-fidelity.json index 394cbb07e..94c2112c9 100644 --- a/exp/2026/08/17/fat-thickness-bumpiness/data/50-matched-fidelity.json +++ b/exp/2026/08/17/fat-thickness-bumpiness/data/50-matched-fidelity.json @@ -5196,4 +5196,4 @@ ], "skin_energy_enabled": false } -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/10-material-candidates-manifest.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/10-material-candidates-manifest.json index c5c8ee522..b4102fd13 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/10-material-candidates-manifest.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/10-material-candidates-manifest.json @@ -1809,4 +1809,4 @@ }, "target": "Smile", "validation_errors": [] -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-no-skin-lr3-material-no-skin-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-no-skin-lr3-material-no-skin-screen-summary.json index f2ea6873f..3a2be0087 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-no-skin-lr3-material-no-skin-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-no-skin-lr3-material-no-skin-screen-summary.json @@ -2570,4 +2570,4 @@ "volume/fat": 0.000637223793072601, "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p050-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p050-screen-summary.json index b927b551e..d08952ca3 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p050-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p050-screen-summary.json @@ -2752,4 +2752,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 0.25 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p100-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p100-screen-summary.json index a3a28b440..8da0a5cab 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p100-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e025-p100-screen-summary.json @@ -2752,4 +2752,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 0.25 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p050-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p050-screen-summary.json index 4b2f5db16..e668286f1 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p050-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p050-screen-summary.json @@ -2751,4 +2751,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p100-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p100-screen-summary.json index e0ddd855f..1b45cbc0d 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p100-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-estimated-prestrain-lr3-material-e100-p100-screen-summary.json @@ -2751,4 +2751,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e025-p000-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e025-p000-screen-summary.json index 4fe3ac134..b7720a5b9 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e025-p000-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e025-p000-screen-summary.json @@ -2752,4 +2752,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 0.25 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e100-p000-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e100-p000-screen-summary.json index 7aba884d9..e5472ea6a 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e100-p000-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-human-face-smile-skin-no-prestrain-lr3-material-e100-p000-screen-summary.json @@ -2751,4 +2751,4 @@ "volume/muscle": 0.0001266301205135478, "volume/total": 0.0007871493525589547, "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-material-screen-summary.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-material-screen-summary.json index eca6fc174..5f5af279b 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-material-screen-summary.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/20-material-screen-summary.json @@ -19128,4 +19128,4 @@ "plot_backend": "Agg", "schema_version": 2, "stage": "screen" -} \ No newline at end of file +} diff --git a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/30-material-screen-analysis.json b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/30-material-screen-analysis.json index 9cf1c8f36..7440740df 100644 --- a/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/30-material-screen-analysis.json +++ b/exp/2026/08/17/human-face-smile-material-heuristic-sweep/data/30-material-screen-analysis.json @@ -16309,4 +16309,4 @@ "stage": "screen", "total_temporal_frames": 287 } -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/10-exaggerated-materials-manifest.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/10-exaggerated-materials-manifest.json index b7297c331..8b28537c3 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/10-exaggerated-materials-manifest.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/10-exaggerated-materials-manifest.json @@ -281,4 +281,4 @@ "nonmanifold_eligible_edges": 0 }, "validation_errors": [] -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-exaggerated-material-screen-summary.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-exaggerated-material-screen-summary.json index 0f2c00397..47a892047 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-exaggerated-material-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-exaggerated-material-screen-summary.json @@ -7794,4 +7794,4 @@ "plot_backend": "Agg", "schema_version": 1, "stage": "screen" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e005-p200-screen-summary.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e005-p200-screen-summary.json index 1a6243386..4d14817dd 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e005-p200-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e005-p200-screen-summary.json @@ -2586,4 +2586,4 @@ "ActivationInv max edge jump 0.0930423 exceeds legacy threshold 0.08; recorded as warning only" ], "young_min_scale": 0.05 -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e100-p200-screen-summary.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e100-p200-screen-summary.json index a082b3925..9caef4d30 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e100-p200-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-estimated-prestrain-lr3-exaggerated-e100-p200-screen-summary.json @@ -2586,4 +2586,4 @@ "ActivationInv max edge jump 0.0930423 exceeds legacy threshold 0.08; recorded as warning only" ], "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-no-prestrain-lr3-exaggerated-e005-p000-screen-summary.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-no-prestrain-lr3-exaggerated-e005-p000-screen-summary.json index c151b401f..0d03bfaa8 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-no-prestrain-lr3-exaggerated-e005-p000-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/20-human-face-smile-skin-no-prestrain-lr3-exaggerated-e005-p000-screen-summary.json @@ -2584,4 +2584,4 @@ "warning/skin_folded_triangles": 58, "warnings": [], "young_min_scale": 0.05 -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/30-exaggerated-material-screen-analysis.json b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/30-exaggerated-material-screen-analysis.json index d6fef719f..070c9c95d 100644 --- a/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/30-exaggerated-material-screen-analysis.json +++ b/exp/2026/08/18/human-face-smile-exaggerated-material-screen/data/30-exaggerated-material-screen-analysis.json @@ -6610,4 +6610,4 @@ } ] } -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/10-corrected-baseline-manifest.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/10-corrected-baseline-manifest.json index c296b6ced..51140ea2c 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/10-corrected-baseline-manifest.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/10-corrected-baseline-manifest.json @@ -189,4 +189,4 @@ "purpose": "establish one corrected homogeneous p000 baseline before any prestrain or heterogeneous-E inverse experiment", "schema_version": 3, "validation_errors": [] -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe-summary.json index eb089d888..d0b29e57d 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe-summary.json @@ -2030,4 +2030,4 @@ "required_follow_up": "run a separately reviewed static matched-view analyzer before approving an inverse; this entrypoint does not silently import the inverse-screen analyzer or claim visual acceptance", "status": "pending" } -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/old/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/old/forward-summary.json index a742ba8f6..f08ca72c7 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/old/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/old/forward-summary.json @@ -142,4 +142,4 @@ "warning/isface_folded_triangle_fraction": 0.0, "warning/isface_folded_triangles": 0, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/zero/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/zero/forward-summary.json index dbe5d9321..7e1afc132 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/zero/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-3d-replay/zero/forward-summary.json @@ -142,4 +142,4 @@ "warning/isface_folded_triangle_fraction": 0.0, "warning/isface_folded_triangles": 0, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/old/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/old/forward-summary.json index 90cc3ff16..bdc6df78f 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/old/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/old/forward-summary.json @@ -142,4 +142,4 @@ "warning/isface_folded_triangle_fraction": 6.68918692932874e-05, "warning/isface_folded_triangles": 2, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/zero/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/zero/forward-summary.json index 3fc104601..352e3950b 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/zero/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/full-plane-stress/zero/forward-summary.json @@ -142,4 +142,4 @@ "warning/isface_folded_triangle_fraction": 0.0, "warning/isface_folded_triangles": 0, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/old/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/old/forward-summary.json index e8fd3da2e..4ca5d24e5 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/old/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/old/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 0.0001003378039399311, "warning/isface_folded_triangles": 3, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/zero/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/zero/forward-summary.json index f77409f85..baea78a00 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/zero/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-3d/zero/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 0.0, "warning/isface_folded_triangles": 0, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/old/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/old/forward-summary.json index fbe192cee..1f36cc0bf 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/old/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/old/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 0.0001337837385865748, "warning/isface_folded_triangles": 4, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/zero/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/zero/forward-summary.json index e79d0948b..390449d76 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/zero/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress-cut-fixed/zero/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 0.0, "warning/isface_folded_triangles": 0, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/old/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/old/forward-summary.json index 5baf54624..46326b9ea 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/old/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/old/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 0.0001003378039399311, "warning/isface_folded_triangles": 3, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/zero/forward-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/zero/forward-summary.json index 8a5a75bc8..4cf13af5d 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/zero/forward-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/15-forward-domain-conversion-probe/isface-plane-stress/zero/forward-summary.json @@ -123,4 +123,4 @@ "warning/isface_folded_triangle_fraction": 3.34459346466437e-05, "warning/isface_folded_triangles": 1, "warning/policy": "visual-review-only; small inversions/folds are not a veto" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/16-forward-domain-conversion-analysis.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/16-forward-domain-conversion-analysis.json index 592f944ae..2b2938fa7 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/16-forward-domain-conversion-analysis.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/16-forward-domain-conversion-analysis.json @@ -644,4 +644,4 @@ "status": "pending" }, "warning_policy": "inverted tetrahedra and folded IsFace triangles are recorded and rendered, but small visually imperceptible counts are not vetoes" -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary-final.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary-final.json index 8b2b42dbc..81a70a445 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary-final.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary-final.json @@ -2889,4 +2889,4 @@ "policy": "small inverted tetrahedra and folded skin triangles are warning-only; acceptance depends on matched visual views", "status": "pending" } -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary.json index 8b2b42dbc..81a70a445 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-corrected-baseline-screen-summary.json @@ -2889,4 +2889,4 @@ "policy": "small inverted tetrahedra and folded skin triangles are warning-only; acceptance depends on matched visual views", "status": "pending" } -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary-final.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary-final.json index e197744ca..f950eb43b 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary-final.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary-final.json @@ -2676,4 +2676,4 @@ "warning/skin_folded_triangle_fraction": 0.0008361483661660926, "warning/skin_folded_triangles": 25, "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary.json index e197744ca..f950eb43b 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/20-human-face-smile-skin-no-prestrain-lr3-corrected-isface-e0200-p000-screen-summary.json @@ -2676,4 +2676,4 @@ "warning/skin_folded_triangle_fraction": 0.0008361483661660926, "warning/skin_folded_triangles": 25, "young_min_scale": 1.0 -} \ No newline at end of file +} diff --git a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/30-corrected-baseline-analysis.json b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/30-corrected-baseline-analysis.json index 49fd4f31c..c9ec0416c 100644 --- a/exp/2026/08/18/human-face-smile-plane-stress-skin/data/30-corrected-baseline-analysis.json +++ b/exp/2026/08/18/human-face-smile-plane-stress-skin/data/30-corrected-baseline-analysis.json @@ -6839,4 +6839,4 @@ "required_action": "review terminal and matched front, 30 degree, mouth, and eye-cheek views before discussing any further inverse", "status": "pending" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md index bcf368761..36947516c 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md @@ -1,4 +1,4 @@ | Case | E mode | Prestrain | Generated | Skin | -|---|---|---|---:|---| +| --- | --- | --- | ---: | --- | | HFP1 | selective-efat003-where-raw-r-gt-1 | c020-raw-area-ratio-floor-050 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases/skin-hfp1-selective-efat-c020.vtp` | | HFP0 | selective-efat003-where-raw-r-gt-1 | p000 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases/skin-hfp0-selective-efat-p000.vtp` | diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2-table.md b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2-table.md index e9f10a788..64afb465f 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2-table.md +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2-table.md @@ -1,4 +1,4 @@ | Case | E mode | Prestrain | Generated | Skin | -|---|---|---|---:|---| +| --- | --- | --- | ---: | --- | | HFP1 | selective-efat003-where-raw-r-gt-1 | c020-raw-area-ratio-floor-050 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2/skin-hfp1-selective-efat-c020.vtp` | | HFP0 | selective-efat003-where-raw-r-gt-1 | p000 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/10-prepared-material-cases-v2/skin-hfp0-selective-efat-p000.vtp` | diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary-final.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary-final.json index fa6b2e6f6..d5b4e078c 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary-final.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary-final.json @@ -5815,4 +5815,4 @@ "status": "pending", "tool": "ParaView" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary.json index fa6b2e6f6..d5b4e078c 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-fat-floor-skin-prestrain-inverse-summary.json @@ -5815,4 +5815,4 @@ "status": "pending", "tool": "ParaView" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary-final.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary-final.json index bfa92afdb..e88086c25 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary-final.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary-final.json @@ -2617,4 +2617,4 @@ "warning/skin_area_ratio_q999": 1.862169683229793, "warning/skin_folded_triangle_fraction": 0.0009364861701060236, "warning/skin_folded_triangles": 28 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary.json index bfa92afdb..e88086c25 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp0-summary.json @@ -2617,4 +2617,4 @@ "warning/skin_area_ratio_q999": 1.862169683229793, "warning/skin_folded_triangle_fraction": 0.0009364861701060236, "warning/skin_folded_triangles": 28 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary-final.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary-final.json index 928f8840f..2de139844 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary-final.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary-final.json @@ -2617,4 +2617,4 @@ "warning/skin_area_ratio_q999": 1.8722892490421597, "warning/skin_folded_triangle_fraction": 0.000334459346466437, "warning/skin_folded_triangles": 10 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary.json b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary.json index 928f8840f..2de139844 100644 --- a/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary.json +++ b/exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data/20-hfp1-summary.json @@ -2617,4 +2617,4 @@ "warning/skin_area_ratio_q999": 1.8722892490421597, "warning/skin_folded_triangle_fraction": 0.000334459346466437, "warning/skin_folded_triangles": 10 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay-summary.json index 3e4a1b200..eb5a4258e 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay-summary.json @@ -972,4 +972,4 @@ ] }, "schema_version": 1 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-000/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-000/forward-summary.json index b03e30d27..6c2395b6f 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-000/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-000/forward-summary.json @@ -106,4 +106,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-025/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-025/forward-summary.json index cf2a92eaa..236804a1f 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-025/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-025/forward-summary.json @@ -96,4 +96,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-050/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-050/forward-summary.json index 32f7538bb..0df154ff0 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-050/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-050/forward-summary.json @@ -96,4 +96,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-075/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-075/forward-summary.json index 974754b05..b2639f825 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-075/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-075/forward-summary.json @@ -96,4 +96,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-100/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-100/forward-summary.json index c961fff07..ccda54055 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-100/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/continuation/alpha-100/forward-summary.json @@ -96,4 +96,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/direct/alpha-100/forward-summary.json b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/direct/alpha-100/forward-summary.json index f27f7f3bd..bd41f8bba 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/direct/alpha-100/forward-summary.json +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/data/10-fixed-activation-prestrain-replay/c020/direct/alpha-100/forward-summary.json @@ -96,4 +96,4 @@ "target/loss_points": 15302, "validation/errors": [], "validation/ok": true -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/docs/10-fixed-activation-prestrain-replay-plan.md b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/docs/10-fixed-activation-prestrain-replay-plan.md index 676a03899..c30be0c4e 100644 --- a/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/docs/10-fixed-activation-prestrain-replay-plan.md +++ b/exp/2026/08/19/human-face-smile-fixed-activation-prestrain-replay/docs/10-fixed-activation-prestrain-replay-plan.md @@ -2,12 +2,12 @@ ## Status -The producer is implemented but **has not been executed**. A source-level +The producer is implemented but **has not been executed**. A source-level `EXECUTION_APPROVED_AFTER_STATIC_REVIEW = False` gate stops the program before -input reads or CUDA/Warp initialization. Clearing that gate requires a separate +input reads or CUDA/Warp initialization. Clearing that gate requires a separate review decision after both the producer and analyzer have been inspected. -This is a cheap forward-only causal replay. It contains no inverse optimization, +This is a cheap forward-only causal replay. It contains no inverse optimization, adjoint solve, backward pass, or muscle-activation update. ## Question @@ -34,7 +34,7 @@ of target fidelity? `f8ca27d820ff1f4b7afb734d917c9ec1292cd26ab96fc93090277dcc017268fb`. The result and 41-frame history have already been independently checked to have -bit-identical step-40 displacement and muscle activation. The producer repeats +bit-identical step-40 displacement and muscle activation. The producer repeats the result-side validation before any runtime initialization. ## Material and boundary contract @@ -63,7 +63,7 @@ rho_full = 0.98^2 * clip(R, 0.5, 1) ``` Thus `c020` means 2% **linear** uniform tightening; its uniform-only natural-area -ratio is `0.9604`, not `0.98`. The floor clamps 31 triangles, representing +ratio is `0.9604`, not `0.98`. The floor clamps 31 triangles, representing `0.0879366%` of corrected skin rest area. Continuation uses logarithmic natural-area dose: @@ -90,20 +90,20 @@ The ordered primary path is: 6. `c020-direct-alpha-100`: a fresh builder at full prestrain, seeded directly from the exact corrected baseline displacement. -The final direct replay diagnoses continuation/path sensitivity. Every alpha is +The final direct replay diagnoses continuation/path sensitivity. Every alpha is a fresh model build; only the continuation displacement is transferred. The alpha-0 replay must differ from the pinned baseline by no more than `1e-3` of target-displacement RMS on both `SmileLossMask` and the exact corrected-IsFace -point set. The corresponding absolute thresholds are approximately -`5.310139e-6 m` and `5.310655e-6 m`. All fixed/cut displacements must remain +point set. The corresponding absolute thresholds are approximately +`5.310139e-6 m` and `5.310655e-6 m`. All fixed/cut displacements must remain bit-exact zero. ## c050 policy There is deliberately no `c050` CLI option or automatic fallback in this -producer. Five-percent linear tightening is eligible only as a conditional -second stage after reviewing c020. If requested, it must use a new isolated +producer. Five-percent linear tightening is eligible only as a conditional +second stage after reviewing c020. If requested, it must use a new isolated producer/output namespace and a new approval decision; it must not modify or overwrite the c020 evidence. diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md index 561a9dabc..e5f0e11c4 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases-table.md @@ -1,5 +1,5 @@ | Case | E mode | Prestrain | Generated | Skin | -|---|---|---|---:|---| +| --- | --- | --- | ---: | --- | | H0P0 | homogeneous-e0200 | p000 | False | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/18/human-face-smile-plane-stress-skin/data/10-corrected-baseline/skin-isface-e0200-p000.vtp` | | H0P1 | homogeneous-e0200 | c020-raw-area-ratio-floor-050 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases/skin-h0p1-c020.vtp` | | H1P1 | selective-e000-where-raw-r-gt-1 | c020-raw-area-ratio-floor-050 | True | `/home/liblaf/Projects/liblaf/apple/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/10-prepared-material-cases/skin-h1p1-selective-e000-c020.vtp` | diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary-final.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary-final.json index f00619898..d31742ff4 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary-final.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary-final.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 1.1353891391821387, "warning/skin_folded_triangle_fraction": 0.0003679052811130807, "warning/skin_folded_triangles": 11 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary.json index f00619898..d31742ff4 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h0p1-summary.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 1.1353891391821387, "warning/skin_folded_triangle_fraction": 0.0003679052811130807, "warning/skin_folded_triangles": 11 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary-final.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary-final.json index 1a03c24ca..4270b3615 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary-final.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary-final.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 3.1236330104208774, "warning/skin_folded_triangle_fraction": 0.0013043914512191044, "warning/skin_folded_triangles": 39 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary.json index 1a03c24ca..4270b3615 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p0-summary.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 3.1236330104208774, "warning/skin_folded_triangle_fraction": 0.0013043914512191044, "warning/skin_folded_triangles": 39 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary-final.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary-final.json index b5dd6069c..2a24db1c9 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary-final.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary-final.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 3.385207409392097, "warning/skin_folded_triangle_fraction": 0.0005351349543462992, "warning/skin_folded_triangles": 16 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary.json index b5dd6069c..2a24db1c9 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-h1p1-summary.json @@ -2614,4 +2614,4 @@ "warning/skin_area_ratio_q999": 3.385207409392097, "warning/skin_folded_triangle_fraction": 0.0005351349543462992, "warning/skin_folded_triangles": 16 -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary-final.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary-final.json index ae11dfcc4..270839ec5 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary-final.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary-final.json @@ -8394,4 +8394,4 @@ "status": "pending", "tool": "ParaView" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary.json b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary.json index ae11dfcc4..270839ec5 100644 --- a/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary.json +++ b/exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data/20-selective-skin-prestrain-inverse-summary.json @@ -8394,4 +8394,4 @@ "status": "pending", "tool": "ParaView" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/data/30-cuboid-fat-thickness/inputs/30-cuboid-source-summary.json b/exp/2026/08/19/material-physics-group-meeting-assets/data/30-cuboid-fat-thickness/inputs/30-cuboid-source-summary.json index 998cddef6..4cb70f3c3 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/data/30-cuboid-fat-thickness/inputs/30-cuboid-source-summary.json +++ b/exp/2026/08/19/material-physics-group-meeting-assets/data/30-cuboid-fat-thickness/inputs/30-cuboid-source-summary.json @@ -768,4 +768,4 @@ "pressure_and_modulus": "model stress", "status": "model units; no SI calibration is asserted" } -} \ No newline at end of file +} diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-paraview.py b/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-paraview.py index 6569197c3..956718c4d 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-paraview.py +++ b/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-paraview.py @@ -120,9 +120,7 @@ def _new_view(camera: dict[str, Any]) -> Any: focus = [float(value) for value in camera["focus"]] direction = [float(value) for value in camera["direction"]] view.CameraFocalPoint = focus - view.CameraPosition = [ - focus[index] + 0.30 * direction[index] for index in range(3) - ] + view.CameraPosition = [focus[index] + 0.30 * direction[index] for index in range(3)] view.CameraViewUp = [0.0, 1.0, 0.0] view.CenterOfRotation = focus view.CameraParallelScale = float(camera["parallel_scale"]) @@ -217,9 +215,7 @@ def _render_asset( raise ValueError("Lamé output escapes output root") temporary_png = png.with_name(f".{png.stem}.tmp{png.suffix}") temporary_state = state.with_name(f".{state.stem}.tmp{state.suffix}") - if any( - path.exists() for path in (png, state, temporary_png, temporary_state) - ): + if any(path.exists() for path in (png, state, temporary_png, temporary_state)): raise FileExistsError(f"refusing stale Lamé output for {asset['asset_id']}") pvs.SaveScreenshot( str(temporary_png), diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-run.py b/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-run.py index 636b2c80f..d36a1be92 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-run.py +++ b/exp/2026/08/19/material-physics-group-meeting-assets/src/10-lame-run.py @@ -269,9 +269,7 @@ def _load_result( "rest_points": np.asarray(mesh.points, dtype=np.float64), "global_ids": global_ids, "displacement": np.asarray(mesh.point_data["Displacement"], dtype=np.float64), - "target": np.asarray( - mesh.point_data["TargetDisplacement"], dtype=np.float64 - ), + "target": np.asarray(mesh.point_data["TargetDisplacement"], dtype=np.float64), "activation": np.asarray(mesh.cell_data["Activation"], dtype=np.float64), "is_fixed": np.asarray(mesh.point_data["IsFixed"], dtype=bool), "skin_indices": skin_indices, @@ -378,9 +376,7 @@ def _write_surface( }, "cell_array_hashes": { "AreaRatio": _raw_sha256(area_ratio, dtype=" dict[str, dict[str, Any]]: if analysis.get("complete") is not True: raise ValueError("pinned conversion analysis is incomplete") wanted = {("full-3d-replay", "zero"), ("full-plane-stress", "zero")} - rows = { - (str(row["case"]), str(row["seed"])): row for row in analysis["cases"] - } + rows = {(str(row["case"]), str(row["seed"])): row for row in analysis["cases"]} if not wanted <= rows.keys(): raise KeyError("pinned conversion analysis lost the zero-seed full-domain pair") output = { @@ -532,12 +526,15 @@ def main(cfg: Config) -> None: strains.append(case_strain) pooled_abs_p99 = float(np.quantile(np.abs(np.concatenate(strains)), 0.99)) - if not math.isclose( - pooled_abs_p99, - EXPECTED_POOLED_ABS_P99_PERCENT, - rel_tol=0.0, - abs_tol=1.0e-12, - ) or round(pooled_abs_p99, 3) != STRAIN_LIMIT_PERCENT: + if ( + not math.isclose( + pooled_abs_p99, + EXPECTED_POOLED_ABS_P99_PERCENT, + rel_tol=0.0, + abs_tol=1.0e-12, + ) + or round(pooled_abs_p99, 3) != STRAIN_LIMIT_PERCENT + ): raise ValueError("Lamé shared area-strain scale changed") assets = [ diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-assets.py b/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-assets.py index 7d0e101db..185c82251 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-assets.py +++ b/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-assets.py @@ -35,9 +35,7 @@ RENDERER = Path(__file__).with_name("20-ablation-render-paraview.py") PVBATCH = Path("/usr/bin/pvbatch") -BASELINE_DATA = ( - REPO_ROOT / "exp/2026/08/18/human-face-smile-plane-stress-skin/data" -) +BASELINE_DATA = REPO_ROOT / "exp/2026/08/18/human-face-smile-plane-stress-skin/data" SELECTIVE_DATA = ( REPO_ROOT / "exp/2026/08/19/human-face-smile-selective-skin-energy-prestrain-inverse/data" @@ -47,10 +45,11 @@ / "exp/2026/08/19/human-face-smile-fat-floor-skin-energy-prestrain-inverse/data" ) HEURISTIC_DATA = ( - REPO_ROOT - / "exp/2026/08/17/human-face-smile-material-heuristic-sweep/data" + REPO_ROOT / "exp/2026/08/17/human-face-smile-material-heuristic-sweep/data" +) +REGISTERED_ANALYZER = ( + SELECTIVE_DATA.parent / "src/30-analyze-selective-skin-prestrain.py" ) -REGISTERED_ANALYZER = SELECTIVE_DATA.parent / "src/30-analyze-selective-skin-prestrain.py" METRIC_SKIN = HEURISTIC_DATA / "10-material-candidates/skin-e100-p000.vtp" @@ -466,7 +465,9 @@ def _registered_metrics( metric_skin = pv.read(METRIC_SKIN) basis = module._build_basis(baseline, skin, metric_skin) # noqa: SLF001 if render_input_dir.exists(): - raise FileExistsError(f"refusing to overwrite render inputs: {render_input_dir}") + raise FileExistsError( + f"refusing to overwrite render inputs: {render_input_dir}" + ) render_input_dir.mkdir(parents=False) if not np.all(basis.loss_mask[basis.skin_mesh_ids]): raise ValueError("not every IsFace surface point belongs to LossMask") @@ -509,7 +510,9 @@ def _registered_metrics( if not np.array_equal( np.asarray(surface.point_data["TargetNormalResidualMM"]), residual_mm ): - raise ValueError(f"{case_id} render residual differs from registered metric") + raise ValueError( + f"{case_id} render residual differs from registered metric" + ) displacement = np.asarray(frame.point_data["Displacement"], dtype=np.float64) full_residual = displacement - basis.target point_error_mm = 1.0e3 * np.linalg.norm( @@ -521,9 +524,7 @@ def _registered_metrics( objective_rms_from_points_mm = math.sqrt( ( float(np.dot(point_error_mm, point_error_mm)) - + float( - np.dot(off_surface_point_error_mm, off_surface_point_error_mm) - ) + + float(np.dot(off_surface_point_error_mm, off_surface_point_error_mm)) ) / int(np.count_nonzero(basis.loss_mask)) ) @@ -555,17 +556,13 @@ def _registered_metrics( "activation_rms": float(row["activation/rms"]), "folded_skin_triangles": int(row["quality/skin_folded_triangles"]), "inverted_tets": int(row["quality/inverted_tets"]), - "fixed_displacement_exact_zero": bool( - row["fixed/displacement_exact_zero"] - ), + "fixed_displacement_exact_zero": bool(row["fixed/displacement_exact_zero"]), "surface_path": str(CASE_SPECS[case_id]["surface"].path.resolve()), "surface_residual_sha256_le_f8": _array_sha256(residual_mm), "render_surface_path": render_inputs[case_id]["path"], "target_point_error_sha256_le_f8": _array_sha256(point_error_mm), "surface_objective_point_count": int(point_error_mm.size), - "off_surface_objective_point_count": int( - off_surface_point_error_mm.size - ), + "off_surface_objective_point_count": int(off_surface_point_error_mm.size), "objective_point_count": int(np.count_nonzero(basis.loss_mask)), "surface_point_error_rms_mm": float( np.linalg.norm(point_error_mm) / math.sqrt(point_error_mm.size) @@ -631,7 +628,9 @@ def _expected_outputs() -> list[Path]: names.extend( f"20-ablation-step40-{case.lower()}-point-error" for case in CASE_ORDER ) - return [ASSET_DIR / f"{name}.{suffix}" for name in names for suffix in ("png", "pvsm")] + return [ + ASSET_DIR / f"{name}.{suffix}" for name in names for suffix in ("png", "pvsm") + ] def _validate_outputs() -> list[dict[str, Any]]: @@ -642,7 +641,10 @@ def _validate_outputs() -> list[dict[str, Any]]: records = [] for path in expected: if path.suffix == ".png": - if _png_dimensions(path) != IMAGE_RESOLUTION or path.stat().st_size < 20_000: + if ( + _png_dimensions(path) != IMAGE_RESOLUTION + or path.stat().st_size < 20_000 + ): raise ValueError(f"invalid rendered PNG: {path}") else: text = path.read_text(encoding="utf-8", errors="strict")[:2_048] @@ -718,9 +720,7 @@ def main(cfg: Config) -> None: "cases": { case_id: { **metrics[case_id], - "material_path": str( - CASE_SPECS[case_id]["material"].path.resolve() - ), + "material_path": str(CASE_SPECS[case_id]["material"].path.resolve()), "surface_path": str(CASE_SPECS[case_id]["surface"].path.resolve()), "material_identity": input_identities[case_id]["material"], "surface_identity": input_identities[case_id]["surface"], @@ -799,9 +799,7 @@ def main(cfg: Config) -> None: { f"{case_id}/target_rms_mm": metrics[case_id]["target_rms_mm"], f"{case_id}/D_deg": metrics[case_id]["contraction_dihedral_rms_deg"], - f"{case_id}/L_mm": metrics[case_id][ - "residual_normal_laplacian_rms_mm" - ], + f"{case_id}/L_mm": metrics[case_id]["residual_normal_laplacian_rms_mm"], f"{case_id}/folds": metrics[case_id]["folded_skin_triangles"], } ) @@ -842,9 +840,7 @@ def main(cfg: Config) -> None: "outputs": outputs, "output_count": len(outputs), "separate_png_count": sum(item["path"].endswith(".png") for item in outputs), - "separate_pvsm_count": sum( - item["path"].endswith(".pvsm") for item in outputs - ), + "separate_pvsm_count": sum(item["path"].endswith(".pvsm") for item in outputs), "visualization_only": True, "forward_or_inverse_executed": False, } diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-render-paraview.py b/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-render-paraview.py index 1c63a1a7d..3e002fe49 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-render-paraview.py +++ b/exp/2026/08/19/material-physics-group-meeting-assets/src/20-ablation-render-paraview.py @@ -220,9 +220,7 @@ def _render_material( ) -def _case_title( - case_id: str, case: dict[str, Any], mode: str -) -> tuple[str, str]: +def _case_title(case_id: str, case: dict[str, Any], mode: str) -> tuple[str, str]: if case_id == "H0P0": material = "E=.2 MPa | p000" elif case_id == "H0P1": @@ -296,11 +294,14 @@ def _render_case( point, _cell, n_points, n_cells = _fetch_names(reader) if n_points != EXPECTED_POINTS or n_cells != EXPECTED_TRIANGLES: raise ValueError(f"{case_id} surface dimensions changed") - if not { - "TargetNormalResidualMM", - "TargetPointErrorMM", - "DisplacementMM", - } <= point: + if ( + not { + "TargetNormalResidualMM", + "TargetPointErrorMM", + "DisplacementMM", + } + <= point + ): raise KeyError(f"{case_id} surface fields changed") view = _new_view(contract["camera"]) display = pvs.Show(reader, view, "GeometryRepresentation") diff --git a/exp/2026/08/19/material-physics-group-meeting-assets/src/30-cuboid-build-assets.py b/exp/2026/08/19/material-physics-group-meeting-assets/src/30-cuboid-build-assets.py index 075853e89..5dc76393e 100644 --- a/exp/2026/08/19/material-physics-group-meeting-assets/src/30-cuboid-build-assets.py +++ b/exp/2026/08/19/material-physics-group-meeting-assets/src/30-cuboid-build-assets.py @@ -283,9 +283,10 @@ def prepare_contract( if (mesh.n_points, mesh.n_cells) != (expected_points, expected_cells): raise ValueError(f"mesh dimensions changed for {case_id}") displacement = np.asarray(mesh.point_data["Displacement"], dtype=np.float64) - if displacement.shape != (mesh.n_points, 3) or not np.isfinite( - displacement - ).all(): + if ( + displacement.shape != (mesh.n_points, 3) + or not np.isfinite(displacement).all() + ): raise ValueError(f"invalid displacement for {case_id}") u_y_parts.append(displacement[:, 1]) cases.append( @@ -338,9 +339,7 @@ def plot_metrics(rows: list[dict[str, Any]]) -> dict[str, Any]: from matplotlib import pyplot as plt thickness = np.asarray([float(row["top_fat_thickness"]) for row in rows]) - variation = np.asarray( - [float(row["top_grid/u_y_p95_minus_p05"]) for row in rows] - ) + variation = np.asarray([float(row["top_grid/u_y_p95_minus_p05"]) for row in rows]) laplacian = np.asarray([float(row["top_grid/laplacian_rms"]) for row in rows]) variation_reduction = 1.0 - variation[-1] / variation[0] laplacian_reduction = 1.0 - laplacian[-1] / laplacian[0] @@ -555,9 +554,10 @@ def write_report(rows: list[dict[str, Any]], receipt: dict[str, Any]) -> None: def main(cfg: Config) -> None: if os.environ.get("DEBUG") != "1": raise RuntimeError("set DEBUG=1; this historical asset build is local-only") - if Path(cfg.input_summary).resolve() != ( - ARCHIVE_ROOT / SOURCE_FILES["summary_json"].relative_path - ).resolve(): + if ( + Path(cfg.input_summary).resolve() + != (ARCHIVE_ROOT / SOURCE_FILES["summary_json"].relative_path).resolve() + ): raise ValueError("source summary cannot be overridden") if Path(cfg.output_receipt).resolve() != RECEIPT.resolve(): raise ValueError("receipt output cannot be overridden")