Restoring previous versions of nrtest files that work

This commit is contained in:
Lew Rossman
2021-04-20 15:59:23 -04:00
parent a652175523
commit c64cbe1b5f
3 changed files with 49 additions and 9 deletions

View File

@@ -101,6 +101,8 @@ def epanet_mincdd_compare(path_test, path_ref, rtol, atol):
Raises: Raises:
ValueError() ValueError()
AssertionError() AssertionError()
Modified by L. Rossman (4/20/21)
''' '''
min_cdd = 100.0 min_cdd = 100.0
@@ -114,21 +116,56 @@ def epanet_mincdd_compare(path_test, path_ref, rtol, atol):
if np.array_equal(test[0], ref[0]): if np.array_equal(test[0], ref[0]):
continue continue
else: else:
diff = np.fabs(np.subtract(test[0], ref[0])) lre = _log_relative_error(test[0], ref[0])
idx = np.unravel_index(np.argmax(diff), diff.shape) idx = np.unravel_index(np.argmin(lre), lre.shape)
if lre[idx] < min_cdd:
if diff[idx] != 0.0:
tmp = - np.log10(diff[idx])
if tmp < min_cdd:
min_cdd = tmp; min_cdd = tmp;
#diff = np.fabs(np.subtract(test[0], ref[0]))
#idx = np.unravel_index(np.argmax(diff), diff.shape)
#if diff[idx] != 0.0:
# tmp = - np.log10(diff[idx])
# if tmp < min_cdd:
# min_cdd = tmp;
if np.floor(min_cdd) >= atol: if np.floor(min_cdd) >= atol:
return True return True
else: else:
raise AssertionError('min_cdd=%d less than atol=%g' % (min_cdd, atol)) raise AssertionError('min_cdd=%d less than atol=%g' % (min_cdd, atol))
def _log_relative_error(q, c):
'''
Computes log relative error, a measure of numerical accuracy.
Single precision machine epsilon is between 2^-24 and 2^-23.
Reference:
McCullough, B. D. "Assessing the Reliability of Statistical Software: Part I."
The American Statistician, vol. 52, no. 4, 1998, pp. 358-366.
'''
diff = np.subtract(q, c)
tmp_c = np.copy(c)
# If ref value is small compute absolute error
tmp_c[np.fabs(tmp_c) < 1.0e-6] = 1.0
re = np.fabs(diff)/np.fabs(tmp_c)
# If re is tiny set lre to number of digits
re[re < 1.0e-7] = 1.0e-7
# If re is very large set lre to zero
re[re > 2.0] = 1.0
lre = np.negative(np.log10(re))
# If lre is negative set to zero
lre[lre < 1.0] = 0.0
return lre
def epanet_report_compare(path_test, path_ref, rtol, atol): def epanet_report_compare(path_test, path_ref, rtol, atol):
''' '''
Compares results in two report files ignoring contents of header and footer. Compares results in two report files ignoring contents of header and footer.
@@ -152,9 +189,12 @@ def epanet_report_compare(path_test, path_ref, rtol, atol):
RunTimeError() RunTimeError()
... ...
''' '''
# Comparison of Status Report files turned off - L.Rossman (4/20/21)
'''
HEADER = 10 HEADER = 10
FOOTER = 2 FOOTER = 2
'''
with open(path_test ,'r') as ftest, open(path_ref, 'r') as fref: with open(path_test ,'r') as ftest, open(path_ref, 'r') as fref:
for (test_line, ref_line) in it.izip(hdf.parse(ftest, HEADER, FOOTER)[1], for (test_line, ref_line) in it.izip(hdf.parse(ftest, HEADER, FOOTER)[1],

View File

@@ -18,7 +18,7 @@ entry_points = {
'nrtest.compare': [ 'nrtest.compare': [
'epanet allclose = nrtest_epanet:epanet_allclose_compare', 'epanet allclose = nrtest_epanet:epanet_allclose_compare',
#'epanet mincdd = nrtest_epanet:epanet_mincdd_compare', #'epanet mincdd = nrtest_epanet:epanet_mincdd_compare',
#'epanet report = nrtest_epanet:epanet_report_compare', 'epanet report = nrtest_epanet:epanet_report_compare',
# Add entry point for new comparison functions here # Add entry point for new comparison functions here
] ]
} }

View File

@@ -16,7 +16,6 @@
# Suggested Usage: # Suggested Usage:
# $ for file in .//*; do ./test-config.sh $file 1.0 > "${file%.*}.json"; done # $ for file in .//*; do ./test-config.sh $file 1.0 > "${file%.*}.json"; done
# #
# "${name}.rpt": "epanet report",
filename="$1" filename="$1"
name="${filename%.*}" name="${filename%.*}"
@@ -38,6 +37,7 @@ cat<<EOF
], ],
"output_files": { "output_files": {
"${name}.out": "epanet allclose" "${name}.out": "epanet allclose"
"${name}.rpt": "epanet report",
} }
} }
EOF EOF