1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
# ==========================================================================
#
# Copyright NumFOCUS
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ==========================================================================*/
import itk
import sys
from itk.support.template_class import itkTemplate
itk.auto_progress(2)
itk.force_load()
exclude = [
"AuthalicMatrixCoefficients",
"MatrixCoefficients",
"OnesMatrixCoefficients",
"IntrinsicMatrixCoefficients",
"HarmonicMatrixCoefficients",
"ConformalMatrixCoefficients",
"InverseEuclideanDistanceMatrixCoefficients",
"BandNode",
"NormalBandNode",
"CellTraitsInfo",
"DefaultDynamicMeshTraits",
"DefaultStaticMeshTraits",
"ParallelSparseFieldLevelSetNode",
"PyVectorContainer",
"SparseFieldLevelSetNode",
"QuadEdgeMeshCellTraitsInfo",
"QuadEdgeMeshTraits",
"complex",
"list",
"map",
"numeric_limits",
"set",
"vector",
"vnl_c_vector",
"vnl_diag_matrix",
"vnl_matrix",
"vnl_matrix_fixed",
"vnl_matrix_fixed_ref",
"vnl_matrix_fixed_ref_const",
"vnl_matrix_ref",
"vnl_vector",
"vnl_vector_ref",
"vnl_file_matrix",
"vnl_file_vector",
"vnl_fortran_copy",
"CosineWindowFunction",
"HammingWindowFunction",
"LanczosWindowFunction",
"WelchWindowFunction",
"Tile", # include from itkTileMontage remote module but only templated over dimension.
"cvar",
]
def isEmpty(itk_template_class_object):
for template_member_function in dir(itk_template_class_object):
if template_member_function[0].isupper():
# For ITK, if least one capitalized member function is found
# assume that the class is not empty
return False
return True
num_itk_template_classes_checked = 0
num_itk_empty_template_classes = 0
for module_element_name, module_element_object in itk.__dict__.items():
if module_element_name not in exclude:
module_element_object = itk.__dict__[module_element_name]
if isinstance(module_element_object, itkTemplate):
for template_variant in module_element_object.values():
num_itk_template_classes_checked += 1
if isEmpty(template_variant):
num_itk_empty_template_classes += 1
print(f"{template_variant}: empty class")
print(f"{num_itk_template_classes_checked} classes checked.")
if num_itk_empty_template_classes:
print(f"{num_itk_empty_template_classes} empty classes found", file=sys.stderr)
sys.exit(1)
|