1
1
"""
2
2
$(TYPEDEF)
3
3
"""
4
- struct IdentityOperator{N} <: AbstractSciMLOperator{Bool} end
4
+ struct IdentityOperator <: AbstractSciMLOperator{Bool}
5
+ len:: Int
6
+ end
5
7
6
8
# constructors
7
- IdentityOperator (u:: AbstractArray ) = IdentityOperator { size(u,1)} ( )
9
+ IdentityOperator (u:: AbstractArray ) = IdentityOperator ( size (u,1 ))
8
10
9
11
function Base. one (L:: AbstractSciMLOperator )
10
12
@assert issquare (L)
11
13
N = size (L, 1 )
12
- IdentityOperator {N} ( )
14
+ IdentityOperator (N )
13
15
end
14
16
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 ))
16
18
17
19
# traits
18
- Base. size (:: IdentityOperator{N} ) where {N} = (N, N )
20
+ Base. size (ii :: IdentityOperator ) = (ii . len, ii . len )
19
21
Base. adjoint (A:: IdentityOperator ) = A
20
22
Base. transpose (A:: IdentityOperator ) = A
21
23
Base. conj (A:: IdentityOperator ) = A
22
- LinearAlgebra. opnorm (:: IdentityOperator{N} , p:: Real = 2 ) where {N} = true
24
+ LinearAlgebra. opnorm (:: IdentityOperator , p:: Real = 2 ) = true
23
25
for pred in (
24
26
:issymmetric , :ishermitian , :isposdef ,
25
27
)
@@ -38,79 +40,81 @@ has_ldiv!(::IdentityOperator) = true
38
40
for op in (
39
41
:* , :\ ,
40
42
)
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
43
45
copy (u)
44
46
end
45
47
end
46
48
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
49
51
copy! (v, u)
50
52
end
51
53
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
54
56
mul! (v, I, u, α, β)
55
57
end
56
58
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
59
61
copy! (v, u)
60
62
end
61
63
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
64
66
u
65
67
end
66
68
67
69
# operator fusion with identity returns operator itself
68
70
for op in (
69
71
:* , :∘ ,
70
72
)
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
73
75
A
74
76
end
75
77
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
78
80
A
79
81
end
80
82
end
81
83
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
84
86
A
85
87
end
86
88
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
89
91
A
90
92
end
91
93
92
94
"""
93
95
$(TYPEDEF)
94
96
"""
95
- struct NullOperator{N} <: AbstractSciMLOperator{Bool} end
97
+ struct NullOperator <: AbstractSciMLOperator{Bool}
98
+ len:: Int
99
+ end
96
100
97
101
# constructors
98
- NullOperator (u:: AbstractArray ) = NullOperator { size(u,1)} ( )
102
+ NullOperator (u:: AbstractArray ) = NullOperator ( size (u,1 ))
99
103
100
104
function Base. zero (L:: AbstractSciMLOperator )
101
105
@assert issquare (L)
102
106
N = size (L, 1 )
103
- NullOperator {N} ( )
107
+ NullOperator (N )
104
108
end
105
109
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 ))
107
111
108
112
# traits
109
- Base. size (:: NullOperator{N} ) where {N} = (N, N )
113
+ Base. size (nn :: NullOperator ) = (nn . len, nn . len )
110
114
Base. adjoint (A:: NullOperator ) = A
111
115
Base. transpose (A:: NullOperator ) = A
112
116
Base. conj (A:: NullOperator ) = A
113
- LinearAlgebra. opnorm (:: NullOperator{N} , p:: Real = 2 ) where {N} = false
117
+ LinearAlgebra. opnorm (:: NullOperator , p:: Real = 2 ) = false
114
118
for pred in (
115
119
:issymmetric , :ishermitian ,
116
120
)
@@ -126,44 +130,44 @@ has_adjoint(::NullOperator) = true
126
130
has_mul! (:: NullOperator ) = true
127
131
128
132
# 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))
130
134
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
133
137
lmul! (false , v)
134
138
end
135
139
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
138
142
lmul! (β, v)
139
143
end
140
144
141
145
# operator fusion, composition
142
146
for op in (
143
147
:* , :∘ ,
144
148
)
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 )
148
152
end
149
153
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 )
153
157
end
154
158
end
155
159
156
160
# operator addition, subtraction with NullOperator returns operator itself
157
161
for op in (
158
162
:+ , :- ,
159
163
)
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 )
162
166
A
163
167
end
164
168
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 )
167
171
A
168
172
end
169
173
end
@@ -198,7 +202,7 @@ for T in SCALINGNUMBERTYPES
198
202
λ = ScalarOperator (λ) * L. λ
199
203
ScaledOperator (λ, L. L)
200
204
end
201
-
205
+
202
206
for LT in SCALINGCOMBINETYPES
203
207
@eval Base.:* (λ:: $T , L:: $LT ) = ScaledOperator (λ, L)
204
208
@eval Base.:* (L:: $LT , λ:: $T ) = ScaledOperator (λ, L)
@@ -347,14 +351,14 @@ for op in (
347
351
@eval function Base. $op (L:: $LT , λ:: $T )
348
352
@assert issquare (L)
349
353
N = size (L, 1 )
350
- Id = IdentityOperator {N} ( )
354
+ Id = IdentityOperator (N )
351
355
AddedOperator (L, $ op (λ)* Id)
352
356
end
353
357
354
358
@eval function Base. $op (λ:: $T , L:: $LT )
355
359
@assert issquare (L)
356
360
N = size (L, 1 )
357
- Id = IdentityOperator {N} ( )
361
+ Id = IdentityOperator (N )
358
362
AddedOperator (λ* Id, $ op (L))
359
363
end
360
364
end
@@ -459,24 +463,24 @@ for op in (
459
463
:* , :∘ ,
460
464
)
461
465
# 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
464
468
A
465
469
end
466
470
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
469
473
A
470
474
end
471
475
472
476
# 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
475
479
zero (A)
476
480
end
477
481
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
480
484
zero (A)
481
485
end
482
486
@@ -561,7 +565,7 @@ function cache_self(L::ComposedOperator, u::AbstractVecOrMat)
561
565
cache = (vec, cache... )
562
566
end
563
567
elseif has_ldiv (L)
564
- m = size (L, 1 )
568
+ m = size (L, 1 )
565
569
k = size (u, 2 )
566
570
vec = u isa AbstractMatrix ? similar (u, (m, k)) : similar (u, (m,))
567
571
cache = ()
0 commit comments