diff --git a/source/numerics.tex b/source/numerics.tex index 8702e4a1f7..d6635df3da 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -11496,15 +11496,15 @@ the order of elements in an \tcode{mdspan} with \tcode{layout_blas_packed}\iref{linalg.layout.packed} layout. \begin{itemdecl} -struct column_major_t { +struct @\libglobal{column_major_t}@ { explicit column_major_t() = default; }; -inline constexpr column_major_t column_major{}; +inline constexpr column_major_t @\libglobal{column_major}@{}; -struct row_major_t { +struct @\libglobal{row_major_t}@ { explicit row_major_t() = default; }; -inline constexpr row_major_t row_major{}; +inline constexpr row_major_t @\libglobal{row_major}@{}; \end{itemdecl} \begin{itemdescr} @@ -11516,15 +11516,15 @@ \rSec3[linalg.tags.triangle]{Triangle tags} \begin{itemdecl} -struct upper_triangle_t { +struct @\libglobal{upper_triangle_t}@ { explicit upper_triangle_t() = default; }; -inline constexpr upper_triangle_t upper_triangle{}; +inline constexpr upper_triangle_t @\libglobal{upper_triangle}@{}; -struct lower_triangle_t { +struct @\libglobal{lower_triangle_t}@ { explicit lower_triangle_t() = default; }; -inline constexpr lower_triangle_t lower_triangle{}; +inline constexpr lower_triangle_t @\libglobal{lower_triangle}@{}; \end{itemdecl} \begin{itemdescr} @@ -11542,16 +11542,15 @@ \rSec3[linalg.tags.diagonal]{Diagonal tags} \begin{itemdecl} -struct implicit_unit_diagonal_t { +struct @\libglobal{implicit_unit_diagonal_t}@ { explicit implicit_unit_diagonal_t() = default; }; -inline constexpr implicit_unit_diagonal_t - implicit_unit_diagonal{}; +inline constexpr implicit_unit_diagonal_t @\libglobal{implicit_unit_diagonal}@{}; -struct explicit_diagonal_t { +struct @\libglobal{explicit_diagonal_t}@ { explicit explicit_diagonal_t() = default; }; -inline constexpr explicit_diagonal_t explicit_diagonal{}; +inline constexpr explicit_diagonal_t @\libglobal{explicit_diagonal}@{}; \end{itemdecl} \begin{itemdescr} @@ -11609,7 +11608,7 @@ \begin{codeblock} namespace std::linalg { template - class layout_blas_packed { + class @\libglobal{layout_blas_packed}@ { public: using triangle_type = Triangle; using storage_order_type = StorageOrder; @@ -11704,6 +11703,7 @@ \rSec3[linalg.layout.packed.cons]{Constructors} +\indexlibraryctor{layout_blas_packed::mapping}% \begin{itemdecl} constexpr mapping(const extents_type& e) noexcept; \end{itemdecl} @@ -11725,6 +11725,7 @@ Direct-non-list-initializes \exposid{extents_} with \tcode{e}. \end{itemdescr} +\indexlibraryctor{layout_blas_packed::mapping}% \begin{itemdecl} template explicit(!is_convertible_v) @@ -11749,6 +11750,7 @@ \rSec3[linalg.layout.packed.obs]{Observers} +\indexlibrarymember{layout_blas_packed::mapping}{required_span_size}% \begin{itemdecl} constexpr index_type required_span_size() const noexcept; \end{itemdecl} @@ -11763,6 +11765,7 @@ \end{note} \end{itemdescr} +\indexlibrarymember{layout_blas_packed::mapping}{operator()}% \begin{itemdecl} template constexpr index_type operator() (Index0 ind0, Index1 ind1) const noexcept; @@ -11813,6 +11816,7 @@ \end{itemize} \end{itemdescr} +\indexlibrarymember{layout_blas_packed::mapping}{stride}% \begin{itemdecl} constexpr index_type stride(rank_type r) const noexcept; \end{itemdecl} @@ -11832,6 +11836,7 @@ \tcode{1}. \end{itemdescr} +\indexlibrarymember{layout_blas_packed::mapping}{operator==}% \begin{itemdecl} template friend constexpr bool operator==(const mapping& x, const mapping& y) noexcept; @@ -12149,7 +12154,6 @@ \rSec3[linalg.scaled.scaledaccessor]{Class template \tcode{scaled_accessor}} - \pnum The class template \tcode{scaled_accessor} is an \tcode{mdspan} accessor policy which upon access produces scaled elements. @@ -12157,7 +12161,7 @@ \begin{codeblock} namespace std::linalg { template - class scaled_accessor { + class @\libglobal{scaled_accessor}@ { public: using element_type = add_const_t() * declval())>; @@ -12200,6 +12204,7 @@ \tcode{NestedAccessor} meets the accessor policy requirements\iref{mdspan.accessor.reqmts}. \end{itemize} +\indexlibraryctor{scaled_accessor}% \begin{itemdecl} template explicit(!is_convertible_v) @@ -12223,6 +12228,7 @@ \end{itemize} \end{itemdescr} +\indexlibraryctor{scaled_accessor}% \begin{itemdecl} constexpr scaled_accessor(const ScalingFactor& s, const NestedAccessor& a); \end{itemdecl} @@ -12238,6 +12244,7 @@ \end{itemize} \end{itemdescr} +\indexlibrarymember{scaled_accessor}{access}% \begin{itemdecl} constexpr reference access(data_handle_type p, size_t i) const; \end{itemdecl} @@ -12250,6 +12257,7 @@ \end{codeblock} \end{itemdescr} +\indexlibrarymember{scaled_accessor}{offset}% \begin{itemdecl} constexpr offset_policy::data_handle_type offset(data_handle_type p, size_t i) const; \end{itemdecl} @@ -12270,6 +12278,7 @@ that represents the elementwise product of \tcode{alpha} with each element of \tcode{x}. +\indexlibraryglobal{scaled}% \begin{itemdecl} template @@ -12324,7 +12333,7 @@ \begin{codeblock} namespace std::linalg { template - class conjugated_accessor { + class @\libglobal{conjugated_accessor}@ { public: using element_type = add_const_t()))>; @@ -12363,6 +12372,7 @@ \tcode{NestedAccessor} meets the accessor policy requirements\iref{mdspan.accessor.reqmts}. \end{itemize} +\indexlibraryctor{conjugated_accessor}% \begin{itemdecl} constexpr conjugated_accessor(const NestedAccessor& acc); \end{itemdecl} @@ -12374,6 +12384,7 @@ \exposid{nested-accessor_} with \tcode{acc}. \end{itemdescr} +\indexlibraryctor{conjugated_accessor}% \begin{itemdecl} template explicit(!is_convertible_v>) @@ -12392,6 +12403,7 @@ with \tcode{other.nested_accessor()}. \end{itemdescr} +\indexlibrarymember{conjugated_accessor}{access}% \begin{itemdecl} constexpr reference access(data_handle_type p, size_t i) const; \end{itemdecl} @@ -12402,6 +12414,7 @@ \tcode{\exposid{conj-if-needed}(NestedAccessor::element_type(\exposid{nested-accessor_}.access(p, i)))} \end{itemdescr} +\indexlibrarymember{conjugated_accessor}{offset}% \begin{itemdecl} constexpr typename offset_policy::data_handle_type offset(data_handle_type p, size_t i) const; \end{itemdecl} @@ -12416,7 +12429,7 @@ \begin{itemdecl} template - constexpr auto conjugated(mdspan a); + constexpr auto @\libglobal{conjugated}@(mdspan a); \end{itemdecl} \begin{itemdescr} @@ -12526,7 +12539,7 @@ \begin{codeblock} namespace std::linalg { template - class layout_transpose { + class @\libglobal{layout_transpose}@ { public: using nested_layout_type = Layout; @@ -12594,6 +12607,7 @@ \tcode{Extents::rank()} equals 2. \end{itemize} +\indexlibraryctor{layout_transpose::mapping}% \begin{itemdecl} constexpr explicit mapping(const @\exposid{nested-mapping-type}@& map); \end{itemdecl} @@ -12610,12 +12624,12 @@ \end{itemize} \end{itemdescr} +\indexlibrarymember{layout_transpose::mapping}{stride}% \begin{itemdecl} constexpr index_type stride(size_t r) const; \end{itemdecl} \begin{itemdescr} - \pnum \expects \begin{itemize} @@ -12630,6 +12644,7 @@ \tcode{\exposid{nested-mapping_}.stride(r == 0 ? 1 : 0)} \end{itemdescr} +\indexlibrarymember{layout_transpose::mapping}{operator==}% \begin{itemdecl} template friend constexpr bool operator==(const mapping& x, const mapping& y); @@ -12655,6 +12670,7 @@ returns a new \tcode{mdspan} representing the input matrix's transpose. The input matrix's data are not modified, and the returned \tcode{mdspan} accesses the input matrix's data in place. +\indexlibraryglobal{transposed}% \begin{itemdecl} template constexpr auto transposed(mdspan a); @@ -12778,6 +12794,7 @@ The \tcode{conjugate_transposed} function returns a conjugate transpose view of an object. This combines the effects of \tcode{transposed} and \tcode{conjugated}. +\indexlibraryglobal{conjugate_transposed}% \begin{itemdecl} template constexpr auto conjugate_transposed(mdspan a); @@ -12864,6 +12881,7 @@ \rSec4[linalg.algs.blas1.givens.lartg]{Compute Givens rotation} +\indexlibraryglobal{setup_givens_rotation}% \begin{itemdecl} template setup_givens_rotation_result setup_givens_rotation(Real a, Real b) noexcept; @@ -12917,6 +12935,7 @@ \rSec4[linalg.algs.blas1.givens.rot]{Apply a computed Givens rotation to vectors} +\indexlibraryglobal{apply_givens_rotation}% \begin{itemdecl} template<@\exposconcept{inout-vector}@ InOutVec1, @\exposconcept{inout-vector}@ InOutVec2, class Real> void apply_givens_rotation(InOutVec1 x, InOutVec2 y, Real c, Real s); @@ -12955,6 +12974,7 @@ \rSec3[linalg.algs.blas1.swap]{Swap matrix or vector elements} +\indexlibraryglobal{swap_elements}% \begin{itemdecl} template<@\exposconcept{inout-object}@ InOutObj1, @\exposconcept{inout-object}@ InOutObj2> void swap_elements(InOutObj1 x, InOutObj2 y); @@ -12991,6 +13011,7 @@ \rSec3[linalg.algs.blas1.scal]{Multiply the elements of an object in place by a scalar} +\indexlibraryglobal{scale}% \begin{itemdecl} template void scale(Scalar alpha, InOutObj x); @@ -13013,6 +13034,7 @@ \rSec3[linalg.algs.blas1.copy]{Copy elements of one matrix or vector into another} +\indexlibraryglobal{copy}% \begin{itemdecl} template<@\exposconcept{in-object}@ InObj, @\exposconcept{out-object}@ OutObj> void copy(InObj x, OutObj y); @@ -13049,6 +13071,7 @@ \rSec3[linalg.algs.blas1.add]{Add vectors or matrices elementwise} +\indexlibraryglobal{add}% \begin{itemdecl} template<@\exposconcept{in-object}@ InObj1, @\exposconcept{in-object}@ InObj2, @\exposconcept{out-object}@ OutObj> void add(InObj1 x, InObj2 y, OutObj z); @@ -13102,6 +13125,8 @@ \pnum \expects \tcode{v1.extent(0)} equals \tcode{v2.extent(0)}. + +\indexlibraryglobal{dot}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, class Scalar> Scalar dot(InVec1 v1, InVec2 v2, Scalar init); @@ -13135,6 +13160,7 @@ then intermediate terms in the sum use \tcode{Scalar}'s precision or greater. \end{itemdescr} +\indexlibraryglobal{dot}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2> auto dot(InVec1 v1, InVec2 v2); @@ -13167,6 +13193,7 @@ \end{itemize} \end{itemdescr} +\indexlibraryglobal{dotc}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, class Scalar> Scalar dotc(InVec1 v1, InVec2 v2, Scalar init); @@ -13198,6 +13225,7 @@ \end{itemize} \end{itemdescr} +\indexlibraryglobal{dotc}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2> auto dotc(InVec1 v1, InVec2 v2); @@ -13232,6 +13260,7 @@ \rSec3[linalg.algs.blas1.ssq]{Scaled sum of squares of a vector's elements} +\indexlibraryglobal{vector_sum_of_squares}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec, class Scalar> sum_of_squares_result vector_sum_of_squares(InVec v, sum_of_squares_result init); @@ -13280,6 +13309,7 @@ \rSec3[linalg.algs.blas1.nrm2]{Euclidean norm of a vector} +\indexlibraryglobal{vector_two_norm}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec, class Scalar> Scalar vector_two_norm(InVec v, Scalar init); @@ -13321,6 +13351,7 @@ \end{note} \end{itemdescr} +\indexlibraryglobal{vector_two_norm}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec> auto vector_two_norm(InVec v); @@ -13352,6 +13383,7 @@ \rSec3[linalg.algs.blas1.asum]{Sum of absolute values of vector elements} +\indexlibraryglobal{vector_abs_sum}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec, class Scalar> Scalar vector_abs_sum(InVec v, Scalar init); @@ -13404,6 +13436,7 @@ then intermediate terms in the sum use \tcode{Scalar}'s precision or greater. \end{itemdescr} +\indexlibraryglobal{vector_abs_sum}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec> auto vector_abs_sum(InVec v); @@ -13433,6 +13466,7 @@ \rSec3[linalg.algs.blas1.iamax]{Index of maximum absolute value of vector elements} +\indexlibraryglobal{vector_idx_abs_max}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec> typename InVec::extents_type vector_idx_abs_max(InVec v); @@ -13484,6 +13518,8 @@ These functions exist in the BLAS standard\supercite{blas-std} but are not part of the reference implementation. \end{note} + +\indexlibraryglobal{matrix_frob_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Scalar> Scalar matrix_frob_norm(InMat A, Scalar init); @@ -13518,6 +13554,7 @@ then intermediate terms in the sum use \tcode{Scalar}'s precision or greater. \end{itemdescr} +\indexlibraryglobal{matrix_frob_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat> auto matrix_frob_norm(InMat A); @@ -13556,6 +13593,7 @@ but are not part of the reference implementation. \end{note} +\indexlibraryglobal{matrix_one_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Scalar> Scalar matrix_one_norm(InMat A, Scalar init); @@ -13592,6 +13630,7 @@ then intermediate terms in the sum use \tcode{Scalar}'s precision or greater. \end{itemdescr} +\indexlibraryglobal{matrix_one_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat> auto matrix_one_norm(InMat A); @@ -13628,6 +13667,7 @@ but are not part of the reference implementation. \end{note} +\indexlibraryglobal{matrix_inf_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Scalar> Scalar matrix_inf_norm(InMat A, Scalar init); @@ -13666,6 +13706,7 @@ then intermediate terms in the sum use \tcode{Scalar}'s precision or greater. \end{itemdescr} +\indexlibraryglobal{matrix_inf_norm}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat> auto matrix_inf_norm(InMat A); @@ -13731,6 +13772,7 @@ \complexity \bigoh{\tcode{x.extent(0)} \times \tcode{A.extent(1)}}. +\indexlibraryglobal{matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec> void matrix_vector_product(InMat A, InVec x, OutVec y); @@ -13766,6 +13808,7 @@ \end{codeblock} \end{example} +\indexlibraryglobal{matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, @\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{out-vector}@ OutVec> void matrix_vector_product(InMat A, InVec1 x, InVec2 y, OutVec z); @@ -13842,6 +13885,7 @@ \complexity \bigoh{\tcode{x.extent(0)} \times \tcode{A.extent(1)}}. +\indexlibraryglobal{symmetric_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec> void symmetric_matrix_vector_product(InMat A, Triangle t, InVec x, OutVec y); @@ -13863,6 +13907,7 @@ Computes $y = A x$. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, @\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{out-vector}@ OutVec> void symmetric_matrix_vector_product(InMat A, Triangle t, InVec1 x, InVec2 y, OutVec z); @@ -13931,6 +13976,7 @@ \complexity \bigoh{\tcode{x.extent(0)} \times \tcode{A.extent(1)}}. +\indexlibraryglobal{hermitian_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec> void hermitian_matrix_vector_product(InMat A, Triangle t, InVec x, OutVec y); @@ -13951,6 +13997,7 @@ Computes $y = A x$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, @\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{out-vector}@ OutVec> void hermitian_matrix_vector_product(InMat A, Triangle t, InVec1 x, InVec2 y, OutVec z); @@ -14020,6 +14067,7 @@ \tcode{A.extent(0)} equals \tcode{z.extent(0)} for those overloads that take a \tcode{z} parameter. \end{itemize} +\indexlibraryglobal{triangular_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec> @@ -14048,6 +14096,7 @@ \bigoh{\tcode{x.extent(0)} \times \tcode{A.extent(1)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-vector}@ InOutVec> void triangular_matrix_vector_product(InMat A, Triangle t, DiagonalStorage d, InOutVec y); @@ -14079,6 +14128,7 @@ \bigoh{\tcode{y.extent(0)} \times \tcode{A.extent(1)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{out-vector}@ OutVec> @@ -14151,6 +14201,7 @@ for those overloads that take an \tcode{x} parameter. \end{itemize} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec, class BinaryDivideOp> @@ -14183,6 +14234,7 @@ \bigoh{\tcode{A.extent(1)} \times \tcode{b.extent(0)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{in-vector}@ InVec, @\exposconcept{out-vector}@ OutVec> @@ -14198,6 +14250,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template @@ -14215,6 +14268,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-vector}@ InOutVec, class BinaryDivideOp> @@ -14250,6 +14304,7 @@ \bigoh{\tcode{A.extent(1)} \times \tcode{b.extent(0)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-vector}@ InOutVec> void triangular_matrix_vector_solve(InMat A, Triangle t, DiagonalStorage d, InOutVec b); @@ -14264,6 +14319,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_vector_solve}% \begin{itemdecl} template @@ -14283,6 +14339,7 @@ \rSec3[linalg.algs.blas2.rank1]{Rank-1 (outer product) update of a matrix} +\indexlibraryglobal{matrix_rank_1_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{inout-matrix}@ InOutMat> void matrix_rank_1_update(InVec1 x, InVec2 y, InOutMat A); @@ -14318,6 +14375,7 @@ \bigoh{\tcode{x.extent(0)} \times \tcode{y.extent(0)}}. \end{itemdescr} +\indexlibraryglobal{matrix_rank_1_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{inout-matrix}@ InOutMat> void matrix_rank_1_update_c(InVec1 x, InVec2 y, InOutMat A); @@ -14393,6 +14451,7 @@ \complexity \bigoh{\tcode{x.extent(0)} \times \tcode{x.extent(0)}}. +\indexlibraryglobal{symmetric_matrix_rank_1_update}% \begin{itemdecl} template void symmetric_matrix_rank_1_update(Scalar alpha, InVec x, InOutMat A, Triangle t); @@ -14416,6 +14475,7 @@ and assigns each element of $A'$ to the corresponding element of $A$. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_rank_1_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> void symmetric_matrix_rank_1_update(InVec x, InOutMat A, Triangle t); @@ -14437,6 +14497,7 @@ and assigns each element of $A'$ to the corresponding element of $A$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_1_update}% \begin{itemdecl} template void hermitian_matrix_rank_1_update(Scalar alpha, InVec x, InOutMat A, Triangle t); @@ -14460,6 +14521,7 @@ and assigns each element of $A'$ to the corresponding element of $A$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_1_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> void hermitian_matrix_rank_1_update(InVec x, InOutMat A, Triangle t); @@ -14520,6 +14582,7 @@ \complexity \bigoh{\tcode{x.extent(0)} \times \tcode{y.extent(0)}}. +\indexlibraryglobal{symmetric_matrix_rank_2_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> @@ -14543,6 +14606,7 @@ assigns each element of $A'$ to the corresponding element of $A$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_2_update}% \begin{itemdecl} template<@\exposconcept{in-vector}@ InVec1, @\exposconcept{in-vector}@ InVec2, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> @@ -14593,6 +14657,7 @@ \complexity \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{B.extent(1)}}. +\indexlibraryglobal{matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat> void matrix_product(InMat1 A, InMat2 B, OutMat C); @@ -14606,6 +14671,7 @@ Computes $C = A B$. \end{itemdescr} +\indexlibraryglobal{matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{in-matrix}@ InMat3, @\exposconcept{out-matrix}@ OutMat> void matrix_product(InMat1 A, InMat2 B, InMat3 E, OutMat C); @@ -14669,6 +14735,7 @@ \complexity \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{B.extent(1)}}. +\indexlibraryglobal{symmetric_matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat> void symmetric_matrix_product(InMat1 A, Triangle t, InMat2 B, OutMat C); @@ -14718,6 +14785,7 @@ Computes $C = A B$. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, class Triangle, @\exposconcept{out-matrix}@ OutMat> void symmetric_matrix_product(InMat1 A, InMat2 B, Triangle t, OutMat C); @@ -14770,6 +14838,7 @@ Computes $C = A B$. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{in-matrix}@ InMat3, @\exposconcept{out-matrix}@ OutMat> @@ -14832,6 +14901,7 @@ \tcode{C} may alias \tcode{E}. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, class Triangle, @\exposconcept{in-matrix}@ InMat3, @\exposconcept{out-matrix}@ OutMat> @@ -14907,6 +14977,7 @@ These functions correspond to the BLAS function \tcode{xTRMM}\supercite{blas3}. \end{note} +\indexlibraryglobal{triangular_matrix_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat> void triangular_matrix_left_product(InMat A, Triangle t, DiagonalStorage d, InOutMat C); @@ -14950,6 +15021,7 @@ \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{C.extent(0)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_right_product}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat> void triangular_matrix_right_product(InMat A, Triangle t, DiagonalStorage d, InOutMat C); @@ -15037,6 +15109,7 @@ \complexity \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{C.extent(0)}}. +\indexlibraryglobal{symmetric_matrix_rank_k_update}% \begin{itemdecl} template void symmetric_matrix_rank_k_update(Scalar alpha, InMat A, InOutMat C, Triangle t); @@ -15054,6 +15127,7 @@ and assigns each element of $C'$ to the corresponding element of $C$. \end{itemdescr} +\indexlibraryglobal{symmetric_matrix_rank_k_update}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> void symmetric_matrix_rank_k_update(InMat A, InOutMat C, Triangle t); @@ -15070,6 +15144,7 @@ assigns each element of $C'$ to the corresponding element of $C$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_k_update}% \begin{itemdecl} template void hermitian_matrix_rank_k_update(Scalar alpha, InMat A, InOutMat C, Triangle t); @@ -15087,6 +15162,7 @@ and assigns each element of $C'$ to the corresponding element of $C$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_k_update}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> void hermitian_matrix_rank_k_update(InMat A, InOutMat C, Triangle t); @@ -15142,6 +15218,7 @@ \complexity \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{C.extent(0)}}. +\indexlibraryglobal{symmetric_matrix_rank_2k_update}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> @@ -15159,6 +15236,7 @@ and assigns each element of $C'$ to the corresponding element of $C$. \end{itemdescr} +\indexlibraryglobal{hermitian_matrix_rank_2k_update}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{possibly-packed-inout-matrix}@ InOutMat, class Triangle> @@ -15184,6 +15262,7 @@ These functions correspond to the BLAS function \tcode{xTRSM}\supercite{blas3}. \end{note} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, class DiagonalStorage, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat, class BinaryDivideOp> @@ -15249,6 +15328,7 @@ and $y^{-1}$ denotes the multiplicative inverse of $y$. \end{note} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, class DiagonalStorage, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat> @@ -15265,6 +15345,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template @@ -15283,6 +15364,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, class DiagonalStorage, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat, class BinaryDivideOp> @@ -15345,6 +15427,7 @@ \end{note} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat1, class Triangle, class DiagonalStorage, @\exposconcept{in-matrix}@ InMat2, @\exposconcept{out-matrix}@ OutMat> @@ -15361,6 +15444,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template @@ -15386,6 +15470,7 @@ These functions correspond to the BLAS function \tcode{xTRSM}\supercite{blas3}. \end{note} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat, class BinaryDivideOp> @@ -15447,6 +15532,7 @@ \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{B.extent(1)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat> void triangular_matrix_matrix_left_solve(InMat A, Triangle t, DiagonalStorage d, @@ -15462,6 +15548,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_left_solve}% \begin{itemdecl} template @@ -15480,6 +15567,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat, class BinaryDivideOp> @@ -15540,6 +15628,7 @@ \bigoh{\tcode{A.extent(0)} \times \tcode{A.extent(1)} \times \tcode{B.extent(1)}}. \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template<@\exposconcept{in-matrix}@ InMat, class Triangle, class DiagonalStorage, @\exposconcept{inout-matrix}@ InOutMat> void triangular_matrix_matrix_right_solve(InMat A, Triangle t, DiagonalStorage d, InOutMat B); @@ -15554,6 +15643,7 @@ \end{codeblock} \end{itemdescr} +\indexlibraryglobal{triangular_matrix_matrix_right_solve}% \begin{itemdecl} template