returnedtypecoverage.py
来自「DTMK软件开发包,此为开源软件,是一款很好的医学图像开发资源.」· Python 代码 · 共 250 行
PY
250 行
import itk, re, sys
try:
import itkvtk
except:
pass
from itkTemplate import itkTemplate
from optparse import OptionParser
ctypes = [
'double',
'float',
'signed_char',
'signed_short',
'signed_long',
'unsigned_char',
'unsigned_short',
'unsigned_long',
'char',
'short',
'long',
'bool',
'int',
'unsigned_int',
'void'
]
excludedMethodsList = [
'Delete',
'Unregister',
'SetReferenceCount',
# the method broken for all filters
'PushBackInput',
'PushFrontInput',
'GraftOutput',
'SetInput',
'UpdateOutputData',
'PropagateRequestedRegion',
'EnlargeOutputRequestedRegion',
# functor are not wrapped so exclude GetFunctor
'GetFunctor',
#'UnCreateAllInstanceRegister',
#'Update',
#'UpdateLargestPossibleRegion',
#'GenerateInputRequestedRegion',
#'GenerateOutputInformation',
#'GenerateData',
#'GetImageIO',
#'UpdateOutputData',
#'UpdateOutputInformation',
#'GraftOutput',
#'AddSeed',
#'GetInputs',
#'GetOutputs',
#'CreateAllInstance'
]
excludedMethodsWithParamList = [
#'GetElement',
#'RegisterFactory',
#'UnRegisterFactory',
#'PropagateRequestedRegion',
#'Resize',
#'PadByRadius'
]
excludedClasses = [
#'BinaryBallStructuringElement',
#'Neighborhood',
#'BSplineDecompositionImageFilter',
#'AtanImageFilter',
#'Atan2ImageFilter',
#'ChangeInformationImageFilter',
#'GeodesicActiveContourLevelSetImageFilter',
#'Image',
#'ImageBase',
#'ImageFileReader',
#'ImageFileWriter',
#'ImageRegistrationMethod',
#'BSplineDownsampleImageFilter',
#'BSplineUpsampleImageFilter',
#'CropImageFilter',
#'LevelSetFunction',
#'MattesMutualInformationImageToImageMetric',
#'MeanReciprocalSquareDifferenceImageToImageMetric',
#'MeanSquaresImageToImageMetric',
#'MultiResolutionImageRegistrationMethod',
#'MultiResolutionPyramidImageFilter',
#'MutualInformationImageToImageMetric',
#'NormalizedCorrelationImageToImageMetric',
#'ParallelSparseFieldLevelSetImageFilter',
#'PyBuffer',
#'RawImageIO',
#'RecursiveMultiResolutionPyramidImageFilter',
#'ResampleImageFilter',
#'RescaleIntensityImageFilter',
#'SegmentationLevelSetImageFilter',
#'ShapeDetectionLevelSetImageFilter',
#'SparseFieldFourthOrderLevelSetImageFilter',
#'SparseFieldLevelSetImageFilter',
#'SpatialObject',
#'SpatialObjectTreeNode',
#'WatershedImageFilter',
#'TreeNode',
#'ThresholdSegmentationLevelSetImageFilter',
#'PointSet',
#'ImageConstIterator',
#'ImageConstIteratorWithIndex',
#'ImageIterator',
#'ImageIteratorWithIndex',
#'ImageLinearConstIteratorWithIndex',
#'ImageLinearIteratorWithIndex',
#'ImageRandomConstIteratorWithIndex',
#'ImageRandomIteratorWithIndex',
#'ImageRandomNonRepeatingConstIteratorWithIndex',
#'ImageRandomNonRepeatingIteratorWithIndex',
#'ImageRegionConstIterator',
#'ImageRegionIterator',
#'ImageRegionConstIteratorWithIndex',
#'ImageRegionIteratorWithIndex',
#'InterpolateImageFilter',
#'IsolatedConnectedImageFilter',
'SmartPointer',
'BMPImageIO',
]
def log(s, level):
if level <= options.verbose:
print >> logFile, s
logFile.flush()
def cleanType(s):
i = s.index('_', 1)
return s[i+1:]
def addUnwrappedType(s):
s = cleanType(s)
if not s in unwrappedTypes:
unwrappedTypes.add(s)
log(s, 0)
def exploreTpl(tpl):
for cl in tpl.itervalues():
exploreMethods(cl, cl)
# try to instanciate the class
try :
obj = cl.New()
exploreMethods(obj, cl)
except:
pass
try :
exploreMethods(cl(), cl)
except:
pass
def exploreMethods(obj, cl):
attrNameList = [i for i in dir(obj) if isinstance(i, str) and i[0].isupper() and i not in excludedMethodsList]
attrNameList.sort()
for attrName in attrNameList:
log(" + " + attrName, 2)
try :
parameters = repr((cl.__name__, attrName))
if parameters not in exclude :
log(parameters, 4)
exec "s = obj.%s()" % attrName
if isUnwrappedTypeString(s):
addUnwrappedType(s)
log(" - " + cleanType(s), 5)
except :
# try with some parameters
if attrName not in excludedMethodsWithParamList :
for param in [0, '', False, None] :
parameters = repr((cl.__name__, attrName, param))
if parameters not in exclude :
log(' * ' + repr(param), 3)
log(parameters, 4)
try :
exec "s = obj.%s(param)" % attrName
if isUnwrappedTypeString(s):
addUnwrappedType(s)
log(" - " + cleanType(s), 5)
except :
pass
def isUnwrappedTypeString(s):
if not isinstance(s, str):
return False
if not s[0] == "_":
return False
for t in ctypes :
if re.match('^_[0-9a-z]+_p_%s$' % t, s) :
return False
return True
parser = OptionParser(usage="usage: %prog")
parser.add_option("--exclude", dest="exclude", default=None, metavar="FILE", help="")
parser.add_option("--log-file", dest="logFile", default="-", metavar="FILE", help="")
parser.add_option("--start-from", dest="startFrom", default=None, metavar="CLASS", help="")
parser.add_option("-v", "--verbose", dest="verbose", default=0, type="int", help="")
(options, args) = parser.parse_args()
if options.logFile == "-":
logFile = sys.stdout
else:
logFile = file(options.logFile, "w")
exclude = set()
if options.exclude :
exclude = set(file(options.exclude).read().splitlines())
attrNameList = sorted(set([i for i in dir(itk) if i[0].isupper() and len(i) > 2]) - set(excludedClasses))
if options.startFrom :
attrNameList = attrNameList[attrNameList.index(options.startFrom):]
unwrappedTypes = set()
for name in attrNameList:
exec "attr = itk."+name
# attr = itk.__dict__[name]
log(name, 1)
if isinstance(attr, itkTemplate) :
exploreTpl(attr)
else :
exploreMethods(attr, attr)
try :
exploreMethods(attr.New(), attr)
except:
pass
try :
exploreMethods(attr(), attr)
except:
pass
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?