Skip to content

ENH: Consolidate remote modules into hierarchical category repos #6060

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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