davisking/dlib

[Bug]: 4 tests fail on `ppc` (perhaps precision issue)

barracuda156 opened this issue · 4 comments

What Operating System(s) are you seeing this problem on?

Other (plase, specify in the Steps to Reproduce)

dlib version

19.24.3

Python version

3.11

Compiler

GCC 13.2.0

Expected Behavior

Hopefully an appropriate precision threshold is used for 32-bit platforms, so that tests pass without failures.

Current Behavior

--->  Testing py311-dlib
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_math_dlib/py311-dlib/work/dlib-19.24.3" && py.test-3.11 -o addopts='' 
============================= test session starts ==============================
platform darwin -- Python 3.11.8, pytest-7.4.3, pluggy-1.3.0
rootdir: /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_math_dlib/py311-dlib/work/dlib-19.24.3
plugins: flaky-3.7.0, cov-4.1.0
collected 75 items

tools/python/test/test_array.py ..............                           [ 18%]
tools/python/test/test_chinese_whispers.py ...                           [ 22%]
tools/python/test/test_global_optimization.py F.F                        [ 26%]
tools/python/test/test_matrix.py ........                                [ 37%]
tools/python/test/test_numpy_returns.py ...                              [ 41%]
tools/python/test/test_point.py ....                                     [ 46%]
tools/python/test/test_range.py .....                                    [ 53%]
tools/python/test/test_rgb_pixel.py .                                    [ 54%]
tools/python/test/test_sparse_vector.py ....                             [ 60%]
tools/python/test/test_svm_c_trainer.py ....FF......                     [ 76%]
tools/python/test/test_vector.py ..................                      [100%]

=================================== FAILURES ===================================
________________________ test_global_optimization_nargs ________________________

    def test_global_optimization_nargs():
        w0 = find_max_global(lambda *args: sum(args), [0, 0, 0], [1, 1, 1], 10)
        w1 = find_min_global(lambda *args: sum(args), [0, 0, 0], [1, 1, 1], 10)
>       assert w0 == ([1, 1, 1], 3)
E       assert ([0.0, 0.0, 0.0], -inf) == ([1, 1, 1], 3)
E         At index 0 diff: [0.0, 0.0, 0.0] != [1, 1, 1]
E         Use -v to get more diff

tools/python/test/test_global_optimization.py:10: AssertionError
_____________________________ test_on_holder_table _____________________________

    def test_on_holder_table():
        x,y = find_min_global(holder_table,
                                [-10,-10],
                                [10,10],
                                200)
>       assert (y - -19.2085025679) < 1e-7
E       assert (inf - -19.2085025679) < 1e-07

tools/python/test/test_global_optimization.py:69: AssertionError
__________ test_trainers[svm_c_trainer_linear-1.0-0.7666666666666667] __________

training_data = <[AttributeError("'_dlib_pybind11.array' object has no attribute 'typecode'") raised in repr()] tuple object at 0x139f1128>
trainer = <class '_dlib_pybind11.svm_c_trainer_linear'>, class1_accuracy = 1.0
class2_accuracy = 0.7666666666666667

    @pytest.mark.parametrize('trainer, class1_accuracy, class2_accuracy', [
        (svm_c_trainer_radial_basis, 1.0, 1.0),
        (svm_c_trainer_sparse_radial_basis, 1.0, 1.0),
        (svm_c_trainer_histogram_intersection, 1.0, 1.0),
        (svm_c_trainer_sparse_histogram_intersection, 1.0, 1.0),
        (svm_c_trainer_linear, 1.0, 23 / 30),
        (svm_c_trainer_sparse_linear, 1.0, 23 / 30),
        (rvm_trainer_radial_basis, 1.0, 1.0),
        (rvm_trainer_sparse_radial_basis, 1.0, 1.0),
        (rvm_trainer_histogram_intersection, 1.0, 1.0),
        (rvm_trainer_sparse_histogram_intersection, 1.0, 1.0),
        (rvm_trainer_linear, 1.0, 0.6),
        (rvm_trainer_sparse_linear, 1.0, 0.6)
    ])
    def test_trainers(training_data, trainer, class1_accuracy, class2_accuracy):
        predictors, sparse_predictors, response = training_data
        if 'sparse' in trainer.__name__:
            predictors = sparse_predictors
        cv = cross_validate_trainer(trainer(), predictors, response, folds=10)
        assert cv.class1_accuracy == pytest.approx(class1_accuracy)
>       assert cv.class2_accuracy == pytest.approx(class2_accuracy)
E       assert 0.0 == 0.7666666666666667 ± 7.7e-07
E         comparison failed
E         Obtained: 0.0
E         Expected: 0.7666666666666667 ± 7.7e-07

tools/python/test/test_svm_c_trainer.py:59: AssertionError
______ test_trainers[svm_c_trainer_sparse_linear-1.0-0.7666666666666667] _______

training_data = <[AttributeError("'_dlib_pybind11.array' object has no attribute 'typecode'") raised in repr()] tuple object at 0x139f10c8>
trainer = <class '_dlib_pybind11.svm_c_trainer_sparse_linear'>
class1_accuracy = 1.0, class2_accuracy = 0.7666666666666667

    @pytest.mark.parametrize('trainer, class1_accuracy, class2_accuracy', [
        (svm_c_trainer_radial_basis, 1.0, 1.0),
        (svm_c_trainer_sparse_radial_basis, 1.0, 1.0),
        (svm_c_trainer_histogram_intersection, 1.0, 1.0),
        (svm_c_trainer_sparse_histogram_intersection, 1.0, 1.0),
        (svm_c_trainer_linear, 1.0, 23 / 30),
        (svm_c_trainer_sparse_linear, 1.0, 23 / 30),
        (rvm_trainer_radial_basis, 1.0, 1.0),
        (rvm_trainer_sparse_radial_basis, 1.0, 1.0),
        (rvm_trainer_histogram_intersection, 1.0, 1.0),
        (rvm_trainer_sparse_histogram_intersection, 1.0, 1.0),
        (rvm_trainer_linear, 1.0, 0.6),
        (rvm_trainer_sparse_linear, 1.0, 0.6)
    ])
    def test_trainers(training_data, trainer, class1_accuracy, class2_accuracy):
        predictors, sparse_predictors, response = training_data
        if 'sparse' in trainer.__name__:
            predictors = sparse_predictors
        cv = cross_validate_trainer(trainer(), predictors, response, folds=10)
        assert cv.class1_accuracy == pytest.approx(class1_accuracy)
>       assert cv.class2_accuracy == pytest.approx(class2_accuracy)
E       assert 0.0 == 0.7666666666666667 ± 7.7e-07
E         comparison failed
E         Obtained: 0.0
E         Expected: 0.7666666666666667 ± 7.7e-07

tools/python/test/test_svm_c_trainer.py:59: AssertionError
=========================== short test summary info ============================
FAILED tools/python/test/test_global_optimization.py::test_global_optimization_nargs
FAILED tools/python/test/test_global_optimization.py::test_on_holder_table - ...
FAILED tools/python/test/test_svm_c_trainer.py::test_trainers[svm_c_trainer_linear-1.0-0.7666666666666667]
FAILED tools/python/test/test_svm_c_trainer.py::test_trainers[svm_c_trainer_sparse_linear-1.0-0.7666666666666667]
========================= 4 failed, 71 passed in 5.16s =========================
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_math_dlib/py311-dlib/work/dlib-19.24.3" && py.test-3.11 -o addopts='' 
Exit code: 1
Error: Failed to test py311-dlib: command execution failed

Steps to Reproduce

Run tests on ppc arch. Presumably BSD or Linux will do as well, though I can only confirm this for Darwin.

Anything else?

macOS 10.6 / powerpc (32-bit)

I don't have a machine to test this on. Can you post a PR with some adjustments to handle this?

Warning: this issue has been inactive for 35 days and will be automatically closed on 2024-05-15 if there is no further activity.

If you are waiting for a response but haven't received one it's possible your question is somehow inappropriate. E.g. it is off topic, you didn't follow the issue submission instructions, or your question is easily answerable by reading the FAQ, dlib's official compilation instructions, dlib's API documentation, or a Google search.

Warning: this issue has been inactive for 43 days and will be automatically closed on 2024-05-15 if there is no further activity.

If you are waiting for a response but haven't received one it's possible your question is somehow inappropriate. E.g. it is off topic, you didn't follow the issue submission instructions, or your question is easily answerable by reading the FAQ, dlib's official compilation instructions, dlib's API documentation, or a Google search.

Notice: this issue has been closed because it has been inactive for 45 days. You may reopen this issue if it has been closed in error.