@@ -289,7 +289,7 @@ Base.dataids(A::HermOrSym) = Base.dataids(parent(A))
289289Base. unaliascopy (A:: Hermitian ) = Hermitian (Base. unaliascopy (parent (A)), sym_uplo (A. uplo))
290290Base. unaliascopy (A:: Symmetric ) = Symmetric (Base. unaliascopy (parent (A)), sym_uplo (A. uplo))
291291
292- _conjugation (:: Symmetric ) = transpose
292+ _conjugation (:: Union{ Symmetric, Hermitian{<:Real}} ) = transpose
293293_conjugation (:: Hermitian ) = adjoint
294294
295295diag (A:: Symmetric ) = symmetric .(diag (parent (A)), sym_uplo (A. uplo))
@@ -472,49 +472,49 @@ Base.conj!(A::HermOrSym) = typeof(A)(parentof_applytri(conj!, A), A.uplo)
472472# tril/triu
473473function tril (A:: Hermitian , k:: Integer = 0 )
474474 if A. uplo == ' U' && k <= 0
475- return tril! (copy (A. data' ),k)
475+ return tril_maybe_inplace (copy (A. data' ),k)
476476 elseif A. uplo == ' U' && k > 0
477- return tril! (copy (A. data' ),- 1 ) + tril! (triu (A. data),k)
477+ return tril_maybe_inplace (copy (A. data' ),- 1 ) + tril_maybe_inplace (triu (A. data),k)
478478 elseif A. uplo == ' L' && k <= 0
479479 return tril (A. data,k)
480480 else
481- return tril (A. data,- 1 ) + tril! ( triu! (copy (A. data' )),k)
481+ return tril (A. data,- 1 ) + tril_maybe_inplace ( triu_maybe_inplace (copy (A. data' )),k)
482482 end
483483end
484484
485485function tril (A:: Symmetric , k:: Integer = 0 )
486486 if A. uplo == ' U' && k <= 0
487- return tril! (copy (transpose (A. data)),k)
487+ return tril_maybe_inplace (copy (transpose (A. data)),k)
488488 elseif A. uplo == ' U' && k > 0
489- return tril! (copy (transpose (A. data)),- 1 ) + tril! (triu (A. data),k)
489+ return tril_maybe_inplace (copy (transpose (A. data)),- 1 ) + tril_maybe_inplace (triu (A. data),k)
490490 elseif A. uplo == ' L' && k <= 0
491491 return tril (A. data,k)
492492 else
493- return tril (A. data,- 1 ) + tril! ( triu! (copy (transpose (A. data))),k)
493+ return tril (A. data,- 1 ) + tril_maybe_inplace ( triu_maybe_inplace (copy (transpose (A. data))),k)
494494 end
495495end
496496
497497function triu (A:: Hermitian , k:: Integer = 0 )
498498 if A. uplo == ' U' && k >= 0
499499 return triu (A. data,k)
500500 elseif A. uplo == ' U' && k < 0
501- return triu (A. data,1 ) + triu! ( tril! (copy (A. data' )),k)
501+ return triu (A. data,1 ) + triu_maybe_inplace ( tril_maybe_inplace (copy (A. data' )),k)
502502 elseif A. uplo == ' L' && k >= 0
503- return triu! (copy (A. data' ),k)
503+ return triu_maybe_inplace (copy (A. data' ),k)
504504 else
505- return triu! (copy (A. data' ),1 ) + triu! (tril (A. data),k)
505+ return triu_maybe_inplace (copy (A. data' ),1 ) + triu_maybe_inplace (tril (A. data),k)
506506 end
507507end
508508
509509function triu (A:: Symmetric , k:: Integer = 0 )
510510 if A. uplo == ' U' && k >= 0
511511 return triu (A. data,k)
512512 elseif A. uplo == ' U' && k < 0
513- return triu (A. data,1 ) + triu! ( tril! (copy (transpose (A. data))),k)
513+ return triu (A. data,1 ) + triu_maybe_inplace ( tril_maybe_inplace (copy (transpose (A. data))),k)
514514 elseif A. uplo == ' L' && k >= 0
515- return triu! (copy (transpose (A. data)),k)
515+ return triu_maybe_inplace (copy (transpose (A. data)),k)
516516 else
517- return triu! (copy (transpose (A. data)),1 ) + triu! (tril (A. data),k)
517+ return triu_maybe_inplace (copy (transpose (A. data)),1 ) + triu_maybe_inplace (tril (A. data),k)
518518 end
519519end
520520
0 commit comments