chore(pre-commit.ci): pre-commit autoupdate#45
Conversation
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|
| ✅ BASH | shellcheck | 2 | 0 | 0 | 0.03s | |
| ✅ BASH | shfmt | 2 | 0 | 0 | 0 | 1.06s |
| jscpd | yes | 313 | no | 9.1s | ||
| ✅ JSON | prettier | 7 | 0 | 0 | 0 | 1.96s |
| ✅ JSON | v8r | 7 | 0 | 0 | 5.01s | |
| ruff | yes | yes | 1 | no | 0.55s | |
| ✅ REPOSITORY | git_diff | yes | no | no | 1.02s | |
| 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
❌ 12 Tests Failed:
View the full list of 12 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
86cc5fa to
7da7494
Compare
7da7494 to
00e7d59
Compare
00e7d59 to
125b03c
Compare
a60b0bb to
7c10bf7
Compare
48333ca to
a46f16a
Compare
8dec175 to
4b75b9b
Compare
631cda1 to
55eb0d8
Compare
55eb0d8 to
3f1344c
Compare
3f1344c to
f1081fd
Compare
f1081fd to
eb196fe
Compare
eb196fe to
3a37d31
Compare
3a37d31 to
846a2c1
Compare
3ba4601 to
c50f796
Compare
4b29bb0 to
1c7eb7b
Compare
968e5b5 to
9214caf
Compare
7276613 to
0130731
Compare
0130731 to
21d11f0
Compare
21d11f0 to
f9b1aa4
Compare
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|
| ✅ BASH | shellcheck | 2 | 0 | 0 | 0.04s | |
| ✅ BASH | shfmt | 2 | 0 | 0 | 0 | 0.55s |
| 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 |
| ruff | yes | yes | 47 | no | 1.01s | |
| ✅ PYTHON | ruff-format | yes | yes | no | no | 0.22s |
| ✅ REPOSITORY | git_diff | yes | no | no | 0.34s | |
| 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

Show us your support by starring ⭐ the repository
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)
for more information, see https://pre-commit.ci
updates: