MathOpt: python_math_opt_solver_test failed on macOS and Windows
- Dominant language
- C++
- Stars
- 14.1k
- Forks
- 2.5k
- Avg merge
- 8h 39m
- Merged PRs (30d)
- 72
Description
TLDR: blocked by
* pybind/pybind11_abseil#12
**What version of OR-Tools and what language are you using?**
Version: `main` and `v99bugfix`
OS: MacOS
Language: Python
**Which solver are you using (e.g. CP-SAT, Routing Solver, GLOP, BOP, Gurobi)**
MathOpt
**What did you do?**
Build and running python on macOS...
```sh
cmake -S. -Bbuild -DBUILD_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SAMPLES=OFF
cmake --build build -j 8
(cd build && ctest -C Release --output-on-failure -R "python_math_opt_solver_test")
```
**What did you expect to see**
all test passed
**What did you see instead?**
runner trace:
```sh
139/456 Test #139: python_math_opt_solver_test ................................................***Failed 0.63 sec
============================= test session starts ==============================
platform darwin -- Python 3.12.7, pytest-8.3.4, pluggy-1.5.0
rootdir: /Users/runner/work/or-tools/or-tools
collected 15 items
../../../ortools/math_opt/core/python/solver_test.py ..FF........... [100%]
=================================== FAILURES ===================================
_________ PybindSolverTest.test_invalid_input_throws_error_with_solver _________
self =
use_solver_class = True
@parameterized.named_parameters(
dict(testcase_name="without_solver", use_solver_class=False),
dict(testcase_name="with_solver", use_solver_class=True),
)
def test_invalid_input_throws_error(self, use_solver_class: bool) -> None:
model = _build_simple_model()
# Add invalid variable id to cause MathOpt model validation error.
model.objective.linear_coefficients.ids.append(7)
model.objective.linear_coefficients.values.append(2.0)
with self.assertRaisesRegex(StatusNotOk, "id 7 not found"):
> _solve_model(model, use_solver_class=use_solver_class)
../../../ortools/math_opt/core/python/solver_test.py:115:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def _solve_model(
model: model_pb2.ModelProto,
*,
use_solver_class: bool,
solver_type: parameters_pb2.SolverTypeProto = parameters_pb2.SOLVER_TYPE_GLOP,
solver_initializer: parameters_pb2.SolverInitializerProto = parameters_pb2.SolverInitializerProto(),
parameters: parameters_pb2.SolveParametersProto = parameters_pb2.SolveParametersProto(),
model_parameters: model_parameters_pb2.ModelSolveParametersProto = model_parameters_pb2.ModelSolveParametersProto(),
message_callback: Optional[Callable[[Sequence[str]], None]] = None,
callback_registration: callback_pb2.CallbackRegistrationProto = callback_pb2.CallbackRegistrationProto(),
user_cb: Optional[
Callable[[callback_pb2.CallbackDataProto], callback_pb2.CallbackResultProto]
] = None,
interrupter: Optional[solver.SolveInterrupter] = None,
) -> result_pb2.SolveResultProto:
"""Convenience function for both types of solve with parameter defaults."""
if use_solver_class:
> pybind_solver = solver.new(
solver_type,
model,
solver_initializer,
)
E RuntimeError: INVALID_ARGUMENT: id 7 not found; Objective.linear_coefficients.ids not found in Variables.ids; ModelProto.objective is invalid
../../../ortools/math_opt/core/python/solver_test.py:59: RuntimeError
_______ PybindSolverTest.test_invalid_input_throws_error_without_solver ________
self =
use_solver_class = False
@parameterized.named_parameters(
dict(testcase_name="without_solver", use_solver_class=False),
dict(testcase_name="with_solver", use_solver_class=True),
)
def test_invalid_input_throws_error(self, use_solver_class: bool) -> None:
model = _build_simple_model()
# Add invalid variable id to cause MathOpt model validation error.
model.objective.linear_coefficients.ids.append(7)
model.objective.linear_coefficients.values.append(2.0)
with self.assertRaisesRegex(StatusNotOk, "id 7 not found"):
> _solve_model(model, use_solver_class=use_solver_class)
../../../ortools/math_opt/core/python/solver_test.py:115:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def _solve_model(
model: model_pb2.ModelProto,
*,
use_solver_class: bool,
solver_type: parameters_pb2.SolverTypeProto = parameters_pb2.SOLVER_TYPE_GLOP,
solver_initializer: parameters_pb2.SolverInitializerProto = parameters_pb2.SolverInitializerProto(),
parameters: parameters_pb2.SolveParametersProto = parameters_pb2.SolveParametersProto(),
model_parameters: model_parameters_pb2.ModelSolveParametersProto = model_parameters_pb2.ModelSolveParametersProto(),
message_callback: Optional[Callable[[Sequence[str]], None]] = None,
callback_registration: callback_pb2.CallbackRegistrationProto = callback_pb2.CallbackRegistrationProto(),
user_cb: Optional[
Callable[[callback_pb2.CallbackDataProto], callback_pb2.CallbackResultProto]
] = None,
interrupter: Optional[solver.SolveInterrupter] = None,
) -> result_pb2.SolveResultProto:
"""Convenience function for both types of solve with parameter defaults."""
if use_solver_class:
pybind_solver = solver.new(
solver_type,
model,
solver_initializer,
)
return pybind_solver.solve(
parameters,
model_parameters,
message_callback,
callback_registration,
user_cb,
interrupter,
)
else:
> return solver.solve(
model,
solver_type,
solver_initializer,
parameters,
model_parameters,
message_callback,
callback_registration,
user_cb,
interrupter,
)
E RuntimeError: INVALID_ARGUMENT: id 7 not found; Objective.linear_coefficients.ids not found in Variables.ids; ModelProto.objective is invalid
../../../ortools/math_opt/core/python/solver_test.py:73: RuntimeError
=========================== short test summary info ============================
FAILED ../../../ortools/math_opt/core/python/solver_test.py::PybindSolverTest::test_invalid_input_throws_error_with_solver - RuntimeError: INVALID_ARGUMENT: id 7 not found; Objective.linear_coefficients.ids not found in Variables.ids; ModelProto.objective is invalid
FAILED ../../../ortools/math_opt/core/python/solver_test.py::PybindSolverTest::test_invalid_input_throws_error_without_solver - RuntimeError: INVALID_ARGUMENT: id 7 not found; Objective.linear_coefficients.ids not found in Variables.ids; ModelProto.objective is invalid
========================= 2 failed, 13 passed in 0.36s =========================
Start 140: python_math_opt_compute_infeasible_subsystem_result_test
```
ref: https://github.com/google/or-tools/actions/runs/12116420023/job/33776757913#step:9:318
Contributor guide
Assessment
This issue has not been assessed yet.