@@ -15,6 +15,9 @@ const StaticMatMulLike{s1, s2, T} = Union{
15
15
Hermitian{T, <: StaticMatrix{s1, s2, T} },
16
16
LowerTriangular{T, <: StaticMatrix{s1, s2, T} },
17
17
UpperTriangular{T, <: StaticMatrix{s1, s2, T} },
18
+ UnitLowerTriangular{T, <: StaticMatrix{s1, s2, T} },
19
+ UnitUpperTriangular{T, <: StaticMatrix{s1, s2, T} },
20
+ UpperHessenberg{T, <: StaticMatrix{s1, s2, T} },
18
21
Adjoint{T, <: StaticMatrix{s1, s2, T} },
19
22
Transpose{T, <: StaticMatrix{s1, s2, T} }}
20
23
67
70
function gen_by_access (expr_gen, a:: Type{<:LowerTriangular{<:Any, <:StaticMatrix}} , asym = :a )
68
71
return expr_gen (:lower_triangular )
69
72
end
73
+ function gen_by_access (expr_gen, a:: Type{<:UnitUpperTriangular{<:Any, <:StaticMatrix}} , asym = :a )
74
+ return expr_gen (:unit_upper_triangular )
75
+ end
76
+ function gen_by_access (expr_gen, a:: Type{<:UnitLowerTriangular{<:Any, <:StaticMatrix}} , asym = :a )
77
+ return expr_gen (:unit_lower_triangular )
78
+ end
79
+ function gen_by_access (expr_gen, a:: Type{<:UpperHessenberg{<:Any, <:StaticMatrix}} , asym = :a )
80
+ return expr_gen (:upper_hessenberg )
81
+ end
70
82
function gen_by_access (expr_gen, a:: Type{<:Transpose{<:Any, <:StaticVecOrMat}} , asym = :a )
71
83
return expr_gen (:transpose )
72
84
end
@@ -127,6 +139,27 @@ function gen_by_access(expr_gen, a::Type{<:LowerTriangular{<:Any, <:StaticMatrix
127
139
end )
128
140
end
129
141
end
142
+ function gen_by_access (expr_gen, a:: Type{<:UnitUpperTriangular{<:Any, <:StaticMatrix}} , b:: Type )
143
+ return quote
144
+ return $ (gen_by_access (b, :b ) do access_b
145
+ expr_gen (:unit_upper_triangular , access_b)
146
+ end )
147
+ end
148
+ end
149
+ function gen_by_access (expr_gen, a:: Type{<:UnitLowerTriangular{<:Any, <:StaticMatrix}} , b:: Type )
150
+ return quote
151
+ return $ (gen_by_access (b, :b ) do access_b
152
+ expr_gen (:unit_lower_triangular , access_b)
153
+ end )
154
+ end
155
+ end
156
+ function gen_by_access (expr_gen, a:: Type{<:UpperHessenberg{<:Any, <:StaticMatrix}} , b:: Type )
157
+ return quote
158
+ return $ (gen_by_access (b, :b ) do access_b
159
+ expr_gen (:upper_hessenberg , access_b)
160
+ end )
161
+ end
162
+ end
130
163
function gen_by_access (expr_gen, a:: Type{<:Transpose{<:Any, <:StaticMatrix}} , b:: Type )
131
164
return quote
132
165
return $ (gen_by_access (b, :b ) do access_b
@@ -205,6 +238,28 @@ function uplo_access(sa, asym, k, j, uplo)
205
238
else
206
239
return :(zero (T))
207
240
end
241
+ elseif uplo == :unit_upper_triangular
242
+ if k < j
243
+ return :($ asym[$ (LinearIndices (sa)[k, j])])
244
+ elseif k == j
245
+ return :(oneunit (T))
246
+ else
247
+ return :(zero (T))
248
+ end
249
+ elseif uplo == :unit_lower_triangular
250
+ if k > j
251
+ return :($ asym[$ (LinearIndices (sa)[k, j])])
252
+ elseif k == j
253
+ return :(oneunit (T))
254
+ else
255
+ return :(zero (T))
256
+ end
257
+ elseif uplo == :upper_hessenberg
258
+ if k <= j+ 1
259
+ return :($ asym[$ (LinearIndices (sa)[k, j])])
260
+ else
261
+ return :(zero (T))
262
+ end
208
263
elseif uplo == :transpose
209
264
return :($ asym[$ (LinearIndices (reverse (sa))[j, k])])
210
265
elseif uplo == :ajoint
0 commit comments