Skip to content

Commit 6139298

Browse files
committed
define HasWrapperStructure methods in an eval loop
1 parent c7a4941 commit 6139298

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

src/Operators/Operator.jl

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -470,31 +470,19 @@ haswrapperstructure(x::Operator) = haswrapperstructure(typeof(x))
470470

471471
@traitfn opbandwidths(A::X) where {X; !HasWrapperStructure{X}} =
472472
(size(A,1)-1,size(A,2)-1)
473-
@traitfn opbandwidths(A::X) where {X; HasWrapperStructure{X}} =
474-
bandwidths(A.op)
475473

476-
@traitfn opstride(A::X) where {X; HasWrapperStructure{X}} =
477-
stride(A.op)
478474
@traitfn opstride(A::X) where {X; !HasWrapperStructure{X}} =
479475
isdiag(A) ? factorial(10) : 1
480476

481-
@traitfn opisblockbanded(A::X) where {X; HasWrapperStructure{X}} =
482-
isblockbanded(A.op)
483477
@traitfn opisblockbanded(A::X) where {X; !HasWrapperStructure{X}} =
484478
all(isfinite, blockbandwidths(A))::Bool
485479

486-
@traitfn opisbandedblockbanded(A::X) where {X; HasWrapperStructure{X}} =
487-
isbandedblockbanded(A.op)
488480
@traitfn opisbandedblockbanded(A::X) where {X; !HasWrapperStructure{X}} =
489481
isbandedblockbandedabove(A) && isbandedblockbandedbelow(A)
490482

491-
@traitfn opisbanded(A::X) where {X; HasWrapperStructure{X}} =
492-
isbanded(A.op)
493483
@traitfn opisbanded(A::X) where {X; !HasWrapperStructure{X}} =
494484
all(isfinite, bandwidths(A))::Bool
495485

496-
@traitfn opisraggedbelow(A::X) where {X; HasWrapperStructure{X}} =
497-
israggedbelow(A.op)
498486
@traitfn function opisraggedbelow(A::X) where {X; !HasWrapperStructure{X}}
499487
isbandedbelow(A)::Bool ||
500488
isbandedblockbanded(A)::Bool ||
@@ -505,8 +493,6 @@ end
505493
#TODO: I think it can be generalized to the case when the domainspace
506494
# blocklengths == rangespace blocklengths, in which case replace the definition
507495
# of p with maximum(blocklength(domainspace(A)))
508-
@traitfn opblockbandwidths(A::X) where {X; HasWrapperStructure{X}} =
509-
opblockbandwidths(A.op)
510496
@traitfn function opblockbandwidths(A::X) where {X; !HasWrapperStructure{X}}
511497
hastrivialblocks(A) && return bandwidths(A)
512498

@@ -530,19 +516,28 @@ end
530516
return (length(blocklengths(rangespace(A)))-1,length(blocklengths(domainspace(A)))-1)
531517
end
532518

533-
@traitfn opsubblockbandwidths(A::X) where {X; HasWrapperStructure{X}} =
534-
subblockbandwidths(A.op)
535519
@traitfn opsubblockbandwidths(A::X) where {X; !HasWrapperStructure{X}} =
536520
maximum(blocklengths(rangespace(A)))-1, maximum(blocklengths(domainspace(A)))-1
537521

538-
@traitfn opsize(A::X, k::Integer) where {X; HasWrapperStructure{X}} =
539-
opsize(A.op, k)
540-
@traitfn opsize(::X, k::PosInfinity) where {X; HasWrapperStructure{X}} = ℵ₀
541-
542522
defaultsize(A, k) = k==1 ? dimension(rangespace(A)) : dimension(domainspace(A))
543523
@traitfn opsize(A::X, k::Integer) where {X; !HasWrapperStructure{X}} =
544524
defaultsize(A, k)
545525

526+
for f in [:size, :stride, :bandwidths, :blockbandwidths, :subblockbandwidths,
527+
:israggedbelow, :isbanded, :isblockbanded, :isbandedblockbanded]
528+
opf = Symbol(:op, f)
529+
@eval begin
530+
@traitfn $opf(A::X) where {X; HasWrapperStructure{X}} = $f(A.op)
531+
end
532+
end
533+
534+
for f in [:size]
535+
opf = Symbol(:op, f)
536+
@eval begin
537+
@traitfn $opf(A::X, k::Integer) where {X; HasWrapperStructure{X}} = $f(A.op, k)
538+
end
539+
end
540+
546541
# use this for wrapper operators that have the same structure but
547542
# not necessarily the same entries
548543
#

0 commit comments

Comments
 (0)