From 634954d2a0791067bd4b596bed24e42a47a2aebe Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 15:36:27 +0200 Subject: [PATCH 01/15] First attempt to run Julia tests on custom subset of instances --- .github/julia/MINLPTests/LPs.txt | 2 + .github/julia/MINLPTests/NLPs.txt | 66 ++++ .../julia/MINLPTests/bound-constrained.txt | 3 + .../julia/MINLPTests/equality-constrained.txt | 2 + .github/julia/MINLPTests/general.txt | 63 ++++ .github/julia/MOI/LPs.txt | 220 +++++++++++++ .github/julia/MOI/NLPs.txt | 226 ++++++++++++++ .github/julia/MOI/bound-constrained.txt | 131 ++++++++ .github/julia/MOI/equality-constrained.txt | 22 ++ .github/julia/MOI/general.txt | 293 ++++++++++++++++++ .github/julia/runtests_uno_ipopt_mumps.jl | 30 +- 11 files changed, 1051 insertions(+), 7 deletions(-) create mode 100644 .github/julia/MINLPTests/LPs.txt create mode 100644 .github/julia/MINLPTests/NLPs.txt create mode 100644 .github/julia/MINLPTests/bound-constrained.txt create mode 100644 .github/julia/MINLPTests/equality-constrained.txt create mode 100644 .github/julia/MINLPTests/general.txt create mode 100644 .github/julia/MOI/LPs.txt create mode 100644 .github/julia/MOI/NLPs.txt create mode 100644 .github/julia/MOI/bound-constrained.txt create mode 100644 .github/julia/MOI/equality-constrained.txt create mode 100644 .github/julia/MOI/general.txt diff --git a/.github/julia/MINLPTests/LPs.txt b/.github/julia/MINLPTests/LPs.txt new file mode 100644 index 000000000..3c9d0b6ca --- /dev/null +++ b/.github/julia/MINLPTests/LPs.txt @@ -0,0 +1,2 @@ +nlp_cvx_expr_001_010 +nlp_cvx_expr_002_010 \ No newline at end of file diff --git a/.github/julia/MINLPTests/NLPs.txt b/.github/julia/MINLPTests/NLPs.txt new file mode 100644 index 000000000..6cca01706 --- /dev/null +++ b/.github/julia/MINLPTests/NLPs.txt @@ -0,0 +1,66 @@ +nlp_expr_001_010 +nlp_expr_002_010 +nlp_expr_003_010 +nlp_expr_003_011 +nlp_expr_003_012 +nlp_expr_003_013 +nlp_expr_003_014 +nlp_expr_003_016 +nlp_expr_004_010 +nlp_expr_004_011 +nlp_expr_005_010 +nlp_expr_007_010 +nlp_expr_008_010 +nlp_expr_009_010 +nlp_expr_009_011 +nlp_cvx_expr_001_011 +nlp_cvx_expr_002_011 +nlp_cvx_expr_101_010 +nlp_cvx_expr_101_011 +nlp_cvx_expr_101_012 +nlp_cvx_expr_102_010 +nlp_cvx_expr_102_011 +nlp_cvx_expr_102_012 +nlp_cvx_expr_102_013 +nlp_cvx_expr_102_014 +nlp_cvx_expr_103_010 +nlp_cvx_expr_103_011 +nlp_cvx_expr_103_012 +nlp_cvx_expr_103_013 +nlp_cvx_expr_103_014 +nlp_cvx_expr_104_010 +nlp_cvx_expr_105_010 +nlp_cvx_expr_105_011 +nlp_cvx_expr_105_012 +nlp_cvx_expr_105_013 +nlp_cvx_expr_106_010 +nlp_cvx_expr_106_011 +nlp_cvx_expr_107_010 +nlp_cvx_expr_107_011 +nlp_cvx_expr_107_012 +nlp_cvx_expr_108_010 +nlp_cvx_expr_108_011 +nlp_cvx_expr_108_012 +nlp_cvx_expr_108_013 +nlp_cvx_expr_109_010 +nlp_cvx_expr_109_011 +nlp_cvx_expr_109_012 +nlp_cvx_expr_110_010 +nlp_cvx_expr_110_011 +nlp_cvx_expr_110_012 +nlp_cvx_expr_201_010 +nlp_cvx_expr_201_011 +nlp_cvx_expr_202_010 +nlp_cvx_expr_202_011 +nlp_cvx_expr_202_012 +nlp_cvx_expr_202_013 +nlp_cvx_expr_202_014 +nlp_cvx_expr_203_010 +nlp_cvx_expr_204_010 +nlp_cvx_expr_205_010 +nlp_cvx_expr_206_010 +nlp_cvx_expr_210_010 +nlp_cvx_expr_210_011 +nlp_cvx_expr_210_012 +nlp_cvx_expr_501_010 +nlp_cvx_expr_501_011 \ No newline at end of file diff --git a/.github/julia/MINLPTests/bound-constrained.txt b/.github/julia/MINLPTests/bound-constrained.txt new file mode 100644 index 000000000..ead5d4c74 --- /dev/null +++ b/.github/julia/MINLPTests/bound-constrained.txt @@ -0,0 +1,3 @@ +nlp_expr_001_010 +nlp_expr_009_010 +nlp_expr_009_011 \ No newline at end of file diff --git a/.github/julia/MINLPTests/equality-constrained.txt b/.github/julia/MINLPTests/equality-constrained.txt new file mode 100644 index 000000000..ad364a7c5 --- /dev/null +++ b/.github/julia/MINLPTests/equality-constrained.txt @@ -0,0 +1,2 @@ +nlp_expr_002_010 +nlp_expr_007_010 \ No newline at end of file diff --git a/.github/julia/MINLPTests/general.txt b/.github/julia/MINLPTests/general.txt new file mode 100644 index 000000000..8b81a16c2 --- /dev/null +++ b/.github/julia/MINLPTests/general.txt @@ -0,0 +1,63 @@ +nlp_expr_003_010 +nlp_expr_003_011 +nlp_expr_003_012 +nlp_expr_003_013 +nlp_expr_003_014 +nlp_expr_003_016 +nlp_expr_004_010 +nlp_expr_004_011 +nlp_expr_005_010 +nlp_expr_008_010 +nlp_cvx_expr_001_010 +nlp_cvx_expr_001_011 +nlp_cvx_expr_002_010 +nlp_cvx_expr_002_011 +nlp_cvx_expr_101_010 +nlp_cvx_expr_101_011 +nlp_cvx_expr_101_012 +nlp_cvx_expr_102_010 +nlp_cvx_expr_102_011 +nlp_cvx_expr_102_012 +nlp_cvx_expr_102_013 +nlp_cvx_expr_102_014 +nlp_cvx_expr_103_010 +nlp_cvx_expr_103_011 +nlp_cvx_expr_103_012 +nlp_cvx_expr_103_013 +nlp_cvx_expr_103_014 +nlp_cvx_expr_104_010 +nlp_cvx_expr_105_010 +nlp_cvx_expr_105_011 +nlp_cvx_expr_105_012 +nlp_cvx_expr_105_013 +nlp_cvx_expr_106_010 +nlp_cvx_expr_106_011 +nlp_cvx_expr_107_010 +nlp_cvx_expr_107_011 +nlp_cvx_expr_107_012 +nlp_cvx_expr_108_010 +nlp_cvx_expr_108_011 +nlp_cvx_expr_108_012 +nlp_cvx_expr_108_013 +nlp_cvx_expr_109_010 +nlp_cvx_expr_109_011 +nlp_cvx_expr_109_012 +nlp_cvx_expr_110_010 +nlp_cvx_expr_110_011 +nlp_cvx_expr_110_012 +nlp_cvx_expr_201_010 +nlp_cvx_expr_201_011 +nlp_cvx_expr_202_010 +nlp_cvx_expr_202_011 +nlp_cvx_expr_202_012 +nlp_cvx_expr_202_013 +nlp_cvx_expr_202_014 +nlp_cvx_expr_203_010 +nlp_cvx_expr_204_010 +nlp_cvx_expr_205_010 +nlp_cvx_expr_206_010 +nlp_cvx_expr_210_010 +nlp_cvx_expr_210_011 +nlp_cvx_expr_210_012 +nlp_cvx_expr_501_010 +nlp_cvx_expr_501_011 \ No newline at end of file diff --git a/.github/julia/MOI/LPs.txt b/.github/julia/MOI/LPs.txt new file mode 100644 index 000000000..78c82ced8 --- /dev/null +++ b/.github/julia/MOI/LPs.txt @@ -0,0 +1,220 @@ +test_DualObjectiveValue_Max_ScalarAffine_LessThan +test_DualObjectiveValue_Max_VariableIndex_LessThan +test_DualObjectiveValue_Min_ScalarAffine_GreaterThan +test_DualObjectiveValue_Min_VariableIndex_GreaterThan +test_add_constrained_variables_vector +test_add_parameter +test_attribute_AbsoluteGapTolerance +test_attribute_NodeLimit +test_attribute_NumberThreads +test_attribute_ObjectiveLimit +test_attribute_RawStatusString +test_attribute_RelativeGapTolerance +test_attribute_Silent +test_attribute_SolutionLimit +test_attribute_SolveTimeSec +test_attribute_SolverName +test_attribute_TimeLimitSec +test_attribute_after_empty +test_attribute_unsupported_constraint +test_basic_ScalarAffineFunction_EqualTo +test_basic_ScalarAffineFunction_GreaterThan +test_basic_ScalarAffineFunction_Interval +test_basic_ScalarAffineFunction_LessThan +test_basic_VariableIndex_EqualTo +test_basic_VariableIndex_GreaterThan +test_basic_VariableIndex_Interval +test_basic_VariableIndex_LessThan +test_basic_VectorAffineFunction_AllDifferent +test_basic_VectorAffineFunction_BinPacking +test_basic_VectorAffineFunction_Circuit +test_basic_VectorAffineFunction_Complements +test_basic_VectorAffineFunction_CountAtLeast +test_basic_VectorAffineFunction_CountBelongs +test_basic_VectorAffineFunction_CountDistinct +test_basic_VectorAffineFunction_CountGreaterThan +test_basic_VectorAffineFunction_Cumulative +test_basic_VectorAffineFunction_HyperRectangle +test_basic_VectorAffineFunction_Nonnegatives +test_basic_VectorAffineFunction_Nonpositives +test_basic_VectorAffineFunction_NormInfinityCone +test_basic_VectorAffineFunction_NormOneCone +test_basic_VectorAffineFunction_Path +test_basic_VectorAffineFunction_Table +test_basic_VectorAffineFunction_Zeros +test_basic_VectorOfVariables_AllDifferent +test_basic_VectorOfVariables_BinPacking +test_basic_VectorOfVariables_Circuit +test_basic_VectorOfVariables_Complements +test_basic_VectorOfVariables_CountAtLeast +test_basic_VectorOfVariables_CountBelongs +test_basic_VectorOfVariables_CountDistinct +test_basic_VectorOfVariables_CountGreaterThan +test_basic_VectorOfVariables_Cumulative +test_basic_VectorOfVariables_HyperRectangle +test_basic_VectorOfVariables_Nonnegatives +test_basic_VectorOfVariables_Nonpositives +test_basic_VectorOfVariables_NormInfinityCone +test_basic_VectorOfVariables_NormOneCone +test_basic_VectorOfVariables_Path +test_basic_VectorOfVariables_Table +test_basic_VectorOfVariables_Zeros +test_conic_NormInfinityCone_3 +test_conic_NormInfinityCone_INFEASIBLE +test_conic_NormInfinityCone_VectorAffineFunction +test_conic_NormInfinityCone_VectorOfVariables +test_conic_NormOneCone +test_conic_NormOneCone_INFEASIBLE +test_conic_NormOneCone_VectorAffineFunction +test_conic_NormOneCone_VectorOfVariables +test_conic_linear_INFEASIBLE +test_conic_linear_INFEASIBLE_2 +test_conic_linear_VectorAffineFunction +test_conic_linear_VectorAffineFunction_2 +test_conic_linear_VectorOfVariables +test_conic_linear_VectorOfVariables_2 +test_constraint_ConstraintDualStart +test_constraint_ConstraintPrimalStart +test_constraint_ScalarAffineFunction_EqualTo +test_constraint_ScalarAffineFunction_GreaterThan +test_constraint_ScalarAffineFunction_Interval +test_constraint_ScalarAffineFunction_LessThan +test_constraint_ScalarAffineFunction_duplicate +test_constraint_VectorAffineFunction_duplicate +test_constraint_get_ConstraintIndex +test_linear_DUAL_INFEASIBLE +test_linear_DUAL_INFEASIBLE_2 +test_linear_FEASIBILITY_SENSE +test_linear_HyperRectangle_VectorAffineFunction +test_linear_HyperRectangle_VectorOfVariables +test_linear_INFEASIBLE +test_linear_INFEASIBLE_2 +test_linear_Interval_inactive +test_linear_LessThan_and_GreaterThan +test_linear_VariablePrimalStart_partial +test_linear_VectorAffineFunction +test_linear_VectorAffineFunction_empty_row +test_linear_add_constraints +test_linear_complex_Zeros +test_linear_complex_Zeros_duplicate +test_linear_inactive_bounds +test_linear_integration +test_linear_integration_2 +test_linear_integration_Interval +test_linear_integration_delete_variables +test_linear_integration_modification +test_linear_modify_GreaterThan_and_LessThan_constraints +test_linear_open_intervals +test_linear_transform +test_linear_variable_open_intervals +test_model_ListOfConstraintAttributesSet +test_model_ListOfConstraintsWithAttributeSet +test_model_ListOfVariablesWithAttributeSet +test_model_LowerBoundAlreadySet +test_model_ModelFilter_AbstractConstraintAttribute +test_model_ModelFilter_AbstractModelAttribute +test_model_ModelFilter_AbstractVariableAttribute +test_model_ModelFilter_ListOfConstraintIndices +test_model_ModelFilter_ListOfConstraintTypesPresent +test_model_Name +test_model_Name_VariableName_ConstraintName +test_model_ScalarAffineFunction_ConstraintName +test_model_ScalarFunctionConstantNotZero +test_model_UpperBoundAlreadySet +test_model_VariableIndex_ConstraintName +test_model_VariableName +test_model_VariablePrimalStart +test_model_add_constrained_variable_tuple +test_model_copy_to_UnsupportedAttribute +test_model_copy_to_UnsupportedConstraint +test_model_default_DualStatus +test_model_default_ObjectiveSense +test_model_default_PrimalStatus +test_model_default_TerminationStatus +test_model_delete +test_model_duplicate_ScalarAffineFunction_ConstraintName +test_model_duplicate_VariableName +test_model_empty +test_model_ordered_indices +test_model_show +test_model_supports_constraint_ScalarAffineFunction_EqualTo +test_model_supports_constraint_VariableIndex_EqualTo +test_model_supports_constraint_VectorOfVariables_Nonnegatives +test_modification_affine_deletion_edge_cases +test_modification_coef_scalar_objective +test_modification_coef_scalaraffine_lessthan +test_modification_const_scalar_objective +test_modification_const_vectoraffine_nonpos +test_modification_const_vectoraffine_zeros +test_modification_delete_variable_with_single_variable_obj +test_modification_delete_variables_in_a_batch +test_modification_func_scalaraffine_lessthan +test_modification_func_vectoraffine_nonneg +test_modification_incorrect +test_modification_incorrect_VariableIndex +test_modification_mathoptinterface_issue_2452 +test_modification_multirow_vectoraffine_nonpos +test_modification_set_function_single_variable +test_modification_set_scalaraffine_lessthan +test_modification_set_singlevariable_lessthan +test_modification_transform_singlevariable_lessthan +test_multi_objective_solve_and_objective_value +test_multiobjective_vector_affine_function +test_multiobjective_vector_affine_function_delete +test_multiobjective_vector_affine_function_delete_vector +test_multiobjective_vector_affine_function_modify +test_multiobjective_vector_of_variables +test_multiobjective_vector_of_variables_delete +test_multiobjective_vector_of_variables_delete_all +test_multiobjective_vector_of_variables_delete_vector +test_nonlinear_Feasibility_internal +test_nonlinear_HS071_internal +test_nonlinear_InvalidEvaluator_internal +test_objective_FEASIBILITY_SENSE_clears_objective +test_objective_ObjectiveFunction_VariableIndex +test_objective_ObjectiveFunction_blank +test_objective_ObjectiveFunction_constant +test_objective_ObjectiveFunction_duplicate_terms +test_objective_ObjectiveSense_FEASIBILITY_SENSE +test_objective_ObjectiveSense_MAX_SENSE +test_objective_ObjectiveSense_MIN_SENSE +test_objective_ObjectiveSense_in_ListOfModelAttributesSet +test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet +test_objective_VariableIndex_in_ListOfModelAttributesSet +test_objective_set_via_modify +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_lower +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_upper +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_GreaterThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_lower +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_upper +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_LessThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan_max +test_solve_ObjectiveBound_MAX_SENSE_IP +test_solve_ObjectiveBound_MAX_SENSE_LP +test_solve_ObjectiveBound_MIN_SENSE_IP +test_solve_ObjectiveBound_MIN_SENSE_LP +test_solve_TerminationStatus_DUAL_INFEASIBLE +test_solve_VariableIndex_ConstraintDual_MAX_SENSE +test_solve_VariableIndex_ConstraintDual_MIN_SENSE +test_solve_conflict_EqualTo +test_solve_conflict_NOT_IN_CONFLICT +test_solve_conflict_affine_affine +test_solve_conflict_bound_bound +test_solve_conflict_feasible +test_solve_conflict_invalid_interval +test_solve_conflict_two_affine +test_solve_conflict_zeroone +test_solve_conflict_zeroone_2 +test_solve_optimize_twice +test_solve_result_index +test_variable_VariableName +test_variable_add_variable +test_variable_add_variables +test_variable_delete +test_variable_delete_Nonnegatives +test_variable_delete_Nonnegatives_row +test_variable_delete_variables +test_variable_get_VariableIndex +test_variable_solve_with_lowerbound +test_variable_solve_with_upperbound diff --git a/.github/julia/MOI/NLPs.txt b/.github/julia/MOI/NLPs.txt new file mode 100644 index 000000000..30840f258 --- /dev/null +++ b/.github/julia/MOI/NLPs.txt @@ -0,0 +1,226 @@ +test_HermitianPSDCone_basic +test_HermitianPSDCone_min_t +test_NormNuclearCone_VectorAffineFunction_with_transform +test_NormNuclearCone_VectorAffineFunction_without_transform +test_NormNuclearCone_VectorOfVariables_with_transform +test_NormNuclearCone_VectorOfVariables_without_transform +test_NormSpectralCone_VectorAffineFunction_with_transform +test_NormSpectralCone_VectorAffineFunction_without_transform +test_NormSpectralCone_VectorOfVariables_with_transform +test_NormSpectralCone_VectorOfVariables_without_transform +test_VectorNonlinearOracle_LagrangeMultipliers_MAX_SENSE +test_VectorNonlinearOracle_LagrangeMultipliers_MIN_SENSE +test_add_constrained_PositiveSemidefiniteConeTriangle +test_add_constrained_PositiveSemidefiniteConeTriangle_VariableName +test_add_constrained_PositiveSemidefiniteConeTriangle_VariablePrimalStart +test_attribute_VariableBridgingCost +test_basic_ScalarNonlinearFunction_EqualTo +test_basic_ScalarNonlinearFunction_GreaterThan +test_basic_ScalarNonlinearFunction_Interval +test_basic_ScalarNonlinearFunction_LessThan +test_basic_ScalarQuadraticFunction_EqualTo +test_basic_ScalarQuadraticFunction_GreaterThan +test_basic_ScalarQuadraticFunction_Interval +test_basic_ScalarQuadraticFunction_LessThan +test_basic_VectorAffineFunction_DualExponentialCone +test_basic_VectorAffineFunction_DualPowerCone +test_basic_VectorAffineFunction_ExponentialCone +test_basic_VectorAffineFunction_GeometricMeanCone +test_basic_VectorAffineFunction_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_LogDetConeSquare +test_basic_VectorAffineFunction_LogDetConeTriangle +test_basic_VectorAffineFunction_NormCone +test_basic_VectorAffineFunction_NormNuclearCone +test_basic_VectorAffineFunction_NormSpectralCone +test_basic_VectorAffineFunction_PositiveSemidefiniteConeSquare +test_basic_VectorAffineFunction_PositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_PowerCone +test_basic_VectorAffineFunction_RelativeEntropyCone +test_basic_VectorAffineFunction_RootDetConeSquare +test_basic_VectorAffineFunction_RootDetConeTriangle +test_basic_VectorAffineFunction_RotatedSecondOrderCone +test_basic_VectorAffineFunction_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_SecondOrderCone +test_basic_VectorAffineFunction_VectorNonlinearOracle +test_basic_VectorOfVariables_DualExponentialCone +test_basic_VectorOfVariables_DualPowerCone +test_basic_VectorOfVariables_ExponentialCone +test_basic_VectorOfVariables_GeometricMeanCone +test_basic_VectorOfVariables_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_LogDetConeSquare +test_basic_VectorOfVariables_LogDetConeTriangle +test_basic_VectorOfVariables_NormCone +test_basic_VectorOfVariables_NormNuclearCone +test_basic_VectorOfVariables_NormSpectralCone +test_basic_VectorOfVariables_PositiveSemidefiniteConeSquare +test_basic_VectorOfVariables_PositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_PowerCone +test_basic_VectorOfVariables_RelativeEntropyCone +test_basic_VectorOfVariables_RootDetConeSquare +test_basic_VectorOfVariables_RootDetConeTriangle +test_basic_VectorOfVariables_RotatedSecondOrderCone +test_basic_VectorOfVariables_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_SecondOrderCone +test_basic_VectorOfVariables_VectorNonlinearOracle +test_basic_VectorQuadraticFunction_AllDifferent +test_basic_VectorQuadraticFunction_BinPacking +test_basic_VectorQuadraticFunction_Circuit +test_basic_VectorQuadraticFunction_Complements +test_basic_VectorQuadraticFunction_CountAtLeast +test_basic_VectorQuadraticFunction_CountBelongs +test_basic_VectorQuadraticFunction_CountDistinct +test_basic_VectorQuadraticFunction_CountGreaterThan +test_basic_VectorQuadraticFunction_Cumulative +test_basic_VectorQuadraticFunction_DualExponentialCone +test_basic_VectorQuadraticFunction_DualPowerCone +test_basic_VectorQuadraticFunction_ExponentialCone +test_basic_VectorQuadraticFunction_GeometricMeanCone +test_basic_VectorQuadraticFunction_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_HyperRectangle +test_basic_VectorQuadraticFunction_LogDetConeSquare +test_basic_VectorQuadraticFunction_LogDetConeTriangle +test_basic_VectorQuadraticFunction_Nonnegatives +test_basic_VectorQuadraticFunction_Nonpositives +test_basic_VectorQuadraticFunction_NormCone +test_basic_VectorQuadraticFunction_NormInfinityCone +test_basic_VectorQuadraticFunction_NormNuclearCone +test_basic_VectorQuadraticFunction_NormOneCone +test_basic_VectorQuadraticFunction_NormSpectralCone +test_basic_VectorQuadraticFunction_Path +test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeSquare +test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_PowerCone +test_basic_VectorQuadraticFunction_RelativeEntropyCone +test_basic_VectorQuadraticFunction_RootDetConeSquare +test_basic_VectorQuadraticFunction_RootDetConeTriangle +test_basic_VectorQuadraticFunction_RotatedSecondOrderCone +test_basic_VectorQuadraticFunction_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_SecondOrderCone +test_basic_VectorQuadraticFunction_Table +test_basic_VectorQuadraticFunction_VectorNonlinearOracle +test_basic_VectorQuadraticFunction_Zeros +test_conic_DualExponentialCone_VectorAffineFunction +test_conic_DualExponentialCone_VectorOfVariables +test_conic_DualPowerCone_VectorAffineFunction +test_conic_DualPowerCone_VectorOfVariables +test_conic_Exponential_VectorAffineFunction +test_conic_Exponential_VectorOfVariables +test_conic_Exponential_hard +test_conic_Exponential_hard_2 +test_conic_GeometricMeanCone_VectorAffineFunction +test_conic_GeometricMeanCone_VectorAffineFunction_2 +test_conic_GeometricMeanCone_VectorAffineFunction_3 +test_conic_GeometricMeanCone_VectorOfVariables +test_conic_GeometricMeanCone_VectorOfVariables_2 +test_conic_GeometricMeanCone_VectorOfVariables_3 +test_conic_HermitianPositiveSemidefiniteConeTriangle_1 +test_conic_HermitianPositiveSemidefiniteConeTriangle_2 +test_conic_LogDetConeSquare +test_conic_LogDetConeSquare_VectorAffineFunction +test_conic_LogDetConeSquare_VectorOfVariables +test_conic_LogDetConeTriangle +test_conic_LogDetConeTriangle_VectorAffineFunction +test_conic_LogDetConeTriangle_VectorOfVariables +test_conic_NormCone +test_conic_NormNuclearCone +test_conic_NormNuclearCone_2 +test_conic_NormSpectralCone +test_conic_NormSpectralCone_2 +test_conic_PositiveSemidefiniteConeSquare_3 +test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction +test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction_2 +test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables +test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables_2 +test_conic_PositiveSemidefiniteConeTriangle +test_conic_PositiveSemidefiniteConeTriangle_3 +test_conic_PositiveSemidefiniteConeTriangle_4 +test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction +test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction_2 +test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables +test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables_2 +test_conic_PowerCone_VectorAffineFunction +test_conic_PowerCone_VectorOfVariables +test_conic_RelativeEntropyCone +test_conic_RootDetConeSquare +test_conic_RootDetConeSquare_VectorAffineFunction +test_conic_RootDetConeSquare_VectorOfVariables +test_conic_RootDetConeTriangle +test_conic_RootDetConeTriangle_VectorAffineFunction +test_conic_RootDetConeTriangle_VectorOfVariables +test_conic_RotatedSecondOrderCone_INFEASIBLE +test_conic_RotatedSecondOrderCone_INFEASIBLE_2 +test_conic_RotatedSecondOrderCone_VectorAffineFunction +test_conic_RotatedSecondOrderCone_VectorOfVariables +test_conic_RotatedSecondOrderCone_out_of_order +test_conic_ScaledPositiveSemidefiniteConeTriangle_VectorAffineFunction +test_conic_SecondOrderCone_INFEASIBLE +test_conic_SecondOrderCone_Nonnegatives +test_conic_SecondOrderCone_Nonpositives +test_conic_SecondOrderCone_VectorAffineFunction +test_conic_SecondOrderCone_VectorOfVariables +test_conic_SecondOrderCone_negative_initial_bound +test_conic_SecondOrderCone_negative_post_bound +test_conic_SecondOrderCone_negative_post_bound_2 +test_conic_SecondOrderCone_negative_post_bound_3 +test_conic_SecondOrderCone_no_initial_bound +test_conic_SecondOrderCone_nonnegative_initial_bound +test_conic_SecondOrderCone_nonnegative_post_bound +test_conic_SecondOrderCone_out_of_order +test_conic_empty_matrix +test_constraint_PrimalStart_DualStart_SecondOrderCone +test_constraint_qcp_duplicate_diagonal +test_constraint_qcp_duplicate_off_diagonal +test_model_is_valid +test_modification_constraint_scalarquadraticcoefficientchange +test_modification_objective_scalarquadraticcoefficientchange +test_multiobjective_vector_nonlinear +test_multiobjective_vector_nonlinear_delete +test_multiobjective_vector_nonlinear_delete_vector +test_multiobjective_vector_nonlinear_modify +test_multiobjective_vector_quadratic_function +test_multiobjective_vector_quadratic_function_delete +test_multiobjective_vector_quadratic_function_delete_vector +test_multiobjective_vector_quadratic_function_modify +test_nonlinear_constraint_log +test_nonlinear_constraint_scalar_affine_function +test_nonlinear_constraint_uminus +test_nonlinear_duals +test_nonlinear_expression_hs071 +test_nonlinear_expression_hs071_epigraph +test_nonlinear_expression_hs109 +test_nonlinear_expression_hs110 +test_nonlinear_expression_multivariate_function +test_nonlinear_expression_overrides_objective +test_nonlinear_expression_quartic +test_nonlinear_expression_univariate_function +test_nonlinear_hs071 +test_nonlinear_hs071_NLPBlockDual +test_nonlinear_hs071_hessian_vector_product +test_nonlinear_hs071_no_hessian +test_nonlinear_objective +test_nonlinear_objective_and_moi_objective_test +test_nonlinear_quadratic_1 +test_nonlinear_quadratic_2 +test_nonlinear_quadratic_3 +test_nonlinear_quadratic_4 +test_nonlinear_vector_complements +test_nonlinear_with_scalar_quadratic_function_with_off_diag +test_nonlinear_without_objective +test_objective_ScalarQuadraticFunction_in_ListOfModelAttributesSet +test_objective_get_ObjectiveFunction_ScalarAffineFunction +test_objective_qp_ObjectiveFunction_edge_cases +test_objective_qp_ObjectiveFunction_zero_ofdiag +test_quadratic_SecondOrderCone_basic +test_quadratic_constraint_GreaterThan +test_quadratic_constraint_LessThan +test_quadratic_constraint_basic +test_quadratic_constraint_integration +test_quadratic_constraint_minimize +test_quadratic_duplicate_terms +test_quadratic_integration +test_quadratic_nonconvex_constraint_basic +test_quadratic_nonconvex_constraint_integration +test_quadratic_nonhomogeneous +test_variable_delete_SecondOrderCone +test_vector_nonlinear_oracle +test_vector_nonlinear_oracle_no_hessian diff --git a/.github/julia/MOI/bound-constrained.txt b/.github/julia/MOI/bound-constrained.txt new file mode 100644 index 000000000..b51a9c532 --- /dev/null +++ b/.github/julia/MOI/bound-constrained.txt @@ -0,0 +1,131 @@ +test_DualObjectiveValue_Max_VariableIndex_LessThan +test_DualObjectiveValue_Min_VariableIndex_GreaterThan +test_add_constrained_variables_vector +test_add_parameter +test_attribute_AbsoluteGapTolerance +test_attribute_NodeLimit +test_attribute_NumberThreads +test_attribute_ObjectiveLimit +test_attribute_RawStatusString +test_attribute_RelativeGapTolerance +test_attribute_Silent +test_attribute_SolutionLimit +test_attribute_SolveTimeSec +test_attribute_SolverName +test_attribute_TimeLimitSec +test_attribute_VariableBridgingCost +test_attribute_after_empty +test_attribute_unsupported_constraint +test_basic_VariableIndex_EqualTo +test_basic_VariableIndex_GreaterThan +test_basic_VariableIndex_Interval +test_basic_VariableIndex_LessThan +test_basic_VectorOfVariables_HyperRectangle +test_basic_VectorOfVariables_Nonnegatives +test_basic_VectorOfVariables_Nonpositives +test_basic_VectorOfVariables_Zeros +test_constraint_get_ConstraintIndex +test_linear_HyperRectangle_VectorOfVariables +test_linear_variable_open_intervals +test_model_ListOfConstraintsWithAttributeSet +test_model_ListOfVariablesWithAttributeSet +test_model_LowerBoundAlreadySet +test_model_ModelFilter_AbstractConstraintAttribute +test_model_ModelFilter_AbstractModelAttribute +test_model_ModelFilter_AbstractVariableAttribute +test_model_ModelFilter_ListOfConstraintIndices +test_model_ModelFilter_ListOfConstraintTypesPresent +test_model_Name +test_model_UpperBoundAlreadySet +test_model_VariableIndex_ConstraintName +test_model_VariableName +test_model_VariablePrimalStart +test_model_add_constrained_variable_tuple +test_model_copy_to_UnsupportedAttribute +test_model_copy_to_UnsupportedConstraint +test_model_default_DualStatus +test_model_default_ObjectiveSense +test_model_default_PrimalStatus +test_model_default_TerminationStatus +test_model_delete +test_model_duplicate_ScalarAffineFunction_ConstraintName +test_model_duplicate_VariableName +test_model_empty +test_model_ordered_indices +test_model_show +test_model_supports_constraint_ScalarAffineFunction_EqualTo +test_model_supports_constraint_VariableIndex_EqualTo +test_model_supports_constraint_VectorOfVariables_Nonnegatives +test_modification_coef_scalar_objective +test_modification_coef_scalaraffine_lessthan +test_modification_const_scalar_objective +test_modification_constraint_scalarquadraticcoefficientchange +test_modification_delete_variable_with_single_variable_obj +test_modification_delete_variables_in_a_batch +test_modification_func_scalaraffine_lessthan +test_modification_incorrect_VariableIndex +test_modification_objective_scalarquadraticcoefficientchange +test_modification_set_function_single_variable +test_modification_set_scalaraffine_lessthan +test_modification_set_singlevariable_lessthan +test_modification_transform_singlevariable_lessthan +test_multiobjective_vector_affine_function +test_multiobjective_vector_affine_function_delete +test_multiobjective_vector_affine_function_delete_vector +test_multiobjective_vector_affine_function_modify +test_multiobjective_vector_nonlinear +test_multiobjective_vector_nonlinear_delete +test_multiobjective_vector_nonlinear_delete_vector +test_multiobjective_vector_nonlinear_modify +test_multiobjective_vector_of_variables +test_multiobjective_vector_of_variables_delete +test_multiobjective_vector_of_variables_delete_all +test_multiobjective_vector_of_variables_delete_vector +test_multiobjective_vector_quadratic_function +test_multiobjective_vector_quadratic_function_delete +test_multiobjective_vector_quadratic_function_delete_vector +test_multiobjective_vector_quadratic_function_modify +test_nonlinear_Feasibility_internal +test_nonlinear_HS071_internal +test_nonlinear_InvalidEvaluator_internal +test_nonlinear_expression_hs110 +test_nonlinear_expression_multivariate_function +test_nonlinear_expression_quartic +test_nonlinear_expression_univariate_function +test_objective_FEASIBILITY_SENSE_clears_objective +test_objective_ObjectiveFunction_VariableIndex +test_objective_ObjectiveFunction_blank +test_objective_ObjectiveFunction_constant +test_objective_ObjectiveFunction_duplicate_terms +test_objective_ObjectiveSense_FEASIBILITY_SENSE +test_objective_ObjectiveSense_MAX_SENSE +test_objective_ObjectiveSense_MIN_SENSE +test_objective_ObjectiveSense_in_ListOfModelAttributesSet +test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet +test_objective_ScalarQuadraticFunction_in_ListOfModelAttributesSet +test_objective_VariableIndex_in_ListOfModelAttributesSet +test_objective_get_ObjectiveFunction_ScalarAffineFunction +test_objective_qp_ObjectiveFunction_edge_cases +test_objective_qp_ObjectiveFunction_zero_ofdiag +test_objective_set_via_modify +test_solve_ObjectiveBound_MAX_SENSE_IP +test_solve_ObjectiveBound_MAX_SENSE_LP +test_solve_ObjectiveBound_MIN_SENSE_IP +test_solve_ObjectiveBound_MIN_SENSE_LP +test_solve_TerminationStatus_DUAL_INFEASIBLE +test_solve_VariableIndex_ConstraintDual_MAX_SENSE +test_solve_VariableIndex_ConstraintDual_MIN_SENSE +test_solve_conflict_bound_bound +test_solve_conflict_invalid_interval +test_solve_optimize_twice +test_solve_result_index +test_variable_VariableName +test_variable_add_variable +test_variable_add_variables +test_variable_delete +test_variable_delete_Nonnegatives +test_variable_delete_Nonnegatives_row +test_variable_delete_variables +test_variable_get_VariableIndex +test_variable_solve_with_lowerbound +test_variable_solve_with_upperbound diff --git a/.github/julia/MOI/equality-constrained.txt b/.github/julia/MOI/equality-constrained.txt new file mode 100644 index 000000000..b3a588170 --- /dev/null +++ b/.github/julia/MOI/equality-constrained.txt @@ -0,0 +1,22 @@ +test_basic_ScalarAffineFunction_EqualTo +test_basic_ScalarNonlinearFunction_EqualTo +test_basic_ScalarQuadraticFunction_EqualTo +test_basic_VectorAffineFunction_Zeros +test_basic_VectorQuadraticFunction_Zeros +test_constraint_ScalarAffineFunction_EqualTo +test_linear_DUAL_INFEASIBLE_2 +test_linear_VectorAffineFunction_empty_row +test_linear_complex_Zeros +test_linear_complex_Zeros_duplicate +test_model_ListOfConstraintAttributesSet +test_modification_const_vectoraffine_zeros +test_modification_incorrect +test_modification_mathoptinterface_issue_2452 +test_nonlinear_objective +test_nonlinear_objective_and_moi_objective_test +test_nonlinear_without_objective +test_quadratic_nonconvex_constraint_basic +test_quadratic_nonhomogeneous +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_lower +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_upper +test_solve_conflict_zeroone_2 diff --git a/.github/julia/MOI/general.txt b/.github/julia/MOI/general.txt new file mode 100644 index 000000000..ccd653c5f --- /dev/null +++ b/.github/julia/MOI/general.txt @@ -0,0 +1,293 @@ +test_DualObjectiveValue_Max_ScalarAffine_LessThan +test_DualObjectiveValue_Min_ScalarAffine_GreaterThan +test_HermitianPSDCone_basic +test_HermitianPSDCone_min_t +test_NormNuclearCone_VectorAffineFunction_with_transform +test_NormNuclearCone_VectorAffineFunction_without_transform +test_NormNuclearCone_VectorOfVariables_with_transform +test_NormNuclearCone_VectorOfVariables_without_transform +test_NormSpectralCone_VectorAffineFunction_with_transform +test_NormSpectralCone_VectorAffineFunction_without_transform +test_NormSpectralCone_VectorOfVariables_with_transform +test_NormSpectralCone_VectorOfVariables_without_transform +test_VectorNonlinearOracle_LagrangeMultipliers_MAX_SENSE +test_VectorNonlinearOracle_LagrangeMultipliers_MIN_SENSE +test_add_constrained_PositiveSemidefiniteConeTriangle +test_add_constrained_PositiveSemidefiniteConeTriangle_VariableName +test_add_constrained_PositiveSemidefiniteConeTriangle_VariablePrimalStart +test_basic_ScalarAffineFunction_GreaterThan +test_basic_ScalarAffineFunction_Interval +test_basic_ScalarAffineFunction_LessThan +test_basic_ScalarNonlinearFunction_GreaterThan +test_basic_ScalarNonlinearFunction_Interval +test_basic_ScalarNonlinearFunction_LessThan +test_basic_ScalarQuadraticFunction_GreaterThan +test_basic_ScalarQuadraticFunction_Interval +test_basic_ScalarQuadraticFunction_LessThan +test_basic_VectorAffineFunction_AllDifferent +test_basic_VectorAffineFunction_BinPacking +test_basic_VectorAffineFunction_Circuit +test_basic_VectorAffineFunction_Complements +test_basic_VectorAffineFunction_CountAtLeast +test_basic_VectorAffineFunction_CountBelongs +test_basic_VectorAffineFunction_CountDistinct +test_basic_VectorAffineFunction_CountGreaterThan +test_basic_VectorAffineFunction_Cumulative +test_basic_VectorAffineFunction_DualExponentialCone +test_basic_VectorAffineFunction_DualPowerCone +test_basic_VectorAffineFunction_ExponentialCone +test_basic_VectorAffineFunction_GeometricMeanCone +test_basic_VectorAffineFunction_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_HyperRectangle +test_basic_VectorAffineFunction_LogDetConeSquare +test_basic_VectorAffineFunction_LogDetConeTriangle +test_basic_VectorAffineFunction_Nonnegatives +test_basic_VectorAffineFunction_Nonpositives +test_basic_VectorAffineFunction_NormCone +test_basic_VectorAffineFunction_NormInfinityCone +test_basic_VectorAffineFunction_NormNuclearCone +test_basic_VectorAffineFunction_NormOneCone +test_basic_VectorAffineFunction_NormSpectralCone +test_basic_VectorAffineFunction_Path +test_basic_VectorAffineFunction_PositiveSemidefiniteConeSquare +test_basic_VectorAffineFunction_PositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_PowerCone +test_basic_VectorAffineFunction_RelativeEntropyCone +test_basic_VectorAffineFunction_RootDetConeSquare +test_basic_VectorAffineFunction_RootDetConeTriangle +test_basic_VectorAffineFunction_RotatedSecondOrderCone +test_basic_VectorAffineFunction_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorAffineFunction_SecondOrderCone +test_basic_VectorAffineFunction_Table +test_basic_VectorAffineFunction_VectorNonlinearOracle +test_basic_VectorOfVariables_AllDifferent +test_basic_VectorOfVariables_BinPacking +test_basic_VectorOfVariables_Circuit +test_basic_VectorOfVariables_Complements +test_basic_VectorOfVariables_CountAtLeast +test_basic_VectorOfVariables_CountBelongs +test_basic_VectorOfVariables_CountDistinct +test_basic_VectorOfVariables_CountGreaterThan +test_basic_VectorOfVariables_Cumulative +test_basic_VectorOfVariables_DualExponentialCone +test_basic_VectorOfVariables_DualPowerCone +test_basic_VectorOfVariables_ExponentialCone +test_basic_VectorOfVariables_GeometricMeanCone +test_basic_VectorOfVariables_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_LogDetConeSquare +test_basic_VectorOfVariables_LogDetConeTriangle +test_basic_VectorOfVariables_NormCone +test_basic_VectorOfVariables_NormInfinityCone +test_basic_VectorOfVariables_NormNuclearCone +test_basic_VectorOfVariables_NormOneCone +test_basic_VectorOfVariables_NormSpectralCone +test_basic_VectorOfVariables_Path +test_basic_VectorOfVariables_PositiveSemidefiniteConeSquare +test_basic_VectorOfVariables_PositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_PowerCone +test_basic_VectorOfVariables_RelativeEntropyCone +test_basic_VectorOfVariables_RootDetConeSquare +test_basic_VectorOfVariables_RootDetConeTriangle +test_basic_VectorOfVariables_RotatedSecondOrderCone +test_basic_VectorOfVariables_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorOfVariables_SecondOrderCone +test_basic_VectorOfVariables_Table +test_basic_VectorOfVariables_VectorNonlinearOracle +test_basic_VectorQuadraticFunction_AllDifferent +test_basic_VectorQuadraticFunction_BinPacking +test_basic_VectorQuadraticFunction_Circuit +test_basic_VectorQuadraticFunction_Complements +test_basic_VectorQuadraticFunction_CountAtLeast +test_basic_VectorQuadraticFunction_CountBelongs +test_basic_VectorQuadraticFunction_CountDistinct +test_basic_VectorQuadraticFunction_CountGreaterThan +test_basic_VectorQuadraticFunction_Cumulative +test_basic_VectorQuadraticFunction_DualExponentialCone +test_basic_VectorQuadraticFunction_DualPowerCone +test_basic_VectorQuadraticFunction_ExponentialCone +test_basic_VectorQuadraticFunction_GeometricMeanCone +test_basic_VectorQuadraticFunction_HermitianPositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_HyperRectangle +test_basic_VectorQuadraticFunction_LogDetConeSquare +test_basic_VectorQuadraticFunction_LogDetConeTriangle +test_basic_VectorQuadraticFunction_Nonnegatives +test_basic_VectorQuadraticFunction_Nonpositives +test_basic_VectorQuadraticFunction_NormCone +test_basic_VectorQuadraticFunction_NormInfinityCone +test_basic_VectorQuadraticFunction_NormNuclearCone +test_basic_VectorQuadraticFunction_NormOneCone +test_basic_VectorQuadraticFunction_NormSpectralCone +test_basic_VectorQuadraticFunction_Path +test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeSquare +test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_PowerCone +test_basic_VectorQuadraticFunction_RelativeEntropyCone +test_basic_VectorQuadraticFunction_RootDetConeSquare +test_basic_VectorQuadraticFunction_RootDetConeTriangle +test_basic_VectorQuadraticFunction_RotatedSecondOrderCone +test_basic_VectorQuadraticFunction_ScaledPositiveSemidefiniteConeTriangle +test_basic_VectorQuadraticFunction_SecondOrderCone +test_basic_VectorQuadraticFunction_Table +test_basic_VectorQuadraticFunction_VectorNonlinearOracle +test_conic_DualExponentialCone_VectorAffineFunction +test_conic_DualExponentialCone_VectorOfVariables +test_conic_DualPowerCone_VectorAffineFunction +test_conic_DualPowerCone_VectorOfVariables +test_conic_Exponential_VectorAffineFunction +test_conic_Exponential_VectorOfVariables +test_conic_Exponential_hard +test_conic_Exponential_hard_2 +test_conic_GeometricMeanCone_VectorAffineFunction +test_conic_GeometricMeanCone_VectorAffineFunction_2 +test_conic_GeometricMeanCone_VectorAffineFunction_3 +test_conic_GeometricMeanCone_VectorOfVariables +test_conic_GeometricMeanCone_VectorOfVariables_2 +test_conic_GeometricMeanCone_VectorOfVariables_3 +test_conic_HermitianPositiveSemidefiniteConeTriangle_1 +test_conic_HermitianPositiveSemidefiniteConeTriangle_2 +test_conic_LogDetConeSquare +test_conic_LogDetConeSquare_VectorAffineFunction +test_conic_LogDetConeSquare_VectorOfVariables +test_conic_LogDetConeTriangle +test_conic_LogDetConeTriangle_VectorAffineFunction +test_conic_LogDetConeTriangle_VectorOfVariables +test_conic_NormCone +test_conic_NormInfinityCone_3 +test_conic_NormInfinityCone_INFEASIBLE +test_conic_NormInfinityCone_VectorAffineFunction +test_conic_NormInfinityCone_VectorOfVariables +test_conic_NormNuclearCone +test_conic_NormNuclearCone_2 +test_conic_NormOneCone +test_conic_NormOneCone_INFEASIBLE +test_conic_NormOneCone_VectorAffineFunction +test_conic_NormOneCone_VectorOfVariables +test_conic_NormSpectralCone +test_conic_NormSpectralCone_2 +test_conic_PositiveSemidefiniteConeSquare_3 +test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction +test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction_2 +test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables +test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables_2 +test_conic_PositiveSemidefiniteConeTriangle +test_conic_PositiveSemidefiniteConeTriangle_3 +test_conic_PositiveSemidefiniteConeTriangle_4 +test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction +test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction_2 +test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables +test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables_2 +test_conic_PowerCone_VectorAffineFunction +test_conic_PowerCone_VectorOfVariables +test_conic_RelativeEntropyCone +test_conic_RootDetConeSquare +test_conic_RootDetConeSquare_VectorAffineFunction +test_conic_RootDetConeSquare_VectorOfVariables +test_conic_RootDetConeTriangle +test_conic_RootDetConeTriangle_VectorAffineFunction +test_conic_RootDetConeTriangle_VectorOfVariables +test_conic_RotatedSecondOrderCone_INFEASIBLE +test_conic_RotatedSecondOrderCone_INFEASIBLE_2 +test_conic_RotatedSecondOrderCone_VectorAffineFunction +test_conic_RotatedSecondOrderCone_VectorOfVariables +test_conic_RotatedSecondOrderCone_out_of_order +test_conic_ScaledPositiveSemidefiniteConeTriangle_VectorAffineFunction +test_conic_SecondOrderCone_INFEASIBLE +test_conic_SecondOrderCone_Nonnegatives +test_conic_SecondOrderCone_Nonpositives +test_conic_SecondOrderCone_VectorAffineFunction +test_conic_SecondOrderCone_VectorOfVariables +test_conic_SecondOrderCone_negative_initial_bound +test_conic_SecondOrderCone_negative_post_bound +test_conic_SecondOrderCone_negative_post_bound_2 +test_conic_SecondOrderCone_negative_post_bound_3 +test_conic_SecondOrderCone_no_initial_bound +test_conic_SecondOrderCone_nonnegative_initial_bound +test_conic_SecondOrderCone_nonnegative_post_bound +test_conic_SecondOrderCone_out_of_order +test_conic_empty_matrix +test_conic_linear_INFEASIBLE +test_conic_linear_INFEASIBLE_2 +test_conic_linear_VectorAffineFunction +test_conic_linear_VectorAffineFunction_2 +test_conic_linear_VectorOfVariables +test_conic_linear_VectorOfVariables_2 +test_constraint_ConstraintDualStart +test_constraint_ConstraintPrimalStart +test_constraint_PrimalStart_DualStart_SecondOrderCone +test_constraint_ScalarAffineFunction_GreaterThan +test_constraint_ScalarAffineFunction_Interval +test_constraint_ScalarAffineFunction_LessThan +test_constraint_ScalarAffineFunction_duplicate +test_constraint_VectorAffineFunction_duplicate +test_constraint_qcp_duplicate_diagonal +test_constraint_qcp_duplicate_off_diagonal +test_linear_DUAL_INFEASIBLE +test_linear_FEASIBILITY_SENSE +test_linear_HyperRectangle_VectorAffineFunction +test_linear_INFEASIBLE +test_linear_INFEASIBLE_2 +test_linear_Interval_inactive +test_linear_LessThan_and_GreaterThan +test_linear_VariablePrimalStart_partial +test_linear_VectorAffineFunction +test_linear_add_constraints +test_linear_inactive_bounds +test_linear_integration +test_linear_integration_2 +test_linear_integration_Interval +test_linear_integration_delete_variables +test_linear_integration_modification +test_linear_modify_GreaterThan_and_LessThan_constraints +test_linear_open_intervals +test_linear_transform +test_model_Name_VariableName_ConstraintName +test_model_ScalarAffineFunction_ConstraintName +test_model_ScalarFunctionConstantNotZero +test_model_is_valid +test_modification_affine_deletion_edge_cases +test_modification_const_vectoraffine_nonpos +test_modification_func_vectoraffine_nonneg +test_modification_multirow_vectoraffine_nonpos +test_multi_objective_solve_and_objective_value +test_nonlinear_constraint_log +test_nonlinear_constraint_scalar_affine_function +test_nonlinear_constraint_uminus +test_nonlinear_duals +test_nonlinear_expression_hs071 +test_nonlinear_expression_hs071_epigraph +test_nonlinear_expression_hs109 +test_nonlinear_expression_overrides_objective +test_nonlinear_hs071 +test_nonlinear_hs071_NLPBlockDual +test_nonlinear_hs071_hessian_vector_product +test_nonlinear_hs071_no_hessian +test_nonlinear_quadratic_1 +test_nonlinear_quadratic_2 +test_nonlinear_quadratic_3 +test_nonlinear_quadratic_4 +test_nonlinear_vector_complements +test_nonlinear_with_scalar_quadratic_function_with_off_diag +test_quadratic_SecondOrderCone_basic +test_quadratic_constraint_GreaterThan +test_quadratic_constraint_LessThan +test_quadratic_constraint_basic +test_quadratic_constraint_integration +test_quadratic_constraint_minimize +test_quadratic_duplicate_terms +test_quadratic_integration +test_quadratic_nonconvex_constraint_integration +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_GreaterThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_lower +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_upper +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_LessThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan +test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan_max +test_solve_conflict_EqualTo +test_solve_conflict_NOT_IN_CONFLICT +test_solve_conflict_affine_affine +test_solve_conflict_feasible +test_solve_conflict_two_affine +test_solve_conflict_zeroone +test_variable_delete_SecondOrderCone +test_vector_nonlinear_oracle +test_vector_nonlinear_oracle_no_hessian diff --git a/.github/julia/runtests_uno_ipopt_mumps.jl b/.github/julia/runtests_uno_ipopt_mumps.jl index ad88bcb35..15c2bfc23 100644 --- a/.github/julia/runtests_uno_ipopt_mumps.jl +++ b/.github/julia/runtests_uno_ipopt_mumps.jl @@ -24,6 +24,28 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MUMPS", "unbounded_objective_threshold=-1e15"]) +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances +end + +exclude_nlp_expr = [ + # Okay to exclude forever: AmplNLWriter does not support user-defined functions. + "006_010", + # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed + "007_010", +] + # This testset runs https://github.com/jump-dev/MINLPTests.jl @testset "MINLPTests" begin primal_target = Dict( @@ -39,13 +61,7 @@ Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solv # same global minimum, but a test failure can sometimes be allowed. MINLPTests.test_nlp_expr( Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], + include = setdiff(strip_prefix(instances, "nlp_expr_"), exclude_nlp_expr), primal_target, objective_tol, primal_tol ) # This function tests convex nonlinear programs. Test failures here should From 1efa35fc9a9dbf4d882b982bc7e7122c61bd9e30 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 19:09:23 +0200 Subject: [PATCH 02/15] Correct MINLPTests instances for runtests_uno_ipopt_mumps.jl --- .github/julia/runtests_uno_ipopt_mumps.jl | 58 +++++++++++------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/julia/runtests_uno_ipopt_mumps.jl b/.github/julia/runtests_uno_ipopt_mumps.jl index 15c2bfc23..a630f0e69 100644 --- a/.github/julia/runtests_uno_ipopt_mumps.jl +++ b/.github/julia/runtests_uno_ipopt_mumps.jl @@ -24,10 +24,13 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MUMPS", "unbounded_objective_threshold=-1e15"]) +# This testset runs https://github.com/jump-dev/MINLPTests.jl + # drop the equality-constrained instances bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) instances = vcat(bound_constrained_instances, general_instances) +print("Instances with inequality constraints: ", instances) # strip the prefix function strip_prefix(instances, prefix) @@ -39,36 +42,33 @@ function strip_prefix(instances, prefix) return cleaned_instances end -exclude_nlp_expr = [ - # Okay to exclude forever: AmplNLWriter does not support user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", -] +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 -# This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - include = setdiff(strip_prefix(instances, "nlp_expr_"), exclude_nlp_expr), - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) -end +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. From 898fa946b1af941e95ffa3bdf4c79965608a5cd0 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 19:43:35 +0200 Subject: [PATCH 03/15] Correct MOI instances for runtests_uno_ipopt_mumps.jl --- .github/julia/runtests_uno_ipopt_mumps.jl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/julia/runtests_uno_ipopt_mumps.jl b/.github/julia/runtests_uno_ipopt_mumps.jl index a630f0e69..68a65de23 100644 --- a/.github/julia/runtests_uno_ipopt_mumps.jl +++ b/.github/julia/runtests_uno_ipopt_mumps.jl @@ -30,7 +30,7 @@ Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solv bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) instances = vcat(bound_constrained_instances, general_instances) -print("Instances with inequality constraints: ", instances) +#print("Instances with inequality constraints: ", instances) # strip the prefix function strip_prefix(instances, prefix) @@ -72,6 +72,13 @@ MINLPTests.test_directory( # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances with inequality constraints: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -99,6 +106,7 @@ MINLPTests.test_directory( MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs. From 295ac574e43e94edeffcab143592e83ccbc99615 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 20:07:22 +0200 Subject: [PATCH 04/15] Added workflow for pure SQP method (no inequality constraints) with MUMPS --- .github/julia/runtests_uno_pure_sqp_mumps.jl | 143 +++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 .github/julia/runtests_uno_pure_sqp_mumps.jl diff --git a/.github/julia/runtests_uno_pure_sqp_mumps.jl b/.github/julia/runtests_uno_pure_sqp_mumps.jl new file mode 100644 index 000000000..ef1805a66 --- /dev/null +++ b/.github/julia/runtests_uno_pure_sqp_mumps.jl @@ -0,0 +1,143 @@ +# Copyright (c) 2018-2026: Charlie Vanaret and contributors +# +# Use of this source code is governed by an MIT-style license that can be found +# in the LICENSE.md file or at https://opensource.org/licenses/MIT. + +# For help with this file, please contact `@odow` on GitHub. + +using Test + +import AmplNLWriter +import MathOptInterface as MOI +import MINLPTests +import Uno_jll + +""" + Optimizer() + +Create a new `AmplNLWriter.Optimizer` object that uses Uno as the backing +solver. +""" +function Optimizer(options) + return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) +end + +Optimizer_Uno_sqp() = Optimizer(["logger=SILENT", "linear_solver=MUMPS", "unbounded_objective_threshold=-1e15"]) + +# This testset runs https://github.com/jump-dev/MINLPTests.jl + +# keep only the equality-constrained instances +instances = readlines(joinpath(@__DIR__, "MINLPTests/equality-constrained.txt")) +#print("Instances with equality constraints: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances +end + +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_sqp; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_sqp; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + +# This testset runs the full gamut of MOI.Test.runtests. There are a number of +# tests in here with weird edge cases, so a variety of exclusions are expected. + +# keep only the equality-constrained instances +instances = readlines(joinpath(@__DIR__, "MOI/equality-constrained.txt")) +#print("Instances with equality constraints: ", instances) + +@testset "MathOptInterface.test" begin + optimizer = MOI.instantiate( + Optimizer_Uno_sqp; + with_cache_type = Float64, + with_bridge_type = Float64, + ) + MOI.Test.runtests( + optimizer, + MOI.Test.Config( + # These are pretty loose tolerances so that all tests pass. There + # are few tests with weird numerics. If tests fail because of + # tolerances, it might be okay to make these looser, or you could + # tighten the tolerances used by Uno. + atol = 1e-4, + rtol = 1e-4, + optimal_status = MOI.LOCALLY_SOLVED, + infeasible_status = MOI.LOCALLY_INFEASIBLE, + exclude = Any[ + # It's okay to exclude BasisStatus, since AmplNLWriter doesn't + # support this information, so too with ObjectiveBound, since + # Uno is a local NLP solver. + MOI.VariableBasisStatus, + MOI.ConstraintBasisStatus, + MOI.ObjectiveBound, + MOI.DualObjectiveValue, + ], + ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match + exclude = [ + # ================================================================== + # The following tests are bugs. + # + # We should fix issues in Uno, and then try removing these lines. + # + # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It + # might be acceptable to leave this as-is, but it would be better to + # fix. + r"^test_conic_NormInfinityCone_INFEASIBLE$", + r"^test_conic_NormOneCone_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE_2$", + r"^test_linear_INFEASIBLE$", + r"^test_linear_INFEASIBLE_2$", + r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", + # ================================================================== + # The following tests are okay to exclude forever. + # + # Uno does not support integrality, and AmplNLWriter has no way of + # telling if a particular binary supports integers or not (it + # defaults to assuming yes). + "Indicator", + r"[Ii]nteger", + "Semicontinuous", + "Semiinteger", + "SOS1", + "SOS2", + "ZeroOne", + r"^test_cpsat_", + r"^test_attribute_SolverVersion$", + r"^test_nonlinear_invalid$", + r"^test_basic_VectorNonlinearFunction_", + # MPEC instances + "_complementarity", + ], + ) +end From 4fc0a903b0fef1a437d43be5dd682260ba8c27af Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 20:09:55 +0200 Subject: [PATCH 05/15] Forgot to enable the tests in the workflow --- .github/workflows/julia-tests-ubuntu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/julia-tests-ubuntu.yml b/.github/workflows/julia-tests-ubuntu.yml index 4cdd10efe..f4bc4cc5a 100644 --- a/.github/workflows/julia-tests-ubuntu.yml +++ b/.github/workflows/julia-tests-ubuntu.yml @@ -90,8 +90,8 @@ jobs: matrix: UNO_PRESET: [uno_filtersqp_bqpd, uno_filtersqp_highs, uno_filtersqp_bqpd_identity, uno_filtersqp_bqpd_lsr1, uno_filtersqp_bqpd_regularization_tr, uno_filtersqp_bqpd_regularization_ls, uno_filtersqp_bqpd_ls_lbfgs, - uno_ipopt_mumps, uno_ipopt_mumps_lbfgs, uno_ipopt_mumps_identity, uno_ipopt_ssids, uno_filterslp_bqpd, - uno_filterslp_highs, uno_filtersqp_bqpd_charlies_instances] + uno_ipopt_mumps, uno_ipopt_mumps_lbfgs, uno_ipopt_mumps_identity, uno_pure_sqp_mumps, uno_ipopt_ssids, + uno_filterslp_bqpd, uno_filterslp_highs, uno_filtersqp_bqpd_charlies_instances] steps: - uses: actions/checkout@v4 @@ -127,4 +127,4 @@ jobs: using Pkg Pkg.instantiate() Pkg.develop(path="/home/runner/.julia/dev/Uno_jll") - include("/home/runner/work/Uno/Uno/.github/julia/runtests_${{matrix.UNO_PRESET}}.jl") + include("/home/runner/work/Uno/Uno/.github/julia/runtests_${{matrix.UNO_PRESET}}.jl") \ No newline at end of file From a4767dbfed7f2c6e26fdb4201473381dc951f3bc Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 23:15:18 +0200 Subject: [PATCH 06/15] Fixed instance partition and pure SQP workflow --- .github/julia/MINLPTests/LPs.txt | 2 +- .github/julia/MINLPTests/NLPs.txt | 33 +- .../julia/MINLPTests/bound-constrained.txt | 2 - .../julia/MINLPTests/equality-constrained.txt | 2 +- .github/julia/MINLPTests/general.txt | 23 +- .github/julia/MINLPTests/unconstrained.txt | 2 + .github/julia/MOI/LPs.txt | 48 --- .github/julia/MOI/NLPs.txt | 1 - .github/julia/MOI/_classification_table.tsv | 398 ++++++++++++++++++ .github/julia/MOI/_removed_pure_api_tests.txt | 49 +++ .github/julia/MOI/bound-constrained.txt | 76 ---- .github/julia/MOI/unconstrained.txt | 27 ++ .github/julia/runtests_uno_pure_sqp_mumps.jl | 10 +- 13 files changed, 515 insertions(+), 158 deletions(-) create mode 100644 .github/julia/MINLPTests/unconstrained.txt create mode 100644 .github/julia/MOI/_classification_table.tsv create mode 100644 .github/julia/MOI/_removed_pure_api_tests.txt create mode 100644 .github/julia/MOI/unconstrained.txt diff --git a/.github/julia/MINLPTests/LPs.txt b/.github/julia/MINLPTests/LPs.txt index 3c9d0b6ca..de2adac00 100644 --- a/.github/julia/MINLPTests/LPs.txt +++ b/.github/julia/MINLPTests/LPs.txt @@ -1,2 +1,2 @@ nlp_cvx_expr_001_010 -nlp_cvx_expr_002_010 \ No newline at end of file +nlp_cvx_expr_002_010 diff --git a/.github/julia/MINLPTests/NLPs.txt b/.github/julia/MINLPTests/NLPs.txt index 6cca01706..2961ccfdd 100644 --- a/.github/julia/MINLPTests/NLPs.txt +++ b/.github/julia/MINLPTests/NLPs.txt @@ -1,18 +1,3 @@ -nlp_expr_001_010 -nlp_expr_002_010 -nlp_expr_003_010 -nlp_expr_003_011 -nlp_expr_003_012 -nlp_expr_003_013 -nlp_expr_003_014 -nlp_expr_003_016 -nlp_expr_004_010 -nlp_expr_004_011 -nlp_expr_005_010 -nlp_expr_007_010 -nlp_expr_008_010 -nlp_expr_009_010 -nlp_expr_009_011 nlp_cvx_expr_001_011 nlp_cvx_expr_002_011 nlp_cvx_expr_101_010 @@ -63,4 +48,20 @@ nlp_cvx_expr_210_010 nlp_cvx_expr_210_011 nlp_cvx_expr_210_012 nlp_cvx_expr_501_010 -nlp_cvx_expr_501_011 \ No newline at end of file +nlp_cvx_expr_501_011 +nlp_expr_001_010 +nlp_expr_002_010 +nlp_expr_003_010 +nlp_expr_003_011 +nlp_expr_003_012 +nlp_expr_003_013 +nlp_expr_003_014 +nlp_expr_003_016 +nlp_expr_004_010 +nlp_expr_004_011 +nlp_expr_005_010 +nlp_expr_006_010 +nlp_expr_007_010 +nlp_expr_008_010 +nlp_expr_009_010 +nlp_expr_009_011 diff --git a/.github/julia/MINLPTests/bound-constrained.txt b/.github/julia/MINLPTests/bound-constrained.txt index ead5d4c74..f150c3782 100644 --- a/.github/julia/MINLPTests/bound-constrained.txt +++ b/.github/julia/MINLPTests/bound-constrained.txt @@ -1,3 +1 @@ nlp_expr_001_010 -nlp_expr_009_010 -nlp_expr_009_011 \ No newline at end of file diff --git a/.github/julia/MINLPTests/equality-constrained.txt b/.github/julia/MINLPTests/equality-constrained.txt index ad364a7c5..6ac49fe8f 100644 --- a/.github/julia/MINLPTests/equality-constrained.txt +++ b/.github/julia/MINLPTests/equality-constrained.txt @@ -1,2 +1,2 @@ nlp_expr_002_010 -nlp_expr_007_010 \ No newline at end of file +nlp_expr_007_010 diff --git a/.github/julia/MINLPTests/general.txt b/.github/julia/MINLPTests/general.txt index 8b81a16c2..cc36963e4 100644 --- a/.github/julia/MINLPTests/general.txt +++ b/.github/julia/MINLPTests/general.txt @@ -1,13 +1,3 @@ -nlp_expr_003_010 -nlp_expr_003_011 -nlp_expr_003_012 -nlp_expr_003_013 -nlp_expr_003_014 -nlp_expr_003_016 -nlp_expr_004_010 -nlp_expr_004_011 -nlp_expr_005_010 -nlp_expr_008_010 nlp_cvx_expr_001_010 nlp_cvx_expr_001_011 nlp_cvx_expr_002_010 @@ -60,4 +50,15 @@ nlp_cvx_expr_210_010 nlp_cvx_expr_210_011 nlp_cvx_expr_210_012 nlp_cvx_expr_501_010 -nlp_cvx_expr_501_011 \ No newline at end of file +nlp_cvx_expr_501_011 +nlp_expr_003_010 +nlp_expr_003_011 +nlp_expr_003_012 +nlp_expr_003_013 +nlp_expr_003_014 +nlp_expr_003_016 +nlp_expr_004_010 +nlp_expr_004_011 +nlp_expr_005_010 +nlp_expr_006_010 +nlp_expr_008_010 diff --git a/.github/julia/MINLPTests/unconstrained.txt b/.github/julia/MINLPTests/unconstrained.txt new file mode 100644 index 000000000..96f233767 --- /dev/null +++ b/.github/julia/MINLPTests/unconstrained.txt @@ -0,0 +1,2 @@ +nlp_expr_009_010 +nlp_expr_009_011 diff --git a/.github/julia/MOI/LPs.txt b/.github/julia/MOI/LPs.txt index 78c82ced8..67dfe40a3 100644 --- a/.github/julia/MOI/LPs.txt +++ b/.github/julia/MOI/LPs.txt @@ -3,20 +3,6 @@ test_DualObjectiveValue_Max_VariableIndex_LessThan test_DualObjectiveValue_Min_ScalarAffine_GreaterThan test_DualObjectiveValue_Min_VariableIndex_GreaterThan test_add_constrained_variables_vector -test_add_parameter -test_attribute_AbsoluteGapTolerance -test_attribute_NodeLimit -test_attribute_NumberThreads -test_attribute_ObjectiveLimit -test_attribute_RawStatusString -test_attribute_RelativeGapTolerance -test_attribute_Silent -test_attribute_SolutionLimit -test_attribute_SolveTimeSec -test_attribute_SolverName -test_attribute_TimeLimitSec -test_attribute_after_empty -test_attribute_unsupported_constraint test_basic_ScalarAffineFunction_EqualTo test_basic_ScalarAffineFunction_GreaterThan test_basic_ScalarAffineFunction_Interval @@ -108,38 +94,17 @@ test_linear_open_intervals test_linear_transform test_linear_variable_open_intervals test_model_ListOfConstraintAttributesSet -test_model_ListOfConstraintsWithAttributeSet -test_model_ListOfVariablesWithAttributeSet test_model_LowerBoundAlreadySet test_model_ModelFilter_AbstractConstraintAttribute -test_model_ModelFilter_AbstractModelAttribute -test_model_ModelFilter_AbstractVariableAttribute -test_model_ModelFilter_ListOfConstraintIndices -test_model_ModelFilter_ListOfConstraintTypesPresent -test_model_Name test_model_Name_VariableName_ConstraintName test_model_ScalarAffineFunction_ConstraintName test_model_ScalarFunctionConstantNotZero test_model_UpperBoundAlreadySet test_model_VariableIndex_ConstraintName -test_model_VariableName -test_model_VariablePrimalStart test_model_add_constrained_variable_tuple -test_model_copy_to_UnsupportedAttribute -test_model_copy_to_UnsupportedConstraint -test_model_default_DualStatus -test_model_default_ObjectiveSense -test_model_default_PrimalStatus -test_model_default_TerminationStatus test_model_delete test_model_duplicate_ScalarAffineFunction_ConstraintName -test_model_duplicate_VariableName -test_model_empty test_model_ordered_indices -test_model_show -test_model_supports_constraint_ScalarAffineFunction_EqualTo -test_model_supports_constraint_VariableIndex_EqualTo -test_model_supports_constraint_VectorOfVariables_Nonnegatives test_modification_affine_deletion_edge_cases test_modification_coef_scalar_objective test_modification_coef_scalaraffine_lessthan @@ -167,18 +132,11 @@ test_multiobjective_vector_of_variables test_multiobjective_vector_of_variables_delete test_multiobjective_vector_of_variables_delete_all test_multiobjective_vector_of_variables_delete_vector -test_nonlinear_Feasibility_internal -test_nonlinear_HS071_internal -test_nonlinear_InvalidEvaluator_internal test_objective_FEASIBILITY_SENSE_clears_objective test_objective_ObjectiveFunction_VariableIndex test_objective_ObjectiveFunction_blank test_objective_ObjectiveFunction_constant test_objective_ObjectiveFunction_duplicate_terms -test_objective_ObjectiveSense_FEASIBILITY_SENSE -test_objective_ObjectiveSense_MAX_SENSE -test_objective_ObjectiveSense_MIN_SENSE -test_objective_ObjectiveSense_in_ListOfModelAttributesSet test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet test_objective_VariableIndex_in_ListOfModelAttributesSet test_objective_set_via_modify @@ -208,13 +166,7 @@ test_solve_conflict_zeroone test_solve_conflict_zeroone_2 test_solve_optimize_twice test_solve_result_index -test_variable_VariableName -test_variable_add_variable -test_variable_add_variables -test_variable_delete test_variable_delete_Nonnegatives test_variable_delete_Nonnegatives_row -test_variable_delete_variables -test_variable_get_VariableIndex test_variable_solve_with_lowerbound test_variable_solve_with_upperbound diff --git a/.github/julia/MOI/NLPs.txt b/.github/julia/MOI/NLPs.txt index 30840f258..ae2218aea 100644 --- a/.github/julia/MOI/NLPs.txt +++ b/.github/julia/MOI/NLPs.txt @@ -13,7 +13,6 @@ test_VectorNonlinearOracle_LagrangeMultipliers_MIN_SENSE test_add_constrained_PositiveSemidefiniteConeTriangle test_add_constrained_PositiveSemidefiniteConeTriangle_VariableName test_add_constrained_PositiveSemidefiniteConeTriangle_VariablePrimalStart -test_attribute_VariableBridgingCost test_basic_ScalarNonlinearFunction_EqualTo test_basic_ScalarNonlinearFunction_GreaterThan test_basic_ScalarNonlinearFunction_Interval diff --git a/.github/julia/MOI/_classification_table.tsv b/.github/julia/MOI/_classification_table.tsv new file mode 100644 index 000000000..2bd08fbfa --- /dev/null +++ b/.github/julia/MOI/_classification_table.tsv @@ -0,0 +1,398 @@ +problem_type constraint_class instance source_file +LP general test_DualObjectiveValue_Max_ScalarAffine_LessThan test_solve.jl +LP bound-constrained test_DualObjectiveValue_Max_VariableIndex_LessThan test_solve.jl +LP general test_DualObjectiveValue_Min_ScalarAffine_GreaterThan test_solve.jl +LP bound-constrained test_DualObjectiveValue_Min_VariableIndex_GreaterThan test_solve.jl +NLP general test_HermitianPSDCone_basic test_solve.jl +NLP general test_HermitianPSDCone_min_t test_solve.jl +NLP general test_NormNuclearCone_VectorAffineFunction_with_transform test_solve.jl +NLP general test_NormNuclearCone_VectorAffineFunction_without_transform test_solve.jl +NLP general test_NormNuclearCone_VectorOfVariables_with_transform test_solve.jl +NLP general test_NormNuclearCone_VectorOfVariables_without_transform test_solve.jl +NLP general test_NormSpectralCone_VectorAffineFunction_with_transform test_solve.jl +NLP general test_NormSpectralCone_VectorAffineFunction_without_transform test_solve.jl +NLP general test_NormSpectralCone_VectorOfVariables_with_transform test_solve.jl +NLP general test_NormSpectralCone_VectorOfVariables_without_transform test_solve.jl +NLP general test_VectorNonlinearOracle_LagrangeMultipliers_MAX_SENSE test_nonlinear.jl +NLP general test_VectorNonlinearOracle_LagrangeMultipliers_MIN_SENSE test_nonlinear.jl +NLP general test_add_constrained_PositiveSemidefiniteConeTriangle test_conic.jl +NLP general test_add_constrained_PositiveSemidefiniteConeTriangle_VariableName test_conic.jl +NLP general test_add_constrained_PositiveSemidefiniteConeTriangle_VariablePrimalStart test_conic.jl +LP bound-constrained test_add_constrained_variables_vector test_variable.jl +LP equality test_basic_ScalarAffineFunction_EqualTo (auto-generated test_basic_*) +LP general test_basic_ScalarAffineFunction_GreaterThan (auto-generated test_basic_*) +LP general test_basic_ScalarAffineFunction_Interval (auto-generated test_basic_*) +LP general test_basic_ScalarAffineFunction_LessThan (auto-generated test_basic_*) +NLP equality test_basic_ScalarNonlinearFunction_EqualTo (auto-generated test_basic_*) +NLP general test_basic_ScalarNonlinearFunction_GreaterThan (auto-generated test_basic_*) +NLP general test_basic_ScalarNonlinearFunction_Interval (auto-generated test_basic_*) +NLP general test_basic_ScalarNonlinearFunction_LessThan (auto-generated test_basic_*) +NLP equality test_basic_ScalarQuadraticFunction_EqualTo (auto-generated test_basic_*) +NLP general test_basic_ScalarQuadraticFunction_GreaterThan (auto-generated test_basic_*) +NLP general test_basic_ScalarQuadraticFunction_Interval (auto-generated test_basic_*) +NLP general test_basic_ScalarQuadraticFunction_LessThan (auto-generated test_basic_*) +LP bound-constrained test_basic_VariableIndex_EqualTo (auto-generated test_basic_*) +LP bound-constrained test_basic_VariableIndex_GreaterThan (auto-generated test_basic_*) +LP bound-constrained test_basic_VariableIndex_Interval (auto-generated test_basic_*) +LP bound-constrained test_basic_VariableIndex_LessThan (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_AllDifferent (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_BinPacking (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Circuit (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Complements (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_CountAtLeast (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_CountBelongs (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_CountDistinct (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_CountGreaterThan (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Cumulative (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_DualExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_DualPowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_ExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_GeometricMeanCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_HermitianPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_HyperRectangle (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_LogDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_LogDetConeTriangle (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Nonnegatives (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Nonpositives (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_NormCone (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_NormInfinityCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_NormNuclearCone (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_NormOneCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_NormSpectralCone (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Path (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_PositiveSemidefiniteConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_PositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_PowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_RelativeEntropyCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_RootDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_RootDetConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_RotatedSecondOrderCone (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_ScaledPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_SecondOrderCone (auto-generated test_basic_*) +LP general test_basic_VectorAffineFunction_Table (auto-generated test_basic_*) +NLP general test_basic_VectorAffineFunction_VectorNonlinearOracle (auto-generated test_basic_*) +LP equality test_basic_VectorAffineFunction_Zeros (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_AllDifferent (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_BinPacking (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_Circuit (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_Complements (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_CountAtLeast (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_CountBelongs (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_CountDistinct (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_CountGreaterThan (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_Cumulative (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_DualExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_DualPowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_ExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_GeometricMeanCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_HermitianPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +LP bound-constrained test_basic_VectorOfVariables_HyperRectangle (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_LogDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_LogDetConeTriangle (auto-generated test_basic_*) +LP bound-constrained test_basic_VectorOfVariables_Nonnegatives (auto-generated test_basic_*) +LP bound-constrained test_basic_VectorOfVariables_Nonpositives (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_NormCone (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_NormInfinityCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_NormNuclearCone (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_NormOneCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_NormSpectralCone (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_Path (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_PositiveSemidefiniteConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_PositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_PowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_RelativeEntropyCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_RootDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_RootDetConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_RotatedSecondOrderCone (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_ScaledPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_SecondOrderCone (auto-generated test_basic_*) +LP general test_basic_VectorOfVariables_Table (auto-generated test_basic_*) +NLP general test_basic_VectorOfVariables_VectorNonlinearOracle (auto-generated test_basic_*) +LP bound-constrained test_basic_VectorOfVariables_Zeros (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_AllDifferent (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_BinPacking (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Circuit (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Complements (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_CountAtLeast (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_CountBelongs (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_CountDistinct (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_CountGreaterThan (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Cumulative (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_DualExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_DualPowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_ExponentialCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_GeometricMeanCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_HermitianPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_HyperRectangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_LogDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_LogDetConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Nonnegatives (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Nonpositives (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_NormCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_NormInfinityCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_NormNuclearCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_NormOneCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_NormSpectralCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Path (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_PositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_PowerCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_RelativeEntropyCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_RootDetConeSquare (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_RootDetConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_RotatedSecondOrderCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_ScaledPositiveSemidefiniteConeTriangle (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_SecondOrderCone (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_Table (auto-generated test_basic_*) +NLP general test_basic_VectorQuadraticFunction_VectorNonlinearOracle (auto-generated test_basic_*) +NLP equality test_basic_VectorQuadraticFunction_Zeros (auto-generated test_basic_*) +NLP general test_conic_DualExponentialCone_VectorAffineFunction test_conic.jl +NLP general test_conic_DualExponentialCone_VectorOfVariables test_conic.jl +NLP general test_conic_DualPowerCone_VectorAffineFunction test_conic.jl +NLP general test_conic_DualPowerCone_VectorOfVariables test_conic.jl +NLP general test_conic_Exponential_VectorAffineFunction test_conic.jl +NLP general test_conic_Exponential_VectorOfVariables test_conic.jl +NLP general test_conic_Exponential_hard test_conic.jl +NLP general test_conic_Exponential_hard_2 test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorAffineFunction test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorAffineFunction_2 test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorAffineFunction_3 test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorOfVariables test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorOfVariables_2 test_conic.jl +NLP general test_conic_GeometricMeanCone_VectorOfVariables_3 test_conic.jl +NLP general test_conic_HermitianPositiveSemidefiniteConeTriangle_1 test_conic.jl +NLP general test_conic_HermitianPositiveSemidefiniteConeTriangle_2 test_conic.jl +NLP general test_conic_LogDetConeSquare test_conic.jl +NLP general test_conic_LogDetConeSquare_VectorAffineFunction test_conic.jl +NLP general test_conic_LogDetConeSquare_VectorOfVariables test_conic.jl +NLP general test_conic_LogDetConeTriangle test_conic.jl +NLP general test_conic_LogDetConeTriangle_VectorAffineFunction test_conic.jl +NLP general test_conic_LogDetConeTriangle_VectorOfVariables test_conic.jl +NLP general test_conic_NormCone test_conic.jl +LP general test_conic_NormInfinityCone_3 test_conic.jl +LP general test_conic_NormInfinityCone_INFEASIBLE test_conic.jl +LP general test_conic_NormInfinityCone_VectorAffineFunction test_conic.jl +LP general test_conic_NormInfinityCone_VectorOfVariables test_conic.jl +NLP general test_conic_NormNuclearCone test_conic.jl +NLP general test_conic_NormNuclearCone_2 test_conic.jl +LP general test_conic_NormOneCone test_conic.jl +LP general test_conic_NormOneCone_INFEASIBLE test_conic.jl +LP general test_conic_NormOneCone_VectorAffineFunction test_conic.jl +LP general test_conic_NormOneCone_VectorOfVariables test_conic.jl +NLP general test_conic_NormSpectralCone test_conic.jl +NLP general test_conic_NormSpectralCone_2 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeSquare_3 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeSquare_VectorAffineFunction_2 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeSquare_VectorOfVariables_2 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_3 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_4 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_VectorAffineFunction_2 test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables test_conic.jl +NLP general test_conic_PositiveSemidefiniteConeTriangle_VectorOfVariables_2 test_conic.jl +NLP general test_conic_PowerCone_VectorAffineFunction test_conic.jl +NLP general test_conic_PowerCone_VectorOfVariables test_conic.jl +NLP general test_conic_RelativeEntropyCone test_conic.jl +NLP general test_conic_RootDetConeSquare test_conic.jl +NLP general test_conic_RootDetConeSquare_VectorAffineFunction test_conic.jl +NLP general test_conic_RootDetConeSquare_VectorOfVariables test_conic.jl +NLP general test_conic_RootDetConeTriangle test_conic.jl +NLP general test_conic_RootDetConeTriangle_VectorAffineFunction test_conic.jl +NLP general test_conic_RootDetConeTriangle_VectorOfVariables test_conic.jl +NLP general test_conic_RotatedSecondOrderCone_INFEASIBLE test_conic.jl +NLP general test_conic_RotatedSecondOrderCone_INFEASIBLE_2 test_conic.jl +NLP general test_conic_RotatedSecondOrderCone_VectorAffineFunction test_conic.jl +NLP general test_conic_RotatedSecondOrderCone_VectorOfVariables test_conic.jl +NLP general test_conic_RotatedSecondOrderCone_out_of_order test_conic.jl +NLP general test_conic_ScaledPositiveSemidefiniteConeTriangle_VectorAffineFunction test_conic.jl +NLP general test_conic_SecondOrderCone_INFEASIBLE test_conic.jl +NLP general test_conic_SecondOrderCone_Nonnegatives test_conic.jl +NLP general test_conic_SecondOrderCone_Nonpositives test_conic.jl +NLP general test_conic_SecondOrderCone_VectorAffineFunction test_conic.jl +NLP general test_conic_SecondOrderCone_VectorOfVariables test_conic.jl +NLP general test_conic_SecondOrderCone_negative_initial_bound test_conic.jl +NLP general test_conic_SecondOrderCone_negative_post_bound test_conic.jl +NLP general test_conic_SecondOrderCone_negative_post_bound_2 test_conic.jl +NLP general test_conic_SecondOrderCone_negative_post_bound_3 test_conic.jl +NLP general test_conic_SecondOrderCone_no_initial_bound test_conic.jl +NLP general test_conic_SecondOrderCone_nonnegative_initial_bound test_conic.jl +NLP general test_conic_SecondOrderCone_nonnegative_post_bound test_conic.jl +NLP general test_conic_SecondOrderCone_out_of_order test_conic.jl +NLP general test_conic_empty_matrix test_conic.jl +LP general test_conic_linear_INFEASIBLE test_conic.jl +LP general test_conic_linear_INFEASIBLE_2 test_conic.jl +LP general test_conic_linear_VectorAffineFunction test_conic.jl +LP general test_conic_linear_VectorAffineFunction_2 test_conic.jl +LP general test_conic_linear_VectorOfVariables test_conic.jl +LP general test_conic_linear_VectorOfVariables_2 test_conic.jl +LP general test_constraint_ConstraintDualStart test_constraint.jl +LP general test_constraint_ConstraintPrimalStart test_constraint.jl +NLP general test_constraint_PrimalStart_DualStart_SecondOrderCone test_constraint.jl +LP equality test_constraint_ScalarAffineFunction_EqualTo test_constraint.jl +LP general test_constraint_ScalarAffineFunction_GreaterThan test_constraint.jl +LP general test_constraint_ScalarAffineFunction_Interval test_constraint.jl +LP general test_constraint_ScalarAffineFunction_LessThan test_constraint.jl +LP general test_constraint_ScalarAffineFunction_duplicate test_constraint.jl +LP general test_constraint_VectorAffineFunction_duplicate test_constraint.jl +LP bound-constrained test_constraint_get_ConstraintIndex test_constraint.jl +NLP general test_constraint_qcp_duplicate_diagonal test_constraint.jl +NLP general test_constraint_qcp_duplicate_off_diagonal test_constraint.jl +LP general test_linear_DUAL_INFEASIBLE test_linear.jl +LP equality test_linear_DUAL_INFEASIBLE_2 test_linear.jl +LP general test_linear_FEASIBILITY_SENSE test_linear.jl +LP general test_linear_HyperRectangle_VectorAffineFunction test_linear.jl +LP bound-constrained test_linear_HyperRectangle_VectorOfVariables test_linear.jl +LP general test_linear_INFEASIBLE test_linear.jl +LP general test_linear_INFEASIBLE_2 test_linear.jl +LP general test_linear_Interval_inactive test_linear.jl +LP general test_linear_LessThan_and_GreaterThan test_linear.jl +LP general test_linear_VariablePrimalStart_partial test_linear.jl +LP general test_linear_VectorAffineFunction test_linear.jl +LP equality test_linear_VectorAffineFunction_empty_row test_linear.jl +LP general test_linear_add_constraints test_linear.jl +LP equality test_linear_complex_Zeros test_linear.jl +LP equality test_linear_complex_Zeros_duplicate test_linear.jl +LP general test_linear_inactive_bounds test_linear.jl +LP general test_linear_integration test_linear.jl +LP general test_linear_integration_2 test_linear.jl +LP general test_linear_integration_Interval test_linear.jl +LP general test_linear_integration_delete_variables test_linear.jl +LP general test_linear_integration_modification test_linear.jl +LP general test_linear_modify_GreaterThan_and_LessThan_constraints test_linear.jl +LP general test_linear_open_intervals test_linear.jl +LP general test_linear_transform test_linear.jl +LP bound-constrained test_linear_variable_open_intervals test_linear.jl +LP equality test_model_ListOfConstraintAttributesSet test_model.jl +LP bound-constrained test_model_LowerBoundAlreadySet test_model.jl +LP bound-constrained test_model_ModelFilter_AbstractConstraintAttribute test_model.jl +LP general test_model_Name_VariableName_ConstraintName test_model.jl +LP general test_model_ScalarAffineFunction_ConstraintName test_model.jl +LP general test_model_ScalarFunctionConstantNotZero test_model.jl +LP bound-constrained test_model_UpperBoundAlreadySet test_model.jl +LP bound-constrained test_model_VariableIndex_ConstraintName test_model.jl +LP bound-constrained test_model_add_constrained_variable_tuple test_model.jl +LP bound-constrained test_model_delete test_model.jl +LP bound-constrained test_model_duplicate_ScalarAffineFunction_ConstraintName test_model.jl +NLP general test_model_is_valid test_model.jl +LP bound-constrained test_model_ordered_indices test_model.jl +LP general test_modification_affine_deletion_edge_cases test_modification.jl +LP bound-constrained test_modification_coef_scalar_objective test_modification.jl +LP bound-constrained test_modification_coef_scalaraffine_lessthan test_modification.jl +LP bound-constrained test_modification_const_scalar_objective test_modification.jl +LP general test_modification_const_vectoraffine_nonpos test_modification.jl +LP equality test_modification_const_vectoraffine_zeros test_modification.jl +NLP bound-constrained test_modification_constraint_scalarquadraticcoefficientchange test_modification.jl +LP bound-constrained test_modification_delete_variable_with_single_variable_obj test_modification.jl +LP unconstrained test_modification_delete_variables_in_a_batch test_modification.jl +LP bound-constrained test_modification_func_scalaraffine_lessthan test_modification.jl +LP general test_modification_func_vectoraffine_nonneg test_modification.jl +LP equality test_modification_incorrect test_modification.jl +LP bound-constrained test_modification_incorrect_VariableIndex test_modification.jl +LP equality test_modification_mathoptinterface_issue_2452 test_modification.jl +LP general test_modification_multirow_vectoraffine_nonpos test_modification.jl +NLP unconstrained test_modification_objective_scalarquadraticcoefficientchange test_modification.jl +LP bound-constrained test_modification_set_function_single_variable test_modification.jl +LP bound-constrained test_modification_set_scalaraffine_lessthan test_modification.jl +LP bound-constrained test_modification_set_singlevariable_lessthan test_modification.jl +LP bound-constrained test_modification_transform_singlevariable_lessthan test_modification.jl +LP general test_multi_objective_solve_and_objective_value test_multiobjective.jl +LP unconstrained test_multiobjective_vector_affine_function test_multiobjective.jl +LP unconstrained test_multiobjective_vector_affine_function_delete test_multiobjective.jl +LP unconstrained test_multiobjective_vector_affine_function_delete_vector test_multiobjective.jl +LP unconstrained test_multiobjective_vector_affine_function_modify test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_nonlinear test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_nonlinear_delete test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_nonlinear_delete_vector test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_nonlinear_modify test_multiobjective.jl +LP unconstrained test_multiobjective_vector_of_variables test_multiobjective.jl +LP unconstrained test_multiobjective_vector_of_variables_delete test_multiobjective.jl +LP unconstrained test_multiobjective_vector_of_variables_delete_all test_multiobjective.jl +LP unconstrained test_multiobjective_vector_of_variables_delete_vector test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_quadratic_function test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_quadratic_function_delete test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_quadratic_function_delete_vector test_multiobjective.jl +NLP unconstrained test_multiobjective_vector_quadratic_function_modify test_multiobjective.jl +NLP general test_nonlinear_constraint_log test_nonlinear.jl +NLP general test_nonlinear_constraint_scalar_affine_function test_nonlinear.jl +NLP general test_nonlinear_constraint_uminus test_nonlinear.jl +NLP general test_nonlinear_duals test_nonlinear.jl +NLP general test_nonlinear_expression_hs071 test_nonlinear.jl +NLP general test_nonlinear_expression_hs071_epigraph test_nonlinear.jl +NLP general test_nonlinear_expression_hs109 test_nonlinear.jl +NLP bound-constrained test_nonlinear_expression_hs110 test_nonlinear.jl +NLP unconstrained test_nonlinear_expression_multivariate_function test_nonlinear.jl +NLP general test_nonlinear_expression_overrides_objective test_nonlinear.jl +NLP bound-constrained test_nonlinear_expression_quartic test_nonlinear.jl +NLP unconstrained test_nonlinear_expression_univariate_function test_nonlinear.jl +NLP general test_nonlinear_hs071 test_nonlinear.jl +NLP general test_nonlinear_hs071_NLPBlockDual test_nonlinear.jl +NLP general test_nonlinear_hs071_hessian_vector_product test_nonlinear.jl +NLP general test_nonlinear_hs071_no_hessian test_nonlinear.jl +NLP equality test_nonlinear_objective test_nonlinear.jl +NLP equality test_nonlinear_objective_and_moi_objective_test test_nonlinear.jl +NLP general test_nonlinear_quadratic_1 test_nonlinear.jl +NLP general test_nonlinear_quadratic_2 test_nonlinear.jl +NLP general test_nonlinear_quadratic_3 test_nonlinear.jl +NLP general test_nonlinear_quadratic_4 test_nonlinear.jl +NLP general test_nonlinear_vector_complements test_nonlinear.jl +NLP general test_nonlinear_with_scalar_quadratic_function_with_off_diag test_nonlinear.jl +NLP equality test_nonlinear_without_objective test_nonlinear.jl +LP bound-constrained test_objective_FEASIBILITY_SENSE_clears_objective test_objective.jl +LP bound-constrained test_objective_ObjectiveFunction_VariableIndex test_objective.jl +LP unconstrained test_objective_ObjectiveFunction_blank test_objective.jl +LP bound-constrained test_objective_ObjectiveFunction_constant test_objective.jl +LP bound-constrained test_objective_ObjectiveFunction_duplicate_terms test_objective.jl +LP unconstrained test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet test_objective.jl +NLP unconstrained test_objective_ScalarQuadraticFunction_in_ListOfModelAttributesSet test_objective.jl +LP unconstrained test_objective_VariableIndex_in_ListOfModelAttributesSet test_objective.jl +NLP unconstrained test_objective_get_ObjectiveFunction_ScalarAffineFunction test_objective.jl +NLP bound-constrained test_objective_qp_ObjectiveFunction_edge_cases test_objective.jl +NLP bound-constrained test_objective_qp_ObjectiveFunction_zero_ofdiag test_objective.jl +LP unconstrained test_objective_set_via_modify test_objective.jl +NLP general test_quadratic_SecondOrderCone_basic test_quadratic.jl +NLP general test_quadratic_constraint_GreaterThan test_quadratic.jl +NLP general test_quadratic_constraint_LessThan test_quadratic.jl +NLP general test_quadratic_constraint_basic test_quadratic.jl +NLP general test_quadratic_constraint_integration test_quadratic.jl +NLP general test_quadratic_constraint_minimize test_quadratic.jl +NLP general test_quadratic_duplicate_terms test_quadratic.jl +NLP general test_quadratic_integration test_quadratic.jl +NLP equality test_quadratic_nonconvex_constraint_basic test_quadratic.jl +NLP general test_quadratic_nonconvex_constraint_integration test_quadratic.jl +NLP equality test_quadratic_nonhomogeneous test_quadratic.jl +LP equality test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_lower test_solve.jl +LP equality test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_upper test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_GreaterThan test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_lower test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_upper test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_LessThan test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan test_solve.jl +LP general test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan_max test_solve.jl +LP bound-constrained test_solve_ObjectiveBound_MAX_SENSE_IP test_solve.jl +LP bound-constrained test_solve_ObjectiveBound_MAX_SENSE_LP test_solve.jl +LP bound-constrained test_solve_ObjectiveBound_MIN_SENSE_IP test_solve.jl +LP bound-constrained test_solve_ObjectiveBound_MIN_SENSE_LP test_solve.jl +LP unconstrained test_solve_TerminationStatus_DUAL_INFEASIBLE test_solve.jl +LP bound-constrained test_solve_VariableIndex_ConstraintDual_MAX_SENSE test_solve.jl +LP bound-constrained test_solve_VariableIndex_ConstraintDual_MIN_SENSE test_solve.jl +LP general test_solve_conflict_EqualTo test_solve.jl +LP general test_solve_conflict_NOT_IN_CONFLICT test_solve.jl +LP general test_solve_conflict_affine_affine test_solve.jl +LP bound-constrained test_solve_conflict_bound_bound test_solve.jl +LP general test_solve_conflict_feasible test_solve.jl +LP bound-constrained test_solve_conflict_invalid_interval test_solve.jl +LP general test_solve_conflict_two_affine test_solve.jl +LP general test_solve_conflict_zeroone test_solve.jl +LP equality test_solve_conflict_zeroone_2 test_solve.jl +LP bound-constrained test_solve_optimize_twice test_solve.jl +LP bound-constrained test_solve_result_index test_solve.jl +LP bound-constrained test_variable_delete_Nonnegatives test_variable.jl +LP bound-constrained test_variable_delete_Nonnegatives_row test_variable.jl +NLP general test_variable_delete_SecondOrderCone test_variable.jl +LP bound-constrained test_variable_solve_with_lowerbound test_variable.jl +LP bound-constrained test_variable_solve_with_upperbound test_variable.jl +NLP general test_vector_nonlinear_oracle test_nonlinear.jl +NLP general test_vector_nonlinear_oracle_no_hessian test_nonlinear.jl diff --git a/.github/julia/MOI/_removed_pure_api_tests.txt b/.github/julia/MOI/_removed_pure_api_tests.txt new file mode 100644 index 000000000..5cf096773 --- /dev/null +++ b/.github/julia/MOI/_removed_pure_api_tests.txt @@ -0,0 +1,49 @@ +test_add_parameter +test_attribute_AbsoluteGapTolerance +test_attribute_NodeLimit +test_attribute_NumberThreads +test_attribute_ObjectiveLimit +test_attribute_RawStatusString +test_attribute_RelativeGapTolerance +test_attribute_Silent +test_attribute_SolutionLimit +test_attribute_SolveTimeSec +test_attribute_SolverName +test_attribute_TimeLimitSec +test_attribute_VariableBridgingCost +test_attribute_after_empty +test_attribute_unsupported_constraint +test_model_ListOfConstraintsWithAttributeSet +test_model_ListOfVariablesWithAttributeSet +test_model_ModelFilter_AbstractModelAttribute +test_model_ModelFilter_AbstractVariableAttribute +test_model_ModelFilter_ListOfConstraintIndices +test_model_ModelFilter_ListOfConstraintTypesPresent +test_model_Name +test_model_VariableName +test_model_VariablePrimalStart +test_model_copy_to_UnsupportedAttribute +test_model_copy_to_UnsupportedConstraint +test_model_default_DualStatus +test_model_default_ObjectiveSense +test_model_default_PrimalStatus +test_model_default_TerminationStatus +test_model_duplicate_VariableName +test_model_empty +test_model_show +test_model_supports_constraint_ScalarAffineFunction_EqualTo +test_model_supports_constraint_VariableIndex_EqualTo +test_model_supports_constraint_VectorOfVariables_Nonnegatives +test_nonlinear_Feasibility_internal +test_nonlinear_HS071_internal +test_nonlinear_InvalidEvaluator_internal +test_objective_ObjectiveSense_FEASIBILITY_SENSE +test_objective_ObjectiveSense_MAX_SENSE +test_objective_ObjectiveSense_MIN_SENSE +test_objective_ObjectiveSense_in_ListOfModelAttributesSet +test_variable_VariableName +test_variable_add_variable +test_variable_add_variables +test_variable_delete +test_variable_delete_variables +test_variable_get_VariableIndex diff --git a/.github/julia/MOI/bound-constrained.txt b/.github/julia/MOI/bound-constrained.txt index b51a9c532..78ef8ee06 100644 --- a/.github/julia/MOI/bound-constrained.txt +++ b/.github/julia/MOI/bound-constrained.txt @@ -1,21 +1,6 @@ test_DualObjectiveValue_Max_VariableIndex_LessThan test_DualObjectiveValue_Min_VariableIndex_GreaterThan test_add_constrained_variables_vector -test_add_parameter -test_attribute_AbsoluteGapTolerance -test_attribute_NodeLimit -test_attribute_NumberThreads -test_attribute_ObjectiveLimit -test_attribute_RawStatusString -test_attribute_RelativeGapTolerance -test_attribute_Silent -test_attribute_SolutionLimit -test_attribute_SolveTimeSec -test_attribute_SolverName -test_attribute_TimeLimitSec -test_attribute_VariableBridgingCost -test_attribute_after_empty -test_attribute_unsupported_constraint test_basic_VariableIndex_EqualTo test_basic_VariableIndex_GreaterThan test_basic_VariableIndex_Interval @@ -27,105 +12,44 @@ test_basic_VectorOfVariables_Zeros test_constraint_get_ConstraintIndex test_linear_HyperRectangle_VectorOfVariables test_linear_variable_open_intervals -test_model_ListOfConstraintsWithAttributeSet -test_model_ListOfVariablesWithAttributeSet test_model_LowerBoundAlreadySet test_model_ModelFilter_AbstractConstraintAttribute -test_model_ModelFilter_AbstractModelAttribute -test_model_ModelFilter_AbstractVariableAttribute -test_model_ModelFilter_ListOfConstraintIndices -test_model_ModelFilter_ListOfConstraintTypesPresent -test_model_Name test_model_UpperBoundAlreadySet test_model_VariableIndex_ConstraintName -test_model_VariableName -test_model_VariablePrimalStart test_model_add_constrained_variable_tuple -test_model_copy_to_UnsupportedAttribute -test_model_copy_to_UnsupportedConstraint -test_model_default_DualStatus -test_model_default_ObjectiveSense -test_model_default_PrimalStatus -test_model_default_TerminationStatus test_model_delete test_model_duplicate_ScalarAffineFunction_ConstraintName -test_model_duplicate_VariableName -test_model_empty test_model_ordered_indices -test_model_show -test_model_supports_constraint_ScalarAffineFunction_EqualTo -test_model_supports_constraint_VariableIndex_EqualTo -test_model_supports_constraint_VectorOfVariables_Nonnegatives test_modification_coef_scalar_objective test_modification_coef_scalaraffine_lessthan test_modification_const_scalar_objective test_modification_constraint_scalarquadraticcoefficientchange test_modification_delete_variable_with_single_variable_obj -test_modification_delete_variables_in_a_batch test_modification_func_scalaraffine_lessthan test_modification_incorrect_VariableIndex -test_modification_objective_scalarquadraticcoefficientchange test_modification_set_function_single_variable test_modification_set_scalaraffine_lessthan test_modification_set_singlevariable_lessthan test_modification_transform_singlevariable_lessthan -test_multiobjective_vector_affine_function -test_multiobjective_vector_affine_function_delete -test_multiobjective_vector_affine_function_delete_vector -test_multiobjective_vector_affine_function_modify -test_multiobjective_vector_nonlinear -test_multiobjective_vector_nonlinear_delete -test_multiobjective_vector_nonlinear_delete_vector -test_multiobjective_vector_nonlinear_modify -test_multiobjective_vector_of_variables -test_multiobjective_vector_of_variables_delete -test_multiobjective_vector_of_variables_delete_all -test_multiobjective_vector_of_variables_delete_vector -test_multiobjective_vector_quadratic_function -test_multiobjective_vector_quadratic_function_delete -test_multiobjective_vector_quadratic_function_delete_vector -test_multiobjective_vector_quadratic_function_modify -test_nonlinear_Feasibility_internal -test_nonlinear_HS071_internal -test_nonlinear_InvalidEvaluator_internal test_nonlinear_expression_hs110 -test_nonlinear_expression_multivariate_function test_nonlinear_expression_quartic -test_nonlinear_expression_univariate_function test_objective_FEASIBILITY_SENSE_clears_objective test_objective_ObjectiveFunction_VariableIndex -test_objective_ObjectiveFunction_blank test_objective_ObjectiveFunction_constant test_objective_ObjectiveFunction_duplicate_terms -test_objective_ObjectiveSense_FEASIBILITY_SENSE -test_objective_ObjectiveSense_MAX_SENSE -test_objective_ObjectiveSense_MIN_SENSE -test_objective_ObjectiveSense_in_ListOfModelAttributesSet -test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet -test_objective_ScalarQuadraticFunction_in_ListOfModelAttributesSet -test_objective_VariableIndex_in_ListOfModelAttributesSet -test_objective_get_ObjectiveFunction_ScalarAffineFunction test_objective_qp_ObjectiveFunction_edge_cases test_objective_qp_ObjectiveFunction_zero_ofdiag -test_objective_set_via_modify test_solve_ObjectiveBound_MAX_SENSE_IP test_solve_ObjectiveBound_MAX_SENSE_LP test_solve_ObjectiveBound_MIN_SENSE_IP test_solve_ObjectiveBound_MIN_SENSE_LP -test_solve_TerminationStatus_DUAL_INFEASIBLE test_solve_VariableIndex_ConstraintDual_MAX_SENSE test_solve_VariableIndex_ConstraintDual_MIN_SENSE test_solve_conflict_bound_bound test_solve_conflict_invalid_interval test_solve_optimize_twice test_solve_result_index -test_variable_VariableName -test_variable_add_variable -test_variable_add_variables -test_variable_delete test_variable_delete_Nonnegatives test_variable_delete_Nonnegatives_row -test_variable_delete_variables -test_variable_get_VariableIndex test_variable_solve_with_lowerbound test_variable_solve_with_upperbound diff --git a/.github/julia/MOI/unconstrained.txt b/.github/julia/MOI/unconstrained.txt new file mode 100644 index 000000000..268aaf3af --- /dev/null +++ b/.github/julia/MOI/unconstrained.txt @@ -0,0 +1,27 @@ +test_modification_delete_variables_in_a_batch +test_modification_objective_scalarquadraticcoefficientchange +test_multiobjective_vector_affine_function +test_multiobjective_vector_affine_function_delete +test_multiobjective_vector_affine_function_delete_vector +test_multiobjective_vector_affine_function_modify +test_multiobjective_vector_nonlinear +test_multiobjective_vector_nonlinear_delete +test_multiobjective_vector_nonlinear_delete_vector +test_multiobjective_vector_nonlinear_modify +test_multiobjective_vector_of_variables +test_multiobjective_vector_of_variables_delete +test_multiobjective_vector_of_variables_delete_all +test_multiobjective_vector_of_variables_delete_vector +test_multiobjective_vector_quadratic_function +test_multiobjective_vector_quadratic_function_delete +test_multiobjective_vector_quadratic_function_delete_vector +test_multiobjective_vector_quadratic_function_modify +test_nonlinear_expression_multivariate_function +test_nonlinear_expression_univariate_function +test_objective_ObjectiveFunction_blank +test_objective_ScalarAffineFunction_in_ListOfModelAttributesSet +test_objective_ScalarQuadraticFunction_in_ListOfModelAttributesSet +test_objective_VariableIndex_in_ListOfModelAttributesSet +test_objective_get_ObjectiveFunction_ScalarAffineFunction +test_objective_set_via_modify +test_solve_TerminationStatus_DUAL_INFEASIBLE diff --git a/.github/julia/runtests_uno_pure_sqp_mumps.jl b/.github/julia/runtests_uno_pure_sqp_mumps.jl index ef1805a66..1d4c46898 100644 --- a/.github/julia/runtests_uno_pure_sqp_mumps.jl +++ b/.github/julia/runtests_uno_pure_sqp_mumps.jl @@ -22,13 +22,19 @@ function Optimizer(options) return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) end -Optimizer_Uno_sqp() = Optimizer(["logger=SILENT", "linear_solver=MUMPS", "unbounded_objective_threshold=-1e15"]) +Optimizer_Uno_sqp() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MUMPS", + "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl # keep only the equality-constrained instances instances = readlines(joinpath(@__DIR__, "MINLPTests/equality-constrained.txt")) -#print("Instances with equality constraints: ", instances) +exclude = [ + # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed + "nlp_expr_007_010" +] +instances = setdiff(instances, exclude) +print("Instances with equality constraints: ", instances) # strip the prefix function strip_prefix(instances, prefix) From 6f9a652a6982f89579a5a23c9520e50a737c2a95 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Mon, 8 Jun 2026 23:32:18 +0200 Subject: [PATCH 07/15] Fixed instances --- .github/julia/MINLPTests/NLPs.txt | 3 +-- .github/julia/MINLPTests/general.txt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/julia/MINLPTests/NLPs.txt b/.github/julia/MINLPTests/NLPs.txt index 2961ccfdd..7b8d9cc9e 100644 --- a/.github/julia/MINLPTests/NLPs.txt +++ b/.github/julia/MINLPTests/NLPs.txt @@ -60,8 +60,7 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 -nlp_expr_006_010 nlp_expr_007_010 nlp_expr_008_010 nlp_expr_009_010 -nlp_expr_009_011 +nlp_expr_009_011 \ No newline at end of file diff --git a/.github/julia/MINLPTests/general.txt b/.github/julia/MINLPTests/general.txt index cc36963e4..105437a69 100644 --- a/.github/julia/MINLPTests/general.txt +++ b/.github/julia/MINLPTests/general.txt @@ -60,5 +60,4 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 -nlp_expr_006_010 -nlp_expr_008_010 +nlp_expr_008_010 \ No newline at end of file From 853c7f63b696835c693a86c7a69b4edffa570972 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Tue, 9 Jun 2026 09:47:32 +0200 Subject: [PATCH 08/15] Run on correct subset of instances in runtests_uno_ipopt_mumps_[identity|lbfgs].jl --- .github/julia/MINLPTests/{LPs.txt => LP.txt} | 0 .../julia/MINLPTests/{NLPs.txt => NLP.txt} | 0 .github/julia/MOI/{LPs.txt => LP.txt} | 0 .github/julia/MOI/{NLPs.txt => NLP.txt} | 0 .../runtests_uno_ipopt_mumps_identity.jl | 82 ++++++++++++------ .../julia/runtests_uno_ipopt_mumps_lbfgs.jl | 84 ++++++++++++------- 6 files changed, 110 insertions(+), 56 deletions(-) rename .github/julia/MINLPTests/{LPs.txt => LP.txt} (100%) rename .github/julia/MINLPTests/{NLPs.txt => NLP.txt} (100%) rename .github/julia/MOI/{LPs.txt => LP.txt} (100%) rename .github/julia/MOI/{NLPs.txt => NLP.txt} (100%) diff --git a/.github/julia/MINLPTests/LPs.txt b/.github/julia/MINLPTests/LP.txt similarity index 100% rename from .github/julia/MINLPTests/LPs.txt rename to .github/julia/MINLPTests/LP.txt diff --git a/.github/julia/MINLPTests/NLPs.txt b/.github/julia/MINLPTests/NLP.txt similarity index 100% rename from .github/julia/MINLPTests/NLPs.txt rename to .github/julia/MINLPTests/NLP.txt diff --git a/.github/julia/MOI/LPs.txt b/.github/julia/MOI/LP.txt similarity index 100% rename from .github/julia/MOI/LPs.txt rename to .github/julia/MOI/LP.txt diff --git a/.github/julia/MOI/NLPs.txt b/.github/julia/MOI/NLP.txt similarity index 100% rename from .github/julia/MOI/NLPs.txt rename to .github/julia/MOI/NLP.txt diff --git a/.github/julia/runtests_uno_ipopt_mumps_identity.jl b/.github/julia/runtests_uno_ipopt_mumps_identity.jl index f9bd09aa0..4c4cd9761 100644 --- a/.github/julia/runtests_uno_ipopt_mumps_identity.jl +++ b/.github/julia/runtests_uno_ipopt_mumps_identity.jl @@ -25,37 +25,64 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MUMPS", "hessian_model=identity", "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) + +# drop the equality-constrained instances and the LPs +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MINLPTests/NLP.txt")) +instances = vcat(bound_constrained_instances, general_instances) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances end +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances and the LPs +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MOI/NLP.txt")) +instances = vcat(bound_constrained_instances, general_instances) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -83,6 +110,7 @@ end MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs. diff --git a/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl b/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl index 45a6f2488..a0708d73e 100644 --- a/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl +++ b/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl @@ -25,37 +25,64 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MUMPS", "hessian_model=LBFGS", "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) + +# drop the equality-constrained instances and the LPs +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MINLPTests/NLP.txt")) +instances = vcat(bound_constrained_instances, general_instances) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances end +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances and the LPs +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MOI/NLP.txt")) +instances = vcat(bound_constrained_instances, general_instances) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -83,6 +110,7 @@ end MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs. @@ -121,8 +149,6 @@ end r"^test_basic_VectorNonlinearFunction_", # MPEC instances "_complementarity", - # linear instances (doesn't make sense to use a quasi-Newton Hessian) - "_linear", ], ) end From de571b24cac383b24d03752e708b3a8f9a80e72c Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Tue, 9 Jun 2026 21:29:07 +0200 Subject: [PATCH 09/15] Fixed partition of instances --- .github/julia/MINLPTests/NLP.txt | 3 ++- .github/julia/MINLPTests/general.txt | 3 ++- .github/julia/MOI/LP.txt | 3 +++ .github/julia/MOI/_classification_table.tsv | 13 ++++++++----- .github/julia/MOI/_removed_pure_api_tests.txt | 3 --- .github/julia/MOI/bound-constrained.txt | 7 +++++++ .github/julia/MOI/general.txt | 1 + .github/julia/MOI/unconstrained.txt | 5 ----- 8 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.github/julia/MINLPTests/NLP.txt b/.github/julia/MINLPTests/NLP.txt index 7b8d9cc9e..2961ccfdd 100644 --- a/.github/julia/MINLPTests/NLP.txt +++ b/.github/julia/MINLPTests/NLP.txt @@ -60,7 +60,8 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 +nlp_expr_006_010 nlp_expr_007_010 nlp_expr_008_010 nlp_expr_009_010 -nlp_expr_009_011 \ No newline at end of file +nlp_expr_009_011 diff --git a/.github/julia/MINLPTests/general.txt b/.github/julia/MINLPTests/general.txt index 105437a69..cc36963e4 100644 --- a/.github/julia/MINLPTests/general.txt +++ b/.github/julia/MINLPTests/general.txt @@ -60,4 +60,5 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 -nlp_expr_008_010 \ No newline at end of file +nlp_expr_006_010 +nlp_expr_008_010 diff --git a/.github/julia/MOI/LP.txt b/.github/julia/MOI/LP.txt index 67dfe40a3..85b28b7a7 100644 --- a/.github/julia/MOI/LP.txt +++ b/.github/julia/MOI/LP.txt @@ -94,8 +94,11 @@ test_linear_open_intervals test_linear_transform test_linear_variable_open_intervals test_model_ListOfConstraintAttributesSet +test_model_ListOfConstraintsWithAttributeSet test_model_LowerBoundAlreadySet test_model_ModelFilter_AbstractConstraintAttribute +test_model_ModelFilter_ListOfConstraintIndices +test_model_ModelFilter_ListOfConstraintTypesPresent test_model_Name_VariableName_ConstraintName test_model_ScalarAffineFunction_ConstraintName test_model_ScalarFunctionConstantNotZero diff --git a/.github/julia/MOI/_classification_table.tsv b/.github/julia/MOI/_classification_table.tsv index 2bd08fbfa..f8437aa62 100644 --- a/.github/julia/MOI/_classification_table.tsv +++ b/.github/julia/MOI/_classification_table.tsv @@ -266,8 +266,11 @@ LP general test_linear_open_intervals test_linear.jl LP general test_linear_transform test_linear.jl LP bound-constrained test_linear_variable_open_intervals test_linear.jl LP equality test_model_ListOfConstraintAttributesSet test_model.jl +LP general test_model_ListOfConstraintsWithAttributeSet test_model.jl LP bound-constrained test_model_LowerBoundAlreadySet test_model.jl LP bound-constrained test_model_ModelFilter_AbstractConstraintAttribute test_model.jl +LP bound-constrained test_model_ModelFilter_ListOfConstraintIndices test_model.jl +LP bound-constrained test_model_ModelFilter_ListOfConstraintTypesPresent test_model.jl LP general test_model_Name_VariableName_ConstraintName test_model.jl LP general test_model_ScalarAffineFunction_ConstraintName test_model.jl LP general test_model_ScalarFunctionConstantNotZero test_model.jl @@ -286,7 +289,7 @@ LP general test_modification_const_vectoraffine_nonpos test_modification.jl LP equality test_modification_const_vectoraffine_zeros test_modification.jl NLP bound-constrained test_modification_constraint_scalarquadraticcoefficientchange test_modification.jl LP bound-constrained test_modification_delete_variable_with_single_variable_obj test_modification.jl -LP unconstrained test_modification_delete_variables_in_a_batch test_modification.jl +LP bound-constrained test_modification_delete_variables_in_a_batch test_modification.jl LP bound-constrained test_modification_func_scalaraffine_lessthan test_modification.jl LP general test_modification_func_vectoraffine_nonneg test_modification.jl LP equality test_modification_incorrect test_modification.jl @@ -303,10 +306,10 @@ LP unconstrained test_multiobjective_vector_affine_function test_multiobjective. LP unconstrained test_multiobjective_vector_affine_function_delete test_multiobjective.jl LP unconstrained test_multiobjective_vector_affine_function_delete_vector test_multiobjective.jl LP unconstrained test_multiobjective_vector_affine_function_modify test_multiobjective.jl -NLP unconstrained test_multiobjective_vector_nonlinear test_multiobjective.jl -NLP unconstrained test_multiobjective_vector_nonlinear_delete test_multiobjective.jl -NLP unconstrained test_multiobjective_vector_nonlinear_delete_vector test_multiobjective.jl -NLP unconstrained test_multiobjective_vector_nonlinear_modify test_multiobjective.jl +NLP bound-constrained test_multiobjective_vector_nonlinear test_multiobjective.jl +NLP bound-constrained test_multiobjective_vector_nonlinear_delete test_multiobjective.jl +NLP bound-constrained test_multiobjective_vector_nonlinear_delete_vector test_multiobjective.jl +NLP bound-constrained test_multiobjective_vector_nonlinear_modify test_multiobjective.jl LP unconstrained test_multiobjective_vector_of_variables test_multiobjective.jl LP unconstrained test_multiobjective_vector_of_variables_delete test_multiobjective.jl LP unconstrained test_multiobjective_vector_of_variables_delete_all test_multiobjective.jl diff --git a/.github/julia/MOI/_removed_pure_api_tests.txt b/.github/julia/MOI/_removed_pure_api_tests.txt index 5cf096773..324fdb69b 100644 --- a/.github/julia/MOI/_removed_pure_api_tests.txt +++ b/.github/julia/MOI/_removed_pure_api_tests.txt @@ -13,12 +13,9 @@ test_attribute_TimeLimitSec test_attribute_VariableBridgingCost test_attribute_after_empty test_attribute_unsupported_constraint -test_model_ListOfConstraintsWithAttributeSet test_model_ListOfVariablesWithAttributeSet test_model_ModelFilter_AbstractModelAttribute test_model_ModelFilter_AbstractVariableAttribute -test_model_ModelFilter_ListOfConstraintIndices -test_model_ModelFilter_ListOfConstraintTypesPresent test_model_Name test_model_VariableName test_model_VariablePrimalStart diff --git a/.github/julia/MOI/bound-constrained.txt b/.github/julia/MOI/bound-constrained.txt index 78ef8ee06..1ac5af6f2 100644 --- a/.github/julia/MOI/bound-constrained.txt +++ b/.github/julia/MOI/bound-constrained.txt @@ -14,6 +14,8 @@ test_linear_HyperRectangle_VectorOfVariables test_linear_variable_open_intervals test_model_LowerBoundAlreadySet test_model_ModelFilter_AbstractConstraintAttribute +test_model_ModelFilter_ListOfConstraintIndices +test_model_ModelFilter_ListOfConstraintTypesPresent test_model_UpperBoundAlreadySet test_model_VariableIndex_ConstraintName test_model_add_constrained_variable_tuple @@ -25,12 +27,17 @@ test_modification_coef_scalaraffine_lessthan test_modification_const_scalar_objective test_modification_constraint_scalarquadraticcoefficientchange test_modification_delete_variable_with_single_variable_obj +test_modification_delete_variables_in_a_batch test_modification_func_scalaraffine_lessthan test_modification_incorrect_VariableIndex test_modification_set_function_single_variable test_modification_set_scalaraffine_lessthan test_modification_set_singlevariable_lessthan test_modification_transform_singlevariable_lessthan +test_multiobjective_vector_nonlinear +test_multiobjective_vector_nonlinear_delete +test_multiobjective_vector_nonlinear_delete_vector +test_multiobjective_vector_nonlinear_modify test_nonlinear_expression_hs110 test_nonlinear_expression_quartic test_objective_FEASIBILITY_SENSE_clears_objective diff --git a/.github/julia/MOI/general.txt b/.github/julia/MOI/general.txt index ccd653c5f..88e83c9aa 100644 --- a/.github/julia/MOI/general.txt +++ b/.github/julia/MOI/general.txt @@ -240,6 +240,7 @@ test_linear_integration_modification test_linear_modify_GreaterThan_and_LessThan_constraints test_linear_open_intervals test_linear_transform +test_model_ListOfConstraintsWithAttributeSet test_model_Name_VariableName_ConstraintName test_model_ScalarAffineFunction_ConstraintName test_model_ScalarFunctionConstantNotZero diff --git a/.github/julia/MOI/unconstrained.txt b/.github/julia/MOI/unconstrained.txt index 268aaf3af..c1e0ea28b 100644 --- a/.github/julia/MOI/unconstrained.txt +++ b/.github/julia/MOI/unconstrained.txt @@ -1,13 +1,8 @@ -test_modification_delete_variables_in_a_batch test_modification_objective_scalarquadraticcoefficientchange test_multiobjective_vector_affine_function test_multiobjective_vector_affine_function_delete test_multiobjective_vector_affine_function_delete_vector test_multiobjective_vector_affine_function_modify -test_multiobjective_vector_nonlinear -test_multiobjective_vector_nonlinear_delete -test_multiobjective_vector_nonlinear_delete_vector -test_multiobjective_vector_nonlinear_modify test_multiobjective_vector_of_variables test_multiobjective_vector_of_variables_delete test_multiobjective_vector_of_variables_delete_all From ad3a832a8761d62de3c8b141c9bebf05766d0582 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 17:50:58 +0200 Subject: [PATCH 10/15] Running worflows for pure SQP and unconstrained (pure Newton) instances --- .github/julia/MOI/equality-constrained.txt | 2 - .github/julia/MOI/general.txt | 2 + .github/julia/runtests_uno_pure_sqp_mumps.jl | 171 ++++++++++-------- .../runtests_uno_unconstrained_lbfgs_mumps.jl | 158 ++++++++++++++++ .../julia/runtests_uno_unconstrained_mumps.jl | 154 ++++++++++++++++ 5 files changed, 406 insertions(+), 81 deletions(-) create mode 100644 .github/julia/runtests_uno_unconstrained_lbfgs_mumps.jl create mode 100644 .github/julia/runtests_uno_unconstrained_mumps.jl diff --git a/.github/julia/MOI/equality-constrained.txt b/.github/julia/MOI/equality-constrained.txt index b3a588170..95be73e27 100644 --- a/.github/julia/MOI/equality-constrained.txt +++ b/.github/julia/MOI/equality-constrained.txt @@ -15,8 +15,6 @@ test_modification_mathoptinterface_issue_2452 test_nonlinear_objective test_nonlinear_objective_and_moi_objective_test test_nonlinear_without_objective -test_quadratic_nonconvex_constraint_basic -test_quadratic_nonhomogeneous test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_lower test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_upper test_solve_conflict_zeroone_2 diff --git a/.github/julia/MOI/general.txt b/.github/julia/MOI/general.txt index 88e83c9aa..72ae17a3a 100644 --- a/.github/julia/MOI/general.txt +++ b/.github/julia/MOI/general.txt @@ -276,7 +276,9 @@ test_quadratic_constraint_integration test_quadratic_constraint_minimize test_quadratic_duplicate_terms test_quadratic_integration +test_quadratic_nonconvex_constraint_basic test_quadratic_nonconvex_constraint_integration +test_quadratic_nonhomogeneous test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_GreaterThan test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_lower test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_upper diff --git a/.github/julia/runtests_uno_pure_sqp_mumps.jl b/.github/julia/runtests_uno_pure_sqp_mumps.jl index 1d4c46898..1e822c8b5 100644 --- a/.github/julia/runtests_uno_pure_sqp_mumps.jl +++ b/.github/julia/runtests_uno_pure_sqp_mumps.jl @@ -29,12 +29,14 @@ Optimizer_Uno_sqp() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver # keep only the equality-constrained instances instances = readlines(joinpath(@__DIR__, "MINLPTests/equality-constrained.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MINLPTests/NLP.txt")) exclude = [ # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed "nlp_expr_007_010" ] instances = setdiff(instances, exclude) -print("Instances with equality constraints: ", instances) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) # strip the prefix function strip_prefix(instances, prefix) @@ -58,92 +60,103 @@ primal_tol = 1e-4 # This function tests (potentially) non-convex nonlinear programs. The tests # are meant to be "easy" in the sense that most NLP solvers can find the # same global minimum, but a test failure can sometimes be allowed. -MINLPTests.test_directory( - "nlp-expr", - Optimizer_Uno_sqp; - include = strip_prefix(instances, "nlp_expr_"), - primal_target, objective_tol, primal_tol -) +nlp_expr_instances = strip_prefix(instances, "nlp_expr_") +if !isempty(nlp_expr_instances) + MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_sqp; + include = nlp_expr_instances, + primal_target, objective_tol, primal_tol + ) +end # This function tests convex nonlinear programs. Test failures here should # never be allowed, because even local NLP solvers should find the global # optimum. -MINLPTests.test_directory( - "nlp-cvx-expr", - Optimizer_Uno_sqp; - include = strip_prefix(instances, "nlp_cvx_expr_"), - primal_target, objective_tol, primal_tol -) +nlp_cvx_expr_instances = strip_prefix(instances, "nlp_cvx_expr_") +if !isempty(nlp_cvx_expr_instances) + MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_sqp; + include = nlp_cvx_expr_instances, + primal_target, objective_tol, primal_tol + ) +end # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. # keep only the equality-constrained instances instances = readlines(joinpath(@__DIR__, "MOI/equality-constrained.txt")) -#print("Instances with equality constraints: ", instances) +NLP_instances = readlines(joinpath(@__DIR__, "MOI/NLP.txt")) +instances = intersect(instances, NLP_instances) +MOI_instances = [Regex("^" * instance * "\$") for instance in instances] # exact match +#print("Instances: ", instances) -@testset "MathOptInterface.test" begin - optimizer = MOI.instantiate( - Optimizer_Uno_sqp; - with_cache_type = Float64, - with_bridge_type = Float64, - ) - MOI.Test.runtests( - optimizer, - MOI.Test.Config( - # These are pretty loose tolerances so that all tests pass. There - # are few tests with weird numerics. If tests fail because of - # tolerances, it might be okay to make these looser, or you could - # tighten the tolerances used by Uno. - atol = 1e-4, - rtol = 1e-4, - optimal_status = MOI.LOCALLY_SOLVED, - infeasible_status = MOI.LOCALLY_INFEASIBLE, - exclude = Any[ - # It's okay to exclude BasisStatus, since AmplNLWriter doesn't - # support this information, so too with ObjectiveBound, since - # Uno is a local NLP solver. - MOI.VariableBasisStatus, - MOI.ConstraintBasisStatus, - MOI.ObjectiveBound, - MOI.DualObjectiveValue, +if !isempty(MOI_instances) + @testset "MathOptInterface.test" begin + optimizer = MOI.instantiate( + Optimizer_Uno_sqp; + with_cache_type = Float64, + with_bridge_type = Float64, + ) + MOI.Test.runtests( + optimizer, + MOI.Test.Config( + # These are pretty loose tolerances so that all tests pass. There + # are few tests with weird numerics. If tests fail because of + # tolerances, it might be okay to make these looser, or you could + # tighten the tolerances used by Uno. + atol = 1e-4, + rtol = 1e-4, + optimal_status = MOI.LOCALLY_SOLVED, + infeasible_status = MOI.LOCALLY_INFEASIBLE, + exclude = Any[ + # It's okay to exclude BasisStatus, since AmplNLWriter doesn't + # support this information, so too with ObjectiveBound, since + # Uno is a local NLP solver. + MOI.VariableBasisStatus, + MOI.ConstraintBasisStatus, + MOI.ObjectiveBound, + MOI.DualObjectiveValue, + ], + ); + include = MOI_instances, + exclude = [ + # ================================================================== + # The following tests are bugs. + # + # We should fix issues in Uno, and then try removing these lines. + # + # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It + # might be acceptable to leave this as-is, but it would be better to + # fix. + r"^test_conic_NormInfinityCone_INFEASIBLE$", + r"^test_conic_NormOneCone_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE_2$", + r"^test_linear_INFEASIBLE$", + r"^test_linear_INFEASIBLE_2$", + r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", + # ================================================================== + # The following tests are okay to exclude forever. + # + # Uno does not support integrality, and AmplNLWriter has no way of + # telling if a particular binary supports integers or not (it + # defaults to assuming yes). + "Indicator", + r"[Ii]nteger", + "Semicontinuous", + "Semiinteger", + "SOS1", + "SOS2", + "ZeroOne", + r"^test_cpsat_", + r"^test_attribute_SolverVersion$", + r"^test_nonlinear_invalid$", + r"^test_basic_VectorNonlinearFunction_", + # MPEC instances + "_complementarity", ], - ); - include = [Regex("^" * instance * "\$") for instance in instances], # exact match - exclude = [ - # ================================================================== - # The following tests are bugs. - # - # We should fix issues in Uno, and then try removing these lines. - # - # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It - # might be acceptable to leave this as-is, but it would be better to - # fix. - r"^test_conic_NormInfinityCone_INFEASIBLE$", - r"^test_conic_NormOneCone_INFEASIBLE$", - r"^test_conic_linear_INFEASIBLE$", - r"^test_conic_linear_INFEASIBLE_2$", - r"^test_linear_INFEASIBLE$", - r"^test_linear_INFEASIBLE_2$", - r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", - # ================================================================== - # The following tests are okay to exclude forever. - # - # Uno does not support integrality, and AmplNLWriter has no way of - # telling if a particular binary supports integers or not (it - # defaults to assuming yes). - "Indicator", - r"[Ii]nteger", - "Semicontinuous", - "Semiinteger", - "SOS1", - "SOS2", - "ZeroOne", - r"^test_cpsat_", - r"^test_attribute_SolverVersion$", - r"^test_nonlinear_invalid$", - r"^test_basic_VectorNonlinearFunction_", - # MPEC instances - "_complementarity", - ], - ) -end + ) + end +end \ No newline at end of file diff --git a/.github/julia/runtests_uno_unconstrained_lbfgs_mumps.jl b/.github/julia/runtests_uno_unconstrained_lbfgs_mumps.jl new file mode 100644 index 000000000..5b55deb67 --- /dev/null +++ b/.github/julia/runtests_uno_unconstrained_lbfgs_mumps.jl @@ -0,0 +1,158 @@ +# Copyright (c) 2018-2026: Charlie Vanaret and contributors +# +# Use of this source code is governed by an MIT-style license that can be found +# in the LICENSE.md file or at https://opensource.org/licenses/MIT. + +# For help with this file, please contact `@odow` on GitHub. + +using Test + +import AmplNLWriter +import MathOptInterface as MOI +import MINLPTests +import Uno_jll + +""" + Optimizer() + +Create a new `AmplNLWriter.Optimizer` object that uses Uno as the backing +solver. +""" +function Optimizer(options) + return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) +end + +Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "hessian_model=LBFGS", "linear_solver=MUMPS"]) + +# This testset runs https://github.com/jump-dev/MINLPTests.jl + +# keep only the unconstrained NLP instances +instances = readlines(joinpath(@__DIR__, "MINLPTests/unconstrained.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MINLPTests/NLP.txt")) +instances = intersect(instances, NLP_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances +end + +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +nlp_expr_instances = strip_prefix(instances, "nlp_expr_") +if !isempty(nlp_expr_instances) + MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + # debug=true, + include = nlp_expr_instances, + primal_target, objective_tol, primal_tol + ) +end +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +nlp_cvx_expr_instances = strip_prefix(instances, "nlp_cvx_expr_") +if !isempty(nlp_cvx_expr_instances) + MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + # debug = true, + include = nlp_cvx_expr_instances, + primal_target, objective_tol, primal_tol + ) +end + +# This testset runs the full gamut of MOI.Test.runtests. There are a number of +# tests in here with weird edge cases, so a variety of exclusions are expected. + +# keep only the unconstrained NLP instances +instances = readlines(joinpath(@__DIR__, "MOI/unconstrained.txt")) +NLP_instances = readlines(joinpath(@__DIR__, "MOI/NLP.txt")) +instances = intersect(instances, NLP_instances) +MOI_instances = [Regex("^" * instance * "\$") for instance in instances] # exact match +#print("Instances: ", instances) + +if !isempty(MOI_instances) + @testset "MathOptInterface.test" begin + optimizer = MOI.instantiate( + Optimizer_Uno_ipopt; + with_cache_type = Float64, + with_bridge_type = Float64, + ) + MOI.Test.runtests( + optimizer, + MOI.Test.Config( + # These are pretty loose tolerances so that all tests pass. There + # are few tests with weird numerics. If tests fail because of + # tolerances, it might be okay to make these looser, or you could + # tighten the tolerances used by Uno. + atol = 1e-4, + rtol = 1e-4, + optimal_status = MOI.LOCALLY_SOLVED, + infeasible_status = MOI.LOCALLY_INFEASIBLE, + exclude = Any[ + # It's okay to exclude BasisStatus, since AmplNLWriter doesn't + # support this information, so too with ObjectiveBound, since + # Uno is a local NLP solver. + MOI.VariableBasisStatus, + MOI.ConstraintBasisStatus, + MOI.ObjectiveBound, + MOI.DualObjectiveValue, + ], + ); + include = MOI_instances, + exclude = [ + # ================================================================== + # The following tests are bugs. + # + # We should fix issues in Uno, and then try removing these lines. + # + # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It + # might be acceptable to leave this as-is, but it would be better to + # fix. + r"^test_conic_NormInfinityCone_INFEASIBLE$", + r"^test_conic_NormOneCone_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE_2$", + r"^test_linear_INFEASIBLE$", + r"^test_linear_INFEASIBLE_2$", + r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", + # ================================================================== + # The following tests are okay to exclude forever. + # + # Uno does not support integrality, and AmplNLWriter has no way of + # telling if a particular binary supports integers or not (it + # defaults to assuming yes). + "Indicator", + r"[Ii]nteger", + "Semicontinuous", + "Semiinteger", + "SOS1", + "SOS2", + "ZeroOne", + r"^test_cpsat_", + r"^test_attribute_SolverVersion$", + r"^test_nonlinear_invalid$", + r"^test_basic_VectorNonlinearFunction_", + # MPEC instances + "_complementarity", + ], + ) + end +end \ No newline at end of file diff --git a/.github/julia/runtests_uno_unconstrained_mumps.jl b/.github/julia/runtests_uno_unconstrained_mumps.jl new file mode 100644 index 000000000..89327de57 --- /dev/null +++ b/.github/julia/runtests_uno_unconstrained_mumps.jl @@ -0,0 +1,154 @@ +# Copyright (c) 2018-2026: Charlie Vanaret and contributors +# +# Use of this source code is governed by an MIT-style license that can be found +# in the LICENSE.md file or at https://opensource.org/licenses/MIT. + +# For help with this file, please contact `@odow` on GitHub. + +using Test + +import AmplNLWriter +import MathOptInterface as MOI +import MINLPTests +import Uno_jll + +""" + Optimizer() + +Create a new `AmplNLWriter.Optimizer` object that uses Uno as the backing +solver. +""" +function Optimizer(options) + return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) +end + +Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "hessian_model=exact", "linear_solver=MUMPS"]) + +# This testset runs https://github.com/jump-dev/MINLPTests.jl + +# keep only the unconstrained instances +instances = readlines(joinpath(@__DIR__, "MINLPTests/unconstrained.txt")) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances +end + +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +nlp_expr_instances = strip_prefix(instances, "nlp_expr_") +if !isempty(nlp_expr_instances) + MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + # debug=true, + include = nlp_expr_instances, + primal_target, objective_tol, primal_tol + ) +end +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +nlp_cvx_expr_instances = strip_prefix(instances, "nlp_cvx_expr_") +if !isempty(nlp_cvx_expr_instances) + MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + # debug = true, + include = nlp_cvx_expr_instances, + primal_target, objective_tol, primal_tol + ) +end + +# This testset runs the full gamut of MOI.Test.runtests. There are a number of +# tests in here with weird edge cases, so a variety of exclusions are expected. + +# keep only the unconstrained instances +instances = readlines(joinpath(@__DIR__, "MOI/unconstrained.txt")) +MOI_instances = [Regex("^" * instance * "\$") for instance in instances] # exact match +#print("Instances: ", instances) + +if !isempty(MOI_instances) + @testset "MathOptInterface.test" begin + optimizer = MOI.instantiate( + Optimizer_Uno_ipopt; + with_cache_type = Float64, + with_bridge_type = Float64, + ) + MOI.Test.runtests( + optimizer, + MOI.Test.Config( + # These are pretty loose tolerances so that all tests pass. There + # are few tests with weird numerics. If tests fail because of + # tolerances, it might be okay to make these looser, or you could + # tighten the tolerances used by Uno. + atol = 1e-4, + rtol = 1e-4, + optimal_status = MOI.LOCALLY_SOLVED, + infeasible_status = MOI.LOCALLY_INFEASIBLE, + exclude = Any[ + # It's okay to exclude BasisStatus, since AmplNLWriter doesn't + # support this information, so too with ObjectiveBound, since + # Uno is a local NLP solver. + MOI.VariableBasisStatus, + MOI.ConstraintBasisStatus, + MOI.ObjectiveBound, + MOI.DualObjectiveValue, + ], + ); + include = MOI_instances, + exclude = [ + # ================================================================== + # The following tests are bugs. + # + # We should fix issues in Uno, and then try removing these lines. + # + # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It + # might be acceptable to leave this as-is, but it would be better to + # fix. + r"^test_conic_NormInfinityCone_INFEASIBLE$", + r"^test_conic_NormOneCone_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE_2$", + r"^test_linear_INFEASIBLE$", + r"^test_linear_INFEASIBLE_2$", + r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", + # ================================================================== + # The following tests are okay to exclude forever. + # + # Uno does not support integrality, and AmplNLWriter has no way of + # telling if a particular binary supports integers or not (it + # defaults to assuming yes). + "Indicator", + r"[Ii]nteger", + "Semicontinuous", + "Semiinteger", + "SOS1", + "SOS2", + "ZeroOne", + r"^test_cpsat_", + r"^test_attribute_SolverVersion$", + r"^test_nonlinear_invalid$", + r"^test_basic_VectorNonlinearFunction_", + # MPEC instances + "_complementarity", + ], + ) + end +end \ No newline at end of file From 7f1791d07293abdd5d642896ea07fa6d50a25207 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 19:18:56 +0200 Subject: [PATCH 11/15] Added README about test scripts in .github/julia --- .github/julia/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/julia/README.md diff --git a/.github/julia/README.md b/.github/julia/README.md new file mode 100644 index 000000000..ad863ec2f --- /dev/null +++ b/.github/julia/README.md @@ -0,0 +1,28 @@ +# Julia tests + +The Julia workflows run different solver configurations on MINLPTests.jl and MathOptInterface.jl instances. +We have partitioned the instances in order to target particular tests (e.g., inequality-constrained problems). + +| Option | unconstrained | bound-constrained | equality-constrained | general | LP | NLP | +|:-----------------------------------------|:--------------|:------------------|:---------------------|:--------|:---|:----| +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `` | | | | | | | +| `runtests_uno_pure_sqp_mumps` | | | x | | | x | +| `runtests_uno_unconstrained_lbfgs_mumps` | x | | | | | x | +| `runtests_uno_unconstrained_mumps` | x | | | | x | x | From 84eb9c877342284a20c28ae2e83ca7c604b3a979 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 19:19:50 +0200 Subject: [PATCH 12/15] Added safeguards in case the instance list is empty --- .github/julia/runtests_uno_ipopt_mumps.jl | 2 +- .../julia/runtests_uno_ipopt_mumps_lbfgs.jl | 169 +++++++++--------- 2 files changed, 90 insertions(+), 81 deletions(-) diff --git a/.github/julia/runtests_uno_ipopt_mumps.jl b/.github/julia/runtests_uno_ipopt_mumps.jl index 68a65de23..3151d2e5c 100644 --- a/.github/julia/runtests_uno_ipopt_mumps.jl +++ b/.github/julia/runtests_uno_ipopt_mumps.jl @@ -30,7 +30,7 @@ Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solv bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) instances = vcat(bound_constrained_instances, general_instances) -#print("Instances with inequality constraints: ", instances) +#print("Instances: ", instances) # strip the prefix function strip_prefix(instances, prefix) diff --git a/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl b/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl index a0708d73e..61afdf600 100644 --- a/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl +++ b/.github/julia/runtests_uno_ipopt_mumps_lbfgs.jl @@ -56,21 +56,27 @@ primal_tol = 1e-4 # This function tests (potentially) non-convex nonlinear programs. The tests # are meant to be "easy" in the sense that most NLP solvers can find the # same global minimum, but a test failure can sometimes be allowed. -MINLPTests.test_directory( - "nlp-expr", - Optimizer_Uno_ipopt; - include = strip_prefix(instances, "nlp_expr_"), - primal_target, objective_tol, primal_tol -) +nlp_expr_instances = strip_prefix(instances, "nlp_expr_") +if !isempty(nlp_expr_instances) + MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = nlp_expr_instances, + primal_target, objective_tol, primal_tol + ) +end # This function tests convex nonlinear programs. Test failures here should # never be allowed, because even local NLP solvers should find the global # optimum. -MINLPTests.test_directory( - "nlp-cvx-expr", - Optimizer_Uno_ipopt; - include = strip_prefix(instances, "nlp_cvx_expr_"), - primal_target, objective_tol, primal_tol -) +nlp_cvx_expr_instances = strip_prefix(instances, "nlp_cvx_expr_") +if !isempty(nlp_cvx_expr_instances) + MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = nlp_cvx_expr_instances, + primal_target, objective_tol, primal_tol + ) +end # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. @@ -81,74 +87,77 @@ general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) NLP_instances = readlines(joinpath(@__DIR__, "MOI/NLP.txt")) instances = vcat(bound_constrained_instances, general_instances) instances = intersect(instances, NLP_instances) +MOI_instances = [Regex("^" * instance * "\$") for instance in instances] # exact match #print("Instances: ", instances) -@testset "MathOptInterface.test" begin - optimizer = MOI.instantiate( - Optimizer_Uno_ipopt; - with_cache_type = Float64, - with_bridge_type = Float64, - ) - MOI.Test.runtests( - optimizer, - MOI.Test.Config( - # These are pretty loose tolerances so that all tests pass. There - # are few tests with weird numerics. If tests fail because of - # tolerances, it might be okay to make these looser, or you could - # tighten the tolerances used by Uno. - atol = 1e-4, - rtol = 1e-4, - optimal_status = MOI.LOCALLY_SOLVED, - infeasible_status = MOI.LOCALLY_INFEASIBLE, - exclude = Any[ - # It's okay to exclude BasisStatus, since AmplNLWriter doesn't - # support this information, so too with ObjectiveBound, since - # Uno is a local NLP solver. - MOI.VariableBasisStatus, - MOI.ConstraintBasisStatus, - MOI.ObjectiveBound, - MOI.DualObjectiveValue, +if !isempty(MOI_instances) + @testset "MathOptInterface.test" begin + optimizer = MOI.instantiate( + Optimizer_Uno_ipopt; + with_cache_type = Float64, + with_bridge_type = Float64, + ) + MOI.Test.runtests( + optimizer, + MOI.Test.Config( + # These are pretty loose tolerances so that all tests pass. There + # are few tests with weird numerics. If tests fail because of + # tolerances, it might be okay to make these looser, or you could + # tighten the tolerances used by Uno. + atol = 1e-4, + rtol = 1e-4, + optimal_status = MOI.LOCALLY_SOLVED, + infeasible_status = MOI.LOCALLY_INFEASIBLE, + exclude = Any[ + # It's okay to exclude BasisStatus, since AmplNLWriter doesn't + # support this information, so too with ObjectiveBound, since + # Uno is a local NLP solver. + MOI.VariableBasisStatus, + MOI.ConstraintBasisStatus, + MOI.ObjectiveBound, + MOI.DualObjectiveValue, + ], + ); + include = MOI_instances, + exclude = [ + # ================================================================== + # The following tests are bugs. + # + # We should fix issues in Uno, and then try removing these lines. + # + # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It + # might be acceptable to leave this as-is, but it would be better to + # fix. + r"^test_conic_NormInfinityCone_INFEASIBLE$", + r"^test_conic_NormOneCone_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE$", + r"^test_conic_linear_INFEASIBLE_2$", + r"^test_linear_INFEASIBLE$", + r"^test_linear_INFEASIBLE_2$", + r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", + # this test passes with exact Hessian but fails with L-BFGS Hessian + # OK to exclude for now, but should be investigated + r"^test_objective_qp_ObjectiveFunction_edge_cases", + # ================================================================== + # The following tests are okay to exclude forever. + # + # Uno does not support integrality, and AmplNLWriter has no way of + # telling if a particular binary supports integers or not (it + # defaults to assuming yes). + "Indicator", + r"[Ii]nteger", + "Semicontinuous", + "Semiinteger", + "SOS1", + "SOS2", + "ZeroOne", + r"^test_cpsat_", + r"^test_attribute_SolverVersion$", + r"^test_nonlinear_invalid$", + r"^test_basic_VectorNonlinearFunction_", + # MPEC instances + "_complementarity", ], - ); - include = [Regex("^" * instance * "\$") for instance in instances], # exact match - exclude = [ - # ================================================================== - # The following tests are bugs. - # - # We should fix issues in Uno, and then try removing these lines. - # - # These tests return OTHER_LIMIT instead of LOCALLY_INFEASIBLE. It - # might be acceptable to leave this as-is, but it would be better to - # fix. - r"^test_conic_NormInfinityCone_INFEASIBLE$", - r"^test_conic_NormOneCone_INFEASIBLE$", - r"^test_conic_linear_INFEASIBLE$", - r"^test_conic_linear_INFEASIBLE_2$", - r"^test_linear_INFEASIBLE$", - r"^test_linear_INFEASIBLE_2$", - r"^test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_", - # this test passes with exact Hessian but fails with L-BFGS Hessian - # OK to exclude for now, but should be investigated - r"^test_objective_qp_ObjectiveFunction_edge_cases", - # ================================================================== - # The following tests are okay to exclude forever. - # - # Uno does not support integrality, and AmplNLWriter has no way of - # telling if a particular binary supports integers or not (it - # defaults to assuming yes). - "Indicator", - r"[Ii]nteger", - "Semicontinuous", - "Semiinteger", - "SOS1", - "SOS2", - "ZeroOne", - r"^test_cpsat_", - r"^test_attribute_SolverVersion$", - r"^test_nonlinear_invalid$", - r"^test_basic_VectorNonlinearFunction_", - # MPEC instances - "_complementarity", - ], - ) -end + ) + end +end \ No newline at end of file From 779b586138244190e30d902ad33b0a0763175596 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 19:58:57 +0200 Subject: [PATCH 13/15] Removed unwanted instance (user-defined function) from instances partition --- .github/julia/MINLPTests/NLP.txt | 1 - .github/julia/MINLPTests/general.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/julia/MINLPTests/NLP.txt b/.github/julia/MINLPTests/NLP.txt index 2961ccfdd..ec9e7320b 100644 --- a/.github/julia/MINLPTests/NLP.txt +++ b/.github/julia/MINLPTests/NLP.txt @@ -60,7 +60,6 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 -nlp_expr_006_010 nlp_expr_007_010 nlp_expr_008_010 nlp_expr_009_010 diff --git a/.github/julia/MINLPTests/general.txt b/.github/julia/MINLPTests/general.txt index cc36963e4..49b966dde 100644 --- a/.github/julia/MINLPTests/general.txt +++ b/.github/julia/MINLPTests/general.txt @@ -60,5 +60,4 @@ nlp_expr_003_016 nlp_expr_004_010 nlp_expr_004_011 nlp_expr_005_010 -nlp_expr_006_010 nlp_expr_008_010 From 7c44f88c4c0683cfd0fdc33da76fe4a99600e9ec Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 20:11:13 +0200 Subject: [PATCH 14/15] Enabled unconstrained tests --- .github/workflows/julia-tests-ubuntu.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/julia-tests-ubuntu.yml b/.github/workflows/julia-tests-ubuntu.yml index f4bc4cc5a..dbccdeea4 100644 --- a/.github/workflows/julia-tests-ubuntu.yml +++ b/.github/workflows/julia-tests-ubuntu.yml @@ -88,10 +88,11 @@ jobs: strategy: fail-fast: false matrix: - UNO_PRESET: [uno_filtersqp_bqpd, uno_filtersqp_highs, uno_filtersqp_bqpd_identity, uno_filtersqp_bqpd_lsr1, + UNO_PRESET: [uno_filterslp_bqpd, uno_filterslp_highs, uno_filtersqp_bqpd_charlies_instances, + uno_filtersqp_bqpd, uno_filtersqp_highs, uno_filtersqp_bqpd_identity, uno_filtersqp_bqpd_lsr1, uno_filtersqp_bqpd_regularization_tr, uno_filtersqp_bqpd_regularization_ls, uno_filtersqp_bqpd_ls_lbfgs, - uno_ipopt_mumps, uno_ipopt_mumps_lbfgs, uno_ipopt_mumps_identity, uno_pure_sqp_mumps, uno_ipopt_ssids, - uno_filterslp_bqpd, uno_filterslp_highs, uno_filtersqp_bqpd_charlies_instances] + uno_ipopt_mumps, uno_ipopt_mumps_lbfgs, uno_ipopt_mumps_identity, uno_ipopt_ssids, + uno_pure_sqp_mumps, uno_unconstrained_lbfgs_mumps, uno_unconstrained_mumps] steps: - uses: actions/checkout@v4 From 0bd9e42e89d22354248570aaa50e7351b4b62cf8 Mon Sep 17 00:00:00 2001 From: Charlie Vanaret Date: Wed, 10 Jun 2026 21:09:07 +0200 Subject: [PATCH 15/15] Minor changes --- .github/julia/README.md | 44 +++++----- .github/julia/runtests_uno_filterslp_bqpd.jl | 3 +- .github/julia/runtests_uno_filterslp_highs.jl | 3 +- .github/julia/runtests_uno_ipopt_ma27.jl | 82 ++++++++++++------- .github/julia/runtests_uno_ipopt_ma57.jl | 82 ++++++++++++------- .github/julia/runtests_uno_ipopt_mumps.jl | 2 +- .github/julia/runtests_uno_ipopt_ssids.jl | 78 ++++++++++++------ 7 files changed, 183 insertions(+), 111 deletions(-) diff --git a/.github/julia/README.md b/.github/julia/README.md index ad863ec2f..43ee26cd2 100644 --- a/.github/julia/README.md +++ b/.github/julia/README.md @@ -3,26 +3,24 @@ The Julia workflows run different solver configurations on MINLPTests.jl and MathOptInterface.jl instances. We have partitioned the instances in order to target particular tests (e.g., inequality-constrained problems). -| Option | unconstrained | bound-constrained | equality-constrained | general | LP | NLP | -|:-----------------------------------------|:--------------|:------------------|:---------------------|:--------|:---|:----| -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `` | | | | | | | -| `runtests_uno_pure_sqp_mumps` | | | x | | | x | -| `runtests_uno_unconstrained_lbfgs_mumps` | x | | | | | x | -| `runtests_uno_unconstrained_mumps` | x | | | | x | x | +| Script | unconstrained | bound-constrained | equality-constrained | general | LP | NLP | +|:------------------------------------------------|:--------------|:------------------|:---------------------|:--------|:---|:----| +| `runtests_uno_filterslp_bqpd` | | | | | | | +| `runtests_uno_filterslp_highs` | | | | | | | +| `runtests_uno_filtersqp_bqpd` | | | | | | | +| `runtests_uno_filtersqp_bqpd_identity` | | | | | | | +| `runtests_uno_filtersqp_bqpd_ls_lbfgs` | | | | | | | +| `runtests_uno_filtersqp_bqpd_lsr1` | | | | | | | +| `runtests_uno_filtersqp_bqpd_regularization_ls` | | | | | | | +| `runtests_uno_filtersqp_bqpd_regularization_tr` | | | | | | | +| `runtests_uno_ipopt_ma27` | | x | | x | x | x | +| `runtests_uno_ipopt_ma57` | | x | | x | x | x | +| `runtests_uno_ipopt_mumps` | | x | | x | x | x | +| `runtests_uno_ipopt_ssids` | | x | | x | x | x | +| `runtests_uno_ipopt_mumps_identity` | | x | | x | | x | +| `runtests_uno_ipopt_mumps_lbfgs` | | x | | x | | x | +| `runtests_uno_pure_sqp_mumps` | | | x | | | x | +| `runtests_uno_unconstrained_lbfgs_mumps` | x | | | | | x | +| `runtests_uno_unconstrained_mumps` | x | | | | x | x | + +`runtests_uno_filtersqp_highs` runs only on convex `MINLPTests.nlp_cvx_expr`. \ No newline at end of file diff --git a/.github/julia/runtests_uno_filterslp_bqpd.jl b/.github/julia/runtests_uno_filterslp_bqpd.jl index fc1d31d51..6d48926c8 100644 --- a/.github/julia/runtests_uno_filterslp_bqpd.jl +++ b/.github/julia/runtests_uno_filterslp_bqpd.jl @@ -22,7 +22,8 @@ function Optimizer(options) return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) end -Optimizer_Uno_filterslp() = Optimizer(["logger=SILENT", "preset=filterslp", "LP_solver=BQPD", "max_iterations=10000", "unbounded_objective_threshold=-1e15", "primal_tolerance=1e-7"]) +Optimizer_Uno_filterslp() = Optimizer(["logger=SILENT", "preset=filterslp", "LP_solver=BQPD", "max_iterations=10000", + "unbounded_objective_threshold=-1e15", "primal_tolerance=1e-7"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl @testset "MINLPTests" begin diff --git a/.github/julia/runtests_uno_filterslp_highs.jl b/.github/julia/runtests_uno_filterslp_highs.jl index 1652e161a..c911533c2 100644 --- a/.github/julia/runtests_uno_filterslp_highs.jl +++ b/.github/julia/runtests_uno_filterslp_highs.jl @@ -22,7 +22,8 @@ function Optimizer(options) return AmplNLWriter.Optimizer(Uno_jll.amplexe, options) end -Optimizer_Uno_filterslp() = Optimizer(["logger=SILENT", "preset=filterslp", "LP_solver=HiGHS", "max_iterations=10000", "unbounded_objective_threshold=-1e15", "dual_tolerance=1e-6"]) +Optimizer_Uno_filterslp() = Optimizer(["logger=SILENT", "preset=filterslp", "LP_solver=HiGHS", "max_iterations=10000", + "unbounded_objective_threshold=-1e15", "dual_tolerance=1e-6"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl @testset "MINLPTests" begin diff --git a/.github/julia/runtests_uno_ipopt_ma27.jl b/.github/julia/runtests_uno_ipopt_ma27.jl index 8edbecd76..5e05efb60 100644 --- a/.github/julia/runtests_uno_ipopt_ma27.jl +++ b/.github/julia/runtests_uno_ipopt_ma27.jl @@ -1,9 +1,9 @@ -# Copyright (c) 2018-2025: Charlie Vanaret and contributors +# Copyright (c) 2018-2026: Charlie Vanaret and contributors # # Use of this source code is governed by an MIT-style license that can be found # in the LICENSE.md file or at https://opensource.org/licenses/MIT. -# For help with this file, please contact `@amontoison` or `@odow` on GitHub. +# For help with this file, please contact `@odow` on GitHub. using Test @@ -25,37 +25,60 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MA27", "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances end +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances with inequality constraints: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -83,6 +106,7 @@ end MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs. diff --git a/.github/julia/runtests_uno_ipopt_ma57.jl b/.github/julia/runtests_uno_ipopt_ma57.jl index bade46273..be335e17d 100644 --- a/.github/julia/runtests_uno_ipopt_ma57.jl +++ b/.github/julia/runtests_uno_ipopt_ma57.jl @@ -1,9 +1,9 @@ -# Copyright (c) 2018-2025: Charlie Vanaret and contributors +# Copyright (c) 2018-2026: Charlie Vanaret and contributors # # Use of this source code is governed by an MIT-style license that can be found # in the LICENSE.md file or at https://opensource.org/licenses/MIT. -# For help with this file, please contact `@amontoison` or `@odow` on GitHub. +# For help with this file, please contact `@odow` on GitHub. using Test @@ -25,37 +25,60 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=MA57", "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances end +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances with inequality constraints: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -83,6 +106,7 @@ end MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs. diff --git a/.github/julia/runtests_uno_ipopt_mumps.jl b/.github/julia/runtests_uno_ipopt_mumps.jl index 3151d2e5c..603a4a3e4 100644 --- a/.github/julia/runtests_uno_ipopt_mumps.jl +++ b/.github/julia/runtests_uno_ipopt_mumps.jl @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2025: Charlie Vanaret and contributors +# Copyright (c) 2018-2026: Charlie Vanaret and contributors # # Use of this source code is governed by an MIT-style license that can be found # in the LICENSE.md file or at https://opensource.org/licenses/MIT. diff --git a/.github/julia/runtests_uno_ipopt_ssids.jl b/.github/julia/runtests_uno_ipopt_ssids.jl index a105b0162..cc93d8ecf 100644 --- a/.github/julia/runtests_uno_ipopt_ssids.jl +++ b/.github/julia/runtests_uno_ipopt_ssids.jl @@ -25,37 +25,60 @@ end Optimizer_Uno_ipopt() = Optimizer(["logger=SILENT", "preset=ipopt", "linear_solver=SSIDS", "unbounded_objective_threshold=-1e15"]) # This testset runs https://github.com/jump-dev/MINLPTests.jl -@testset "MINLPTests" begin - primal_target = Dict( - MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, - # If Uno starts writing a .sol file with an infeasible point, change - # this to `=> MOI.INFEASIBLE_POINT` - MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, - ) - objective_tol = 1e-4 - primal_tol = 1e-4 - # This function tests (potentially) non-convex nonlinear programs. The tests - # are meant to be "easy" in the sense that most NLP solvers can find the - # same global minimum, but a test failure can sometimes be allowed. - MINLPTests.test_nlp_expr( - Optimizer_Uno_ipopt; - exclude = [ - # Okay to exclude forever: AmplNLWriter does not support - # user-defined functions. - "006_010", - # Remove once https://github.com/cvanaret/Uno/issues/38 is fixed - "007_010", - ], - primal_target, objective_tol, primal_tol - ) - # This function tests convex nonlinear programs. Test failures here should - # never be allowed, because even local NLP solvers should find the global - # optimum. - MINLPTests.test_nlp_cvx_expr(Optimizer_Uno_ipopt; primal_target, objective_tol, primal_tol) + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MINLPTests/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MINLPTests/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances: ", instances) + +# strip the prefix +function strip_prefix(instances, prefix) + cleaned_instances = String[] + for instance in instances + instance = strip(instance) + startswith(instance, prefix) && push!(cleaned_instances, replace(instance, prefix => ""; count = 1)) + end + return cleaned_instances end +primal_target = Dict( + MINLPTests.FEASIBLE_PROBLEM => MOI.FEASIBLE_POINT, + # If Uno starts writing a .sol file with an infeasible point, change + # this to `=> MOI.INFEASIBLE_POINT` + MINLPTests.INFEASIBLE_PROBLEM => MOI.NO_SOLUTION, +) +objective_tol = 1e-4 +primal_tol = 1e-4 + +# This function tests (potentially) non-convex nonlinear programs. The tests +# are meant to be "easy" in the sense that most NLP solvers can find the +# same global minimum, but a test failure can sometimes be allowed. +MINLPTests.test_directory( + "nlp-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_expr_"), + primal_target, objective_tol, primal_tol +) +# This function tests convex nonlinear programs. Test failures here should +# never be allowed, because even local NLP solvers should find the global +# optimum. +MINLPTests.test_directory( + "nlp-cvx-expr", + Optimizer_Uno_ipopt; + include = strip_prefix(instances, "nlp_cvx_expr_"), + primal_target, objective_tol, primal_tol +) + # This testset runs the full gamut of MOI.Test.runtests. There are a number of # tests in here with weird edge cases, so a variety of exclusions are expected. + +# drop the equality-constrained instances +bound_constrained_instances = readlines(joinpath(@__DIR__, "MOI/bound-constrained.txt")) +general_instances = readlines(joinpath(@__DIR__, "MOI/general.txt")) +instances = vcat(bound_constrained_instances, general_instances) +#print("Instances with inequality constraints: ", instances) + @testset "MathOptInterface.test" begin optimizer = MOI.instantiate( Optimizer_Uno_ipopt; @@ -83,6 +106,7 @@ end MOI.DualObjectiveValue, ], ); + include = [Regex("^" * instance * "\$") for instance in instances], # exact match exclude = [ # ================================================================== # The following tests are bugs.