python geometry and multimesh tests fail on non-intel arches (arm64, ppc64el)

Issue #1114 new
Drew Parsons created an issue

Two geometry tests are failing on arm64 architectures. Test logs are collated at https://ci.debian.net/packages/d/dolfin/unstable/arm64/, e.g. https://ci.debian.net/data/autopkgtest/unstable/arm64/d/dolfin/6519912/log.gz

C++ unit tests and demos pass, but in the python units tests there are two geometry failures in geometry/test_bounding_box_tree.py, geometry/test_point.py. The same tests pass on Intel/amd64 (cf. amd64 test log)

The bounding_box failure looks algorithmic:

______________________ test_compute_entity_collisions_2d _______________________

    @skip_in_parallel
    def test_compute_entity_collisions_2d():

        reference = set([136, 137])

        p = Point(0.3, 0.3)
        mesh = UnitSquareMesh(16, 16)

        tree = BoundingBoxTree()
        tree.build(mesh)
        entities = tree.compute_entity_collisions(p)
>       assert set(entities) == reference
E       assert {136} == {136, 137}
E         Extra items in the right set:
E         137
E         Use -v to get the full diff

python/test/unit/geometry/test_bounding_box_tree.py:201: AssertionError

The test_point failure is just a floating point issue: (((1.0 * -1.6) + (2.0 * -2.5)) + (3.0 * 3.3)) = 3.2999999 not “3.3” (the equality fails also in a simple python console on amd64)

________________________________ test_point_dot ________________________________

    def test_point_dot():
        p = Point(1.0, 2.0, 3.0)
        q = Point(3.1, 4.5, 5.6)
        r = Point(-1.6, -2.5, 3.3)
        s = Point(152.25)

        assert p.dot(q) == p[0]*q[0] + p[1]*q[1] + p[2]*q[2]
>       assert p.dot(r) == p[0]*r[0] + p[1]*r[1] + p[2]*r[2]
E       assert 3.3 == (((1.0 * -1.6) + (2.0 * -2.5)) + (3.0 * 3.3))
E        +  where 3.3 = <bound method PyCapsule.dot of <dolfin.cpp.geometry.Point object at 0xffffa062f630>>(<dolfin.cpp.geometry.Point object at 0xffffa062f070>)
E        +    where <bound method PyCapsule.dot of <dolfin.cpp.geometry.Point object at 0xffffa062f630>> = <dolfin.cpp.geometry.Point object at 0xffffa062f630>.dot

python/test/unit/geometry/test_point.py:94: AssertionError

Comments (4)

  1. Drew Parsons reporter

    Some multimesh tests also fail on arm64, but pass on amd64.

    test_meshes_with_boundary_edge_overlap_2d
            area = compute_area_using_quadrature(multimesh)
    >       assert  abs(area - exact_area) < DOLFIN_EPS_LARGE
    E       assert 0.5 < 1e-14
    E        +  where 0.5 = abs((1.5 - 2.0))
    
    python/test/unit/multimesh/test_interface_area.py:135: AssertionError
    
    test_auto_cover_all
    >       assert(numpy.isclose(assemble_multimesh(one * dX), 1))
    E       AssertionError: assert False
    E        +  where False = <function isclose at 0xffffb318c550>(1.00084499999999, 1)
    E        +    where <function isclose at 0xffffb318c550> = numpy.isclose
    E        +    and   1.00084499999999 = assemble_multimesh((Coefficient(FunctionSpace(Mesh(VectorElement(FiniteElement('Lagrange', triangle, 1), dim=2), 22304), FiniteElement('Lagrange', triangle, 1)), 22333) * <ufl.measure.MeasureSum object at 0xffffb2818fa0>))
    
    python/test/unit/multimesh/test_multimesh_autocover.py:92: AssertionError
    
    test_auto_cover_complex
    >       assert(numpy.isclose(assemble_multimesh(complex_mesh_one * dX),
                                 1 - (b - a)**2))
    E       AssertionError: assert False
    E        +  where False = <function isclose at 0xffffb318c550>(0.9099219203139939, (1 - ((0.6 - 0.3) ** 2)))
    E        +    where <function isclose at 0xffffb318c550> = numpy.isclose
    E        +    and   0.9099219203139939 = assemble_multimesh((Coefficient(FunctionSpace(Mesh(VectorElement(FiniteElement('Lagrange', triangle, 1), dim=2), 22369), FiniteElement('Lagrange', triangle, 1)), 22437) * <ufl.measure.MeasureSum object at 0xffffb2818fa0>))
    
    python/test/unit/multimesh/test_multimesh_autocover.py:107: AssertionError
    
    test_multimesh_poisson_2d
    >       assert errornorm(exactsolution_2d, uh, 'L2', degree_rise=1) < DOLFIN_EPS_LARGE
    E       AssertionError: assert 0.00461063063855098 < 1e-14
    E        +  where 0.00461063063855098 = errornorm(Coefficient(FunctionSpace(None, FiniteElement('Lagrange', None, 1)), 22695), Coefficient(FunctionSpace(Mesh(VectorElement(FiniteElement('Lagrange', triangle, 1), dim=2), 22696), FiniteElement('Lagrange', triangle, 1)), 22737), 'L2', degree_rise=1)
    

    etc.

    The failing tests fail also on ppc64el as well as arm64, e.g.. ppc64el test log

  2. Log in to comment