Skip to content

Conversation

@liblaf
Copy link
Contributor

@liblaf liblaf bot commented Oct 28, 2025

🤖 I have created a release beep boop

0.8.2 (2025-10-29)

🐛 Bug Fixes

  • mesh: Correct data handling in mesh conversions and transfers (eefa194)

This PR was generated with Release Please. See documentation.

@liblaf liblaf bot added automerge Merge the pull request once unit tests and other checks pass. autorelease: pending labels Oct 28, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 28, 2025

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
⚠️ COPYPASTE jscpd yes 12 no 2.33s
⚠️ JSON jsonlint 21 1 0 0.43s
⚠️ JSON prettier 21 0 1 0 0.47s
✅ JSON v8r 21 0 0 5.94s
⚠️ PYTHON ruff yes yes 121 no 2.26s
✅ SPELL cspell 163 0 0 4.56s
✅ YAML prettier 4 0 0 0 0.5s
✅ YAML v8r 4 0 0 4.49s
✅ YAML yamllint 4 0 0 0.44s

Detailed Issues

⚠️ COPYPASTE / jscpd - 12 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 [20:1 - 50:4] (30 lines, 315 tokens)
   exp/2025/04/30/human-head-anatomy/src/40-gen-expression.py [11:1 - 41: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 - 22:5] (9 lines, 108 tokens)
   src/liblaf/melon/external/wrap/_fast_wrapping.py [17:1 - 26:17]

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 │ 103            │ 3169        │ 31458        │ 12           │ 140 (4.42%)      │ 1595 (5.07%)      │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ bash   │ 9              │ 221         │ 1440         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total: │ 112            │ 3390        │ 32898        │ 12           │ 140 (4.13%)      │ 1595 (4.85%)      │
└────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 12 clones.
HTML report saved to megalinter-reports/copy-paste/html/
ERROR: jscpd found too many duplicates (4.13%) over threshold (0%)
Error: ERROR: jscpd found too many duplicates (4.13%) 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 / jsonlint - 1 error
File: .vscode/settings.json
Parse error on line 26, column 5:
....customTags": [    // ref: <https://squ...
----------------------^
Unexpected token "/"
⚠️ JSON / prettier - 1 error
.config/linters/pyrightconfig.json 52ms (unchanged)
.config/release-please/config.json 14ms (unchanged)
.github/renovate.json 1ms (unchanged)
.vscode/settings.json 8ms (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/.cspell.json 3ms (unchanged)
tmp.6NE8UxMvCk/linters/pyrightconfig.json 3ms (unchanged)
tmp.6NE8UxMvCk/renovate-config.json 3ms (unchanged)
⚠️ PYTHON / ruff - 121 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_c

(Truncated to 10000 characters out of 54826)

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security

@liblaf liblaf bot force-pushed the release-please--branches--main branch from 7f2ec4f to 22b8561 Compare October 29, 2025 02:34
@liblaf liblaf bot force-pushed the release-please--branches--main branch from 2ce5eeb to be548e3 Compare October 29, 2025 04:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant