diff --git a/python/dolfinx/fem/element.py b/python/dolfinx/fem/element.py index f62352650d2..8a9e719b13f 100644 --- a/python/dolfinx/fem/element.py +++ b/python/dolfinx/fem/element.py @@ -5,8 +5,6 @@ # SPDX-License-Identifier: LGPL-3.0-or-later """Finite elements.""" -from functools import singledispatch - import numpy as np import numpy.typing as npt @@ -191,14 +189,18 @@ def dtype(self) -> np.dtype: on.""" return self._cpp_object.dtype - @property + @cached_property def basix_element(self) -> basix.finite_element.FiniteElement: """Return underlying Basix C++ element (if it exists). Raises: Runtime error if Basix element does not exist. + + Note: + Cached property: Wrapper constructed on initial call and not updated on subsequent + calls. """ - return self._cpp_object.basix_element + return basix.finite_element.FiniteElement(self._cpp_object.basix_element) @property def num_sub_elements(self) -> int: diff --git a/python/dolfinx/fem/function.py b/python/dolfinx/fem/function.py index 0f120efb3fa..ffab15256dc 100644 --- a/python/dolfinx/fem/function.py +++ b/python/dolfinx/fem/function.py @@ -743,7 +743,12 @@ def ufl_function_space(self) -> ufl.FunctionSpace: @cached_property def element(self) -> FiniteElement: - """Function space finite element.""" + """Function space finite element. + + Note: + Cached property: Wrapper constructed on initial call and not updated on subsequent + calls. + """ return FiniteElement(self._cpp_object.element) @property diff --git a/python/test/unit/fem/test_function_space.py b/python/test/unit/fem/test_function_space.py index 6b74efb6d5a..0da5a9558b1 100644 --- a/python/test/unit/fem/test_function_space.py +++ b/python/test/unit/fem/test_function_space.py @@ -255,13 +255,14 @@ def test_cell_mismatch(mesh): def test_basix_element(V, W, Q, V2): for V_ in (V, W, V2): e = V_.element.basix_element + assert isinstance(e, basix.finite_element.FiniteElement) assert isinstance( - e, basix._basixcpp.FiniteElement_float64 | basix._basixcpp.FiniteElement_float32 + e.cpp_object, basix._basixcpp.FiniteElement_float64 | basix._basixcpp.FiniteElement_float32 ) # Mixed spaces do not yet return a basix element with pytest.raises(RuntimeError): - e = Q.element.basix_element + _ = Q.element.basix_element @pytest.mark.skip_in_parallel