Skip to content

Test pulp.tests.test_pulp.HiGHS_CMDTest.test_time_limit_no_solution fails on non-x86 architectures #832

@musicinmybrain

Description

@musicinmybrain

Details for the issue

What did you do?

Working on Fedora 42, with the system coin-or-HiGHS package installed, on an architecture other than x86_64, that is, on aarch64, ppc64le, or s390x:

$ python3 --version
Python 3.13.3
$ git clone https://github.com/coin-or/pulp.git
$ cd pulp
$ python3 -m venv _e
$ . _e/bin/activate
(_e) $ pip install -e .
(_e) $ pulptest
Available solvers: ['PULP_CBC_CMD', 'HiGHS_CMD']
Unavailable solvers: {'SASCAS', 'HiGHS', 'COINMP_DLL', 'XPRESS_PY', 'COPT', 'GUROBI', 'CPLEX_CMD', 'GLPK_CMD', 'SAS94', 'SCIP_CMD', 'COIN_CMD', 'CPLEX_PY', 'COPT_DLL', 'MIPCL_CMD', 'CyLP', 'GUROBI_CMD', 'CHOCO_CMD', 'FSCIP_CMD', 'MOSEK', 'PYGLPK', 'SCIP_PY', 'COPT_CMD', 'XPRESS'}
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss....................................................E..Running HiGHS 1.10.0 (git hash: fd8665394): Copyright (c) 2025 HiGHS under MIT licence terms
Set option solution_file to "/tmp/135cf7dd025d4490ad6c007282988311-pulp.sol"
Set option log_file to "/tmp/135cf7dd025d4490ad6c007282988311-pulp.HiGHS_log"
Set option write_solution_to_file to true
LP   135cf7dd025d4490ad6c007282988311-pulp has 4 rows; 4 cols; 7 nonzeros
Coefficient ranges:
  Matrix [1e+00, 1e+00]
  Cost   [1e+00, 9e+00]
  Bound  [1e+00, 4e+00]
  RHS    [5e+00, 1e+01]
Presolving model
1 rows, 2 cols, 2 nonzeros  0s
0 rows, 0 cols, 0 nonzeros  0s
Presolve : Reductions: rows 0(-4); columns 0(-4); elements 0(-7) - Reduced to empty
Solving the original LP from the solution after postsolve
Model name          : 135cf7dd025d4490ad6c007282988311-pulp
Model status        : Optimal
Objective value     :  5.4000000000e+01
Relative P-D gap    :  0.0000000000e+00
HiGHS run time      :          0.04
Writing the solution to /tmp/135cf7dd025d4490ad6c007282988311-pulp.sol
..............E......ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss......................................................F..Welcome to the CBC MILP Solver 
Version: 2.10.10 
Build Date: Sep 26 2023 

command line - /builddir/pulp/pulp/apis/../solverdir/cbc/linux/arm64/cbc /tmp/36c68f001c7b4a0b8f86047275906e38-pulp.mps -timeMode elapsed -branch -printingOptions all -solution /tmp/36c68f001c7b4a0b8f86047275906e38-pulp.sol (default strategy 1)
At line 2 NAME          MODEL
At line 3 ROWS
At line 9 COLUMNS
At line 20 RHS
At line 25 BOUNDS
At line 29 ENDATA
Problem MODEL has 4 rows, 4 columns and 7 elements
Coin0008I MODEL read with 0 errors
Option for timeMode changed from cpu to elapsed
Presolve 1 (-3) rows, 2 (-2) columns and 2 (-5) elements
0  Obj 51.9 Primal inf 2.099999 (1)
1  Obj 54
Optimal - objective value 54
After Postsolve, objective 54, infeasibilities - dual 0 (0), primal 0 (0)
Optimal objective 54 - 1 iterations time 0.032, Presolve 0.01
Option for printingOptions changed from normal to all
Total time (CPU seconds):       0.05   (Wallclock seconds):       0.05

.......................ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss..ssss
======================================================================
ERROR: test_measuring_solving_time (pulp.tests.test_pulp.HiGHS_CMDTest.test_measuring_solving_time)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 70, in skip_wrapper
    return test_item(test_obj, *args, **kwargs)
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 1311, in test_measuring_solving_time
    status = prob.solve(self.solver)
  File "/builddir/pulp/pulp/pulp.py", line 2007, in solve
    status = solver.actualSolve(self, **kwargs)
  File "/builddir/pulp/pulp/apis/highs_api.py", line 180, in actualSolve
    model_line = [line for line in lines if "Status" in line][0]
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

======================================================================
ERROR: test_time_limit_no_solution (pulp.tests.test_pulp.HiGHS_CMDTest.test_time_limit_no_solution)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 70, in skip_wrapper
    return test_item(test_obj, *args, **kwargs)
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 1340, in test_time_limit_no_solution
    status = prob.solve(self.solver)
  File "/builddir/pulp/pulp/pulp.py", line 2007, in solve
    status = solver.actualSolve(self, **kwargs)
  File "/builddir/pulp/pulp/apis/highs_api.py", line 180, in actualSolve
    model_line = [line for line in lines if "Status" in line][0]
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

======================================================================
FAIL: test_measuring_solving_time (pulp.tests.test_pulp.PULP_CBC_CMDTest.test_measuring_solving_time)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 70, in skip_wrapper
    return test_item(test_obj, *args, **kwargs)
  File "/builddir/pulp/pulp/tests/test_pulp.py", line 1326, in test_measuring_solving_time
    self.assertEqual(status, const.LpStatusOptimal)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: -1 != 1

----------------------------------------------------------------------
Ran 1760 tests in 699.311s

FAILED (failures=1, errors=2, skipped=1602)
Traceback (most recent call last):
  File "/builddir/pulp/_e/bin/pulptest", line 8, in <module>
    sys.exit(pulpTestAll())
             ~~~~~~~~~~~^^
  File "/builddir/pulp/pulp/tests/run_tests.py", line 17, in pulpTestAll
    raise pulp.PulpError("Tests Failed")
pulp.constants.PulpError: Tests Failed

What did you expect to see?

Available solvers: ['PULP_CBC_CMD', 'HiGHS_CMD']
Unavailable solvers: {'GUROBI', 'CPLEX_PY', 'PYGLPK', 'CPLEX_CMD', 'GLPK_CMD', 'COPT', 'COIN_CMD', 'SASCAS', 'CyLP', 'SCIP_CMD', 'GUROBI_CMD', 'XPRESS', 'COPT_DLL', 'XPRESS_PY', 'COPT_CMD', 'COINMP_DLL', 'SAS94', 'MIPCL_CMD', 'CHOCO_CMD', 'SCIP_PY', 'HiGHS', 'MOSEK', 'FSCIP_CMD'}
.Essssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss........................................................Running HiGHS 1.10.0 (git hash: fd8665394): Copyright (c) 2025 HiGHS under MIT licence terms
Set option solution_file to "/tmp/84a5c23ae7554e0a96a7a35fa6d66e80-pulp.sol"
Set option log_file to "/tmp/84a5c23ae7554e0a96a7a35fa6d66e80-pulp.HiGHS_log"
Set option write_solution_to_file to true
LP   84a5c23ae7554e0a96a7a35fa6d66e80-pulp has 4 rows; 4 cols; 7 nonzeros
Coefficient ranges:
  Matrix [1e+00, 1e+00]
  Cost   [1e+00, 9e+00]
  Bound  [1e+00, 4e+00]
  RHS    [5e+00, 1e+01]
Presolving model
1 rows, 2 cols, 2 nonzeros  0s
0 rows, 0 cols, 0 nonzeros  0s
Presolve : Reductions: rows 0(-4); columns 0(-4); elements 0(-7) - Reduced to empty
Solving the original LP from the solution after postsolve
Model name          : 84a5c23ae7554e0a96a7a35fa6d66e80-pulp
Model status        : Optimal
Objective value     :  5.4000000000e+01
Relative P-D gap    :  0.0000000000e+00
HiGHS run time      :          0.00
Writing the solution to /tmp/84a5c23ae7554e0a96a7a35fa6d66e80-pulp.sol
......................ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss..........................................................Welcome to the CBC MILP Solver 
Version: 2.10.3 
Build Date: Dec 15 2019 

command line - /home/ben/src/forks/pulp/pulp/apis/../solverdir/cbc/linux/i64/cbc /tmp/44adcf4109db4722940a29945144e619-pulp.mps -timeMode elapsed -branch -printingOptions all -solution /tmp/44adcf4109db4722940a29945144e619-pulp.sol (default strategy 1)
At line 2 NAME          MODEL
At line 3 ROWS
At line 9 COLUMNS
At line 20 RHS
At line 25 BOUNDS
At line 29 ENDATA
Problem MODEL has 4 rows, 4 columns and 7 elements
Coin0008I MODEL read with 0 errors
Option for timeMode changed from cpu to elapsed
Presolve 1 (-3) rows, 2 (-2) columns and 2 (-5) elements
0  Obj 51.9 Primal inf 2.099999 (1)
1  Obj 54
Optimal - objective value 54
After Postsolve, objective 54, infeasibilities - dual 0 (0), primal 0 (0)
Optimal objective 54 - 1 iterations time 0.002, Presolve 0.00
Option for printingOptions changed from normal to all
Total time (CPU seconds):       0.00   (Wallclock seconds):       0.00

........................ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss..ssss
======================================================================
ERROR: test_examples (pulp.tests.test_examples.Examples_DocsTests.test_examples)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/ben/src/forks/pulp/pulp/tests/test_examples.py", line 22, in test_examples
    importlib.import_module(_f_name)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib64/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'examples'

----------------------------------------------------------------------
Ran 1812 tests in 39.503s

FAILED (errors=1, skipped=1648)
Traceback (most recent call last):
  File "/home/ben/src/forks/pulp/_e/bin/pulptest", line 8, in <module>
    sys.exit(pulpTestAll())
             ~~~~~~~~~~~^^
  File "/home/ben/src/forks/pulp/pulp/tests/run_tests.py", line 17, in pulpTestAll
    raise pulp.PulpError("Tests Failed")
pulp.constants.PulpError: Tests Failed

I haven’t investigated the test_examples failure; it doesn’t appear relevant to this issue.

The test failure I’m really trying to report here is test_time_limit_no_solution; it’s the only one that is failing in python-pulp package in Fedora package builds.

What did you see instead?

Useful extra information

The info below often helps, please fill it out if you're able to. :)

What operating system are you using?

  • Windows: ( version: ___ )
  • Linux: ( distro: Fedora 42, any architecture but x86_64 )
  • Mac OS: ( version: ___ )
  • Other: ___

I'm using python version:

  • 3.7
  • 3.8
  • 3.9
  • 3.10
  • 3.11
  • Other: 3.13

I installed PuLP via:

I am a co-maintainer of the python-pulp package in Fedora; I observed this while testing an upgrade of this package from PuLP 2.x to 3.x, then reproduced it in a virtualenv to make a more useful upstream bug report.

I’m happy to try any experiments, on real or emulated hardware, that might help illuminate the issue.

I demonstrated this using a mock chroot, emulating aarch64 on an x86_64 workstation via qemu-user-static. Booting an aarch64 virtual machine with qemu-system-aarch64 and something like virt-manager would work too, and of course the easiest thing is if real physical aarch64 hardware is available. I also saw this on ppc64le and s390x, but not on x86_64.

Did you also

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions