11"""
22$(TYPEDEF)
33"""
4- struct IdentityOperator{N} <: AbstractSciMLOperator{Bool} end
4+ struct IdentityOperator <: AbstractSciMLOperator{Bool}
5+ len:: Int
6+ end
57
68# constructors
7- IdentityOperator (u:: AbstractArray ) = IdentityOperator { size(u,1)} ( )
9+ IdentityOperator (u:: AbstractArray ) = IdentityOperator ( size (u,1 ))
810
911function Base. one (L:: AbstractSciMLOperator )
1012 @assert issquare (L)
1113 N = size (L, 1 )
12- IdentityOperator {N} ( )
14+ IdentityOperator (N )
1315end
1416
15- Base. convert (:: Type{AbstractMatrix} , :: IdentityOperator{N} ) where {N} = Diagonal (ones (Bool, N ))
17+ Base. convert (:: Type{AbstractMatrix} , ii :: IdentityOperator ) = Diagonal (ones (Bool, ii . len ))
1618
1719# traits
18- Base. size (:: IdentityOperator{N} ) where {N} = (N, N )
20+ Base. size (ii :: IdentityOperator ) = (ii . len, ii . len )
1921Base. adjoint (A:: IdentityOperator ) = A
2022Base. transpose (A:: IdentityOperator ) = A
2123Base. conj (A:: IdentityOperator ) = A
22- LinearAlgebra. opnorm (:: IdentityOperator{N} , p:: Real = 2 ) where {N} = true
24+ LinearAlgebra. opnorm (:: IdentityOperator , p:: Real = 2 ) = true
2325for pred in (
2426 :issymmetric , :ishermitian , :isposdef ,
2527 )
@@ -38,79 +40,81 @@ has_ldiv!(::IdentityOperator) = true
3840for op in (
3941 :* , :\ ,
4042 )
41- @eval function Base. $op (:: IdentityOperator{N} , u:: AbstractVecOrMat ) where {N}
42- @assert size (u, 1 ) == N
43+ @eval function Base. $op (ii :: IdentityOperator , u:: AbstractVecOrMat )
44+ @assert size (u, 1 ) == ii . len
4345 copy (u)
4446 end
4547end
4648
47- function LinearAlgebra. mul! (v:: AbstractVecOrMat , :: IdentityOperator{N} , u:: AbstractVecOrMat ) where {N}
48- @assert size (u, 1 ) == N
49+ function LinearAlgebra. mul! (v:: AbstractVecOrMat , ii :: IdentityOperator , u:: AbstractVecOrMat )
50+ @assert size (u, 1 ) == ii . len
4951 copy! (v, u)
5052end
5153
52- function LinearAlgebra. mul! (v:: AbstractVecOrMat , :: IdentityOperator{N} , u:: AbstractVecOrMat , α, β) where {N}
53- @assert size (u, 1 ) == N
54+ function LinearAlgebra. mul! (v:: AbstractVecOrMat , ii :: IdentityOperator , u:: AbstractVecOrMat , α, β)
55+ @assert size (u, 1 ) == ii . len
5456 mul! (v, I, u, α, β)
5557end
5658
57- function LinearAlgebra. ldiv! (v:: AbstractVecOrMat , :: IdentityOperator{N} , u:: AbstractVecOrMat ) where {N}
58- @assert size (u, 1 ) == N
59+ function LinearAlgebra. ldiv! (v:: AbstractVecOrMat , ii :: IdentityOperator , u:: AbstractVecOrMat )
60+ @assert size (u, 1 ) == ii . len
5961 copy! (v, u)
6062end
6163
62- function LinearAlgebra. ldiv! (:: IdentityOperator{N} , u:: AbstractVecOrMat ) where {N}
63- @assert size (u, 1 ) == N
64+ function LinearAlgebra. ldiv! (ii :: IdentityOperator , u:: AbstractVecOrMat )
65+ @assert size (u, 1 ) == ii . len
6466 u
6567end
6668
6769# operator fusion with identity returns operator itself
6870for op in (
6971 :* , :∘ ,
7072 )
71- @eval function Base. $op (:: IdentityOperator{N} , A:: AbstractSciMLOperator ) where {N}
72- @assert size (A, 1 ) == N
73+ @eval function Base. $op (ii :: IdentityOperator , A:: AbstractSciMLOperator )
74+ @assert size (A, 1 ) == ii . len
7375 A
7476 end
7577
76- @eval function Base. $op (A:: AbstractSciMLOperator , :: IdentityOperator{N} ) where {N}
77- @assert size (A, 2 ) == N
78+ @eval function Base. $op (A:: AbstractSciMLOperator , ii :: IdentityOperator )
79+ @assert size (A, 2 ) == ii . len
7880 A
7981 end
8082end
8183
82- function Base.:\ (:: IdentityOperator{N} , A:: AbstractSciMLOperator ) where {N}
83- @assert size (A, 1 ) == N
84+ function Base.:\ (:: IdentityOperator , A:: AbstractSciMLOperator )
85+ @assert size (A, 1 ) == ii . len
8486 A
8587end
8688
87- function Base.:/ (A:: AbstractSciMLOperator , :: IdentityOperator{N} ) where {N}
88- @assert size (A, 2 ) == N
89+ function Base.:/ (A:: AbstractSciMLOperator , :: IdentityOperator )
90+ @assert size (A, 2 ) == ii . len
8991 A
9092end
9193
9294"""
9395$(TYPEDEF)
9496"""
95- struct NullOperator{N} <: AbstractSciMLOperator{Bool} end
97+ struct NullOperator <: AbstractSciMLOperator{Bool}
98+ len:: Int
99+ end
96100
97101# constructors
98- NullOperator (u:: AbstractArray ) = NullOperator { size(u,1)} ( )
102+ NullOperator (u:: AbstractArray ) = NullOperator ( size (u,1 ))
99103
100104function Base. zero (L:: AbstractSciMLOperator )
101105 @assert issquare (L)
102106 N = size (L, 1 )
103- NullOperator {N} ( )
107+ NullOperator (N )
104108end
105109
106- Base. convert (:: Type{AbstractMatrix} , :: NullOperator{N} ) where {N} = Diagonal (zeros (Bool, N ))
110+ Base. convert (:: Type{AbstractMatrix} , nn :: NullOperator ) = Diagonal (zeros (Bool, nn . len ))
107111
108112# traits
109- Base. size (:: NullOperator{N} ) where {N} = (N, N )
113+ Base. size (nn :: NullOperator ) = (nn . len, nn . len )
110114Base. adjoint (A:: NullOperator ) = A
111115Base. transpose (A:: NullOperator ) = A
112116Base. conj (A:: NullOperator ) = A
113- LinearAlgebra. opnorm (:: NullOperator{N} , p:: Real = 2 ) where {N} = false
117+ LinearAlgebra. opnorm (:: NullOperator , p:: Real = 2 ) = false
114118for pred in (
115119 :issymmetric , :ishermitian ,
116120 )
@@ -126,44 +130,44 @@ has_adjoint(::NullOperator) = true
126130has_mul! (:: NullOperator ) = true
127131
128132# opeator application
129- Base.:* (:: NullOperator{N} , u:: AbstractVecOrMat ) where {N} = (@assert size (u, 1 ) == N ; zero (u))
133+ Base.:* (nn :: NullOperator , u:: AbstractVecOrMat ) = (@assert size (u, 1 ) == nn . len ; zero (u))
130134
131- function LinearAlgebra. mul! (v:: AbstractVecOrMat , :: NullOperator{N} , u:: AbstractVecOrMat ) where {N}
132- @assert size (u, 1 ) == size (v, 1 ) == N
135+ function LinearAlgebra. mul! (v:: AbstractVecOrMat , nn :: NullOperator , u:: AbstractVecOrMat )
136+ @assert size (u, 1 ) == size (v, 1 ) == nn . len
133137 lmul! (false , v)
134138end
135139
136- function LinearAlgebra. mul! (v:: AbstractVecOrMat , :: NullOperator{N} , u:: AbstractVecOrMat , α, β) where {N}
137- @assert size (u, 1 ) == size (v, 1 ) == N
140+ function LinearAlgebra. mul! (v:: AbstractVecOrMat , nn :: NullOperator , u:: AbstractVecOrMat , α, β)
141+ @assert size (u, 1 ) == size (v, 1 ) == nn . len
138142 lmul! (β, v)
139143end
140144
141145# operator fusion, composition
142146for op in (
143147 :* , :∘ ,
144148 )
145- @eval function Base. $op (:: NullOperator{N} , A:: AbstractSciMLOperator ) where {N}
146- @assert size (A, 1 ) == N
147- NullOperator {N} ( )
149+ @eval function Base. $op (nn :: NullOperator , A:: AbstractSciMLOperator )
150+ @assert size (A, 1 ) == nn . len
151+ NullOperator (nn . len )
148152 end
149153
150- @eval function Base. $op (A:: AbstractSciMLOperator , :: NullOperator{N} ) where {N}
151- @assert size (A, 2 ) == N
152- NullOperator {N} ( )
154+ @eval function Base. $op (A:: AbstractSciMLOperator , nn :: NullOperator )
155+ @assert size (A, 2 ) == nn . len
156+ NullOperator (nn . len )
153157 end
154158end
155159
156160# operator addition, subtraction with NullOperator returns operator itself
157161for op in (
158162 :+ , :- ,
159163 )
160- @eval function Base. $op (:: NullOperator{N} , A:: AbstractSciMLOperator ) where {N}
161- @assert size (A) == (N, N )
164+ @eval function Base. $op (nn :: NullOperator , A:: AbstractSciMLOperator )
165+ @assert size (A) == (nn . len, nn . len )
162166 A
163167 end
164168
165- @eval function Base. $op (A:: AbstractSciMLOperator , :: NullOperator{N} ) where {N}
166- @assert size (A) == (N, N )
169+ @eval function Base. $op (A:: AbstractSciMLOperator , nn :: NullOperator )
170+ @assert size (A) == (nn . len, nn . len )
167171 A
168172 end
169173end
@@ -198,7 +202,7 @@ for T in SCALINGNUMBERTYPES
198202 λ = ScalarOperator (λ) * L. λ
199203 ScaledOperator (λ, L. L)
200204 end
201-
205+
202206 for LT in SCALINGCOMBINETYPES
203207 @eval Base.:* (λ:: $T , L:: $LT ) = ScaledOperator (λ, L)
204208 @eval Base.:* (L:: $LT , λ:: $T ) = ScaledOperator (λ, L)
@@ -347,14 +351,14 @@ for op in (
347351 @eval function Base. $op (L:: $LT , λ:: $T )
348352 @assert issquare (L)
349353 N = size (L, 1 )
350- Id = IdentityOperator {N} ( )
354+ Id = IdentityOperator (N )
351355 AddedOperator (L, $ op (λ)* Id)
352356 end
353357
354358 @eval function Base. $op (λ:: $T , L:: $LT )
355359 @assert issquare (L)
356360 N = size (L, 1 )
357- Id = IdentityOperator {N} ( )
361+ Id = IdentityOperator (N )
358362 AddedOperator (λ* Id, $ op (L))
359363 end
360364 end
@@ -459,24 +463,24 @@ for op in (
459463 :* , :∘ ,
460464 )
461465 # identity
462- @eval function Base. $op (:: IdentityOperator{N} , A:: ComposedOperator ) where {N}
463- @assert size (A, 1 ) == N
466+ @eval function Base. $op (ii :: IdentityOperator , A:: ComposedOperator )
467+ @assert size (A, 1 ) == ii . len
464468 A
465469 end
466470
467- @eval function Base. $op (A:: ComposedOperator , :: IdentityOperator{N} ) where {N}
468- @assert size (A, 2 ) == N
471+ @eval function Base. $op (A:: ComposedOperator , ii :: IdentityOperator )
472+ @assert size (A, 2 ) == ii . len
469473 A
470474 end
471475
472476 # null operator
473- @eval function Base. $op (:: NullOperator{N} , A:: ComposedOperator ) where {N}
474- @assert size (A, 1 ) == N
477+ @eval function Base. $op (nn :: NullOperator , A:: ComposedOperator )
478+ @assert size (A, 1 ) == nn . len
475479 zero (A)
476480 end
477481
478- @eval function Base. $op (A:: ComposedOperator , :: NullOperator{N} ) where {N}
479- @assert size (A, 2 ) == N
482+ @eval function Base. $op (A:: ComposedOperator , nn :: NullOperator )
483+ @assert size (A, 2 ) == nn . len
480484 zero (A)
481485 end
482486
@@ -561,7 +565,7 @@ function cache_self(L::ComposedOperator, u::AbstractVecOrMat)
561565 cache = (vec, cache... )
562566 end
563567 elseif has_ldiv (L)
564- m = size (L, 1 )
568+ m = size (L, 1 )
565569 k = size (u, 2 )
566570 vec = u isa AbstractMatrix ? similar (u, (m, k)) : similar (u, (m,))
567571 cache = ()
0 commit comments