mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-25 08:41:00 -06:00
Added first revision of fuzzycomparevtu. Removed unecessary dependency of stokes tests to dune-pdelab.
This commit is contained in:
parent
5efb7f0256
commit
37b913a052
71
bin/fuzzycomparevtu.py
Normal file
71
bin/fuzzycomparevtu.py
Normal file
@ -0,0 +1,71 @@
|
||||
import argparse
|
||||
from xml.dom import minidom
|
||||
|
||||
# fuzzy compare XML tree from XML strings
|
||||
def isFuzzyEqualXml(xml1, xml2, absolute, relative):
|
||||
dom1 = minidom.parseString(xml1)
|
||||
dom2 = minidom.parseString(xml2)
|
||||
return isFuzzyEqualNode(dom1.documentElement, dom2.documentElement, absolute, relative)
|
||||
|
||||
# fuzzy compare of XML nodes
|
||||
def isFuzzyEqualNode(node1, node2, absolute, relative):
|
||||
if node1.tagName != node2.tagName:
|
||||
print 'The name of the node differs in ', node1.tagName, ' and ', node2.tagName
|
||||
return False
|
||||
if sorted(node1.attributes.items()) != sorted(node2.attributes.items()):
|
||||
print 'Attributs differ in node ', node1.tagName
|
||||
return False
|
||||
if len(node1.childNodes) != len(node2.childNodes):
|
||||
print 'Number of children differs in node ', node1.tagName
|
||||
return False
|
||||
for node1child, node2child in zip(node1.childNodes, node2.childNodes):
|
||||
if node1child.nodeType != node2child.nodeType:
|
||||
print 'Node type differs in ', note1.tagName
|
||||
return False
|
||||
if node1child.nodeType == node1child.TEXT_NODE and not isFuzzyEqualText(node1child.data, node2child.data, absolute, relative):
|
||||
print 'Data differs in node ', node1.tagName
|
||||
return False
|
||||
if node1child.nodeType == node1child.ELEMENT_NODE and not isFuzzyEqualNode(node1child, node2child, absolute, relative):
|
||||
return False
|
||||
return True
|
||||
|
||||
# fuzzy compare of text consisting of whitespace separated numbers
|
||||
def isFuzzyEqualText(text1, text2, absolute, relative):
|
||||
list1 = text1.split()
|
||||
list2 = text2.split()
|
||||
# difference only in whitespace?
|
||||
if (list1 == list2):
|
||||
return True
|
||||
# compare number by number
|
||||
for number1, number2 in zip(list1, list2):
|
||||
number1 = float(number1)
|
||||
number2 = float(number2)
|
||||
if (abs(number1 - number2) > absolute
|
||||
and (number2 == 0.0 or abs(abs(number1 / number2) - 1.0) > relative)):
|
||||
print 'Difference to large between', number1, ' and ', number2
|
||||
return False
|
||||
return True
|
||||
|
||||
# main programm
|
||||
# handle arguments and print help message
|
||||
parser = argparse.ArgumentParser(description='Fuzzy compare two VTK\
|
||||
(Visualization Toolkit) files. The files are accepted if for every\
|
||||
value the difference is below the absolute error or below the\
|
||||
relative error or below both.')
|
||||
parser.add_argument('vtu_file_1', type=open,
|
||||
help='first file to compare')
|
||||
parser.add_argument('vtu_file_2', type=open,
|
||||
help='second file to compare')
|
||||
parser.add_argument('-r', '--relative', type=float, default=1e-2,
|
||||
help='maximum relative error (default=1e-2)')
|
||||
parser.add_argument('-a', '--absolute', type=float, default=1e-9,
|
||||
help='maximum relative error (default=1e-9)')
|
||||
args = parser.parse_args()
|
||||
|
||||
# fuzzy compare
|
||||
if (isFuzzyEqualXml(args.vtu_file_1.read(), args.vtu_file_2.read(), args.absolute, args.relative)):
|
||||
exit
|
||||
else:
|
||||
exit(1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user