Skip to content

Conversation

@liblaf
Copy link
Contributor

@liblaf liblaf bot commented Oct 13, 2025

🤖 I have created a release beep boop

0.4.1 (2025-10-26)

✨ Features

  • inverse-grin: add optimizer configuration and new inverse-no-reg script (4c7d3f8)
  • warp/sim: add sparse Hessian support and improve numerical stability (61d8b07)

🐛 Bug Fixes

  • inverse-grin: update regularization weights in loss calculation (4684ce4)

📝 Documentation

  • Update documentation links (90bfed0)

♻️ Code Refactoring

  • core: Improve internal structure and update dependencies (d7c6b94)
  • exp/inverse: Simplify activation parameter to a single scalar stretch (5ea6f55)
  • exp: Improve inverse simulation inspection script (75afcff)
  • jax: Enhance robustness and consistency of optim and math modules (dd241d8)

🛠 Builds

  • deps: Upgrade JAX to 0.7 and add cholespy (35acd6d)
  • repo: Configure Git LFS for large file tracking (fbfb958)

This PR was generated with Release Please. See documentation.

@liblaf liblaf bot added automerge Merge the pull request once unit tests and other checks pass. autorelease: pending labels Oct 13, 2025
@liblaf liblaf bot force-pushed the release-please--branches--main branch from a547f5b to 54932ab Compare October 13, 2025 13:36
@github-actions
Copy link
Contributor

github-actions bot commented Oct 13, 2025

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ BASH shellcheck 1 0 0 0.3s
✅ BASH shfmt 1 0 0 0 0.63s
⚠️ COPYPASTE jscpd yes 198 no 5.66s
⚠️ JSON jsonlint 8 1 0 0.21s
✅ JSON prettier 8 0 0 0 0.72s
✅ JSON v8r 8 0 0 4.78s
⚠️ PYTHON ruff yes yes 1481 no 15.73s
⚠️ SPELL cspell 226 1 0 5.63s
✅ YAML prettier 4 0 0 0 0.81s
✅ YAML v8r 4 0 0 3.54s
✅ YAML yamllint 4 0 0 0.33s

Detailed Issues

⚠️ SPELL / cspell - 1 error
CHANGELOG.md:27:40     - Unknown word (cholespy)   -- Upgrade JAX to 0.7 and add cholespy - ([35acd6d](https:
	 Suggestions: [cholesky, Cholesky, choosey, coles, coley]
CSpell: Files checked: 225, Issues found: 1 in 1 file.


You can skip this misspellings by defining the following .cspell.json file at the root of your repository
Of course, please correct real typos before :)

{
    "version": "0.2",
    "language": "en",
    "ignorePaths": [
        "**/node_modules/**",
        "**/vscode-extension/**",
        "**/.git/**",
        "**/.pnpm-lock.json",
        ".vscode",
        "package-lock.json",
        "megalinter-reports"
    ],
    "words": [
        "cholespy"
    ]
}


You can also copy-paste megalinter-reports/LINTER_DEFAULT at the root of your repository
⚠️ COPYPASTE / jscpd - 198 errors
Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/phace/func.py [98:6 - 104:17] (6 lines, 85 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/phace/func.py [71:6 - 76:17]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap_active/_main.py [1:1 - 15:11] (14 lines, 119 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/phace/_main.py [1:1 - 15:6]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap_active/_main.py [15:11 - 39:3] (24 lines, 227 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/phace/_main.py [15:6 - 39:16]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap/func.py [43:5 - 54:5] (11 lines, 134 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/arap_active/func.py [49:6 - 60:6]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap/func.py [57:5 - 68:5] (11 lines, 137 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/arap_active/func.py [63:6 - 74:6]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap/_main.py [1:1 - 11:5] (10 lines, 100 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/phace/_main.py [1:1 - 9:2]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/arap/_main.py [23:5 - 40:2] (17 lines, 167 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/phace/_main.py [16:5 - 33:2]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [83:11 - 92:5] (9 lines, 99 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [58:11 - 67:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [92:5 - 103:4] (11 lines, 162 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [67:7 - 78:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [113:17 - 133:10] (20 lines, 262 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [58:11 - 78:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [154:2 - 169:3] (15 lines, 217 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [62:2 - 77:12]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [184:17 - 210:10] (26 lines, 359 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [149:17 - 175:10]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [220:19 - 229:4] (9 lines, 90 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [58:11 - 67:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [230:4 - 241:4] (11 lines, 171 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [92:7 - 78:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [252:25 - 261:4] (9 lines, 90 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [58:11 - 67:7]

Clone found (python):
 - src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [262:10 - 274:9] (12 lines, 188 tokens)
   src/liblaf/apple/warp/sim/energy/elastic/_elastic.py [92:7 - 104:4]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_phace_active.py [6:1 - 13:5] (7 lines, 78 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_static.py [3:1 - 12:6]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_phace_active.py [40:9 - 45:2] (5 lines, 129 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_static.py [29:9 - 34:2]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_arap_active.py [1:1 - 19:11] (18 lines, 145 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_active.py [1:1 - 19:12]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_arap_active.py [27:13 - 37:3] (10 lines, 100 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_active.py [30:9 - 40:8]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_arap_active.py [42:5 - 56:7] (14 lines, 200 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_active.py [50:5 - 64:7]

Clone found (python):
 - src/liblaf/apple/jax/sim/energy/elastic/_arap.py [3:1 - 13:5] (10 lines, 86 tokens)
   src/liblaf/apple/jax/sim/energy/elastic/_phace_static.py [3:1 - 13:12]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny-bunny/main.py [1:1 - 14:5] (13 lines, 115 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [1:1 - 14:4]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny-bunny/main.py [22:5 - 84:78] (62 lines, 768 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [22:5 - 84:8]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny-bunny/main.py [87:5 - 114:2] (27 lines, 319 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [84:4 - 111:2]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [21:5 - 35:7] (14 lines, 116 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-bunny/main.py [17:5 - 31:4]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [58:1 - 67:4] (9 lines, 151 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [31:1 - 40:3]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [67:3 - 77:9] (10 lines, 124 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [40:3 - 49:6]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [81:9 - 88:5] (7 lines, 101 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [52:9 - 59:7]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [90:4 - 100:5] (10 lines, 128 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [58:2 - 68:4]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [100:2 - 116:4] (16 lines, 181 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [68:2 - 84:10]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-bunny/main.py [116:6 - 132:5] (16 lines, 200 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [87:5 - 103:13]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-box/main.py [1:1 - 50:5] (49 lines, 490 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny/main.py [1:1 - 50:3]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-box/main.py [52:9 - 79:28] (27 lines, 359 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny/main.py [54:2 - 81:3]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-box/main.py [78:9 - 96:75] (18 lines, 224 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [49:10 - 96:8]

Clone found (python):
 - exp/2025/07/30/dynamics/collision/collision-box/main.py [104:5 - 142:10] (38 lines, 481 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny/main.py [97:8 - 105:12]

Clone found (python):
 - tests/warp/sim/energy/elastic/utils/test_hess_diag.py [9:10 - 30:15] (21 lines, 241 tokens)
   tests/warp/sim/energy/elastic/utils/test_hess_quad.py [10:6 - 31:11]

Clone found (python):
 - tests/warp/sim/energy/elastic/utils/test_hess_diag.py [87:5 - 93:13] (6 lines, 71 tokens)
   tests/warp/sim/energy/elastic/utils/test_hess_quad.py [97:5 - 103:13]

Clone found (python):
 - tests/warp/sim/energy/elastic/utils/test_hess_diag.py [94:5 - 106:11] (12 lines, 239 tokens)
   tests/warp/sim/energy/elastic/utils/test_hess_quad.py [105:5 - 117:11]

Clone found (python):
 - src/liblaf/apple/jax/sim/model/_model.py [40:10 - 48:10] (8 lines, 102 tokens)
   src/liblaf/apple/jax/sim/model/_model.py [22:4 - 30:4]

Clone found (python):
 - src/liblaf/apple/jax/sim/model/_model.py [58:2 - 66:10] (8 lines, 97 tokens)
   src/liblaf/apple/jax/sim/model/_model.py [22:2 - 30:4]

Clone found (python):
 - src/liblaf/apple/jax/optim/_minimize/_minimizer.py [77:5 - 85:2] (8 lines, 91 tokens)
   src/liblaf/apple/jax/optim/_minimize/_scipy.py [21:5 - 30:8]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [416:18 - 422:9] (6 lines, 109 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [360:16 - 366:16]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [429:15 - 434:12] (5 lines, 88 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [360:16 - 365:14]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [1:1 - 37:7] (36 lines, 317 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [1:1 - 37:10]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [37:29 - 123:9] (86 lines, 799 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [37:31 - 123:8]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [124:10 - 138:16] (14 lines, 101 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [126:11 - 140:8]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [141:5 - 211:7] (70 lines, 741 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [145:5 - 215:6]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [212:10 - 322:9] (110 lines, 968 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [218:11 - 328:8]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [333:10 - 353:2] (20 lines, 292 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [349:11 - 369:4]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [353:2 - 368:11] (15 lines, 193 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [369:2 - 384:4]

Clone found (python):
 - exp/2025/09/24/inverse-grin/src/38-inverse-cbrt.py [368:2 - 385:71] (17 lines, 189 tokens)
   exp/2025/09/24/inverse-grin/src/39-inverse-sparse.py [384

(Truncated to 10000 characters out of 36839)
⚠️ JSON / jsonlint - 1 error
File: .vscode/settings.json
Parse error on line 27, column 5:
....customTags": [    // ref: <https://squ...
----------------------^
Unexpected token "/"
⚠️ PYTHON / ruff - 1481 errors
F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/cubic/src/10-gen.py:54:29
   |
53 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
54 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
   |                             ^^^^
55 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
56 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/cubic/src/10-gen.py:55:29
   |
53 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
54 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
55 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
   |                             ^^^^
56 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
57 |         result: pv.UnstructuredGrid = physics.objects["box"].geometry
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/cubic/src/10-gen.py:56:29
   |
54 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
55 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
56 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
   |                             ^^^^^
57 |         result: pv.UnstructuredGrid = physics.objects["box"].geometry
58 |         result.point_data["solution"] = np.asarray(u)
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/fat-muscle/src/10-gen.py:32:40
   |
30 |     ):
31 |         cell: pv.Cell
32 |         barycentric: Float[np.ndarray, "N 3"] = melon.sample_barycentric_coords(
   |                                        ^^^^^
33 |             (cfg.n_samples, 4)
34 |         )
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/fat-muscle/src/10-gen.py:35:36
   |
33 |             (cfg.n_samples, 4)
34 |         )
35 |         samples: Float[np.ndarray, "N 3"] = melon.barycentric_to_points(
   |                                    ^^^^^
36 |             einops.repeat(cell.points, "B D -> N B D", N=cfg.n_samples), barycentric
37 |         )
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/10-gen.py:38:33
   |
36 |             einops.repeat(cell.points, "B D -> N B D", N=cfg.n_samples), barycentric
37 |         )
38 |         is_in: Bool[np.ndarray, " N"] = melon.triangle.contains(muscle, samples)
   |                                 ^^^^
39 |         tetmesh.cell_data["muscle-fraction"][cid] = (
40 |             np.count_nonzero(is_in) / cfg.n_samples
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/11-inspect-volume.py:24:40
   |
23 |     tetmesh = tetmesh.compute_cell_sizes()
24 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
   |                                        ^^^^
25 |     volume: Float[np.ndarray, " C"] = tetmesh.cell_data["Volume"]
26 |     occupied_volume: Float[np.ndarray, " C"] = np.sum(volume[muscle_fraction > 1e-9])
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/11-inspect-volume.py:25:31
   |
23 |     tetmesh = tetmesh.compute_cell_sizes()
24 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
25 |     volume: Float[np.ndarray, " C"] = tetmesh.cell_data["Volume"]
   |                               ^^^^
26 |     occupied_volume: Float[np.ndarray, " C"] = np.sum(volume[muscle_fraction > 1e-9])
27 |     ic(occupied_volume / tetmesh.volume)
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/11-inspect-volume.py:26:40
   |
24 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
25 |     volume: Float[np.ndarray, " C"] = tetmesh.cell_data["Volume"]
26 |     occupied_volume: Float[np.ndarray, " C"] = np.sum(volume[muscle_fraction > 1e-9])
   |                                        ^^^^
27 |     ic(occupied_volume / tetmesh.volume)
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/20-simulate.py:56:29
   |
55 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
56 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
   |                             ^^^^
57 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
58 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/fat-muscle/src/20-simulate.py:57:29
   |
55 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
56 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
57 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
   |                             ^^^^
58 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
59 |         result: pv.UnstructuredGrid = physics.objects["box"].geometry
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/fat-muscle/src/20-simulate.py:58:29
   |
56 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
57 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
58 |         u: Float[jax.Array, "P 3"] = u[physics.objects["box"].dof_id]
   |                             ^^^^^
59 |         result: pv.UnstructuredGrid = physics.objects["box"].geometry
60 |         result.point_data["solution"] = np.asarray(u)
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:32:34
   |
30 |     )
31 |     physics.add(apple.Object("flesh", apple.jax.energy.tetra.Phace(), geometry))
32 |     activation: Float[jax.Array, "C 3 3"] = activations(
   |                                  ^^^^^^^
33 |         geometry,
34 |         np.asarray(
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:55:29
   |
54 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
55 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
   |                             ^^^^
56 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
57 |         u: Float[jax.Array, "P 3"] = u[physics.objects["flesh"].dof_id]
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:56:29
   |
54 |     def callback(intermediate_result: apple.OptimizeResult) -> None:
55 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
56 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
   |                             ^^^^
57 |         u: Float[jax.Array, "P 3"] = u[physics.objects["flesh"].dof_id]
58 |         result: pv.UnstructuredGrid = physics.objects["flesh"].geometry
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:57:29
   |
55 |         u: Float[jax.Array, " F"] = intermediate_result["x"]
56 |         u: Float[jax.Array, " T"] = physics.fill_dirichlet(u, q)
57 |         u: Float[jax.Array, "P 3"] = u[physics.objects["flesh"].dof_id]
   |                             ^^^^^
58 |         result: pv.UnstructuredGrid = physics.objects["flesh"].geometry
59 |         result.point_data["solution"] = np.asarray(u)
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:72:61
   |
71 | def activations(
72 |     tetmesh: pv.UnstructuredGrid, stretch: Float[ArrayLike, " 3"]
   |                                                             ^^^^
73 | ) -> Float[jax.Array, "C 3 3"]:
74 |     muscle_direction: Float[np.ndarray, "C 3"] = tetmesh.cell_data["muscle-direction"]
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:73:23
   |
71 | def activations(
72 |     tetmesh: pv.UnstructuredGrid, stretch: Float[ArrayLike, " 3"]
73 | ) -> Float[jax.Array, "C 3 3"]:
   |                       ^^^^^^^
74 |     muscle_direction: Float[np.ndarray, "C 3"] = tetmesh.cell_data["muscle-direction"]
75 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:74:41
   |
72 |     tetmesh: pv.UnstructuredGrid, stretch: Float[ArrayLike, " 3"]
73 | ) -> Float[jax.Array, "C 3 3"]:
74 |     muscle_direction: Float[np.ndarray, "C 3"] = tetmesh.cell_data["muscle-direction"]
   |                                         ^^^^^
75 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
76 |     stretch: Float[jax.Array, " 3"] = jnp.asarray(stretch)
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:75:40
   |
73 | ) -> Float[jax.Array, "C 3 3"]:
74 |     muscle_direction: Float[np.ndarray, "C 3"] = tetmesh.cell_data["muscle-direction"]
75 |     muscle_fraction: Float[np.ndarray, " C"] = tetmesh.cell_data["muscle-fraction"]
   |                                        ^^^^
76 |     stretch: Float[jax.Array, " 3"] = jnp.asarray(stretch)
77 |     orientation: Float[jax.Array, "C 3 3"] = apple.jax.math.orientation_matrix(
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head/src/10-simulate.py:76:31
   |
74 |     muscle_direction: Float[np.ndarray, "C 3"] = tetmesh.cell_data["muscle-direction"]
75 |     muscle_fractio

(Truncated to 10000 characters out of 600238)

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security

@liblaf liblaf bot force-pushed the release-please--branches--main branch from 1acd988 to 9aa3fa8 Compare October 13, 2025 13:38
@codecov
Copy link

codecov bot commented Oct 13, 2025

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
24 3 21 1
View the full list of 3 ❄️ flaky test(s)
tests/jax/optim/minimize/test_scipy.py::test_minimize_scipy_lbfgs

Flake rate in main: 22.22% (Passed 21 times, Failed 6 times)

Stack Traces | 20.8s run time
#x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(#x1B[90m#x1B[39;49;00m
>       hnp.arrays(#x1B[90m#x1B[39;49;00m
                   ^#x1B[90m#x1B[39;49;00m
            dtype=np.float64,#x1B[90m#x1B[39;49;00m
            shape=hnp.array_shapes(min_dims=#x1B[94m1#x1B[39;49;00m, max_dims=#x1B[94m1#x1B[39;49;00m, min_side=#x1B[94m2#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            elements=hnp.from_dtype(np.dtype(np.float16), min_value=#x1B[94m0.0#x1B[39;49;00m, max_value=#x1B[94m2.0#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f2550811c60>

#x1B[1m#x1B[.../optim/minimize/test_scipy.py#x1B[0m:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

x0 = array([0., 1.])

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(#x1B[90m#x1B[39;49;00m
        hnp.arrays(#x1B[90m#x1B[39;49;00m
            dtype=np.float64,#x1B[90m#x1B[39;49;00m
            shape=hnp.array_shapes(min_dims=#x1B[94m1#x1B[39;49;00m, max_dims=#x1B[94m1#x1B[39;49;00m, min_side=#x1B[94m2#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            elements=hnp.from_dtype(np.dtype(np.float16), min_value=#x1B[94m0.0#x1B[39;49;00m, max_value=#x1B[94m2.0#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@hypothesis#x1B[39;49;00m.settings(max_examples=#x1B[94m10#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_minimize_scipy_lbfgs#x1B[39;49;00m(x0: ArrayLike) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        optimizer = optim.MinimizerScipy(jit=#x1B[94mFalse#x1B[39;49;00m, method=#x1B[33m"#x1B[39;49;00m#x1B[33mL-BFGS-B#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, options={})#x1B[90m#x1B[39;49;00m
        solution: optim.Solution = optimizer.minimize(#x1B[90m#x1B[39;49;00m
            x0=x0, fun=testing.rosen, jac=testing.rosen_der#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
>       np.testing.assert_allclose(solution[#x1B[33m"#x1B[39;49;00m#x1B[33mx#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m], #x1B[94m1.0#x1B[39;49;00m, rtol=#x1B[94m1e-4#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: #x1B[0m
#x1B[1m#x1B[31mE       Not equal to tolerance rtol=0.0001, atol=0#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       Mismatched elements: 2 / 2 (100%)#x1B[0m
#x1B[1m#x1B[31mE       Max absolute difference among violations: 0.00040014#x1B[0m
#x1B[1m#x1B[31mE       Max relative difference among violations: 0.00040014#x1B[0m
#x1B[1m#x1B[31mE        ACTUAL: array([0.999792, 0.9996  ])#x1B[0m
#x1B[1m#x1B[31mE        DESIRED: array(1.)#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_minimize_scipy_lbfgs(#x1B[0m
#x1B[1m#x1B[31mE           x0=array([0., 1.]),#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       Explanation:#x1B[0m
#x1B[1m#x1B[31mE           These lines were always and only run by failing examples:#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1009#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1010#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1016#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1021#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/getlimits.py:498#x1B[0m
#x1B[1m#x1B[31mE               (and 6 more with settings.verbosity >= verbose)#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.142.2', b'AXicc2RidGTQYIABDfsPEAYAGLECBQ==') as a decorator on your test case#x1B[0m

optimizer  = MinimizerScipy(jit=False, method='L-BFGS-B', options={})
solution   =   message: CONVERGENCE: RELATIVE REDUCTION OF F <= FACTR*EPSMCH
  success: True
   status: 0
      fun: 6.790301496989...1e-03]
     nfev: 28
     njev: 28
 hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>
     time: 0.609723712999994
x0         = array([0., 1.])

#x1B[1m#x1B[.../optim/minimize/test_scipy.py#x1B[0m:43: AssertionError
tests/jax/optim/minimize/test_scipy.py::test_minimize_scipy_trust_constr

Flake rate in main: 22.22% (Passed 21 times, Failed 6 times)

Stack Traces | 85.4s run time
#x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(#x1B[90m#x1B[39;49;00m
>       hnp.arrays(#x1B[90m#x1B[39;49;00m
                   ^#x1B[90m#x1B[39;49;00m
            dtype=np.float64,#x1B[90m#x1B[39;49;00m
            shape=hnp.array_shapes(min_dims=#x1B[94m1#x1B[39;49;00m, max_dims=#x1B[94m1#x1B[39;49;00m, min_side=#x1B[94m2#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            elements=hnp.from_dtype(np.dtype(np.float16), min_value=#x1B[94m0.0#x1B[39;49;00m, max_value=#x1B[94m2.0#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f2550811620>

#x1B[1m#x1B[.../optim/minimize/test_scipy.py#x1B[0m:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

x0 = array([0., 0., 0.])

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(#x1B[90m#x1B[39;49;00m
        hnp.arrays(#x1B[90m#x1B[39;49;00m
            dtype=np.float64,#x1B[90m#x1B[39;49;00m
            shape=hnp.array_shapes(min_dims=#x1B[94m1#x1B[39;49;00m, max_dims=#x1B[94m1#x1B[39;49;00m, min_side=#x1B[94m2#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            elements=hnp.from_dtype(np.dtype(np.float16), min_value=#x1B[94m0.0#x1B[39;49;00m, max_value=#x1B[94m2.0#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@hypothesis#x1B[39;49;00m.settings(max_examples=#x1B[94m10#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_minimize_scipy_trust_constr#x1B[39;49;00m(x0: ArrayLike) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        optimizer = optim.MinimizerScipy(#x1B[90m#x1B[39;49;00m
            jit=#x1B[94mFalse#x1B[39;49;00m, method=#x1B[33m"#x1B[39;49;00m#x1B[33mtrust-constr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, options={#x1B[33m"#x1B[39;49;00m#x1B[33mverbose#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[94m3#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        solution: optim.Solution = optimizer.minimize(#x1B[90m#x1B[39;49;00m
            x0=x0,#x1B[90m#x1B[39;49;00m
            fun=testing.rosen,#x1B[90m#x1B[39;49;00m
            jac=testing.rosen_der,#x1B[90m#x1B[39;49;00m
            hessp=testing.rosen_hess_prod,#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
>       np.testing.assert_allclose(solution[#x1B[33m"#x1B[39;49;00m#x1B[33mx#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m], #x1B[94m1.0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: #x1B[0m
#x1B[1m#x1B[31mE       Not equal to tolerance rtol=1e-07, atol=0#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       Mismatched elements: 2 / 3 (66.7%)#x1B[0m
#x1B[1m#x1B[31mE       Max absolute difference among violations: 3.20262951e-07#x1B[0m
#x1B[1m#x1B[31mE       Max relative difference among violations: 3.20262951e-07#x1B[0m
#x1B[1m#x1B[31mE        ACTUAL: array([1., 1., 1.])#x1B[0m
#x1B[1m#x1B[31mE        DESIRED: array(1.)#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_minimize_scipy_trust_constr(#x1B[0m
#x1B[1m#x1B[31mE           x0=array([0., 0., 0.]),#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       Explanation:#x1B[0m
#x1B[1m#x1B[31mE           These lines were always and only run by failing examples:#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1009#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1010#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1016#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1021#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.13.../numpy/lib/_stride_tricks_impl.py:342#x1B[0m
#x1B[1m#x1B[31mE               (and 6 more with settings.verbosity >= verbose)#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.142.2', b'AEEDACgAAAAAAAAAAA==') as a decorator on your test case#x1B[0m

optimizer  = MinimizerScipy(jit=False, method='trust-constr', options={'verbose': 3})
solution   =           message: `gtol` termination condition is satisfied.
          success: True
           status: 1
           ...       tr_radius: 0.4187059657823221
   constr_penalty: 1.0
            niter: 30
             time: 6.0580394609999075
x0         = array([0., 0., 0.])

#x1B[1m#x1B[.../optim/minimize/test_scipy.py#x1B[0m:27: AssertionError
tests/warp/sim/energy/elastic/utils/test_hess_quad.py::test_h6_quad

Flake rate in main: 100.00% (Passed 0 times, Failed 5 times)

Stack Traces | 35.1s run time
#x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(#x1B[90m#x1B[39;49;00m
>       p=random_matrices((#x1B[94m4#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)), dhdX=random_matrices((#x1B[94m4#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)), F=random_matrices((#x1B[94m3#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m))#x1B[90m#x1B[39;49;00m
                   ^^^#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f25506adbc0>

#x1B[1m#x1B[.../elastic/utils/test_hess_quad.py#x1B[0m:128: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/utils/test_hess_quad.py#x1B[0m:138: in test_h6_quad
    #x1B[0mcheck_quad(func.h6_prod, func.h6_quad, p, args)#x1B[90m#x1B[39;49;00m
        F          = Array([[[ 0.63525391,  0.63525391,  0.63525391],
        [ 0.63525391,  0.63525391,  0.63525391],
        [ 0.63525391...91],
        [ 0.63525391,  0.        ,  0.63525391],
        [ 0.63525391,  0.63525391,  0.63525391]]], dtype=float64)
        F_wp       = array(shape=(2,), dtype=mat33(d))
        args       = (array(shape=(2,), dtype=mat43(d)), array(shape=(2,), dtype=mat33(d)))
        dhdX       = Array([[[0.98779297, 0.98779297, 0.98779297],
        [0.98779297, 0.98779297, 0.98779297],
        [0.98779297, 0.987...98779297],
        [0.98779297, 0.98779297, 0.98779297],
        [0.98779297, 0.98779297, 0.98779297]]], dtype=float64)
        dhdX_wp    = array(shape=(2,), dtype=mat43(d))
        p          = Array([[[0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.807...80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.        , 0.80761719, 0.80761719]]], dtype=float64)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prod = <Function h6_prod(p: typing.Any, dhdX: typing.Any, F: typing.Any)>
quad = <Function h6_quad(p: typing.Any, dhdX: typing.Any, F: typing.Any)>
p = Array([[[0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.807...80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.        , 0.80761719, 0.80761719]]], dtype=float64)
args = (array(shape=(2,), dtype=mat43(d)), array(shape=(2,), dtype=mat33(d)))

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcheck_quad#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        prod: Callable | wp.Function,#x1B[90m#x1B[39;49;00m
        quad: Callable | wp.Function,#x1B[90m#x1B[39;49;00m
        p: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33mbatch 4 3#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        args: Sequence[wp.array],#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        p_wp: wp.array = wp_utils.to_warp(p, wp_utils.MatrixLike(#x1B[94m4#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m))#x1B[90m#x1B[39;49;00m
        prod_wp: wp.array = wp.map(prod, p_wp, *args)  #x1B[90m# pyright: ignore[reportAssignmentType]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        prod_jax: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33mbatch 4 3#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = wp.to_jax(prod_wp)#x1B[90m#x1B[39;49;00m
        quad_wp: wp.array = wp.map(quad, p_wp, *args)  #x1B[90m# pyright: ignore[reportAssignmentType]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        quad_jax: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m batch#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = wp.to_jax(quad_wp)#x1B[90m#x1B[39;49;00m
        quad_expected: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m batch#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = einops.einsum(#x1B[90m#x1B[39;49;00m
            p, prod_jax, #x1B[33m"#x1B[39;49;00m#x1B[33mbatch i j, batch i j -> batch#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m jnp.isdtype(p.dtype, jnp.float32):#x1B[90m#x1B[39;49;00m
            np.testing.assert_allclose(quad_jax, quad_expected, atol=#x1B[94m1e-5#x1B[39;49;00m, rtol=#x1B[94m1e-5#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        #x1B[94melif#x1B[39;49;00m jnp.isdtype(p.dtype, jnp.float64):#x1B[90m#x1B[39;49;00m
>           np.testing.assert_allclose(quad_jax, quad_expected, atol=#x1B[94m1e-15#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           AssertionError: #x1B[0m
#x1B[1m#x1B[31mE           Not equal to tolerance rtol=1e-07, atol=1e-15#x1B[0m
#x1B[1m#x1B[31mE           #x1B[0m
#x1B[1m#x1B[31mE           Mismatched elements: 1 / 2 (50%)#x1B[0m
#x1B[1m#x1B[31mE           Max absolute difference among violations: 3.55271368e-15#x1B[0m
#x1B[1m#x1B[31mE           Max relative difference among violations: inf#x1B[0m
#x1B[1m#x1B[31mE            ACTUAL: array([0.000000e+00, 3.552714e-15])#x1B[0m
#x1B[1m#x1B[31mE            DESIRED: array([0., 0.])#x1B[0m
#x1B[1m#x1B[31mE           Falsifying example: test_h6_quad(#x1B[0m
#x1B[1m#x1B[31mE               p=(lambda a: jnp.asarray(a))(#x1B[0m
#x1B[1m#x1B[31mE                   array([[[0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.80761719, 0.80761719, 0.80761719]],#x1B[0m
#x1B[1m#x1B[31mE                   #x1B[0m
#x1B[1m#x1B[31mE                          [[0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.80761719, 0.80761719, 0.80761719],#x1B[0m
#x1B[1m#x1B[31mE                           [0.        , 0.80761719, 0.80761719]]]),#x1B[0m
#x1B[1m#x1B[31mE               ),#x1B[0m
#x1B[1m#x1B[31mE               dhdX=(lambda a: jnp.asarray(a))(#x1B[0m
#x1B[1m#x1B[31mE                   array([[[0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297]],#x1B[0m
#x1B[1m#x1B[31mE                   #x1B[0m
#x1B[1m#x1B[31mE                          [[0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297],#x1B[0m
#x1B[1m#x1B[31mE                           [0.98779297, 0.98779297, 0.98779297]]]),#x1B[0m
#x1B[1m#x1B[31mE               ),#x1B[0m
#x1B[1m#x1B[31mE               F=(lambda a: jnp.asarray(a))(#x1B[0m
#x1B[1m#x1B[31mE                   array([[[ 0.63525391,  0.63525391,  0.63525391],#x1B[0m
#x1B[1m#x1B[31mE                           [ 0.63525391,  0.63525391,  0.63525391],#x1B[0m
#x1B[1m#x1B[31mE                           [ 0.63525391,  0.63525391,  0.63525391]],#x1B[0m
#x1B[1m#x1B[31mE                   #x1B[0m
#x1B[1m#x1B[31mE                          [[-0.5       ,  0.63525391,  0.63525391],#x1B[0m
#x1B[1m#x1B[31mE                           [ 0.63525391,  0.        ,  0.63525391],#x1B[0m
#x1B[1m#x1B[31mE                           [ 0.63525391,  0.63525391,  0.63525391]]]),#x1B[0m
#x1B[1m#x1B[31mE               ),#x1B[0m
#x1B[1m#x1B[31mE           )#x1B[0m
#x1B[1m#x1B[31mE           Explanation:#x1B[0m
#x1B[1m#x1B[31mE               These lines were always and only run by failing examples:#x1B[0m
#x1B[1m#x1B[31mE                   .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:68#x1B[0m
#x1B[1m#x1B[31mE                   .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:964#x1B[0m
#x1B[1m#x1B[31mE                   .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1009#x1B[0m
#x1B[1m#x1B[31mE                   .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1010#x1B[0m
#x1B[1m#x1B[31mE                   .../apple/apple/.venv/lib/python3.13.../numpy/_core/arrayprint.py:1016#x1B[0m
#x1B[1m#x1B[31mE                   (and 8 more with settings.verbosity >= verbose)#x1B[0m
#x1B[1m#x1B[31mE           #x1B[0m
#x1B[1m#x1B[31mE           You can reproduce this example by temporarily adding @reproduce_failure('6.142.2', b'AXicc2R0ZGJ0FNVggAEN+5c3stYt3JcAZL2fW7K3PsiB0ZFTY/8DiDSjIy+y2idB5ZkHtnsAADaTEP4=') as a decorator on your test case#x1B[0m

args       = (array(shape=(2,), dtype=mat43(d)), array(shape=(2,), dtype=mat33(d)))
p          = Array([[[0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.80761719, 0.807...80761719],
        [0.80761719, 0.80761719, 0.80761719],
        [0.        , 0.80761719, 0.80761719]]], dtype=float64)
p_wp       = array(shape=(2,), dtype=mat43(d))
prod       = <Function h6_prod(p: typing.Any, dhdX: typing.Any, F: typing.Any)>
prod_jax   = Array([[[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       [[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]]], dtype=float64)
prod_wp    = array(shape=(2,), dtype=mat43(d))
quad       = <Function h6_quad(p: typing.Any, dhdX: typing.Any, F: typing.Any)>
quad_expected = Array([0., 0.], dtype=float64)
quad_jax   = Array([0.00000000e+00, 3.55271368e-15], dtype=float64)
quad_wp    = array(shape=(2,), dtype=float64)

#x1B[1m#x1B[.../elastic/utils/test_hess_quad.py#x1B[0m:48: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@liblaf liblaf bot force-pushed the release-please--branches--main branch from 6112842 to 7dd399f Compare October 13, 2025 18:04
@liblaf liblaf bot force-pushed the release-please--branches--main branch 18 times, most recently from e695293 to 8ebd589 Compare October 19, 2025 01:10
@liblaf liblaf bot force-pushed the release-please--branches--main branch 2 times, most recently from 00bed9d to bcfee3b Compare October 21, 2025 11:37
@liblaf liblaf bot force-pushed the release-please--branches--main branch 3 times, most recently from ab51e85 to ea5c303 Compare October 25, 2025 05:45
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 865197f to 3dc7e98 Compare October 26, 2025 01:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge Merge the pull request once unit tests and other checks pass. autorelease: pending

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant