data-apis / array-api-tests

Test suite for the PyData Array APIs standard
https://data-apis.org/array-api-tests/
MIT License
63 stars 39 forks source link

test_has_names fails on info category checked main namespace, instead of class attributes #261

Open oleksandr-pavlyk opened 3 months ago

oleksandr-pavlyk commented 3 months ago
__________________________________________________________________________________________ test_has_names[info-dtypes] __________________________________________________________________________________________

category = 'info', name = 'dtypes'

    @pytest.mark.parametrize("category, name", has_name_params)
    def test_has_names(category, name):
        if category in EXTENSIONS:
            ext_mod = getattr(xp, category)
            assert hasattr(ext_mod, name), f"{xp.__name__} is missing the {category} extension function {name}()"
        elif category.startswith('array_'):
            # TODO: This would fail if ones() is missing.
            arr = xp.ones((1, 1))
            if category == 'array_attribute':
                assert hasattr(arr, name), f"The {xp.__name__} array object is missing the attribute {name}"
            else:
                assert hasattr(arr, name), f"The {xp.__name__} array object is missing the method {name}()"
        else:
>           assert hasattr(xp, name), f"{xp.__name__} is missing the {category} function {name}()"
E           AssertionError: dpctl.tensor is missing the info function dtypes()
E           assert False
E            +  where False = hasattr(xp, 'dtypes')

array_api_tests/test_has_names.py:37: AssertionError
============================================================================================ short test summary info ============================================================================================
FAILED array_api_tests/test_has_names.py::test_has_names[info-capabilities] - AssertionError: dpctl.tensor is missing the info function capabilities()
FAILED array_api_tests/test_has_names.py::test_has_names[info-default_device] - AssertionError: dpctl.tensor is missing the info function default_device()
FAILED array_api_tests/test_has_names.py::test_has_names[info-default_dtypes] - AssertionError: dpctl.tensor is missing the info function default_dtypes()
FAILED array_api_tests/test_has_names.py::test_has_names[info-devices] - AssertionError: dpctl.tensor is missing the info function devices()
FAILED array_api_tests/test_has_names.py::test_has_names[info-dtypes] - AssertionError: dpctl.tensor is missing the info function dtypes()
========================================================================================= 5 failed, 192 passed in 0.42s =========================================================================================

The specification states that these must be attributes of Info class, not of the main namespace:


In [1]: import dpctl, dpctl.tensor as dpt

In [2]: info = dpt.__array_namespace_info__()

In [3]: hasattr(info, "capabilities")
Out[3]: True

In [4]: hasattr(info, "default_device")
Out[4]: True

In [5]: hasattr(info, "default_dtypes")
Out[5]: True

In [6]: hasattr(info, "devides")
Out[6]: False

In [7]: hasattr(info, "devices")
Out[7]: True

In [8]: hasattr(info,"dtypes")
Out[8]: True
asmeurer commented 3 months ago

This is likely related to the issue with the stubs in the array-api repo as discussed at https://github.com/data-apis/array-api-tests/pull/259.