namespacestd::linalg{// storage order tagsstructcolumn_major_t;inlineconstexprcolumn_major_tcolumn_major;structrow_major_t;inlineconstexprrow_major_trow_major;// triangle tagsstructupper_triangle_t;inlineconstexprupper_triangle_tupper_triangle;structlower_triangle_t;inlineconstexprlower_triangle_tlower_triangle;// diagonal tagsstructimplicit_unit_diagonal_t;inlineconstexprimplicit_unit_diagonal_timplicit_unit_diagonal;structexplicit_diagonal_t;inlineconstexprexplicit_diagonal_texplicit_diagonal;// class template layout_blas_packedtemplate<classTriangle,classStorageOrder>classlayout_blas_packed;// exposition-only concepts and traitstemplate<classT>struct__is_mdspan;// exposition onlytemplate<classT>concept__in_vector=/* see description */;// exposition onlytemplate<classT>concept__out_vector=/* see description */;// exposition onlytemplate<classT>concept__inout_vector=/* see description */;// exposition onlytemplate<classT>concept__in_matrix=/* see description */;// exposition onlytemplate<classT>concept__out_matrix=/* see description */;// exposition onlytemplate<classT>concept__inout_matrix=/* see description */;// exposition onlytemplate<classT>concept__possibly_packed_inout_matrix=/* see description */;// exposition onlytemplate<classT>concept__in_object=/* see description */;// exposition onlytemplate<classT>concept__out_object=/* see description */;// exposition onlytemplate<classT>concept__inout_object=/* see description */;// exposition only// scaled in-place transformationtemplate<classScalingFactor,classAccessor>classscaled_accessor;template<classScalingFactor,classElementType,classExtents,classLayout,classAccessor>constexprautoscaled(ScalingFactorscaling_factor,mdspan<ElementType,Extents,Layout,Accessor>x);// conjugated in-place transformationtemplate<classAccessor>classconjugated_accessor;template<classElementType,classExtents,classLayout,classAccessor>constexprautoconjugated(mdspan<ElementType,Extents,Layout,Accessor>a);// transposed in-place transformationtemplate<classLayout>classlayout_transpose;template<classElementType,classExtents,classLayout,classAccessor>constexprautotransposed(mdspan<ElementType,Extents,Layout,Accessor>a);// conjugated transposed in-place transformationtemplate<classElementType,classExtents,classLayout,classAccessor>constexprautoconjugate_transposed(mdspan<ElementType,Extents,Layout,Accessor>a);// algorithms// compute Givens rotationtemplate<classReal>structsetup_givens_rotation_result{Realc;Reals;Realr;};template<classReal>structsetup_givens_rotation_result<complex<Real>>{Realc;complex<Real>s;complex<Real>r;};template<classReal>setup_givens_rotation_result<Real>setup_givens_rotation(Reala,Realb)noexcept;template<classReal>setup_givens_rotation_result<complex<Real>>setup_givens_rotation(complex<Real>a,complex<Real>b)noexcept;// apply computed Givens rotationtemplate<__inout_vectorInOutVec1,__inout_vectorInOutVec2,classReal>voidapply_givens_rotation(InOutVec1x,InOutVec2y,Realc,Reals);template<classExecutionPolicy,__inout_vectorInOutVec1,__inout_vectorInOutVec2,classReal>voidapply_givens_rotation(ExecutionPolicy&&exec,InOutVec1x,InOutVec2y,Realc,Reals);template<__inout_vectorInOutVec1,__inout_vectorInOutVec2,classReal>voidapply_givens_rotation(InOutVec1x,InOutVec2y,Realc,complex<Real>s);template<classExecutionPolicy,__inout_vectorInOutVec1,__inout_vectorInOutVec2,classReal>voidapply_givens_rotation(ExecutionPolicy&&exec,InOutVec1x,InOutVec2y,Realc,complex<Real>s);// swap elementstemplate<__inout_objectInOutObj1,__inout_objectInOutObj2>voidswap_elements(InOutObj1x,InOutObj2y);template<classExecutionPolicy,__inout_objectInOutObj1,__inout_objectInOutObj2>voidswap_elements(ExecutionPolicy&&exec,InOutObj1x,InOutObj2y);// multiply elements by scalartemplate<classScalar,__inout_objectInOutObj>voidscale(Scalaralpha,InOutObjx);template<classExecutionPolicy,classScalar,__inout_objectInOutObj>voidscale(ExecutionPolicy&&exec,Scalaralpha,InOutObjx);// copy elementstemplate<__in_objectInObj,__out_objectOutObj>voidcopy(InObjx,OutObjy);template<classExecutionPolicy,__in_objectInObj,__out_objectOutObj>voidcopy(ExecutionPolicy&&exec,InObjx,OutObjy);// add elementwisetemplate<__in_objectInObj1,__in_objectInObj2,__out_objectOutObj>voidadd(InObj1x,InObj2y,OutObjz);template<classExecutionPolicy,__in_objectInObj1,__in_objectInObj2,__out_objectOutObj>voidadd(ExecutionPolicy&&exec,InObj1x,InObj2y,OutObjz);// nonconjugated dot product of two vectorstemplate<__in_vectorInVec1,__in_vectorInVec2,classScalar>Scalardot(InVec1v1,InVec2v2,Scalarinit);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,classScalar>Scalardot(ExecutionPolicy&&exec,InVec1v1,InVec2v2,Scalarinit);template<__in_vectorInVec1,__in_vectorInVec2>autodot(InVec1v1,InVec2v2)->/* see description */;template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2>autodot(ExecutionPolicy&&exec,InVec1v1,InVec2v2)->/* see description */;// conjugated dot product of two vectorstemplate<__in_vectorInVec1,__in_vectorInVec2,classScalar>Scalardotc(InVec1v1,InVec2v2,Scalarinit);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,classScalar>Scalardotc(ExecutionPolicy&&exec,InVec1v1,InVec2v2,Scalarinit);template<__in_vectorInVec1,__in_vectorInVec2>autodotc(InVec1v1,InVec2v2)->/* see description */;template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2>autodotc(ExecutionPolicy&&exec,InVec1v1,InVec2v2)->/* see description */;// Scaled sum of squares of a vector's elementstemplate<classScalar>structsum_of_squares_result{Scalarscaling_factor;Scalarscaled_sum_of_squares;};template<__in_vectorInVec,classScalar>sum_of_squares_result<Scalar>vector_sum_of_squares(InVecv,sum_of_squares_result<Scalar>init);template<classExecutionPolicy,__in_vectorInVec,classScalar>sum_of_squares_result<Scalar>vector_sum_of_squares(ExecutionPolicy&&exec,InVecv,sum_of_squares_result<Scalar>init);// Euclidean norm of a vectortemplate<__in_vectorInVec,classScalar>Scalarvector_two_norm(InVecv,Scalarinit);template<classExecutionPolicy,__in_vectorInVec,classScalar>Scalarvector_two_norm(ExecutionPolicy&&exec,InVecv,Scalarinit);template<__in_vectorInVec>autovector_two_norm(InVecv)->/* see description */;template<classExecutionPolicy,__in_vectorInVec>autovector_two_norm(ExecutionPolicy&&exec,InVecv)->/* see description */;// sum of absolute values of vector elementstemplate<__in_vectorInVec,classScalar>Scalarvector_abs_sum(InVecv,Scalarinit);template<classExecutionPolicy,__in_vectorInVec,classScalar>Scalarvector_abs_sum(ExecutionPolicy&&exec,InVecv,Scalarinit);template<__in_vectorInVec>autovector_abs_sum(InVecv)->/* see description */;template<classExecutionPolicy,__in_vectorInVec>autovector_abs_sum(ExecutionPolicy&&exec,InVecv)->/* see description */;// index of maximum absolute value of vector elementstemplate<__in_vectorInVec>typenameInVec::extents_typevector_idx_abs_max(InVecv);template<classExecutionPolicy,__in_vectorInVec>typenameInVec::extents_typevector_idx_abs_max(ExecutionPolicy&&exec,InVecv);// Frobenius norm of a matrixtemplate<__in_matrixInMat,classScalar>Scalarmatrix_frob_norm(InMatA,Scalarinit);template<classExecutionPolicy,__in_matrixInMat,classScalar>Scalarmatrix_frob_norm(ExecutionPolicy&&exec,InMatA,Scalarinit);template<__in_matrixInMat>automatrix_frob_norm(InMatA)->/* see description */;template<classExecutionPolicy,__in_matrixInMat>automatrix_frob_norm(ExecutionPolicy&&exec,InMatA)->/* see description */;// One norm of a matrixtemplate<__in_matrixInMat,classScalar>Scalarmatrix_one_norm(InMatA,Scalarinit);template<classExecutionPolicy,__in_matrixInMat,classScalar>Scalarmatrix_one_norm(ExecutionPolicy&&exec,InMatA,Scalarinit);template<__in_matrixInMat>automatrix_one_norm(InMatA)->/* see description */;template<classExecutionPolicy,__in_matrixInMat>automatrix_one_norm(ExecutionPolicy&&exec,InMatA)->/* see description */;// Infinity norm of a matrixtemplate<__in_matrixInMat,classScalar>Scalarmatrix_inf_norm(InMatA,Scalarinit);template<classExecutionPolicy,__in_matrixInMat,classScalar>Scalarmatrix_inf_norm(ExecutionPolicy&&exec,InMatA,Scalarinit);template<__in_matrixInMat>automatrix_inf_norm(InMatA)->/* see description */;template<classExecutionPolicy,__in_matrixInMat>automatrix_inf_norm(ExecutionPolicy&&exec,InMatA)->/* see description */;// general matrix-vector producttemplate<__in_matrixInMat,__in_vectorInVec,__out_vectorOutVec>voidmatrix_vector_product(InMatA,InVecx,OutVecy);template<classExecutionPolicy,__in_matrixInMat,__in_vectorInVec,__out_vectorOutVec>voidmatrix_vector_product(ExecutionPolicy&&exec,InMatA,InVecx,OutVecy);template<__in_matrixInMat,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidmatrix_vector_product(InMatA,InVec1x,InVec2y,OutVecz);template<classExecutionPolicy,__in_matrixInMat,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidmatrix_vector_product(ExecutionPolicy&&exec,InMatA,InVec1x,InVec2y,OutVecz);// symmetric matrix-vector producttemplate<__in_matrixInMat,classTriangle,__in_vectorInVec,__out_vectorOutVec>voidsymmetric_matrix_vector_product(InMatA,Trianglet,InVecx,OutVecy);template<classExecutionPolicy,__in_matrixInMat,classTriangle,__in_vectorInVec,__out_vectorOutVec>voidsymmetric_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,InVecx,OutVecy);template<__in_matrixInMat,classTriangle,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidsymmetric_matrix_vector_product(InMatA,Trianglet,InVec1x,InVec2y,OutVecz);template<classExecutionPolicy,__in_matrixInMat,classTriangle,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidsymmetric_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,InVec1x,InVec2y,OutVecz);// Hermitian matrix-vector producttemplate<__in_matrixInMat,classTriangle,__in_vectorInVec,__out_vectorOutVec>voidhermitian_matrix_vector_product(InMatA,Trianglet,InVecx,OutVecy);template<classExecutionPolicy,__in_matrixInMat,classTriangle,__in_vectorInVec,__out_vectorOutVec>voidhermitian_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,InVecx,OutVecy);template<__in_matrixInMat,classTriangle,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidhermitian_matrix_vector_product(InMatA,Trianglet,InVec1x,InVec2y,OutVecz);template<classExecutionPolicy,__in_matrixInMat,classTriangle,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidhermitian_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,InVec1x,InVec2y,OutVecz);// Triangular matrix-vector product// Overwriting triangular matrix-vector producttemplate<__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec>voidtriangular_matrix_vector_product(InMatA,Trianglet,DiagonalStoraged,InVecx,OutVecy);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec>voidtriangular_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InVecx,OutVecy);// In-place triangular matrix-vector producttemplate<__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec>voidtriangular_matrix_vector_product(InMatA,Trianglet,DiagonalStoraged,InOutVecy);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec>voidtriangular_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InOutVecy);// Updating triangular matrix-vector producttemplate<__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidtriangular_matrix_vector_product(InMatA,Trianglet,DiagonalStoraged,InVec1x,InVec2y,OutVecz);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec1,__in_vectorInVec2,__out_vectorOutVec>voidtriangular_matrix_vector_product(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InVec1x,InVec2y,OutVecz);// Solve a triangular linear system, not in placetemplate<__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec,classBinaryDivideOp>voidtriangular_matrix_vector_solve(InMatA,Trianglet,DiagonalStoraged,InVecb,OutVecx,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec,classBinaryDivideOp>voidtriangular_matrix_vector_solve(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InVecb,OutVecx,BinaryDivideOpdivide);template<__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec>voidtriangular_matrix_vector_solve(InMatA,Trianglet,DiagonalStoraged,InVecb,OutVecx);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__in_vectorInVec,__out_vectorOutVec>voidtriangular_matrix_vector_solve(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InVecb,OutVecx);// Solve a triangular linear system, in placetemplate<__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec,classBinaryDivideOp>voidtriangular_matrix_vector_solve(InMatA,Trianglet,DiagonalStoraged,InOutVecb,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec,classBinaryDivideOp>voidtriangular_matrix_vector_solve(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InOutVecb,BinaryDivideOpdivide);template<__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec>voidtriangular_matrix_vector_solve(InMatA,Trianglet,DiagonalStoraged,InOutVecb);template<classExecutionPolicy,__in_matrixInMat,classTriangle,classDiagonalStorage,__inout_vectorInOutVec>voidtriangular_matrix_vector_solve(ExecutionPolicy&&exec,InMatA,Trianglet,DiagonalStoraged,InOutVecb);// nonconjugated rank-1 matrix updatetemplate<__in_vectorInVec1,__in_vectorInVec2,__inout_matrixInOutMat>voidmatrix_rank_1_update(InVec1x,InVec2y,InOutMatA);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,__inout_matrixInOutMat>voidmatrix_rank_1_update(ExecutionPolicy&&exec,InVec1x,InVec2y,InOutMatA);// conjugated rank-1 matrix updatetemplate<__in_vectorInVec1,__in_vectorInVec2,__inout_matrixInOutMat>voidmatrix_rank_1_update_c(InVec1x,InVec2y,InOutMatA);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,__inout_matrixInOutMat>voidmatrix_rank_1_update_c(ExecutionPolicy&&exec,InVec1x,InVec2y,InOutMatA);// symmetric rank-1 matrix updatetemplate<__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_1_update(InVecx,InOutMatA,Trianglet);template<classExecutionPolicy,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_1_update(ExecutionPolicy&&exec,InVecx,InOutMatA,Trianglet);template<classScalar,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_1_update(Scalaralpha,InVecx,InOutMatA,Trianglet);template<classExecutionPolicy,classScalar,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_1_update(ExecutionPolicy&&exec,Scalaralpha,InVecx,InOutMatA,Trianglet);// Hermitian rank-1 matrix updatetemplate<__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_1_update(InVecx,InOutMatA,Trianglet);template<classExecutionPolicy,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_1_update(ExecutionPolicy&&exec,InVecx,InOutMatA,Trianglet);template<classScalar,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_1_update(Scalaralpha,InVecx,InOutMatA,Trianglet);template<classExecutionPolicy,classScalar,__in_vectorInVec,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_1_update(ExecutionPolicy&&exec,Scalaralpha,InVecx,InOutMatA,Trianglet);// symmetric rank-2 matrix updatetemplate<__in_vectorInVec1,__in_vectorInVec2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_2_update(InVec1x,InVec2y,InOutMatA,Trianglet);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_2_update(ExecutionPolicy&&exec,InVec1x,InVec2y,InOutMatA,Trianglet);// Hermitian rank-2 matrix updatetemplate<__in_vectorInVec1,__in_vectorInVec2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_2_update(InVec1x,InVec2y,InOutMatA,Trianglet);template<classExecutionPolicy,__in_vectorInVec1,__in_vectorInVec2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_2_update(ExecutionPolicy&&exec,InVec1x,InVec2y,InOutMatA,Trianglet);// general matrix-matrix producttemplate<__in_matrixInMat1,__in_matrixInMat2,__out_matrixOutMat>voidmatrix_product(InMat1A,InMat2B,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,__out_matrixOutMat>voidmatrix_product(ExecutionPolicy&&exec,InMat1A,InMat2B,OutMatC);template<__in_matrixInMat1,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidmatrix_product(InMat1A,InMat2B,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidmatrix_product(ExecutionPolicy&&exec,InMat1A,InMat2B,InMat3E,OutMatC);// symmetric matrix-matrix product// overwriting symmetric matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,__in_matrixInMat2,__out_matrixOutMat>voidsymmetric_matrix_product(InMat1A,Trianglet,InMat2B,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,__in_matrixInMat2,__out_matrixOutMat>voidsymmetric_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,InMat2B,OutMatC);// overwriting symmetric matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,__out_matrixOutMat>voidsymmetric_matrix_product(InMat1B,InMat2A,Trianglet,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,__out_matrixOutMat>voidsymmetric_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,OutMatC);// updating symmetric matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidsymmetric_matrix_product(InMat1A,Trianglet,InMat2B,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidsymmetric_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,InMat2B,InMat3E,OutMatC);// updating symmetric matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,__in_matrixInMat3,__out_matrixOutMat>voidsymmetric_matrix_product(InMat1B,InMat2A,Trianglet,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,__in_matrixInMat3,__out_matrixOutMat>voidsymmetric_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,InMat3E,OutMatC);// Hermitian matrix-matrix product// overwriting Hermitian matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,__in_matrixInMat2,__out_matrixOutMat>voidhermitian_matrix_product(InMat1A,Trianglet,InMat2B,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,__in_matrixInMat2,__out_matrixOutMat>voidhermitian_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,InMat2B,OutMatC);// overwriting Hermitian matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,__out_matrixOutMat>voidhermitian_matrix_product(InMat1B,InMat2A,Trianglet,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,__out_matrixOutMat>voidhermitian_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,OutMatC);// updating Hermitian matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidhermitian_matrix_product(InMat1A,Trianglet,InMat2B,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidhermitian_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,InMat2B,InMat3E,OutMatC);// updating Hermitian matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,__in_matrixInMat3,__out_matrixOutMat>voidhermitian_matrix_product(InMat1B,InMat2A,Trianglet,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,__in_matrixInMat3,__out_matrixOutMat>voidhermitian_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,InMat3E,OutMatC);// triangular matrix-matrix product// overwriting triangular matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_product(InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatC);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_left_product(InMat1A,Trianglet,DiagonalStoraged,InOutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_left_product(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatC);// overwriting triangular matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,classDiagonalStorage,__out_matrixOutMat>voidtriangular_matrix_product(InMat1B,InMat2A,Trianglet,DiagonalStoraged,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,classDiagonalStorage,__out_matrixOutMat>voidtriangular_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,DiagonalStoraged,OutMatC);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_right_product(InMat1A,Trianglet,DiagonalStoraged,InOutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_right_product(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatC);// updating triangular matrix-matrix left producttemplate<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidtriangular_matrix_product(InMat1A,Trianglet,DiagonalStoraged,InMat2B,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__in_matrixInMat3,__out_matrixOutMat>voidtriangular_matrix_product(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,InMat3E,OutMatC);// updating triangular matrix-matrix right producttemplate<__in_matrixInMat1,__in_matrixInMat2,classTriangle,classDiagonalStorage,__in_matrixInMat3,__out_matrixOutMat>voidtriangular_matrix_product(InMat1B,InMat2A,Trianglet,DiagonalStoraged,InMat3E,OutMatC);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,classTriangle,classDiagonalStorage,__in_matrixInMat3,__out_matrixOutMat>voidtriangular_matrix_product(ExecutionPolicy&&exec,InMat1B,InMat2A,Trianglet,DiagonalStoraged,InMat3E,OutMatC);// rank-k symmetric matrix updatetemplate<classScalar,__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_k_update(Scalaralpha,InMat1A,InOutMatC,Trianglet);template<classScalar,classExecutionPolicy,___in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_k_update(ExecutionPolicy&&exec,Scalaralpha,InMat1A,InOutMatC,Trianglet);template<__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_k_update(InMat1A,InOutMatC,Trianglet);template<classExecutionPolicy,__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_k_update(ExecutionPolicy&&exec,InMat1A,InOutMatC,Trianglet);// rank-k Hermitian matrix updatetemplate<classScalar,__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_k_update(Scalaralpha,InMat1A,InOutMatC,Trianglet);template<classExecutionPolicy,classScalar,__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTrianglevoidhermitian_matrix_rank_k_update(ExecutionPolicy&&exec,Scalaralpha,InMat1A,InOutMatC,Trianglet);template<__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_k_update(InMat1A,InOutMatC,Trianglet);template<classExecutionPolicy,__in_matrixInMat1,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_k_update(ExecutionPolicy&&exec,InMat1A,InOutMatC,Trianglet);// rank-2k symmetric matrix updatetemplate<__in_matrixInMat1,__in_matrixInMat2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_2k_update(InMat1A,InMat2B,InOutMatC,Trianglet);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidsymmetric_matrix_rank_2k_update(ExecutionPolicy&&exec,InMat1A,InMat2B,InOutMatC,Trianglet);// rank-2k Hermitian matrix updatetemplate<__in_matrixInMat1,__in_matrixInMat2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_2k_update(InMat1A,InMat2B,InOutMatC,Trianglet);template<classExecutionPolicy,__in_matrixInMat1,__in_matrixInMat2,__possibly_packed_inout_matrixInOutMat,classTriangle>voidhermitian_matrix_rank_2k_update(ExecutionPolicy&&exec,InMat1A,InMat2B,InOutMatC,Trianglet);// solve multiple triangular linear systems// with triangular matrix on the lefttemplate<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_left_solve(InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_left_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX,BinaryDivideOpdivide);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_left_solve(InMat1A,Trianglet,DiagonalStoraged,InOutMatB,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_left_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatB,BinaryDivideOpdivide);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_matrix_left_solve(InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_matrix_left_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_matrix_left_solve(InMat1A,Trianglet,DiagonalStoraged,InOutMatB);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_matrix_left_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatB);// solve multiple triangular linear systems// with triangular matrix on the righttemplate<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_right_solve(InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_right_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX,BinaryDivideOpdivide);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_right_solve(InMat1A,Trianglet,DiagonalStoraged,InOutMatB,BinaryDivideOpdivide);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat,classBinaryDivideOp>voidtriangular_matrix_matrix_right_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatB,BinaryDivideOpdivide));template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_matrix_right_solve(InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__in_matrixInMat2,__out_matrixOutMat>voidtriangular_matrix_matrix_right_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InMat2B,OutMatX);template<__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_matrix_right_solve(InMat1A,Trianglet,DiagonalStoraged,InOutMatB);template<classExecutionPolicy,__in_matrixInMat1,classTriangle,classDiagonalStorage,__inout_matrixInOutMat>voidtriangular_matrix_matrix_right_solve(ExecutionPolicy&&exec,InMat1A,Trianglet,DiagonalStoraged,InOutMatB);}namespacestd::linalg{structcolumn_major_t{explicitcolumn_major_t()=default;};inlineconstexprcolumn_major_tcolumn_major={};structrow_major_t{explicitrow_major_t()=default;};inlineconstexprrow_major_trow_major={};structupper_triangle_t{explicitupper_triangle_t()=default;};inlineconstexprupper_triangle_tupper_triangle={};structlower_triangle_t{explicitlower_triangle_t()=default;};inlineconstexprlower_triangle_tlower_triangle={};structimplicit_unit_diagonal_t{explicitimplicit_unit_diagonal_t()=default;};inlineconstexprimplicit_unit_diagonal_timplicit_unit_diagonal={};structexplicit_diagonal_t{explicitexplicit_diagonal_t()=default;};inlineconstexprexplicit_diagonal_texplicit_diagonal={};}namespacestd::linalg{template<classTriangle,classStorageOrder>classlayout_blas_packed{public:usingtriangle_type=Triangle;usingstorage_order_type=StorageOrder;template<classExtents>structmapping{public:usingextents_type=Extents;usingindex_type=typenameextents_type::index_type;usingsize_type=typenameextents_type::size_type;usingrank_type=typenameextents_type::rank_type;usinglayout_type=layout_blas_packed<Triangle,StorageOrder>;private:Extents__the_extents{};// exposition onlypublic:constexprmapping()noexcept=default;constexprmapping(constmapping&)noexcept=default;constexprmapping(constextents_type&e)noexcept;template<classOtherExtents>constexprexplicit(!is_convertible_v<OtherExtents,extents_type>)mapping(constmapping<OtherExtents>&other)noexcept;constexprmapping&operator=(constmapping&)noexcept=default;constexprextents_typeextents()constnoexcept{return__the_extents;}constexprsize_typerequired_span_size()constnoexcept;template<classIndex0,classIndex1>constexprindex_typeoperator()(Index0ind0,Index1ind1)constnoexcept;staticconstexprboolis_always_unique(){return(extents_type::static_extent(0)!=dynamic_extent&&extents_type::static_extent(0)<2)||(extents_type::static_extent(1)!=dynamic_extent&&extents_type::static_extent(1)<2);}staticconstexprboolis_always_exhaustive(){returntrue;}staticconstexprboolis_always_strided(){returnis_always_unique();}constexprboolis_unique()constnoexcept{return__the_extents.extent(0)<2;}constexprboolis_exhaustive()constnoexcept{returntrue;}constexprboolis_strided()constnoexcept{return__the_extents.extent(0)<2;}constexprindex_typestride(rank_type)constnoexcept;template<classOtherExtents>friendconstexprbooloperator==(constmapping&,constmapping<OtherExtents>&)noexcept;};};}namespacestd::linalg{template<classScalingFactor,classNestedAccessor>classscaled_accessor{public:usingelement_type=add_const_t<decltype(declval<ScalingFactor>()*declval<NestedAccessor::element_type>())>;usingreference=remove_const_t<element_type>;usingdata_handle_type=NestedAccessor::data_handle_type;usingoffset_policy=scaled_accessor<ScalingFactor,NestedAccessor::offset_policy>;constexprscaled_accessor()=default;template<classOtherNestedAccessor>explicit(!is_convertible_v<OtherNestedAccessor,NestedAccessor>)constexprscaled_accessor(constscaled_accessor<ScalingFactor,OtherNestedAccessor>&);constexprscaled_accessor(constScalingFactor&s,constAccessor&a);constexprreferenceaccess(data_handle_typep,size_ti)constnoexcept;constexproffset_policy::data_handle_typeoffset(data_handle_typep,size_ti)constnoexcept;constexprconstScalingFactor&scaling_factor()constnoexcept{return__scaling_factor;}constexprconstNestedAccessor&nested_accessor()constnoexcept{return__nested_accessor;}private:ScalingFactor__scaling_factor;// exposition onlyNestedAccessor__nested_accessor;// exposition only};}namespacestd::linalg{template<classNestedAccessor>classconjugated_accessor{private:NestedAccessor__nested_accessor;// exposition onlypublic:usingelement_type=add_const_t<decltype(/*conj-if-needed*/(declval<NestedAccessor::element_type>()))>;usingreference=remove_const_t<element_type>;usingdata_handle_type=typenameNestedAccessor::data_handle_type;usingoffset_policy=conjugated_accessor<NestedAccessor::offset_policy>;constexprconjugated_accessor()=default;template<classOtherNestedAccessor>explicit(!is_convertible_v<OtherNestedAccessor,NestedAccessor>)constexprconjugated_accessor(constconjugated_accessor<OtherNestedAccessor>&other);constexprreferenceaccess(data_handle_typep,size_ti)const;constexprtypenameoffset_policy::data_handle_typeoffset(data_handle_typep,size_ti)const;constexprconstNestedAccessor&nested_accessor()constnoexcept{return__nested_accessor;}};}namespacestd::linalg{template<classInputExtents>using__transpose_extents_t=/* see description */;// exposition onlytemplate<classLayout>classlayout_transpose{public:usingnested_layout_type=Layout;template<classExtents>structmapping{private:using__nested_mapping_type=typenameLayout::templatemapping<__transpose_extents_t<Extents>>;// exposition only__nested_mapping_type__nested_mapping;// exposition onlyextents_type__extents;// exposition onlypublic:usingextents_type=Extents;usingindex_type=typenameextents_type::index_type;usingsize_type=typenameextents_type::size_type;usingrank_type=typenameextents_type::rank_type;usinglayout_type=layout_transpose;constexprexplicitmapping(const__nested_mapping_type&map);constexprconstextents_type&extents()constnoexcept{return__extents;}constexprindex_typerequired_span_size()const{return__nested_mapping.required_span_size();}template<classIndex0,classIndex1>constexprindex_typeoperator()(Index0ind0,Index1ind1)const{return__nested_mapping(ind1,ind0);}constexprconst__nested_mapping_type&nested_mapping()constnoexcept{return__nested_mapping;}staticconstexprboolis_always_unique()noexcept{return__nested_mapping_type::is_always_unique();}staticconstexprboolis_always_exhaustive()noexcept{return__nested_mapping_type::is_always_exhaustive();}staticconstexprboolis_always_strided()noexcept{return__nested_mapping_type::is_always_strided();}constexprboolis_unique()const{return__nested_mapping.is_unique();}constexprboolis_exhaustive()const{return__nested_mapping.is_exhaustive();}constexprboolis_strided()const{return__nested_mapping.is_strided();}constexprindex_typestride(size_tr)const;template<classOtherExtents>friendconstexprbooloperator==(constmapping&x,constmapping<OtherExtents>&y);};};}namespacestd::linalg{template<classT>struct__is_mdspan:false_type{};// exposition onlytemplate<classElementType,classExtents,classLayout,classAccessor>struct__is_mdspan<mdspan<ElementType,Extents,Layout,Accessor>>:true_type{};// exposition onlytemplate<classT>concept__in_vector=// exposition only__is_mdspan<T>::value&&T::rank()==1;template<classT>concept__out_vector=// exposition only__is_mdspan<T>::value&&T::rank()==1&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();template<classT>concept__inout_vector=// exposition only__is_mdspan<T>::value&&T::rank()==1&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();template<classT>concept__in_matrix=// exposition only__is_mdspan<T>::value&&T::rank()==2;template<classT>concept__out_matrix=// exposition only__is_mdspan<T>::value&&T::rank()==2&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();template<classT>concept__inout_matrix=// exposition only__is_mdspan<T>::value&&T::rank()==2&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();template<classT>concept__possibly_packed_inout_matrix=// exposition only__is_mdspan<T>::value&&T::rank()==2&&is_assignable_v<typenameT::reference,typenameT::element_type>&&(T::is_always_unique()||is_same_v<typenameT::layout_type,layout_blas_packed>);template<classT>concept__in_object=// exposition only__is_mdspan<T>::value&&(T::rank()==1||T::rank()==2);template<classT>concept__out_object=// exposition only__is_mdspan<T>::value&&(T::rank()==1||T::rank()==2)&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();template<classT>concept__inout_object=// exposition only__is_mdspan<T>::value&&(T::rank()==1||T::rank()==2)&&is_assignable_v<typenameT::reference,typenameT::element_type>&&T::is_always_unique();}