# ___________________________________________________________________________ import os import pyomo.common.unittest as unittest import pyomo.environ as pyo import math from pyomo.contrib.pynumero.dependencies import (numpy as np, numpy_available, scipy, scipy_available) from pyomo.common.dependencies.scipy import sparse as spa if not (numpy_available and scipy_available): raise unittest.SkipTest("Pynumero needs scipy and numpy to run NLP tests") from pyomo.contrib.pynumero.asl import AmplInterface if not AmplInterface.available(): raise unittest.SkipTest( "Pynumero needs the ASL extension to run CyIpoptSolver tests") from pyomo.contrib.pynumero.algorithms.solvers.cyipopt_solver import ( CyIpoptSolver, CyIpoptNLP, cyipopt_available, ) from pyomo.contrib.pynumero.interfaces.external_grey_box import ExternalGreyBoxModel, ExternalGreyBoxBlock from pyomo.contrib.pynumero.interfaces.pyomo_nlp import PyomoGreyBoxNLP, PyomoNLP from pyomo.contrib.pynumero.interfaces.pyomo_grey_box_nlp import PyomoNLPWithGreyBoxBlocks from pyomo.contrib.pynumero.interfaces.tests.compare_utils import check_vectors_specific_order, check_sparse_matrix_specific_order
import pyutilib.th as unittest import pyomo.environ as pe from pyomo.opt import check_optimal_termination from pyomo.common.dependencies import attempt_import np, numpy_available = attempt_import('numpy', 'inverse_reduced_hessian numpy', minimum_version='1.13.0') scipy, scipy_available = attempt_import( 'scipy', 'inverse_reduced_hessian requires scipy') if numpy_available: from pyomo.contrib.pynumero.asl import AmplInterface asl_available = AmplInterface.available() else: asl_available = False if not (numpy_available and scipy_available and asl_available): raise unittest.SkipTest( 'inverse_reduced_hessian tests require numpy, scipy, and asl') from pyomo.common.dependencies import (pandas as pd, pandas_available) import pyomo.environ as pe ipopt_solver = pe.SolverFactory('ipopt') if not ipopt_solver.available(exception_flag=False): raise unittest.SkipTest('ipopt is not available') numdiff_available = True try: import numdifftools as nd except: numdiff_available = False
from pyomo.contrib.incidence_analysis.tests.models_for_testing import ( make_gas_expansion_model, make_degenerate_solid_phase_model, ) if scipy_available: from pyomo.contrib.pynumero.interfaces.pyomo_nlp import PyomoNLP if networkx_available: from networkx.algorithms.bipartite.matrix import from_biadjacency_matrix from pyomo.contrib.pynumero.asl import AmplInterface import pyomo.common.unittest as unittest @unittest.skipUnless(networkx_available, "networkx is not available.") @unittest.skipUnless(scipy_available, "scipy is not available.") @unittest.skipUnless(AmplInterface.available(), "pynumero_ASL is not available") class TestGasExpansionNumericIncidenceMatrix(unittest.TestCase): """ This class tests the get_numeric_incidence_matrix function on the gas expansion model. """ def test_incidence_matrix(self): N = 5 model = make_gas_expansion_model(N) all_vars = list(model.component_data_objects(pyo.Var)) all_cons = list(model.component_data_objects(pyo.Constraint)) imat = get_numeric_incidence_matrix(all_vars, all_cons) n_var = 4 * (N + 1) n_con = 4 * N + 1 self.assertEqual(imat.shape, (n_con, n_var))