|
633 | 633 | return dest |
634 | 634 | end |
635 | 635 |
|
| 636 | +Base.@constprop :aggressive function copytrito_triangular!(Bdata, Adata, uplo, uplomatch, sz) |
| 637 | + if uplomatch |
| 638 | + copytrito!(Bdata, Adata, uplo) |
| 639 | + else |
| 640 | + BLAS.chkuplo(uplo) |
| 641 | + LAPACK.lacpy_size_check(size(Bdata), sz) |
| 642 | + # only the diagonal is copied in this case |
| 643 | + copyto!(diagview(Bdata), diagview(Adata)) |
| 644 | + end |
| 645 | + return Bdata |
| 646 | +end |
| 647 | + |
| 648 | +function copytrito!(B::UpperTriangular, A::UpperTriangular, uplo::AbstractChar) |
| 649 | + m,n = size(A) |
| 650 | + copytrito_triangular!(B.data, A.data, uplo, uplo == 'U', (m, m < n ? m : n)) |
| 651 | + return B |
| 652 | +end |
| 653 | +function copytrito!(B::LowerTriangular, A::LowerTriangular, uplo::AbstractChar) |
| 654 | + m,n = size(A) |
| 655 | + copytrito_triangular!(B.data, A.data, uplo, uplo == 'L', (n < m ? n : m, n)) |
| 656 | + return B |
| 657 | +end |
| 658 | + |
| 659 | +uppertridata(A) = A |
| 660 | +lowertridata(A) = A |
| 661 | +# we restrict these specializations only to strided matrices to avoid cases where an UpperTriangular type |
| 662 | +# doesn't share its indexing with the parent |
| 663 | +uppertridata(A::UpperTriangular{<:Any, <:StridedMatrix}) = parent(A) |
| 664 | +lowertridata(A::LowerTriangular{<:Any, <:StridedMatrix}) = parent(A) |
| 665 | + |
636 | 666 | @inline _rscale_add!(A::AbstractTriangular, B::AbstractTriangular, C::Number, alpha::Number, beta::Number) = |
637 | 667 | @stable_muladdmul _triscale!(A, B, C, MulAddMul(alpha, beta)) |
638 | 668 | @inline _lscale_add!(A::AbstractTriangular, B::Number, C::AbstractTriangular, alpha::Number, beta::Number) = |
|
0 commit comments