diff options
author | Julie <julie@cs.utk.edu> | 2016-06-02 22:39:35 -0700 |
---|---|---|
committer | Julie <julie@cs.utk.edu> | 2016-06-02 22:39:35 -0700 |
commit | 6df7ab774682211b738a7461e487f720f89b4e66 (patch) | |
tree | eed16f294b867e0e22dfdfccc18f24987d2249a8 /lapack_testing.py | |
parent | bb1201b3f411ccc9ab0f8bab849e1b901815db1a (diff) | |
download | lapack-6df7ab774682211b738a7461e487f720f89b4e66.tar.gz lapack-6df7ab774682211b738a7461e487f720f89b4e66.tar.bz2 lapack-6df7ab774682211b738a7461e487f720f89b4e66.zip |
Adapt lapack_testing.py to work on both Python 2 and Python 3
Contributed by Julien Schueller
Sent to Julie on May 8th 2016
Correspond to SVN rev 1748.
Diffstat (limited to 'lapack_testing.py')
-rwxr-xr-x | lapack_testing.py | 486 |
1 files changed, 243 insertions, 243 deletions
diff --git a/lapack_testing.py b/lapack_testing.py index 8ddc049b..4ffd72a0 100755 --- a/lapack_testing.py +++ b/lapack_testing.py @@ -3,22 +3,22 @@ ############################################################################### -# lapack_testing.py +# lapack_testing.py ############################################################################### - -from subprocess import Popen, STDOUT, PIPE +from __future__ import print_function +from subprocess import Popen, STDOUT, PIPE import os, sys, math import getopt # Arguments try: - opts, args = getopt.getopt(sys.argv[1:], "hd:srep:t:n", - ["help", "dir", "short", "run", "error","prec=","test=","number"]) - -except getopt.error, msg: - print msg - print "for help use --help" - sys.exit(2) + opts, args = getopt.getopt(sys.argv[1:], "hd:srep:t:n", + ["help", "dir", "short", "run", "error","prec=","test=","number"]) + +except getopt.error as msg: + print(msg) + print("for help use --help") + sys.exit(2) short_summary=0 with_file=1 @@ -32,56 +32,56 @@ bin_dir='bin/Release' abs_bin_dir=os.path.normpath(os.path.join(os.getcwd(),bin_dir)) for o, a in opts: - if o in ("-h", "--help"): - print sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]" - print " - h is to print this message" - print " - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests" - print " - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use ." - print " LEVEL OF OUTPUT" - print " - x is to print a detailed summary" - print " - e is to print only the error summary" - print " - s is to print a short summary" - print " - n is to print the numbers of failing tests (turn on summary mode)" - print " SECLECTION OF TESTS:" - print " - p [s/c/d/z/x] is to indicate the PRECISION to run:" - print " s=single" - print " d=double" - print " sd=single/double" - print " c=complex" - print " z=double complex" - print " cz=complex/double complex" - print " x=all [DEFAULT]" - print " - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:" - print " lin=Linear Equation" - print " eig=Eigen Problems" - print " mixed=mixed-precision" - print " rfp=rfp format" - print " all=all tests [DEFAULT]" - print " EXAMPLES:" - print " ./lapack_testing.py -n" - print " Will return the numbers of failed tests by analyzing the LAPACK output" - print " ./lapack_testing.py -n -r -p s" - print " Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output" - print " ./lapack_testing.py -n -p s -t eig " - print " Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings" - print "Written by Julie Langou (June 2011) " - sys.exit(0) - else: - if o in ("-s", "--short"): - short_summary = 1 - if o in ("-r", "--run"): - with_file = 0 - if o in ("-e", "--error"): - just_errors = 1 - if o in ( '-p', '--prec' ): - prec = a - if o in ( '-d', '--dir' ): - test_dir = a - if o in ( '-t', '--test' ): - test = a - if o in ( '-n', '--number' ): - only_numbers = 1 - short_summary = 1 + if o in ("-h", "--help"): + print(sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]") + print(" - h is to print this message") + print(" - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests") + print(" - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use .") + print(" LEVEL OF OUTPUT") + print(" - x is to print a detailed summary") + print(" - e is to print only the error summary") + print(" - s is to print a short summary") + print(" - n is to print the numbers of failing tests (turn on summary mode)") + print(" SECLECTION OF TESTS:") + print(" - p [s/c/d/z/x] is to indicate the PRECISION to run:") + print(" s=single") + print(" d=double") + print(" sd=single/double") + print(" c=complex") + print(" z=double complex") + print(" cz=complex/double complex") + print(" x=all [DEFAULT]") + print(" - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:") + print(" lin=Linear Equation") + print(" eig=Eigen Problems") + print(" mixed=mixed-precision") + print(" rfp=rfp format") + print(" all=all tests [DEFAULT]") + print(" EXAMPLES:") + print(" ./lapack_testing.py -n") + print(" Will return the numbers of failed tests by analyzing the LAPACK output") + print(" ./lapack_testing.py -n -r -p s") + print(" Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output") + print(" ./lapack_testing.py -n -p s -t eig ") + print(" Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings") + print("Written by Julie Langou (June 2011) ") + sys.exit(0) + else: + if o in ("-s", "--short"): + short_summary = 1 + if o in ("-r", "--run"): + with_file = 0 + if o in ("-e", "--error"): + just_errors = 1 + if o in ( '-p', '--prec' ): + prec = a + if o in ( '-d', '--dir' ): + test_dir = a + if o in ( '-t', '--test' ): + test = a + if o in ( '-n', '--number' ): + only_numbers = 1 + short_summary = 1 # process options @@ -89,7 +89,7 @@ os.chdir(test_dir) execution=1 summary="\n\t\t\t--> LAPACK TESTING SUMMARY <--\n"; -if with_file: summary+= "\t\tProcessing LAPACK Testing output found in the "+test_dir+" direcory\n"; +if with_file: summary+= "\t\tProcessing LAPACK Testing output found in the "+test_dir+" directory\n"; summary+="SUMMARY \tnb test run \tnumerical error \tother error \n"; summary+="================ \t===========\t=================\t================ \n"; nb_of_test=0 @@ -100,80 +100,80 @@ os.environ["PATH"] = os.environ["PATH"]+":." # Define a function to open the executable (different filenames on unix and Windows) def run_summary_test( f, cmdline, short_summary): - nb_test_run=0 - nb_test_fail=0 - nb_test_illegal=0 - nb_test_info=0 - - if (with_file): - if not os.path.exists(cmdline): - error_message=cmdline+" file not found" - r=1 - if short_summary: return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info] - else: - pipe = open(cmdline,'r') - r=0 - else: - if os.name != 'nt': - cmdline='./' + cmdline - else : - cmdline=abs_bin_dir+os.path.sep+cmdline - - outfile=cmdline.split()[4] - #pipe = open(outfile,'w') - p = Popen(cmdline, shell=True)#, stdout=pipe) - p.wait() - #pipe.close() - r=p.returncode - pipe = open(outfile,'r') - error_message=cmdline+" did not work" - - if r != 0 and not with_file: - print "---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !" - for line in pipe.readlines(): - f.write(str(line)) - elif r != 0 and with_file and not short_summary: - print "---- WARNING: please check that you have the LAPACK output : "+cmdline+"!" - print "---- WARNING: with the option -r, we can run the LAPACK testing for you" - # print "---- "+error_message - else: - for line in pipe.readlines(): - f.write(str(line)) - words_in_line=line.split() - if (line.find("run")!=-1): -# print line - whereisrun=words_in_line.index("run)") - nb_test_run+=int(words_in_line[whereisrun-2]) - if (line.find("out of")!=-1): - if (short_summary==0): print line, - whereisout= words_in_line.index("out") - nb_test_fail+=int(words_in_line[whereisout-1]) - if ((line.find("illegal")!=-1) or (line.find("Illegal")!=-1)): - if (short_summary==0):print line, - nb_test_illegal+=1 - if (line.find(" INFO")!=-1): - if (short_summary==0):print line, - nb_test_info+=1 - if (with_file==1): - pipe.close() - - f.flush(); - - return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info] + nb_test_run=0 + nb_test_fail=0 + nb_test_illegal=0 + nb_test_info=0 + + if (with_file): + if not os.path.exists(cmdline): + error_message=cmdline+" file not found" + r=1 + if short_summary: return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info] + else: + pipe = open(cmdline,'r') + r=0 + else: + if os.name != 'nt': + cmdline='./' + cmdline + else : + cmdline=abs_bin_dir+os.path.sep+cmdline + + outfile=cmdline.split()[4] + #pipe = open(outfile,'w') + p = Popen(cmdline, shell=True)#, stdout=pipe) + p.wait() + #pipe.close() + r=p.returncode + pipe = open(outfile,'r') + error_message=cmdline+" did not work" + + if r != 0 and not with_file: + print("---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !") + for line in pipe.readlines(): + f.write(str(line)) + elif r != 0 and with_file and not short_summary: + print("---- WARNING: please check that you have the LAPACK output : "+cmdline+"!") + print("---- WARNING: with the option -r, we can run the LAPACK testing for you") + # print "---- "+error_message + else: + for line in pipe.readlines(): + f.write(str(line)) + words_in_line=line.split() + if (line.find("run")!=-1): +# print line + whereisrun=words_in_line.index("run)") + nb_test_run+=int(words_in_line[whereisrun-2]) + if (line.find("out of")!=-1): + if (short_summary==0): print(line, end=' ') + whereisout= words_in_line.index("out") + nb_test_fail+=int(words_in_line[whereisout-1]) + if ((line.find("illegal")!=-1) or (line.find("Illegal")!=-1)): + if (short_summary==0):print(line, end=' ') + nb_test_illegal+=1 + if (line.find(" INFO")!=-1): + if (short_summary==0):print(line, end=' ') + nb_test_info+=1 + if (with_file==1): + pipe.close() + + f.flush(); + + return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info] # If filename cannot be opened, send output to sys.stderr filename = "testing_results.txt" try: - f = open(filename, 'w') + f = open(filename, 'w') except IOError: - f = sys.stdout + f = sys.stdout if (short_summary==0): - print " " - print "---------------- Testing LAPACK Routines ----------------" - print " " - print "-- Detailed results are stored in", filename + print(" ") + print("---------------- Testing LAPACK Routines ----------------") + print(" ") + print("-- Detailed results are stored in", filename) dtypes = ( ("s", "d", "c", "z"), @@ -181,32 +181,32 @@ dtypes = ( ) if prec=='s': - range_prec=[0] + range_prec=[0] elif prec=='d': - range_prec=[1] + range_prec=[1] elif prec=='sd': - range_prec=[0,1] + range_prec=[0,1] elif prec=='c': - range_prec=[2] + range_prec=[2] elif prec=='z': - range_prec=[3] + range_prec=[3] elif prec=='cz': - range_prec=[2,3] -else: - prec='x'; - range_prec=range(4) + range_prec=[2,3] +else: + prec='x'; + range_prec=list(range(4)) if test=='lin': - range_test=[15] + range_test=[15] elif test=='mixed': - range_test=[16] - range_prec=[1,3] + range_test=[16] + range_prec=[1,3] elif test=='rfp': - range_test=[17] + range_test=[17] elif test=='eig': - range_test=range(15) -else: - range_test=range(18) + range_test=list(range(15)) +else: + range_test=list(range(18)) list_results = [ [0, 0, 0, 0, 0], @@ -216,111 +216,111 @@ list_results = [ ] for dtype in range_prec: - letter = dtypes[0][dtype] - name = dtypes[1][dtype] - - if (short_summary==0): - print " " - print "------------------------- %s ------------------------" % name - print " " - sys.stdout.flush() - - dtests = ( - ("nep", "sep", "svd", - letter+"ec",letter+"ed",letter+"gg", - letter+"gd",letter+"sb",letter+"sg", - letter+"bb","glm","gqr", - "gsv","csd","lse", - letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp"), - ("Nonsymmetric Eigenvalue Problem", "Symmetric Eigenvalue Problem", "Singular Value Decomposition", - "Eigen Condition","Nonsymmetric Eigenvalue","Nonsymmetric Generalized Eigenvalue Problem", - "Nonsymmetric Generalized Eigenvalue Problem driver", "Symmetric Eigenvalue Problem", "Symmetric Eigenvalue Generalized Problem", - "Banded Singular Value Decomposition routines", "Generalized Linear Regression Model routines", "Generalized QR and RQ factorization routines", - "Generalized Singular Value Decomposition routines", "CS Decomposition routines", "Constrained Linear Least Squares routines", - "Linear Equation routines", "Mixed Precision linear equation routines","RFP linear equation routines"), - (letter+"nep", letter+"sep", letter+"svd", - letter+"ec",letter+"ed",letter+"gg", - letter+"gd",letter+"sb",letter+"sg", - letter+"bb",letter+"glm",letter+"gqr", - letter+"gsv",letter+"csd",letter+"lse", - letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp"), - ) - - - for dtest in range_test: - nb_of_test=0 - # NEED TO SKIP SOME PRECISION (namely s and c) FOR PROTO MIXED PRECISION TESTING - if dtest==16 and (letter=="s" or letter=="c"): - continue - if (with_file==1): - cmdbase=dtests[2][dtest]+".out" - else: - if dtest==15: - # LIN TESTS - cmdbase="xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" - elif dtest==16: - # PROTO LIN TESTS - cmdbase="xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" - elif dtest==17: - # PROTO LIN TESTS - cmdbase="xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + letter = dtypes[0][dtype] + name = dtypes[1][dtype] + + if (short_summary==0): + print(" ") + print("------------------------- %s ------------------------" % name) + print(" ") + sys.stdout.flush() + + dtests = ( + ("nep", "sep", "svd", + letter+"ec",letter+"ed",letter+"gg", + letter+"gd",letter+"sb",letter+"sg", + letter+"bb","glm","gqr", + "gsv","csd","lse", + letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp"), + ("Nonsymmetric Eigenvalue Problem", "Symmetric Eigenvalue Problem", "Singular Value Decomposition", + "Eigen Condition","Nonsymmetric Eigenvalue","Nonsymmetric Generalized Eigenvalue Problem", + "Nonsymmetric Generalized Eigenvalue Problem driver", "Symmetric Eigenvalue Problem", "Symmetric Eigenvalue Generalized Problem", + "Banded Singular Value Decomposition routines", "Generalized Linear Regression Model routines", "Generalized QR and RQ factorization routines", + "Generalized Singular Value Decomposition routines", "CS Decomposition routines", "Constrained Linear Least Squares routines", + "Linear Equation routines", "Mixed Precision linear equation routines","RFP linear equation routines"), + (letter+"nep", letter+"sep", letter+"svd", + letter+"ec",letter+"ed",letter+"gg", + letter+"gd",letter+"sb",letter+"sg", + letter+"bb",letter+"glm",letter+"gqr", + letter+"gsv",letter+"csd",letter+"lse", + letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp"), + ) + + + for dtest in range_test: + nb_of_test=0 + # NEED TO SKIP SOME PRECISION (namely s and c) FOR PROTO MIXED PRECISION TESTING + if dtest==16 and (letter=="s" or letter=="c"): + continue + if (with_file==1): + cmdbase=dtests[2][dtest]+".out" else: - # EIG TESTS - cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" - if (not just_errors and not short_summary): - print "--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]" - # Run the process: either to read the file or run the LAPACK testing - nb_test = run_summary_test(f, cmdbase, short_summary) - list_results[0][dtype]+=nb_test[0] - list_results[1][dtype]+=nb_test[1] - list_results[2][dtype]+=nb_test[2] - list_results[3][dtype]+=nb_test[3] - got_error=nb_test[1]+nb_test[2]+nb_test[3] - - if (not short_summary): - if (nb_test[0]>0 and just_errors==0): - print "--> Tests passed: "+str(nb_test[0]) - if (nb_test[1]>0): - print "--> Tests failing to pass the threshold: "+str(nb_test[1]) - if (nb_test[2]>0): - print "--> Illegal Error: "+str(nb_test[2]) - if (nb_test[3]>0): - print "--> Info Error: "+str(nb_test[3]) - if (got_error>0 and just_errors==1): - print "ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]" - print "" - if (just_errors==0): - print "" + if dtest==15: + # LIN TESTS + cmdbase="xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + elif dtest==16: + # PROTO LIN TESTS + cmdbase="xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + elif dtest==17: + # PROTO LIN TESTS + cmdbase="xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + else: + # EIG TESTS + cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + if (not just_errors and not short_summary): + print("--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]") + # Run the process: either to read the file or run the LAPACK testing + nb_test = run_summary_test(f, cmdbase, short_summary) + list_results[0][dtype]+=nb_test[0] + list_results[1][dtype]+=nb_test[1] + list_results[2][dtype]+=nb_test[2] + list_results[3][dtype]+=nb_test[3] + got_error=nb_test[1]+nb_test[2]+nb_test[3] + + if (not short_summary): + if (nb_test[0]>0 and just_errors==0): + print("--> Tests passed: "+str(nb_test[0])) + if (nb_test[1]>0): + print("--> Tests failing to pass the threshold: "+str(nb_test[1])) + if (nb_test[2]>0): + print("--> Illegal Error: "+str(nb_test[2])) + if (nb_test[3]>0): + print("--> Info Error: "+str(nb_test[3])) + if (got_error>0 and just_errors==1): + print("ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]") + print("") + if (just_errors==0): + print("") # elif (got_error>0): # print dtests[2][dtest]+".out \t"+str(nb_test[1])+"\t"+str(nb_test[2])+"\t"+str(nb_test[3]) - - sys.stdout.flush() - if (list_results[0][dtype] > 0 ): - percent_num_error=float(list_results[1][dtype])/float(list_results[0][dtype])*100 - percent_error=float(list_results[2][dtype]+list_results[3][dtype])/float(list_results[0][dtype])*100 - else: - percent_num_error=0 - percent_error=0 - summary+=name+"\t"+str(list_results[0][dtype])+"\t\t"+str(list_results[1][dtype])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][dtype]+list_results[3][dtype])+"\t("+"%.3f" % percent_error+"%)\t""\n" - list_results[0][4]+=list_results[0][dtype] - list_results[1][4]+=list_results[1][dtype] - list_results[2][4]+=list_results[2][dtype] - list_results[3][4]+=list_results[3][dtype] - + + sys.stdout.flush() + if (list_results[0][dtype] > 0 ): + percent_num_error=float(list_results[1][dtype])/float(list_results[0][dtype])*100 + percent_error=float(list_results[2][dtype]+list_results[3][dtype])/float(list_results[0][dtype])*100 + else: + percent_num_error=0 + percent_error=0 + summary+=name+"\t"+str(list_results[0][dtype])+"\t\t"+str(list_results[1][dtype])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][dtype]+list_results[3][dtype])+"\t("+"%.3f" % percent_error+"%)\t""\n" + list_results[0][4]+=list_results[0][dtype] + list_results[1][4]+=list_results[1][dtype] + list_results[2][4]+=list_results[2][dtype] + list_results[3][4]+=list_results[3][dtype] + if only_numbers==1: - print str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4]) + print(str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4])) else: - print summary - if (list_results[0][4] > 0 ): - percent_num_error=float(list_results[1][4])/float(list_results[0][4])*100 - percent_error=float(list_results[2][4]+list_results[3][4])/float(list_results[0][4])*100 - else: - percent_num_error=0 - percent_error=0 - if (prec=='x'): - print "--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n" - if list_results[0][4] == 0: - print "NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING" + print(summary) + if (list_results[0][4] > 0 ): + percent_num_error=float(list_results[1][4])/float(list_results[0][4])*100 + percent_error=float(list_results[2][4]+list_results[3][4])/float(list_results[0][4])*100 + else: + percent_num_error=0 + percent_error=0 + if (prec=='x'): + print("--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n") + if list_results[0][4] == 0: + print("NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING") # This may close the sys.stdout stream, so make it the last statement f.close() |