Skip to content

ENH: GPU Tutorial 4 meshing (~27x); split ProcessContours - #151

Merged
aylward merged 6 commits into
Project-MONAI:mainfrom
aylward:perf/t04-full-runtime
Oct 21, 2026
Merged

aylward merged 6 commits into
Project-MONAI:mainfrom
aylward:perf/t04-full-runtime

Conversation

@aylward

@aylward aylward commented Oct 19, 2026

Copy link
Copy Markdown
Collaborator

Speed up Tutorial 4 (Duke Heart labelmap to VTK, "full" mode) about 27x on the full cohort (20,569 s to 754 s), with geometry matching the previous output to within 0.1 mm RMSE.

Breaking changes (see docs/developer/migration_next.md; conversion via utils/migrate_process_contours.py):

  • ProcessContours is split into ProcessSurfaceMesh, ProcessVolumetricMesh and the new public ProcessMeshKernels (GPU closest point, inside test, tet quality, distance maps, blur, label-vote resample).
  • extract_contours and extract_watertight_surface are removed; extract_label_surfaces is the single watertight extractor, and neighboring labels share their walls.
  • WorkflowConvertImageToVTK accepts a labelmap, reduces surfaces with ACVD, can build tetrahedra, and no longer returns segmentation_masks.
  • ProcessUSD stage methods take an open Usd.Stage; open_stage and save_stage are new.
  • EvaluateMovementLung scores NVSegmentCTMRI lobe ids.

Packaging and environment:

  • cuda12/cuda13 extras use cupy[ctk], so CuPy loads pip-installed CUDA libraries instead of a CUDA_PATH toolkit whose cuBLAS conflicted with torch's (CUBLAS_STATUS_NOT_INITIALIZED).
  • torchaudio is dropped from the extras, docs, CI and the worktree setup script: it is unused, and no build matches current torch.
  • README and quickstart lead with the prebuilt torch-scatter install.

Tooling:

  • Ruff config consolidated into pyproject.toml (.ruff.toml removed; the never-applied strict rule list is gone). The hook is bumped to v0.16.6 and its new default rules are fixed repo-wide: deliberate catch-alls are marked noqa with a reason, silent passes use contextlib.suppress, and the rest are narrowed.
  • The mypy hook runs in the project venv, so it type-checks against the installed torch, warp and pyvista; the type errors this exposed are fixed, and stale mypy overrides are pruned.

Tests:

  • The contour-mesh fixture builds its labelmap through test_labelmaps instead of skipping when the cached file is missing.
  • Stale "pytest harness" notes are removed from the GPU training tests.

Copilot AI balanced review requested due to automatic review settings October 19, 2026 20:59

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 138 files, which is 38 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1fbd3193-9452-4d42-958a-a062c9d3be73
📥 Commits

Reviewing files that changed from the base of the PR and between 3d9d558 and 38d857b.

⛔ Files ignored due to path filters: 89
  • tests/baselines/tutorial_01_heart_gated_ct_to_usd/cardiac_model_test.png is excluded by !**/*.png
  • tests/baselines/tutorial_01_lung_gated_ct_to_usd/lung_model_test.png is excluded by !**/*.png
  • tests/baselines/tutorial_01_lung_gated_ct_to_usd/slice_001_registered_test.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_duke_heart_distancemap_finetune_icon/fixed_distance_map.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/fixed_distance_map.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_greedy_dmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_greedy_icon_finetuned_dmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_icon_finetuned_dmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_icon_stock_ct.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_icon_stock_dmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_distancemap_finetune_icon/registered_distance_map_unregistered.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/fixed_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_greedy.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_greedy_icon_finetuned_steps_10.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_greedy_icon_finetuned_steps_50.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_greedy_icon_finetuned_steps_None.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_greedy_icon_stage0.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_icon_finetuned.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_icon_stock.png is excluded by !**/*.png
  • tests/baselines/tutorial_02_lung_finetune_icon/registered_unregistered.png is excluded by !**/*.png
  • tests/baselines/tutorial_03_heart_reconstruct_highres_4d_ct/reconstructed_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_03_heart_reconstruct_highres_4d_ct/reference_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_03_lung_reconstruct_highres_4d_ct/reconstructed_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_03_lung_reconstruct_highres_4d_ct/reference_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_04_duke_heart_labelmap_to_vtk/heart_minus_interior_chambers.png is excluded by !**/*.png
  • tests/baselines/tutorial_04_heart_ct_to_vtk/segmentation_overlay.png is excluded by !**/*.png
  • tests/baselines/tutorial_04_heart_ct_to_vtk/vtk_surfaces.png is excluded by !**/*.png
  • tests/baselines/tutorial_04_lung/tutorial_04_lung_segmentation_overlay.png is excluded by !**/*.png
  • tests/baselines/tutorial_04_lung/tutorial_04_lung_vtk_surfaces.png is excluded by !**/*.png
  • tests/baselines/tutorial_05_duke_heart_vtk_to_usd/pm0002_usd_mesh_rendering.png is excluded by !**/*.png
  • tests/baselines/tutorial_05_duke_heart_vtk_to_usd/pm0002_usd_mesh_rendering_last_frame.png is excluded by !**/*.png
  • tests/baselines/tutorial_05_heart_vtk_to_usd/tutorial_04_heart_usd_mesh_rendering.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_duke_heart_create_statistical_model/pca_mean_model.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_duke_heart_create_statistical_model/pca_mode_01.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_duke_heart_create_statistical_model/pca_mode_02.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_heart_create_statistical_model/pca_mean_model.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_heart_create_statistical_model/pca_mode_01.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_heart_create_statistical_model/pca_mode_02.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_lung_create_statistical_model/pca_mean_model.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_lung_create_statistical_model/pca_mode_01.png is excluded by !**/*.png
  • tests/baselines/tutorial_06_lung_create_statistical_model/pca_mode_02.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_duke_heart/tutorial_07_duke_heart_model_after_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_duke_heart/tutorial_07_duke_heart_model_before_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_heart_fit_statistical_model_to_patient/tutorial_07_heart_model_after_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_heart_fit_statistical_model_to_patient/tutorial_07_heart_model_before_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_lung/tutorial_07_lung_model_after_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_07_lung/tutorial_07_lung_model_before_registration.png is excluded by !**/*.png
  • tests/baselines/tutorial_08_duke_heart_fit_model_to_4d_patients/ssm_surface_first_phase.png is excluded by !**/*.png
  • tests/baselines/tutorial_08_duke_heart_fit_model_to_4d_patients/ssm_surface_reference.png is excluded by !**/*.png
  • tests/baselines/tutorial_08_lung_fit_model_to_4d_patients/ssm_surface_first_phase.png is excluded by !**/*.png
  • tests/baselines/tutorial_08_lung_fit_model_to_4d_patients/ssm_surface_reference.png is excluded by !**/*.png
  • tests/baselines/tutorial_09_duke_heart_train_physicsnemo_mgn/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_09_lung_train_physicsnemo_mgn/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_10_duke_heart_infer_physicsnemo_mgn/ground_truth_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_10_duke_heart_infer_physicsnemo_mgn/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_10_lung_infer_physicsnemo_mgn/ground_truth_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_10_lung_infer_physicsnemo_mgn/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_11_duke_heart_evaluate_physicsnemo/evaluation_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_11_duke_heart_evaluate_physicsnemo/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_11_duke_heart_evaluate_physicsnemo/warped_labelmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_11_lung_evaluate_physicsnemo/evaluation_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_11_lung_evaluate_physicsnemo/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_11_lung_evaluate_physicsnemo/warped_labelmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_12_duke_heart_end_to_end_inference/fitted_reference_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_12_duke_heart_end_to_end_inference/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_12_lung_end_to_end_inference/fitted_reference_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_12_lung_end_to_end_inference/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_13_heart_and_lung_motion/combined_labelmap.png is excluded by !**/*.png
  • tests/baselines/tutorial_13_heart_and_lung_motion/combined_motion_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_14_duke_heart_shape_parameter_sweep/perturbed_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_14_duke_heart_shape_parameter_sweep/shape_sweep_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_14_duke_heart_shape_parameter_sweep/shape_sweep_summary.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_14_duke_heart_shape_parameter_sweep/unperturbed_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_14_lung_shape_parameter_sweep/perturbed_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_14_lung_shape_parameter_sweep/shape_sweep_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_14_lung_shape_parameter_sweep/shape_sweep_summary.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_14_lung_shape_parameter_sweep/unperturbed_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_15_duke_heart_leave_one_out/held_out_fitted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_15_duke_heart_leave_one_out/loo_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_15_duke_heart_leave_one_out/loo_metrics_by_label.png is excluded by !**/*.png
  • tests/baselines/tutorial_15_lung_leave_one_out/held_out_fitted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_15_lung_leave_one_out/loo_metrics.csv is excluded by !**/*.csv
  • tests/baselines/tutorial_15_lung_leave_one_out/loo_metrics_by_label.png is excluded by !**/*.png
  • tests/baselines/tutorial_16_duke_heart_physics_informed_motion_prep/fitted_reference_model.png is excluded by !**/*.png
  • tests/baselines/tutorial_16_duke_heart_physics_informed_motion_prep/ssm_template_section.png is excluded by !**/*.png
  • tests/baselines/tutorial_17_duke_heart_physics_informed_motion_train/trained_template_boundary.png is excluded by !**/*.png
  • tests/baselines/tutorial_17_duke_heart_physics_informed_motion_train/training_losses.png is excluded by !**/*.png
  • tests/baselines/tutorial_18_duke_heart_physics_informed_motion_infer/predicted_surface.png is excluded by !**/*.png
  • tests/baselines/tutorial_18_duke_heart_physics_informed_motion_infer/von_mises_stress.png is excluded by !**/*.png
📒 Files selected for processing: 138
  • .agents/agents/architecture.md
  • .agents/agents/implementation.md
  • .agents/agents/testing.md
  • .github/workflows/nightly-health.yml
  • .pre-commit-config.yaml
  • .ruff.toml
  • AGENTS.md
  • README.md
  • data/test/README.md
  • docs/api/utilities/image_conversion.rst
  • docs/api/utilities/index.rst
  • docs/api/utilities/process_contours.rst
  • docs/api/utilities/process_images.rst
  • docs/api/utilities/process_landmarks.rst
  • docs/api/utilities/process_mesh_kernels.rst
  • docs/api/utilities/process_surface_mesh.rst
  • docs/api/utilities/process_transforms.rst
  • docs/api/utilities/process_volumetric_mesh.rst
  • docs/api/workflows.rst
  • docs/architecture.rst
  • docs/cli_scripts/byod_tutorials.rst
  • docs/conf.py
  • docs/developer/architecture.rst
  • docs/developer/core.rst
  • docs/developer/migration_next.md
  • docs/developer/usd_generation.rst
  • docs/developer/utilities.rst
  • docs/faq.rst
  • docs/installation.rst
  • docs/quickstart.rst
  • docs/testing.rst
  • docs/troubleshooting.rst
  • docs/tutorials.rst
  • experiments/Convert_VTK_To_USD/convert_chop_alterra_valve_to_usd.py
  • experiments/Convert_VTK_To_USD/convert_chop_tpv25_valve_to_usd.py
  • experiments/Convert_VTK_To_USD/convert_vtk_to_usd_using_class.py
  • experiments/Heart-Create_Statistical_Model/2-input_surfaces_to_surfaces_aligned.py
  • experiments/Heart-Create_Statistical_Model/3-registration_based_correspondence.py
  • experiments/Heart-Create_Statistical_Model/4-surfaces_aligned_correspond_to_pca_inputs.py
  • experiments/Heart-GatedCT_To_USD/2-generate_segmentation.py
  • experiments/Heart-GatedCT_To_USD/3-transform_dynamic_and_static_contours.py
  • experiments/Heart-Statistical_Model_To_Patient/heart_model_to_model_icp_itk.py
  • experiments/Heart-Statistical_Model_To_Patient/heart_model_to_model_registration_pca.py
  • experiments/Heart-Statistical_Model_To_Patient/heart_model_to_patient.py
  • experiments/Heart-VTKSeries_To_USD/1-heart_vtkseries_to_usd.py
  • experiments/Lung-GatedCT_To_USD/1-make_dirlab_models.py
  • experiments/Lung-GatedCT_To_USD_NV/1-make_dirlab_models.py
  • experiments/Lung-VesselsAirways/0-GenData.py
  • pyproject.toml
  • src/monai_physio/__init__.py
  • src/monai_physio/cli/convert_image_to_vtk.py
  • src/monai_physio/convert_vtk_to_usd.py
  • src/monai_physio/evaluate_movement_lung.py
  • src/monai_physio/process_contours.py
  • src/monai_physio/process_images.py
  • src/monai_physio/process_mesh_kernels.py
  • src/monai_physio/process_physicsnemo.py
  • src/monai_physio/process_surface_mesh.py
  • src/monai_physio/process_tests.py
  • src/monai_physio/process_usd.py
  • src/monai_physio/process_usd_anatomy.py
  • src/monai_physio/process_volumetric_mesh.py
  • src/monai_physio/register_images_greedy.py
  • src/monai_physio/register_models_distance_maps.py
  • src/monai_physio/register_models_icp_itk.py
  • src/monai_physio/register_models_pca.py
  • src/monai_physio/train_physicsnemo_physics_informed_motion.py
  • src/monai_physio/workflow_convert_image_to_usd.py
  • src/monai_physio/workflow_convert_image_to_vtk.py
  • src/monai_physio/workflow_convert_vtk_to_usd.py
  • src/monai_physio/workflow_create_mean_surface.py
  • src/monai_physio/workflow_create_statistical_model.py
  • src/monai_physio/workflow_evaluate_movement.py
  • src/monai_physio/workflow_finetune_icon_registration.py
  • src/monai_physio/workflow_fit_statistical_model_to_patient.py
  • tests/README.md
  • tests/baselines/registration_time_series_images/basic_forward_transform_0.hdf
  • tests/baselines/registration_time_series_images/basic_time_series_registered_0.mha
  • tests/baselines/registration_time_series_images/middle_frame_forward_transform_0.hdf
  • tests/baselines/registration_time_series_images/transform_application_time_series_0.mha
  • tests/baselines/tutorial_07_duke_heart/tutorial_07_duke_heart_registered_coefficients.json
  • tests/baselines/tutorial_07_heart_fit_statistical_model_to_patient/tutorial_07_heart_registered_coefficients.json
  • tests/baselines/tutorial_07_lung/tutorial_07_lung_registered_coefficients.json
  • tests/baselines/tutorial_12_duke_heart_end_to_end_inference/pm0027_ssm_pca_coefficients.json
  • tests/baselines/tutorial_12_lung_end_to_end_inference/100_HM10395_ssm_pca_coefficients.json
  • tests/conftest.py
  • tests/test_contour_mesh_extraction.py
  • tests/test_convert_vtk_to_usd.py
  • tests/test_evaluate_movement_cohorts.py
  • tests/test_physics_informed_motion.py
  • tests/test_process_physicsnemo.py
  • tests/test_process_surface_mesh.py
  • tests/test_process_usd_anatomy.py
  • tests/test_tutorials.py
  • tests/test_workflow_convert_image_to_vtk.py
  • tests/test_workflow_convert_vtk_to_usd.py
  • tests/test_workflow_evaluate_movement.py
  • tests/test_workflow_fit_statistical_model_to_patient.py
  • tests/test_workflow_train_physicsnemo.py
  • tutorials/README.md
  • tutorials/parameters_duke_heart_labelmaps.py
  • tutorials/parameters_tcia_4d_lung.py
  • tutorials/tutorial_00_lung_demo.ipynb
  • tutorials/tutorial_01_heart_gated_ct_to_usd.py
  • tutorials/tutorial_01_lung_gated_ct_to_usd.py
  • tutorials/tutorial_01_lung_gated_ct_to_usd_tetmesh.py
  • tutorials/tutorial_02_duke_heart_distancemap_finetune_icon.py
  • tutorials/tutorial_02_lung_distancemap_finetune_icon.py
  • tutorials/tutorial_04_duke_heart_labelmap_to_vtk.py
  • tutorials/tutorial_04_heart_ct_to_vtk.py
  • tutorials/tutorial_04_lung_ct_to_vtk.py
  • tutorials/tutorial_05_heart_vtk_to_usd.py
  • tutorials/tutorial_06_duke_heart_create_statistical_model.py
  • tutorials/tutorial_06_heart_create_statistical_model.py
  • tutorials/tutorial_06_lung_create_statistical_model.py
  • tutorials/tutorial_07_duke_heart_fit_statistical_model_to_patient.py
  • tutorials/tutorial_07_heart_fit_statistical_model_to_patient.py
  • tutorials/tutorial_07_lung_fit_statistical_model_to_patient.py
  • tutorials/tutorial_08_duke_heart_fit_model_to_4d_patients.py
  • tutorials/tutorial_08_lung_fit_model_to_4d_patients.py
  • tutorials/tutorial_09_duke_heart_train_physicsnemo_mgn.py
  • tutorials/tutorial_09_lung_train_physicsnemo_mgn.py
  • tutorials/tutorial_10_duke_heart_infer_physicsnemo_mgn.py
  • tutorials/tutorial_10_lung_infer_physicsnemo_mgn.py
  • tutorials/tutorial_11_duke_heart_evaluate_physicsnemo.py
  • tutorials/tutorial_11_lung_evaluate_physicsnemo.py
  • tutorials/tutorial_12_duke_heart_end_to_end_inference.py
  • tutorials/tutorial_12_lung_end_to_end_inference.py
  • tutorials/tutorial_13_heart_and_lung_motion.py
  • tutorials/tutorial_14_duke_heart_shape_parameter_sweep.py
  • tutorials/tutorial_14_lung_shape_parameter_sweep.py
  • tutorials/tutorial_15_duke_heart_leave_one_out.py
  • tutorials/tutorial_15_lung_leave_one_out.py
  • tutorials/tutorial_16_duke_heart_physics_informed_motion_prep.py
  • tutorials/tutorial_17_duke_heart_physics_informed_motion_train.py
  • tutorials/tutorial_18_duke_heart_physics_informed_motion_infer.py
  • utils/migrate_process_contours.py
  • utils/setup_feature_worktree.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

aylward and others added 2 commits October 19, 2026 20:22
Speed up Tutorial 4 (Duke Heart labelmap to VTK, "full" mode) about 27x
on the full cohort (20,569 s to 754 s), with geometry matching the
previous output to within 0.1 mm RMSE.

Breaking changes (see docs/developer/migration_next.md; conversion via
utils/migrate_process_contours.py):
- ProcessContours is split into ProcessSurfaceMesh,
  ProcessVolumetricMesh and the new public ProcessMeshKernels (GPU
  closest point, inside test, tet quality, distance maps, blur,
  label-vote resample).
- extract_contours and extract_watertight_surface are removed;
  extract_label_surfaces is the single watertight extractor, and
  neighboring labels share their walls.
- WorkflowConvertImageToVTK accepts a labelmap, reduces surfaces with
  ACVD, can build tetrahedra, and no longer returns segmentation_masks.
- ProcessUSD stage methods take an open Usd.Stage; open_stage and
  save_stage are new.
- EvaluateMovementLung scores NVSegmentCTMRI lobe ids.

Packaging and environment:
- cuda12/cuda13 extras use cupy[ctk], so CuPy loads pip-installed CUDA
  libraries instead of a CUDA_PATH toolkit whose cuBLAS conflicted
  with torch's (CUBLAS_STATUS_NOT_INITIALIZED).
- torchaudio is dropped from the extras, docs, CI and the worktree
  setup script: it is unused, and no build matches current torch.
- README and quickstart lead with the prebuilt torch-scatter install.

Tooling:
- Ruff config consolidated into pyproject.toml (.ruff.toml removed;
  the never-applied strict rule list is gone). The hook is bumped to
  v0.16.6 and its new default rules are fixed repo-wide: deliberate
  catch-alls are marked noqa with a reason, silent passes use
  contextlib.suppress, and the rest are narrowed.
- The mypy hook runs in the project venv, so it type-checks against
  the installed torch, warp and pyvista; the type errors this exposed
  are fixed, and stale mypy overrides are pruned.

Tests:
- The contour-mesh fixture builds its labelmap through test_labelmaps
  instead of skipping when the cached file is missing.
- Stale "pytest harness" notes are removed from the GPU training tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Tutorial 1, 3, 4, 5 and 6 heart baselines were generated by
--create-baselines while CuPy could not load its CUDA headers and
torchaudio mismatched torch, so they do not match current output.
Regenerate them once the environment is stable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aylward
aylward force-pushed the perf/t04-full-runtime branch from f89722e to e6d24b6 Compare October 20, 2026 00:32
Copilot AI balanced review requested due to automatic review settings October 20, 2026 00:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI balanced review requested due to automatic review settings October 20, 2026 04:35

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI balanced review requested due to automatic review settings October 20, 2026 18:19

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI balanced review requested due to automatic review settings October 21, 2026 15:14

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI balanced review requested due to automatic review settings October 21, 2026 16:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@aylward
aylward merged commit 5f50096 into Project-MONAI:main Oct 21, 2026
12 checks passed
@aylward
aylward deleted the perf/t04-full-runtime branch October 21, 2026 17:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants