Source code for hynet.test.installation

"""
Regression test to verify the proper installation of *hynet* at the user.
"""

from hynet.types_ import SolverType, SolverStatus
from hynet.solver import AVAILABLE_SOLVERS
from hynet.opf.calc import calc_opf
from hynet.test.regression import OPFVerificationData, verify_opf_result
from hynet.test.system import TEST_SYSTEM, REFERENCE_SOLUTION


[docs]def test_installation(verbose=True): # pylint: disable=too-many-branches """ Verify the OPF solution of a test system for all available solvers. Parameters ---------- verbose : bool, optional If True (default), the test is documented to the standard output. Returns ------- success : bool True if the test was passed, False otherwise. """ if not AVAILABLE_SOLVERS: if verbose: print("ERROR: No supported solvers were found.") return False try: solvers = [solver_class() for solver_class in AVAILABLE_SOLVERS] except Exception as exception: # pylint: disable=broad-except if verbose: print("ERROR: " + str(exception)) return False success = True width = max([len(str(solver)) for solver in solvers]) + 3 for solver in solvers: solver_name = str(solver) message = solver_name + ' ' + '.'*(width - len(solver_name)) + ' ' try: result = calc_opf(TEST_SYSTEM, solver=solver) except Exception as exception: # pylint: disable=broad-except if verbose: print(message + "ERROR: " + str(exception)) success = False continue if result.solver_status != SolverStatus.SOLVED: message += ("ERROR: Solver failed with status '" + result.solver_status.name + "'.") success = False elif result.empty: message += "ERROR: The solver did not return any result data." success = False else: tolerance = 5e-4 if solver.type == SolverType.QCQP else 5e-3 try: verify_opf_result(OPFVerificationData.create(result), REFERENCE_SOLUTION, tolerance) except ValueError as exception: message += "ERROR: " + str(exception) success = False else: message += "OK" if verbose: print(message) return success