ENH: Ingest AnisotropicDiffusionLBR into Modules/Filtering#6093
Merged
hjmjohnson merged 94 commits intoApr 23, 2026
Merged
Conversation
Initial import from http://hdl.handle.net/10380/3505 http://insight-journal.org/browse/publication/953 Add missing LICENSE file. Test data is uploaded to midas3.kitware.com and content links are added instead.
This is a requirement to add the file to ITK as a Remote Module.
Also fix trailing whitespace, indentation, some comments.
This causes issues when building outside the ITK source tree.
This is cross platform.
This is not found in Windows. itk::TimeProbe is a cross-platform replacement. This was used for debug code, so that was removed.
Uses std::cout instead of std::cerr.
This is for: c:\jenkins\workspace\itkgerritwindows\itk-src\modules\remote\anisotropicdiffusionlbr\include\itkLinearAnisotropicDiffusionLBRImageFilter.h(110) : warning C4348: 'itk::LinearAnisotropicDiffusionLBRImageFilter::GetDiffusion' : redefinition of default parameter : parameter 1
This is for: c:\jenkins\workspace\itkgerritwindows\itk-src\modules\remote\anisotropicdiffusionlbr\include\itkStructureTensorImageFilter.h(95) : warning C4348: 'itk::StructureTensorImageFilter,itk::Image>::IntermediateFilter' : redefinition of default parameter : parameter 1 on MSVC.
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
Apr 22, 2026
Four long-form documents landing alongside ingest-remote-module.sh:
INGESTION_STRATEGY.md
Policy document. Whitelist definition, mode selection (full /
filtered / squash), attribution floor, CID-normalization pipeline,
examples-relocation policy. Codifies the PR InsightSoftwareConsortium#6093 consensus that
commit count is NOT a gate -- only size metrics are -- so modules
with hundreds of genuine upstream commits can land in full-history
mode as long as pack-delta and blob-size thresholds are met.
AUDIT_DESIGN.md
Design notes for the pre-ingest audit pass: blob-size histogram,
strip-candidate path detection (paths present in pre-tip history
but absent in tip), copyright-review flag for PDFs / videos /
large images, recommend_mode() pseudocode.
CLEANUP_CHECKLIST.md
What the post-merge STYLE commit checks (now a safety-net since
the whitelist handles the common case at graft time). Still used
for copyright review and for Mode B residual-blob stripping.
AGENTS.md
Guidance for AI coding agents running this workflow. Pre-flight
gates, decision points (non-Apache license, raw binary test assets,
non-whitelisted paths the module needs, CID-normalization gap,
examples/ routing), escalation triggers for handing back to the
human. Explicit "don't do these things" section covers common
pitfalls (re-squash-silently, widen-whitelist-without-documenting,
force-push-ingest-PR).
These documents were developed and iterated on across PR InsightSoftwareConsortium#6061,
InsightSoftwareConsortium#6085, InsightSoftwareConsortium#6086, and especially InsightSoftwareConsortium#6093 (the thread that produced the v3
whitelist + CID-normalization approach). Landing them in-tree under
Utilities/Maintenance/RemoteModuleIngest/ makes future changes to the
strategy reviewable via standard PR process rather than through PR
comment updates on long-running threads.
Member
Author
|
@greptileai review this draft before I make it official. The previous review was against an older tip; the branch has since been force-pushed through multiple rounds (v3 pipeline re-ingest, gersemi STYLE, KWStyle private: fix in |
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
Apr 22, 2026
Per @dzenanz nitpick on PR InsightSoftwareConsortium#6093: keep -DITK_COMPUTER_MEMORY_SIZE (the line carrying the closing ''') at the end of the cmd variable so that future -DModule_X:BOOL=ON additions are +1-line diffs without moving the closing-quote position.
5a46182 to
86c1629
Compare
Brings AnisotropicDiffusionLBR from a configure-time remote fetch into the ITK source tree at Modules/Filtering/AnisotropicDiffusionLBR/ using the v3 whitelist filter-repo pipeline. Upstream repo: https://github.com/InsightSoftwareConsortium/ITKAnisotropicDiffusionLBR.git Upstream tip: 203260b929acda68a1f64b1267b0d89e825904ec Ingest date: 2026-04-22 Whitelist passes (git filter-repo): - --path include --path src --path test --path wrapping - --path CMakeLists.txt --path itk-module.cmake - --to-subdirectory-filter Modules/Filtering/AnisotropicDiffusionLBR - --prune-empty always - (if present) second pass: invert CTestConfig.cmake Outcome: 168 upstream commits -> 88 surviving; 15 distinct authors preserved; git blame walks across the merge boundary to original authors. Content-link inventory: .md5=24 .shaNNN=0 .cid=0 TODO before merge: convert 24 non-.cid content-link(s) to .cid. Primary author: Matt McCormick <matt.mccormick@kitware.com> Co-authored-by: Bradley Lowekamp <blowekamp@mail.nih.gov> Co-authored-by: Dženan Zukić <dzenan.zukic@kitware.com> Co-authored-by: Francois Budin <francois.budin@gmail.com> Co-authored-by: Hans J. Johnson <hans-johnson@uiowa.edu> Co-authored-by: Hans Johnson <hans-johnson@uiowa.edu> Co-authored-by: Hans Johnson <hans.j.johnson@gmail.com> Co-authored-by: Jon Haitz Legarreta <jhlegarreta@vicomtech.org> Co-authored-by: Jon Haitz Legarreta Gorroño <jhlegarreta@vicomtech.org> Co-authored-by: Jon Haitz Legarreta Gorroño <jon.haitz.legarreta@gmail.com> Co-authored-by: Mathew J. Seng <mathewseng@gmail.com> Co-authored-by: Mathew Seng <mathewseng@gmail.com> Co-authored-by: Matt McCormick <matt@mmmccormick.com> Co-authored-by: Matthew McCormick <matt@mmmccormick.com> Co-authored-by: Tom Birdsong <tom.birdsong@kitware.com>
…sionLBR Provides in-tree pointer to the upstream ITKAnisotropicDiffusionLBR repo and documents what was deliberately left outside the whitelist (Old/, examples/, test/azure-pipelines.yml, test/Docker/, README.rst, packaging scaffolding) and why.
Two defects noticed during the ingest review; both are pre-existing
in the upstream tip. Fixing them here keeps subsequent commits
in this series able to configure + build + test.
* itk-module.cmake called file(READ README.rst) at configure time,
but README.rst was stripped by the v3 whitelist (not an ITK
module-tree file). Replace with an inline set(DOCUMENTATION ...)
per ITK in-tree convention; drop the redundant ITKIOSpatialObjects
and ITKMetaIO entries from DEPENDS (greptile P2 — no in-source
references).
* itkStructureTensorImageFilter used
using Superclass = ImageToImageFilter<TImage, TImage>;
but the class inherits from
ImageToImageFilter<TImage, TTensorImage>.
TTensorImage defaults to Image<SymmetricSecondRankTensor<...>,...>,
not TImage, so the alias is wrong. Any downstream code resolving
Superclass::OutputImageType would get the wrong type. Fixed
(greptile P1).
Per @dzenanz nitpick on PR InsightSoftwareConsortium#6093: keep -DITK_COMPUTER_MEMORY_SIZE (the line carrying the closing ''') at the end of the cmd variable so that future -DModule_X:BOOL=ON additions are +1-line diffs without moving the closing-quote position.
Upstream ITKAnisotropicDiffusionLBR's CMakeLists.txt files predate the ITK gersemi pre-commit hook. Reformat the three ingested files to satisfy .gersemi.config (0.19.3): collapse single-arg set(), expand itk_add_test() arg lists, lowercase command names. No functional change.
86c1629 to
0fe0ab3
Compare
ceedf98
into
InsightSoftwareConsortium:main
16 of 18 checks passed
hjmjohnson
added a commit
to InsightSoftwareConsortium/ITKAnisotropicDiffusionLBR
that referenced
this pull request
Apr 25, 2026
The AnisotropicDiffusionLBR module has been merged into the ITK monorepo at Modules/Filtering/AnisotropicDiffusionLBR/ via InsightSoftwareConsortium/ITK#6093 (commit ceedf987bd, 2026-04-23). This repository is being placed into archive (read-only) mode. Remove all source from HEAD and replace with a README pointer so that the GitHub landing page directs users to the ITK monorepo. Full development history is preserved in the git log.
This was referenced Apr 25, 2026
63 tasks
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 6, 2026
Introduces ingest-remote-module.sh, a driver script that moves an ITK remote module (Modules/Remote/<Name>.remote.cmake) into the main source tree at Modules/<Group>/<Name>/ while preserving authorship and keeping ITK's git pack small. The script implements the v3 whitelist strategy agreed on PR InsightSoftwareConsortium#6093: * filter-repo --paths restricts history to include/, src/, test/, wrapping/, CMakeLists.txt, itk-module.cmake -- everything else (Old/, examples/, docs/, paper/, .github/, pyproject.toml, CTestConfig.cmake, LICENSE, .clang-format, ...) stays in the archived upstream repo. * --to-subdirectory-filter rewrites paths under the destination. * --prune-empty always drops commits whose changes are entirely outside the whitelist. * A second pass strips CTestConfig.cmake specifically (points at a standalone CDash project that does not apply in-tree). * The resulting merge is --allow-unrelated-histories --no-ff; the commit message carries the upstream URL + tip SHA plus Co-authored-by: trailers for every upstream contributor derived from the filter-repo'd git log. README.md gives the human operator the quick-start recipe (five commits per module, one PR per module) and a --dry-run walkthrough for previewing an ingest before committing. Intended follow-ups handled by the caller, not by this script: * DOC: the in-tree README pointing at the archived upstream. * COMP: deletion of Modules/Remote/<Name>.remote.cmake. * ENH: -DModule_<Name>:BOOL=ON in pyproject.toml configure-ci. * STYLE: optional .md5/.shaNNN -> .cid content-link conversion (may be deferred to a tree-wide sweep PR following the 1363328 precedent).
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 6, 2026
Four long-form documents landing alongside ingest-remote-module.sh:
INGESTION_STRATEGY.md
Policy document. Whitelist definition, mode selection (full /
filtered / squash), attribution floor, CID-normalization pipeline,
examples-relocation policy. Codifies the PR InsightSoftwareConsortium#6093 consensus that
commit count is NOT a gate -- only size metrics are -- so modules
with hundreds of genuine upstream commits can land in full-history
mode as long as pack-delta and blob-size thresholds are met.
AUDIT_DESIGN.md
Design notes for the pre-ingest audit pass: blob-size histogram,
strip-candidate path detection (paths present in pre-tip history
but absent in tip), copyright-review flag for PDFs / videos /
large images, recommend_mode() pseudocode.
CLEANUP_CHECKLIST.md
What the post-merge STYLE commit checks (now a safety-net since
the whitelist handles the common case at graft time). Still used
for copyright review and for Mode B residual-blob stripping.
AGENTS.md
Guidance for AI coding agents running this workflow. Pre-flight
gates, decision points (non-Apache license, raw binary test assets,
non-whitelisted paths the module needs, CID-normalization gap,
examples/ routing), escalation triggers for handing back to the
human. Explicit "don't do these things" section covers common
pitfalls (re-squash-silently, widen-whitelist-without-documenting,
force-push-ingest-PR).
These documents were developed and iterated on across PR InsightSoftwareConsortium#6061,
InsightSoftwareConsortium#6085, InsightSoftwareConsortium#6086, and especially InsightSoftwareConsortium#6093 (the thread that produced the v3
whitelist + CID-normalization approach). Landing them in-tree under
Utilities/Maintenance/RemoteModuleIngest/ makes future changes to the
strategy reviewable via standard PR process rather than through PR
comment updates on long-running threads.
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 6, 2026
Per @dzenanz nitpick on PR InsightSoftwareConsortium#6093: keep -DITK_COMPUTER_MEMORY_SIZE (the line carrying the closing ''') at the end of the cmd variable so that future -DModule_X:BOOL=ON additions are +1-line diffs without moving the closing-quote position.
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 6, 2026
…est-AnisotropicDiffusionLBR ENH: Ingest AnisotropicDiffusionLBR into Modules/Filtering
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 12, 2026
Introduces ingest-remote-module.sh, a driver script that moves an ITK remote module (Modules/Remote/<Name>.remote.cmake) into the main source tree at Modules/<Group>/<Name>/ while preserving authorship and keeping ITK's git pack small. The script implements the v3 whitelist strategy agreed on PR InsightSoftwareConsortium#6093: * filter-repo --paths restricts history to include/, src/, test/, wrapping/, CMakeLists.txt, itk-module.cmake -- everything else (Old/, examples/, docs/, paper/, .github/, pyproject.toml, CTestConfig.cmake, LICENSE, .clang-format, ...) stays in the archived upstream repo. * --to-subdirectory-filter rewrites paths under the destination. * --prune-empty always drops commits whose changes are entirely outside the whitelist. * A second pass strips CTestConfig.cmake specifically (points at a standalone CDash project that does not apply in-tree). * The resulting merge is --allow-unrelated-histories --no-ff; the commit message carries the upstream URL + tip SHA plus Co-authored-by: trailers for every upstream contributor derived from the filter-repo'd git log. README.md gives the human operator the quick-start recipe (five commits per module, one PR per module) and a --dry-run walkthrough for previewing an ingest before committing. Intended follow-ups handled by the caller, not by this script: * DOC: the in-tree README pointing at the archived upstream. * COMP: deletion of Modules/Remote/<Name>.remote.cmake. * ENH: -DModule_<Name>:BOOL=ON in pyproject.toml configure-ci. * STYLE: optional .md5/.shaNNN -> .cid content-link conversion (may be deferred to a tree-wide sweep PR following the 0a79494 precedent).
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 12, 2026
Four long-form documents landing alongside ingest-remote-module.sh:
INGESTION_STRATEGY.md
Policy document. Whitelist definition, mode selection (full /
filtered / squash), attribution floor, CID-normalization pipeline,
examples-relocation policy. Codifies the PR InsightSoftwareConsortium#6093 consensus that
commit count is NOT a gate -- only size metrics are -- so modules
with hundreds of genuine upstream commits can land in full-history
mode as long as pack-delta and blob-size thresholds are met.
AUDIT_DESIGN.md
Design notes for the pre-ingest audit pass: blob-size histogram,
strip-candidate path detection (paths present in pre-tip history
but absent in tip), copyright-review flag for PDFs / videos /
large images, recommend_mode() pseudocode.
CLEANUP_CHECKLIST.md
What the post-merge STYLE commit checks (now a safety-net since
the whitelist handles the common case at graft time). Still used
for copyright review and for Mode B residual-blob stripping.
AGENTS.md
Guidance for AI coding agents running this workflow. Pre-flight
gates, decision points (non-Apache license, raw binary test assets,
non-whitelisted paths the module needs, CID-normalization gap,
examples/ routing), escalation triggers for handing back to the
human. Explicit "don't do these things" section covers common
pitfalls (re-squash-silently, widen-whitelist-without-documenting,
force-push-ingest-PR).
These documents were developed and iterated on across PR InsightSoftwareConsortium#6061,
InsightSoftwareConsortium#6085, InsightSoftwareConsortium#6086, and especially InsightSoftwareConsortium#6093 (the thread that produced the v3
whitelist + CID-normalization approach). Landing them in-tree under
Utilities/Maintenance/RemoteModuleIngest/ makes future changes to the
strategy reviewable via standard PR process rather than through PR
comment updates on long-running threads.
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 12, 2026
Per @dzenanz nitpick on PR InsightSoftwareConsortium#6093: keep -DITK_COMPUTER_MEMORY_SIZE (the line carrying the closing ''') at the end of the cmd variable so that future -DModule_X:BOOL=ON additions are +1-line diffs without moving the closing-quote position.
hjmjohnson
added a commit
to hjmjohnson/ITK
that referenced
this pull request
May 12, 2026
…est-AnisotropicDiffusionLBR ENH: Ingest AnisotropicDiffusionLBR into Modules/Filtering
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves AnisotropicDiffusionLBR from a configure-time remote fetch into the ITK source tree at
Modules/Filtering/AnisotropicDiffusionLBR/using the v3 whitelist ingestion strategy. Scope is deliberately narrow: only code, headers, tests, wrapping, and module build descriptors cross the merge boundary. Everything else (Old/,examples/,paper/, docs, packaging/CI scaffolding) stays in the archived upstream repo. Relates to #6060.Strategy: v3 whitelist + CID normalization
Evolved across two feedback rounds in this PR:
Old/, paper material, demo PNGs should not enter ITK..cid; examples belong in top-levelExamples/, not inline with module source.The v1 approach (full-history merge of everything upstream shipped) was abandoned. The v2 bloat-thresholded approach was superseded by the v3 structural whitelist: a
git filter-repo --pathspass that admits only the whitelisted categories. Strategy documents live at.claude/worktrees/pr-6061-local-beta-modules-support/(INGESTION_STRATEGY.md, AUDIT_DESIGN.md, CLEANUP_CHECKLIST.md).What ingested (whitelist)
The
git filter-repopipeline that produced the merge commit:Result: 168 upstream commits → 106 surviving on the filtered branch; 43 files transferred; 15 distinct authors preserved;
git blamewalks across the merge boundary into upstream authors.What did NOT ingest (see Modules/Filtering/AnisotropicDiffusionLBR/README.md)
Old/— pre-refactor legacy treesexamples/+examples/Data/— per @dzenanz, per-module examples are routed to top-levelExamples/in a separate follow-up PR, not ingested inlineREADME.rst— useful content is folded into Doxygen on the filter headersCTestConfig.cmake,pyproject.toml,.github/,.clang-format,LICENSE— standalone-repo scaffolding superseded by ITK root equivalentsThe new in-tree
Modules/Filtering/AnisotropicDiffusionLBR/README.mddocuments each exclusion with a pointer at the archived upstream URL.Commit structure (4 commits)
ENH: Ingest ITKAnisotropicDiffusionLBR into Modules/Filtering— merge commit of the whitelist-filtered upstreamDOC: Add README.md pointing at archived upstream for AnisotropicDiffusionLBR— pointer doc + exclusion rationaleCOMP: Remove AnisotropicDiffusionLBR.remote.cmake; now in-tree— delete the remote fetch declarationENH: Enable AnisotropicDiffusionLBR in CI via configure-ci— opt the module into the Pixi CI matrices⚠ Pre-merge step: CID normalization pending
Per the v3 strategy, the 24 test-data content-links under
test/Baseline/andtest/Input/should be normalized from.md5to.cidbefore this PR merges. The conversion is mechanical — resolve each MD5 hash to its stored bytes via the ExternalData mirror, compute the CIDv1, write<file>.cid, delete<file>.md5.This step was not executed in the ingest session because the session lacked network access to data.kitware.com and web3.storage. Either:
Utilities/SPDX/(no — wrong tool), or more accurately a newUtilities/Maintenance/cid-normalize.shhelper (follow-up) that invokes@web3-storage/w3cliperDocumentation/docs/contributing/upload_binary_data.md;.md5content-links as-is for this PR and open a follow-up sweep PR that converts.md5→.cidacross the whole tree (not just this module), matching ITK's own precedent at commitf3899ce8c6.The tree-wide sweep is probably the less disruptive path — reviewers of this ingest PR can focus on the structural ingest without a CID-conversion diff on top.
AI disclosure
Ingestion pipeline (filter-repo pass order, README scope, commit structure) developed with Claude Code assistance. Every commit locally rebuildable and testable;
git logshows the 15 upstream authors preserved across the whitelist-filtered merge.