@@ -110,8 +110,8 @@ function InterlaceOperator(ops::AbstractMatrix{<:Operator},ds::Space,rs::Space)
110
110
l,u = (1 - dimension (rs),dimension (ds)- 1 ) # not banded
111
111
end
112
112
113
-
114
- InterlaceOperator (ops ,ds,rs,
113
+ opsm = convert (Matrix{Operator{ mapreduce (eltype, promote_type, ops)}}, ops)
114
+ InterlaceOperator (opsm ,ds,rs,
115
115
cache (dsi),
116
116
cache (rsi),
117
117
(l,u))
@@ -134,8 +134,8 @@ function InterlaceOperator(ops::Vector{<:Operator},ds::Space,rs::Space)
134
134
l,u = (1 - dimension (rs),dimension (ds)- 1 ) # not banded
135
135
end
136
136
137
-
138
- InterlaceOperator (ops ,ds,rs,
137
+ opsv = convert (Vector{Operator{ mapreduce (eltype, promote_type, ops)}}, ops)
138
+ InterlaceOperator (opsv ,ds,rs,
139
139
cache (BlockInterlacer (tuple (blocklengths (ds)))),
140
140
cache (interlacer (rs)),
141
141
(l,u))
@@ -176,13 +176,22 @@ InterlaceOperator(opsin::AbstractMatrix{<:Operator},::Type{DS}) where {DS<:Space
176
176
InterlaceOperator (opsin:: AbstractMatrix ,S... ) =
177
177
InterlaceOperator (Matrix {Operator{mapreduce(eltype,promote_type,opsin)}} (promotespaces (opsin)),S... )
178
178
179
- function InterlaceOperator (opsin:: Union{Vector{<:Operator}, Tuple{Operator, Vararg{Operator}}} )
180
- ops= promotedomainspace (opsin)
181
- InterlaceOperator (ops,domainspace (first (ops)),rangespace (ops))
179
+ _convertVector (v:: AbstractVector ) = convert (Vector, v)
180
+ _convertVector (t:: Tuple ) = [t... ]
181
+
182
+ function InterlaceOperator (opsin:: AbstractVector{<:Operator} )
183
+ ops = promotedomainspace (opsin)
184
+ opsv = _convertVector (ops)
185
+ InterlaceOperator (opsv, domainspace (first (ops)), rangespace (opsv))
186
+ end
187
+ function InterlaceOperator (opsin:: Tuple{Operator, Vararg{Operator}} )
188
+ ops = promotedomainspace (opsin)
189
+ opsv = _convertVector (ops)
190
+ InterlaceOperator (opsv, domainspace (first (ops)), rangespace (opsv))
182
191
end
183
192
184
- InterlaceOperator (ops:: AbstractArray{T,p} ) where {T,p} =
185
- InterlaceOperator (Array {Operator{mapreduce(eltype,promote_type,ops)},p } (ops))
193
+ InterlaceOperator (ops:: AbstractArray ) =
194
+ InterlaceOperator (Array {Operator{mapreduce(eltype,promote_type,ops)}, ndims(ops) } (ops))
186
195
187
196
188
197
function convert (:: Type{Operator{T}} ,S:: InterlaceOperator ) where T
@@ -450,7 +459,7 @@ __vcat(a::OperatorTypes, b::OperatorTypes...) = (a, __vcat(b...)...)
450
459
__vcat () = ()
451
460
function _vcat (A:: OperatorTypes... )
452
461
Av = __vcat (A... )
453
- InterlaceOperator (vnocat (Av ... ))
462
+ InterlaceOperator (map (x -> convert (Operator, x), Av ))
454
463
end
455
464
456
465
0 commit comments