P1673: LWG review 2023/11/07 (Kona)
[linalg.algs.blas3.trsm]
triangular_matrix_matrix_left_solve
triangular_matrix_matrix_right_solve
(See above.)
[linalg.algs.blas3.inplacetrsm]
[algorithms.parallel.defns]
(OK)
[algorithms.parallel.user]
(OK)
[linalg.layout.packed]
[linalg.layout.packed.cons]
Para 6.1 (first Precondition) is a bit pessimistic, because we only store half the size. On the other hand, worrying about that would make generic algorithms harder to implement. (See below for the action item.)
[linalg.layout.packed.obs]
operator()
stride
[linalg.transp]
transpose-extents-t and transpose-extents
Resume tomorrow with layout_transpose.
Tasks 2023/11/08
P1673: LWG review 2023/11/07 (Kona)
[linalg.algs.blas3.trsm]
triangular_matrix_matrix_left_solvedividebinary function object in that case. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)Ais the triangular matrix" --Band/orXcould also be mathematically triangular. We're trying to say thattanddapply toA. However, linalg.general already says that the t and d apply to the preceding argument. Instead of saying "where applicable," say "that apply toA." Make this change throughout. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 . "taking into account theTriangle" is a key search phrase.)std::divides<void>as the default binary divide operator, instead of a lambda. Make this change throughout. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)triangular_matrix_matrix_right_solve(See above.)
[linalg.algs.blas3.inplacetrsm]
std::divides<void>as the default binary divide operator. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)triangular_matrix_matrix_left_solveandtriangular_matrix_matrix_right_solve. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)B, notX. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)[algorithms.parallel.defns]
(OK)
[algorithms.parallel.user]
(OK)
[linalg.layout.packed]
operator()to take two parameters only, not a pack. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)is_always_unique()so it checks both static extents (because one extent could be static and the other could be dynamic). Ditto foris_always_strided(). (is_unique()andis_strided()are fine, because there's a precondition that the matrix be square.) (DONE in PR P1673: More Kona 2023 LWG edits #428 .)r1to0, and remove the double right parenthesis afterstatic_extent(1). (DONE; fixed in PR P1673: LWG review (follow-on to PR 424) #426 .)regularif you put in weird template arguments.) (OK, this is fine.)[linalg.layout.packed.cons]
Para 6.1 (first Precondition) is a bit pessimistic, because we only store half the size. On the other hand, worrying about that would make generic algorithms harder to implement. (See below for the action item.)
[linalg.layout.packed.obs]
required_span_size()expression is in code font.extents_.extent(0) + 1could overflow, and more importantly,extents_.extent(0) * (extents_.extent(0) + 1)is bigger than the size of the multidimensional index space. Write this in math font, because the result is definitely in range. Look for other places in the proposal that have this issue. Alternately, replace Mandate above (in Para 4) with a requirement (Mandate + Precondition) thatextent(0) * (extent(0) + 1)be representable. (Do the latter.) (Create a function to check?) (9, 6.1, 4.6 -- use the expression without the divides by 2, in math font, for Mandates and Preconditions throughout.) (DONE in PR P1673: More Kona 2023 LWG edits #428 .)operator()operator(): Para 12.2:index_Type->index_type. (DONE; fixed in PR P1673: LWG review (follow-on to PR 424) #426 .)operator()should take exactly two parameters. Adjust 12-14 accordingly.iandjtoindex_typebefore we calculate. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)operator()overflow issue? Avoiding overflow would happen if we require thatextent(0) * (extent(0) + 1)won't overflow. (Did we resolve this?) (DONE in PR P1673: More Kona 2023 LWG edits #428 .)stride[linalg.transp]
transpose-extents-tandtranspose-extentstranspose-extents-t. Write it as code, not as English. Fix the Mandates, as the code wouldn't be able to express this. Also, the wording doesn't currently say that theindex_typeis the same; fix that. Instead, havetranspose-extentsreturnauto. (DONE in PR P1673: LWG review (follow-on to PR 424) #426 .)transpose-extent-tandtranspose-extentstheretranspose-extents-tin terms oftranspose-extents, rather than the other way aroundResume tomorrow with
layout_transpose.Tasks 2023/11/08
transpose-extentsdefinition (so it doesn't needautoand so the return type is obvious). (DONE in PR P1673: More Kona 2023 LWG edits #428 .)triangle_ttype alias tolayout_blas_packed, so users can write generic code. (DONE in PR P1673: More Kona 2023 LWG edits #428 .)