test_checker/test_no_output_checker fail on aarch64 and ppc64le
[ 27s] =========================== short test summary info ============================
[ 27s] FAILED tests/test_solving.py::TestChecker::test_checker - minizinc.error.Mini...
[ 27s] FAILED tests/test_solving.py::TestChecker::test_no_output_checker - minizinc....
[ 27s] ======= 2 failed, 48 passed, 1 skipped, 8 deselected, 1 warning in 8.02s =======
[ 27s] ___________________________ TestChecker.test_checker ___________________________
[ 27s]
[ 27s] self = <test_solving.TestChecker testMethod=test_checker>
[ 27s]
[ 27s] def test_checker(self):
[ 27s] try:
[ 27s] checker = tempfile.NamedTemporaryFile(
[ 27s] prefix="checker_test_", suffix=".mzc.mzn", delete=False
[ 27s] )
[ 27s] checker.write(b'output["SIMPLE CHECK"];\n')
[ 27s] checker.close()
[ 27s] self.instance.add_file(checker.name)
[ 27s] assert self.instance.method == Method.SATISFY
[ 27s] > result = self.instance.solve()
[ 27s]
[ 27s] tests/test_solving.py:55:
[ 27s] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[ 27s] ../../BUILDROOT/python-minizinc-0.7.0-4.1.aarch64/usr/lib/python3.8/site-packages/minizinc/instance.py:186: in solve
[ 27s] return asyncio.run(coroutine)
[ 27s] /usr/lib64/python3.8/asyncio/runners.py:44: in run
[ 27s] return loop.run_until_complete(main)
[ 27s] /usr/lib64/python3.8/asyncio/base_events.py:616: in run_until_complete
[ 27s] return future.result()
[ 27s] ../../BUILDROOT/python-minizinc-0.7.0-4.1.aarch64/usr/lib/python3.8/site-packages/minizinc/instance.py:250: in solve_async
[ 27s] async for result in self.solutions(
[ 27s] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[ 27s]
[ 27s] self = <minizinc.instance.Instance object at 0xffff918e70a0>, timeout = None
[ 27s] nr_solutions = None, processes = None, random_seed = None, all_solutions = False
[ 27s] intermediate_solutions = False, free_search = False, optimisation_level = None
[ 27s] verbose = False, debug_output = None, kwargs = {}, method = <Method.SATISFY: 1>
[ 27s] cmd = ['--output-mode', 'json', '--output-time', '--output-objective', '--output-output-item', '--statistics', ...]
[ 27s] files = [PosixPath('/tmp/checker_test_3iyhihiu.mzc.mzn'), PosixPath('/tmp/mzn_fragment3q5stucn.mzn')]
[ 27s] solver = '[email protected]', status = <Status.UNKNOWN: 2>
...
[ 27s] # Raise error if required
[ 27s] stderr = await read_stderr
[ 27s] if code != 0 or status == Status.ERROR:
[ 27s] > raise parse_error(stderr)
[ 27s] E minizinc.error.MiniZincError: UNKNOWN EXCEPTION.
[ 27s]
[ 27s] ../../BUILDROOT/python-minizinc-0.7.0-4.1.aarch64/usr/lib/python3.8/site-packages/minizinc/instance.py:465: MiniZincError
This is apparently an unhandled error/exception in minizinc itself: https://github.com/MiniZinc/libminizinc/blob/0b19fb039afff495832ae48f4c206f2653862bb4/minizinc.cpp#L71
} catch (...) {
if (slv.getFlagVerbose()) {
std::cerr << std::endl;
}
std::cerr << " UNKNOWN EXCEPTION." << std::endl;
}
Trying to reproduce this with minizinc directly has not provided any insight, the following two calls (which should be equivalent to the wrapped calls from python) succeed:
cat > t1.mzn <<EOF
var 1..5: x;
output["SIMPLE CHECK"];
EOF
cat > t2.mzn <<EOF
var 1..5: x;
int: data :: add_to_output = 2;
EOF
minizinc t1.mzn --output-mode json --output-time --output-objective --output-output-item --statistics
minizinc t2.mzn --output-mode json --output-time --output-objective --output-output-item --statistics
I'm afraid I can only provide limited support for this issue as I do not have any machines using these architectures. As these must be exceptions triggered in the MiniZinc compiler, I would suggest running pytest using --log-cli-level debug to capture the exact commands used. Then hopefully you can recreate the issue.
The following triggers the bug with "pure" minizinc on aarch64:
cat > t.mzn <<EOF
var 1..5: x;
EOF
cat > t1.mzc.mzn <<EOF
output["SIMPLE CHECK"];
EOF
minizinc t1.mzc.mzn t.mzn --output-mode json --output-time --output-objective --output-output-item --statistics
Apparently a bug in miniz:
[ 498s] Thread 1 "minizinc" hit Catchpoint 2 (exception thrown), 0x0000fffff79bcecc in __cxa_throw () from /usr/lib64/libstdc++.so.6
[ 498s] $1 = "Catched int"
[ 498s] #0 0x0000fffff79bcecc in __cxa_throw () from /usr/lib64/libstdc++.so.6
[ 498s] MiniZinc/minizinc-python#1 0x0000fffff7c9c6a0 in MiniZinc::FileUtils::inflate_string (s=...) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/file_utils.cpp:736
[ 498s] MiniZinc/minizinc-python#2 0x0000fffff7da7e20 in MiniZinc::Solns2Out::init (this=this@entry=0xffffffffefd8) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/solns2out.cpp:557
[ 498s] MiniZinc/minizinc-python#3 0x0000fffff7da890c in MiniZinc::Solns2Out::initFromEnv (this=this@entry=0xffffffffefd8, pE=<optimized out>) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/solns2out.cpp:142
[ 498s] MiniZinc/minizinc-python#4 0x0000fffff7dade94 in MiniZinc::MznSolver::addSolverInterface (this=this@entry=0xffffffffec30, sf=0xfffff7fbd3b8 <MiniZinc::(anonymous namespace)::get_wrapper()::_fzn_solverfactory>) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/solver.cpp:192
[ 498s] MiniZinc/minizinc-python#5 0x0000fffff7dadf0c in MiniZinc::MznSolver::addSolverInterface (this=this@entry=0xffffffffec30) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/solver.cpp:212
[ 498s] MiniZinc/minizinc-python#6 0x0000fffff7db2838 in MiniZinc::MznSolver::run (this=0xffffffffec30, args0=..., model=..., exeName=..., modelName=...) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/lib/solver.cpp:1059
[ 498s] MiniZinc/minizinc-python#7 0x0000aaaaaaaac254 in (anonymous namespace)::run (exe=..., args=..., jsonStream=false) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/minizinc.cpp:41
[ 498s] MiniZinc/minizinc-python#8 0x0000aaaaaaaabe74 in main (argc=<optimized out>, argv=0xfffffffff5f8) at /home/abuild/rpmbuild/BUILD/libminizinc-2.6.4/minizinc.cpp:138
[ 498s]
[ 498s] UNKNOWN EXCEPTION in solver, errorcode: -3
Error in base64 decoder, original input:
"include \"solver_redefinitions.mzn\";\ninclude \"stdlib.mzn\";\nint: data:: add_to_output = 2;\n"
-> after compression and b64encode: @eAE9yjEOgCAMBdDdUzQcwMER4lkI2po0wdbAx8HTu7G+PLWzDhYK3esrLTdhudQU6tbX+7OQ\nFp0HXPWYikhcUGKkwpzh2QeeAdppS8sPxMofUg== (correct)
Expected output after b64 decode:
x\x9c=\xca1\x0e\x80 \x0c\x05\xd0\xddS4\x1c\xc0\xc1\x11\xe2Y\x08\xda\x9a4\xc1\xd6\xc0\xc7\xc1\xd3\xbb\xb1\xbe<\xb5\xb3\x0e\x16\n\xdd\xeb+-7a\xb9\xd4\x14\xea\xd6\xd7\xfb\xb3\x90\x16\x9d\x07\\\xf5\x98\x8aH\\Pb\xa4\xc2\x9c\xe1\xd9\x07\x9e\x01\xdaiK\xcb\x0f\xc4\xca\x1fR
Actual output:
x\x01=\xca1\x0e\x80 \x0c\x05\xd0\xddS4\x1c\xc0\xc1\x11\xe2Y\x08\xda\x9a4\xc1\xd6\xc0\xc7\xc1\xd3\xbb\xb1\xbe<\xb5\xb3\x0e\x16\n\xdd\xeb+-7a\xb9\xd4\x14\xea\xd6\xd7\xfb\xb3\x90\xfcZt\x1ds\xd6b)!qA\x8a\x93\ns\x87d\x1ex\x07i\xa5/,?\x13(}H>\xfb
Should be fixed in 76e7e9d32e642c099a910c6192af6f3f8d209a82
This should now be fixed in version 2.7.0