From ccbb3245b39a0366eb055d461159abda5e79af4d Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Mon, 31 Jul 2023 22:59:26 -0500 Subject: [PATCH 1/2] Use no-fast-math flag to ensure dpt.nan round-tripping Pybind11 casters ``` Python 3.9.12 (main, Jun 1 2022, 11:38:51) Type 'copyright', 'credits' or 'license' for more information IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import dpctl.tensor as dpt, numpy as np In [2]: dpt.full(10, fill_value=float('nan'), device='cpu', dtype=dpt.float64) Out[2]: usm_ndarray([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]) In [3]: dpt.full(10, fill_value=float('nan'), device='cpu', dtype=dpt.float64) Out[3]: usm_ndarray([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]) In [4]: dpt.full(10, fill_value=float('nan'), device='cpu', dtype=dpt.float32) Out[4]: usm_ndarray([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=float32) In [5]: quit ``` --- dpctl/tensor/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dpctl/tensor/CMakeLists.txt b/dpctl/tensor/CMakeLists.txt index a331ab6b74..de45ee47bd 100644 --- a/dpctl/tensor/CMakeLists.txt +++ b/dpctl/tensor/CMakeLists.txt @@ -54,6 +54,8 @@ if (WIN32) set(_clang_prefix "/clang:") endif() set_source_files_properties( + ${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/full_ctor.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/linear_sequences.cpp ${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions.cpp PROPERTIES COMPILE_OPTIONS "${_clang_prefix}-fno-fast-math") target_compile_options(${python_module_name} PRIVATE -fno-sycl-id-queries-fit-in-int) From 3baa622d13252498190758918247a7fd14a68250 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Mon, 31 Jul 2023 23:20:59 -0500 Subject: [PATCH 2/2] Added test for special values of floating points in dpt.full Test is inspired by example from gh-1314 --- dpctl/tests/test_usm_ndarray_ctor.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dpctl/tests/test_usm_ndarray_ctor.py b/dpctl/tests/test_usm_ndarray_ctor.py index 5772968d64..e285dcb35f 100644 --- a/dpctl/tests/test_usm_ndarray_ctor.py +++ b/dpctl/tests/test_usm_ndarray_ctor.py @@ -1442,6 +1442,30 @@ def test_full_dtype_inference(): assert np.issubdtype(dpt.full(10, 0.3 - 2j, dtype=rdt).dtype, np.floating) +@pytest.mark.parametrize("dt", ["f2", "f4", "f8"]) +def test_full_special_fp(dt): + """See gh-1314""" + q = get_queue_or_skip() + skip_if_dtype_not_supported(dt, q) + + ar = dpt.full(10, fill_value=dpt.nan) + err_msg = f"Failed for fill_value=dpt.nan and dtype {dt}" + assert dpt.isnan(ar[0]), err_msg + + ar = dpt.full(10, fill_value=dpt.inf) + err_msg = f"Failed for fill_value=dpt.inf and dtype {dt}" + assert dpt.isinf(ar[0]) and dpt.greater(ar[0], 0), err_msg + + ar = dpt.full(10, fill_value=-dpt.inf) + err_msg = f"Failed for fill_value=-dpt.inf and dtype {dt}" + assert dpt.isinf(ar[0]) and dpt.less(ar[0], 0), err_msg + + ar = dpt.full(10, fill_value=dpt.pi) + err_msg = f"Failed for fill_value=dpt.pi and dtype {dt}" + check = abs(float(ar[0]) - dpt.pi) < 16 * dpt.finfo(ar.dtype).eps + assert check, err_msg + + def test_full_fill_array(): q = get_queue_or_skip()