diff --git a/python/dolfinx/fem/element.py b/python/dolfinx/fem/element.py index 9fba49166e..d4cbb4c0b6 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 48bada2d85..c3d8c911e1 100644 --- a/python/dolfinx/fem/function.py +++ b/python/dolfinx/fem/function.py @@ -747,7 +747,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 b94ef7a606..0ba021fe7e 100644 --- a/python/test/unit/fem/test_function_space.py +++ b/python/test/unit/fem/test_function_space.py @@ -257,13 +257,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