diff --git a/.github/workflows/build-test-publish.yml b/.github/workflows/build-test-publish.yml
index c40e8da70..80aa36174 100644
--- a/.github/workflows/build-test-publish.yml
+++ b/.github/workflows/build-test-publish.yml
@@ -264,7 +264,7 @@ jobs:
run: |
python -m pip install --upgrade pip
python -m pip install ninja
- python -m pip install itk>=5.4rc3
+ python -m pip install itk>=5.4.6
python -m pip install matplotlib
python -m pip install itkwidgets
# Issues with 5.7.0
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..904604f50
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,53 @@
+# Mirrors ITK's .pre-commit-config.yaml style gates for C++ and Python.
+# The clang-format rev must track ITK main's pin (the lint CI job
+# resolves its version from ITK main at run time).
+fail_fast: true
+default_stages: [pre-commit]
+repos:
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v5.0.0
+ hooks:
+ - id: check-added-large-files
+ args: ['--maxkb=200']
+ - id: check-ast
+ - id: check-case-conflict
+ - id: check-illegal-windows-names
+ - id: check-json
+ exclude: "\\.ipynb$"
+ - id: check-merge-conflict
+ - id: check-toml
+ - id: check-vcs-permalinks
+ - id: check-xml
+ - id: check-yaml
+ - id: check-shebang-scripts-are-executable
+ - id: debug-statements
+ exclude: "^Utilities\\/SphinxExtensions\\/"
+ - id: destroyed-symlinks
+ - id: detect-private-key
+ - id: end-of-file-fixer
+ exclude: "\\.(md5|sha512|cid|svg|vtk|vtp|ipynb)$|^Superbuild\\/"
+ - id: forbid-new-submodules
+ - id: mixed-line-ending
+ exclude: "\\.(sha512|cid|svg|vtk|vtp|ipynb)$"
+ - id: no-commit-to-branch
+ args: ['--branch','main','--branch','dashboard','--branch','gh-pages']
+ - id: trailing-whitespace
+ exclude: "\\.(sha512|cid|svg|vtk|vtp|ipynb)$"
+- repo: https://github.com/pre-commit/mirrors-clang-format
+ rev: v19.1.7
+ hooks:
+ - id: clang-format
+ args: ['--style=file']
+ files: '\.(c|cc|h|cxx|hxx)$'
+- repo: https://github.com/psf/black
+ rev: 25.12.0
+ hooks:
+ - id: black
+ args: ['--target-version', 'py310']
+ exclude: "^Utilities\\/SphinxExtensions\\/"
+- repo: https://github.com/asottile/pyupgrade
+ rev: v3.21.2
+ hooks:
+ - id: pyupgrade
+ args: [--py310-plus]
+ exclude: "^Utilities\\/SphinxExtensions\\/"
diff --git a/CMake/CTestCustom.cmake.in b/CMake/CTestCustom.cmake.in
index 746abb973..2d9fbb49d 100644
--- a/CMake/CTestCustom.cmake.in
+++ b/CMake/CTestCustom.cmake.in
@@ -37,6 +37,18 @@ set(CTEST_CUSTOM_COVERAGE_EXCLUDE
set(CTEST_CUSTOM_WARNING_EXCEPTION
${CTEST_CUSTOM_WARNING_EXCEPTION}
"has no symbols"
+ "UseITK\\.cmake"
+ "This warning is for project developers"
+ "DirectWarningToFile"
+ "WITH_MAINTAINER_WARNINGS"
+ "which will suppress this warning"
+ "WARNING: Cache entry deserialization failed, entry ignored"
+ "LabelGeometryImageFilter.*deprecated"
+ "note: declared here"
+ "RemovedInSphinx[0-9]+Warning"
+ # Nightly InsightDoxygen XML is currently missing these classes upstream.
+ "doxygenclass: Cannot find class"
+ "Could not find match for .itk::"
"ipo: warning #11053"
"ipo: warning #11053"
"vxl.core.vnl.algo"
@@ -91,3 +103,8 @@ set(CTEST_CUSTOM_WARNING_EXCEPTION
"ld.*warning.*duplicate dylib.*"
)
endif()
+
+set(CTEST_CUSTOM_ERROR_EXCEPTION
+ ${CTEST_CUSTOM_ERROR_EXCEPTION}
+ "RemovedInSphinx[0-9]+Warning"
+ )
diff --git a/CMake/DownloadDoxygenTAG.cmake b/CMake/DownloadDoxygenTAG.cmake
index ac9312461..ed676bda2 100644
--- a/CMake/DownloadDoxygenTAG.cmake
+++ b/CMake/DownloadDoxygenTAG.cmake
@@ -1,4 +1,3 @@
file(DOWNLOAD https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.3.0/InsightDoxygenDocTag-5.3.0.gz
${ITKDoxygenTAG_TEMP_DIR}/InsightDoxygen.tag.gz SHOW_PROGRESS
)
-
diff --git a/CMake/ExternalData.cmake b/CMake/ExternalData.cmake
index 3bae8dbda..d096d243d 100644
--- a/CMake/ExternalData.cmake
+++ b/CMake/ExternalData.cmake
@@ -999,7 +999,6 @@ function(_ExternalData_get_from_object_store hash algo var_obj var_success)
foreach(dir ${ExternalData_OBJECT_STORES})
set(obj "${dir}/${algo}/${hash}")
if(EXISTS "${obj}")
- message(STATUS "Found object: \"${obj}\"")
set("${var_obj}" "${obj}" PARENT_SCOPE)
set("${var_success}" 1 PARENT_SCOPE)
return()
@@ -1013,7 +1012,6 @@ function(_ExternalData_download_object name hash algo var_obj var_success var_er
foreach(dir ${ExternalData_OBJECT_STORES})
set(obj "${dir}/${algo}/${hash}")
if(EXISTS "${obj}")
- message(STATUS "Found object: \"${obj}\"")
set("${var_obj}" "${obj}" PARENT_SCOPE)
set("${var_success}" "${success}" PARENT_SCOPE)
return()
diff --git a/CMake/ITKDoxygen.cmake b/CMake/ITKDoxygen.cmake
index 88733bac1..07b982aed 100644
--- a/CMake/ITKDoxygen.cmake
+++ b/CMake/ITKDoxygen.cmake
@@ -12,4 +12,3 @@ add_custom_command(OUTPUT ${ITKDoxygen_DIR}/index.html
add_custom_target(ITKDoxygen ${CMAKE_COMMAND} -E echo "Finished obtaining Doxygen"
DEPENDS ${ITKDoxygen_DIR}/index.html)
-
diff --git a/CMake/ITKDoxygenTAG.cmake b/CMake/ITKDoxygenTAG.cmake
index 05444f8f3..146b7e410 100644
--- a/CMake/ITKDoxygenTAG.cmake
+++ b/CMake/ITKDoxygenTAG.cmake
@@ -15,4 +15,3 @@ add_custom_command(OUTPUT ${ITKDoxygenTAG_DIR}/InsightDoxygen.tag
)
add_custom_target(ITKDoxygenTAG ${CMAKE_COMMAND} -E echo "Finished obtaining Doxygen TAG"
DEPENDS ${ITKDoxygenTAG_DIR}/InsightDoxygen.tag)
-
diff --git a/CMake/ITKSphinxExamplesExternalData.cmake b/CMake/ITKSphinxExamplesExternalData.cmake
index 607da4cfc..74f3d720f 100644
--- a/CMake/ITKSphinxExamplesExternalData.cmake
+++ b/CMake/ITKSphinxExamplesExternalData.cmake
@@ -1,3 +1,4 @@
+set(ExternalData_SOURCE_ROOT "${PROJECT_SOURCE_DIR}")
get_filename_component(_ITKExternalData_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
include(${_ITKExternalData_DIR}/ExternalData.cmake)
@@ -18,52 +19,39 @@ if(NOT ExternalData_OBJECT_STORES)
endif()
list(APPEND ExternalData_OBJECT_STORES
# Local data store populated by the ITK pre-commit hook
- "${CMAKE_SOURCE_DIR}/.ExternalData"
+ "${PROJECT_SOURCE_DIR}/.ExternalData"
)
-set(ITK_SPHINX_EXAMPLES_DATA_RELEASED_ROOT_CID bafybeib6yijwyl52gkalx6griio2wsibowlrt3v5wmkkuqlnuvku64c3ra)
+# Tests reference staged data at ${CMAKE_CURRENT_BINARY_DIR}//,
+# which requires the default ExternalData_BINARY_ROOT (${CMAKE_BINARY_DIR}).
+# Expands %(algo:lower)
set(ExternalData_URL_ALGO_CID_lower cid)
+set(ExternalData_URL_ALGO_MD5_lower md5)
set(ExternalData_URL_TEMPLATES "" CACHE STRING
"Additional URL templates for the ExternalData CMake script to look for testing data. E.g.
file:///var/bigharddrive/%(algo)/%(hash)")
mark_as_advanced(ExternalData_URL_TEMPLATES)
if(NOT ITK_FORBID_DOWNLOADS)
list(APPEND ExternalData_URL_TEMPLATES
+ # Data published on GitHub Pages
+ "https://insightsoftwareconsortium.github.io/ITKTestingData/%(algo)/%(hash)"
# Local IPFS gateway
"http://127.0.0.1:8080/ipfs/%(hash)"
-
- # Data published on GitHub Pages (note: not complete due to file size
- # limit)
- "https://insightsoftwareconsortium.github.io/ITKTestingData/%(algo)/%(hash)"
-
- # Released data rsync'd to Kitware's Apache web server
- "https://itk.org/files/ExternalData/%(algo)/%(hash)"
-
- # Restricted gateway with released data
- "https://itk.mypinata.cloud/ipfs/${ITK_SPHINX_EXAMPLES_DATA_RELEASED_ROOT_CID}/Objects/CID/%(hash)"
-
- # New data on web3.storage
- "https://w3s.link/ipfs/%(hash)"
-
- # Released data on web3.storage
- "https://${ITK_SPHINX_EXAMPLES_DATA_RELEASED_ROOT_CID}.ipfs.w3s.link/Objects/CID/%(hash)"
-
- # Released data on estuary.tech
- "https://api.estuary.tech/gw/ipfs/${ITK_SPHINX_EXAMPLES_DATA_RELEASED_ROOT_CID}/Objects/CID/%(hash)"
-
- # Protocol Labs gateway
- "https://${ITK_SPHINX_EXAMPLES_DATA_RELEASED_ROOT_CID}.ipfs.dweb.link/Objects/CID/%(hash)"
-
- # Gateway for arbitrary new files, uploaded to web3.storage
- "https://dweb.link/ipfs/%(hash)"
-
# Protocol Labs gateway
"https://ipfs.io/ipfs/%(hash)"
-
+ # Filebase gateway
+ "https://ipfs.filebase.io/ipfs/%(hash)"
+ # Gateway for data pinned on pinata
+ "https://gateway.pinata.cloud/ipfs/%(hash)"
# Cloudflare gateway
"https://cloudflare-ipfs.com/ipfs/%(hash)"
-
+ # Additional gateway (modern but has redirect)
+ "https://dweb.link/ipfs/%(hash)"
+ # Data published on Girder
+ "https://data.kitware.com:443/api/v1/file/hashsum/%(algo)/%(hash)/download"
+ # Data published by developers using git-gerrit-push.
+ "https://itk.org/files/ExternalData/%(algo)/%(hash)"
# DataLad repository on gin.g-node.org
"https://gin.g-node.org/InsightSoftwareConsortium/ITKSphinxExamplesData/raw/main/Objects/CID/%(hash)"
)
@@ -73,7 +61,7 @@ endif()
set(ExternalData_LINK_CONTENT CID)
# Emscripten currently has difficulty reading symlinks.
-if(EMSCRIPTEN)
+if(EMSCRIPTEN OR WASI)
set(ExternalData_NO_SYMLINKS 1)
endif()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 531b87324..f8c9c169f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -99,7 +99,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ITKSphinxExamples_BINARY_DIR}/bin)
include(CTest)
# Tests are added with add_test() can be run with the 'ctest' command line program.
enable_testing()
-configure_file(CMake/CTestCustom.cmake.in CTestCustom.cmake)
+configure_file(CMake/CTestCustom.cmake.in CTestCustom.cmake COPYONLY)
# ExternalData setup. We use the CMake ExternalData features to download binary
# files from a configurable location(s) -- including the local filesystem -- to
diff --git a/Documentation/Build/index.rst b/Documentation/Build/index.rst
index 0707a273e..14f99b8fd 100644
--- a/Documentation/Build/index.rst
+++ b/Documentation/Build/index.rst
@@ -247,4 +247,3 @@ VV
.. _Qt: https://www.qt.io/developers/
.. _VTK: https://vtk.org/
.. _VV: https://www.creatis.insa-lyon.fr/rio/vv
-
diff --git a/Documentation/Credits.rst b/Documentation/Credits.rst
index 4d9bb0ada..4c7b55b11 100644
--- a/Documentation/Credits.rst
+++ b/Documentation/Credits.rst
@@ -6,4 +6,4 @@ Credits
:avatars:
:exclude: itkrobot
:limit: 100
- :order: DESC
\ No newline at end of file
+ :order: DESC
diff --git a/Formatting/static/pace.min.js b/Formatting/static/pace.min.js
index c47d6e5a5..f48a85ddd 100644
--- a/Formatting/static/pace.min.js
+++ b/Formatting/static/pace.min.js
@@ -1,2 +1,2 @@
/*! pace 1.0.0 */
-(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].slice,Y={}.hasOwnProperty,Z=function(a,b){function c(){this.constructor=a}for(var d in b)Y.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},$=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(u={catchupTime:100,initialRate:.03,minTime:250,ghostTime:100,maxProgressPerFrame:20,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},C=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},E=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,t=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==E&&(E=function(a){return setTimeout(a,50)},t=function(a){return clearTimeout(a)}),G=function(a){var b,c;return b=C(),(c=function(){var d;return d=C()-b,d>=33?(b=C(),a(d,function(){return E(c)})):setTimeout(c,33-d)})()},F=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?X.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},v=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?X.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)Y.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?v(b[a],e):b[a]=e);return b},q=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},x=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cQ;Q++)K=U[Q],D[K]===!0&&(D[K]=u[K]);i=function(a){function b(){return V=b.__super__.constructor.apply(this,arguments)}return Z(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(D.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='\n',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b,c,d,e,f,g;if(null==document.querySelector(D.target))return!1;for(a=this.getElement(),d="translate3d("+this.progress+"%, 0, 0)",g=["webkitTransform","msTransform","transform"],e=0,f=g.length;f>e;e++)b=g[e],a.children[0].style[b]=d;return(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?c="99":(c=this.progress<10?"0":"",c+=0|this.progress),a.children[0].setAttribute("data-progress",""+c)),this.lastRenderedProgress=this.progress},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),P=window.XMLHttpRequest,O=window.XDomainRequest,N=window.WebSocket,w=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],f.push(null==a[d]&&"function"!=typeof e?a[d]=e:void 0)}catch(g){c=g}return f},A=[],j.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("ignore"),c=b.apply(null,a),A.shift(),c},j.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("track"),c=b.apply(null,a),A.shift(),c},J=function(a){var b;if(null==a&&(a="GET"),"track"===A[0])return"force";if(!A.length&&D.ajax){if("socket"===a&&D.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),$.call(D.ajax.trackMethods,b)>=0)return!0}return!1},k=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return J(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new P(b),a(c),c};try{w(window.XMLHttpRequest,P)}catch(d){}if(null!=O){window.XDomainRequest=function(){var b;return b=new O,a(b),b};try{w(window.XDomainRequest,O)}catch(d){}}if(null!=N&&D.ajax.trackWebSockets){window.WebSocket=function(a,b){var d;return d=null!=b?new N(a,b):new N(a),J("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d};try{w(window.WebSocket,N)}catch(d){}}}return Z(b,a),b}(h),R=null,y=function(){return null==R&&(R=new k),R},I=function(a){var b,c,d,e;for(e=D.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},y().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,I(g)?void 0:j.running||D.restartOnRequestAfter===!1&&"force"!==J(f)?void 0:(d=arguments,c=D.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,k;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(j.restart(),i=j.sources,k=[],c=0,g=i.length;g>c;c++){if(K=i[c],K instanceof a){K.watch.apply(K,d);break}k.push(void 0)}return k}},c))}),a=function(){function a(){var a=this;this.elements=[],y().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,I(e)?void 0:(c="socket"===d?new n(b):new o(b),this.elements.push(c))},a}(),o=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2},!1),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100},!1);else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),n=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100},!1)}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},D.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=C(),b=setInterval(function(){var g;return g=C()-c-50,c=C(),e.push(g),e.length>D.eventLag.sampleCount&&e.shift(),a=q(e),++d>=D.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/D.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,D.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+D.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),L=null,H=null,r=null,M=null,p=null,s=null,j.running=!1,z=function(){return D.restartOnPushState?j.restart():void 0},null!=window.history.pushState&&(T=window.history.pushState,window.history.pushState=function(){return z(),T.apply(window.history,arguments)}),null!=window.history.replaceState&&(W=window.history.replaceState,window.history.replaceState=function(){return z(),W.apply(window.history,arguments)}),l={ajax:a,elements:d,document:c,eventLag:f},(B=function(){var a,c,d,e,f,g,h,i;for(j.sources=L=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],D[a]!==!1&&L.push(new l[a](D[a]));for(i=null!=(h=D.extraSources)?h:[],d=0,f=i.length;f>d;d++)K=i[d],L.push(new K(D));return j.bar=r=new b,H=[],M=new m})(),j.stop=function(){return j.trigger("stop"),j.running=!1,r.destroy(),s=!0,null!=p&&("function"==typeof t&&t(p),p=null),B()},j.restart=function(){return j.trigger("restart"),j.stop(),j.start()},j.go=function(){var a;return j.running=!0,r.render(),a=C(),s=!1,p=G(function(b,c){var d,e,f,g,h,i,k,l,n,o,p,q,t,u,v,w;for(l=100-r.progress,e=p=0,f=!0,i=q=0,u=L.length;u>q;i=++q)for(K=L[i],o=null!=H[i]?H[i]:H[i]=[],h=null!=(w=K.elements)?w:[K],k=t=0,v=h.length;v>t;k=++t)g=h[k],n=null!=o[k]?o[k]:o[k]=new m(g),f&=n.done,n.done||(e++,p+=n.tick(b));return d=p/e,r.update(M.tick(b,d)),r.done()||f||s?(r.update(100),j.trigger("done"),setTimeout(function(){return r.finish(),j.running=!1,j.trigger("hide")},Math.max(D.ghostTime,Math.max(D.minTime-(C()-a),0)))):c()})},j.start=function(a){v(D,a),j.running=!0;try{r.render()}catch(b){i=b}return document.querySelector(".pace")?(j.trigger("start"),j.go()):setTimeout(j.start,50)},"function"==typeof define&&define.amd?define(function(){return j}):"object"==typeof exports?module.exports=j:D.startOnPageLoad&&j.start()}).call(this);
\ No newline at end of file
+(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].slice,Y={}.hasOwnProperty,Z=function(a,b){function c(){this.constructor=a}for(var d in b)Y.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},$=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(u={catchupTime:100,initialRate:.03,minTime:250,ghostTime:100,maxProgressPerFrame:20,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},C=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},E=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,t=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==E&&(E=function(a){return setTimeout(a,50)},t=function(a){return clearTimeout(a)}),G=function(a){var b,c;return b=C(),(c=function(){var d;return d=C()-b,d>=33?(b=C(),a(d,function(){return E(c)})):setTimeout(c,33-d)})()},F=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?X.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},v=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?X.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)Y.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?v(b[a],e):b[a]=e);return b},q=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},x=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cQ;Q++)K=U[Q],D[K]===!0&&(D[K]=u[K]);i=function(a){function b(){return V=b.__super__.constructor.apply(this,arguments)}return Z(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(D.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='\n',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b,c,d,e,f,g;if(null==document.querySelector(D.target))return!1;for(a=this.getElement(),d="translate3d("+this.progress+"%, 0, 0)",g=["webkitTransform","msTransform","transform"],e=0,f=g.length;f>e;e++)b=g[e],a.children[0].style[b]=d;return(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?c="99":(c=this.progress<10?"0":"",c+=0|this.progress),a.children[0].setAttribute("data-progress",""+c)),this.lastRenderedProgress=this.progress},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),P=window.XMLHttpRequest,O=window.XDomainRequest,N=window.WebSocket,w=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],f.push(null==a[d]&&"function"!=typeof e?a[d]=e:void 0)}catch(g){c=g}return f},A=[],j.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("ignore"),c=b.apply(null,a),A.shift(),c},j.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("track"),c=b.apply(null,a),A.shift(),c},J=function(a){var b;if(null==a&&(a="GET"),"track"===A[0])return"force";if(!A.length&&D.ajax){if("socket"===a&&D.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),$.call(D.ajax.trackMethods,b)>=0)return!0}return!1},k=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return J(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new P(b),a(c),c};try{w(window.XMLHttpRequest,P)}catch(d){}if(null!=O){window.XDomainRequest=function(){var b;return b=new O,a(b),b};try{w(window.XDomainRequest,O)}catch(d){}}if(null!=N&&D.ajax.trackWebSockets){window.WebSocket=function(a,b){var d;return d=null!=b?new N(a,b):new N(a),J("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d};try{w(window.WebSocket,N)}catch(d){}}}return Z(b,a),b}(h),R=null,y=function(){return null==R&&(R=new k),R},I=function(a){var b,c,d,e;for(e=D.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},y().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,I(g)?void 0:j.running||D.restartOnRequestAfter===!1&&"force"!==J(f)?void 0:(d=arguments,c=D.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,k;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(j.restart(),i=j.sources,k=[],c=0,g=i.length;g>c;c++){if(K=i[c],K instanceof a){K.watch.apply(K,d);break}k.push(void 0)}return k}},c))}),a=function(){function a(){var a=this;this.elements=[],y().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,I(e)?void 0:(c="socket"===d?new n(b):new o(b),this.elements.push(c))},a}(),o=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2},!1),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100},!1);else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),n=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100},!1)}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},D.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=C(),b=setInterval(function(){var g;return g=C()-c-50,c=C(),e.push(g),e.length>D.eventLag.sampleCount&&e.shift(),a=q(e),++d>=D.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/D.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,D.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+D.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),L=null,H=null,r=null,M=null,p=null,s=null,j.running=!1,z=function(){return D.restartOnPushState?j.restart():void 0},null!=window.history.pushState&&(T=window.history.pushState,window.history.pushState=function(){return z(),T.apply(window.history,arguments)}),null!=window.history.replaceState&&(W=window.history.replaceState,window.history.replaceState=function(){return z(),W.apply(window.history,arguments)}),l={ajax:a,elements:d,document:c,eventLag:f},(B=function(){var a,c,d,e,f,g,h,i;for(j.sources=L=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],D[a]!==!1&&L.push(new l[a](D[a]));for(i=null!=(h=D.extraSources)?h:[],d=0,f=i.length;f>d;d++)K=i[d],L.push(new K(D));return j.bar=r=new b,H=[],M=new m})(),j.stop=function(){return j.trigger("stop"),j.running=!1,r.destroy(),s=!0,null!=p&&("function"==typeof t&&t(p),p=null),B()},j.restart=function(){return j.trigger("restart"),j.stop(),j.start()},j.go=function(){var a;return j.running=!0,r.render(),a=C(),s=!1,p=G(function(b,c){var d,e,f,g,h,i,k,l,n,o,p,q,t,u,v,w;for(l=100-r.progress,e=p=0,f=!0,i=q=0,u=L.length;u>q;i=++q)for(K=L[i],o=null!=H[i]?H[i]:H[i]=[],h=null!=(w=K.elements)?w:[K],k=t=0,v=h.length;v>t;k=++t)g=h[k],n=null!=o[k]?o[k]:o[k]=new m(g),f&=n.done,n.done||(e++,p+=n.tick(b));return d=p/e,r.update(M.tick(b,d)),r.done()||f||s?(r.update(100),j.trigger("done"),setTimeout(function(){return r.finish(),j.running=!1,j.trigger("hide")},Math.max(D.ghostTime,Math.max(D.minTime-(C()-a),0)))):c()})},j.start=function(a){v(D,a),j.running=!0;try{r.render()}catch(b){i=b}return document.querySelector(".pace")?(j.trigger("start"),j.go()):setTimeout(j.start,50)},"function"==typeof define&&define.amd?define(function(){return j}):"object"==typeof exports?module.exports=j:D.startOnPageLoad&&j.start()}).call(this);
diff --git a/Formatting/templates/page.html b/Formatting/templates/page.html
index bc3fc8566..9a913efd8 100644
--- a/Formatting/templates/page.html
+++ b/Formatting/templates/page.html
@@ -32,4 +32,4 @@
{%- endif %}
{{ body }}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/Superbuild/CMakeLists.txt b/Superbuild/CMakeLists.txt
index 3d264d912..8e2d6e6c5 100644
--- a/Superbuild/CMakeLists.txt
+++ b/Superbuild/CMakeLists.txt
@@ -8,6 +8,10 @@ project(ITKSphinxExamples)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../CMake")
+# The dashboard driver runs ctest here, so the warning exceptions must
+# be present in this binary directory, not only in ITKEx-build.
+configure_file(${CMAKE_CURRENT_LIST_DIR}/../CMake/CTestCustom.cmake.in CTestCustom.cmake COPYONLY)
+
if(CMAKE_HOST_WIN32)
string(LENGTH "${ITKSphinxExamples_SOURCE_DIR}" source_len)
if(${source_len} GREATER 30)
diff --git a/Superbuild/External-ITK.cmake b/Superbuild/External-ITK.cmake
index 77a0761f4..0a0e87431 100644
--- a/Superbuild/External-ITK.cmake
+++ b/Superbuild/External-ITK.cmake
@@ -2,8 +2,8 @@
# Get and build itk
if(NOT ITK_TAG)
- # ITK release 2025-01-02
- set(ITK_TAG "v5.4.2")
+ # Track ITK main, matching the itk-git-tag used by the C++ CI jobs
+ set(ITK_TAG "main")
endif()
set(_vtk_args)
diff --git a/Superbuild/External-Python.cmake b/Superbuild/External-Python.cmake
index e8af0f4ef..3febdacbc 100644
--- a/Superbuild/External-Python.cmake
+++ b/Superbuild/External-Python.cmake
@@ -18,6 +18,7 @@ ExternalProject_Add(ITKPython
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ${Python3_EXECUTABLE} -m venv "${_itk_venv}"
BUILD_COMMAND ${ITKPython3_EXECUTABLE} -m pip install --upgrade pip
- INSTALL_COMMAND ${ITKPython3_EXECUTABLE} -m pip install --ignore-installed itk>=5.4.2 sphinx==7.2.6 six black nbsphinx ipywidgets sphinx-contributors ipykernel matplotlib itkwidgets[lab,notebook]>=1.0a51 pydata-sphinx-theme
+ INSTALL_COMMAND ${ITKPython3_EXECUTABLE} -m pip install --ignore-installed itk>=5.4.6 zarr>=3.0.0 sphinx==7.2.6 six black nbsphinx ipywidgets sphinx-contributors ipykernel matplotlib itkwidgets[lab,notebook]>=1.0a51 pydata-sphinx-theme
+ COMMAND ${ITKPython3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/install_zarr2_compat.py
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/ITKBlackConfig.cmake
)
diff --git a/Superbuild/install_zarr2_compat.py b/Superbuild/install_zarr2_compat.py
new file mode 100644
index 000000000..e8f56947e
--- /dev/null
+++ b/Superbuild/install_zarr2_compat.py
@@ -0,0 +1,9 @@
+"""Install the zarr2 compatibility shim into this interpreter's site-packages."""
+
+import pathlib
+import shutil
+import sysconfig
+
+site_packages = pathlib.Path(sysconfig.get_paths()["purelib"])
+shutil.copy(pathlib.Path(__file__).parent / "zarr2_compat.py", site_packages)
+(site_packages / "zarr2_compat.pth").write_text("import zarr2_compat\n")
diff --git a/Superbuild/zarr2_compat.py b/Superbuild/zarr2_compat.py
new file mode 100644
index 000000000..420166dd6
--- /dev/null
+++ b/Superbuild/zarr2_compat.py
@@ -0,0 +1,11 @@
+# itkwidgets (<=1.0a55) registers imjoy codecs against zarr.storage.BaseStore,
+# which zarr 3 removed; alias it to the zarr 3 Store ABC.
+try:
+ import zarr.storage
+
+ if not hasattr(zarr.storage, "BaseStore"):
+ from zarr.abc.store import Store
+
+ zarr.storage.BaseStore = Store
+except ImportError:
+ pass
diff --git a/Utilities/CookieCutter/hooks/post_gen_project.py b/Utilities/CookieCutter/hooks/post_gen_project.py
old mode 100644
new mode 100755
index 1bc1f31a6..43b5e3871
--- a/Utilities/CookieCutter/hooks/post_gen_project.py
+++ b/Utilities/CookieCutter/hooks/post_gen_project.py
@@ -15,8 +15,8 @@
# limitations under the License.
-""" Post-generate cookiecutter hook script to incorporate the example to the
- ITKSphinxExamples source tree.
+"""Post-generate cookiecutter hook script to incorporate the example to the
+ITKSphinxExamples source tree.
"""
import os
@@ -146,7 +146,7 @@ def print_instructions(itk_examples_src, example_dir, example_name, group_name):
example_cxx = pjoin(example_dir, "Code.cxx")
example_py = pjoin(example_dir, "Code.py")
- print("Example {} added successfully!".format(example_name))
+ print(f"Example {example_name} added successfully!")
print("Please:")
print(" 1- Edit the following files:")
diff --git a/Utilities/CreateDownloadableArchive.py b/Utilities/CreateDownloadableArchive.py
index 2455cfc70..4839f2268 100755
--- a/Utilities/CreateDownloadableArchive.py
+++ b/Utilities/CreateDownloadableArchive.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-""" Build archives for the examples.
+"""Build archives for the examples.
Build the .tar.gz and .zip for the example, and copy them along with the
supporting files into the html output.
@@ -56,7 +56,7 @@
# archive CMakeLists.txt. This so the input images can be found.
archive_cmakelist = os.path.join(example_dir, "CMakeLists.txt.archive")
with open(archive_cmakelist, "w") as new_list_file:
- with open(os.path.join(example_dir, "CMakeLists.txt"), "r") as old_list_file:
+ with open(os.path.join(example_dir, "CMakeLists.txt")) as old_list_file:
for line in old_list_file:
newline = line.replace(
"CMAKE_CURRENT_BINARY_DIR", "CMAKE_CURRENT_SOURCE_DIR"
diff --git a/Utilities/CreateNewExample.py.in b/Utilities/CreateNewExample.py.in
index 956a7bd53..104d0c828 100755
--- a/Utilities/CreateNewExample.py.in
+++ b/Utilities/CreateNewExample.py.in
@@ -15,8 +15,8 @@
# limitations under the License.
-""" Script that uses cookiecutter to add a new example to the ITKSphinxExamples.
- Usage: python CreateNewExample.py
+"""Script that uses cookiecutter to add a new example to the ITKSphinxExamples.
+Usage: python CreateNewExample.py
"""
import argparse
@@ -47,20 +47,22 @@ if sys.version_info[:2] <= (2, 7):
def write_all_itk_headers(itk_source_dir):
output = StringIO()
- for root, dirs, files in os.walk(pjoin(itk_source_dir, 'Modules')):
- for f in fnmatch.filter(files, 'itk*.h'):
- output.write(f + u'\n')
+ for root, dirs, files in os.walk(pjoin(itk_source_dir, "Modules")):
+ for f in fnmatch.filter(files, "itk*.h"):
+ output.write(f + "\n")
return output
+
def get_all_itk_headers(itk_source_dir):
output = []
- for root, dirs, files in os.walk(pjoin(itk_source_dir, 'Modules')):
- for f in fnmatch.filter(files, 'itk*.h'):
+ for root, dirs, files in os.walk(pjoin(itk_source_dir, "Modules")):
+ for f in fnmatch.filter(files, "itk*.h"):
output.append(f)
return output
+
def words(text):
- temp = re.findall('itk[A-Z][a-zA-Z_0-9]+', text)
+ temp = re.findall("itk[A-Z][a-zA-Z_0-9]+", text)
for i in range(len(temp)):
var = temp[i]
temp[i] = var[3:]
@@ -84,42 +86,92 @@ def edits1(word, alphabet):
uppercases = [a + b[0].upper() + b[1:] for a, b in splits if b]
all_lowercase = [word[:].lower()]
one_uppercase = [
- a[:].lower() + b[0].upper() + b[1:].lower() for a, b in splits if b]
+ a[:].lower() + b[0].upper() + b[1:].lower() for a, b in splits if b
+ ]
return set(
- deletes + transposes + replaces + inserts + lowercases + uppercases +
- all_lowercase + one_uppercase)
+ deletes
+ + transposes
+ + replaces
+ + inserts
+ + lowercases
+ + uppercases
+ + all_lowercase
+ + one_uppercase
+ )
def known_edits2(word, NWORDS, alphabet):
- return set(e2 for e1 in edits1(word, alphabet)
- for e2 in edits1(e1, alphabet) if e2 in NWORDS)
+ return {
+ e2
+ for e1 in edits1(word, alphabet)
+ for e2 in edits1(e1, alphabet)
+ if e2 in NWORDS
+ }
def known(words, NWORDS):
- return set(w for w in words if w in NWORDS)
+ return {w for w in words if w in NWORDS}
def itkcorrect(word, NWORDS, alphabet):
candidates = (
- known([word], NWORDS) or
- known(edits1(word, alphabet), NWORDS) or
- known_edits2(word, NWORDS, alphabet) or [word])
+ known([word], NWORDS)
+ or known(edits1(word, alphabet), NWORDS)
+ or known_edits2(word, NWORDS, alphabet)
+ or [word]
+ )
return max(candidates, key=NWORDS.get)
def space_out_camel_case(s):
- return re.sub('((?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z]))', ' ', s).strip()
-
-def itk_abbreviations(word,**kwargs):
- if word.upper() in ('ITK','VTK','RGB','VTP','FFT','FEM','TIFF','GMM','EM',
- 'CV','GPU','BMP','CSV','DCMTK','GDCM','GE','GIPL','HDF5',
- 'IPL','JPEG','JPEG2000','LSM','BYU','MINC','MRC','NIFTI',
- 'NRRD','REC','PNG','RAW','XML','RTK','DICOM','2D','3D','IO'):
+ return re.sub("((?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z]))", " ", s).strip()
+
+
+def itk_abbreviations(word, **kwargs):
+ if word.upper() in (
+ "ITK",
+ "VTK",
+ "RGB",
+ "VTP",
+ "FFT",
+ "FEM",
+ "TIFF",
+ "GMM",
+ "EM",
+ "CV",
+ "GPU",
+ "BMP",
+ "CSV",
+ "DCMTK",
+ "GDCM",
+ "GE",
+ "GIPL",
+ "HDF5",
+ "IPL",
+ "JPEG",
+ "JPEG2000",
+ "LSM",
+ "BYU",
+ "MINC",
+ "MRC",
+ "NIFTI",
+ "NRRD",
+ "REC",
+ "PNG",
+ "RAW",
+ "XML",
+ "RTK",
+ "DICOM",
+ "2D",
+ "3D",
+ "IO",
+ ):
return word.upper()
+
def get_group_and_module_from_class_name(itk_src, class_name):
- """ Get the ITK group and module a class belongs to.
+ """Get the ITK group and module a class belongs to.
Parameters
----------
@@ -134,21 +186,21 @@ def get_group_and_module_from_class_name(itk_src, class_name):
found, and the ITK group and module names found.
"""
- cmakefile = pjoin(itk_src, 'CMake', 'UseITK.cmake')
+ cmakefile = pjoin(itk_src, "CMake", "UseITK.cmake")
result = dict()
- result['bool'] = False
+ result["bool"] = False
if class_name is None:
return result
if not os.path.exists(cmakefile):
- print('Error: wrong path')
+ print("Error: wrong path")
else:
- path = ''
+ path = ""
- for root, dirs, files in os.walk(pjoin(itk_src, 'Modules')):
+ for root, dirs, files in os.walk(pjoin(itk_src, "Modules")):
for f in files:
- if f == 'itk' + class_name + '.h':
+ if f == "itk" + class_name + ".h":
path = root
if len(path) != 0:
@@ -156,12 +208,12 @@ def get_group_and_module_from_class_name(itk_src, class_name):
temp = path.split(os.path.sep)
depth = len(temp)
- result['Module'] = temp[depth - 2]
- result['Group'] = temp[depth - 3]
- result['bool'] = True
+ result["Module"] = temp[depth - 2]
+ result["Group"] = temp[depth - 3]
+ result["bool"] = True
else:
- print('Error: This class is not part of ITK: {}'.format(class_name))
+ print(f"Error: This class is not part of ITK: {class_name}")
return result
@@ -169,28 +221,31 @@ def get_group_and_module_from_class_name(itk_src, class_name):
def main():
parser = argparse.ArgumentParser(
- description='Script to add a new example to the ITKSphinxExamples.')
+ description="Script to add a new example to the ITKSphinxExamples."
+ )
args = parser.parse_args()
# Collect directories
# If no `ITK` directory is present in the ITKSphinxExamples build directory,
# ITKSphinxExamples was not configured using the Superbuild functionality.
- itk_examples_binary_dir = os.path.abspath('@ITKSphinxExamples_BINARY_DIR@')
+ itk_examples_binary_dir = os.path.abspath("@ITKSphinxExamples_BINARY_DIR@")
itk_examples_build_dir = os.path.abspath(pjoin(itk_examples_binary_dir, os.pardir))
- itk_superbuild_dir = pjoin(itk_examples_build_dir, 'ITK')
+ itk_superbuild_dir = pjoin(itk_examples_build_dir, "ITK")
if not os.path.isdir(itk_superbuild_dir):
# try to see if the ITK directory was setup manually and get the ITK directory from there:
- itk_dir = os.path.abspath('@ITK_CMAKE_DIR@')
+ itk_dir = os.path.abspath("@ITK_CMAKE_DIR@")
if not os.path.isdir(itk_dir):
- print('Error: ITKSphinxExamples must be configured using the Superbuild'
- 'functionality to use this script or set ITK_DIR in cmake.')
+ print(
+ "Error: ITKSphinxExamples must be configured using the Superbuild"
+ "functionality to use this script or set ITK_DIR in cmake."
+ )
sys.exit()
itk_src = os.path.dirname(itk_dir)
else:
itk_src = itk_superbuild_dir
- itk_examples_root_dir = os.path.abspath('@ITKSphinxExamples_SOURCE_DIR@')
+ itk_examples_root_dir = os.path.abspath("@ITKSphinxExamples_SOURCE_DIR@")
itk_examples_src = pjoin(itk_examples_root_dir, "src")
default_class_name = "MyClassName"
@@ -198,43 +253,51 @@ def main():
default_synopsis = "MySynopsis"
# Prompt user for appropriate cookiecutter template variable values
- class_name = get_input("class_name [" + default_class_name + "]: ")\
- or default_class_name
- example_name = get_input("example_name [" + default_example_name + "]: ")\
- or default_example_name
- example_title = titlecase(space_out_camel_case(example_name), callback=itk_abbreviations)
- example_synopsis = get_input("example_synopsis [" + default_synopsis + "]: ")\
- or default_synopsis
+ class_name = (
+ get_input("class_name [" + default_class_name + "]: ") or default_class_name
+ )
+ example_name = (
+ get_input("example_name [" + default_example_name + "]: ")
+ or default_example_name
+ )
+ example_title = titlecase(
+ space_out_camel_case(example_name), callback=itk_abbreviations
+ )
+ example_synopsis = (
+ get_input("example_synopsis [" + default_synopsis + "]: ") or default_synopsis
+ )
# Find the ITK module and group name
itk_headers = write_all_itk_headers(itk_src)
NWORDS = train(words(itk_headers.getvalue()))
- alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+ alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
temp_res = dict()
- temp_res['bool'] = False
+ temp_res["bool"] = False
temp_res = get_group_and_module_from_class_name(itk_src, class_name)
- while not temp_res['bool']:
+ while not temp_res["bool"]:
class_name = get_input("Please enter an ITK class name: ")
class_name = itkcorrect(class_name, NWORDS, alphabet)
- temp_res = get_group_and_module_from_class_name(
- itk_src, class_name)
+ temp_res = get_group_and_module_from_class_name(itk_src, class_name)
- group_name = temp_res['Group']
- module_name = temp_res['Module']
+ group_name = temp_res["Group"]
+ module_name = temp_res["Module"]
- print('Found the following group and module for the provided class: {}'
- .format(class_name))
- print('Group name: {}'.format(group_name))
- print('Module name: {}'.format(module_name))
+ print(
+ "Found the following group and module for the provided class: {}".format(
+ class_name
+ )
+ )
+ print(f"Group name: {group_name}")
+ print(f"Module name: {module_name}")
- cookiecutter_dir = pjoin(os.path.abspath(os.path.dirname(__file__)), 'CookieCutter')
- cookiecutter_json = pjoin(cookiecutter_dir, 'cookiecutter.json')
+ cookiecutter_dir = pjoin(os.path.abspath(os.path.dirname(__file__)), "CookieCutter")
+ cookiecutter_json = pjoin(cookiecutter_dir, "cookiecutter.json")
data = dict()
data["class_name"] = class_name
@@ -247,8 +310,8 @@ def main():
data["itk_examples_src"] = itk_examples_src
if cookiecutter_json:
- with open(cookiecutter_json, 'w') as f:
- json.dump(data, f)
+ with open(cookiecutter_json, "w") as f:
+ json.dump(data, f)
# Call the cookiecutter
cookiecutter(cookiecutter_dir, no_input=True)
@@ -257,5 +320,5 @@ def main():
os.remove(cookiecutter_json)
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/Utilities/DocumentationTarball.py b/Utilities/DocumentationTarball.py
index 86deb613e..893851f0b 100755
--- a/Utilities/DocumentationTarball.py
+++ b/Utilities/DocumentationTarball.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-""" Build a .tar.gz and .zip for the given input directory and output prefix.
+"""Build a .tar.gz and .zip for the given input directory and output prefix.
The basename of the output prefix is used at the top level of the tarball
instead of the input directory.
@@ -22,7 +22,7 @@
import zipfile
if len(sys.argv) != 3:
- print('usage: ' + sys.argv[0] + ' input_directory output_prefix')
+ print("usage: " + sys.argv[0] + " input_directory output_prefix")
sys.exit(1)
input_dir = sys.argv[1]
@@ -30,28 +30,32 @@
tarball_top_dir = os.path.basename(output_prefix)
-output_tar = tarball_top_dir + '.tar.gz'
-output_zip = tarball_top_dir + '.zip'
+output_tar = tarball_top_dir + ".tar.gz"
+output_zip = tarball_top_dir + ".zip"
output_dir = os.path.dirname(output_prefix)
-output_download_tar = os.path.join(output_dir, 'html', 'Documentation', 'Download', output_tar)
-output_download_zip = os.path.join(output_dir, 'html', 'Documentation', 'Download', output_zip)
+output_download_tar = os.path.join(
+ output_dir, "html", "Documentation", "Download", output_tar
+)
+output_download_zip = os.path.join(
+ output_dir, "html", "Documentation", "Download", output_zip
+)
# Remove old tarballs.
if os.path.exists(output_download_tar):
os.remove(output_download_tar)
os.remove(output_download_zip)
-with tarfile.open(output_prefix + '.tar.gz', 'w:gz', dereference=True) as tar:
+with tarfile.open(output_prefix + ".tar.gz", "w:gz", dereference=True) as tar:
for path in os.listdir(input_dir):
tar.add(path, arcname=os.path.join(tarball_top_dir, path))
-with zipfile.ZipFile(output_prefix + '.zip', 'w') as zip:
+with zipfile.ZipFile(output_prefix + ".zip", "w") as zip:
for path, dirs, files in os.walk(input_dir):
for fname in files:
name = os.path.join(path, fname)
- arcname = os.path.join(tarball_top_dir, name[len(input_dir)+1:])
+ arcname = os.path.join(tarball_top_dir, name[len(input_dir) + 1 :])
zip.write(name, arcname)
# Copy to the html Download directory.
-shutil.copyfile(output_prefix + '.tar.gz', output_download_tar)
-shutil.copyfile(output_prefix + '.zip', output_download_zip)
+shutil.copyfile(output_prefix + ".tar.gz", output_download_tar)
+shutil.copyfile(output_prefix + ".zip", output_download_zip)
diff --git a/Utilities/GUnzip.py b/Utilities/GUnzip.py
index 017447cd3..90303aea6 100644
--- a/Utilities/GUnzip.py
+++ b/Utilities/GUnzip.py
@@ -2,9 +2,9 @@
import gzip
import sys
-input = gzip.open(sys.argv[1], 'rb')
+input = gzip.open(sys.argv[1], "rb")
content = input.read()
input.close()
-output = open(sys.argv[1][:-3], 'wb')
+output = open(sys.argv[1][:-3], "wb")
output.write(content)
output.close()
diff --git a/Utilities/Visualization/VTKPolyData.py b/Utilities/Visualization/VTKPolyData.py
index 22c6728e5..72ca1ba72 100755
--- a/Utilities/Visualization/VTKPolyData.py
+++ b/Utilities/Visualization/VTKPolyData.py
@@ -14,33 +14,47 @@
def three_floats(value):
- values = value[1:-1].split(',')
+ values = value[1:-1].split(",")
if len(values) != 3:
raise argparse.ArgumentError
return map(float, values)
def two_floats(value):
- values = value[1:-1].split(',')
+ values = value[1:-1].split(",")
if len(values) != 2:
raise argparse.ArgumentError
return map(float, values)
+
+
parser = argparse.ArgumentParser(description=__doc__)
-parser.add_argument('inputFile', help='.vtk PolyData input')
-parser.add_argument('--position', help='Camera Position',
- type=three_floats, metavar=('x,y,z'))
-parser.add_argument('--focal-point', help='Camera FocalPoint',
- type=three_floats, metavar=('x,y,z'))
-parser.add_argument('--view-up', help='Camera ViewUp',
- type=three_floats, metavar=('x,y,z'))
-parser.add_argument('--size', help='Window size in pixels',
- type=int, metavar=('width', 'height'), nargs=2)
-parser.add_argument('--clipping-range', help='Window size in pixels',
- type=two_floats, metavar=('near,far'))
-parser.add_argument('--png', help='Output PNG file',
- metavar='file.png')
-parser.add_argument('--webgl', help='File prefix for WebGL output',
- metavar='webglFilePrefix')
+parser.add_argument("inputFile", help=".vtk PolyData input")
+parser.add_argument(
+ "--position", help="Camera Position", type=three_floats, metavar=("x,y,z")
+)
+parser.add_argument(
+ "--focal-point", help="Camera FocalPoint", type=three_floats, metavar=("x,y,z")
+)
+parser.add_argument(
+ "--view-up", help="Camera ViewUp", type=three_floats, metavar=("x,y,z")
+)
+parser.add_argument(
+ "--size",
+ help="Window size in pixels",
+ type=int,
+ metavar=("width", "height"),
+ nargs=2,
+)
+parser.add_argument(
+ "--clipping-range",
+ help="Window size in pixels",
+ type=two_floats,
+ metavar=("near,far"),
+)
+parser.add_argument("--png", help="Output PNG file", metavar="file.png")
+parser.add_argument(
+ "--webgl", help="File prefix for WebGL output", metavar="webglFilePrefix"
+)
args = parser.parse_args()
reader = vtk.vtkPolyDataReader()
@@ -81,26 +95,29 @@ def two_floats(value):
def print_camera_position(interactor, event):
def cmd_line_friendly(xyz):
- return '[{0:+8.4e},{1:+8.4e},{2:+8.4e}]'.format(*xyz)
+ return "[{:+8.4e},{:+8.4e},{:+8.4e}]".format(*xyz)
def cmd_line_friendly2(clip_range):
- return '[{0:+8.4e},{1:+8.4e}]'.format(*clip_range)
- if interactor.GetKeySym() == 'c':
- print('\nPosition: ' + cmd_line_friendly(camera.GetPosition()))
- print('FocalPoint: ' + cmd_line_friendly(camera.GetFocalPoint()))
- print('ViewUp: ' + cmd_line_friendly(camera.GetViewUp()))
- print('ClippingRange:' + cmd_line_friendly2(camera.GetClippingRange()))
- sys.stdout.write('\n--position ')
+ return "[{:+8.4e},{:+8.4e}]".format(*clip_range)
+
+ if interactor.GetKeySym() == "c":
+ print("\nPosition: " + cmd_line_friendly(camera.GetPosition()))
+ print("FocalPoint: " + cmd_line_friendly(camera.GetFocalPoint()))
+ print("ViewUp: " + cmd_line_friendly(camera.GetViewUp()))
+ print("ClippingRange:" + cmd_line_friendly2(camera.GetClippingRange()))
+ sys.stdout.write("\n--position ")
sys.stdout.write(cmd_line_friendly(camera.GetPosition()))
- sys.stdout.write(' --focal-point ')
+ sys.stdout.write(" --focal-point ")
sys.stdout.write(cmd_line_friendly(camera.GetFocalPoint()))
- sys.stdout.write(' --view-up ')
+ sys.stdout.write(" --view-up ")
sys.stdout.write(cmd_line_friendly(camera.GetViewUp()))
- sys.stdout.write(' --clipping-range ')
+ sys.stdout.write(" --clipping-range ")
sys.stdout.write(cmd_line_friendly2(camera.GetClippingRange()))
- sys.stdout.write('\n')
+ sys.stdout.write("\n")
sys.stdout.flush()
-render_window_interactor.AddObserver('KeyPressEvent', print_camera_position)
+
+
+render_window_interactor.AddObserver("KeyPressEvent", print_camera_position)
if args.position:
camera.SetPosition(args.position)
diff --git a/src/Bridge/NumPy/ConvertNumPyArrayToitkImage/ConvertNumPyArrayToitkImage.ipynb b/src/Bridge/NumPy/ConvertNumPyArrayToitkImage/ConvertNumPyArrayToitkImage.ipynb
index cbff1e7ad..ed2be7e41 100644
--- a/src/Bridge/NumPy/ConvertNumPyArrayToitkImage/ConvertNumPyArrayToitkImage.ipynb
+++ b/src/Bridge/NumPy/ConvertNumPyArrayToitkImage/ConvertNumPyArrayToitkImage.ipynb
@@ -12,9 +12,16 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"id": "25e89adb",
- "metadata": {},
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-12T08:42:58.981048Z",
+ "iopub.status.busy": "2026-06-12T08:42:58.980624Z",
+ "iopub.status.idle": "2026-06-12T08:43:01.371023Z",
+ "shell.execute_reply": "2026-06-12T08:43:01.370621Z"
+ }
+ },
"outputs": [],
"source": [
"import os\n",
@@ -30,9 +37,16 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "7cdd2254",
- "metadata": {},
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-12T08:43:01.373192Z",
+ "iopub.status.busy": "2026-06-12T08:43:01.373030Z",
+ "iopub.status.idle": "2026-06-12T08:43:01.647220Z",
+ "shell.execute_reply": "2026-06-12T08:43:01.646315Z"
+ }
+ },
"outputs": [],
"source": [
"input_image_path = \"Slicer.png\"\n",
@@ -44,10 +58,39 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"id": "edf8512f",
- "metadata": {},
- "outputs": [],
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-12T08:43:01.649965Z",
+ "iopub.status.busy": "2026-06-12T08:43:01.649784Z",
+ "iopub.status.idle": "2026-06-12T08:43:09.842645Z",
+ "shell.execute_reply": "2026-06-12T08:43:09.842200Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ITK image size = itkSize2 ([221, 257])\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "7574ea4094e0438ca2bacc49f7756c7d",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Viewer(geometries=[], gradient_opacity=0.22, point_sets=[], rendered_image="
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"array = itk.GetArrayFromImage(itk_image, ttype=ImageType)\n",
"print(f'Array size = {array.shape}')\n",
@@ -77,10 +155,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "4efdcf7d",
- "metadata": {},
- "outputs": [],
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-12T08:43:10.052930Z",
+ "iopub.status.busy": "2026-06-12T08:43:10.052677Z",
+ "iopub.status.idle": "2026-06-12T08:43:10.056750Z",
+ "shell.execute_reply": "2026-06-12T08:43:10.055808Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Size = itkSize2 ([221, 257])\n"
+ ]
+ }
+ ],
"source": [
"itk_image_convert = itk.GetImageFromArray(np.ascontiguousarray(array))\n",
"region = itk_image_convert.GetLargestPossibleRegion()\n",
@@ -113,7 +206,289 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.12"
+ "version": "3.12.10"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "state": {
+ "7574ea4094e0438ca2bacc49f7756c7d": {
+ "buffers": [
+ {
+ "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga0AAAAAAABBwQAAAAAAAAAAA",
+ "encoding": "base64",
+ "path": [
+ "_largest_roi",
+ "buffer"
+ ]
+ },
+ {
+ "data": "AQEB",
+ "encoding": "base64",
+ "path": [
+ "_scale_factors",
+ "buffer"
+ ]
+ },
+ {
+ "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "encoding": "base64",
+ "path": [
+ "camera",
+ "buffer"
+ ]
+ },
+ {
+ "data": "",
+ "encoding": "base64",
+ "path": [
+ "geometry_colors",
+ "buffer"
+ ]
+ },
+ {
+ "data": "",
+ "encoding": "base64",
+ "path": [
+ "geometry_opacities",
+ "buffer"
+ ]
+ },
+ {
+ "data": "",
+ "encoding": "base64",
+ "path": [
+ "point_set_colors",
+ "buffer"
+ ]
+ },
+ {
+ "data": "",
+ "encoding": "base64",
+ "path": [
+ "point_set_opacities",
+ "buffer"
+ ]
+ },
+ {
+ "data": "",
+ "encoding": "base64",
+ "path": [
+ "point_set_sizes",
+ "buffer"
+ ]
+ },
+ {
+ "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga0AAAAAAABBwQAAAAAAAAAAA",
+ "encoding": "base64",
+ "path": [
+ "roi",
+ "buffer"
+ ]
+ },
+ {
+ "data": "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",
+ "encoding": "base64",
+ "path": [
+ "rendered_image",
+ "compressedData"
+ ]
+ }
+ ],
+ "model_module": "itkwidgets",
+ "model_module_version": "^0.32.6",
+ "model_name": "ViewerModel",
+ "state": {
+ "_custom_cmap": null,
+ "_dom_classes": [],
+ "_downsampling": false,
+ "_largest_roi": {
+ "dtype": "float64",
+ "shape": [
+ 2,
+ 3
+ ]
+ },
+ "_model_module": "itkwidgets",
+ "_model_module_version": "^0.32.6",
+ "_model_name": "ViewerModel",
+ "_rendering_image": true,
+ "_reset_crop_requested": false,
+ "_scale_factors": {
+ "dtype": "uint8",
+ "shape": [
+ 3
+ ]
+ },
+ "_view_count": null,
+ "_view_module": "itkwidgets",
+ "_view_module_version": "^0.32.6",
+ "_view_name": "ViewerView",
+ "annotations": true,
+ "axes": false,
+ "background": [],
+ "blend_mode": "composite",
+ "camera": {
+ "dtype": "float32",
+ "shape": [
+ 3,
+ 3
+ ]
+ },
+ "channels": null,
+ "clicked_slice_point": null,
+ "cmap": null,
+ "geometries": [],
+ "geometry_colors": {
+ "dtype": "float32",
+ "shape": [
+ 0,
+ 3
+ ]
+ },
+ "geometry_opacities": {
+ "dtype": "float32",
+ "shape": [
+ 0
+ ]
+ },
+ "gradient_opacity": 0.22,
+ "interpolation": true,
+ "label_image_blend": 0.5,
+ "label_image_names": null,
+ "label_image_weights": null,
+ "layout": "IPY_MODEL_e78d178dc09446af95cba7e05b8aee8e",
+ "lut": "glasbey",
+ "mode": "v",
+ "opacity_gaussians": null,
+ "point_set_colors": {
+ "dtype": "float32",
+ "shape": [
+ 0,
+ 3
+ ]
+ },
+ "point_set_opacities": {
+ "dtype": "float32",
+ "shape": [
+ 0
+ ]
+ },
+ "point_set_representations": [],
+ "point_set_sizes": {
+ "dtype": "uint8",
+ "shape": [
+ 0
+ ]
+ },
+ "point_sets": [],
+ "rendered_image": {
+ "direction": {
+ "columns": 2,
+ "data": [
+ 1.0,
+ 0.0,
+ 0.0,
+ 1.0
+ ],
+ "rows": 2
+ },
+ "imageType": {
+ "componentType": "uint8_t",
+ "components": 1,
+ "dimension": 2,
+ "pixelType": 1
+ },
+ "origin": [
+ 0.0,
+ 0.0
+ ],
+ "size": [
+ 221,
+ 257
+ ],
+ "spacing": [
+ 1.0,
+ 1.0
+ ]
+ },
+ "rendered_label_image": null,
+ "roi": {
+ "dtype": "float64",
+ "shape": [
+ 2,
+ 3
+ ]
+ },
+ "rotate": false,
+ "sample_distance": 0.25,
+ "select_roi": false,
+ "shadow": true,
+ "slicing_planes": false,
+ "ui_collapsed": true,
+ "units": "",
+ "vmax": null,
+ "vmin": null,
+ "x_slice": null,
+ "y_slice": null,
+ "z_slice": null
+ }
+ },
+ "e78d178dc09446af95cba7e05b8aee8e": {
+ "model_module": "@jupyter-widgets/base",
+ "model_module_version": "1.2.0",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
+ }
+ },
+ "version_major": 2,
+ "version_minor": 0
+ }
}
},
"nbformat": 4,
diff --git a/src/Bridge/VtkGlue/VTKImageToITKImage/CMakeLists.txt b/src/Bridge/VtkGlue/VTKImageToITKImage/CMakeLists.txt
index a3f4979fb..525080073 100644
--- a/src/Bridge/VtkGlue/VTKImageToITKImage/CMakeLists.txt
+++ b/src/Bridge/VtkGlue/VTKImageToITKImage/CMakeLists.txt
@@ -45,4 +45,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME VTKImageToITKImageTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} Gourds.png)
-
diff --git a/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/FilterImageRegion.png.cid b/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/FilterImageRegion.png.cid
index 368017d9a..bccc9a132 100644
--- a/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/FilterImageRegion.png.cid
+++ b/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/FilterImageRegion.png.cid
@@ -1 +1 @@
-bafkreie4uitslnavl6u3s4w62gkz6r3wssoctdav7zaqmrt4xfasouf6f4
+bafkreigr6n4hinf6almoyfihuxk77lqeystehrlr7rmrdvvpydpraray54
diff --git a/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/Relationship.png.cid b/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/Relationship.png.cid
index f514bab4a..8d744d0bc 100644
--- a/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/Relationship.png.cid
+++ b/src/Core/Common/ApplyAFilterOnlyToASpecifiedRegionOfAnImage/Relationship.png.cid
@@ -1 +1 @@
-bafkreiaffqu7nnoby6ix5o3pg5eiucj7ofsxx3wnij4r2kugbdy4jhvuia
+bafkreibyxjcephwjj37w7lftdikdpvwnfpk6ddhx43nn7hvjutekhwir7e
diff --git a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Documentation.rst b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Documentation.rst
index 7f21cc854..bb811a875 100644
--- a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Documentation.rst
+++ b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Documentation.rst
@@ -15,9 +15,9 @@ Apply a custom operation to each pixel in an image.
:alt: Relationship.png
-.. figure:: Operator.png
+.. figure:: Operation.png
:scale: 70%
- :alt: Operator.png
+ :alt: Operation.png
pixel-wise operation on 2D vector image.
diff --git a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Operation.png.cid b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Operation.png.cid
index 80ba26c10..2a9744c19 100644
--- a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Operation.png.cid
+++ b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Operation.png.cid
@@ -1 +1 @@
-bafkreig3f4d5hwfz2wzmy56o6tc5mb3ljd6jmtsjoruxqfchlz5yv6ixuy
+bafkreiekhuy5b6ymfj5edahs3ncdjjxpymrtnfl5whvyg3n5qz6bs4pbea
diff --git a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Relationship.png.cid b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Relationship.png.cid
index c63c58fca..e35d793b3 100644
--- a/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Relationship.png.cid
+++ b/src/Core/Common/ApplyCustomOperationToEachPixelInImage/Relationship.png.cid
@@ -1 +1 @@
-bafkreihasqn5hlzyvlxkjqjfv5tupvvyixfiknai2puytootv523dd3tcq
+bafkreif42v622rgfhpb2dm3tn6nqmdvc3bhdhx7zo2z4jrrk2c5lknjfti
diff --git a/src/Core/Common/BoundingBoxOfAPointSet/BoundingBox.png.cid b/src/Core/Common/BoundingBoxOfAPointSet/BoundingBox.png.cid
index 53b99de10..c3dad8820 100644
--- a/src/Core/Common/BoundingBoxOfAPointSet/BoundingBox.png.cid
+++ b/src/Core/Common/BoundingBoxOfAPointSet/BoundingBox.png.cid
@@ -1 +1 @@
-bafkreickdblw4cjduumqnb7gn3wtsjshvqrvezh3k7krz657xsosvur2ry
+bafkreidhk57tyxtuiecfspgpm57zhtyxvo2zsxhd76py3fzt6d7ivr7jd4
diff --git a/src/Core/Common/BresenhamLine/Operation.png.cid b/src/Core/Common/BresenhamLine/Operation.png.cid
index ee78fdfeb..8aa1f06ac 100644
--- a/src/Core/Common/BresenhamLine/Operation.png.cid
+++ b/src/Core/Common/BresenhamLine/Operation.png.cid
@@ -1 +1 @@
-bafkreia4xxrlmsbcivkpdtl2ja2mskpuuaht43rmmrt2j3qjqp5ymsf2v4
+bafkreifgp5rnawpvq4lkjd6cngubwwcjy7hdbrr4h3lifriyk2t7n3nzbi
diff --git a/src/Core/Common/BresenhamLine/Segmentation.png.cid b/src/Core/Common/BresenhamLine/Segmentation.png.cid
index e0758afcb..c44408b2f 100644
--- a/src/Core/Common/BresenhamLine/Segmentation.png.cid
+++ b/src/Core/Common/BresenhamLine/Segmentation.png.cid
@@ -1 +1 @@
-bafkreihi6qoq7pqyqf3defuwz7ntxspjurtywy73iba4eyaaqgfm6lmbg4
+bafkreie5puikhxxdz2ng7ar6czjqfus6wvtvx65ew644d7oklgf3klhii4
diff --git a/src/Core/Common/ConvertArrayToImage/Relationship.png.cid b/src/Core/Common/ConvertArrayToImage/Relationship.png.cid
index e6342c042..cc73a528f 100644
--- a/src/Core/Common/ConvertArrayToImage/Relationship.png.cid
+++ b/src/Core/Common/ConvertArrayToImage/Relationship.png.cid
@@ -1 +1 @@
-bafkreihcn43nd4b5dthz4yrq77tyjjfelpvzzmiutnm2slpaznnrscowoq
+bafkreihumtkldoks4bwxcmbzvinys3kcstlr5ax74d52o5ccio6m5zsgrm
diff --git a/src/Core/Common/ConvertArrayToImage/Sphere.png.cid b/src/Core/Common/ConvertArrayToImage/Sphere.png.cid
index b64c9cdca..c1aa74286 100644
--- a/src/Core/Common/ConvertArrayToImage/Sphere.png.cid
+++ b/src/Core/Common/ConvertArrayToImage/Sphere.png.cid
@@ -1 +1 @@
-bafkreifj3dfi57rvwruuvk5ycftmobp2p5mdho7qpi7x7ykuujbkzb2lca
+bafkreifgxm4kvz36l36qtu6pnecm22yb3ghswwbpvbfk4c67xyijbkxfva
diff --git a/src/Core/Common/ConvertArrayToImage/Sphere3D.png.cid b/src/Core/Common/ConvertArrayToImage/Sphere3D.png.cid
index f7b8bcb3f..6d96ca016 100644
--- a/src/Core/Common/ConvertArrayToImage/Sphere3D.png.cid
+++ b/src/Core/Common/ConvertArrayToImage/Sphere3D.png.cid
@@ -1 +1 @@
-bafkreid3uloy2yfjqggy5d46aghpb4b5v3q2xaqylkg2uoqsuqc5dh4s7q
+bafkreideyzfcs5tf6c7puc6kubsbmzh3houvqycjpmknjeybw7cjzqox6y
diff --git a/src/Core/Common/CreateAnotherInstanceOfAnImage/CMakeLists.txt b/src/Core/Common/CreateAnotherInstanceOfAnImage/CMakeLists.txt
index 286bcd0b6..72e631e28 100644
--- a/src/Core/Common/CreateAnotherInstanceOfAnImage/CMakeLists.txt
+++ b/src/Core/Common/CreateAnotherInstanceOfAnImage/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME CreateAnotherInstanceOfAnImageTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/CreateDerivativeKernel/DerivativeKernel.png.cid b/src/Core/Common/CreateDerivativeKernel/DerivativeKernel.png.cid
index 6b18120dc..769f183a1 100644
--- a/src/Core/Common/CreateDerivativeKernel/DerivativeKernel.png.cid
+++ b/src/Core/Common/CreateDerivativeKernel/DerivativeKernel.png.cid
@@ -1 +1 @@
-bafkreigdntizd2xiqvwywb6vab4wwbxcozlm4yghjkoc7dzugzipvhudne
+bafkreifsa2jo72j4il7ozazxz54r3uhltqnowpwhhrdjsqckm57c3mrag4
diff --git a/src/Core/Common/CreateDerivativeKernel/DerivativeOperator.png.cid b/src/Core/Common/CreateDerivativeKernel/DerivativeOperator.png.cid
index 662353c50..89086f097 100644
--- a/src/Core/Common/CreateDerivativeKernel/DerivativeOperator.png.cid
+++ b/src/Core/Common/CreateDerivativeKernel/DerivativeOperator.png.cid
@@ -1 +1 @@
-bafkreibohzttygqnnh25zror2z5vlhypmwtvfgyvqrfebhcxvme7mehbvy
+bafkreig25mzui7zx2igtvhh4ftlxexhrkgrvwdv5nybxhuoxtklilrbwhu
diff --git a/src/Core/Common/CreateGaussianKernel/GaussianBlur.png.cid b/src/Core/Common/CreateGaussianKernel/GaussianBlur.png.cid
index 283fcc64f..70d2bde9a 100644
--- a/src/Core/Common/CreateGaussianKernel/GaussianBlur.png.cid
+++ b/src/Core/Common/CreateGaussianKernel/GaussianBlur.png.cid
@@ -1 +1 @@
-bafkreifsacuklxb4nc4zo3g3dug7xvsf4kcpt5oosguhcngq5pysgqgnia
+bafkreihdheuit2ay3xbodmnr7vftdkf6wa772e5fifimnvfxqlykrgxl6e
diff --git a/src/Core/Common/CreateGaussianKernel/GaussianKernel.png.cid b/src/Core/Common/CreateGaussianKernel/GaussianKernel.png.cid
index 9e78cd2b0..ee45adc0f 100644
--- a/src/Core/Common/CreateGaussianKernel/GaussianKernel.png.cid
+++ b/src/Core/Common/CreateGaussianKernel/GaussianKernel.png.cid
@@ -1 +1 @@
-bafkreidlnhsxjw7ivecwinizozzrss54z3hoezddflwcwfag2f7gqjqxgm
+bafkreib6jvmimlki4zyj5t5jwktiarywvc6ysjotmdb47swpsuyng6ozda
diff --git a/src/Core/Common/CreateSobelKernel/CMakeLists.txt b/src/Core/Common/CreateSobelKernel/CMakeLists.txt
index 1966de003..36b6a59eb 100644
--- a/src/Core/Common/CreateSobelKernel/CMakeLists.txt
+++ b/src/Core/Common/CreateSobelKernel/CMakeLists.txt
@@ -29,4 +29,3 @@ if(ITK_WRAP_PYTHON)
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Code.py
)
endif()
-
diff --git a/src/Core/Common/CreateVectorImage/CMakeLists.txt b/src/Core/Common/CreateVectorImage/CMakeLists.txt
index d9f118a7d..09950ed94 100644
--- a/src/Core/Common/CreateVectorImage/CMakeLists.txt
+++ b/src/Core/Common/CreateVectorImage/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME CreateVectorImageTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/CreateVectorImage/Operation.png.cid b/src/Core/Common/CreateVectorImage/Operation.png.cid
index 2a4ee18e4..aff639416 100644
--- a/src/Core/Common/CreateVectorImage/Operation.png.cid
+++ b/src/Core/Common/CreateVectorImage/Operation.png.cid
@@ -1 +1 @@
-bafkreiefasljtdb5w2lpiw3kptqknfqdngzgq6waff2ims43wwsapnjnba
+bafkreifsrpkcchoy6q2qxnba7ughs2oipolrwfsz3pnohpf2splmmzyvmi
diff --git a/src/Core/Common/CropImageBySpecifyingRegion/3DVolume.png.cid b/src/Core/Common/CropImageBySpecifyingRegion/3DVolume.png.cid
index e18566aa7..a137f769c 100644
--- a/src/Core/Common/CropImageBySpecifyingRegion/3DVolume.png.cid
+++ b/src/Core/Common/CropImageBySpecifyingRegion/3DVolume.png.cid
@@ -1 +1 @@
-bafkreihtmliqoydru3yo5sbxsddu4sq4hkt6q5e6tnrawz4vbtqrjtwama
+bafkreia5i3pe7lwk3cdkrp4xoan5zd32zvfolo5fo7nxup5ozluerwjlem
diff --git a/src/Core/Common/CropImageBySpecifyingRegion/ExtractedSlice.png.cid b/src/Core/Common/CropImageBySpecifyingRegion/ExtractedSlice.png.cid
index e795b0b78..91feb5657 100644
--- a/src/Core/Common/CropImageBySpecifyingRegion/ExtractedSlice.png.cid
+++ b/src/Core/Common/CropImageBySpecifyingRegion/ExtractedSlice.png.cid
@@ -1 +1 @@
-bafkreihbzuilqqwwwoyfhhmke6vb5fby2llly3rmtujmbfujdl2qr3obvu
+bafkreiaukoe4ixr45mwg7u6hjyaqmzwlxxwcdl4r33mqgodt55ru6dlnuy
diff --git a/src/Core/Common/DirectWarningToFile/CMakeLists.txt b/src/Core/Common/DirectWarningToFile/CMakeLists.txt
index af185a9f3..cd40f8802 100644
--- a/src/Core/Common/DirectWarningToFile/CMakeLists.txt
+++ b/src/Core/Common/DirectWarningToFile/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME DirectWarningToFileTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/EagerModuleLoadingPython/Code.py b/src/Core/Common/EagerModuleLoadingPython/Code.py
old mode 100644
new mode 100755
diff --git a/src/Core/Common/FilterAndParallelizeImageRegion/Code.cxx b/src/Core/Common/FilterAndParallelizeImageRegion/Code.cxx
index 8eb3ffce0..3a718d3ca 100644
--- a/src/Core/Common/FilterAndParallelizeImageRegion/Code.cxx
+++ b/src/Core/Common/FilterAndParallelizeImageRegion/Code.cxx
@@ -21,6 +21,7 @@
#include "itkImageDuplicator.h"
#include "itkMultiThreaderBase.h"
#include "itkImageRegionIterator.h"
+#include "itkImageRegionConstIteratorWithIndex.h"
constexpr unsigned int Dimension = 2;
using PixelType = unsigned int;
@@ -102,9 +103,9 @@ main()
log1xViaParallelizeImageRegion(clonedImage);
// compare to make sure the results are the same
- unsigned diffCount = 0;
- itk::ImageRegionConstIterator it1(image, region);
- itk::ImageRegionConstIterator it2(clonedImage, region);
+ unsigned diffCount = 0;
+ itk::ImageRegionConstIteratorWithIndex it1(image, region);
+ itk::ImageRegionConstIterator it2(clonedImage, region);
for (; !it1.IsAtEnd(); ++it1, ++it2)
{
if (it1.Get() != it2.Get())
diff --git a/src/Core/Common/FilterImageUsingMultipleThreads/CMakeLists.txt b/src/Core/Common/FilterImageUsingMultipleThreads/CMakeLists.txt
index d16dc7736..ea927c00c 100644
--- a/src/Core/Common/FilterImageUsingMultipleThreads/CMakeLists.txt
+++ b/src/Core/Common/FilterImageUsingMultipleThreads/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME FilterImageUsingMultipleThreadsTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/FilterImageWithoutCopying/CMakeLists.txt b/src/Core/Common/FilterImageWithoutCopying/CMakeLists.txt
index 5fa9bfbc2..27612c018 100644
--- a/src/Core/Common/FilterImageWithoutCopying/CMakeLists.txt
+++ b/src/Core/Common/FilterImageWithoutCopying/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME FilterImageWithoutCopyingTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/GetOrSetMemberVariableOfITKClass/CMakeLists.txt b/src/Core/Common/GetOrSetMemberVariableOfITKClass/CMakeLists.txt
index 49e26fdba..34c3d77c6 100644
--- a/src/Core/Common/GetOrSetMemberVariableOfITKClass/CMakeLists.txt
+++ b/src/Core/Common/GetOrSetMemberVariableOfITKClass/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME GetOrSetMemberVariableOfITKClassTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/ImageRegionIntersection/ImageRegionIntersection.png.cid b/src/Core/Common/ImageRegionIntersection/ImageRegionIntersection.png.cid
index a2aab4e06..a52e11a7b 100644
--- a/src/Core/Common/ImageRegionIntersection/ImageRegionIntersection.png.cid
+++ b/src/Core/Common/ImageRegionIntersection/ImageRegionIntersection.png.cid
@@ -1 +1 @@
-bafkreih5hkqhoalqpj27vwj7qlq2krgzoxerkgil2ix5ggyh4u5gickawq
+bafkreidvqescwxj2aol6cor3yvkhkwmoif3drjipdltel2kjjkd3qdk3xm
diff --git a/src/Core/Common/ImportPixelBufferIntoAnImage/CMakeLists.txt b/src/Core/Common/ImportPixelBufferIntoAnImage/CMakeLists.txt
index d17a0ce9d..1b8996410 100644
--- a/src/Core/Common/ImportPixelBufferIntoAnImage/CMakeLists.txt
+++ b/src/Core/Common/ImportPixelBufferIntoAnImage/CMakeLists.txt
@@ -14,7 +14,7 @@ install(TARGETS ${PROJECT_NAME}
COMPONENT Runtime
)
-install(FILES Code.cxx CMakeLists.txt
+install(FILES Code.cxx CMakeLists.txt
DESTINATION share/ITKSphinxExamples/Code/Core/Common/ImportPixelBufferIntoAnImage/
COMPONENT Code
)
diff --git a/src/Core/Common/IterateLineThroughImage/CMakeLists.txt b/src/Core/Common/IterateLineThroughImage/CMakeLists.txt
index 5ba6856af..2f58e4400 100644
--- a/src/Core/Common/IterateLineThroughImage/CMakeLists.txt
+++ b/src/Core/Common/IterateLineThroughImage/CMakeLists.txt
@@ -43,4 +43,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME IterateLineThroughImageTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/IterateLineThroughImageWithoutWriteAccess/CMakeLists.txt b/src/Core/Common/IterateLineThroughImageWithoutWriteAccess/CMakeLists.txt
index 10cf1b699..63df7db68 100644
--- a/src/Core/Common/IterateLineThroughImageWithoutWriteAccess/CMakeLists.txt
+++ b/src/Core/Common/IterateLineThroughImageWithoutWriteAccess/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME IterateLineThroughImageWithoutWriteAccessTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/IterateRegionWithAccessToIndexWithoutWriteAccess/CMakeLists.txt b/src/Core/Common/IterateRegionWithAccessToIndexWithoutWriteAccess/CMakeLists.txt
index 1f3cc337c..4293c0560 100644
--- a/src/Core/Common/IterateRegionWithAccessToIndexWithoutWriteAccess/CMakeLists.txt
+++ b/src/Core/Common/IterateRegionWithAccessToIndexWithoutWriteAccess/CMakeLists.txt
@@ -44,4 +44,3 @@ enable_testing()
add_test(NAME IterateRegionWithAccessToIndexWithoutWriteAccessTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}
Yinyang.png)
-
diff --git a/src/Core/Common/IterateRegionWithNeighborhood/CMakeLists.txt b/src/Core/Common/IterateRegionWithNeighborhood/CMakeLists.txt
index 260bfc8d5..fa5bb6865 100644
--- a/src/Core/Common/IterateRegionWithNeighborhood/CMakeLists.txt
+++ b/src/Core/Common/IterateRegionWithNeighborhood/CMakeLists.txt
@@ -44,4 +44,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME IterateRegionWithNeighborhoodTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} Yinyang.png)
-
diff --git a/src/Core/Common/MakeOutOfBoundsPixelsReturnConstValue/CMakeLists.txt b/src/Core/Common/MakeOutOfBoundsPixelsReturnConstValue/CMakeLists.txt
index 187e259ee..6ddbde116 100644
--- a/src/Core/Common/MakeOutOfBoundsPixelsReturnConstValue/CMakeLists.txt
+++ b/src/Core/Common/MakeOutOfBoundsPixelsReturnConstValue/CMakeLists.txt
@@ -46,4 +46,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME MakeOutOfBoundsPixelsReturnConstValueTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/MakePartOfImageTransparent/Code.cxx b/src/Core/Common/MakePartOfImageTransparent/Code.cxx
index 5c6c04f54..a8c38f277 100644
--- a/src/Core/Common/MakePartOfImageTransparent/Code.cxx
+++ b/src/Core/Common/MakePartOfImageTransparent/Code.cxx
@@ -17,7 +17,7 @@
*=========================================================================*/
#include "itkImage.h"
#include "itkImageFileWriter.h"
-#include "itkImageRegionIterator.h"
+#include "itkImageRegionIteratorWithIndex.h"
#include "itkTIFFImageIO.h"
#include "itkRGBAPixel.h"
@@ -53,7 +53,7 @@ main(int argc, char * argv[])
image->SetRegions(region);
image->Allocate();
- itk::ImageRegionIterator imageIterator(image, region);
+ itk::ImageRegionIteratorWithIndex imageIterator(image, region);
while (!imageIterator.IsAtEnd())
{
diff --git a/src/Core/Common/MakePartOfImageTransparent/Transparency.png.cid b/src/Core/Common/MakePartOfImageTransparent/Transparency.png.cid
index 353474e2f..24f6e3f7f 100644
--- a/src/Core/Common/MakePartOfImageTransparent/Transparency.png.cid
+++ b/src/Core/Common/MakePartOfImageTransparent/Transparency.png.cid
@@ -1 +1 @@
-bafkreickuima2tmul6deufw2xz4tntnq6buzondwva6c34mq3abzkfbdfm
+bafkreifhssibxiumouehdhealbpwkfr3t2etdafvkmpxedjbbmuamdzzha
diff --git a/src/Core/Common/Matrix/CMakeLists.txt b/src/Core/Common/Matrix/CMakeLists.txt
index 81ed72879..3b20be33f 100644
--- a/src/Core/Common/Matrix/CMakeLists.txt
+++ b/src/Core/Common/Matrix/CMakeLists.txt
@@ -24,4 +24,3 @@ enable_testing()
add_test(NAME MatrixTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}
)
-
diff --git a/src/Core/Common/MersenneTwisterRandomIntegerGenerator/Code.cxx b/src/Core/Common/MersenneTwisterRandomIntegerGenerator/Code.cxx
index 285f7def8..46785a3da 100644
--- a/src/Core/Common/MersenneTwisterRandomIntegerGenerator/Code.cxx
+++ b/src/Core/Common/MersenneTwisterRandomIntegerGenerator/Code.cxx
@@ -23,7 +23,7 @@ main()
{
using GeneratorType = itk::Statistics::MersenneTwisterRandomVariateGenerator;
auto generator = GeneratorType::New();
- generator->Initialize();
+ generator->SetSeed();
// Get an int between 0 and 5
// (inclusive - that is sample from the set {0,1,2,3,4,5})
diff --git a/src/Core/Common/MersenneTwisterRandomNumberGenerator/Code.cxx b/src/Core/Common/MersenneTwisterRandomNumberGenerator/Code.cxx
index b715ff8db..fc9534588 100644
--- a/src/Core/Common/MersenneTwisterRandomNumberGenerator/Code.cxx
+++ b/src/Core/Common/MersenneTwisterRandomNumberGenerator/Code.cxx
@@ -24,7 +24,7 @@ main()
using GeneratorType = itk::Statistics::MersenneTwisterRandomVariateGenerator;
auto generator = GeneratorType::New();
- generator->Initialize();
+ generator->SetSeed();
std::cout << generator->GetUniformVariate(0, 5) << std::endl;
diff --git a/src/Core/Common/MiniPipeline/MiniPipeline.png.cid b/src/Core/Common/MiniPipeline/MiniPipeline.png.cid
index 3c56ad968..13055348b 100644
--- a/src/Core/Common/MiniPipeline/MiniPipeline.png.cid
+++ b/src/Core/Common/MiniPipeline/MiniPipeline.png.cid
@@ -1 +1 @@
-bafkreiact2ar5jwdldtg7xdkma4goxozct64cwstqcdl3wwib2mycjaeia
+bafkreie76vvgdlcczzaefizla7cpwmo3bhvo6ylomdksp5endfweqem3s4
diff --git a/src/Core/Common/MultipleInputsOfDifferentType/CMakeLists.txt b/src/Core/Common/MultipleInputsOfDifferentType/CMakeLists.txt
index e44433b24..d441c39c0 100644
--- a/src/Core/Common/MultipleInputsOfDifferentType/CMakeLists.txt
+++ b/src/Core/Common/MultipleInputsOfDifferentType/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME MultipleInputsOfDifferentTypeTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/MultipleOutputsOfDifferentType/CMakeLists.txt b/src/Core/Common/MultipleOutputsOfDifferentType/CMakeLists.txt
index 9604aabe9..0199ecb50 100644
--- a/src/Core/Common/MultipleOutputsOfDifferentType/CMakeLists.txt
+++ b/src/Core/Common/MultipleOutputsOfDifferentType/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME MultipleOutputsOfDifferentTypeTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/NeighborhoodIteratorOnVectorImage/CMakeLists.txt b/src/Core/Common/NeighborhoodIteratorOnVectorImage/CMakeLists.txt
index f5222f11e..0a97acc24 100644
--- a/src/Core/Common/NeighborhoodIteratorOnVectorImage/CMakeLists.txt
+++ b/src/Core/Common/NeighborhoodIteratorOnVectorImage/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME NeighborhoodIteratorOnVectorImageTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/PermuteSequenceOfIndices/CMakeLists.txt b/src/Core/Common/PermuteSequenceOfIndices/CMakeLists.txt
index 593a371ea..5a5abfd63 100644
--- a/src/Core/Common/PermuteSequenceOfIndices/CMakeLists.txt
+++ b/src/Core/Common/PermuteSequenceOfIndices/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME PermuteSequenceOfIndicesTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/PiConstant/CMakeLists.txt b/src/Core/Common/PiConstant/CMakeLists.txt
index 1d4bdfb0f..6fa3d6847 100644
--- a/src/Core/Common/PiConstant/CMakeLists.txt
+++ b/src/Core/Common/PiConstant/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME PiConstantTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/PrintModuleLoadingPython/Code.py b/src/Core/Common/PrintModuleLoadingPython/Code.py
old mode 100644
new mode 100755
diff --git a/src/Core/Common/ProduceImageProgrammatically/CMakeLists.txt b/src/Core/Common/ProduceImageProgrammatically/CMakeLists.txt
index a026ebc9a..fbe13ccbc 100644
--- a/src/Core/Common/ProduceImageProgrammatically/CMakeLists.txt
+++ b/src/Core/Common/ProduceImageProgrammatically/CMakeLists.txt
@@ -23,4 +23,3 @@ install(FILES Code.cxx CMakeLists.txt
enable_testing()
add_test(NAME ProduceImageProgrammaticallyTest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME})
-
diff --git a/src/Core/Common/ReadAPointSet/Documentation.rst b/src/Core/Common/ReadAPointSet/Documentation.rst
index 29adafc9a..27afbd641 100644
--- a/src/Core/Common/ReadAPointSet/Documentation.rst
+++ b/src/Core/Common/ReadAPointSet/Documentation.rst
@@ -52,7 +52,7 @@ C++
:lines: 18-
WebAssembly
-......
+...........
.. literalinclude:: WebAssembly.html
:language: html
diff --git a/src/Core/Common/ReadAPointSet/WebAssembly.html b/src/Core/Common/ReadAPointSet/WebAssembly.html
index dd09c24fa..f585224fc 100644
--- a/src/Core/Common/ReadAPointSet/WebAssembly.html
+++ b/src/Core/Common/ReadAPointSet/WebAssembly.html
@@ -24,4 +24,4 @@
})