Add tests for DMD (Reference-LAPACK PR 736)

This commit is contained in:
Martin Kroeker 2023-12-05 15:45:59 +01:00 committed by GitHub
parent fa03e5497a
commit c5fa318add
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 43 additions and 42 deletions

View File

@ -1,31 +1,29 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
###############################################################################
# lapack_testing.py
###############################################################################
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:b:srep:t:n",
["help", "dir", "bin", "short", "run", "error","prec=","test=","number"])
["help", "dir=", "bin=", "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
just_errors = 0
short_summary = False
with_file = True
just_errors = False
prec='x'
test='all'
only_numbers=0
only_numbers = False
test_dir='TESTING'
bin_dir='bin/Release'
@ -34,10 +32,9 @@ for o, a in opts:
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(" - b [bin] is to indicate where is the LAPACK binary files are located. By default, the script will use .")
print(" - d [dir] indicates the location of the LAPACK testing directory (.out files). By default, the script will use {:s}.".format(test_dir))
print(" - b [bin] indicates the location of the LAPACK binary files. By default, the script will use {:s}.".format(bin_dir))
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)")
@ -63,15 +60,14 @@ for o, a in opts:
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
short_summary = True
if o in ("-r", "--run"):
with_file = 0
with_file = False
if o in ("-e", "--error"):
just_errors = 1
just_errors = True
if o in ( '-p', '--prec' ):
prec = a
if o in ( '-b', '--bin' ):
@ -81,12 +77,12 @@ for o, a in opts:
if o in ( '-t', '--test' ):
test = a
if o in ( '-n', '--number' ):
only_numbers = 1
short_summary = 1
only_numbers = True
short_summary = True
# process options
abs_bin_dir=os.path.normpath(os.path.join(os.getcwd(),bin_dir))
abs_bin_dir=os.path.abspath(bin_dir)
os.chdir(test_dir)
@ -108,7 +104,7 @@ def run_summary_test( f, cmdline, short_summary):
nb_test_illegal=0
nb_test_info=0
if (with_file):
if with_file:
if not os.path.exists(cmdline):
error_message=cmdline+" file not found"
r=1
@ -145,16 +141,16 @@ def run_summary_test( f, cmdline, short_summary):
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=' ')
if not short_summary: 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=' ')
if not short_summary: print(line, end=' ')
nb_test_illegal+=1
if (line.find(" INFO")!=-1):
if (short_summary==0):print(line, end=' ')
if not short_summary: print(line, end=' ')
nb_test_info+=1
if (with_file==1):
if with_file:
pipe.close()
f.flush();
@ -169,7 +165,7 @@ try:
except IOError:
f = sys.stdout
if (short_summary==0):
if not short_summary:
print(" ")
print("---------------- Testing LAPACK Routines ----------------")
print(" ")
@ -203,6 +199,8 @@ elif test=='mixed':
range_prec=[1,3]
elif test=='rfp':
range_test=[18]
elif test=='dmd':
range_test=[20]
elif test=='eig':
range_test=list(range(16))
else:
@ -219,7 +217,7 @@ for dtype in range_prec:
letter = dtypes[0][dtype]
name = dtypes[1][dtype]
if (short_summary==0):
if not short_summary:
print(" ")
print("------------------------- %s ------------------------" % name)
print(" ")
@ -231,19 +229,19 @@ for dtype in range_prec:
letter+"gd",letter+"sb",letter+"sg",
letter+"bb","glm","gqr",
"gsv","csd","lse",
letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp"),
letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp",letter+"dmd"),
("Nonsymmetric-Eigenvalue-Problem", "Symmetric-Eigenvalue-Problem", "Symmetric-Eigenvalue-Problem-2-stage", "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"),
"Linear-Equation-routines", "Mixed-Precision-linear-equation-routines","RFP-linear-equation-routines","Dynamic-Mode-Decomposition"),
(letter+"nep", letter+"sep", letter+"se2", 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"),
letter+"test", letter+dtypes[0][dtype-1]+"test",letter+"test_rfp",letter+"dmd"),
)
@ -252,22 +250,25 @@ for dtype in range_prec:
# NEED TO SKIP SOME PRECISION (namely s and c) FOR PROTO MIXED PRECISION TESTING
if dtest==17 and (letter=="s" or letter=="c"):
continue
if (with_file==1):
if with_file:
cmdbase=dtests[2][dtest]+".out"
else:
if dtest==16:
# LIN TESTS
cmdbase="LIN/xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
cmdbase="xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
elif dtest==17:
# PROTO LIN TESTS
cmdbase="LIN/xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
cmdbase="xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
elif dtest==18:
# PROTO LIN TESTS
cmdbase="LIN/xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
cmdbase="xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
elif dtest==20:
# DMD EIG TESTS
cmdbase="xdmdeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
else:
# EIG TESTS
cmdbase="EIG/xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
if (not just_errors and not short_summary):
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, end=' ')
# Run the process: either to read the file or run the LAPACK testing
nb_test = run_summary_test(f, cmdbase, short_summary)
@ -277,19 +278,19 @@ for dtype in range_prec:
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):
if not short_summary:
if nb_test[0] > 0 and not just_errors:
print("passed: "+str(nb_test[0]))
if (nb_test[1]>0):
if nb_test[1] > 0:
print("failing to pass the threshold: "+str(nb_test[1]))
if (nb_test[2]>0):
if nb_test[2] > 0:
print("Illegal Error: "+str(nb_test[2]))
if (nb_test[3]>0):
if nb_test[3] > 0:
print("Info Error: "+str(nb_test[3]))
if (got_error>0 and just_errors==1):
if got_error > 0 and just_errors:
print("ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]")
print("")
if (just_errors==0):
if not just_errors:
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])
@ -307,7 +308,7 @@ for dtype in range_prec:
list_results[2][4]+=list_results[2][dtype]
list_results[3][4]+=list_results[3][dtype]
if only_numbers==1:
if only_numbers:
print(str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4]))
else:
print(summary)