Skip to content

ENH: Consolidate remote modules into hierarchical category repos #6060

@hjmjohnson

Description

@hjmjohnson

Consolidate remote modules into hierarchical category repos

Reduce ~60 remote module repos to ~5 domain-based category repos plus ~13 independent repos. New itk_fetch_module_group() CMake function enables hierarchical sub-groups. Proof of concept (ITKRemoteAnalysis, 8 modules, 77/77 tests pass) in PR #6061. Supersedes #5134.

Problem

ITK has ~60 remote module repositories, each with its own git repo, CI, Python packaging, and boilerplate:

Discussed in #6034 where @blowekamp, @dzenanz, and @hjmjohnson agreed consolidation is needed during the 6.0 beta phase.

Proposal

Group modules into 5 category repos by domain (per @thewtex and @dzenanz: no "Kitware" category, no standalone "Microscopy" — group by domain):

Category Repo Candidate Modules Count
ITKRemoteIO AnalyzeObjectLabelMap, IOFDF, IOMeshMZ3, IOMeshSTL, IOMeshSWC, IOScanco, IOTransformDCMTK, MGHIO, IOOpenSlide 9
ITKRemoteFiltering AnisotropicDiffusionLBR, FastBilateral, GenericLabelInterpolator, HigherOrderAccurateGradient, LabelErodeDilate, MorphologicalContourInterpolation, MultipleImageIterator, ParabolicMorphology, PhaseSymmetry, RLEImage, SimpleITKFilters, SmoothingRecursiveYvvGaussianFilter, SplitComponents 13
ITKRemoteMesh BSplineGradient, Cuberille, FPFH, MeshNoise, MeshToPolyData, PrincipalComponentsAnalysis, SubdivisionQuadEdgeMeshFilter 7
ITKRemoteAnalysis BoneEnhancement, BoneMorphometry, HASI, IsotropicWavelets, PerformanceBenchmarking, RANSAC, TextureFeatures, Thickness3D, (+ StructuralSimilarity from #6034) 8-9
ITKRemoteRegistration FixedPointInverseDisplacementField, GrowCut, LesionSizingToolkit, MinimalPathExtraction, Montage, PolarTransform, SkullStrip, Strain, TwoProjectionRegistration, VariationalRegistration 10

Stay independent (large, complex, or external dependencies):

  • RTK, CudaCommon (RTKConsortium)
  • TubeTK (large, many examples/applications — @dzenanz)
  • Ultrasound (complex multi-dependency, serves as blueprint — @dzenanz)
  • WebAssemblyInterface (wasm toolchain)
  • AdaptiveDenoising (ntustison — external maintainer)
  • Cleaver (SCIInstitute — external dependencies, defer — @dzenanz)
  • SCIFIO, Shape, TractographyTRX (external orgs)
  • SphinxExamples (documentation)
  • VkFFTBackend (GPU backend)
  • TotalVariation, IOOMEZarrNGFF (external dependencies, defer — @dzenanz)
  • BioCell (legacy, may deprecate)
CMake mechanism

New ITKGroup_Remote_<Category> sub-group options, all OFF by default:

ITKGroup_Remote = OFF              # master switch (existing)
  ITKGroup_Remote_IO = OFF         # NEW: fetches ITKRemoteIO repo when ON
  ITKGroup_Remote_Filtering = OFF
  ITKGroup_Remote_Mesh = OFF
  ITKGroup_Remote_Analysis = OFF
  ITKGroup_Remote_Registration = OFF
  • Sub-group OFF: repo not cloned, modules not available
  • Sub-group ON: repo cloned, all contained modules individually toggleable via Module_<name>
  • ITKGroup_Remote=ON: all sub-groups enabled (backward compat)
  • Modules with EXCLUDE_FROM_DEFAULT need explicit Module_<name>=ON even when sub-group is ON

~160 lines of CMake changes across 3 files. New itk_fetch_module_group() function. Existing itk_fetch_module() untouched (independent repos keep working).

Python packaging

Per-category wheels (itk-remote-io, itk-remote-filtering, etc.) replace individual itk-<name> packages. Old packages get a deprecation release pointing to the new category package.

New module workflow

New filters added as a subdirectory PR to the appropriate category repo. No new git repo, no new CI, no new PyPI package setup.

Example: SSIM (PR #6034) goes into ITKRemoteAnalysis as StructuralSimilarity/ subdirectory.

Implementation phases

Decisions

Question Decision Source
Category groupings 5 domain categories (IO, Filtering, Mesh, Analysis, Registration) @thewtex, @dzenanz
"Kitware" category No — merge by domain @thewtex, @dzenanz
Microscopy category No — IOOpenSlide goes to IO @dzenanz
KitwareMedical modules Merge into domain categories @thewtex, @dzenanz
TubeTK Stay independent (large, many examples) @dzenanz
Ultrasound Stay independent, serves as blueprint @dzenanz
External-dep modules Defer (TotalVariation, Cleaver, IOOMEZarrNGFF) @dzenanz
EXCLUDE_FROM_DEFAULT Respected: need explicit Module_<name>=ON Confirmed by prototype
Backward compat ITKGroup_Remote=ON enables all sub-groups Confirmed by prototype
Supersedes #5134 @dzenanz
AdaptiveDenoising (ntustison) TBD — discuss with maintainer
PyPI: individual to category wheels TBD
BioCell TBD — may deprecate

References

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions