Skip to content

chore(pre-commit.ci): pre-commit autoupdate#45

Open
pre-commit-ci[bot] wants to merge 2 commits into
mainfrom
pre-commit-ci-update-config
Open

chore(pre-commit.ci): pre-commit autoupdate#45
pre-commit-ci[bot] wants to merge 2 commits into
mainfrom
pre-commit-ci-update-config

Conversation

@pre-commit-ci
Copy link
Copy Markdown
Contributor

@pre-commit-ci pre-commit-ci Bot commented Aug 25, 2025

@liblaf
Copy link
Copy Markdown
Contributor

liblaf Bot commented Aug 25, 2025

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ BASH shellcheck 2 0 0 0.03s
✅ BASH shfmt 2 0 0 0 1.06s
⚠️ COPYPASTE jscpd yes 313 no 9.1s
✅ JSON prettier 7 0 0 0 1.96s
✅ JSON v8r 7 0 0 5.01s
⚠️ PYTHON ruff yes yes 1 no 0.55s
✅ REPOSITORY git_diff yes no no 1.02s
⚠️ SPELL cspell 221 3 0 7.83s
✅ YAML prettier 4 0 0 0 1.71s
✅ YAML v8r 4 0 0 5.69s
✅ YAML yamllint 4 0 0 0.55s

Detailed Issues

⚠️ SPELL / cspell - 3 errors
src/liblaf/apple/inverse/_inverse.py:12:5      - Unknown word (Cupy)       -- CupyMinRes,
	 Suggestions: [cuyp, Cuyp, Copy, Cups, Cuppy]
src/liblaf/apple/inverse/_inverse.py:93:13     - Unknown word (Cupy)       -- CupyMinRes(tol=1e-6),
	 Suggestions: [cuyp, Cuyp, Copy, Cups, Cuppy]
tmp.6NE8UxMvCk/renovate-config.json:28:4      - Unknown word (pyenv)      -- "pyenv": {
	 Suggestions: [peen, pena, pend, peng, penh]
CSpell: Files checked: 221, Issues found: 3 in 2 files.


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": [
        "Cupy",
        "pyenv"
    ]
}


You can also copy-paste megalinter-reports/LINTER_DEFAULT at the root of your repository
⚠️ COPYPASTE / jscpd - 313 errors
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/energies/elastic/hyperelastic/func/test_hess_quad.py [50:6 - 60:2] (10 lines, 99 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [24:1 - 34:7]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [64:5 - 73:8] (9 lines, 160 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [41:5 - 50:8]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [77:3 - 83:8] (6 lines, 75 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [28:2 - 34:7]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [86:5 - 95:8] (9 lines, 160 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [41:5 - 50:8]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [95:8 - 105:8] (10 lines, 116 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [50:8 - 34:7]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [108:5 - 117:12] (9 lines, 158 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [41:5 - 50:4]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [141:3 - 150:13] (9 lines, 90 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_quad.py [130:3 - 139:13]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [99:8 - 109:22] (10 lines, 97 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [76:8 - 86:13]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [109:22 - 120:6] (11 lines, 182 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [86:13 - 97:5]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [120:6 - 125:2] (5 lines, 93 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [97:5 - 104:2]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [68:5 - 73:13] (5 lines, 65 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [81:5 - 86:13]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [74:5 - 85:11] (11 lines, 208 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_prod.py [88:5 - 99:11]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [85:8 - 94:22] (9 lines, 83 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [64:8 - 86:13]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [94:22 - 106:11] (12 lines, 211 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [73:13 - 122:11]

Clone found (python):
 - tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [104:6 - 109:2] (5 lines, 80 tokens)
   tests/warp/energies/elastic/hyperelastic/func/test_hess_diag.py [83:5 - 89:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [233:6 - 240:2] (7 lines, 88 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [211:7 - 218:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [257:8 - 264:4] (7 lines, 92 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [211:8 - 218:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [275:12 - 281:5] (6 lines, 75 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [251:11 - 257:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [281:5 - 289:10] (8 lines, 106 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [211:7 - 241:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [314:9 - 320:7] (6 lines, 84 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [212:9 - 218:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [340:2 - 350:7] (10 lines, 138 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [308:2 - 318:10]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_base.py [379:9 - 386:7] (7 lines, 101 tokens)
   src/liblaf/apple/warp/energies/elastic/_base.py [346:9 - 353:7]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [9:1 - 25:33] (16 lines, 99 tokens)
   src/liblaf/apple/warp/energies/elastic/_vol_preserve_det.py [7:1 - 23:53]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [122:5 - 148:2] (26 lines, 200 tokens)
   src/liblaf/apple/warp/energies/elastic/_vol_preserve_det.py [119:5 - 145:10]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [1:1 - 31:2] (30 lines, 241 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [1:1 - 31:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [33:2 - 44:2] (11 lines, 91 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [32:2 - 43:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [40:6 - 46:9] (6 lines, 82 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [27:7 - 33:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [46:2 - 57:2] (11 lines, 119 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [44:2 - 55:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [61:7 - 80:2] (19 lines, 170 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [57:5 - 76:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [76:6 - 83:8] (7 lines, 96 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [53:6 - 60:8]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [84:7 - 103:2] (19 lines, 170 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [78:5 - 97:2]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [99:7 - 106:8] (7 lines, 96 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [53:6 - 60:8]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap_muscle.py [113:15 - 169:10] (56 lines, 508 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [105:18 - 161:10]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap.py [4:1 - 25:26] (21 lines, 136 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [4:1 - 23:53]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap.py [71:2 - 79:21] (8 lines, 84 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [77:2 - 85:28]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap.py [91:2 - 98:9] (7 lines, 82 tokens)
   src/liblaf/apple/warp/energies/elastic/_arap_muscle_old.py [98:2 - 105:18]

Clone found (python):
 - src/liblaf/apple/warp/energies/elastic/_arap.py [109:21 - 139:18] (30 lines, 243 tokens)
   src/liblaf/apple/warp/energies/elastic/_vol_preserve_det.py [119:5 - 149:43]

Clone found (python):
 - exp/2026/03/11/test-inverse/src/30-inverse.py [122:2 - 133:6] (11 lines, 121 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [106:2 - 117:7]

Clone found (python):
 - exp/2026/03/11/test-inverse/src/20-forward.py [36:5 - 49:5] (13 lines, 89 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [56:5 - 69:14]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [1:1 - 15:2] (14 lines, 136 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [1:1 - 16:5]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [24:1 - 43:7] (19 lines, 196 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [20:1 - 39:6]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [86:5 - 97:12] (11 lines, 110 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [60:5 - 71:7]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [109:5 - 122:7] (13 lines, 123 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [81:5 - 94:6]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [123:15 - 128:2] (5 lines, 73 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [94:12 - 98:24]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [128:32 - 140:7] (12 lines, 126 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [98:24 - 109:5]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [146:7 - 156:7] (10 lines, 104 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [115:5 - 125:5]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse.py [153:2 - 164:6] (11 lines, 121 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [137:2 - 148:7]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [21:1 - 48:30] (27 lines, 266 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [16:1 - 43:29]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [51:1 - 65:61] (14 lines, 165 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [46:1 - 60:5]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [70:5 - 106:5] (36 lines, 370 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [65:5 - 101:59]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [108:5 - 121:2] (13 lines, 113 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [103:5 - 116:10]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [125:7 - 131:44] (6 lines, 85 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [122:2 - 128:32]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-unreachable.py [140:13 - 166:2] (26 lines, 298 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [107:13 - 133:17]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-test.py [1:1 - 15:2] (14 lines, 129 tokens)
   exp/2026/03/11/test-inverse/src/30-inverse.py [1:1 - 15:11]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-test.py [23:1 - 49:34] (26 lines, 248 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [17:1 - 43:29]

Clone found (python):
 - exp/2026/01/28/smas/src/30-inverse-test.py [52:1 - 69:5] (17 lines, 224 tokens)
   exp/2026/01/28/smas/src/30-inverse.py [46:1 - 63:63]

Clone 

(Truncated to 13333 characters out of 58060)
⚠️ PYTHON / ruff - 1 error
RUF059 Unpacked variable `sigma` is never used
  --> test_svd.py:9:8
   |
 7 | @wp.func
 8 | def svd_rv(F: wp.mat33):
 9 |     U, sigma, V = wp.svd3(F)
   |        ^^^^^
10 |     return U @ wp.transpose(V)
   |
help: Prefix it with an underscore or any other dummy variable pattern

Found 1 error.
No fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option).

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security

@codecov
Copy link
Copy Markdown

codecov Bot commented Aug 25, 2025

❌ 12 Tests Failed:

Tests completed Failed Passed Skipped
59 12 47 1
View the full list of 12 ❄️ flaky test(s)
tests/jax/math/test_rotation.py::test_polar_rv

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

Stack Traces | 8.27s run time
#x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(testing.matrices((#x1B[94m3#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)))#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_polar_rv#x1B[39;49;00m(F: Mat33) -> #x1B[94mNone#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 0x7f93c03c67a0>

#x1B[1m#x1B[.../jax/math/test_rotation.py#x1B[0m:33: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

F = Array([[[-0.76369951, -0.09248251,  0.13710512],
        [ 0.66158777, -0.59512941,  0.51031201],
        [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64)

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(testing.matrices((#x1B[94m3#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)))#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_polar_rv#x1B[39;49;00m(F: Mat33) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        R: Mat33#x1B[90m#x1B[39;49;00m
        S: Mat33#x1B[90m#x1B[39;49;00m
        R, S = math.polar_rv(F)#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(#x1B[90m#x1B[39;49;00m
            R.mT @ R, jnp.broadcast_to(jnp.identity(#x1B[94m3#x1B[39;49;00m), F.shape), atol=ATOL#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(jnp.linalg.det(R), #x1B[94m1.0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
>       np.testing.assert_allclose(R @ S, F, atol=ATOL)#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-07#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       Mismatched elements: 9 / 9 (100%)#x1B[0m
#x1B[1m#x1B[31mE       First 5 mismatches are at indices:#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 0]: -0.7507176526526799 (ACTUAL), -0.7636995066742065 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 1]: -0.20091949436875453 (ACTUAL), -0.09248251142607344 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 2]: -0.08149924494380237 (ACTUAL), 0.13710511563780203 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 1, 0]: 0.6782985317709116 (ACTUAL), 0.6615877671366968 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 1, 1]: -0.7347138547914875 (ACTUAL), -0.5951294089492527 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE       Max absolute difference among violations: 0.51135173#x1B[0m
#x1B[1m#x1B[31mE       Max relative difference among violations: 12.65975723#x1B[0m
#x1B[1m#x1B[31mE        ACTUAL: array([[[-0.750718, -0.200919, -0.081499],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.678299, -0.734714,  0.228916],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.029777, -0.301795,  0.47096 ]]])#x1B[0m
#x1B[1m#x1B[31mE        DESIRED: array([[[-0.7637  , -0.092483,  0.137105],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.661588, -0.595129,  0.510312],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.060143, -0.555447, -0.040392]]])#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_polar_rv(#x1B[0m
#x1B[1m#x1B[31mE           F=Array([[[-0.76369951, -0.09248251,  0.13710512],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.66158777, -0.59512941,  0.51031201],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEBQQE=') as a decorator on your test case#x1B[0m

F          = Array([[[-0.76369951, -0.09248251,  0.13710512],
        [ 0.66158777, -0.59512941,  0.51031201],
        [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64)
R          = Array([[[-0.83508667, -0.51821654, -0.18461274],
        [ 0.53520329, -0.84294523, -0.05477937],
        [-0.12723085, -0.14455087,  0.98128352]]], dtype=float64)
S          = Array([[[ 0.98615338, -0.18703847,  0.13065474],
        [-0.18703847,  0.76706804, -0.21880678],
        [ 0.13065474, -0.21880678,  0.46465105]]], dtype=float64)

#x1B[1m#x1B[.../jax/math/test_rotation.py#x1B[0m:41: AssertionError
tests/jax/math/test_rotation.py::test_svd_rv

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

Stack Traces | 12s run time
#x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(testing.matrices((#x1B[94m3#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)))#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_svd_rv#x1B[39;49;00m(F: Mat33) -> #x1B[94mNone#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 0x7f93c03c6700>

#x1B[1m#x1B[.../jax/math/test_rotation.py#x1B[0m:15: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

F = Array([[[-0.76369951, -0.09248251,  0.13710512],
        [ 0.66158777, -0.59512941,  0.51031201],
        [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64)

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(testing.matrices((#x1B[94m3#x1B[39;49;00m, #x1B[94m3#x1B[39;49;00m)))#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_svd_rv#x1B[39;49;00m(F: Mat33) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        U: Mat33#x1B[90m#x1B[39;49;00m
        S: Vec3#x1B[90m#x1B[39;49;00m
        Vh: Mat33#x1B[90m#x1B[39;49;00m
        U, S, Vh = math.svd_rv(F)#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(#x1B[90m#x1B[39;49;00m
            U.mT @ U, jnp.broadcast_to(jnp.identity(#x1B[94m3#x1B[39;49;00m), F.shape), atol=ATOL#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(jnp.linalg.det(U), #x1B[94m1.0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(#x1B[90m#x1B[39;49;00m
            Vh.mT @ Vh, jnp.broadcast_to(jnp.identity(#x1B[94m3#x1B[39;49;00m), F.shape), atol=ATOL#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        np.testing.assert_allclose(jnp.linalg.det(Vh), #x1B[94m1.0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        S: Mat33 = S[..., jnp.newaxis] * jnp.identity(#x1B[94m3#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
>       np.testing.assert_allclose(U @ S @ Vh, F, atol=ATOL)#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-07#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       Mismatched elements: 9 / 9 (100%)#x1B[0m
#x1B[1m#x1B[31mE       First 5 mismatches are at indices:#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 0]: -0.75071765265268 (ACTUAL), -0.7636995066742065 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 1]: -0.20091949436875436 (ACTUAL), -0.09248251142607344 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 0, 2]: -0.08149924494380242 (ACTUAL), 0.13710511563780203 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 1, 0]: 0.6782985317709118 (ACTUAL), 0.6615877671366968 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE        [0, 1, 1]: -0.7347138547914875 (ACTUAL), -0.5951294089492527 (DESIRED)#x1B[0m
#x1B[1m#x1B[31mE       Max absolute difference among violations: 0.51135173#x1B[0m
#x1B[1m#x1B[31mE       Max relative difference among violations: 12.65975723#x1B[0m
#x1B[1m#x1B[31mE        ACTUAL: array([[[-0.750718, -0.200919, -0.081499],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.678299, -0.734714,  0.228916],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.029777, -0.301795,  0.47096 ]]])#x1B[0m
#x1B[1m#x1B[31mE        DESIRED: array([[[-0.7637  , -0.092483,  0.137105],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.661588, -0.595129,  0.510312],#x1B[0m
#x1B[1m#x1B[31mE               [ 0.060143, -0.555447, -0.040392]]])#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_svd_rv(#x1B[0m
#x1B[1m#x1B[31mE           F=Array([[[-0.76369951, -0.09248251,  0.13710512],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.66158777, -0.59512941,  0.51031201],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64),#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.12.../numpy/_core/arrayprint.py:1020#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.12.../numpy/_core/arrayprint.py:1025#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.12.../numpy/_core/arrayprint.py:1060#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.12.../numpy/_core/fromnumeric.py:53#x1B[0m
#x1B[1m#x1B[31mE               .../apple/apple/.venv/lib/python3.12.../numpy/_core/numeric.py:672#x1B[0m
#x1B[1m#x1B[31mE               (and 7 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.150.1', b'AEEBQQE=') as a decorator on your test case#x1B[0m

F          = Array([[[-0.76369951, -0.09248251,  0.13710512],
        [ 0.66158777, -0.59512941,  0.51031201],
        [ 0.06014349, -0.55544681, -0.04039191]]], dtype=float64)
S          = Array([[[1.16687313, 0.        , 0.        ],
        [0.        , 0.70264464, 0.        ],
        [0.        , 0.        , 0.34835471]]], dtype=float64)
U          = Array([[[-0.43295697, -0.83037767, -0.35074375],
        [ 0.85503034, -0.25510504, -0.45149147],
        [ 0.28543194, -0.49537293,  0.82044761]]], dtype=float64)
Vh         = Array([[[ 0.78285589, -0.53763772,  0.313181  ],
        [ 0.619931  ,  0.71696161, -0.3188285 ],
        [-0.05312453,  0.44374738,  0.8945759 ]]], dtype=float64)

#x1B[1m#x1B[.../jax/math/test_rotation.py#x1B[0m:29: AssertionError
tests/model/test_forward.py::test_forward

Flake rate in main: 50.91% (Passed 27 times, Failed 28 times)

Stack Traces | 37.2s run time
#x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_forward#x1B[39;49;00m() -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        mesh: pv.UnstructuredGrid = pv.examples.download_letter_a()  #x1B[90m# pyright: ignore[reportAssignmentType]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        mesh.cell_data[MU] = np.full((mesh.n_cells,), #x1B[94m1.0#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        mesh.point_data[DIRICHLET_MASK] = mesh.points[:, #x1B[94m1#x1B[39;49;00m] < mesh.bounds.y_min + #x1B[94m0.1#x1B[39;49;00m * (#x1B[90m#x1B[39;49;00m
            mesh.bounds.y_max - mesh.bounds.y_min#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        mesh.point_data[DIRICHLET_VALUE] = np.zeros((mesh.n_points, #x1B[94m3#x1B[39;49;00m))#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        builder = ModelBuilder()#x1B[90m#x1B[39;49;00m
        mesh = builder.assign_global_ids(mesh)#x1B[90m#x1B[39;49;00m
        builder.add_dirichlet(mesh)#x1B[90m#x1B[39;49;00m
        elastic: Arap = Arap.from_pyvista(mesh)#x1B[90m#x1B[39;49;00m
        builder.add_energy(elastic)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        model: Model = builder.finalize()#x1B[90m#x1B[39;49;00m
        rng: np.random.Generator = np.random.default_rng()#x1B[90m#x1B[39;49;00m
        model.u_free = jnp.asarray(#x1B[90m#x1B[39;49;00m
            rng.uniform(-mesh.length, mesh.length, model.u_free.shape)#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        forward = Forward(model, optimizer=PNCG(max_steps=#x1B[94m1000#x1B[39;49;00m, rtol=#x1B[94m1e-15#x1B[39;49;00m))#x1B[90m#x1B[39;49;00m
        solution: PNCG.Solution = forward.step()#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m solution.success#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: assert False#x1B[0m
#x1B[1m#x1B[31mE        +  where False = OptimizeSolution(\n  result=<Result.STAGNATION: 'stagnation'>,\n  state=PNCGState(\n    structure=Structure(full_flat=f64...CGStats(\n    n_steps=278,\n    relative_decrease=Array(1.18487071e-11, dtype=float64),\n    time=33.935911411000006\n  )\n).success#x1B[0m

builder    = ModelBuilder(
  edges_length_sum=np.float64(414.4637687552529),
  n_edges=7119,
  dirichlet=DirichletBuilder(mask=bool...      params=Arap__Params(
               	mu=array(shape=(4802,), dtype=float64),
               )
      )
    }
  )
)
elastic    = Arap(
  id='Arap000',
  cells=array(shape=(4802,), dtype=vec4i),
  dhdX=array(shape=(4802, 1), dtype=mat43(d)),
  dV=a...(shape=(4802, 1), dtype=float64),
  params=Arap__Params(
         	mu=array(shape=(4802,), dtype=float64),
         )
)
forward    = Forward(
  model=Model(
    dirichlet=Dirichlet(
      dim=3,
      dirichlet_index=i64[534](jax),
      dirichlet_val...tart_threshold=Array(inf, dtype=float64, weak_type=True),
    max_delta=Array(inf, dtype=float64, weak_type=True)
  )
)
mesh       = UnstructuredGrid (0x7f937c4797e0)
  N Cells:    4802
  N Points:   1317
  X Bounds:   3.159e+00, 3.892e+00
  Y Bounds:   -8.999e-02, 7.415e-01
  Z Bounds:   -1.735e-18, 3.000e-01
  N Arrays:   4
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=i64[534](jax),
    dirichlet_value=f64[534](jax),
    fre... dtype=float64),
                 )
        )
      }
    )
  ),
  edges_length_mean=Array(0.05821938, dtype=float64)
)
rng        = Generator(PCG64) at 0x7F9366F5EB20
solution   = OptimizeSolution(
  result=<Result.STAGNATION: 'stagnation'>,
  state=PNCGState(
    structure=Structure(full_flat=f64...CGStats(
    n_steps=278,
    relative_decrease=Array(1.18487071e-11, dtype=float64),
    time=33.935911411000006
  )
)

#x1B[1m#x1B[31mtests/model/test_forward.py#x1B[0m:32: AssertionError
tests/model/test_inverse.py::test_inverse

Flake rate in main: 97.62% (Passed 1 times, Failed 41 times)

Stack Traces | 26.4s run time
>   #x1B[0msolution: Optimizer.Solution = inverse.solve(params)#x1B[90m#x1B[39;49;00m


#x1B[1m#x1B[31mtests/model/test_inverse.py#x1B[0m:93: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:189: in solve
    #x1B[0moptimizer_solution: Optimizer.Solution = #x1B[96mself#x1B[39;49;00m.optimizer.minimize(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../optim/scipy/_scipy.py#x1B[0m:117: in minimize
    #x1B[0mraw: OptimizeResult = scipy.optimize.minimize(  #x1B[90m# pyright: ignore[reportCallIssue]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_minimize.py#x1B[0m:784: in minimize
    #x1B[0mres = _minimize_lbfgsb(fun, x0, args, jac, bounds,#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_lbfgsb_py.py#x1B[0m:413: in _minimize_lbfgsb
    #x1B[0msf = _prepare_scalar_function(fun, x0, jac=jac, args=args, epsilon=eps,#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:310: in _prepare_scalar_function
    #x1B[0msf = ScalarFunction(fun, x0, args, grad, hess,#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_differentiable_functions.py#x1B[0m:283: in __init__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._update_fun()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_differentiable_functions.py#x1B[0m:362: in _update_fun
    #x1B[0mfx = #x1B[96mself#x1B[39;49;00m._wrapped_fun(#x1B[96mself#x1B[39;49;00m.x)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/_lib/_util.py#x1B[0m:603: in __call__
    #x1B[0mfx = #x1B[96mself#x1B[39;49;00m.f(np.copy(x), *#x1B[96mself#x1B[39;49;00m.args)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:80: in __call__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._compute_if_needed(x, *args)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:74: in _compute_if_needed
    #x1B[0mfg = #x1B[96mself#x1B[39;49;00m.fun(x, *args)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../peach/functools/_descriptor.py#x1B[0m:62: in wrapper
    #x1B[0moutputs: Sequence[Any] = _as_tuple(wrapped(*args, **kwargs))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:206: in value_and_grad
    #x1B[0mp: Full = #x1B[96mself#x1B[39;49;00m.adjoint(u_full, dLdu)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:98: in adjoint
    #x1B[0msolution: LinearSolver.Solution = #x1B[96mself#x1B[39;49;00m.adjoint_inner(u, dLdu)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:138: in adjoint_inner
    #x1B[0msolution: LinearSolver.Solution = #x1B[96mself#x1B[39;49;00m.adjoint_solver.solve(system, params)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/abc/_solver.py#x1B[0m:76: in solve
    #x1B[0mstate, stats, result = #x1B[96mself#x1B[39;49;00m._solve(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/misc/_composite.py#x1B[0m:57: in _solve
    #x1B[0msolution = solver.solve(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/abc/_solver.py#x1B[0m:76: in solve
    #x1B[0mstate, stats, result = #x1B[96mself#x1B[39;49;00m._solve(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/jax/_base.py#x1B[0m:70: in _solve
    #x1B[0mstate.params_flat, stats.info = #x1B[96mself#x1B[39;49;00m._wrapped(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/jax/_cg.py#x1B[0m:17: in _wrapped
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m jax.scipy.sparse.linalg.cg(*args, **kwargs)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/sparse/linalg.py#x1B[0m:286: in cg
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m _isolve(_cg_solve,#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/sparse/linalg.py#x1B[0m:226: in _isolve
    #x1B[0mx = lax.custom_linear_solve(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/sparse/linalg.py#x1B[0m:128: in _cg_solve
    #x1B[0mr0 = _sub(b, A(x0))#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   #x1B[0m#x1B[94mreturn#x1B[39;49;00m wrapped(*args, **kwargs)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE   jax._src.source_info_util.JaxStackTraceBeforeTransformation: jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_406 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE   #x1B[0m
#x1B[1m#x1B[31mE   The preceding stack trace is the source of the JAX operation that, once transformed by JAX, triggered the following exception.#x1B[0m
#x1B[1m#x1B[31mE   #x1B[0m
#x1B[1m#x1B[31mE   --------------------#x1B[0m


#x1B[1m#x1B[31m.venv/lib/python3.12.../grapes/timing/_callable.py#x1B[0m:26: JaxStackTraceBeforeTransformation

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

mesh = UnstructuredGrid (0x7f93b07804c0)
  N Cells:    96
  N Points:   35
  X Bounds:   0.000e+00, 2.000e+00
  Y Bounds:   0.000e+00, 2.000e+00
  Z Bounds:   0.000e+00, 2.000e+00
  N Arrays:   9
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=i64[27](jax),
    dirichlet_value=f64[27](jax),
    free_...,
                 )
        )
      }
    )
  ),
  edges_length_mean=Array(1.04115139, dtype=float64),
  frozen=True
)

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_inverse#x1B[39;49;00m(mesh: pv.UnstructuredGrid, model: Model) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        #x1B[37m@tree#x1B[39;49;00m.define#x1B[90m#x1B[39;49;00m
        #x1B[94mclass#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[92mInverseActivation#x1B[39;49;00m(Inverse):#x1B[90m#x1B[39;49;00m
            surface_idx: Integer[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m surface#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
            target: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33msurface dim#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[37m@tree#x1B[39;49;00m.define#x1B[90m#x1B[39;49;00m
            #x1B[94mclass#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[92mParams#x1B[39;49;00m(Inverse.Params):#x1B[90m#x1B[39;49;00m
                activation: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33mcells 6#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[37m@tree#x1B[39;49;00m.define#x1B[90m#x1B[39;49;00m
            #x1B[94mclass#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[92mAux#x1B[39;49;00m(Inverse.Aux):#x1B[90m#x1B[39;49;00m
                #x1B[94mpass#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[37m@override#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mloss#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                #x1B[96mself#x1B[39;49;00m, u: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33mpoints dim#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m], params: ModelParams#x1B[90m#x1B[39;49;00m
            ) -> #x1B[96mtuple#x1B[39;49;00m[Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m], Aux]:#x1B[90m#x1B[39;49;00m
                loss: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = #x1B[94m0.5#x1B[39;49;00m * jnp.sum(#x1B[90m#x1B[39;49;00m
                    jnp.square(u[#x1B[96mself#x1B[39;49;00m.surface_idx] - #x1B[96mself#x1B[39;49;00m.target)#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
                #x1B[94mreturn#x1B[39;49;00m loss, #x1B[96mself#x1B[39;49;00m.Aux()#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[37m@override#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mmake_params#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, params: Params) -> ModelParams:  #x1B[90m# pyright: ignore[reportIncompatibleMethodOverride]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mreturn#x1B[39;49;00m {#x1B[33m"#x1B[39;49;00m#x1B[33melastic#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: {#x1B[33m"#x1B[39;49;00m#x1B[33mactivation#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: params.activation}}#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        forward = Forward(model)#x1B[90m#x1B[39;49;00m
        forward.step()#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        surface: pv.PolyData = mesh.extract_surface()  #x1B[90m# pyright: ignore[reportAssignmentType]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        surface_idx: Integer[Array, #x1B[33m"#x1B[39;49;00m#x1B[33m surface#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = jnp.asarray(surface.point_data[POINT_ID])#x1B[90m#x1B[39;49;00m
        target: Float[Array, #x1B[33m"#x1B[39;49;00m#x1B[33msurface dim#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = forward.u_full[surface_idx]#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        inverse = InverseActivation(forward, surface_idx=surface_idx, target=target)#x1B[90m#x1B[39;49;00m
        params = InverseActivation.Params(activation=jnp.zeros((mesh.n_cells, #x1B[94m6#x1B[39;49;00m)))#x1B[90m#x1B[39;49;00m
>       solution: Optimizer.Solution = inverse.solve(params)#x1B[90m#x1B[39;49;00m
                                       ^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m

InverseActivation = <class 'tests.model.test_inverse.test_inverse.<locals>.InverseActivation'>
forward    = Forward(
  model=Model(
    dirichlet=Dirichlet(
      dim=3,
      dirichlet_index=i64[27](jax),
      dirichlet_valu... beta_restart_threshold=Array(10., dtype=float64, weak_type=True),
    max_delta=Array(0.15617271, dtype=float64)
  )
)
inverse    = test_inverse.<locals>.InverseActivation(
  forward=Forward(
    model=Model(
      dirichlet=Dirichlet(
        dim=3,...lse, dtype=bool),
  last_forward_success=Array(True, dtype=bool),
  surface_idx=i64[26](jax),
  target=f64[26,3](jax)
)
mesh       = UnstructuredGrid (0x7f93b07804c0)
  N Cells:    96
  N Points:   35
  X Bounds:   0.000e+00, 2.000e+00
  Y Bounds:   0.000e+00, 2.000e+00
  Z Bounds:   0.000e+00, 2.000e+00
  N Arrays:   9
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=i64[27](jax),
    dirichlet_value=f64[27](jax),
    free_...,
                 )
        )
      }
    )
  ),
  edges_length_mean=Array(1.04115139, dtype=float64),
  frozen=True
)
params     = test_inverse.<locals>.InverseActivation.Params(activation=f64[96,6](jax))
surface    = PolyData (0x7f935a204be0)
  N Cells:    48
  N Points:   26
  N Strips:   0
  X Bounds:   0.000e+00, 2.000e+00
  Y Bounds:   0.000e+00, 2.000e+00
  Z Bounds:   0.000e+00, 2.000e+00
  N Arrays:   11
surface_idx = Array([ 0,  4,  1,  3, 10,  9, 12,  5,  2, 11, 14,  7,  6, 15,  8, 17, 16,
       19, 18, 21, 20, 23, 24, 26, 25, 22], dtype=int64)
target     = Array([[ 0.        ,  0.        ,  0.        ],
       [ 0.00272903, -0.14177871,  0.18460566],
       [ 0.        ,  ...06062],
       [ 0.22601374, -0.26897527, -0.129889  ],
       [ 0.17388281, -0.09668725,  0.02367733]], dtype=float64)

#x1B[1m#x1B[31mtests/model/test_inverse.py#x1B[0m:93: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:189: in solve
    #x1B[0moptimizer_solution: Optimizer.Solution = #x1B[96mself#x1B[39;49;00m.optimizer.minimize(#x1B[90m#x1B[39;49;00m
        callback   = None
        constraints = ()
        objective  = Objective(
  _kwargs={},
  _grad_wrapped=<bound method Inverse.grad of test_inverse.<locals>.InverseActivation(
      ...             surface_idx=i64[26](jax),
                            target=f64[26,3](jax)
                          )>
)
        params     = test_inverse.<locals>.InverseActivation.Params(activation=f64[96,6](jax))
        self       = test_inverse.<locals>.InverseActivation(
  forward=Forward(
    model=Model(
      dirichlet=Dirichlet(
        dim=3,...lse, dtype=bool),
  last_forward_success=Array(True, dtype=bool),
  surface_idx=i64[26](jax),
  target=f64[26,3](jax)
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../optim/scipy/_scipy.py#x1B[0m:117: in minimize
    #x1B[0mraw: OptimizeResult = scipy.optimize.minimize(  #x1B[90m# pyright: ignore[reportCallIssue]#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        callback   = None
        callback_wrapper = <FunctionWrapper at 0x7f9370f15c40 for function at 0x7f93c0160900>
        constraints = []
        fun        = <function FunctionDescriptor.__get__.<locals>.wrapper at 0x7f93c0163740>
        jac        = True
        objective  = Objective(
  structure=Structure(
    full_flat=f64[576](jax),
    static=test_inverse.<locals>.InverseActivation.Para...](jax)
                          )>,
  _value_and_grad_wrapper=<function FunctionDescriptor.__get__.<locals>.wrapper>
)
        options    = {'maxiter': 256}
        params     = test_inverse.<locals>.InverseActivation.Params(activation=f64[96,6](jax))
        self       = ScipyOptimizer(method='L-BFGS-B', tol=1e-05)
        state      = ScipyState(
  structure=Structure(
    full_flat=f64[576](jax),
    static=test_inverse.<locals>.InverseActivation.Params(activation=None)
  ),
  result={'x': f64[576](jax)}
)
        stats      = ScipyStats(time=7.789912625999932)
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_minimize.py#x1B[0m:784: in minimize
    #x1B[0mres = _minimize_lbfgsb(fun, x0, args, jac, bounds,#x1B[90m#x1B[39;49;00m
        args       = ()
        bounds     = None
        callback   = <function _wrap_callback.<locals>.wrapped_callback at 0x7f93c0163a60>
        constraints = []
        fun        = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        hess       = None
        hessp      = None
        jac        = <bound method MemoizeJac.derivative of <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>>
        meth       = 'l-bfgs-b'
        method     = 'L-BFGS-B'
        options    = {'ftol': 1e-05, 'gtol': 1e-05, 'maxiter': 256}
        remove_vars = False
        tol        = 1e-05
        x0         = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_lbfgsb_py.py#x1B[0m:413: in _minimize_lbfgsb
    #x1B[0msf = _prepare_scalar_function(fun, x0, jac=jac, args=args, epsilon=eps,#x1B[90m#x1B[39;49;00m
        args       = ()
        bounds     = None
        callback   = <function _wrap_callback.<locals>.wrapped_callback at 0x7f93c0163a60>
        disp       = <object object at 0x7f940d01b020>
        eps        = 1e-08
        factr      = np.float64(45035996273.70496)
        finite_diff_rel_step = None
        ftol       = 1e-05
        fun        = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        gtol       = 1e-05
        iprint     = <object object at 0x7f940d01b020>
        jac        = <bound method MemoizeJac.derivative of <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>>
        m          = 10
        maxcor     = 10
        maxfun     = 15000
        maxiter    = 256
        maxls      = 20
        n          = 576
        pgtol      = 1e-05
        unknown_options = {}
        workers    = None
        x0         = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:310: in _prepare_scalar_function
    #x1B[0msf = ScalarFunction(fun, x0, args, grad, hess,#x1B[90m#x1B[39;49;00m
        args       = ()
        bounds     = (-inf, inf)
        epsilon    = 1e-08
        finite_diff_rel_step = None
        fun        = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        grad       = <bound method MemoizeJac.derivative of <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>>
        hess       = <function _prepare_scalar_function.<locals>.hess at 0x7f93c0161e40>
        jac        = <bound method MemoizeJac.derivative of <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>>
        workers    = <class 'map'>
        x0         = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_differentiable_functions.py#x1B[0m:283: in __init__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._update_fun()#x1B[90m#x1B[39;49;00m
        _dtype     = dtype('float64')
        _x         = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
        args       = ()
        epsilon    = 1e-08
        finite_diff_bounds = (-inf, inf)
        finite_diff_options = {}
        finite_diff_rel_step = None
        fun        = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        grad       = <bound method MemoizeJac.derivative of <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>>
        hess       = <function _prepare_scalar_function.<locals>.hess at 0x7f93c0161e40>
        self       = <scipy.optimize._differentiable_functions.ScalarFunction object at 0x7f935b8a6b70>
        workers    = <class 'map'>
        x0         = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
        xp         = <module 'scipy._lib.array_api_compat.numpy' from '.../apple/apple/.venv/lib/python3.12.../array_api_compat/numpy/__init__.py'>
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_differentiable_functions.py#x1B[0m:362: in _update_fun
    #x1B[0mfx = #x1B[96mself#x1B[39;49;00m._wrapped_fun(#x1B[96mself#x1B[39;49;00m.x)#x1B[90m#x1B[39;49;00m
         ^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <scipy.optimize._differentiable_functions.ScalarFunction object at 0x7f935b8a6b70>
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/_lib/_util.py#x1B[0m:603: in __call__
    #x1B[0mfx = #x1B[96mself#x1B[39;49;00m.f(np.copy(x), *#x1B[96mself#x1B[39;49;00m.args)#x1B[90m#x1B[39;49;00m
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <scipy._lib._util._ScalarFunctionWrapper object at 0x7f935b8a6540>
        x          = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:80: in __call__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._compute_if_needed(x, *args)#x1B[90m#x1B[39;49;00m
        args       = ()
        self       = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        x          = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/optimize/_optimize.py#x1B[0m:74: in _compute_if_needed
    #x1B[0mfg = #x1B[96mself#x1B[39;49;00m.fun(x, *args)#x1B[90m#x1B[39;49;00m
         ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = ()
        self       = <scipy.optimize._optimize.MemoizeJac object at 0x7f935b8a4aa0>
        x          = 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., 0., 0., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:206: in value_and_grad
    #x1B[0mp: Full = #x1B[96mself#x1B[39;49;00m.adjoint(u_full, dLdu)#x1B[90m#x1B[39;49;00m
              ^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        aux        = test_inverse.<locals>.InverseActivation.Aux()
        dLdq       = {'elastic': {'activation': 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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]], dtype=float64)}}
        dLdu       = Array([[ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  ...     ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ]], dtype=float64)
        loss       = Array(1.39059085, dtype=float64)
        model_params = {'elastic': {'activation': 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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]], dtype=float64)}}
        model_params_vjp = VJP(fun=functools.partial(<function _vjp3_callable at 0x7f940dffa200>, [], [False], { lambda ; a:f64[96,6]. let  in (a...arams[()], [*]),)), out_tree=PyTreeDef({'elastic': {'activation': *}}), args_res=[(NotNeeded(),)], opaque_residuals=[])
        params     = test_inverse.<locals>.InverseActivation.Params(activation=f64[96,6](jax))
        self       = test_inverse.<locals>.InverseActivation(
  forward=Forward(
    model=Model(
      dirichlet=Dirichlet(
        dim=3,...lse, dtype=bool),
  last_forward_success=Array(True, dtype=bool),
  surface_idx=i64[26](jax),
  target=f64[26,3](jax)
)
        u_full     = Array([[ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]...00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]],      dtype=float64)
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:98: in adjoint
    #x1B[0msolution: LinearSolver.Solution = #x1B[96mself#x1B[39;49;00m.adjoint_inner(u, dLdu)#x1B[90m#x1B[39;49;00m
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        dLdu       = Array([[ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  ...     ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ]], dtype=float64)
        self       = test_inverse.<locals>.InverseActivation(
  forward=Forward(
    model=Model(
      dirichlet=Dirichlet(
        dim=3,...lse, dtype=bool),
  last_forward_success=Array(True, dtype=bool),
  surface_idx=i64[26](jax),
  target=f64[26,3](jax)
)
        u          = Array([[ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]...00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]],      dtype=float64)
#x1B[1m#x1B[.../apple/inverse/_inverse.py#x1B[0m:138: in adjoint_inner
    #x1B[0msolution: LinearSolver.Solution = #x1B[96mself#x1B[39;49;00m.adjoint_solver.solve(system, params)#x1B[90m#x1B[39;49;00m
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        dLdu       = Array([[ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  ...     ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ]], dtype=float64)
        matvec     = <jax._src.custom_derivatives.custom_jvp object at 0x7f938c4c3c50>
        matvec_jvp = <function Inverse.adjoint_inner.<locals>.matvec_jvp at 0x7f9365da6840>
        params     = 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., 0., 0., ... 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)
        preconditioner = Array([0.31578947, 0.27272727, 0.31578947, 0.16666667, 0.16666667,
       0.16666667, 0.35294118, 0.42857143, 0.352941... 0.125     , 0.125     , 0.125     , 0.125     , 0.125     ,
       0.125     , 0.125     , 0.125     ], dtype=float64)
        preconditioner_fn = <function Inverse.adjoint_inner.<locals>.preconditioner_fn at 0x7f9365da6fc0>
        self       = test_inverse.<locals>.InverseActivation(
  forward=Forward(
    model=Model(
      dirichlet=Dirichlet(
        dim=3,...lse, dtype=bool),
  last_forward_success=Array(True, dtype=bool),
  surface_idx=i64[26](jax),
  target=f64[26,3](jax)
)
        system     = LinearSystem(
  _kwargs={},
  _matvec_wrapped=<jax._src.custom_derivatives.custom_jvp object at 0x7f938c4c3c50>,
  b=f...r.<locals>.preconditioner_fn>,
  _rpreconditioner_wrapped=<function Inverse.adjoint_inner.<locals>.preconditioner_fn>
)
        u          = Array([[ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]...00,  0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00]],      dtype=float64)
        u_free     = Array([ 5.75383323e-17,  1.52721599e-17,  2.58720539e-17,  6.07349063e-17,
        2.60756920e-17,  6.41272332e-17,  6...000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  0.00000000e+00], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/abc/_solver.py#x1B[0m:76: in solve
    #x1B[0mstate, stats, result = #x1B[96mself#x1B[39;49;00m._solve(#x1B[90m#x1B[39;49;00m
        StateT     = StateT
        StatsT     = StatsT
        callback   = None
        constraints = []
        params     = 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., 0., 0., ... 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)
        self       = CompositeSolver(
  jit=True,
  timer=True,
  solvers=[
    JaxCG(
      max_steps=1000,
      atol=Array(0., dtype=flo...  continue_atol=Array(0., dtype=float64, weak_type=True),
  continue_rtol=Array(0.001, dtype=float64, weak_type=True)
)
        state      = CompositeState(
  structure=Structure(full_flat=f64[78](jax)), params_flat=f64[78](jax), state=[]
)
        stats      = CompositeStats(stats=[], time=0.8004131299999244)
        system     = LinearSystem(
  structure=Structure(full_flat=f64[78](jax)),
  _flatten=True,
  _jit=True,
  _kwargs={},
  _timer=True...r.<locals>.preconditioner_fn>,
  _rpreconditioner_wrapped=<function Inverse.adjoint_inner.<locals>.preconditioner_fn>
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/misc/_composite.py#x1B[0m:57: in _solve
    #x1B[0msolution = solver.solve(#x1B[90m#x1B[39;49;00m
        callback   = None
        constraints = []
        self       = CompositeSolver(
  jit=True,
  timer=True,
  solvers=[
    JaxCG(
      max_steps=1000,
      atol=Array(0., dtype=flo...  continue_atol=Array(0., dtype=float64, weak_type=True),
  continue_rtol=Array(0.001, dtype=float64, weak_type=True)
)
        solution   = None
        solver     = JaxCG(
  max_steps=1000,
  atol=Array(0., dtype=float64, weak_type=True),
  rtol=Array(0.001, dtype=float64, weak_type...
  atol_primary=Array(0., dtype=float64, weak_type=True),
  rtol_primary=Array(1.e-05, dtype=float64, weak_type=True)
)
        state      = CompositeState(
  structure=Structure(full_flat=f64[78](jax)), params_flat=f64[78](jax), state=[]
)
        stats      = CompositeStats(stats=[], time=0.8097615389999646)
        system     = LinearSystem(
  structure=Structure(full_flat=f64[78](jax)),
  _flatten=True,
  _jit=True,
  _kwargs={},
  _timer=True...r.<locals>.preconditioner_fn>,
  _rpreconditioner_wrapped=<function Inverse.adjoint_inner.<locals>.preconditioner_fn>
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/abc/_solver.py#x1B[0m:76: in solve
    #x1B[0mstate, stats, result = #x1B[96mself#x1B[39;49;00m._solve(#x1B[90m#x1B[39;49;00m
        StateT     = StateT
        StatsT     = StatsT
        callback   = None
        constraints = []
        params     = 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., 0., 0., ... 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)
        self       = JaxCG(
  max_steps=1000,
  atol=Array(0., dtype=float64, weak_type=True),
  rtol=Array(0.001, dtype=float64, weak_type...
  atol_primary=Array(0., dtype=float64, weak_type=True),
  rtol_primary=Array(1.e-05, dtype=float64, weak_type=True)
)
        state      = JaxState(structure=Structure(full_flat=f64[78](jax)), params_flat=f64[78](jax))
        stats      = JaxStats(time=0.8148798140000508)
        system     = LinearSystem(
  structure=Structure(full_flat=f64[78](jax)),
  _flatten=True,
  _jit=True,
  _kwargs={},
  _timer=True...JitWrapper at 0x7f93646f39b0>,
  _rpreconditioner_wrapped=<function Inverse.adjoint_inner.<locals>.preconditioner_fn>
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/jax/_base.py#x1B[0m:70: in _solve
    #x1B[0mstate.params_flat, stats.info = #x1B[96mself#x1B[39;49;00m._wrapped(#x1B[90m#x1B[39;49;00m
        callback   = None
        constraints = []
        self       = JaxCG(
  max_steps=1000,
  atol=Array(0., dtype=float64, weak_type=True),
  rtol=Array(0.001, dtype=float64, weak_type...
  atol_primary=Array(0., dtype=float64, weak_type=True),
  rtol_primary=Array(1.e-05, dtype=float64, weak_type=True)
)
        state      = JaxState(structure=Structure(full_flat=f64[78](jax)), params_flat=f64[78](jax))
        stats      = JaxStats(time=0.8217481460001181)
        system     = LinearSystem(
  structure=Structure(full_flat=f64[78](jax)),
  _flatten=True,
  _jit=True,
  _kwargs={},
  _timer=True...JitWrapper at 0x7f93646f39b0>,
  _rpreconditioner_wrapped=<function Inverse.adjoint_inner.<locals>.preconditioner_fn>
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../linalg/jax/_cg.py#x1B[0m:17: in _wrapped
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m jax.scipy.sparse.linalg.cg(*args, **kwargs)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (<FunctionWrapper at 0x7f9359e38f20 for _JitWrapper at 0x7f93646f3bf0>, Array([ 0.01387171, -0.12457049,  0.36031133, ...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))
        kwargs     = {'M': <FunctionWrapper at 0x7f9359e39620 for _JitWrapper at 0x7f93646f39b0>, 'atol': Array(0., dtype=float64, weak_type=True), 'maxiter': 1000, 'tol': Array(1.e-05, dtype=float64, weak_type=True)}
        self       = JaxCG(
  max_steps=1000,
  atol=Array(0., dtype=float64, weak_type=True),
  rtol=Array(0.001, dtype=float64, weak_type...
  atol_primary=Array(0., dtype=float64, weak_type=True),
  rtol_primary=Array(1.e-05, dtype=float64, weak_type=True)
)
#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/sparse/linalg.py#x1B[0m:286: in cg
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m _isolve(_cg_solve,#x1B[90m#x1B[39;49;00m
        A          = <FunctionWrapper at 0x7f9359e38f20 for _JitWrapper at 0x7f93646f3bf0>
        M          = <FunctionWrapper at 0x7f9359e39620 for _JitWrapper at 0x7f93646f39b0>
        atol       = Array(0., dtype=float64, weak_type=True)
        b          = Array([ 0.01387171, -0.12457049,  0.36031133,  0.00272903, -0.14177871,
        0.18460566, -0.23849081, -0.28504421, ...    , -0.        , -0.        , -0.        , -0.        ,
       -0.        , -0.        , -0.        ], dtype=float64)
        maxiter    = 1000
        tol        = Array(1.e-05, dtype=float64, weak_type=True)
        x0         = 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., 0., 0., ... 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)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

_isolve_solve = <function _cg_solve at 0x7f93655b8ea0>
A = <FunctionWrapper at 0x7f9359e38f20 for _JitWrapper at 0x7f93646f3bf0>
b = Array([ 0.01387171, -0.12457049,  0.36031133,  0.00272903, -0.14177871,
        0.18460566, -0.23849081, -0.28504421, ...    , -0.        , -0.        , -0.        , -0.        ,
       -0.        , -0.        , -0.        ], dtype=float64)
x0 = 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., 0., 0., ... 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)

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_isolve#x1B[39;49;00m(_isolve_solve, A, b, x0=#x1B[94mNone#x1B[39;49;00m, *, tol=#x1B[94m1e-5#x1B[39;49;00m, atol=#x1B[94m0.0#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                maxiter=#x1B[94mNone#x1B[39;49;00m, M=#x1B[94mNone#x1B[39;49;00m, check_symmetric=#x1B[94mFalse#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
      #x1B[94mif#x1B[39;49;00m x0 #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        x0 = tree_map(jnp.zeros_like, b)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      b, x0 = api.device_put((b, x0))#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      #x1B[94mif#x1B[39;49;00m maxiter #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        size = #x1B[96msum#x1B[39;49;00m(bi.size #x1B[94mfor#x1B[39;49;00m bi #x1B[95min#x1B[39;49;00m tree_leaves(b))#x1B[90m#x1B[39;49;00m
        maxiter = #x1B[94m10#x1B[39;49;00m * size  #x1B[90m# copied from scipy#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      #x1B[94mif#x1B[39;49;00m M #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        M = _identity#x1B[90m#x1B[39;49;00m
      A = _normalize_matvec(A)#x1B[90m#x1B[39;49;00m
      M = _normalize_matvec(M)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      #x1B[94mif#x1B[39;49;00m tree_structure(x0) != tree_structure(b):#x1B[90m#x1B[39;49;00m
        #x1B[94mraise#x1B[39;49;00m #x1B[96mValueError#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33mx0 and b must have matching tree structure: #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mf#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mtree_structure(x0)#x1B[33m}#x1B[39;49;00m#x1B[33m vs #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mtree_structure(b)#x1B[33m}#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 _shapes(x0) != _shapes(b):#x1B[90m#x1B[39;49;00m
        #x1B[94mraise#x1B[39;49;00m #x1B[96mValueError#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33marrays in x0 and b must have matching shapes: #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mf#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m{#x1B[39;49;00m_shapes(x0)#x1B[33m}#x1B[39;49;00m#x1B[33m vs #x1B[39;49;00m#x1B[33m{#x1B[39;49;00m_shapes(b)#x1B[33m}#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      isolve_solve = partial(#x1B[90m#x1B[39;49;00m
          _isolve_solve, x0=x0, tol=tol, atol=atol, maxiter=maxiter, M=M)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
      #x1B[90m# real-valued positive-definite linear operators are symmetric#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mreal_valued#x1B[39;49;00m(x):#x1B[90m#x1B[39;49;00m
        #x1B[94mreturn#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96missubclass#x1B[39;49;00m(x.dtype.type, np.complexfloating)#x1B[90m#x1B[39;49;00m
      symmetric = #x1B[96mall#x1B[39;49;00m(#x1B[96mmap#x1B[39;49;00m(real_valued, tree_leaves(b))) \
        #x1B[94mif#x1B[39;49;00m check_symmetric #x1B[94melse#x1B[39;49;00m #x1B[94mFalse#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>     x = lax.custom_linear_solve(#x1B[90m#x1B[39;49;00m
          A, b, solve=isolve_solve, transpose_solve=isolve_solve,#x1B[90m#x1B[39;49;00m
          symmetric=symmetric)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE     jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_406 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE     --------------------#x1B[0m
#x1B[1m#x1B[31mE     For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m

A          = <FunctionWrapper at 0x7f9359e38f20 for _JitWrapper at 0x7f93646f3bf0>
M          = <FunctionWrapper at 0x7f9359e39620 for _JitWrapper at 0x7f93646f39b0>
_isolve_solve = <function _cg_solve at 0x7f93655b8ea0>
atol       = Array(0., dtype=float64, weak_type=True)
b          = Array([ 0.01387171, -0.12457049,  0.36031133,  0.00272903, -0.14177871,
        0.18460566, -0.23849081, -0.28504421, ...    , -0.        , -0.        , -0.        , -0.        ,
       -0.        , -0.        , -0.        ], dtype=float64)
check_symmetric = True
isolve_solve = functools.partial(<function _cg_solve at 0x7f93655b8ea0>, x0=Array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.... dtype=float64, weak_type=True), maxiter=1000, M=<FunctionWrapper at 0x7f9359e39620 for _JitWrapper at 0x7f93646f39b0>)
maxiter    = 1000
real_valued = <function _isolve.<locals>.real_valued at 0x7f937c928900>
symmetric  = True
tol        = Array(1.e-05, dtype=float64, weak_type=True)
x0         = 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., 0., 0., ... 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)

#x1B[1m#x1B[31m.venv/lib/python3.12.../scipy/sparse/linalg.py#x1B[0m:226: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap.py::test_arap_hess_prod

Flake rate in main: 68.33% (Passed 19 times, Failed 41 times)

Stack Traces | 60.7s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_hess_prod#x1B[39;49;00m(seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid) -> #x1B[94mNone#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 0x7f93c07c0400>
mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap.py#x1B[0m:59: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap.py#x1B[0m:60: in test_arap_hess_prod
    #x1B[0mcommon.check_hess_prod(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:55: in check_hess_prod
    #x1B[0mtesting.check_jvp(model.grad, model.hess_prod, u, rtol=#x1B[94m1e-3#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        p_full     = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      Arap(
        id='elastic',
        requi...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f93b07634c0>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9366805df0>
        input_value = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9366805100>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f93668062a0>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_405'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f93b0761620>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_405 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_hess_prod(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-0.23030316,  0.4469279 , -1.00805308],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.05685429,  0.38357654,  1.17551652],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.32433812, -0.93279542,  0.88309023],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.2684392 ,  0.67174205, -1.042468  ]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': Arap(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=Arap__Params(#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f938c4f20e0)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   2,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f93b0761620>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap.py::test_arap_hess_quad

Flake rate in main: 68.33% (Passed 19 times, Failed 41 times)

Stack Traces | 67.2s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_hess_quad#x1B[39;49;00m(seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid) -> #x1B[94mNone#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 0x7f93c07c0860>
mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap.py#x1B[0m:64: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap.py#x1B[0m:65: in test_arap_hess_quad
    #x1B[0mcommon.check_hess_quad(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:62: in check_hess_quad
    #x1B[0mexpected: Scalar = jnp.vdot(p, model.hess_prod(u, p))#x1B[90m#x1B[39;49;00m
                                   ^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        actual     = Array(0.06165106, dtype=float64)
        mesh       = UnstructuredGrid (0x7f938c4f20e0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   2
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        p_full     = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      Arap(
        id='elastic',
        requi...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f938cfbe480>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f93b021f920>
        input_value = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f93b021e990>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f93b021e1b0>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_304'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f938cfbe520>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_304 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_hess_quad(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[ 0.47874223, -0.38700476,  0.24528764],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.38609176, -0.17329485,  0.90024778],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.81725247, -0.63050376, -0.88730332],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.96864485, -0.64144405, -1.07241723]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': Arap(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=Arap__Params(#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f938c4f20e0)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   2,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f938cfbe520>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap_muscle.py::test_arap_muscle_hess_prod

Flake rate in main: 72.73% (Passed 15 times, Failed 40 times)

Stack Traces | 62s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_muscle_hess_prod#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f93c07c2480>
mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle.py#x1B[0m:64: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle.py#x1B[0m:67: in test_arap_muscle_hess_prod
    #x1B[0mcommon.check_hess_prod(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:55: in check_hess_prod
    #x1B[0mtesting.check_jvp(model.grad, model.hess_prod, u, rtol=#x1B[94m1e-3#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        p_full     = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      ArapMuscle(
        id='elastic',
       ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f937c14da80>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9364a94c80>
        input_value = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9364a94da0>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f9364a95100>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_508'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f937c14db20>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_508 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_muscle_hess_prod(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-1.19693091,  0.13856566,  1.22283071],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.5109477 ,  0.2886049 ,  0.25589075],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.31821538, -0.3961438 , -0.7275457 ],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.93225488, -0.42896687,  0.04529193]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': ArapMuscle(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=ArapMuscle__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f935a8e7ca0)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   3,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f937c14db20>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap_muscle.py::test_arap_muscle_hess_quad

Flake rate in main: 72.73% (Passed 15 times, Failed 40 times)

Stack Traces | 75.2s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_muscle_hess_quad#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f93c07c28e0>
mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle.py#x1B[0m:71: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle.py#x1B[0m:74: in test_arap_muscle_hess_quad
    #x1B[0mcommon.check_hess_quad(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:62: in check_hess_quad
    #x1B[0mexpected: Scalar = jnp.vdot(p, model.hess_prod(u, p))#x1B[90m#x1B[39;49;00m
                                   ^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        actual     = Array(0.08481738, dtype=float64)
        mesh       = UnstructuredGrid (0x7f935a8e7ca0)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        p_full     = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      ArapMuscle(
        id='elastic',
       ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f935828f920>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f935803f260>
        input_value = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f935803e150>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f935803c7d0>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_614'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f9353ad5e40>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_614 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_muscle_hess_quad(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-0.76655026, -0.62556086,  0.68767497],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.28233729, -0.69772602, -0.37828513],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.04823423, -1.03855213,  0.95418263],#x1B[0m
#x1B[1m#x1B[31mE                   [ 1.07699311,  0.54753535, -0.98902473]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': ArapMuscle(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=ArapMuscle__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f935a8e7ca0)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   3,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f9353ad5e40>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap_muscle_v2.py::test_arap_muscle_hess_prod

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

Stack Traces | 61.4s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_muscle_hess_prod#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f93c07a8ae0>
mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle_v2.py#x1B[0m:64: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle_v2.py#x1B[0m:67: in test_arap_muscle_hess_prod
    #x1B[0mcommon.check_hess_prod(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:55: in check_hess_prod
    #x1B[0mtesting.check_jvp(model.grad, model.hess_prod, u, rtol=#x1B[94m1e-3#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        p_full     = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      ArapMuscleV2(
        id='elastic',
     ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f937c9289a0>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f938c82aab0>
        input_value = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f938c8290d0>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f938c82abd0>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_207'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f937c928a40>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_207 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_muscle_hess_prod(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-1.19693091,  0.13856566,  1.22283071],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.5109477 ,  0.2886049 ,  0.25589075],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.31821538, -0.3961438 , -0.7275457 ],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.93225488, -0.42896687,  0.04529193]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': ArapMuscleV2(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=ArapMuscleV2__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f93b0594280)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   3,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f937c928a40>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_arap_muscle_v2.py::test_arap_muscle_hess_quad

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

Stack Traces | 68.8s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_arap_muscle_hess_quad#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m

f          = <function given.<locals>.run_test_as_given.<locals>.wrapped_test at 0x7f93c07a8ea0>
mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle_v2.py#x1B[0m:71: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_arap_muscle_v2.py#x1B[0m:74: in test_arap_muscle_hess_quad
    #x1B[0mcommon.check_hess_quad(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:62: in check_hess_quad
    #x1B[0mexpected: Scalar = jnp.vdot(p, model.hess_prod(u, p))#x1B[90m#x1B[39;49;00m
                                   ^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        actual     = Array(0.5856506, dtype=float64)
        mesh       = UnstructuredGrid (0x7f93b0594280)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   3
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        p_full     = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      ArapMuscleV2(
        id='elastic',
     ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f935abcbba0>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f935a3e1bb0>
        input_value = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f935a3e1fd0>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f935a3e2990>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_105'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f9359e01d00>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_105 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_arap_muscle_hess_quad(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-0.76655026, -0.62556086,  0.68767497],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.28233729, -0.69772602, -0.37828513],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.04823423, -1.03855213,  0.95418263],#x1B[0m
#x1B[1m#x1B[31mE                   [ 1.07699311,  0.54753535, -0.98902473]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': ArapMuscleV2(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'mu'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=ArapMuscleV2__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f93b0594280)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   3,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f9359e01d00>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_phace.py::test_phace_hess_prod

Flake rate in main: 72.73% (Passed 15 times, Failed 40 times)

Stack Traces | 63.7s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_phace_hess_prod#x1B[39;49;00m(seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid) -> #x1B[94mNone#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 0x7f93c07aae80>
mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_phace.py#x1B[0m:62: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_phace.py#x1B[0m:63: in test_phace_hess_prod
    #x1B[0mcommon.check_hess_prod(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:55: in check_hess_prod
    #x1B[0mtesting.check_jvp(model.grad, model.hess_prod, u, rtol=#x1B[94m1e-3#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        p_full     = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      Phace(
        id='elastic',
        requ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f938c526b60>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9365982330>
        input_value = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f9365983f50>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f9365983cb0>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_718'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.16308578, -0.56740909,  0.93064292],
       [ 0.14900107,  0.06445298, -0.29018964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f938c5276a0>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_718 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_phace_hess_prod(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-0.42033094, -0.31086302, -1.18779184],#x1B[0m
#x1B[1m#x1B[31mE                   [ 1.08350666, -0.84188598,  0.03346199],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.06173197, -0.09646734, -0.07578768],#x1B[0m
#x1B[1m#x1B[31mE                   [-0.78159042, -1.11343283, -1.00513326]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': Phace(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'lambda_', 'mu', 'muscle_fraction'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=Phace__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	lambda_=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                	muscle_fraction=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f9353845000)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   5,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...8964],
       [ 0.76601795,  0.26512078,  0.06760015],
       [-0.61669224,  0.7083533 , -0.88112142]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f938c5276a0>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError
tests/warp/energies/elastic/hyperelastic/test_phace.py::test_phace_hess_quad

Flake rate in main: 72.73% (Passed 15 times, Failed 40 times)

Stack Traces | 77.4s run time
model = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
mesh = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5

    #x1B[0m#x1B[37m@hypothesis#x1B[39;49;00m.given(seed=testing.seed())#x1B[90m#x1B[39;49;00m
>   #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_phace_hess_quad#x1B[39;49;00m(seed: #x1B[96mint#x1B[39;49;00m, model: Model, mesh: pv.UnstructuredGrid) -> #x1B[94mNone#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 0x7f93c07ab2e0>
mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)

#x1B[1m#x1B[.../elastic/hyperelastic/test_phace.py#x1B[0m:67: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../elastic/hyperelastic/test_phace.py#x1B[0m:68: in test_phace_hess_quad
    #x1B[0mcommon.check_hess_quad(seed, model, mesh)#x1B[90m#x1B[39;49;00m
        mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        seed       = 0
#x1B[1m#x1B[.../elastic/hyperelastic/common.py#x1B[0m:62: in check_hess_quad
    #x1B[0mexpected: Scalar = jnp.vdot(p, model.hess_prod(u, p))#x1B[90m#x1B[39;49;00m
                                   ^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        actual     = Array(0.59550389, dtype=float64)
        mesh       = UnstructuredGrid (0x7f9353845000)
  N Cells:    1
  N Points:   4
  X Bounds:   -3.536e-01, 3.536e-01
  Y Bounds:   -3.536e-01, 3.536e-01
  Z Bounds:   -3.536e-01, 3.536e-01
  N Arrays:   5
        model      = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        seed       = 0
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../apple/model/_model.py#x1B[0m:117: in hess_prod
    #x1B[0moutput_wp: Full = #x1B[96mself#x1B[39;49;00m.warp.hess_prod(u_full, p_full)#x1B[90m#x1B[39;49;00m
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        output_jax = Array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]], dtype=float64)
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        p_full     = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = Model(
  dirichlet=Dirichlet(
    dim=3,
    dirichlet_index=Array([], shape=(0,), dtype=int64),
    dirichlet_value=A...se,
          clamp_hess_quad=False
        )
      }
    )
  ),
  edges_length_mean=Array(0.99999998, dtype=float64)
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
        u_full     = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[.../warp/model/_adapter.py#x1B[0m:60: in hess_prod
    #x1B[0m(output,) = #x1B[96mself#x1B[39;49;00m._hess_prod_callable(u, p, output_dims=u.shape)#x1B[90m#x1B[39;49;00m
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        p          = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        self       = WarpModelAdapter(
  wrapped=WarpModel(
    energies={
      'elastic':
      Phace(
        id='elastic',
        requ...1,), dtype=float64),
               ),
        clamp_hess_diag=False,
        clamp_hess_quad=False
      )
    }
  )
)
        u          = Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656,  0.32470532,  0.08279294],
       [-0.75529065,  0.86755208, -1.07914894]], dtype=float64)
#x1B[1m#x1B[31m.venv/lib/python3.12.../_src/jax_experimental/ffi.py#x1B[0m:640: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m call(*args, call_id=call_id)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        call       = <function ffi_call.<locals>.wrapped at 0x7f93644c2200>
        call_id    = 0
        d          = 0
        device     = 'cpu'
        i          = 1
        input_arg  = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f93588b0140>
        input_value = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        module     = <warp._src.context.Module object at 0x7f938cd88d70>
        num_inputs = 2
        out_types  = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        output_arg = <warp._src.jax_experimental.ffi.FfiArg object at 0x7f93588b2f00>
        output_dims = (4, 3)
        self       = <warp._src.jax_experimental.ffi.FfiCallable object at 0x7f93588b3950>
        static_inputs = {}
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/ffi.py#x1B[0m:540: in wrapped
    #x1B[0mresults = ffi_call_p.bind(#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        custom_call_api_version = 4
        has_side_effect = False
        in_avals   = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        input_layouts = None
        input_output_aliases = {}
        kwargs     = {'call_id': 0}
        legacy_backend_config = None
        multiple_results = True
        output_layouts_ = None
        result_avals = (ShapedArray(float64[4,3]),)
        result_shape_dtypes = [ShapeDtypeStruct(shape=(4, 3), dtype=float64)]
        static_input_layouts = ((1, 0), (1, 0))
        static_input_output_aliases = ()
        static_output_layouts = ((1, 0),)
        target_name = 'WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_825'
        vmap_method = 'broadcast_all'
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:633: in bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._true_bind(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:649: in _true_bind
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.bind_with_trace(prev_trace, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        arg        = Array([[-0.93533705, -0.11326748,  0.16791879],
       [ 0.81027622, -0.72888169,  0.62500202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        prev_trace = EvalTrace
        self       = ffi_call
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:661: in bind_with_trace
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m trace.process_primitive(#x1B[96mself#x1B[39;49;00m, args, params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
        in_type    = [ShapedArray(float64[4,3]), ShapedArray(float64[4,3])]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        self       = ffi_call
        trace      = EvalTrace
#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/core.py#x1B[0m:1210: in process_primitive
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m primitive.impl(*args, **params)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64)]
        params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
        primitive  = ffi_call
        self       = EvalTrace
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

prim = ffi_call
args = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
params = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
fun = <PjitFunction of <function ffi_call at 0x7f93644c3600>>
prev = <object object at 0x7f941d4a3b00>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mapply_primitive#x1B[39;49;00m(prim, *args, **params):#x1B[90m#x1B[39;49;00m
    #x1B[90m  #x1B[39;49;00m#x1B[33m"""Impl rule that compiles and runs a single primitive 'prim' using XLA."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      fun = xla_primitive_callable(prim, **params)#x1B[90m#x1B[39;49;00m
      #x1B[90m# TODO(yashkatariya): Investigate adding is_primitive to jit and never#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      #x1B[90m# triggering the disable jit path instead of messing around with it here.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
      prev = config.disable_jit.swap_local(#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
      #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>       outs = fun(*args)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       jax.errors.JaxRuntimeError: NOT_FOUND: No FFI handler registered for WarpModelAdapter___hess_prod_callable__locals__hess_prod_callable_825 on a platform Host (canonical host)#x1B[0m
#x1B[1m#x1B[31mE       --------------------#x1B[0m
#x1B[1m#x1B[31mE       For simplicity, JAX has removed its internal frames from the traceback of the following exception. Set JAX_TRACEBACK_FILTERING=off to include these.#x1B[0m
#x1B[1m#x1B[31mE       Falsifying example: test_phace_hess_quad(#x1B[0m
#x1B[1m#x1B[31mE           model=Model(dirichlet=Dirichlet(dim=3,#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_index=Array([], shape=(0,), dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             dirichlet_value=Array([], shape=(0,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE             free_index=Array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int64),#x1B[0m
#x1B[1m#x1B[31mE             n_points=4),#x1B[0m
#x1B[1m#x1B[31mE            u_full=Array([[-0.81671112, -0.09798451,  1.16489133],#x1B[0m
#x1B[1m#x1B[31mE                   [ 1.09169105,  1.08964695,  0.47490621],#x1B[0m
#x1B[1m#x1B[31mE                   [ 0.39828523,  0.91929163, -0.3556751 ],#x1B[0m
#x1B[1m#x1B[31mE                   [-1.03554067,  0.96252309, -0.89989933]], dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            jax=JaxModel(energies={}),#x1B[0m
#x1B[1m#x1B[31mE            warp=WarpModelAdapter(wrapped=WarpModel(dim=3,#x1B[0m
#x1B[1m#x1B[31mE              energies={'elastic': Phace(id='elastic',#x1B[0m
#x1B[1m#x1B[31mE                requires_grad=['activation', 'lambda_', 'mu', 'muscle_fraction'],#x1B[0m
#x1B[1m#x1B[31mE                cells=array(shape=(1,), dtype=vec4i),#x1B[0m
#x1B[1m#x1B[31mE                dhdX=array(shape=(1, 1), dtype=mat43(d)),#x1B[0m
#x1B[1m#x1B[31mE                dV=array(shape=(1, 1), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                params=Phace__Params(#x1B[0m
#x1B[1m#x1B[31mE                	activation=array(shape=(1,), dtype=vector(length=6, dtype=float64)),#x1B[0m
#x1B[1m#x1B[31mE                	lambda_=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                	mu=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                	muscle_fraction=array(shape=(1,), dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE                ),#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_diag=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_hess_quad=False,#x1B[0m
#x1B[1m#x1B[31mE                clamp_lambda=False)})),#x1B[0m
#x1B[1m#x1B[31mE            edges_length_mean=Array(0.99999998, dtype=float64),#x1B[0m
#x1B[1m#x1B[31mE            frozen=False),#x1B[0m
#x1B[1m#x1B[31mE           mesh=UnstructuredGrid (0x7f9353845000)#x1B[0m
#x1B[1m#x1B[31mE             N Cells:    1#x1B[0m
#x1B[1m#x1B[31mE             N Points:   4#x1B[0m
#x1B[1m#x1B[31mE             X Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Y Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             Z Bounds:   -3.536e-01, 3.536e-01#x1B[0m
#x1B[1m#x1B[31mE             N Arrays:   5,#x1B[0m
#x1B[1m#x1B[31mE           seed=0,  # or any other generated value#x1B[0m
#x1B[1m#x1B[31mE       )#x1B[0m
#x1B[1m#x1B[31mE       #x1B[0m
#x1B[1m#x1B[31mE       You can reproduce this example by temporarily adding @reproduce_failure('6.150.1', b'AEEA') as a decorator on your test case#x1B[0m

args       = (Array([[-0.19973847, -0.69493137,  1.13980015],
       [ 0.18248829,  0.07893845, -0.35540827],
       [ 0.93817656, ...0202],
       [ 0.07366043, -0.68028063, -0.04946978],
       [-1.00891584, -0.82771482, -0.90290814]], dtype=float64))
fun        = <PjitFunction of <function ffi_call at 0x7f93644c3600>>
params     = {'attributes': (('call_id', 0),), 'custom_call_api_version': 4, 'has_side_effect': False, 'input_layouts': ((1, 0), (1, 0)), ...}
prev       = <object object at 0x7f941d4a3b00>
prim       = ffi_call

#x1B[1m#x1B[31m.venv/lib/python3.12.../jax/_src/dispatch.py#x1B[0m:91: JaxRuntimeError

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

@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch from 86cc5fa to 7da7494 Compare September 1, 2025 17:52
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch from 7da7494 to 00e7d59 Compare September 8, 2025 17:56
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch from 00e7d59 to 125b03c Compare September 15, 2025 17:56
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch 2 times, most recently from a60b0bb to 7c10bf7 Compare September 29, 2025 17:49
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch from 48333ca to a46f16a Compare October 6, 2025 18:19
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch from 8dec175 to 4b75b9b Compare October 13, 2025 18:02
@pre-commit-ci pre-commit-ci Bot force-pushed the pre-commit-ci-update-config branch 2 times, most recently from 631cda1 to 55eb0d8 Compare October 27, 2025 17:51
liblaf
liblaf previously approved these changes Nov 2, 2025
liblaf
liblaf previously approved these changes Nov 4, 2025
liblaf
liblaf previously approved these changes Nov 10, 2025
liblaf
liblaf previously approved these changes Nov 17, 2025
liblaf
liblaf previously approved these changes Nov 24, 2025
liblaf
liblaf previously approved these changes Feb 9, 2026
liblaf
liblaf previously approved these changes Feb 16, 2026
liblaf
liblaf previously approved these changes Feb 23, 2026
liblaf
liblaf previously approved these changes Mar 2, 2026
liblaf
liblaf previously approved these changes Mar 9, 2026
liblaf
liblaf previously approved these changes Mar 16, 2026
liblaf
liblaf previously approved these changes Mar 23, 2026
@liblaf-mega-linter
Copy link
Copy Markdown

liblaf-mega-linter Bot commented May 18, 2026

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ BASH shellcheck 2 0 0 0.04s
✅ BASH shfmt 2 0 0 0 0.55s
⚠️ COPYPASTE jscpd yes 458 no 9.33s
✅ JSON prettier 19 15 0 0 1.39s
✅ JSON v8r 19 0 0 4.69s
✅ MARKDOWN rumdl 28 0 0 0 0.52s
⚠️ PYTHON ruff yes yes 47 no 1.01s
✅ PYTHON ruff-format yes yes no no 0.22s
✅ REPOSITORY git_diff yes no no 0.34s
⚠️ SPELL cspell yes 13 no 7.04s

Detailed Issues

⚠️ SPELL / cspell - 13 errors
exp/2026/05/13/toy/data/30-inverse-activation-diff-forward-no-collision-summary.json:13:4      - Unknown word (bbox)       -- "bbox_diagonal": 1.732050
	 Suggestions: [box, mbox, vbox, xbox, Xbox]
exp/2026/05/13/toy/data/40-inverse-activation-diff-forward-collision-summary.json:17:12     - Unknown word (atol)       -- "forward_atol": 0.001,
	 Suggestions: [atob, atom, aton, atop, awol]
exp/2026/05/13/toy/data/40-inverse-activation-diff-forward-collision-summary.json:19:4      - Unknown word (bbox)       -- "bbox_diagonal": 2.872281
	 Suggestions: [box, mbox, vbox, xbox, Xbox]
exp/2026/05/13/toy/data/41-inverse-active-tet-activation-diff-forward-collision-summary.json:23:12     - Unknown word (atol)       -- "forward_atol": 0.001,
	 Suggestions: [atob, atom, aton, atop, awol]
exp/2026/05/13/toy/data/41-inverse-active-tet-activation-diff-forward-collision-summary.json:29:4      - Unknown word (bbox)       -- "bbox_diagonal": 2.872281
	 Suggestions: [box, mbox, vbox, xbox, Xbox]
exp/2026/05/13/toy/src/20-smas-layer-bottom-force-collision.py:151:22    - Unknown word (Efat)       -- mesh.field_data["Efat"] = np.asarray([cfg
	 Suggestions: [Efta, Feat, Erat, Eat, Eft]
exp/2026/05/13/toy/src/20-smas-layer-bottom-force-collision.py:152:22    - Unknown word (Esmas)      -- mesh.field_data["Esmas"] = np.asarray([cfg
	 Suggestions: [Smas, Seams, Seas, edams, Edams]
exp/2026/05/20/inverse-face/docs/20-inverse-face.md:42:38     - Unknown word (atol)       -- tolerance: `rtol=0.0005`, `atol=0`
	 Suggestions: [atob, atom, aton, atop, awol]
exp/2026/05/20/inverse-face/docs/20-inverse-face.md:43:38     - Unknown word (atol)       -- tolerance: `rtol=0.0005`, `atol=0`
	 Suggestions: [atob, atom, aton, atop, awol]
exp/2026/05/20/inverse-face/docs/30-transfer-activation-3152k.md:75:11     - Unknown word (atol)       -- forward_atol: 0.0
	 Suggestions: [atob, atom, aton, atop, awol]
exp/2026/05/20/inverse-face/docs/31-transfer-activation-3152k-smas1.md:72:11     - Unknown word (atol)       -- forward_atol: 0.0
	 Suggestions: [atob, atom, aton, atop, awol]
src/liblaf/apple/inverse/_diff_forward.py:92:9      - Unknown word (rprecondition) -- def rprecondition(self, p_free: Free)
	 Suggestions: [precondition, preCondition, PRECONDITION, recondition, rpreconditioner]
src/liblaf/apple/inverse/_diff_forward.py:99:21     - Unknown word (rprecondition) -- return self.rprecondition(p_free)
	 Suggestions: [precondition, preCondition, PRECONDITION, recondition, rpreconditioner]
CSpell: Files checked: 320, skipped: 5, Issues found: 13 in 8 files.


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": [
        "Efat",
        "Esmas",
        "atol",
        "bbox",
        "rprecondition"
    ]
}


You can also copy-paste megalinter-reports/LINTER_DEFAULT at the root of your repository
⚠️ COPYPASTE / jscpd - 458 errors
:
 - exp/2025/08/27/inverse/src/30-inverse.py [87:2 - 102:13] (15 lines, 211 tokens)
   exp/2025/08/27/inverse-segement/src/30-inverse.py [92:2 - 107:15]

Clone found (python):
 - exp/2025/08/27/inverse/src/30-inverse.py [98:9 - 104:11] (6 lines, 94 tokens)
   exp/2025/09/10/inverse/src/30-inverse.py [133:9 - 157:15]

Clone found (python):
 - exp/2025/08/27/inverse/src/30-inverse.py [113:1 - 128:8] (15 lines, 166 tokens)
   exp/2025/09/24/inverse-grin/src/30-inverse.py [229:1 - 140:8]

Clone found (python):
 - exp/2025/08/27/inverse/src/30-inverse.py [122:12 - 130:11] (8 lines, 102 tokens)
   exp/2025/09/10/inverse-mixed/src/30-inverse.py [261:6 - 267:12]

Clone found (python):
 - exp/2025/08/27/inverse/src/30-inverse.py [131:8 - 173:2] (42 lines, 472 tokens)
   exp/2025/08/27/inverse-segement/src/30-inverse.py [138:2 - 242:2]

Clone found (python):
 - exp/2025/08/27/inverse/src/20-forward.py [1:1 - 29:11] (28 lines, 244 tokens)
   exp/2025/08/27/inverse-segement/src/20-forward.py [1:1 - 29:12]

Clone found (python):
 - exp/2025/08/27/inverse/src/20-forward.py [33:2 - 51:2] (18 lines, 191 tokens)
   exp/2025/08/27/inverse-segement/src/20-forward.py [33:15 - 51:2]

Clone found (python):
 - exp/2025/08/27/inverse/src/10-gen.py [32:5 - 39:2] (7 lines, 85 tokens)
   exp/2025/08/27/inverse-segement/src/10-gen.py [46:5 - 53:2]

Clone found (python):
 - exp/2025/07/30/phace/wind/main.py [126:5 - 136:6] (10 lines, 141 tokens)
   exp/2025/07/30/dynamics/collision/inter-collision/main.py [132:2 - 142:7]

Clone found (python):
 - exp/2025/07/30/phace/wind/main.py [139:9 - 152:2] (13 lines, 156 tokens)
   exp/2025/07/30/dynamics/collision/inter-collision/main.py [142:9 - 155:2]

Clone found (python):
 - exp/2025/07/30/phace/open-mouth/main.py [9:1 - 19:9] (10 lines, 102 tokens)
   exp/2025/07/30/phace/wind/main.py [8:1 - 18:8]

Clone found (python):
 - exp/2025/07/30/phace/open-mouth/main.py [24:5 - 36:10] (12 lines, 96 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-bunny/main.py [19:5 - 31:5]

Clone found (python):
 - exp/2025/07/30/phace/open-mouth/main.py [25:2 - 55:8] (30 lines, 317 tokens)
   exp/2025/07/30/phace/wind/main.py [30:2 - 60:11]

Clone found (python):
 - exp/2025/07/30/phace/open-mouth/main.py [95:2 - 105:17] (10 lines, 145 tokens)
   exp/2025/07/30/dynamics/collision/inter-collision/main.py [132:2 - 136:22]

Clone found (python):
 - exp/2025/07/30/phace/open-mouth/main.py [105:2 - 119:7] (14 lines, 153 tokens)
   exp/2025/07/30/phace/wind/main.py [138:9 - 155:5]

Clone found (python):
 - exp/2025/07/30/phace/grin/main.py [1:1 - 12:6] (11 lines, 103 tokens)
   exp/2025/07/30/phace/wind/main.py [1:1 - 12:7]

Clone found (python):
 - exp/2025/07/30/phace/grin/main.py [19:5 - 36:8] (17 lines, 144 tokens)
   exp/2025/07/30/phace/open-mouth/main.py [20:5 - 42:8]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [1:1 - 14:29] (13 lines, 106 tokens)
   exp/2025/07/30/phace/wind/main.py [1:1 - 15:6]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [35:5 - 53:14] (18 lines, 166 tokens)
   exp/2025/07/30/phace/wind/main.py [32:5 - 44:21]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [53:14 - 66:2] (13 lines, 146 tokens)
   exp/2025/07/30/phace/grin/main.py [44:21 - 56:2]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [90:10 - 97:2] (7 lines, 79 tokens)
   exp/2025/07/30/phace/grin/main.py [90:6 - 97:2]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [107:5 - 117:5] (10 lines, 139 tokens)
   exp/2025/07/30/phace/grin/main.py [101:5 - 111:18]

Clone found (python):
 - exp/2025/07/30/phace/dynamics/main.py [118:5 - 126:15] (8 lines, 101 tokens)
   exp/2025/07/30/phace/grin/main.py [112:18 - 120:13]

Clone found (python):
 - exp/2025/07/30/phace/collide-ball/main.py [9:1 - 18:4] (9 lines, 95 tokens)
   exp/2025/07/30/phace/wind/main.py [9:1 - 19:4]

Clone found (python):
 - exp/2025/07/30/phace/collide-ball/main.py [12:7 - 35:6] (23 lines, 197 tokens)
   exp/2025/07/30/phace/grin/main.py [12:4 - 41:13]

Clone found (python):
 - exp/2025/07/30/phace/collide-ball/main.py [35:6 - 42:13] (7 lines, 122 tokens)
   exp/2025/07/30/phace/wind/main.py [41:13 - 48:11]

Clone found (python):
 - exp/2025/07/30/phace/close-mouth/main.py [1:1 - 22:8] (21 lines, 180 tokens)
   exp/2025/07/30/phace/open-mouth/main.py [1:1 - 21:6]

Clone found (python):
 - exp/2025/07/30/phace/close-mouth/main.py [29:5 - 57:8] (28 lines, 313 tokens)
   exp/2025/07/30/phace/wind/main.py [32:5 - 60:11]

Clone found (python):
 - exp/2025/07/30/phace/close-mouth/main.py [101:5 - 140:17] (39 lines, 452 tokens)
   exp/2025/07/30/phace/open-mouth/main.py [55:5 - 124:5]

Clone found (python):
 - exp/2025/07/30/phace/close-mouth/main.py [140:5 - 165:2] (25 lines, 353 tokens)
   exp/2025/07/30/phace/open-mouth/main.py [94:5 - 155:2]

Clone found (python):
 - exp/2025/07/30/dynamics/free-falling/main.py [25:2 - 58:4] (33 lines, 360 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny/main.py [24:2 - 57:7]

Clone found (python):
 - exp/2025/07/30/dynamics/free-falling/main.py [78:5 - 84:3] (6 lines, 86 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny/main.py [75:5 - 81:3]

Clone found (python):
 - exp/2025/07/30/dynamics/free-falling/main.py [137:5 - 151:10] (14 lines, 138 tokens)
   exp/2025/07/30/dynamics/collision/collision-bunny-sphere/main.py [69:5 - 83:10]

Clone found (python):
 - exp/2025/04/30/fat-muscle/src/20-simulate.py [17:5 - 30:6] (13 lines, 138 tokens)
   exp/2025/04/30/human-head/src/10-simulate.py [18:5 - 31:8]

Clone found (python):
 - exp/2025/04/30/fat-muscle/src/20-simulate.py [48:2 - 58:6] (10 lines, 136 tokens)
   exp/2025/04/30/human-head/src/10-simulate.py [47:2 - 57:8]

Clone found (python):
 - exp/2025/04/30/fat-muscle/src/20-simulate.py [59:6 - 72:3] (13 lines, 109 tokens)
   exp/2025/04/30/human-head/src/10-simulate.py [58:8 - 71:4]

Clone found (python):
 - exp/2025/04/30/cubic/src/10-gen.py [21:4 - 44:4] (23 lines, 196 tokens)
   exp/2025/04/30/human-head/src/10-simulate.py [24:7 - 46:9]

Clone found (python):
 - exp/2025/04/30/cubic/src/10-gen.py [44:2 - 71:2] (27 lines, 305 tokens)
   exp/2025/04/30/fat-muscle/src/20-simulate.py [46:3 - 73:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [57:1 - 63:27] (6 lines, 83 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [36:4 - 42:9]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [81:6 - 93:7] (12 lines, 171 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [36:6 - 69:44]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [102:6 - 108:2] (6 lines, 82 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [21:6 - 26:3]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [103:9 - 116:8] (13 lines, 166 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [57:6 - 94:8]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean.py [25:2 - 35:3] (10 lines, 126 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [27:2 - 37:6]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean.py [74:4 - 84:8] (10 lines, 127 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [53:1 - 63:44]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean.py [93:9 - 103:8] (10 lines, 121 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [53:6 - 63:44]

Clone found (python):
 - src/liblaf/apple/warp/fem/_stable_neo_hookean.py [116:16 - 150:2] (34 lines, 323 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [135:2 - 169:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [1:1 - 28:3] (27 lines, 251 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [1:1 - 28:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [29:2 - 39:2] (10 lines, 105 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [29:4 - 39:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [39:3 - 60:2] (21 lines, 193 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [39:3 - 60:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [62:3 - 84:8] (22 lines, 280 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [62:3 - 63:44]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [83:3 - 103:8] (20 lines, 280 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [83:3 - 63:44]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [102:3 - 110:11] (8 lines, 92 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [102:3 - 110:17]

Clone found (python):
 - src/liblaf/apple/warp/fem/_neo_hookean.py [110:11 - 150:2] (40 lines, 380 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [110:17 - 169:2]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [189:6 - 196:2] (7 lines, 90 tokens)
   src/liblaf/apple/warp/fem/_base.py [166:9 - 173:7]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [211:8 - 218:4] (7 lines, 92 tokens)
   src/liblaf/apple/warp/fem/_base.py [166:8 - 173:7]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [235:5 - 243:10] (8 lines, 108 tokens)
   src/liblaf/apple/warp/fem/_base.py [166:9 - 197:7]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [266:9 - 272:7] (6 lines, 86 tokens)
   src/liblaf/apple/warp/fem/_base.py [167:9 - 173:7]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [292:2 - 300:7] (8 lines, 102 tokens)
   src/liblaf/apple/warp/fem/_base.py [262:2 - 270:10]

Clone found (python):
 - src/liblaf/apple/warp/fem/_base.py [327:9 - 334:7] (7 lines, 103 tokens)
   src/liblaf/apple/warp/fem/_base.py [296:9 - 303:7]

Clone found (python):
 - src/liblaf/apple/warp/fem/_arap.py [7:2 - 22:3] (15 lines, 106 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean.py [7:2 - 22:3]

Clone found (python):
 - src/liblaf/apple/warp/fem/_arap.py [89:4 - 121:2] (32 lines, 288 tokens)
   src/liblaf/apple/warp/fem/_stable_neo_hookean_active.py [137:6 - 169:2]

Clone found (python):
 - exp/2025/07/30/static/stretch.py [12:5 - 19:2] (7 lines, 107 tokens)
   exp/2025/07/30/static/random/main.py [19:5 - 25:3]

Clone found (python):
 - exp/2025/07/30/static/stretch.py [28:9 - 39:3] (11 lines, 124 tokens)
   exp/2025/07/30/static/random/main.py [40:9 - 51:8]

Clone found (python):
 - exp/2025/07/30/static/stretch.py [49:1 - 54:6] (5 lines, 83 tokens)
   exp/2025/07/30/static/random/main.py [60:17 - 65:6]

Clone found (python):
 - exp/2025/07/30/static/stretch.py [67:5 - 77:10] (10 lines, 115 tokens)
   exp/2025/07/30/static/random/main.py [73:5 - 83:6]

Clone found (python):
 - tests/forward/test_static_simulation.py [77:5 - 85:7] (8 lines, 80 tokens)
   exp/2026/05/06/toy/src/10-stretched-cylinder.py [84:17 - 92:13]

Clone found (python):
 - benches/test_aggregation.py [115:9 - 129:7] (14 lines, 161 tokens)
   benches/test_aggregation.py [68:2 - 80:38]

Clone found (python):
 - benches/bench_pncg_branching_backends.py [180:16 - 192:4] (12 lines, 87 tokens)
   benches/bench_pncg_branching_backends.py [141:10 - 153:5]

Clone found (python):
 - benches/bench_pncg_branching_backends.py [347:9 - 357:3] (10 lines, 94 tokens)
   benches/bench_pncg_branching_backends.py [279:9 - 289:5]

Clone found (python):
 - benches/bench_pncg_branching_backends.py [459:36 - 481:2] (22 lines, 172 tokens)
   benches/bench_pncg_branching_backends.py [413:30 - 435:14]

Clone found (python):
 - benches/bench_pncg_branching_backends.py [649:6 - 663:18] (14 lines, 159 tokens)
   benches/bench_pncg_branching_backends.py [475:4 - 489:21]

┌────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐
│ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ python │ 190            │ 28966       │ 293179       │ 458          │ 11881 (41.02%)   │ 124701 (42.53%)   │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ bash   │ 2              │ 45          │ 136          │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total: │ 192            │ 29011       │ 293315       │ 458          │ 11881 (40.95%)   │ 124701 (42.51%)   │
└────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 458 clones.
HTML report saved to megalinter-reports/copy-paste/html/
ERROR: jscpd found too many duplicates (40.95%) over threshold (0%)
Error: ERROR: jscpd found too many duplicates (40.95%) over threshold (0%)
    at ThresholdReporter.report (/node-deps/node_modules/@jscpd/finder/dist/index.js:615:13)
    at /node-deps/node_modules/@jscpd/finder/dist/index.js:109:18
    at Array.forEach (<anonymous>)
    at /node-deps/node_modules/@jscpd/finder/dist/index.js:108:22
    at async /node-deps/node_modules/jscpd/dist/bin/jscpd.js:9:5

(Truncated to last 13333 characters out of 89923)
⚠️ PYTHON / ruff - 47 errors
able first
   --> exp/2026/01/28/smas/src/20-forward-ext-force-stable-neo-hookean-ramped.py:206:21
    |
204 |               if not stage_result.solver_result.success:
205 |                   raise RuntimeError(
206 | /                     "forward stage failed at "
207 | |                     f"force scale {force_scale:g} with status "
208 | |                     f"{stage_result.solver_result.status}"
    | |__________________________________________________________^
209 |                   )
210 |               cherries.set_step(stage_index)
    |
help: Assign to variable; remove f-string literal

RUF046 Value being cast to `int` is already an integer
  --> exp/2026/01/28/smas/src/20-forward-ext-force-stable-neo-hookean-smas-only.py:48:20
   |
46 | def format_lambda_value(lambda_value: float) -> str:
47 |     if np.isclose(lambda_value, round(lambda_value)):
48 |         return str(int(round(lambda_value)))
   |                    ^^^^^^^^^^^^^^^^^^^^^^^^
49 |     mantissa, exponent = f"{lambda_value:.0e}".split("e")
50 |     return f"{mantissa}e{int(exponent)}"
   |
help: Remove unnecessary `int` call

TRY003 Avoid specifying long messages outside the exception class
  --> exp/2026/01/28/smas/src/20-forward-ext-force-stable-neo-hookean-smas-only.py:57:15
   |
55 |   ) -> pv.UnstructuredGrid:
56 |       if "Force" not in mesh.point_data:
57 |           raise KeyError(
   |  _______________^
58 | |             "mesh is missing point_data['Force']; run 11-smas-bottom-force.py first"
59 | |         )
   | |_________^
60 |       mesh.point_data["Force"] = force_scale * np.asarray(mesh.point_data["Force"])
61 |       return mesh
   |

EM101 Exception must not use a string literal, assign to variable first
  --> exp/2026/01/28/smas/src/20-forward-ext-force-stable-neo-hookean-smas-only.py:58:13
   |
56 |     if "Force" not in mesh.point_data:
57 |         raise KeyError(
58 |             "mesh is missing point_data['Force']; run 11-smas-bottom-force.py first"
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
59 |         )
60 |     mesh.point_data["Force"] = force_scale * np.asarray(mesh.point_data["Force"])
   |
help: Assign to variable; remove string literal

RUF046 Value being cast to `int` is already an integer
  --> exp/2026/01/28/smas/src/20-forward-ext-force-stable-neo-hookean.py:49:20
   |
47 | def format_lambda_value(lambda_value: float) -> str:
48 |     if np.isclose(lambda_value, round(lambda_value)):
49 |         return str(int(round(lambda_value)))
   |                    ^^^^^^^^^^^^^^^^^^^^^^^^
50 |     mantissa, exponent = f"{lambda_value:.0e}".split("e")
51 |     return f"{mantissa}e{int(exponent)}"
   |
help: Remove unnecessary `int` call

RUF046 Value being cast to `int` is already an integer
  --> exp/2026/01/28/smas/src/20-forward-ext-force.py:49:20
   |
47 | def format_lambda_value(lambda_value: float) -> str:
48 |     if np.isclose(lambda_value, round(lambda_value)):
49 |         return str(int(round(lambda_value)))
   |                    ^^^^^^^^^^^^^^^^^^^^^^^^
50 |     mantissa, exponent = f"{lambda_value:.0e}".split("e")
51 |     return f"{mantissa}e{int(exponent)}"
   |
help: Remove unnecessary `int` call

ARG001 Unused function argument: `failure_dir`
   --> exp/2026/01/28/smas/src/30-inverse-unreachable-stable-neo-hookean.py:286:5
    |
284 |     target: pv.UnstructuredGrid,
285 |     forward: Forward,
286 |     failure_dir: Path,
    |     ^^^^^^^^^^^
287 | ) -> MyInverse:
288 |     surface_indices: Integer[Array, " surface_points"] = mesh.surface_indices()
    |

D205 1 blank line required between summary line and description
  --> exp/2026/04/18/2d-demo/src/10-simulation.py:1:1
   |
 1 | / """2D Muscle-Fascia Neohookean FEM Simulation
 2 | | ==========================================
 3 | |
 4 | | Simulates a flat meat slab (100x11 elements) with a stiff fascia middle layer.
 5 | | Uses analytical First Piola-Kirchhoff stress with NumPy vectorized computation.
 6 | | Real-time visualization with Pygame.
 7 | |
 8 | | Material: Neohookean hyperelastic
 9 | |   Psi(F) = mu/2 * (tr(F^T F) - 2) - mu * ln(J) + lam/2 * (ln J)^2
10 | |   P      = mu * (F - F^{-T}) + lam * ln(J) * F^{-T}
11 | |
12 | | Controls:
13 | |     Up/Down    Increase/decrease wind force
14 | |     R          Reset simulation
15 | |     SPACE      Pause/resume
16 | |     W          Toggle wireframe overlay
17 | |     ESC        Quit
18 | | """
   | |___^
19 |
20 |   import sys
   |
help: Insert single blank line

D415 First line should end with a period, question mark, or exclamation point
  --> exp/2026/04/18/2d-demo/src/10-simulation.py:1:1
   |
 1 | / """2D Muscle-Fascia Neohookean FEM Simulation
 2 | | ==========================================
 3 | |
 4 | | Simulates a flat meat slab (100x11 elements) with a stiff fascia middle layer.
 5 | | Uses analytical First Piola-Kirchhoff stress with NumPy vectorized computation.
 6 | | Real-time visualization with Pygame.
 7 | |
 8 | | Material: Neohookean hyperelastic
 9 | |   Psi(F) = mu/2 * (tr(F^T F) - 2) - mu * ln(J) + lam/2 * (ln J)^2
10 | |   P      = mu * (F - F^{-T}) + lam * ln(J) * F^{-T}
11 | |
12 | | Controls:
13 | |     Up/Down    Increase/decrease wind force
14 | |     R          Reset simulation
15 | |     SPACE      Pause/resume
16 | |     W          Toggle wireframe overlay
17 | |     ESC        Quit
18 | | """
   | |___^
19 |
20 |   import sys
   |
help: Add closing punctuation

ANN001 Missing type annotation for function argument `f2v`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:126:16
    |
126 | def init_state(f2v):
    |                ^^^
127 |     """Initialize node positions and precompute reference configuration.
    |

ANN001 Missing type annotation for function argument `pos`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:28
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                            ^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `f2v`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:33
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                 ^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `Dm_inv`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:38
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                      ^^^^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `Dm_inv_T`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:46
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                              ^^^^^^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `W`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:56
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                                        ^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `elem_mu`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:59
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                                           ^^^^^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `elem_lam`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:185:68
    |
185 | def compute_elastic_forces(pos, f2v, Dm_inv, Dm_inv_T, W, elem_mu, elem_lam):
    |                                                                    ^^^^^^^^
186 |     """Compute internal elastic forces using the analytical Neohookean stress.
    |

ANN001 Missing type annotation for function argument `pos`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:256:5
    |
255 | def substep(
256 |     pos,
    |     ^^^
257 |     vel,
258 |     rest_pos,
    |

ANN001 Missing type annotation for function argument `vel`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:257:5
    |
255 | def substep(
256 |     pos,
257 |     vel,
    |     ^^^
258 |     rest_pos,
259 |     f2v,
    |

ANN001 Missing type annotation for function argument `rest_pos`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:258:5
    |
256 |     pos,
257 |     vel,
258 |     rest_pos,
    |     ^^^^^^^^
259 |     f2v,
260 |     Dm_inv,
    |

ANN001 Missing type annotation for function argument `f2v`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:259:5
    |
257 |     vel,
258 |     rest_pos,
259 |     f2v,
    |     ^^^
260 |     Dm_inv,
261 |     Dm_inv_T,
    |

ANN001 Missing type annotation for function argument `Dm_inv`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:260:5
    |
258 |     rest_pos,
259 |     f2v,
260 |     Dm_inv,
    |     ^^^^^^
261 |     Dm_inv_T,
262 |     W,
    |

ANN001 Missing type annotation for function argument `Dm_inv_T`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:261:5
    |
259 |     f2v,
260 |     Dm_inv,
261 |     Dm_inv_T,
    |     ^^^^^^^^
262 |     W,
263 |     elem_mu,
    |

ANN001 Missing type annotation for function argument `W`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:262:5
    |
260 |     Dm_inv,
261 |     Dm_inv_T,
262 |     W,
    |     ^
263 |     elem_mu,
264 |     elem_lam,
    |

ANN001 Missing type annotation for function argument `elem_mu`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:263:5
    |
261 |     Dm_inv_T,
262 |     W,
263 |     elem_mu,
    |     ^^^^^^^
264 |     elem_lam,
265 |     fixed_mask,
    |

ANN001 Missing type annotation for function argument `elem_lam`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:264:5
    |
262 |     W,
263 |     elem_mu,
264 |     elem_lam,
    |     ^^^^^^^^
265 |     fixed_mask,
266 |     bottom_mask,
    |

ANN001 Missing type annotation for function argument `fixed_mask`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:265:5
    |
263 |     elem_mu,
264 |     elem_lam,
265 |     fixed_mask,
    |     ^^^^^^^^^^
266 |     bottom_mask,
267 |     wind,
    |

ANN001 Missing type annotation for function argument `bottom_mask`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:266:5
    |
264 |     elem_lam,
265 |     fixed_mask,
266 |     bottom_mask,
    |     ^^^^^^^^^^^
267 |     wind,
268 |     mass,
    |

ANN001 Missing type annotation for function argument `wind`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:267:5
    |
265 |     fixed_mask,
266 |     bottom_mask,
267 |     wind,
    |     ^^^^
268 |     mass,
269 | ):
    |

ANN001 Missing type annotation for function argument `mass`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:268:5
    |
266 |     bottom_mask,
267 |     wind,
268 |     mass,
    |     ^^^^
269 | ):
270 |     """Single substep of Symplectic Euler integration.
    |

ANN001 Missing type annotation for function argument `sim_pos`
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:307:19
    |
307 | def sim_to_screen(sim_pos):
    |                   ^^^^^^^
308 |     """Convert simulation coordinates to screen pixel coordinates (y-flipped)."""
309 |     screen = np.empty_like(sim_pos)
    |

C901 `main` is too complex (18 > 10)
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:320:5
    |
320 | def main():
    |     ^^^^
321 |     # --- Build mesh & initialize state ---
322 |     f2v, is_fascia, elem_mu, elem_lam = build_mesh()
    |

PLR0912 Too many branches (17 > 12)
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:320:5
    |
320 | def main():
    |     ^^^^
321 |     # --- Build mesh & initialize state ---
322 |     f2v, is_fascia, elem_mu, elem_lam = build_mesh()
    |

PLR0915 Too many statements (57 > 50)
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:320:5
    |
320 | def main():
    |     ^^^^
321 |     # --- Build mesh & initialize state ---
322 |     f2v, is_fascia, elem_mu, elem_lam = build_mesh()
    |

FBT003 Boolean positional value in function call
   --> exp/2026/04/18/2d-demo/src/10-simulation.py:431:37
    |
429 |         y_pos = 12
430 |         for fnt, text, color in hud_lines:
431 |             surf = fnt.render(text, True, color)
    |                                     ^^^^
432 |             screen.blit(surf, (15, y_pos))
433 |             y_pos += 28
    |

B007 Loop control variable `step` not used within loop body
   --> exp/2026/04/18/2d-demo/src/30-simulation-stable-neo-hookean-self-collision.py:829:9
    |
827 |     contact_points = np.empty((0, 2), dtype=pos.dtype)
828 |
829 |     for step in range(SUBSTEPS):
    |         ^^^^
830 |         substep_contacts, substep_points = substep(
831 |             pos,
    |
help: Rename unused `step` to `_step`

Found 47 errors.
No fixes available (13 hidden fixes can be enabled with the `--unsafe-fixes` option).

(Truncated to last 13333 characters out of 18919)

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security
Show us your support by starring ⭐ the repository

pre-commit-ci Bot added 2 commits June 1, 2026 18:16
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.15.13 → v0.15.15](astral-sh/ruff-pre-commit@v0.15.13...v0.15.15)
- [github.com/oxc-project/mirrors-oxfmt: v0.50.0 → v0.45.0](oxc-project/mirrors-oxfmt@v0.50.0...v0.45.0)
- [github.com/oxc-project/mirrors-oxlint: v1.65.0 → v1.60.0](oxc-project/mirrors-oxlint@v1.65.0...v1.60.0)
- [github.com/rvben/rumdl-pre-commit: v0.1.93 → v0.2.4](rvben/rumdl-pre-commit@v0.1.93...v0.2.4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant