diff --git a/CHANGELOG.md b/CHANGELOG.md index 5af340bd7..0338bc185 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ - + # Changelog @@ -7,7 +7,67 @@ All notable changes to this project will be documented in this file. The format is based on [Conventional Changelog](https://github.com/conventional-changelog/conventional-changelog-config-spec/blob/master/versions/2.2.0/README.md), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.7.0](https://github.com/liblaf/apple/releases/tag/v0.7.0) - 2025-12-06 +## [v0.8.0](https://github.com/liblaf/apple/releases/tag/v0.8.0) - 2026-08-31 + +### πŸ’₯ BREAKING CHANGES + +- Refactored warp elastic energy module structure - [e2fffdc](https://github.com/liblaf/apple/commit/e2fffdcc73885e4f84b26b66d24d898ec84de087) by [@liblaf](https://github.com/liblaf) +- remove the previous model, inverse, optim, scene, utils, consts, jax.model, and warp.energies APIs; use the new forward, collision, common, and warp.fem modules instead - [e52b195](https://github.com/liblaf/apple/commit/e52b19529243ba4bdd45ffa821146ad9ed23f2de) by [@liblaf](https://github.com/liblaf) +- remove the liblaf.apple.jax package and JAX-based forward/collision APIs in favor of Torch tensors and Warp material adapters. - [67dbecb](https://github.com/liblaf/apple/commit/67dbecbcbc136414f26173b673095fd03e6d98d9) by [@liblaf](https://github.com/liblaf) + +### ✨ Features + +- **(apple)** improve inverse simulation with coarse-to-fine transfer and enhanced solvers - [61d530e](https://github.com/liblaf/apple/commit/61d530e5230b07c38db367a13fc5a6deb59e48e2) by [@liblaf](https://github.com/liblaf) +- **(apple)** implement hybrid JAX/Warp model framework and WarpPhaceV2 - [6d1ae34](https://github.com/liblaf/apple/commit/6d1ae34c1ca512da4ec765e8149de4a5e2da4bbc) by [@liblaf](https://github.com/liblaf) +- **(apple)** add SMAS support and volume fraction for elastic energies - [79a6c2d](https://github.com/liblaf/apple/commit/79a6c2dd1b32618fd405e62963efd206f84b7622) by [@liblaf](https://github.com/liblaf) +- **(exp)** update inverse-toy simulation and add Newton solver - [cee4852](https://github.com/liblaf/apple/commit/cee4852cc9ecf957995331dc796da4ac2e6cdf88) by [@liblaf](https://github.com/liblaf) +- **(exp)** add SMAS forward simulation experiments - [90f086c](https://github.com/liblaf/apple/commit/90f086cb9b18f85abbb4ada375acb762ee5ec609) by [@liblaf](https://github.com/liblaf) +- **(exp)** add inverse activation experiments for face and toy cases - [abaf2e3](https://github.com/liblaf/apple/commit/abaf2e3013c204fea77856db24e57b50fe5f1d92) by [@liblaf](https://github.com/liblaf) +- **(exp)** compare belly losses on unreachable targets - [a538dd3](https://github.com/liblaf/apple/commit/a538dd3cc84c8e4c8817940d12054f67abad8300) by [@liblaf](https://github.com/liblaf) +- **(exp)** diagnose unreachable-target inverse bumpiness - [93b0953](https://github.com/liblaf/apple/commit/93b0953b484c0a65966750bd7013d8b11318800e) by [@liblaf](https://github.com/liblaf) +- **(experiment)** validate fat attenuation of bumpy activation - [77721e8](https://github.com/liblaf/apple/commit/77721e8569660c0f670ec060b747c3e30dff26de) by [@liblaf](https://github.com/liblaf) +- **(inverse)** enhance inverse solver with constraint support and improved adjoint solver - [892dbfd](https://github.com/liblaf/apple/commit/892dbfd616dd801f1d642ffb1620f55b86942530) by [@liblaf](https://github.com/liblaf) +- **(smas)** add stable neo-hookean simulation experiments - [5d1ae88](https://github.com/liblaf/apple/commit/5d1ae8814b4f8092925cf8a97b5a50a10338c2d2) by [@liblaf](https://github.com/liblaf) +- **(warp)** add Koiter shell potential - [ae2f318](https://github.com/liblaf/apple/commit/ae2f318d7b1a549ef703733e74736124edfc2bed) by [@liblaf](https://github.com/liblaf) +- add inverse toy experiments for forward simulation and muscle activation - [00ba035](https://github.com/liblaf/apple/commit/00ba035d474381f4bfca3cdd7144b247ceabef13) by [@liblaf](https://github.com/liblaf) +- **\[breaking\]** refactor elastic energies and add inverse physics module - [e2fffdc](https://github.com/liblaf/apple/commit/e2fffdcc73885e4f84b26b66d24d898ec84de087) by [@liblaf](https://github.com/liblaf) +- add Neo-Hookean Warp energies and line-search PNCG - [88a29ef](https://github.com/liblaf/apple/commit/88a29efa62809d30823a55921105955fb047cd77) by [@liblaf](https://github.com/liblaf) +- add staged PNCG continuation for forward solves - [c5f5267](https://github.com/liblaf/apple/commit/c5f526763df2e261101a1fba5f8d1c65850d251d) by [@liblaf](https://github.com/liblaf) +- **\[breaking\]** add Torch differentiable inverse simulations - [67dbecb](https://github.com/liblaf/apple/commit/67dbecbcbc136414f26173b673095fd03e6d98d9) by [@liblaf](https://github.com/liblaf) + +### πŸ› Bug Fixes + +- **(inverse-face)** split muscle and SMAS material fractions - [51e6274](https://github.com/liblaf/apple/commit/51e6274d4eaa63cf20289d64a0871b02e43c2bfd) by [@liblaf](https://github.com/liblaf) +- **(warp)** correct ARAP muscle energy implementation and kernel function names - [d734e9b](https://github.com/liblaf/apple/commit/d734e9bf3909551158ae800dead9611c2c6e1175) by [@liblaf](https://github.com/liblaf) +- align activation shear component ordering - [a353c93](https://github.com/liblaf/apple/commit/a353c93922cd1cd8cdfb4a128ad91f4692258281) by [@liblaf](https://github.com/liblaf) + +### πŸ“ Documentation + +- **(exp)** report inverse-face 3152k success - [d9c8f51](https://github.com/liblaf/apple/commit/d9c8f51f637e97515736caafccac17e0dcdb064d) by [@liblaf](https://github.com/liblaf) +- **(exp)** report inverse-face continued optimization - [28f3d6e](https://github.com/liblaf/apple/commit/28f3d6efc5c0bcec06c4eea2d3e3dbecefaa9eea) by [@liblaf](https://github.com/liblaf) +- **(exp)** summarize Expression000 surface prestrain - [b4a0ad8](https://github.com/liblaf/apple/commit/b4a0ad865bf675bc71e00f03963bb1e358770921) by [@liblaf](https://github.com/liblaf) +- **(exp)** summarize 4pct Expression000 surface prestrain - [5a56643](https://github.com/liblaf/apple/commit/5a56643a5be1ee732578c5bed09d610577b14332) by [@liblaf](https://github.com/liblaf) +- **(exp)** summarize 10pct metric surface prestrain - [ea57258](https://github.com/liblaf/apple/commit/ea572580c2ddaf8719e3ce8852813315b4bc198a) by [@liblaf](https://github.com/liblaf) +- **(exp)** summarize volume area diagnostics - [8b2efe1](https://github.com/liblaf/apple/commit/8b2efe1c19a346f03f3cd6205443d3fb9f9c3660) by [@liblaf](https://github.com/liblaf) +- **(exp)** report fat-thickness bumpiness findings - [4c28bae](https://github.com/liblaf/apple/commit/4c28baec1643cd11422edf4236311eb87cfd6af5) by [@liblaf](https://github.com/liblaf) +- **(exp)** report Smile material screen physical validity - [fef1e0f](https://github.com/liblaf/apple/commit/fef1e0fbf943db6cddbe8ab97c5532ace482667f) by [@liblaf](https://github.com/liblaf) +- **(exp)** record static material admissibility result - [f9656bf](https://github.com/liblaf/apple/commit/f9656bfed1c8530d25dffbac66ff9caf2047e506) by [@liblaf](https://github.com/liblaf) +- **(exp)** record static material A2 boundary result - [837bbb3](https://github.com/liblaf/apple/commit/837bbb31f9c152d412f4b72ec45a42f32df14c4a) by [@liblaf](https://github.com/liblaf) +- **(smas)** update inverse-unreachable clipped figures - [205ab2a](https://github.com/liblaf/apple/commit/205ab2a5e9c152cb9ab0e507415aa3261e572ce0) by [@liblaf](https://github.com/liblaf) + +### 🎨 Styles + +- collapse multi-line return expressions to single line - [acf52bc](https://github.com/liblaf/apple/commit/acf52bc8305cfe78a281082168f2487dae2532c7) by [@liblaf](https://github.com/liblaf) + +### ♻️ Code Refactoring + +- **\[breaking\]** replace model stack with forward simulation API - [e52b195](https://github.com/liblaf/apple/commit/e52b19529243ba4bdd45ffa821146ad9ed23f2de) by [@liblaf](https://github.com/liblaf) + +### ❀️ Contributors + +- [@liblaf](https://github.com/liblaf) + +## [v0.7.0](https://github.com/liblaf/apple/releases/tag/v0.7.0) - 2025-12-07 ### πŸ’₯ BREAKING CHANGES @@ -15,45 +75,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### ✨ Features -- **apple:** implement inverse simulation framework and ARAP active model - [1f0e475](https://github.com/liblaf/apple/commit/1f0e47519fdeb81723a7bee20d0f7877b521198d) by [@liblaf](https://github.com/liblaf) -- **inverse:** Return aux from value_and_grad method - [d625b25](https://github.com/liblaf/apple/commit/d625b2522ecbed037c988e1330409822a1c3ecb7) by [@liblaf](https://github.com/liblaf) -- **model, inverse:** Implement inverse problem solving for activation - [c48d725](https://github.com/liblaf/apple/commit/c48d725cc57d49be7b9ce78267d4a03d34847818) by [@liblaf](https://github.com/liblaf) -- **warp:** implement ARAP energy with improved Hessian computation - [5013ddc](https://github.com/liblaf/apple/commit/5013ddc0ff3b1275dca2c69f4990258471f12a79) by [@liblaf](https://github.com/liblaf) -- **warp:** Enable differentiation of Warp energy parameters - [fedd68c](https://github.com/liblaf/apple/commit/fedd68c400dbe921940606e45cbde85ec1297556) by [@liblaf](https://github.com/liblaf) -- **warp:** implement ARAP muscle and PHACE hyperelastic models - [e1f0d43](https://github.com/liblaf/apple/commit/e1f0d43f7ab5bf4807614ccd549bd7149156ddfb) by [@liblaf](https://github.com/liblaf) +- **(apple)** implement inverse simulation framework and ARAP active model - [1f0e475](https://github.com/liblaf/apple/commit/1f0e47519fdeb81723a7bee20d0f7877b521198d) by [@liblaf](https://github.com/liblaf) +- **(inverse)** Return aux from value_and_grad method - [d625b25](https://github.com/liblaf/apple/commit/d625b2522ecbed037c988e1330409822a1c3ecb7) by [@liblaf](https://github.com/liblaf) +- **(model, inverse)** Implement inverse problem solving for activation - [c48d725](https://github.com/liblaf/apple/commit/c48d725cc57d49be7b9ce78267d4a03d34847818) by [@liblaf](https://github.com/liblaf) +- **(warp)** implement ARAP energy with improved Hessian computation - [5013ddc](https://github.com/liblaf/apple/commit/5013ddc0ff3b1275dca2c69f4990258471f12a79) by [@liblaf](https://github.com/liblaf) +- **(warp)** Enable differentiation of Warp energy parameters - [fedd68c](https://github.com/liblaf/apple/commit/fedd68c400dbe921940606e45cbde85ec1297556) by [@liblaf](https://github.com/liblaf) +- **(warp)** implement ARAP muscle and PHACE hyperelastic models - [e1f0d43](https://github.com/liblaf/apple/commit/e1f0d43f7ab5bf4807614ccd549bd7149156ddfb) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **warp/energies:** Improve robustness of hyperelastic Hessian calculations - [9ea10f5](https://github.com/liblaf/apple/commit/9ea10f5a00a591e49ed05507290589940339e827) by [@liblaf](https://github.com/liblaf) +- **(warp/energies)** Improve robustness of hyperelastic Hessian calculations - [9ea10f5](https://github.com/liblaf/apple/commit/9ea10f5a00a591e49ed05507290589940339e827) by [@liblaf](https://github.com/liblaf) -### β™» Code Refactoring +### ♻️ Code Refactoring -- **model:** Integrate WarpModelAdapter and streamline parameter updates - [82cafb2](https://github.com/liblaf/apple/commit/82cafb2a3507f570522a98e2f5d33ec487de5fcc) by [@liblaf](https://github.com/liblaf) -- **model/inverse:** Refactor Inverse solver and argument order - [920dbb0](https://github.com/liblaf/apple/commit/920dbb0e604fca72bde3a0ef413c5cd79edef07b) by [@liblaf](https://github.com/liblaf) -- **test, warp:** Improve test diagnostics and ARAP parameter handling - [7c7c07f](https://github.com/liblaf/apple/commit/7c7c07f9a36054eae367cdabee51d736e721fa30) by [@liblaf](https://github.com/liblaf) +- **(model)** Integrate WarpModelAdapter and streamline parameter updates - [82cafb2](https://github.com/liblaf/apple/commit/82cafb2a3507f570522a98e2f5d33ec487de5fcc) by [@liblaf](https://github.com/liblaf) +- **(model/inverse)** **\[breaking\]** Refactor Inverse solver and argument order - [920dbb0](https://github.com/liblaf/apple/commit/920dbb0e604fca72bde3a0ef413c5cd79edef07b) by [@liblaf](https://github.com/liblaf) +- **(test, warp)** Improve test diagnostics and ARAP parameter handling - [7c7c07f](https://github.com/liblaf/apple/commit/7c7c07f9a36054eae367cdabee51d736e721fa30) by [@liblaf](https://github.com/liblaf) - reorganize import statements in experimental and test modules - [0f2640a](https://github.com/liblaf/apple/commit/0f2640aa21befb1796123dc3c5e2a9bd4935a404) by [@liblaf](https://github.com/liblaf) ### βœ… Tests -- **warp/energies/hyperelastic:** Refine mixed derivative product test helper - [322135f](https://github.com/liblaf/apple/commit/322135f127aa60f19402a41024ce4fbe29766b7f) by [@liblaf](https://github.com/liblaf) -- **warp/hyperelastic/hess_quad:** Refine numeric differentiation precision - [075632c](https://github.com/liblaf/apple/commit/075632c43499258410f78c7559cb21340cab1d6b) by [@liblaf](https://github.com/liblaf) +- **(warp/energies/hyperelastic)** Refine mixed derivative product test helper - [322135f](https://github.com/liblaf/apple/commit/322135f127aa60f19402a41024ce4fbe29766b7f) by [@liblaf](https://github.com/liblaf) +- **(warp/hyperelastic/hess_quad)** Refine numeric differentiation precision - [075632c](https://github.com/liblaf/apple/commit/075632c43499258410f78c7559cb21340cab1d6b) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors -- [@liblaf](https://github.com/liblaf) made their first contribution +- [@liblaf[bot]](https://github.com/apps/liblaf) +- [@liblaf](https://github.com/liblaf) -## [0.6.1](https://github.com/liblaf/apple/releases/tag/v0.6.1) - 2025-11-29 +## [v0.6.1](https://github.com/liblaf/apple/releases/tag/v0.6.1) - 2025-11-29 ### πŸ› Bug Fixes -- **jax/energies:** Correct mass-spring energy and gradient calculation - [1a0b663](https://github.com/liblaf/apple/commit/1a0b663fd0c76afb0f2c8dabfedc0135d1783773) by [@liblaf](https://github.com/liblaf) +- **(jax/energies)** Correct mass-spring energy and gradient calculation - [1a0b663](https://github.com/liblaf/apple/commit/1a0b663fd0c76afb0f2c8dabfedc0135d1783773) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.6.0](https://github.com/liblaf/apple/releases/tag/v0.6.0) - 2025-11-29 +## [v0.6.0](https://github.com/liblaf/apple/releases/tag/v0.6.0) - 2025-11-29 ### πŸ’₯ BREAKING CHANGES @@ -61,15 +122,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### ✨ Features -- **jax:** Add MassSpringPrestrain energy model - [93466a6](https://github.com/liblaf/apple/commit/93466a630b29018889105af01371f4fb15cb4381) by [@liblaf](https://github.com/liblaf) -- redesign physics simulation architecture with JAX/Warp integration - [84e0b67](https://github.com/liblaf/apple/commit/84e0b67804f039323f747998b21b9b8ed90efe11) by [@liblaf](https://github.com/liblaf) +- **(jax)** Add MassSpringPrestrain energy model - [93466a6](https://github.com/liblaf/apple/commit/93466a630b29018889105af01371f4fb15cb4381) by [@liblaf](https://github.com/liblaf) +- **\[breaking\]** redesign physics simulation architecture with JAX/Warp integration - [84e0b67](https://github.com/liblaf/apple/commit/84e0b67804f039323f747998b21b9b8ed90efe11) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.5.0](https://github.com/liblaf/apple/releases/tag/v0.5.0) - 2025-11-20 +## [v0.5.0](https://github.com/liblaf/apple/releases/tag/v0.5.0) - 2025-11-20 ### πŸ’₯ BREAKING CHANGES @@ -77,46 +138,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### ✨ Features -- **inverse-grin:** add optimizer configuration and new inverse-no-reg script - [4c7d3f8](https://github.com/liblaf/apple/commit/4c7d3f8edd9310567202d4e6d999197510a0e858) by [@liblaf](https://github.com/liblaf) -- **warp/sim:** add sparse Hessian support and improve numerical stability - [61d8b07](https://github.com/liblaf/apple/commit/61d8b0730c6cc5235d1514f908a88157750661b8) by [@liblaf](https://github.com/liblaf) +- **(inverse-grin)** add optimizer configuration and new inverse-no-reg script - [4c7d3f8](https://github.com/liblaf/apple/commit/4c7d3f8edd9310567202d4e6d999197510a0e858) by [@liblaf](https://github.com/liblaf) +- **(warp/sim)** add sparse Hessian support and improve numerical stability - [61d8b07](https://github.com/liblaf/apple/commit/61d8b0730c6cc5235d1514f908a88157750661b8) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **inverse-grin:** update regularization weights in loss calculation - [4684ce4](https://github.com/liblaf/apple/commit/4684ce4da7049bb811244e74e151cf8cb145832f) by [@liblaf](https://github.com/liblaf) +- **(inverse-grin)** update regularization weights in loss calculation - [4684ce4](https://github.com/liblaf/apple/commit/4684ce4da7049bb811244e74e151cf8cb145832f) by [@liblaf](https://github.com/liblaf) ### πŸ“ Documentation - Update documentation links - [90bfed0](https://github.com/liblaf/apple/commit/90bfed02d757d9497acefedbb9e2be53c1b11c0f) by [@liblaf](https://github.com/liblaf) -### β™» Code Refactoring +### ♻️ Code Refactoring -- **core:** Improve internal structure and update dependencies - [d7c6b94](https://github.com/liblaf/apple/commit/d7c6b94e616f411b8e86cd3300b22bdd8cebf3e9) by [@liblaf](https://github.com/liblaf) -- **exp:** Improve inverse simulation inspection script - [75afcff](https://github.com/liblaf/apple/commit/75afcff97dd3a3661d7516e9f2795f077481f9f3) by [@liblaf](https://github.com/liblaf) -- **exp/inverse:** Simplify activation parameter to a single scalar stretch - [5ea6f55](https://github.com/liblaf/apple/commit/5ea6f55d494ca41fd96d21e3a56138f1428ab0bf) by [@liblaf](https://github.com/liblaf) -- **jax:** Enhance robustness and consistency of optim and math modules - [dd241d8](https://github.com/liblaf/apple/commit/dd241d8229b98091485b77014899dc4c857daaf8) by [@liblaf](https://github.com/liblaf) +- **(core)** Improve internal structure and update dependencies - [d7c6b94](https://github.com/liblaf/apple/commit/d7c6b94e616f411b8e86cd3300b22bdd8cebf3e9) by [@liblaf](https://github.com/liblaf) +- **(exp)** Improve inverse simulation inspection script - [75afcff](https://github.com/liblaf/apple/commit/75afcff97dd3a3661d7516e9f2795f077481f9f3) by [@liblaf](https://github.com/liblaf) +- **(exp/inverse)** Simplify activation parameter to a single scalar stretch - [5ea6f55](https://github.com/liblaf/apple/commit/5ea6f55d494ca41fd96d21e3a56138f1428ab0bf) by [@liblaf](https://github.com/liblaf) +- **(jax)** Enhance robustness and consistency of optim and math modules - [dd241d8](https://github.com/liblaf/apple/commit/dd241d8229b98091485b77014899dc4c857daaf8) by [@liblaf](https://github.com/liblaf) - update liblaf-peach usage and improve array handling - [e28476f](https://github.com/liblaf/apple/commit/e28476f9bc0686a10c5f7954760eab94defbf28f) by [@liblaf](https://github.com/liblaf) - Rename `point-ids` to `dof-id` and `dirichlet-values` to `dirichlet-value` - [0b7e5b8](https://github.com/liblaf/apple/commit/0b7e5b83ecbcef49938eb57484561d8583405bc2) by [@liblaf](https://github.com/liblaf) ### πŸ›  Builds -- **deps:** Upgrade JAX to 0.7 and add cholespy - [35acd6d](https://github.com/liblaf/apple/commit/35acd6d63289c0da210899fcdf1e0fe4cae53f9d) by [@liblaf](https://github.com/liblaf) -- **repo:** Configure Git LFS for large file tracking - [fbfb958](https://github.com/liblaf/apple/commit/fbfb958c459aa49d00a8b778758d5836cd4aa130) by [@liblaf](https://github.com/liblaf) -- Update dependencies, Python version, and CI configuration - [0a97a67](https://github.com/liblaf/apple/commit/0a97a67f5557e51677dc6a451a06707e6fc7290d) by [@liblaf](https://github.com/liblaf) -- Update liblaf-\* dependencies and refine tooling - [82b2870](https://github.com/liblaf/apple/commit/82b2870b69511b5d76b92c85cb46965e50cfdb4a) by [@liblaf](https://github.com/liblaf) +- **(deps)** Upgrade JAX to 0.7 and add cholespy - [35acd6d](https://github.com/liblaf/apple/commit/35acd6d63289c0da210899fcdf1e0fe4cae53f9d) by [@liblaf](https://github.com/liblaf) +- **(repo)** Configure Git LFS for large file tracking - [fbfb958](https://github.com/liblaf/apple/commit/fbfb958c459aa49d00a8b778758d5836cd4aa130) by [@liblaf](https://github.com/liblaf) +- **\[breaking\]** Update dependencies, Python version, and CI configuration - [0a97a67](https://github.com/liblaf/apple/commit/0a97a67f5557e51677dc6a451a06707e6fc7290d) by [@liblaf](https://github.com/liblaf) +- Update liblaf-* dependencies and refine tooling - [82b2870](https://github.com/liblaf/apple/commit/82b2870b69511b5d76b92c85cb46965e50cfdb4a) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.4.0](https://github.com/liblaf/apple/releases/tag/v0.4.0) - 2025-10-12 +## [v0.4.0](https://github.com/liblaf/apple/releases/tag/v0.4.0) - 2025-10-12 ### πŸ’₯ BREAKING CHANGES - **(struct)** All classes using @struct.pytree or - PyTreeMixin need to be updated to use Equinox's - Module system. Field declarations now use field() - instead of data/static. - [a5e4888](https://github.com/liblaf/apple/commit/a5e488899aed60472e929ce0a6bdc711708a1ccc) by [@liblaf](https://github.com/liblaf) +PyTreeMixin need to be updated to use Equinox's +Module system. Field declarations now use field() +instead of data/static. - [a5e4888](https://github.com/liblaf/apple/commit/a5e488899aed60472e929ce0a6bdc711708a1ccc) by [@liblaf](https://github.com/liblaf) - **(sim)** - Removed `src/liblaf/apple/energy/collision/vert_face/callable.py` - Changed `ArrayDict._data` to public `data` field - Modified `pre_optim_iter` method signatures @@ -138,67 +199,67 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### ✨ Features -- **experiments:** add dynamic and static simulation examples - [262646e](https://github.com/liblaf/apple/commit/262646e280a8e5d6ae199d012b2b7faa4eb6cfd9) by [@liblaf](https://github.com/liblaf) -- **inverse:** Add inverse physics solver with Warp and lineax integration - [cc8ebbb](https://github.com/liblaf/apple/commit/cc8ebbbe9bc5d3777f40b2f14aeae6e94d5bf772) by [@liblaf](https://github.com/liblaf) -- **inverse-simulation:** enhance inverse muscle simulation with Phace energy model - [8cf739b](https://github.com/liblaf/apple/commit/8cf739b3cb527c4ec7c48b1cd485926c817aaf08) by [@liblaf](https://github.com/liblaf) -- **jax:** add active material models and enhance optimization infrastructure - [518ee0b](https://github.com/liblaf/apple/commit/518ee0b6da54cb01803f220d6c7fabef8fcefd62) by [@liblaf](https://github.com/liblaf) -- **jax:** add PNCG optimizer and autodiff utilities - [bb5a51e](https://github.com/liblaf/apple/commit/bb5a51ead25358ef2202ce0bdc6d236ab1ea744c) by [@liblaf](https://github.com/liblaf) -- **jax/optim:** add modular minimization framework with SciPy backend - [72ae94b](https://github.com/liblaf/apple/commit/72ae94b76df2d0d08d826f2359ff17ea11744685) by [@liblaf](https://github.com/liblaf) -- **jax/sim/energy:** Add Koiter thin shell energy model - [e8175e3](https://github.com/liblaf/apple/commit/e8175e3f3763907356368f9cc7b23c818daaa5ca) by [@liblaf](https://github.com/liblaf) -- **phace:** add open-mouth jaw animation example - [5dfa5e3](https://github.com/liblaf/apple/commit/5dfa5e38ff1e23b295d1023e662a0a899cdc3774) by [@liblaf](https://github.com/liblaf) -- **phace:** add close-mouth and wind simulation examples - [eb5bfdb](https://github.com/liblaf/apple/commit/eb5bfdbe7d34ed487043e308c616d479c797a9cc) by [@liblaf](https://github.com/liblaf) -- **sim:** add inter-collision example and improvements - [231d509](https://github.com/liblaf/apple/commit/231d5099f3f5dcc1710c8f1c29dd0a938a26aac7) by [@liblaf](https://github.com/liblaf) -- **sim:** add dirichlet conditions, geometry handling, and model building - [0d8388e](https://github.com/liblaf/apple/commit/0d8388e6b9c427689168dc263dbd08307699bb3e) by [@liblaf](https://github.com/liblaf) -- **sim:** introduce active ARAP energy model and Dirichlet builder - [af97357](https://github.com/liblaf/apple/commit/af973573ef9f03d86c71c420c42567c08bc13d6c) by [@liblaf](https://github.com/liblaf) -- **sim:** integrate Warp backend for simulation - [eaff9b9](https://github.com/liblaf/apple/commit/eaff9b94b92184ecd1847c0d8bcc3773d0bb6343) by [@liblaf](https://github.com/liblaf) -- **sim:** add Hessian computation support for energy models - [cb1ea7f](https://github.com/liblaf/apple/commit/cb1ea7fedc5293b5474892b7c14a2fc1f4475d06) by [@liblaf](https://github.com/liblaf) -- **sim:** Add activation utility functions for JAX energy models - [ae26615](https://github.com/liblaf/apple/commit/ae26615d4a9fbd5d665b2aabcde8dfe5a7d96a20) by [@liblaf](https://github.com/liblaf) -- **simulation:** add ball-head collision example with visualization support - [9550bf2](https://github.com/liblaf/apple/commit/9550bf2c07daf9e0c1509ea515581a3a043ebc60) by [@liblaf](https://github.com/liblaf) -- **struct:** add mutable tree variants - [5ed48f6](https://github.com/liblaf/apple/commit/5ed48f6447be1092c76c8454297bbbab7ca1bab2) by [@liblaf](https://github.com/liblaf) -- **warp:** add matrix decomposition functions and update warp dependency - [6a5b2a9](https://github.com/liblaf/apple/commit/6a5b2a953509a269490be8fc05a12d3ce0fbd6ec) by [@liblaf](https://github.com/liblaf) -- **warp:** add simulation energy infrastructure and ARAP model - [24abf6a](https://github.com/liblaf/apple/commit/24abf6a060ce975cad8c4d532d81cc1a83b961b9) by [@liblaf](https://github.com/liblaf) -- **warp/sim/energy:** add active ARAP and passive PHACE energy models - [f56d137](https://github.com/liblaf/apple/commit/f56d137e589aec81e9383534e3047c5e7e9a0a8a) by [@liblaf](https://github.com/liblaf) +- **(experiments)** add dynamic and static simulation examples - [262646e](https://github.com/liblaf/apple/commit/262646e280a8e5d6ae199d012b2b7faa4eb6cfd9) by [@liblaf](https://github.com/liblaf) +- **(inverse)** Add inverse physics solver with Warp and lineax integration - [cc8ebbb](https://github.com/liblaf/apple/commit/cc8ebbbe9bc5d3777f40b2f14aeae6e94d5bf772) by [@liblaf](https://github.com/liblaf) +- **(inverse-simulation)** enhance inverse muscle simulation with Phace energy model - [8cf739b](https://github.com/liblaf/apple/commit/8cf739b3cb527c4ec7c48b1cd485926c817aaf08) by [@liblaf](https://github.com/liblaf) +- **(jax)** **\[breaking\]** add active material models and enhance optimization infrastructure - [518ee0b](https://github.com/liblaf/apple/commit/518ee0b6da54cb01803f220d6c7fabef8fcefd62) by [@liblaf](https://github.com/liblaf) +- **(jax)** add PNCG optimizer and autodiff utilities - [bb5a51e](https://github.com/liblaf/apple/commit/bb5a51ead25358ef2202ce0bdc6d236ab1ea744c) by [@liblaf](https://github.com/liblaf) +- **(jax/optim)** add modular minimization framework with SciPy backend - [72ae94b](https://github.com/liblaf/apple/commit/72ae94b76df2d0d08d826f2359ff17ea11744685) by [@liblaf](https://github.com/liblaf) +- **(jax/sim/energy)** Add Koiter thin shell energy model - [e8175e3](https://github.com/liblaf/apple/commit/e8175e3f3763907356368f9cc7b23c818daaa5ca) by [@liblaf](https://github.com/liblaf) +- **(phace)** add open-mouth jaw animation example - [5dfa5e3](https://github.com/liblaf/apple/commit/5dfa5e38ff1e23b295d1023e662a0a899cdc3774) by [@liblaf](https://github.com/liblaf) +- **(phace)** add close-mouth and wind simulation examples - [eb5bfdb](https://github.com/liblaf/apple/commit/eb5bfdbe7d34ed487043e308c616d479c797a9cc) by [@liblaf](https://github.com/liblaf) +- **(sim)** add inter-collision example and improvements - [231d509](https://github.com/liblaf/apple/commit/231d5099f3f5dcc1710c8f1c29dd0a938a26aac7) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** add dirichlet conditions, geometry handling, and model building - [0d8388e](https://github.com/liblaf/apple/commit/0d8388e6b9c427689168dc263dbd08307699bb3e) by [@liblaf](https://github.com/liblaf) +- **(sim)** introduce active ARAP energy model and Dirichlet builder - [af97357](https://github.com/liblaf/apple/commit/af973573ef9f03d86c71c420c42567c08bc13d6c) by [@liblaf](https://github.com/liblaf) +- **(sim)** integrate Warp backend for simulation - [eaff9b9](https://github.com/liblaf/apple/commit/eaff9b94b92184ecd1847c0d8bcc3773d0bb6343) by [@liblaf](https://github.com/liblaf) +- **(sim)** add Hessian computation support for energy models - [cb1ea7f](https://github.com/liblaf/apple/commit/cb1ea7fedc5293b5474892b7c14a2fc1f4475d06) by [@liblaf](https://github.com/liblaf) +- **(sim)** Add activation utility functions for JAX energy models - [ae26615](https://github.com/liblaf/apple/commit/ae26615d4a9fbd5d665b2aabcde8dfe5a7d96a20) by [@liblaf](https://github.com/liblaf) +- **(simulation)** add ball-head collision example with visualization support - [9550bf2](https://github.com/liblaf/apple/commit/9550bf2c07daf9e0c1509ea515581a3a043ebc60) by [@liblaf](https://github.com/liblaf) +- **(struct)** add mutable tree variants - [5ed48f6](https://github.com/liblaf/apple/commit/5ed48f6447be1092c76c8454297bbbab7ca1bab2) by [@liblaf](https://github.com/liblaf) +- **(warp)** add matrix decomposition functions and update warp dependency - [6a5b2a9](https://github.com/liblaf/apple/commit/6a5b2a953509a269490be8fc05a12d3ce0fbd6ec) by [@liblaf](https://github.com/liblaf) +- **(warp)** add simulation energy infrastructure and ARAP model - [24abf6a](https://github.com/liblaf/apple/commit/24abf6a060ce975cad8c4d532d81cc1a83b961b9) by [@liblaf](https://github.com/liblaf) +- **(warp/sim/energy)** add active ARAP and passive PHACE energy models - [f56d137](https://github.com/liblaf/apple/commit/f56d137e589aec81e9383534e3047c5e7e9a0a8a) by [@liblaf](https://github.com/liblaf) - Implement phace active and passive energy models - [294f454](https://github.com/liblaf/apple/commit/294f454b359c31ae6e33d456989970e2acf0db6d) by [@liblaf](https://github.com/liblaf) - Add JAX-based simulation core with math utilities and type definitions - [36d26fa](https://github.com/liblaf/apple/commit/36d26fa006f8099d8bd3dfabe8c49430856d4c40) by [@liblaf](https://github.com/liblaf) - Add JAX-based simulation framework and mathematical documentation - [d63a206](https://github.com/liblaf/apple/commit/d63a206bb219b2134c138b0876b932c79ffc2b5c) by [@liblaf](https://github.com/liblaf) -- add Phace energy model and rename point data array - [d03be25](https://github.com/liblaf/apple/commit/d03be256552548f77abae914ae0f11c0e526e519) by [@liblaf](https://github.com/liblaf) +- **\[breaking\]** add Phace energy model and rename point data array - [d03be25](https://github.com/liblaf/apple/commit/d03be256552548f77abae914ae0f11c0e526e519) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **data:** update md5 hashes and sizes for input and target VTU files - [e1b9558](https://github.com/liblaf/apple/commit/e1b9558293268340ffcc51a7fee8dea71d89fde7) by [@liblaf](https://github.com/liblaf) -- **deps:** update and simplify dependencies - [dcbc065](https://github.com/liblaf/apple/commit/dcbc065ed738f67d1301ba6b7e42c897bbfdc257) by [@liblaf](https://github.com/liblaf) -- **deps:** update dependency jax to >=0.7,<0.8 (#49) - [05e9451](https://github.com/liblaf/apple/commit/05e9451f9d332c01d257a733d0341323f564c02f) by [@renovate[bot]](https://github.com/apps/renovate) in [#49](https://github.com/liblaf/apple/pull/49) -- **deps:** update dependency beartype to >=0.22,<0.23 (#55) - [40e7a51](https://github.com/liblaf/apple/commit/40e7a5139ce5302d86da6eddb967d7e2523c0a94) by [@renovate[bot]](https://github.com/apps/renovate) in [#55](https://github.com/liblaf/apple/pull/55) -- **jax:** Correct activation transformation and add relative energy to PNCG - [0cf40cc](https://github.com/liblaf/apple/commit/0cf40cc71944111bffa5ab4a20e2586ee8444386) by [@liblaf](https://github.com/liblaf) -- **jax/math/rotation:** correct sign handling in SVD-based rotation computation - [76eea15](https://github.com/liblaf/apple/commit/76eea158a320b49a059c597a09c3acccf0ad219c) by [@liblaf](https://github.com/liblaf) -- **uv.lock:** update simplejson source URLs and wheel paths - [d5b3ce3](https://github.com/liblaf/apple/commit/d5b3ce31f877ebdd88a08688c9ba8256fb06d647) by [@liblaf](https://github.com/liblaf) -- **warp:** correct Hessian operations and add comprehensive tests - [11588aa](https://github.com/liblaf/apple/commit/11588aa9d36eabf535b811b02c8f0360efbc9784) by [@liblaf](https://github.com/liblaf) -- **warp:** properly convert numpy arrays with matrix/vector dtypes - [5586617](https://github.com/liblaf/apple/commit/55866172d56befdfe8280ea8a4e5dd30c9362639) by [@liblaf](https://github.com/liblaf) +- **(data)** update md5 hashes and sizes for input and target VTU files - [e1b9558](https://github.com/liblaf/apple/commit/e1b9558293268340ffcc51a7fee8dea71d89fde7) by [@liblaf](https://github.com/liblaf) +- **(deps)** update and simplify dependencies - [dcbc065](https://github.com/liblaf/apple/commit/dcbc065ed738f67d1301ba6b7e42c897bbfdc257) by [@liblaf](https://github.com/liblaf) +- **(deps)** update dependency jax to >=0.7,<0.8 (#49) - [05e9451](https://github.com/liblaf/apple/commit/05e9451f9d332c01d257a733d0341323f564c02f) by [@renovate[bot]](https://github.com/apps/renovate) +- **(deps)** update dependency beartype to >=0.22,<0.23 (#55) - [40e7a51](https://github.com/liblaf/apple/commit/40e7a5139ce5302d86da6eddb967d7e2523c0a94) by [@renovate[bot]](https://github.com/apps/renovate) +- **(jax)** Correct activation transformation and add relative energy to PNCG - [0cf40cc](https://github.com/liblaf/apple/commit/0cf40cc71944111bffa5ab4a20e2586ee8444386) by [@liblaf](https://github.com/liblaf) +- **(jax/math/rotation)** correct sign handling in SVD-based rotation computation - [76eea15](https://github.com/liblaf/apple/commit/76eea158a320b49a059c597a09c3acccf0ad219c) by [@liblaf](https://github.com/liblaf) +- **(uv.lock)** update simplejson source URLs and wheel paths - [d5b3ce3](https://github.com/liblaf/apple/commit/d5b3ce31f877ebdd88a08688c9ba8256fb06d647) by [@liblaf](https://github.com/liblaf) +- **(warp)** correct Hessian operations and add comprehensive tests - [11588aa](https://github.com/liblaf/apple/commit/11588aa9d36eabf535b811b02c8f0360efbc9784) by [@liblaf](https://github.com/liblaf) +- **(warp)** properly convert numpy arrays with matrix/vector dtypes - [5586617](https://github.com/liblaf/apple/commit/55866172d56befdfe8280ea8a4e5dd30c9362639) by [@liblaf](https://github.com/liblaf) ### πŸ“ Documentation -- **README:** update banner and badge links - [ac14a00](https://github.com/liblaf/apple/commit/ac14a00c495c8c32fa2b7c122f02012becd3716a) by [@liblaf](https://github.com/liblaf) -- **readme:** update socialify badge with transparent pattern - [0339381](https://github.com/liblaf/apple/commit/033938180ea6031aaa93b28a7089e92dd8218efd) by [@liblaf](https://github.com/liblaf) - -### β™» Code Refactoring - -- **examples:** clean up dynamics examples - [6b29fa8](https://github.com/liblaf/apple/commit/6b29fa8881f4f57cfdd31419ac1fad62577dac1e) by [@liblaf](https://github.com/liblaf) -- **jax:** move tree utilities to jax.tree module - [38966d1](https://github.com/liblaf/apple/commit/38966d1dc74667ea8a21b3511ce3989505ff7be5) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure core components for performance - [292835f](https://github.com/liblaf/apple/commit/292835f03449c0bd7421d8b3e4fb14ba0d3fb1ca) by [@liblaf](https://github.com/liblaf) -- **sim:** simplify DOFs and attribute access - [e5fee29](https://github.com/liblaf/apple/commit/e5fee299a8dc1b0f364aeeb6b20dd22fc5baac7f) by [@liblaf](https://github.com/liblaf) -- **sim:** simplify actor API and rename DOF/Dirichlet properties - [bc99c4a](https://github.com/liblaf/apple/commit/bc99c4a70388ee993646308c777c2245a3187f1f) by [@liblaf](https://github.com/liblaf) -- **sim:** improve simulation components - [46593af](https://github.com/liblaf/apple/commit/46593aff9e80000ba7507f0a3bdf06d97a7bc68f) by [@liblaf](https://github.com/liblaf) -- **state:** simplify state updates and container implementations - [f007af5](https://github.com/liblaf/apple/commit/f007af5f23fe8bfd64488f3b6d18487651c62f74) by [@liblaf](https://github.com/liblaf) -- **struct:** migrate to Equinox PyTree system - [a5e4888](https://github.com/liblaf/apple/commit/a5e488899aed60472e929ce0a6bdc711708a1ccc) by [@liblaf](https://github.com/liblaf) -- **struct:** replace equinox-based PyTree with attrs-based implementation - [d25aaba](https://github.com/liblaf/apple/commit/d25aaba52575d0c7f82f33c453b3280e5e9f1a5d) by [@liblaf](https://github.com/liblaf) -- **warp:** improve type flexibility and add utility functions - [c9d66c6](https://github.com/liblaf/apple/commit/c9d66c621026a0556eadde03b8b45c2bec1ac12f) by [@liblaf](https://github.com/liblaf) +- **(README)** update banner and badge links - [ac14a00](https://github.com/liblaf/apple/commit/ac14a00c495c8c32fa2b7c122f02012becd3716a) by [@liblaf](https://github.com/liblaf) +- **(readme)** update socialify badge with transparent pattern - [0339381](https://github.com/liblaf/apple/commit/033938180ea6031aaa93b28a7089e92dd8218efd) by [@liblaf](https://github.com/liblaf) + +### ♻️ Code Refactoring + +- **(examples)** clean up dynamics examples - [6b29fa8](https://github.com/liblaf/apple/commit/6b29fa8881f4f57cfdd31419ac1fad62577dac1e) by [@liblaf](https://github.com/liblaf) +- **(jax)** move tree utilities to jax.tree module - [38966d1](https://github.com/liblaf/apple/commit/38966d1dc74667ea8a21b3511ce3989505ff7be5) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure core components for performance - [292835f](https://github.com/liblaf/apple/commit/292835f03449c0bd7421d8b3e4fb14ba0d3fb1ca) by [@liblaf](https://github.com/liblaf) +- **(sim)** simplify DOFs and attribute access - [e5fee29](https://github.com/liblaf/apple/commit/e5fee299a8dc1b0f364aeeb6b20dd22fc5baac7f) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** simplify actor API and rename DOF/Dirichlet properties - [bc99c4a](https://github.com/liblaf/apple/commit/bc99c4a70388ee993646308c777c2245a3187f1f) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** improve simulation components - [46593af](https://github.com/liblaf/apple/commit/46593aff9e80000ba7507f0a3bdf06d97a7bc68f) by [@liblaf](https://github.com/liblaf) +- **(state)** **\[breaking\]** simplify state updates and container implementations - [f007af5](https://github.com/liblaf/apple/commit/f007af5f23fe8bfd64488f3b6d18487651c62f74) by [@liblaf](https://github.com/liblaf) +- **(struct)** **\[breaking\]** migrate to Equinox PyTree system - [a5e4888](https://github.com/liblaf/apple/commit/a5e488899aed60472e929ce0a6bdc711708a1ccc) by [@liblaf](https://github.com/liblaf) +- **(struct)** **\[breaking\]** replace equinox-based PyTree with attrs-based implementation - [d25aaba](https://github.com/liblaf/apple/commit/d25aaba52575d0c7f82f33c453b3280e5e9f1a5d) by [@liblaf](https://github.com/liblaf) +- **(warp)** improve type flexibility and add utility functions - [c9d66c6](https://github.com/liblaf/apple/commit/c9d66c621026a0556eadde03b8b45c2bec1ac12f) by [@liblaf](https://github.com/liblaf) - refactor code structure and remove redundant changes - [3380053](https://github.com/liblaf/apple/commit/33800534f5952a7f5eb5aa5331af5feb8b22ba20) by [@liblaf](https://github.com/liblaf) - Update dependencies and refactor pytree registration - [d685f16](https://github.com/liblaf/apple/commit/d685f16b9f87e65f1575b1fab98282098b4754eb) by [@liblaf](https://github.com/liblaf) ### βœ… Tests -- **benchmark:** Add volume aggregation benchmarks for Warp and JAX - [4631a1e](https://github.com/liblaf/apple/commit/4631a1e586a62c232df760a0bd37314500f68a55) by [@liblaf](https://github.com/liblaf) -- **optim:** add tests for MinimizerScipy and refactor Objective partial method - [5eb4ac3](https://github.com/liblaf/apple/commit/5eb4ac3c79de2c79ab46f49cac343032a7b7eac1) by [@liblaf](https://github.com/liblaf) +- **(benchmark)** Add volume aggregation benchmarks for Warp and JAX - [4631a1e](https://github.com/liblaf/apple/commit/4631a1e586a62c232df760a0bd37314500f68a55) by [@liblaf](https://github.com/liblaf) +- **(optim)** add tests for MinimizerScipy and refactor Objective partial method - [5eb4ac3](https://github.com/liblaf/apple/commit/5eb4ac3c79de2c79ab46f49cac343032a7b7eac1) by [@liblaf](https://github.com/liblaf) - disable JIT in scipy minimizer tests and adjust tolerances - [fdc27be](https://github.com/liblaf/apple/commit/fdc27be23b633c316b4c632c6719d112a42dcda7) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors @@ -207,43 +268,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@liblaf](https://github.com/liblaf) - [@renovate[bot]](https://github.com/apps/renovate) -## [0.3.0](https://github.com/liblaf/apple/releases/tag/v0.3.0) - 2025-07-12 +## [v0.3.0](https://github.com/liblaf/apple/releases/tag/v0.3.0) - 2025-07-12 ### πŸ’₯ BREAKING CHANGES - **(jax)** Changes to PyTree registration system and removal - of JitWrapped type may require updates to dependent code. JIT compilation - behavior may change due to removed static_argnames parameters. - [32147c2](https://github.com/liblaf/apple/commit/32147c2b83f8d8ee0b3e6b0d62b29a1c9d236ef3) by [@liblaf](https://github.com/liblaf) +of JitWrapped type may require updates to dependent code. JIT compilation +behavior may change due to removed static_argnames parameters. - [32147c2](https://github.com/liblaf/apple/commit/32147c2b83f8d8ee0b3e6b0d62b29a1c9d236ef3) by [@liblaf](https://github.com/liblaf) ### ✨ Features -- **sim:** enhance free-falling example with energy tracking - [8895f79](https://github.com/liblaf/apple/commit/8895f79b9446a5bd5df20f366331fd4d623962c4) by [@liblaf](https://github.com/liblaf) -- **sim:** add energy tracking callback and improve optimizer - [02b5003](https://github.com/liblaf/apple/commit/02b5003931e1f9cb2e0a346b7daa616c02a98a4a) by [@liblaf](https://github.com/liblaf) +- **(sim)** enhance free-falling example with energy tracking - [8895f79](https://github.com/liblaf/apple/commit/8895f79b9446a5bd5df20f366331fd4d623962c4) by [@liblaf](https://github.com/liblaf) +- **(sim)** add energy tracking callback and improve optimizer - [02b5003](https://github.com/liblaf/apple/commit/02b5003931e1f9cb2e0a346b7daa616c02a98a4a) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **jax:** enable filter by default in jit wrapper - [dfd7641](https://github.com/liblaf/apple/commit/dfd7641a020e089275de1ba5cc7096c07c769b8d) by [@liblaf](https://github.com/liblaf) +- **(jax)** enable filter by default in jit wrapper - [dfd7641](https://github.com/liblaf/apple/commit/dfd7641a020e089275de1ba5cc7096c07c769b8d) by [@liblaf](https://github.com/liblaf) -### β™» Code Refactoring +### ♻️ Code Refactoring -- **examples:** adjust material and optimization parameters - [67cf83d](https://github.com/liblaf/apple/commit/67cf83d6ddf0547083535d4039c5a6d9e612ce05) by [@liblaf](https://github.com/liblaf) -- **jax:** simplify PyTree registration and jit utilities - [32147c2](https://github.com/liblaf/apple/commit/32147c2b83f8d8ee0b3e6b0d62b29a1c9d236ef3) by [@liblaf](https://github.com/liblaf) +- **(examples)** adjust material and optimization parameters - [67cf83d](https://github.com/liblaf/apple/commit/67cf83d6ddf0547083535d4039c5a6d9e612ce05) by [@liblaf](https://github.com/liblaf) +- **(jax)** **\[breaking\]** simplify PyTree registration and jit utilities - [32147c2](https://github.com/liblaf/apple/commit/32147c2b83f8d8ee0b3e6b0d62b29a1c9d236ef3) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.2.1](https://github.com/liblaf/apple/releases/tag/v0.2.1) - 2025-07-04 +## [v0.2.1](https://github.com/liblaf/apple/releases/tag/v0.2.1) - 2025-07-04 ### ✨ Features -- **examples:** add collision simulations and improve physics - [10c6916](https://github.com/liblaf/apple/commit/10c6916acf633d07e5bb01749b381b28d293dfc3) by [@liblaf](https://github.com/liblaf) +- **(examples)** add collision simulations and improve physics - [10c6916](https://github.com/liblaf/apple/commit/10c6916acf633d07e5bb01749b381b28d293dfc3) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **deps:** update dependency python to 3.13.\* (#18) - [4643411](https://github.com/liblaf/apple/commit/46434111bdfe0626f7a7ea89ac7a8cc2e2e18516) by [@renovate[bot]](https://github.com/apps/renovate) in [#18](https://github.com/liblaf/apple/pull/18) -- **deps:** update dependency python to 3.13.\* (#30) - [6aebf70](https://github.com/liblaf/apple/commit/6aebf70ecbbdb92290aa21f317c84e02335659e7) by [@renovate[bot]](https://github.com/apps/renovate) in [#30](https://github.com/liblaf/apple/pull/30) +- **(deps)** update dependency python to 3.13.* (#18) - [4643411](https://github.com/liblaf/apple/commit/46434111bdfe0626f7a7ea89ac7a8cc2e2e18516) by [@renovate[bot]](https://github.com/apps/renovate) +- **(deps)** update dependency python to 3.13.* (#30) - [6aebf70](https://github.com/liblaf/apple/commit/6aebf70ecbbdb92290aa21f317c84e02335659e7) by [@renovate[bot]](https://github.com/apps/renovate) ### ❀️ Contributors @@ -251,155 +312,155 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@renovate[bot]](https://github.com/apps/renovate) - [@liblaf](https://github.com/liblaf) -## [0.2.0](https://github.com/liblaf/apple/releases/tag/v0.2.0) - 2025-07-02 +## [v0.2.0](https://github.com/liblaf/apple/releases/tag/v0.2.0) - 2025-07-02 ### πŸ’₯ BREAKING CHANGES - **(collision)** Callback signature now includes scene parameter. Actor.from_pyvista - now defaults to grad=True. Region.from_geometry requires explicit grad parameter. - [bb37387](https://github.com/liblaf/apple/commit/bb37387384334dc6a221344dc4b6424f3b34a30a) by [@liblaf](https://github.com/liblaf) +now defaults to grad=True. Region.from_geometry requires explicit grad parameter. - [bb37387](https://github.com/liblaf/apple/commit/bb37387384334dc6a221344dc4b6424f3b34a30a) by [@liblaf](https://github.com/liblaf) ### ✨ Features -- **collision:** add Hessian calculations and improve PNCG - [bb37387](https://github.com/liblaf/apple/commit/bb37387384334dc6a221344dc4b6424f3b34a30a) by [@liblaf](https://github.com/liblaf) -- **sim:** add free-fall example and center of mass utils - [7c1f1d4](https://github.com/liblaf/apple/commit/7c1f1d4a5cdf8a8417aac9525356bdaf9fcc6f8f) by [@liblaf](https://github.com/liblaf) +- **(collision)** **\[breaking\]** add Hessian calculations and improve PNCG - [bb37387](https://github.com/liblaf/apple/commit/bb37387384334dc6a221344dc4b6424f3b34a30a) by [@liblaf](https://github.com/liblaf) +- **(sim)** add free-fall example and center of mass utils - [7c1f1d4](https://github.com/liblaf/apple/commit/7c1f1d4a5cdf8a8417aac9525356bdaf9fcc6f8f) by [@liblaf](https://github.com/liblaf) ### ❀️ Contributors - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.1.0](https://github.com/liblaf/apple/releases/tag/v0.1.0) - 2025-07-01 +## [v0.1.0](https://github.com/liblaf/apple/releases/tag/v0.1.0) - 2025-07-01 ### πŸ’₯ BREAKING CHANGES -- next (#24) - [7620f38](https://github.com/liblaf/apple/commit/7620f386ff889b1a76bc3b919f603bc325213d81) by [@liblaf](https://github.com/liblaf) in [#24](https://github.com/liblaf/apple/pull/24) +- next (#24) - [7620f38](https://github.com/liblaf/apple/commit/7620f386ff889b1a76bc3b919f603bc325213d81) by [@liblaf](https://github.com/liblaf) - **(simulation)** Modifies physics simulation API including Config structure. - Requires updates to existing simulation code and adds new dependencies. - [aa9ae7a](https://github.com/liblaf/apple/commit/aa9ae7a5385d344b80d505f8c9388c4f950fc594) by [@liblaf](https://github.com/liblaf) +Requires updates to existing simulation code and adds new dependencies. - [aa9ae7a](https://github.com/liblaf/apple/commit/aa9ae7a5385d344b80d505f8c9388c4f950fc594) by [@liblaf](https://github.com/liblaf) - **(struct)** All classes using flax.struct need to migrate to the new - Node system with appropriate field types. Field handling and PyTree - registration behavior has changed significantly. - [80d15a4](https://github.com/liblaf/apple/commit/80d15a40cef0e9787fffe4a36c85dca629caf5a2) by [@liblaf](https://github.com/liblaf) +Node system with appropriate field types. Field handling and PyTree +registration behavior has changed significantly. - [80d15a4](https://github.com/liblaf/apple/commit/80d15a40cef0e9787fffe4a36c85dca629caf5a2) by [@liblaf](https://github.com/liblaf) - **(sim)** Major restructuring of simulation API including: - Field and Object interfaces changed - New required dependencies (felupe) - Removed legacy flax.struct usage - Modified core method signatures - [885fd8c](https://github.com/liblaf/apple/commit/885fd8c730db5b96ea876d58922202e8e9e2b4c2) by [@liblaf](https://github.com/liblaf) - **(sim)** Changes to Element, Geometry and - Region interfaces require updates in dependent code. - [3539cea](https://github.com/liblaf/apple/commit/3539cea691d29b3e97e2b477b21f40980338c589) by [@liblaf](https://github.com/liblaf) +Region interfaces require updates in dependent code. - [3539cea](https://github.com/liblaf/apple/commit/3539cea691d29b3e97e2b477b21f40980338c589) by [@liblaf](https://github.com/liblaf) - **(sim)** Changes to geometry and region class structure. - Existing code using Geometry ABC or old region classes will need - updates. Mesh access now through 'pyvista' property instead of - 'mesh'. - [53fbd66](https://github.com/liblaf/apple/commit/53fbd66b6a55005251b70863dbbaf606fd78a620) by [@liblaf](https://github.com/liblaf) +Existing code using Geometry ABC or old region classes will need +updates. Mesh access now through 'pyvista' property instead of +'mesh'. - [53fbd66](https://github.com/liblaf/apple/commit/53fbd66b6a55005251b70863dbbaf606fd78a620) by [@liblaf](https://github.com/liblaf) - **(sim)** Many class locations have changed and APIs were reorganized. - Update imports and implementations accordingly. - [bdbe382](https://github.com/liblaf/apple/commit/bdbe3824d4a0e57ba96e4bc82d477eb934492259) by [@liblaf](https://github.com/liblaf) +Update imports and implementations accordingly. - [bdbe382](https://github.com/liblaf/apple/commit/bdbe3824d4a0e57ba96e4bc82d477eb934492259) by [@liblaf](https://github.com/liblaf) - **(sim)** Entire simulation module interface has changed. - Existing code using old Field, Object, or Energy classes will - need to be updated to new architecture. Major version bump - required for dependent packages. - [a0e2108](https://github.com/liblaf/apple/commit/a0e21080325a8cff8a1fb63fc2d724eaf9f487a6) by [@liblaf](https://github.com/liblaf) +Existing code using old Field, Object, or Energy classes will +need to be updated to new architecture. Major version bump +required for dependent packages. - [a0e2108](https://github.com/liblaf/apple/commit/a0e21080325a8cff8a1fb63fc2d724eaf9f487a6) by [@liblaf](https://github.com/liblaf) - **(sim)** Inertia now requires sim.Energy interface - with deps/with_deps methods. Energy calculation methods - now take additional params argument. - [f4d2e8f](https://github.com/liblaf/apple/commit/f4d2e8f552ece5466f35c1961a70326573c42972) by [@liblaf](https://github.com/liblaf) +with deps/with_deps methods. Energy calculation methods +now take additional params argument. - [f4d2e8f](https://github.com/liblaf/apple/commit/f4d2e8f552ece5466f35c1961a70326573c42972) by [@liblaf](https://github.com/liblaf) - **(core)** Requires updates to all code using custom PyTree, - field, and data structure implementations. Field access patterns - and tree operations have changed significantly. - [e774eeb](https://github.com/liblaf/apple/commit/e774eeb4ea3a027bde3fddbf9b84dab701a17237) by [@liblaf](https://github.com/liblaf) +field, and data structure implementations. Field access patterns +and tree operations have changed significantly. - [e774eeb](https://github.com/liblaf/apple/commit/e774eeb4ea3a027bde3fddbf9b84dab701a17237) by [@liblaf](https://github.com/liblaf) - **(sim)** Major API changes in simulation core including: - Field -> AbstractField/Field/FieldGrad hierarchy - Changed optimization interface - Modified scene and object structure - Updated dependency requirements - [b967f7f](https://github.com/liblaf/apple/commit/b967f7fb6705c888db9de989e13330e853f279d9) by [@liblaf](https://github.com/liblaf) - **(tree)** Tree utilities have moved from liblaf.apple.struct.tree_util - to liblaf.apple.tree. Update imports accordingly. Pytree registration - behavior may differ for existing tree structures. - [314f218](https://github.com/liblaf/apple/commit/314f218ef59f92df88715183d7a63bb09718e878) by [@liblaf](https://github.com/liblaf) +to liblaf.apple.tree. Update imports accordingly. Pytree registration +behavior may differ for existing tree structures. - [314f218](https://github.com/liblaf/apple/commit/314f218ef59f92df88715183d7a63bb09718e878) by [@liblaf](https://github.com/liblaf) - **(dictutils/tree)** tree.mapping renamed to tree.container. Update any - references to the old name in your code. - [85ef3f1](https://github.com/liblaf/apple/commit/85ef3f1d0cb39a9f8da1ee1a15b4e0fa397bb330) by [@liblaf](https://github.com/liblaf) +references to the old name in your code. - [85ef3f1](https://github.com/liblaf/apple/commit/85ef3f1d0cb39a9f8da1ee1a15b4e0fa397bb330) by [@liblaf](https://github.com/liblaf) - **(sim)** This restructures many core APIs including: - Removal of old simulation core files - Changes to geometry and element interfaces - New dict utility implementations - Reorganized module hierarchy - [79da255](https://github.com/liblaf/apple/commit/79da255851e0ce09351c22d125a6d726c3b7b60f) by [@liblaf](https://github.com/liblaf) - **(optim)** Optimization module imports and base classes - have been reorganized. Update imports from: - `_abc` -> `optimizer`/`problem` - `_pncg` -> `pncg` - [11900ed](https://github.com/liblaf/apple/commit/11900edb9ed023841933a0590381448b96034688) by [@liblaf](https://github.com/liblaf) +have been reorganized. Update imports from: +`_abc` -> `optimizer`/`problem` +`_pncg` -> `pncg` - [11900ed](https://github.com/liblaf/apple/commit/11900edb9ed023841933a0590381448b96034688) by [@liblaf](https://github.com/liblaf) - **(sim)** `Object` renamed to `Actor` and geometry interfaces - modified. Update all simulation code using these components. - [69b7e5b](https://github.com/liblaf/apple/commit/69b7e5b7b40fce9d181636fc79f3d6df890540d2) by [@liblaf](https://github.com/liblaf) +modified. Update all simulation code using these components. - [69b7e5b](https://github.com/liblaf/apple/commit/69b7e5b7b40fce9d181636fc79f3d6df890540d2) by [@liblaf](https://github.com/liblaf) - **(optim)** - Removed index-related utilities (Index, IndexArray, etc.) - Changed PNCG optimizer interface and parameters - Added required protocol methods for optimization problems - [6dcada1](https://github.com/liblaf/apple/commit/6dcada1fb8b5da19ea7d6c20822998d58a1bebef) by [@liblaf](https://github.com/liblaf) - **(sim)** refactor and enhance simulation framework - [620906a](https://github.com/liblaf/apple/commit/620906ad20361542fc33c7a9a031ba8cc96ea2b7) by [@liblaf](https://github.com/liblaf) - **(sim)** Removed Gravity/Inertia energy classes, - changed collision API, requires warp dependency. - Update energy imports and collision handling code. - [9d1ffc4](https://github.com/liblaf/apple/commit/9d1ffc45bcc7f3f6e937fdbc82e206b5b4fd19a2) by [@liblaf](https://github.com/liblaf) +changed collision API, requires warp dependency. +Update energy imports and collision handling code. - [9d1ffc4](https://github.com/liblaf/apple/commit/9d1ffc45bcc7f3f6e937fdbc82e206b5b4fd19a2) by [@liblaf](https://github.com/liblaf) - **(sim)** Physics module (CollisionRigidSoft, Domain, Energy, Field, - Geometry, Scene) and related APIs have been removed. Use the new sim system instead. - Update any references to `implemented()` to use `is_implemented()`. - [ad644d5](https://github.com/liblaf/apple/commit/ad644d560a7367f8924b97cd8b7e7ee72245010c) by [@liblaf](https://github.com/liblaf) +Geometry, Scene) and related APIs have been removed. Use the new sim system instead. +Update any references to `implemented()` to use `is_implemented()`. - [ad644d5](https://github.com/liblaf/apple/commit/ad644d560a7367f8924b97cd8b7e7ee72245010c) by [@liblaf](https://github.com/liblaf) - **(sim)** - Removed testing module and its imports - Changed energy class interfaces to use components - SceneState replaced with State class - Actor plugins replaced with component system - [1a38a3c](https://github.com/liblaf/apple/commit/1a38a3c3502d07ce0a361991878352d895950094) by [@liblaf](https://github.com/liblaf) - **(collision)** CollisionVertFace interface changed with new required - parameters. Actor initialization now requires explicit collision mesh - handling. - [971cbe2](https://github.com/liblaf/apple/commit/971cbe2c8f8f2d1f51421b6eb3aa8fb89eec4485) by [@liblaf](https://github.com/liblaf) +parameters. Actor initialization now requires explicit collision mesh +handling. - [971cbe2](https://github.com/liblaf/apple/commit/971cbe2c8f8f2d1f51421b6eb3aa8fb89eec4485) by [@liblaf](https://github.com/liblaf) ### ✨ Features -- **apple:** add AbstractMinimizeProblem and fix_winding utility - [c661b07](https://github.com/liblaf/apple/commit/c661b07ad722c844e4fc1d52f53aebeec3d4a237) by [@liblaf](https://github.com/liblaf) -- **dictutils,tree:** add FrozenDict and ArrayMixin - [dee4731](https://github.com/liblaf/apple/commit/dee473197b2b4638fb2da7859264ca76331958c3) by [@liblaf](https://github.com/liblaf) -- **dictutils/tree:** add dictionary utilities and improve container fields - [85ef3f1](https://github.com/liblaf/apple/commit/85ef3f1d0cb39a9f8da1ee1a15b4e0fa397bb330) by [@liblaf](https://github.com/liblaf) -- **dynamics:** add dynamic simulation capabilities to bunny example - [24b60bd](https://github.com/liblaf/apple/commit/24b60bd65306e98528694cf17495c877c9a4c35e) by [@liblaf](https://github.com/liblaf) -- **dynamics:** add gravity simulation with bunny example - [9134b72](https://github.com/liblaf/apple/commit/9134b72f0a2459b0e0ad1c0b637a4138edf33261) by [@liblaf](https://github.com/liblaf) -- **dynamics:** add collision example and update simulation parameters - [3906dcb](https://github.com/liblaf/apple/commit/3906dcb89ed3bcf0ddf76bc13e6afd5a94a53a65) by [@liblaf](https://github.com/liblaf) -- **dynamics:** enhance collision detection with animation and visualization - [edd25ce](https://github.com/liblaf/apple/commit/edd25ce18d231be5d45c10c9a6c06d6675a67bee) by [@liblaf](https://github.com/liblaf) -- **jaw-motion:** add jaw motion simulation experiment - [213362d](https://github.com/liblaf/apple/commit/213362d324b09e3e920a771453553a4ce0e0bf0b) by [@liblaf](https://github.com/liblaf) -- **jaw-motion:** add muscle activation simulation - [8a4a95f](https://github.com/liblaf/apple/commit/8a4a95f9d21536405e3d4171e10f30380bb13365) by [@liblaf](https://github.com/liblaf) -- **optim:** add JIT support and Hessian diagonal computation - [4aea353](https://github.com/liblaf/apple/commit/4aea353aff08ff3663a12e480239e1c3083c6551) by [@liblaf](https://github.com/liblaf) -- **physics:** restructure physics module with new domain and field system - [07b2823](https://github.com/liblaf/apple/commit/07b2823befd1f28c7d1813821d3821c05dd43efe) by [@liblaf](https://github.com/liblaf) -- **physics:** refactor field system and add dynamics support - [b9e5e01](https://github.com/liblaf/apple/commit/b9e5e01ed807ff8acd3ac50adae0ea2c76264dd7) by [@liblaf](https://github.com/liblaf) -- **physics:** enhance scene optimization and inertia calculations - [5fa2302](https://github.com/liblaf/apple/commit/5fa2302511317b002e7eaf835706ab9501b4c416) by [@liblaf](https://github.com/liblaf) -- **sim:** refactor and enhance simulation framework - [620906a](https://github.com/liblaf/apple/commit/620906ad20361542fc33c7a9a031ba8cc96ea2b7) by [@liblaf](https://github.com/liblaf) -- **sim:** implement new collision detection system - [9d1ffc4](https://github.com/liblaf/apple/commit/9d1ffc45bcc7f3f6e937fdbc82e206b5b4fd19a2) by [@liblaf](https://github.com/liblaf) -- **simulation:** add rigid-soft collision handling and simulation framework - [aa9ae7a](https://github.com/liblaf/apple/commit/aa9ae7a5385d344b80d505f8c9388c4f950fc594) by [@liblaf](https://github.com/liblaf) -- **strain:** optimize and refactor tetrahedral strain calculations - [fe2218f](https://github.com/liblaf/apple/commit/fe2218f41e74d767a561da3822dcb7d2c668d82f) by [@liblaf](https://github.com/liblaf) -- **strain:** add naive implementations of Qs and h3_diag functions - [a8bf975](https://github.com/liblaf/apple/commit/a8bf975cd90ddfb94148c996818e6c509323428a) by [@liblaf](https://github.com/liblaf) +- **(apple)** add AbstractMinimizeProblem and fix_winding utility - [c661b07](https://github.com/liblaf/apple/commit/c661b07ad722c844e4fc1d52f53aebeec3d4a237) by [@liblaf](https://github.com/liblaf) +- **(dictutils,tree)** add FrozenDict and ArrayMixin - [dee4731](https://github.com/liblaf/apple/commit/dee473197b2b4638fb2da7859264ca76331958c3) by [@liblaf](https://github.com/liblaf) +- **(dictutils/tree)** **\[breaking\]** add dictionary utilities and improve container fields - [85ef3f1](https://github.com/liblaf/apple/commit/85ef3f1d0cb39a9f8da1ee1a15b4e0fa397bb330) by [@liblaf](https://github.com/liblaf) +- **(dynamics)** add dynamic simulation capabilities to bunny example - [24b60bd](https://github.com/liblaf/apple/commit/24b60bd65306e98528694cf17495c877c9a4c35e) by [@liblaf](https://github.com/liblaf) +- **(dynamics)** add gravity simulation with bunny example - [9134b72](https://github.com/liblaf/apple/commit/9134b72f0a2459b0e0ad1c0b637a4138edf33261) by [@liblaf](https://github.com/liblaf) +- **(dynamics)** add collision example and update simulation parameters - [3906dcb](https://github.com/liblaf/apple/commit/3906dcb89ed3bcf0ddf76bc13e6afd5a94a53a65) by [@liblaf](https://github.com/liblaf) +- **(dynamics)** enhance collision detection with animation and visualization - [edd25ce](https://github.com/liblaf/apple/commit/edd25ce18d231be5d45c10c9a6c06d6675a67bee) by [@liblaf](https://github.com/liblaf) +- **(jaw-motion)** add jaw motion simulation experiment - [213362d](https://github.com/liblaf/apple/commit/213362d324b09e3e920a771453553a4ce0e0bf0b) by [@liblaf](https://github.com/liblaf) +- **(jaw-motion)** add muscle activation simulation - [8a4a95f](https://github.com/liblaf/apple/commit/8a4a95f9d21536405e3d4171e10f30380bb13365) by [@liblaf](https://github.com/liblaf) +- **(optim)** add JIT support and Hessian diagonal computation - [4aea353](https://github.com/liblaf/apple/commit/4aea353aff08ff3663a12e480239e1c3083c6551) by [@liblaf](https://github.com/liblaf) +- **(physics)** restructure physics module with new domain and field system - [07b2823](https://github.com/liblaf/apple/commit/07b2823befd1f28c7d1813821d3821c05dd43efe) by [@liblaf](https://github.com/liblaf) +- **(physics)** refactor field system and add dynamics support - [b9e5e01](https://github.com/liblaf/apple/commit/b9e5e01ed807ff8acd3ac50adae0ea2c76264dd7) by [@liblaf](https://github.com/liblaf) +- **(physics)** enhance scene optimization and inertia calculations - [5fa2302](https://github.com/liblaf/apple/commit/5fa2302511317b002e7eaf835706ab9501b4c416) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** refactor and enhance simulation framework - [620906a](https://github.com/liblaf/apple/commit/620906ad20361542fc33c7a9a031ba8cc96ea2b7) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** implement new collision detection system - [9d1ffc4](https://github.com/liblaf/apple/commit/9d1ffc45bcc7f3f6e937fdbc82e206b5b4fd19a2) by [@liblaf](https://github.com/liblaf) +- **(simulation)** **\[breaking\]** add rigid-soft collision handling and simulation framework - [aa9ae7a](https://github.com/liblaf/apple/commit/aa9ae7a5385d344b80d505f8c9388c4f950fc594) by [@liblaf](https://github.com/liblaf) +- **(strain)** optimize and refactor tetrahedral strain calculations - [fe2218f](https://github.com/liblaf/apple/commit/fe2218f41e74d767a561da3822dcb7d2c668d82f) by [@liblaf](https://github.com/liblaf) +- **(strain)** add naive implementations of Qs and h3_diag functions - [a8bf975](https://github.com/liblaf/apple/commit/a8bf975cd90ddfb94148c996818e6c509323428a) by [@liblaf](https://github.com/liblaf) - add benchmark tests and material models for FEM analysis - [888ffd8](https://github.com/liblaf/apple/commit/888ffd899714559008f5a7b6ee1b0fd47d8faa5b) by [@liblaf](https://github.com/liblaf) - add dynamic simulation capabilities and improve physics modeling - [07b0d1c](https://github.com/liblaf/apple/commit/07b0d1c18aa5833d9d324d4992573433cf4eb4fe) by [@liblaf](https://github.com/liblaf) -- next (#24) - [7620f38](https://github.com/liblaf/apple/commit/7620f386ff889b1a76bc3b919f603bc325213d81) by [@liblaf](https://github.com/liblaf) in [#24](https://github.com/liblaf/apple/pull/24) +- **\[breaking\]** next (#24) - [7620f38](https://github.com/liblaf/apple/commit/7620f386ff889b1a76bc3b919f603bc325213d81) by [@liblaf](https://github.com/liblaf) - add PNCG optimizer and enhance elastic energy models - [59c1612](https://github.com/liblaf/apple/commit/59c16127759c01e888980465b31f75bf1bdd74db) by [@liblaf](https://github.com/liblaf) - enhance physics simulation with Geometry class and PhaceStatic energy - [6968ad7](https://github.com/liblaf/apple/commit/6968ad78265c6f280496a4c658e201e2443c150a) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **deps:** update liblaf-grapes dependency to v0.1.28 - [68033eb](https://github.com/liblaf/apple/commit/68033ebc72eadf9e265915959c049363d2a4614f) by [@liblaf](https://github.com/liblaf) -- **deps:** update liblaf-melon dependency to v0.2.8 - [9ecefe1](https://github.com/liblaf/apple/commit/9ecefe192f31b49b1e1e10acba5a3d78ac58d343) by [@liblaf](https://github.com/liblaf) - -### β™» Code Refactoring - -- **collision:** restructure vertex-face collision system - [971cbe2](https://github.com/liblaf/apple/commit/971cbe2c8f8f2d1f51421b6eb3aa8fb89eec4485) by [@liblaf](https://github.com/liblaf) -- **core:** migrate to Equinox PyTree management - [e774eeb](https://github.com/liblaf/apple/commit/e774eeb4ea3a027bde3fddbf9b84dab701a17237) by [@liblaf](https://github.com/liblaf) -- **optim:** simplify timing callback handling and update type hints - [31a4910](https://github.com/liblaf/apple/commit/31a4910189b5d6549a77218feb4ef3d0f1b36f98) by [@liblaf](https://github.com/liblaf) -- **optim:** restructure optimization module - [11900ed](https://github.com/liblaf/apple/commit/11900edb9ed023841933a0590381448b96034688) by [@liblaf](https://github.com/liblaf) -- **optim:** rewrite PNCG with improved math utilities - [6dcada1](https://github.com/liblaf/apple/commit/6dcada1fb8b5da19ea7d6c20822998d58a1bebef) by [@liblaf](https://github.com/liblaf) -- **physics:** restructure physics problem abstraction and material models - [7a4b236](https://github.com/liblaf/apple/commit/7a4b236d24c1e8cce2c738d0552baeb64fb11572) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure finite element simulation components - [885fd8c](https://github.com/liblaf/apple/commit/885fd8c730db5b96ea876d58922202e8e9e2b4c2) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure element and geometry classes - [3539cea](https://github.com/liblaf/apple/commit/3539cea691d29b3e97e2b477b21f40980338c589) by [@liblaf](https://github.com/liblaf) -- **sim:** reorganize geometry and field systems - [53fbd66](https://github.com/liblaf/apple/commit/53fbd66b6a55005251b70863dbbaf606fd78a620) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure core components into ABCs - [bdbe382](https://github.com/liblaf/apple/commit/bdbe3824d4a0e57ba96e4bc82d477eb934492259) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure core simulation modules - [a0e2108](https://github.com/liblaf/apple/commit/a0e21080325a8cff8a1fb63fc2d724eaf9f487a6) by [@liblaf](https://github.com/liblaf) -- **sim:** migrate inertia to new framework - [f4d2e8f](https://github.com/liblaf/apple/commit/f4d2e8f552ece5466f35c1961a70326573c42972) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure core components and add collision detection - [b967f7f](https://github.com/liblaf/apple/commit/b967f7fb6705c888db9de989e13330e853f279d9) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure core modules and utilities - [79da255](https://github.com/liblaf/apple/commit/79da255851e0ce09351c22d125a6d726c3b7b60f) by [@liblaf](https://github.com/liblaf) -- **sim:** overhaul actor system and geometry handling - [69b7e5b](https://github.com/liblaf/apple/commit/69b7e5b7b40fce9d181636fc79f3d6df890540d2) by [@liblaf](https://github.com/liblaf) -- **sim:** improve physics examples and core components - [156445f](https://github.com/liblaf/apple/commit/156445fe566af413f51cebe213f089c7d660d12f) by [@liblaf](https://github.com/liblaf) -- **sim:** remove physics module and improve implementation checks - [ad644d5](https://github.com/liblaf/apple/commit/ad644d560a7367f8924b97cd8b7e7ee72245010c) by [@liblaf](https://github.com/liblaf) -- **sim:** restructure simulation components and state - [1a38a3c](https://github.com/liblaf/apple/commit/1a38a3c3502d07ce0a361991878352d895950094) by [@liblaf](https://github.com/liblaf) -- **strain:** optimize deformation gradient calculations - [6be27eb](https://github.com/liblaf/apple/commit/6be27eb6ba496231a43d72978504b88fb549f329) by [@liblaf](https://github.com/liblaf) -- **struct:** replace flax.struct with custom Node system - [80d15a4](https://github.com/liblaf/apple/commit/80d15a40cef0e9787fffe4a36c85dca629caf5a2) by [@liblaf](https://github.com/liblaf) -- **tree:** reorganize pytree utilities - [314f218](https://github.com/liblaf/apple/commit/314f218ef59f92df88715183d7a63bb09718e878) by [@liblaf](https://github.com/liblaf) +- **(deps)** update liblaf-grapes dependency to v0.1.28 - [68033eb](https://github.com/liblaf/apple/commit/68033ebc72eadf9e265915959c049363d2a4614f) by [@liblaf](https://github.com/liblaf) +- **(deps)** update liblaf-melon dependency to v0.2.8 - [9ecefe1](https://github.com/liblaf/apple/commit/9ecefe192f31b49b1e1e10acba5a3d78ac58d343) by [@liblaf](https://github.com/liblaf) + +### ♻️ Code Refactoring + +- **(collision)** **\[breaking\]** restructure vertex-face collision system - [971cbe2](https://github.com/liblaf/apple/commit/971cbe2c8f8f2d1f51421b6eb3aa8fb89eec4485) by [@liblaf](https://github.com/liblaf) +- **(core)** **\[breaking\]** migrate to Equinox PyTree management - [e774eeb](https://github.com/liblaf/apple/commit/e774eeb4ea3a027bde3fddbf9b84dab701a17237) by [@liblaf](https://github.com/liblaf) +- **(optim)** simplify timing callback handling and update type hints - [31a4910](https://github.com/liblaf/apple/commit/31a4910189b5d6549a77218feb4ef3d0f1b36f98) by [@liblaf](https://github.com/liblaf) +- **(optim)** **\[breaking\]** restructure optimization module - [11900ed](https://github.com/liblaf/apple/commit/11900edb9ed023841933a0590381448b96034688) by [@liblaf](https://github.com/liblaf) +- **(optim)** **\[breaking\]** rewrite PNCG with improved math utilities - [6dcada1](https://github.com/liblaf/apple/commit/6dcada1fb8b5da19ea7d6c20822998d58a1bebef) by [@liblaf](https://github.com/liblaf) +- **(physics)** restructure physics problem abstraction and material models - [7a4b236](https://github.com/liblaf/apple/commit/7a4b236d24c1e8cce2c738d0552baeb64fb11572) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure finite element simulation components - [885fd8c](https://github.com/liblaf/apple/commit/885fd8c730db5b96ea876d58922202e8e9e2b4c2) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure element and geometry classes - [3539cea](https://github.com/liblaf/apple/commit/3539cea691d29b3e97e2b477b21f40980338c589) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** reorganize geometry and field systems - [53fbd66](https://github.com/liblaf/apple/commit/53fbd66b6a55005251b70863dbbaf606fd78a620) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure core components into ABCs - [bdbe382](https://github.com/liblaf/apple/commit/bdbe3824d4a0e57ba96e4bc82d477eb934492259) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure core simulation modules - [a0e2108](https://github.com/liblaf/apple/commit/a0e21080325a8cff8a1fb63fc2d724eaf9f487a6) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** migrate inertia to new framework - [f4d2e8f](https://github.com/liblaf/apple/commit/f4d2e8f552ece5466f35c1961a70326573c42972) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure core components and add collision detection - [b967f7f](https://github.com/liblaf/apple/commit/b967f7fb6705c888db9de989e13330e853f279d9) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure core modules and utilities - [79da255](https://github.com/liblaf/apple/commit/79da255851e0ce09351c22d125a6d726c3b7b60f) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** overhaul actor system and geometry handling - [69b7e5b](https://github.com/liblaf/apple/commit/69b7e5b7b40fce9d181636fc79f3d6df890540d2) by [@liblaf](https://github.com/liblaf) +- **(sim)** improve physics examples and core components - [156445f](https://github.com/liblaf/apple/commit/156445fe566af413f51cebe213f089c7d660d12f) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** remove physics module and improve implementation checks - [ad644d5](https://github.com/liblaf/apple/commit/ad644d560a7367f8924b97cd8b7e7ee72245010c) by [@liblaf](https://github.com/liblaf) +- **(sim)** **\[breaking\]** restructure simulation components and state - [1a38a3c](https://github.com/liblaf/apple/commit/1a38a3c3502d07ce0a361991878352d895950094) by [@liblaf](https://github.com/liblaf) +- **(strain)** optimize deformation gradient calculations - [6be27eb](https://github.com/liblaf/apple/commit/6be27eb6ba496231a43d72978504b88fb549f329) by [@liblaf](https://github.com/liblaf) +- **(struct)** **\[breaking\]** replace flax.struct with custom Node system - [80d15a4](https://github.com/liblaf/apple/commit/80d15a40cef0e9787fffe4a36c85dca629caf5a2) by [@liblaf](https://github.com/liblaf) +- **(tree)** **\[breaking\]** reorganize pytree utilities - [314f218](https://github.com/liblaf/apple/commit/314f218ef59f92df88715183d7a63bb09718e878) by [@liblaf](https://github.com/liblaf) - reorganize configuration files and update dependencies - [b4e8d32](https://github.com/liblaf/apple/commit/b4e8d320b29592c945fa690edfe90e65ffac366a) by [@liblaf](https://github.com/liblaf) - refactor dependencies and add Object class for physics simulation - [b3dbbaf](https://github.com/liblaf/apple/commit/b3dbbaf80f8410765bcdfb3abe41e6698ae6e542) by [@liblaf](https://github.com/liblaf) ### πŸ›  Builds -- **deps:** update and relax dependency requirements - [a3e2597](https://github.com/liblaf/apple/commit/a3e259745e3a0eb49cf8ba49d7ad2d48498b56b4) by [@liblaf](https://github.com/liblaf) +- **(deps)** update and relax dependency requirements - [a3e2597](https://github.com/liblaf/apple/commit/a3e259745e3a0eb49cf8ba49d7ad2d48498b56b4) by [@liblaf](https://github.com/liblaf) - update project configuration and dependencies - [dbf4953](https://github.com/liblaf/apple/commit/dbf49536e976b10b2a129badd9fe091426725e6e) by [@liblaf](https://github.com/liblaf) - add Flax as a dependency - [97d5688](https://github.com/liblaf/apple/commit/97d5688de5e919ef986c10499975b5cc02a61c36) by [@liblaf](https://github.com/liblaf) @@ -408,22 +469,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@liblaf[bot]](https://github.com/apps/liblaf) - [@liblaf](https://github.com/liblaf) -## [0.0.3](https://github.com/liblaf/apple/releases/tag/v0.0.3) - 2025-03-23 +## [v0.0.3](https://github.com/liblaf/apple/releases/tag/v0.0.3) - 2025-03-23 ### ✨ Features -- **phace:** add animation script and simulation modules - [468c982](https://github.com/liblaf/apple/commit/468c982da85847ffe63d7deaee6d17ba22edf4f9) by [@liblaf](https://github.com/liblaf) -- **physics:** add gravity support and refactor physics problem architecture - [4f50caa](https://github.com/liblaf/apple/commit/4f50caa40dbe7ba810d311b5540b57f10293f721) by [@liblaf](https://github.com/liblaf) +- **(phace)** add animation script and simulation modules - [468c982](https://github.com/liblaf/apple/commit/468c982da85847ffe63d7deaee6d17ba22edf4f9) by [@liblaf](https://github.com/liblaf) +- **(physics)** add gravity support and refactor physics problem architecture - [4f50caa](https://github.com/liblaf/apple/commit/4f50caa40dbe7ba810d311b5540b57f10293f721) by [@liblaf](https://github.com/liblaf) - add triangle element support and Koiter shell problem - [e23525c](https://github.com/liblaf/apple/commit/e23525ce50312a3271baba8cccf706f36ca517ee) by [@liblaf](https://github.com/liblaf) - add gradient descent optimizer and update inverse problem logic - [ae27101](https://github.com/liblaf/apple/commit/ae27101f950d915e315a9659cec79a16b11ebeb3) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **deps:** update dependency jaxtyping to >=0.3,<0.4 (#14) - [467d4dd](https://github.com/liblaf/apple/commit/467d4dd7a2996f3d4c6fa377a40a72f2d611a0aa) by [@renovate[bot]](https://github.com/apps/renovate) in [#14](https://github.com/liblaf/apple/pull/14) -- **deps:** update dependency liblaf-cherries to >=0.0.6,<0.0.7 (#13) - [d773f0f](https://github.com/liblaf/apple/commit/d773f0f1aa4052bcba86f2f70d95c839b058efc9) by [@renovate[bot]](https://github.com/apps/renovate) in [#13](https://github.com/liblaf/apple/pull/13) -- **deps:** update dependency liblaf-cherries to >=0.0.8,<0.0.9 (#15) - [67099cd](https://github.com/liblaf/apple/commit/67099cda79614cc8cf2c1036ceefbffeacec10f2) by [@renovate[bot]](https://github.com/apps/renovate) in [#15](https://github.com/liblaf/apple/pull/15) +- **(deps)** update dependency jaxtyping to >=0.3,<0.4 (#14) - [467d4dd](https://github.com/liblaf/apple/commit/467d4dd7a2996f3d4c6fa377a40a72f2d611a0aa) by [@renovate[bot]](https://github.com/apps/renovate) +- **(deps)** update dependency liblaf-cherries to >=0.0.6,<0.0.7 (#13) - [d773f0f](https://github.com/liblaf/apple/commit/d773f0f1aa4052bcba86f2f70d95c839b058efc9) by [@renovate[bot]](https://github.com/apps/renovate) +- **(deps)** update dependency liblaf-cherries to >=0.0.8,<0.0.9 (#15) - [67099cd](https://github.com/liblaf/apple/commit/67099cda79614cc8cf2c1036ceefbffeacec10f2) by [@renovate[bot]](https://github.com/apps/renovate) -### β™» Code Refactoring +### ♻️ Code Refactoring - restructure physics problem implementation and optimization - [e98f4c5](https://github.com/liblaf/apple/commit/e98f4c5733f6911e24815e8b1f544c5214623a65) by [@liblaf](https://github.com/liblaf) - simplify physics problem builder pattern - [1aff338](https://github.com/liblaf/apple/commit/1aff33837cac11433ed80cd4b6f3488edf88119f) by [@liblaf](https://github.com/liblaf) @@ -434,7 +495,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@renovate[bot]](https://github.com/apps/renovate) - [@liblaf](https://github.com/liblaf) -## [0.0.2](https://github.com/liblaf/apple/releases/tag/v0.0.2) - 2025-02-24 +## [v0.0.2](https://github.com/liblaf/apple/releases/tag/v0.0.2) - 2025-02-24 ### ✨ Features @@ -442,10 +503,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### πŸ› Bug Fixes -- **deps:** update dependency liblaf-grapes to >=0.1.0,<0.1.1 (#5) - [60fb1d0](https://github.com/liblaf/apple/commit/60fb1d09e62d7f10e520f40c7c4a22956a041ce9) by [@renovate[bot]](https://github.com/apps/renovate) in [#5](https://github.com/liblaf/apple/pull/5) -- **deps:** update dependency beartype to >=0.20,<0.21 (#8) - [df34ec2](https://github.com/liblaf/apple/commit/df34ec25a774e7c6858cd579747ec972da40926b) by [@renovate[bot]](https://github.com/apps/renovate) in [#8](https://github.com/liblaf/apple/pull/8) +- **(deps)** update dependency liblaf-grapes to >=0.1.0,<0.1.1 (#5) - [60fb1d0](https://github.com/liblaf/apple/commit/60fb1d09e62d7f10e520f40c7c4a22956a041ce9) by [@renovate[bot]](https://github.com/apps/renovate) +- **(deps)** update dependency beartype to >=0.20,<0.21 (#8) - [df34ec2](https://github.com/liblaf/apple/commit/df34ec25a774e7c6858cd579747ec972da40926b) by [@renovate[bot]](https://github.com/apps/renovate) -### β™» Code Refactoring +### ♻️ Code Refactoring - reorganize and enhance abstract classes and utilities - [5f16903](https://github.com/liblaf/apple/commit/5f169036cd636ab9480e4f29004075e6af8f6939) by [@liblaf](https://github.com/liblaf) - remove unnecessary JAX configuration log - [2587b4e](https://github.com/liblaf/apple/commit/2587b4ee542fe3e47eafcefe58c9f4ca7bafd5a8) by [@liblaf](https://github.com/liblaf) @@ -456,22 +517,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@liblaf](https://github.com/liblaf) - [@renovate[bot]](https://github.com/apps/renovate) -## [0.0.1](https://github.com/liblaf/apple/releases/tag/v0.0.1) - 2025-02-16 +## [v0.0.1](https://github.com/liblaf/apple/releases/tag/v0.0.1) - 2025-02-16 ### ✨ Features -- **opt:** add PNCG minimization algorithm and refactor strain test - [91208b7](https://github.com/liblaf/apple/commit/91208b7c382933586e8900419195c939b397f5ad) by [@liblaf](https://github.com/liblaf) +- **(opt)** add PNCG minimization algorithm and refactor strain test - [91208b7](https://github.com/liblaf/apple/commit/91208b7c382933586e8900419195c939b397f5ad) by [@liblaf](https://github.com/liblaf) - add tetrahedral element FEM and rotation-variant SVD - [ef11295](https://github.com/liblaf/apple/commit/ef11295ba1f85ef18f89063abcd7694de0d0af73) by [@liblaf](https://github.com/liblaf) ### πŸ› Bug Fixes -- **deps:** update dependency liblaf-grapes to >=0.0.4,<0.0.5 (#4) - [7db122f](https://github.com/liblaf/apple/commit/7db122f9f585ac6ba3ca6900e41d1ba059e37abd) by [@renovate[bot]](https://github.com/apps/renovate) in [#4](https://github.com/liblaf/apple/pull/4) +- **(deps)** update dependency liblaf-grapes to >=0.0.4,<0.0.5 (#4) - [7db122f](https://github.com/liblaf/apple/commit/7db122f9f585ac6ba3ca6900e41d1ba059e37abd) by [@renovate[bot]](https://github.com/apps/renovate) -### β™» Code Refactoring +### ♻️ Code Refactoring - reorganize apple module structure and optimize physics simulation - [cd42fa4](https://github.com/liblaf/apple/commit/cd42fa4423b9ac8b8faeddebaad842d0a1eb8ac9) by [@liblaf](https://github.com/liblaf) -### βš™οΈ Continuous Integration +### βš™οΈ Continuous Integrations - correct syntax for `if` condition in test workflow - [b88f52e](https://github.com/liblaf/apple/commit/b88f52e6c02433c5df5148ca578d831493c18b4f) by [@liblaf](https://github.com/liblaf) @@ -481,7 +542,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [@liblaf](https://github.com/liblaf) - [@renovate[bot]](https://github.com/apps/renovate) made their first contribution in [#4](https://github.com/liblaf/apple/pull/4) -## [0.0.0](https://github.com/liblaf/apple/releases/tag/v0.0.0) - 2025-01-19 +## [v0.0.0](https://github.com/liblaf/apple/releases/tag/v0.0.0) - 2025-01-19 ### ✨ Features 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/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/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/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/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")