Skip to content

lapack_testing.py: python2 explicit in hashbang #489

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Feb 20, 2021
Merged
11 changes: 6 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,14 @@ option(BUILD_TESTING "Build tests" ${_is_coverage_build})
include(CTest)
message(STATUS "Build tests: ${BUILD_TESTING}")

# lapack_testing.py uses features from python 2.7 and greater
if(BUILD_TESTING)
set(_msg "Looking for Python >= 2.7 needed for summary tests")
set(_msg "Looking for Python3 needed for summary tests")
message(STATUS "${_msg}")
find_package(PythonInterp 2.7 QUIET)
if(PYTHONINTERP_FOUND)
message(STATUS "${_msg} - found (${PYTHON_VERSION_STRING})")
# find_package(PythonInterp 3) cannot be used because /usr/bin/python may be
# a Python2 interpreter.
find_program(PYTHON_EXECUTABLE python3)
if(PYTHON_EXECUTABLE)
message(STATUS "${_msg} - found")
else()
message(STATUS "${_msg} - not found (skipping summary tests)")
endif()
Expand Down
5 changes: 2 additions & 3 deletions CTestCustom.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,9 @@ set(CTEST_CUSTOM_WARNING_EXCEPTION
"Warning: File .* has modification time .* in the future"
)

# Only rung post test if suitable python interpreter was found
set(PYTHONINTERP_FOUND @PYTHONINTERP_FOUND@)
# Only run post test if suitable python interpreter was found
set(PYTHON_EXECUTABLE @PYTHON_EXECUTABLE@)
if(PYTHONINTERP_FOUND)
if(PYTHON_EXECUTABLE)
set(CTEST_CUSTOM_POST_TEST "${PYTHON_EXECUTABLE} ./lapack_testing.py -s -d TESTING")
endif()

36 changes: 22 additions & 14 deletions TESTING/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,20 @@ if(MSVC_VERSION)
endif()
add_subdirectory(LIN)
add_subdirectory(EIG)
macro(add_lapack_test output input target)


# Only run this test if python 3 is found
if(PYTHON_EXECUTABLE)
message(STATUS "Running Summary")
file(COPY ${LAPACK_SOURCE_DIR}/lapack_testing.py DESTINATION ${LAPACK_BINARY_DIR})
add_test(
NAME LAPACK_Test_Summary
WORKING_DIRECTORY ${LAPACK_BINARY_DIR}
COMMAND ${PYTHON_EXECUTABLE} "lapack_testing.py"
)
endif()

function(add_lapack_test output input target)
set(TEST_INPUT "${LAPACK_SOURCE_DIR}/TESTING/${input}")
set(TEST_OUTPUT "${LAPACK_BINARY_DIR}/TESTING/${output}")
string(REPLACE "." "_" input_name ${input})
Expand All @@ -18,8 +31,15 @@ macro(add_lapack_test output input target)
-DOUTPUT=${TEST_OUTPUT}
-DINTDIR=${CMAKE_CFG_INTDIR}
-P "${LAPACK_SOURCE_DIR}/TESTING/runtest.cmake")

if(PYTHONINTERP_FOUND)
set_property(
TEST LAPACK_Test_Summary
APPEND PROPERTY DEPENDS LAPACK-${testName}
)
endif()
endif()
endmacro()
endfunction()

if(BUILD_SINGLE)
add_lapack_test(stest.out stest.in xlintsts)
Expand Down Expand Up @@ -156,15 +176,3 @@ if(BUILD_COMPLEX AND BUILD_COMPLEX16)
# ======== COMPLEX-COMPLEX16 LIN TESTS ========================
add_lapack_test(zctest.out zctest.in xlintstzc)
endif()

# ==============================================================================
# Only run this test if python 2.7 or greater is found
if(PYTHONINTERP_FOUND)
message(STATUS "Running Summary")
file(COPY ${LAPACK_SOURCE_DIR}/lapack_testing.py DESTINATION ${LAPACK_BINARY_DIR})
add_test(
NAME LAPACK_Test_Summary
WORKING_DIRECTORY ${LAPACK_BINARY_DIR}
COMMAND ${PYTHON_EXECUTABLE} "lapack_testing.py"
)
endif()
65 changes: 31 additions & 34 deletions lapack_testing.py
Original file line number Diff line number Diff line change
@@ -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'

Expand All @@ -34,10 +32,9 @@
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)")
Expand Down Expand Up @@ -67,11 +64,11 @@
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' ):
Expand All @@ -81,12 +78,12 @@
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)

Expand All @@ -108,7 +105,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
Expand Down Expand Up @@ -145,16 +142,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();
Expand All @@ -169,7 +166,7 @@ def run_summary_test( f, cmdline, short_summary):
except IOError:
f = sys.stdout

if (short_summary==0):
if not short_summary:
print(" ")
print("---------------- Testing LAPACK Routines ----------------")
print(" ")
Expand Down Expand Up @@ -219,7 +216,7 @@ def run_summary_test( f, cmdline, short_summary):
letter = dtypes[0][dtype]
name = dtypes[1][dtype]

if (short_summary==0):
if not short_summary:
print(" ")
print("------------------------- %s ------------------------" % name)
print(" ")
Expand Down Expand Up @@ -252,7 +249,7 @@ def run_summary_test( f, cmdline, short_summary):
# 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:
Expand All @@ -267,7 +264,7 @@ def run_summary_test( f, cmdline, short_summary):
else:
# EIG TESTS
cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
if (not just_errors and not short_summary):
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)
Expand All @@ -277,19 +274,19 @@ def run_summary_test( f, cmdline, short_summary):
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])
Expand All @@ -307,7 +304,7 @@ def run_summary_test( f, cmdline, short_summary):
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)
Expand Down