Changeset 7141
- Timestamp:
- Jun 1, 2009, 4:24:20 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/numpy_anuga_validation/automated_validation_tests/patong_beach_validation/cmpsww.py
r6974 r7141 21 21 ##### 22 22 23 # allowable 'slop' when testing two float values 24 epsilon = 1.0e-9 23 # Global for the '-q' quiet flag 24 quiet = None 25 26 # default tolerances - same as numpy defaults 27 default_abs_tolerance = 1.0e-08 28 default_rel_tolerance = 1.0000000000000001e-05 25 29 26 30 # Global attributes that should exist and be same in both files … … 69 73 # @param variables A list of variable names to compare. 70 74 # @return Returns if files 'equal', else raises RuntimeError. 71 def files_are_the_same(files, globals=None, timesteps=None, variables=None): 75 def files_are_the_same(files, globals=None, timesteps=None, variables=None, 76 rel_tolerance=default_rel_tolerance, 77 abs_tolerance=default_abs_tolerance): 72 78 # split out the filenames and check they exist 73 79 (file1, file2) = files … … 232 238 233 239 # check data variables, be clever with time series data 240 max_difference = -1 241 diff_count = 0 234 242 for var_name in variables: 235 243 var_dims = expected_variables[var_name] … … 239 247 var1 = num.array(fid1.variables[var_name][t,:]) 240 248 var2 = num.array(fid2.variables[var_name][t,:]) 241 if var1 != var2: 249 if not num.allclose(var1, var2, 250 rtol=rel_tolerance, atol=abs_tolerance): 251 error = True 242 252 for i in xrange(len(var1)): 243 if var1[i] != var2[i]: 244 error_msg += ('\nFiles differ in variable ' 245 '%s[%d,%d]:\n' 246 '%s: %f\n' 247 '%s: %f\n' 248 'difference=%f\n' 249 % (var_name, t, i, 250 filename1, var1[i], 251 filename2, var2[i], 252 var1[i]-var2[i])) 253 break 254 error = True 253 if not num.allclose(var1[i], var2[i], 254 rtol=rel_tolerance, 255 atol=abs_tolerance): 256 if not quiet: 257 error_msg += ('\nFiles differ in variable ' 258 '%s[%d,%d]:\n' 259 '%s: %f\n' 260 '%s: %f\n' 261 'difference=%e\n' 262 % (var_name, t, i, 263 filename1, var1[i], 264 filename2, var2[i], 265 num.abs(var1[i]-var2[i]))) 266 max_difference = max(max_difference, 267 num.abs(var1[i]-var2[i])) 268 diff_count += 1 255 269 else: 256 270 # simple data, check whole thing at once 257 271 var1 = num.array(fid1.variables[var_name][:]) 258 272 var2 = num.array(fid2.variables[var_name][:]) 259 if not num.allclose(var1, var2): 273 if not num.allclose(var1, var2, 274 rtol=rel_tolerance, atol=abs_tolerance): 260 275 for j in xrange(len(var1)): 261 if abs(var1[j] - var2[j]) > epsilon: 262 error_msg += ('\nFiles differ in variable ' 263 '%s[%d]:\n' 264 '%s: %f\n' 265 '%s: %f\n' 266 'difference=%f\n' 267 % (var_name, j, 268 filename1, var1[j], 269 filename2, var2[j], 270 var1[j]-var2[j])) 271 break 276 if not num.allclose(var1[j], var2[j], 277 rtol=rel_tolerance, atol=abs_tolerance): 278 if not quiet: 279 error_msg += ('\nFiles differ in variable ' 280 '%s[%d]:\n' 281 '%s: %f\n' 282 '%s: %f\n' 283 'difference=%e\n' 284 % (var_name, j, 285 filename1, var1[j], 286 filename2, var2[j], 287 num.abs(var1[j]-var2[j]))) 288 max_difference = max(max_difference, 289 num.abs(var1[i]-var2[i])) 290 diff_count += 1 272 291 error = True 273 292 … … 280 299 281 300 if error: 301 error_msg += ('\nNumber of data differences=%d\n' 302 'Maximum data difference=%e\n' 303 % (diff_count, max_difference)) 282 304 raise RuntimeError, error_msg 283 305 … … 293 315 a('where <options> is zero or more of:\n') 294 316 a(' -h print this help\n') 317 a(' -q be quiet, print only summary of differences\n') 295 318 a(" -a <val> set absolute threshold of 'equivalent'\n") 296 319 a(" -r <val> set relative threshold of 'equivalent'\n") … … 319 342 # @return The status code the program will exit with. 320 343 def main(argv=None): 344 global quiet 345 321 346 if argv is None: 322 347 argv = sys.argv … … 324 349 try: 325 350 try: 326 opts, args = getopt.getopt(argv[1:], 'h g:t:v:',351 opts, args = getopt.getopt(argv[1:], 'hqa:g:r:t:v:', 327 352 ['help', 'globals', 328 353 'variables', 'timesteps']) … … 338 363 timesteps = None 339 364 variables = None 365 quiet = False 366 rel_tolerance = default_rel_tolerance 367 abs_tolerance = default_abs_tolerance 340 368 for opt, arg in opts: 341 369 if opt in ('-h', '--help'): 342 370 print usage() 343 371 sys.exit(0) 372 elif opt in ('-q', '--quiet'): 373 quiet = True 374 elif opt in ('-a', '--absolute'): 375 abs_tolerance = float(arg) 376 elif opt in ('-r', '--relative'): 377 rel_tolerance = float(arg) 344 378 elif opt in ('-g', '--globals'): 345 379 globals = arg.split(',') … … 357 391 try: 358 392 files_are_the_same(args, globals=globals, 359 timesteps=timesteps, variables=variables) 393 timesteps=timesteps, variables=variables, 394 rel_tolerance=rel_tolerance, 395 abs_tolerance=abs_tolerance) 360 396 except RuntimeError, msg: 361 397 print msg
Note: See TracChangeset
for help on using the changeset viewer.