@@ -18,9 +18,10 @@ Base.convert(::Type{AbstractMatrix}, ::IdentityOperator{N}) where{N} = Diagonal(
18
18
# traits
19
19
Base. size (:: IdentityOperator{N} ) where {N} = (N, N)
20
20
Base. adjoint (A:: IdentityOperator ) = A
21
+ Base. transpose (A:: IdentityOperator ) = A
21
22
LinearAlgebra. opnorm (:: IdentityOperator{N} , p:: Real = 2 ) where {N} = true
22
23
for pred in (
23
- :isreal , : issymmetric , :ishermitian , :isposdef ,
24
+ :issymmetric , :ishermitian , :isposdef ,
24
25
)
25
26
@eval LinearAlgebra.$ pred (:: IdentityOperator ) = true
26
27
end
@@ -98,9 +99,10 @@ Base.convert(::Type{AbstractMatrix}, ::NullOperator{N}) where{N} = Diagonal(zero
98
99
# traits
99
100
Base. size (:: NullOperator{N} ) where {N} = (N, N)
100
101
Base. adjoint (A:: NullOperator ) = A
102
+ Base. transpose (A:: NullOperator ) = A
101
103
LinearAlgebra. opnorm (:: NullOperator{N} , p:: Real = 2 ) where {N} = false
102
104
for pred in (
103
- :isreal , : issymmetric , :ishermitian ,
105
+ :issymmetric , :ishermitian ,
104
106
)
105
107
@eval LinearAlgebra.$ pred (:: NullOperator ) = true
106
108
end
@@ -184,6 +186,7 @@ function Base.adjoint(α::ScalarOperator) # TODO - test
184
186
update_func = (oldval,u,p,t) -> α. update_func (oldval' ,u,p,t)'
185
187
ScalarOperator (val; update_func= update_func)
186
188
end
189
+ Base. transpose (α:: ScalarOperator ) = α
187
190
188
191
getops (α:: ScalarOperator ) = (α. val)
189
192
islinear (L:: ScalarOperator ) = true
@@ -286,7 +289,12 @@ SparseArrays.sparse(L::ScaledOperator) = L.λ * sparse(L.L)
286
289
287
290
# traits
288
291
Base. size (L:: ScaledOperator ) = size (L. L)
289
- Base. adjoint (L:: ScaledOperator ) = ScaledOperator (L. λ' , L. op' )
292
+ for op in (
293
+ :adjoint ,
294
+ :transpose ,
295
+ )
296
+ @eval Base.$ op (L:: ScaledOperator ) = ScaledOperator ($ op (L. λ), $ op (L. op))
297
+ end
290
298
LinearAlgebra. opnorm (L:: ScaledOperator , p:: Real = 2 ) = abs (L. λ) * opnorm (L. L, p)
291
299
292
300
getops (L:: ScaledOperator ) = (L. λ, L. L)
@@ -404,7 +412,12 @@ SparseArrays.sparse(L::AddedOperator) = sum(_sparse, L.ops)
404
412
405
413
# traits
406
414
Base. size (L:: AddedOperator ) = size (first (L. ops))
407
- Base. adjoint (L:: AddedOperator ) = AddedOperator (adjoint .(L. ops)... )
415
+ for op in (
416
+ :adjoint ,
417
+ :transpose ,
418
+ )
419
+ @eval Base.$ op (L:: AddedOperator ) = AddedOperator ($ op .(L. ops)... )
420
+ end
408
421
409
422
getops (L:: AddedOperator ) = L. ops
410
423
Base. iszero (L:: AddedOperator ) = all (iszero, getops (L))
@@ -486,7 +499,12 @@ SparseArrays.sparse(L::ComposedOperator) = prod(_sparse, L.ops)
486
499
487
500
# traits
488
501
Base. size (L:: ComposedOperator ) = (size (first (L. ops), 1 ), size (last (L. ops),2 ))
489
- Base. adjoint (L:: ComposedOperator ) = ComposedOperator (adjoint .(reverse (L. ops)))
502
+ for op in (
503
+ :adjoint ,
504
+ :transpose ,
505
+ )
506
+ @eval Base.$ op (L:: ComposedOperator ) = ComposedOperator ($ op .(reverse (L. ops))... )
507
+ end
490
508
LinearAlgebra. opnorm (L:: ComposedOperator ) = prod (opnorm, L. ops)
491
509
492
510
getops (L:: ComposedOperator ) = L. ops
@@ -495,7 +513,7 @@ Base.iszero(L::ComposedOperator) = all(iszero, getops(L))
495
513
has_adjoint (L:: ComposedOperator ) = all (has_adjoint, L. ops)
496
514
has_mul! (L:: ComposedOperator ) = all (has_mul!, L. ops)
497
515
has_ldiv (L:: ComposedOperator ) = all (has_ldiv, L. ops)
498
- has_ldiv! (L:: ComposedOperator ) = all (has_mul !, L. ops)
516
+ has_ldiv! (L:: ComposedOperator ) = all (has_ldiv !, L. ops)
499
517
500
518
factorize (L:: ComposedOperator ) = prod (factorize, reverse (L. ops))
501
519
for fact in (
593
611
AbstractAdjointedVector = Adjoint{ <: Number , <: AbstractVector }
594
612
AbstractTransposedVector = Transpose{<: Number , <: AbstractVector }
595
613
614
+ has_adjoint (:: AdjointedOperator ) = true
615
+
616
+ Base. transpose (L:: AdjointedOperator ) = conj (L. L)
617
+ Base. adjoint (L:: TransposedOperator ) = conj (L. L)
618
+
596
619
for (op, LType, VType) in (
597
620
(:adjoint , :AdjointedOperator , :AbstractAdjointedVector ),
598
621
(:transpose , :TransposedOperator , :AbstractTransposedVector ),
@@ -606,12 +629,10 @@ for (op, LType, VType) in (
606
629
@eval Base. size (L:: $LType ) = size (L. L) |> reverse
607
630
@eval Base.$ op (L:: $LType ) = L. L
608
631
609
- @eval has_adjoint (L:: $LType ) = true
610
632
@eval getops (L:: $LType ) = (L. L,)
611
633
612
634
@eval @forward $ LType. L (
613
635
# LinearAlgebra
614
- LinearAlgebra. isreal,
615
636
LinearAlgebra. issymmetric,
616
637
LinearAlgebra. ishermitian,
617
638
LinearAlgebra. isposdef,
@@ -690,7 +711,6 @@ has_ldiv!(L::InvertedOperator) = has_mul!(L.L)
690
711
691
712
@forward InvertedOperator. L (
692
713
# LinearAlgebra
693
- LinearAlgebra. isreal,
694
714
LinearAlgebra. issymmetric,
695
715
LinearAlgebra. ishermitian,
696
716
LinearAlgebra. isposdef,
0 commit comments