Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 12 additions & 18 deletions SoftwareGuide/Examples/ParseCxxExamples.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ def __init__(self, sourceFile, id, codeblock):
def Print(self):
blockline = self.id
print("=" * 80)
print("{0} : {1}".format(self.blockType, self.sourceFile))
print(f"{self.blockType} : {self.sourceFile}")
for blocktext in self.codeblock:
blockline += 1
print("{0} : {1}".format(blockline, blocktext))
print(f"{blockline} : {blocktext}")
print("^" * 80)

def GetCodeBlockString(self):
blockstring = ""
if self.blockType == "Latex":
for blocktext in self.codeblock:
blockstring += "{0}\n".format(blocktext)
blockstring += f"{blocktext}\n"
pass
elif self.blockType == "CodeSnippet":
# blockstring += "\\small\n"
Expand All @@ -51,7 +51,7 @@ def GetCodeBlockString(self):
blockstring += "\\begin{minted}[baselinestretch=1,fontsize=\\footnotesize,linenos=false,bgcolor=ltgray]{c++}\n"
# blockstring += "\\begin{minted}[baselinestretch=1,fontsize=\small,linenos=false,bgcolor=ltgray]{c++}\n"
for blocktext in self.codeblock:
blockstring += "{0}".format(blocktext)
blockstring += f"{blocktext}"
blockstring += "\\end{minted}\n"
# blockstring += "\\end{itklisting}\n"
# blockstring += "\\end{verbatim}\n";
Expand Down Expand Up @@ -109,17 +109,13 @@ def ParseOneFile(sourceFile):
if checkForBlankLine:
if thisline != "":
print(
"{filename}:{line}: warning: Line after start of LaTeX block should be a newline -- instead got {value}".format(
filename=sourceFile, line=parseLine, value=thisline
)
f"{sourceFile}:{parseLine}: warning: Line after start of LaTeX block should be a newline -- instead got {thisline}"
)
checkForBlankLine = False

if not isLatexBlock and (len(thisline) > 80):
print(
"{filename}:{line}:80: warning: Line length too long for LaTeX printing".format(
filename=sourceFile, line=parseLine
)
f"{sourceFile}:{parseLine}:80: warning: Line length too long for LaTeX printing"
)
codeBlock.append(thisline)
else: # non-codeBlock line
Expand All @@ -130,33 +126,31 @@ def ParseOneFile(sourceFile):
def GetPreambleString(examplefilename):
# The following message is a warning writen on the generated .tex
# files for preventing them from being manualy edited.
preamble = """
preamble = f"""
% Please do NOT edit this file.
% It has been automatically generated
% by a perl script from the original cxx sources
% in the Insight/Examples directory

% Any changes should be made in the file
% {0}
% {examplefilename}

The source code for this section can be found in the file\\\\
\\texttt{2}{1}{3}.
""".format(
examplefilename, os.path.basename(examplefilename), "{", "}"
)
\\texttt{{{os.path.basename(examplefilename)}}}.
"""
return preamble


if __name__ == "__main__":
import sys

if len(sys.argv) < 2:
print("Usage: {0} <input file> <output file>".format(argv[0]))
print(f"Usage: {argv[0]} <input file> <output file>")
sys.exit(-1)

inputfilename = sys.argv[1]
outputfilename = sys.argv[2]
print("Processing {0} into {1} ... \n".format(inputfilename, outputfilename))
print(f"Processing {inputfilename} into {outputfilename} ... \n")

thisCodeBlocks = ParseOneFile(inputfilename)

Expand Down
87 changes: 33 additions & 54 deletions SoftwareGuide/Examples/RunExamples.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@ def __init__(self, sourceFile, id, codeblock, pathFinder):
self.children = set()
if not os.path.exists(self.progFullPath):
print(
"ERROR: Required program {0} does not exists. Please rebuild ITK".format(
self.progBaseName
)
f"ERROR: Required program {self.progBaseName} does not exists. Please rebuild ITK"
)
sys.exit(-1)

Expand All @@ -81,43 +79,43 @@ def DoInputsExists(self):
if ii == None:
continue
if not os.path.exists(ii):
print("ERROR: XXXXXXXXXXXX MISSING {0}".format(ii))
print(f"ERROR: XXXXXXXXXXXX MISSING {ii}")
return False
return True

def AreOutputsNewer(self):
oldest_output = 100000000000000000000000
if self.verbose:
print("Self Outputs {0}".format(self.outputs))
print("Self Inputs {0}".format(self.inputs))
print(f"Self Outputs {self.outputs}")
print(f"Self Inputs {self.inputs}")
for o in self.outputs:
if self.verbose:
print("CHECKING TIME FOR: {0}".format(o))
print(f"CHECKING TIME FOR: {o}")
if os.path.exists(o):
this_output_time = os.path.getmtime(o)
if self.verbose:
print("This Ouptut Time: {0}".format(this_output_time))
print(f"This Ouptut Time: {this_output_time}")
if this_output_time < oldest_output:
oldest_output = this_output_time
else:
if self.verbose:
print("Missing Output: {0}".format(o))
print(f"Missing Output: {o}")
return False
newest_input = os.path.getmtime(self.progFullPath)
for i in self.inputs:
if i == None:
continue
if self.verbose:
print("CHECKING TIME FOR: {0}".format(i))
print(f"CHECKING TIME FOR: {i}")
if os.path.exists(i):
this_input_time = os.path.getmtime(i)
if self.verbose:
print("This Input Time: {0}".format(this_input_time))
print(f"This Input Time: {this_input_time}")
if this_input_time > newest_input:
newest_input = this_input_time
else:
print("Missing input {0}".format(i))
print("Searched {0}".format(self.inputs))
print(f"Missing input {i}")
print(f"Searched {self.inputs}")
print("ERROR:" * 20)
print(
"Failing to process all data, This should never happen because you should only run this function once all inputs exists."
Expand All @@ -126,11 +124,7 @@ def AreOutputsNewer(self):
-1
) # This should never happen because you should only run this function once all inputs exists.
if self.verbose:
print(
"Newest Input: {0}, Oldest Output: {1}".format(
newest_input, oldest_output
)
)
print(f"Newest Input: {newest_input}, Oldest Output: {oldest_output}")
if newest_input < oldest_output:
return True
else:
Expand All @@ -145,19 +139,15 @@ def GetCommandLine(self):
parseGroups = lineparse.search(currLine)
if parseGroups == None:
print(
"ERROR: Invalid parsing of {0} at line {1}".format(
self.sourceFile, currLineNumber
)
f"ERROR: Invalid parsing of {self.sourceFile} at line {currLineNumber}"
)
sys.exit(-1)
if parseGroups.group(1) == "INPUTS":
inputBaseFileName = parseGroups.group(2)
inputFileName = pathFinder.GetInputPath(inputBaseFileName)
if inputFileName == None:
print(
"ERROR: Invalid input {0} at {1} at line {2}".format(
parseGroups.group(2), self.sourceFile, currLineNumber
)
f"ERROR: Invalid input {parseGroups.group(2)} at {self.sourceFile} at line {currLineNumber}"
)
exit(-1)
else:
Expand All @@ -166,9 +156,7 @@ def GetCommandLine(self):
inputFileName = pathFinder.GetOutputPath(inputBaseFileName)
if not os.path.exists(inputFileName):
print(
"WARNING: Can not find {0} path, assuming it is autogenerated".format(
inputFileName
)
f"WARNING: Can not find {inputFileName} path, assuming it is autogenerated"
)
self.inputs.append(inputFileName)
elif parseGroups.group(1) == "OUTPUTS":
Expand Down Expand Up @@ -212,9 +200,7 @@ def MakeAllFileLists(self):
pass
else:
print(
"ERROR: INVALID LINE IDENTIFIER {0} at line {1} in {2}".format(
parseGroups.group(1), lineNumber, self.sourceFile
)
f"ERROR: INVALID LINE IDENTIFIER {parseGroups.group(1)} at line {lineNumber} in {self.sourceFile}"
)
sys.exit(-1)

Expand All @@ -224,7 +210,7 @@ def Print(self):
print(self.sourceFile)
for blocktext in self.codeblock:
blockline += 1
print("{0} : {1}".format(blockline, blocktext))
print(f"{blockline} : {blocktext}")
print(self.GetCommandLine())
print("^" * 80)

Expand Down Expand Up @@ -300,17 +286,15 @@ def __init__(self, itkSourceDir, itkExecutablesDir, itkBuildDir, SWGuidBaseOutpu
mkdir_p(self.outPicDir)

# HACK: Need beter search criteria
searchPaths = "{0}/ExternalData/Testing/Data/Input#{0}/ExternalData/Examples/Data/BrainWeb#{0}/Testing/Temporary#{0}/Modules/Nonunit/Review/test#{0}/ExternalData/Modules/Segmentation/LevelSetsv4/test/Baseline#{0}/ExternalData/Modules/IO/GE/test/Baseline#{0}/ExternalData/Examples/Filtering/test/Baseline#{0}/Examples/Segmentation/test#{1}/Art/Generated#{2}/Examples/Data".format(
itkBuildDir, SWGuidBaseOutput, itkSourceDir
)
searchPaths = f"{itkBuildDir}/ExternalData/Testing/Data/Input#{itkBuildDir}/ExternalData/Examples/Data/BrainWeb#{itkBuildDir}/Testing/Temporary#{itkBuildDir}/Modules/Nonunit/Review/test#{itkBuildDir}/ExternalData/Modules/Segmentation/LevelSetsv4/test/Baseline#{itkBuildDir}/ExternalData/Modules/IO/GE/test/Baseline#{itkBuildDir}/ExternalData/Examples/Filtering/test/Baseline#{itkBuildDir}/Examples/Segmentation/test#{SWGuidBaseOutput}/Art/Generated#{itkSourceDir}/Examples/Data"
dirtyDirPaths = searchPaths.split("#")

self.searchDirList = []
for eachpath in dirtyDirPaths:
if os.path.isdir(eachpath):
self.searchDirList.append(os.path.realpath(eachpath))
else:
print("WARNING: MISSING search path {0} ".format(eachpath))
print(f"WARNING: MISSING search path {eachpath} ")
sys.exit(-1)

def GetProgramPath(self, execfilenamebase):
Expand All @@ -320,7 +304,7 @@ def GetProgramPath(self, execfilenamebase):
if os.path.exists(testPath):
return testPath
else:
print("ERROR: {0} does not exists".format(testPath))
print(f"ERROR: {testPath} does not exists")
sys.exit(-1)

def GetInputPath(self, inputBaseName):
Expand All @@ -329,15 +313,15 @@ def GetInputPath(self, inputBaseName):
if os.path.exists(testPath):
return testPath
else:
# print('##STATUS: Not yet found input {0}'.format(testPath))
# print(f"##STATUS: Not yet found input {testPath}")
pass
return self.GetOutputPath(inputBaseName)

def GetOutputPath(self, outputBaseName):
outPath = os.path.join(self.outPicDir, outputBaseName)
# outPath = outPath.replace(self.outPicDir+'/'+self.outPicDir, self.outPicDir ) #Avoid multiple path concatenations
# if not os.path.exists(outPath):
# print("@@Warning: Output missing {0}".format(outPath))
# print(f"@@Warning: Output missing {outPath}")
return outPath


Expand Down Expand Up @@ -424,12 +408,12 @@ def GetSortedCodeBlockList(self):
allCommandBlocks = []
for rootDir, dirList, fileList in os.walk(args.itkSourceDir):
if rootDir.count("ThirdParty") >= 1:
# print("Passing on: {0}".format(rootDir))
# print(f"Passing on: {rootDir}")
continue

for currFile in fileList:
if currFile[-4:] != ".cxx": # Only parse cxx files
# print("NOT PARSING: {0} because it has wrong extension {1}".format(currFile,currFile[-r:]))
# print(f"NOT PARSING: {currFile} because it has wrong extension {currFile[-r:]}")
continue
sourceFile = os.path.realpath(rootDir + "/" + currFile)

Expand All @@ -442,8 +426,8 @@ def GetSortedCodeBlockList(self):
runCommand = blockStart.GetCommandLine()
for inputFile in blockStart.inputs:
if not os.path.exists(inputFile):
print("WARNING: {0} input does not exist".format(blockStart.sourceFile))
print("Running: {0}".format(runCommand))
print(f"WARNING: {blockStart.sourceFile} input does not exist")
print(f"Running: {runCommand}")
try:
retcode = subprocess.call(runCommand, shell=True)
if retcode < 0:
Expand All @@ -462,16 +446,12 @@ def GetSortedCodeBlockList(self):
for outputFile in block.outputs:
if not os.path.exists(outputFile):
print(
"WARNING: output {0} of {1} does not exist!".format(
outputFile, baseProgramName
)
f"WARNING: output {outputFile} of {baseProgramName} does not exist!"
)
for inputFile in block.inputs:
if not os.path.exists(inputFile):
print(
"WARNING: input {0} of {1} does not exist!".format(
inputFile, baseProgramName
)
f"WARNING: input {inputFile} of {baseProgramName} does not exist!"
)
dependencyDictionary[baseProgramName].extend(block.outputs)
for inputFile in block.inputs:
Expand All @@ -489,17 +469,16 @@ def GetSortedCodeBlockList(self):
outputCDFile = open(outputCMakeDependancies, "w")
allDependencies = "set(allEPS-DEPS "
for baseName in dependencyDictionary.keys():
outstring = 'set("{name}-DEPS" '.format(name=baseName)
allDependencies += ' "${' + "{name}-DEPS".format(name=baseName) + '}" '
outstring = f'set("{baseName}-DEPS" '
allDependencies += ' "${' + f"{baseName}-DEPS" + '}" '
for output in dependencyDictionary[baseName]:
epsOutput = os.path.join(
outputEPSDirectory, os.path.basename(output.replace(".png", ".eps"))
)
outstring += ' "{epsOutput}"'.format(epsOutput=epsOutput.replace("\\", "/"))
# chr(92) is backslash
outstring += f' "{epsOutput.replace(chr(92), "/")}"'
outputCDFile.write(
'CONVERT_INPUT_IMG("{0}" "{1}" "{2}")\n'.format(
output.replace("\\", "/"), epsOutput.replace("\\", "/"), ""
)
f'CONVERT_INPUT_IMG("{output.replace(chr(92), "/")}" "{epsOutput.replace(chr(92), "/")}" "")\n'
)
outstring += ")\n"
outputCDFile.write(outstring)
Expand Down