Files
2025-10-25 03:02:53 +03:00

4.9 KiB

[linalg.helpers.concepts]

29 Numerics library [numerics]

29.9 Basic linear algebra algorithms [linalg]

29.9.7 Exposition-only helpers [linalg.helpers]

29.9.7.5 Argument concepts [linalg.helpers.concepts]

1

#

The exposition-only concepts defined in this section constrain the algorithms in [linalg].

templateconstexpr bool is-mdspan = false;

template<class ElementType, class Extents, class Layout, class Accessor>constexpr bool is-mdspan<mdspan<ElementType, Extents, Layout, Accessor>> = true;

templateconcept in-vector =is-mdspan && T::rank() == 1;

templateconcept out-vector =is-mdspan && T::rank() == 1 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

templateconcept inout-vector =is-mdspan && T::rank() == 1 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

templateconcept in-matrix =is-mdspan && T::rank() == 2;

templateconcept out-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

templateconcept inout-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

templateconstexpr bool is-layout-blas-packed = false; // exposition onlytemplate<class Triangle, class StorageOrder>constexpr bool is-layout-blas-packed<layout_blas_packed<Triangle, StorageOrder>> = true;

templateconcept possibly-packed-inout-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> &&(T::is_always_unique() || is-layout-blas-packed);

templateconcept in-object =is-mdspan && (T::rank() == 1 || T::rank() == 2);

templateconcept out-object =is-mdspan && (T::rank() == 1 || T::rank() == 2) && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

templateconcept inout-object =is-mdspan && (T::rank() == 1 || T::rank() == 2) && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();

2

#

If a function in [linalg] accesses the elements of a parameter constrained byin-vector,in-matrix, orin-object, those accesses will not modify the elements.

3

#

Unless explicitly permitted, anyinout-vector,inout-matrix,inout-object,out-vector,out-matrix,out-object, orpossibly-packed-inout-matrix parameter of a function in [linalg] shall not overlap any other mdspan parameter of the function.