Skip to content

chore(main): release 0.8.5#81

Merged
mergery[bot] merged 1 commit intomainfrom
release-please--branches--main
Nov 16, 2025
Merged

chore(main): release 0.8.5#81
mergery[bot] merged 1 commit intomainfrom
release-please--branches--main

Conversation

@liblaf
Copy link
Copy Markdown
Contributor

@liblaf liblaf bot commented Nov 11, 2025

🤖 I have created a release beep boop

0.8.5 (2025-11-12)

🐛 Bug Fixes

  • io: preserve mesh data integrity during OBJ/PLY save/load operations (55b63ec)

♻️ Code Refactoring

  • ext/wrap: Remove point order preservation hack in fast_wrapping (33aad99)

This PR was generated with Release Please. See documentation.

@liblaf liblaf bot added the autorelease: pending is the initial state of the Release PR before it is merged label Nov 11, 2025
@liblaf liblaf bot added the automerge Merge the pull request once unit tests and other checks pass. label Nov 11, 2025
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 4a740e4 to 76d6073 Compare November 11, 2025 18:17
@liblaf
Copy link
Copy Markdown
Contributor Author

liblaf bot commented Nov 11, 2025

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
⚠️ COPYPASTE jscpd yes 17 no 2.72s
⚠️ JSON prettier 20 0 1 0 0.5s
✅ JSON v8r 20 0 0 6.15s
⚠️ PYTHON ruff yes yes 142 no 3.07s
✅ REPOSITORY git_diff yes no no 0.11s
✅ SPELL cspell 172 0 0 4.97s
✅ YAML prettier 4 0 0 0 0.47s
✅ YAML v8r 4 0 0 4.33s
✅ YAML yamllint 4 0 0 0.39s

Detailed Issues

⚠️ COPYPASTE / jscpd - 17 errors
Clone found (python):
 - src/liblaf/melon/io/paraview/series/_shared.py [6:1 - 18:2] (12 lines, 104 tokens)
   src/liblaf/melon/io/paraview/series/_writer.py [16:1 - 28:2]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py [31:5 - 36:6] (5 lines, 81 tokens)
   exp/2025/04/30/human-head-anatomy/src/34-muscles.py [38:5 - 43:6]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py [80:7 - 86:15] (6 lines, 82 tokens)
   exp/2025/04/30/human-head-anatomy/src/34-muscles.py [99:11 - 105:23]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/31-inspect-volumns.py [17:5 - 23:8] (6 lines, 101 tokens)
   exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py [17:5 - 23:4]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/30-inspect-muscles.py [13:21 - 21:8] (8 lines, 77 tokens)
   exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py [13:30 - 21:14]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/23-split-components.py [25:6 - 35:2] (10 lines, 92 tokens)
   exp/2025/04/30/human-head-anatomy/src/40-gen-expression.py [15:4 - 25:2]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/23-split-components.py [36:5 - 50:4] (14 lines, 139 tokens)
   exp/2025/04/30/human-head-anatomy/src/40-gen-expression.py [26:5 - 40:6]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/21-shortest-path-skin.py [34:5 - 47:2] (13 lines, 196 tokens)
   exp/2025/04/30/human-head-anatomy/src/22-shortest-path.py [36:5 - 49:2]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/15-find-jaw-pivot.py [6:1 - 17:7] (11 lines, 103 tokens)
   exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py [7:1 - 18:5]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/14-register-cranium.py [19:33 - 42:2] (23 lines, 219 tokens)
   exp/2025/04/30/human-head-anatomy/src/14-register-mandible.py [19:34 - 42:2]

Clone found (python):
 - exp/2025/04/30/human-head-anatomy/src/12-register-skin.py [28:30 - 38:23] (10 lines, 120 tokens)
   exp/2025/04/30/human-head-anatomy/src/14-register-mandible.py [20:5 - 29:7]

Clone found (python):
 - src/liblaf/melon/tri/_wrapping.py [13:1 - 20:5] (7 lines, 94 tokens)
   src/liblaf/melon/ext/wrap/_fast_wrapping.py [16:1 - 23:6]

Clone found (python):
 - src/liblaf/melon/transfer/_tri_point.py [61:1 - 74:2] (13 lines, 142 tokens)
   src/liblaf/melon/transfer/_tri_point_to_tet.py [36:1 - 49:2]

Clone found (python):
 - src/liblaf/melon/transfer/_tri_cell_to_point_category.py [18:36 - 27:7] (9 lines, 108 tokens)
   src/liblaf/melon/transfer/_tri_point.py [20:19 - 29:7]

Clone found (python):
 - src/liblaf/melon/transfer/_tri_cell_to_point_category.py [28:2 - 37:7] (9 lines, 136 tokens)
   src/liblaf/melon/transfer/_tri_point.py [29:7 - 38:7]

Clone found (python):
 - src/liblaf/melon/transfer/_tri_cell_to_point_category.py [56:10 - 65:2] (9 lines, 85 tokens)
   src/liblaf/melon/transfer/_tri_point_to_tet.py [40:11 - 49:2]

Clone found (python):
 - src/liblaf/melon/tetra/_transfer.py [15:33 - 22:17] (7 lines, 89 tokens)
   src/liblaf/melon/tri/_transfer.py [21:20 - 28:9]

┌────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐
│ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ python │ 112            │ 3517        │ 35410        │ 17           │ 172 (4.89%)      │ 1968 (5.56%)      │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ bash   │ 9              │ 212         │ 1345         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total: │ 121            │ 3729        │ 36755        │ 17           │ 172 (4.61%)      │ 1968 (5.35%)      │
└────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 17 clones.
HTML report saved to megalinter-reports/copy-paste/html/
ERROR: jscpd found too many duplicates (4.61%) over threshold (0%)
Error: ERROR: jscpd found too many duplicates (4.61%) over threshold (0%)
    at ThresholdReporter.report (/node-deps/node_modules/@jscpd/finder/dist/index.js:612:13)
    at /node-deps/node_modules/@jscpd/finder/dist/index.js:110:18
    at Array.forEach (<anonymous>)
    at /node-deps/node_modules/@jscpd/finder/dist/index.js:109:22
    at async /node-deps/node_modules/jscpd/dist/jscpd.js:351:5
⚠️ JSON / prettier - 1 error
.config/linters/pyrightconfig.json 69ms (unchanged)
.config/release-please/config.json 18ms (unchanged)
.github/renovate.json 3ms (unchanged)
.vscode/settings.json 7ms (unchanged)
[error] exp/2025/04/30/human-head-anatomy/data/01-raw/XYZ_ReadyToSculpt_eyesOpen_PolyGroups_GEO.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:74cac07560a0ac93e15b334d49841c637a59a44de0708f7aaf08cbcbf2e8f469
[error]   3 | size 719
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/01-raw/sculptor/cranium.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:766aedc9c892ef6cc830caffe266bcd28fb8fd00d9a144533e2c4739bb266cbd
[error]   3 | size 429
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/01-raw/sculptor/face.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:e458b1bb67aa33ac9db931cb0d6d6d685429cfb7d46417c1b333af46924ad85f
[error]   3 | size 800
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/01-raw/sculptor/mandible.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:f1e16d8631ac4cc730978f0422778d005ce78102daf535fdfe7b745259b86e3a
[error]   3 | size 476
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/01-raw/sculptor/skull.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:4df392ea2d66a5057ceefc7b5191760f6791e48bcfda3b55a3138f91f26989ff
[error]   3 | size 1215
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/11-skin.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:018f3bce8052b47b9a953ec89a9703fdd68c16454ba3e8bd849aab4eb9b6da6d
[error]   3 | size 719
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/12-skin.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:018f3bce8052b47b9a953ec89a9703fdd68c16454ba3e8bd849aab4eb9b6da6d
[error]   3 | size 719
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/13-cranium.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:45e42f3615dfd055ca57fd118c2c4b9a87dd20480fb79b8954b44feaf295cecb
[error]   3 | size 430
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/13-mandible.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:2ad40f18b58f1870f85705d3583e7b09d182bc2a110884a40dee313da812285b
[error]   3 | size 474
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/14-cranium.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:45e42f3615dfd055ca57fd118c2c4b9a87dd20480fb79b8954b44feaf295cecb
[error]   3 | size 430
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/14-mandible.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:2ad40f18b58f1870f85705d3583e7b09d182bc2a110884a40dee313da812285b
[error]   3 | size 474
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/skin-with-mouth-socket.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:5846defd42970713d2bcdd08b798fd2653346de4662129e1fffbe4521b41f1ad
[error]   3 | size 715
[error]   4 |
[error] exp/2025/04/30/human-head-anatomy/data/02-intermediate/skin.landmarks.json: SyntaxError: The input should contain exactly one expression, but the first expression is followed by the unexpected character `h`. (1:9)
[error] > 1 | version https://git-lfs.github.com/spec/v1
[error]     |         ^
[error]   2 | oid sha256:8a9430700a2b0e825304625d59107487f31f39c67421260dd9949f57b267ad3f
[error]   3 | size 804
[error]   4 |
pyrightconfig.json 2ms (unchanged)
tmp.6NE8UxMvCk/linters/pyrightconfig.json 2ms (unchanged)
tmp.6NE8UxMvCk/renovate-config.json 2ms (unchanged)
⚠️ PYTHON / ruff - 142 errors
F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/cubic/src/10-gen.py:26:40
   |
24 |     for cid, cell in enumerate(tetmesh.cell):
25 |         cell: pv.Cell
26 |         barycentric: Float[np.ndarray, "N 3"] = melon.sample_barycentric_coords(
   |                                        ^^^^^
27 |             (cfg.n_samples, 4)
28 |         )
   |

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

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

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/11-fix-skin.py:25:37
   |
23 |     skin_right.translate([left_xmax - right_xmin, 0.0, 0.0], inplace=True)
24 |     skin: pv.PolyData = pv.merge([skin_right, skin_left])
25 |     edge_lengths: Float[np.ndarray, " E"] = melon.tri.compute_edge_lengths(skin)
   |                                     ^^^^
26 |     skin.clean(tolerance=0.5 * edge_lengths.min(), inplace=True, absolute=True)
27 |     melon.save(cfg.output, skin)
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/12-register-skin.py:35:41
   |
33 |     source.clean(inplace=True)
34 |     target: pv.PolyData = melon.load_polydata(cfg.target)
35 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
   |                                         ^^^^^
36 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/12-register-skin.py:36:41
   |
34 |     target: pv.PolyData = melon.load_polydata(cfg.target)
35 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
36 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
   |                                         ^^^^^
37 |
38 |     free_polygons_floating: Integer[np.ndarray, " F"] = melon.tri.select_groups(
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/12-register-skin.py:38:49
   |
36 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
37 |
38 |     free_polygons_floating: Integer[np.ndarray, " F"] = melon.tri.select_groups(
   |                                                 ^^^^
39 |         source, cfg.floting
40 |     )
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/14-register-cranium.py:27:41
   |
25 |     source.clean(inplace=True)
26 |     target: pv.PolyData = melon.load_polydata(cfg.target)
27 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
   |                                         ^^^^^
28 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
29 |     result: pv.PolyData = melon.tri.fast_wrapping(
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/14-register-cranium.py:28:41
   |
26 |     target: pv.PolyData = melon.load_polydata(cfg.target)
27 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
28 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
   |                                         ^^^^^
29 |     result: pv.PolyData = melon.tri.fast_wrapping(
30 |         source,
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/14-register-mandible.py:27:41
   |
25 |     source.clean(inplace=True)
26 |     target: pv.PolyData = melon.load_polydata(cfg.target)
27 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
   |                                         ^^^^^
28 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
29 |     result: pv.PolyData = melon.tri.fast_wrapping(
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/14-register-mandible.py:28:41
   |
26 |     target: pv.PolyData = melon.load_polydata(cfg.target)
27 |     source_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.source)
28 |     target_landmarks: Float[np.ndarray, "L 3"] = melon.load_landmarks(cfg.target)
   |                                         ^^^^^
29 |     result: pv.PolyData = melon.tri.fast_wrapping(
30 |         source,
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/23-split-components.py:22:23
   |
20 | def classify(
21 |     surface: pv.PolyData, include: pv.PolyData, exclude: pv.PolyData
22 | ) -> Bool[np.ndarray, " N"]:
   |                       ^^^^
23 |     nearest_algo: melon.NearestAlgorithm = melon.NearestPointOnSurface(
24 |         distance_threshold=np.inf,
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/23-split-components.py:34:34
   |
32 |         exclude, surface, algo=nearest_algo
33 |     )
34 |     is_include: Bool[np.ndarray, " N"] = (
   |                                  ^^^^
35 |         nearest_include["distance"] <= nearest_exclude["distance"]
36 |     )
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/23-split-components.py:43:36
   |
41 |     tetmesh: pv.UnstructuredGrid, surface: pv.PolyData, data_name: str
42 | ) -> pv.UnstructuredGrid:
43 |     point_ids: Integer[np.ndarray, " N"] = surface.point_data["point-id"]
   |                                    ^^^^
44 |     data: Bool[np.ndarray, " N"] = np.zeros((tetmesh.n_points,), dtype=bool)
45 |     data[point_ids[surface.point_data[data_name]]] = True
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/23-split-components.py:44:28
   |
42 | ) -> pv.UnstructuredGrid:
43 |     point_ids: Integer[np.ndarray, " N"] = surface.point_data["point-id"]
44 |     data: Bool[np.ndarray, " N"] = np.zeros((tetmesh.n_points,), dtype=bool)
   |                            ^^^^
45 |     data[point_ids[surface.point_data[data_name]]] = True
46 |     tetmesh.point_data[data_name] = data
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py:31:39
   |
30 |     for muscle in muscles:
31 |         components: Float[np.ndarray, " 3"] = melon.as_trimesh(
   |                                       ^^^^
32 |             muscle
33 |         ).principal_inertia_components
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py:34:36
   |
32 |             muscle
33 |         ).principal_inertia_components
34 |         vectors: Float[np.ndarray, "3 3"] = melon.as_trimesh(
   |                                    ^^^^^
35 |             muscle
36 |         ).principal_inertia_vectors
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/32-muscle-direction.py:37:36
   |
35 |             muscle
36 |         ).principal_inertia_vectors
37 |         index: Integer[np.ndarray, " 3"] = np.argsort(components)
   |                                    ^^^^
38 |         muscle.field_data["moment-inertia"] = melon.as_trimesh(muscle).moment_inertia
39 |         muscle.field_data["principal-inertia-vectors"] = vectors[index]
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:43:36
   |
41 |     for muscle in muscles:
42 |         muscle_tm: tm.Trimesh = melon.as_trimesh(muscle)
43 |         vectors: Float[np.ndarray, "3 3"] = muscle_tm.principal_inertia_vectors
   |                                    ^^^^^
44 |         components: Float[np.ndarray, " 3"] = muscle_tm.principal_inertia_components
45 |         index: Integer[np.ndarray, " 3"] = np.argsort(components)
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:44:39
   |
42 |         muscle_tm: tm.Trimesh = melon.as_trimesh(muscle)
43 |         vectors: Float[np.ndarray, "3 3"] = muscle_tm.principal_inertia_vectors
44 |         components: Float[np.ndarray, " 3"] = muscle_tm.principal_inertia_components
   |                                       ^^^^
45 |         index: Integer[np.ndarray, " 3"] = np.argsort(components)
46 |         muscle.field_data["muscle-direction"] = vectors[index[0]]
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:45:36
   |
43 |         vectors: Float[np.ndarray, "3 3"] = muscle_tm.principal_inertia_vectors
44 |         components: Float[np.ndarray, " 3"] = muscle_tm.principal_inertia_components
45 |         index: Integer[np.ndarray, " 3"] = np.argsort(components)
   |                                    ^^^^
46 |         muscle.field_data["muscle-direction"] = vectors[index[0]]
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:74:41
   |
72 |     cid: int
73 |     major_muscle: str | None = None
74 |     muscle_direction: Float[np.ndarray, " 3"]
   |                                         ^^^^
75 |     muscle_fraction: float
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:82:36
   |
80 | ) -> Result:
81 |     cell: pv.Cell = tetmesh.get_cell(cid)
82 |     barycentric: Float[np.ndarray, "N 3"] = melon.sample_barycentric_coords(
   |                                    ^^^^^
83 |         (n_samples, 4)
84 |     )
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:85:32
   |
83 |         (n_samples, 4)
84 |     )
85 |     samples: Float[np.ndarray, "N 3"] = melon.barycentric_to_points(
   |                                ^^^^^
86 |         einops.repeat(cell.points, "B D -> N B D", N=n_samples), barycentric
87 |     )
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:88:29
   |
86 |         einops.repeat(cell.points, "B D -> N B D", N=n_samples), barycentric
87 |     )
88 |     is_in: Bool[np.ndarray, " N"] = np.zeros((n_samples,), dtype=bool)
   |                             ^^^^
89 |     muscle_direction: Float[np.ndarray, " 3"] = np.zeros((3,))
90 |     muscle_fraction: float = 0.0
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:89:41
   |
87 |     )
88 |     is_in: Bool[np.ndarray, " N"] = np.zeros((n_samples,), dtype=bool)
89 |     muscle_direction: Float[np.ndarray, " 3"] = np.zeros((3,))
   |                                         ^^^^
90 |     muscle_fraction: float = 0.0
91 |     major_muscle: pv.PolyData | None = None
   |

F722 Syntax error in forward annotation: Expected an expression
  --> exp/2025/04/30/human-head-anatomy/src/33-muscle-fraction.py:94:36
   |
92 |     major_muscle_fraction: float = 0.0
93 |     for muscle in muscles:
94 |         contains: Bool[np.ndarray, " N"] = melon.tri.contains(muscle, samples)
   |                                    ^^^^
95 |         n_contains: int = np.count_nonzero(contains)  # pyright: ignore[reportAssignmentType]
96 |         if n_contains == 0:
   |

F722 Syntax error in forward annotation: Unexpected token at the end of an expression
  --> exp/2025/04/30/human-head-anatomy/src/34-muscles.py:53:36
   |
51 |     for muscle in muscles:
52 |         muscle_tm: tm.Trimesh = melon.as_trimesh(muscle)
53 |         vectors: Float[np.ndarray, "3 3"] = muscle_tm.principal_inertia_vectors
   |                                    ^^^^^
54 |         components: Float[np.ndarray, " 3"] = muscle_tm.principal_inertia_components
55 |         vectors = vectors[np.argsort(components)]
   |

F722 Syntax error in forward annotation: Expected an expres

(Truncated to 13333 characters out of 65310)

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security

@codecov
Copy link
Copy Markdown

codecov bot commented Nov 11, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 57.39%. Comparing base (5e3cd1f) to head (3e62710).
⚠️ Report is 66 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main      #81   +/-   ##
=======================================
  Coverage   57.39%   57.39%           
=======================================
  Files          87       87           
  Lines        1427     1427           
  Branches      105      105           
=======================================
  Hits          819      819           
  Misses        595      595           
  Partials       13       13           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@liblaf liblaf bot force-pushed the release-please--branches--main branch from 76d6073 to b6300b2 Compare November 11, 2025 18:38
@liblaf liblaf bot force-pushed the release-please--branches--main branch from b6300b2 to dacaba3 Compare November 11, 2025 18:39
@liblaf liblaf bot force-pushed the release-please--branches--main branch from dacaba3 to 68d2dbb Compare November 12, 2025 07:27
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 68d2dbb to 2587d88 Compare November 12, 2025 07:28
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 2587d88 to 2ff5ec0 Compare November 12, 2025 08:36
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 2ff5ec0 to 3e62710 Compare November 12, 2025 08:36
@mergery mergery bot merged commit db12393 into main Nov 16, 2025
13 checks passed
@mergery mergery bot deleted the release-please--branches--main branch November 16, 2025 01:01
@liblaf
Copy link
Copy Markdown
Contributor Author

liblaf bot commented Nov 16, 2025

🤖 Created releases:

🌻

@liblaf liblaf bot added autorelease: tagged means that the Release PR has been merged and the release has been tagged in GitHub and removed autorelease: pending is the initial state of the Release PR before it is merged labels Nov 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge Merge the pull request once unit tests and other checks pass. autorelease: tagged means that the Release PR has been merged and the release has been tagged in GitHub

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant