Line data Source code
1 : // SPDX-License-Identifier: BSD-3-Clause 2 : // Copyright (c) 2023 Scipp contributors (https://github.com/scipp) 3 : /// @file 4 : /// @author Simon Heybrock 5 : #include "pybind11.h" 6 : 7 : #include "scipp/core/string.h" 8 : #include "scipp/dataset/dataset.h" 9 : #include "scipp/variable/comparison.h" 10 : 11 : using namespace scipp; 12 : using namespace scipp::variable; 13 : using namespace scipp::dataset; 14 : 15 : namespace py = pybind11; 16 : 17 3 : template <class T> void bind_isclose(py::module &m) { 18 3 : m.def( 19 : "isclose", 20 304 : [](const T &x, const T &y, const T &rtol, const T &atol, 21 : const bool equal_nan) { 22 : return isclose(x, y, rtol, atol, 23 : equal_nan ? NanComparisons::Equal 24 304 : : NanComparisons::NotEqual); 25 : }, 26 0 : py::arg("x"), py::arg("y"), py::arg("rtol"), py::arg("atol"), 27 0 : py::arg("equal_nan"), py::call_guard<py::gil_scoped_release>()); 28 3 : } 29 : 30 9 : template <typename T> void bind_identical(py::module &m) { 31 9 : m.def( 32 : "identical", 33 5760 : [](const T &x, const T &y, const bool equal_nan) { 34 5760 : if (equal_nan) { 35 21 : return equals_nan(x, y); 36 : } 37 5739 : return x == y; 38 : }, 39 0 : py::arg("x"), py::arg("y"), py::arg("equal_nan"), 40 9 : py::call_guard<py::gil_scoped_release>()); 41 9 : } 42 : 43 3 : void init_comparison(py::module &m) { 44 3 : bind_isclose<Variable>(m); 45 3 : bind_identical<Variable>(m); 46 3 : bind_identical<Dataset>(m); 47 3 : bind_identical<DataArray>(m); 48 3 : }