@@ -470,31 +470,19 @@ haswrapperstructure(x::Operator) = haswrapperstructure(typeof(x))
470
470
471
471
@traitfn opbandwidths (A:: X ) where {X; ! HasWrapperStructure{X}} =
472
472
(size (A,1 )- 1 ,size (A,2 )- 1 )
473
- @traitfn opbandwidths (A:: X ) where {X; HasWrapperStructure{X}} =
474
- bandwidths (A. op)
475
473
476
- @traitfn opstride (A:: X ) where {X; HasWrapperStructure{X}} =
477
- stride (A. op)
478
474
@traitfn opstride (A:: X ) where {X; ! HasWrapperStructure{X}} =
479
475
isdiag (A) ? factorial (10 ) : 1
480
476
481
- @traitfn opisblockbanded (A:: X ) where {X; HasWrapperStructure{X}} =
482
- isblockbanded (A. op)
483
477
@traitfn opisblockbanded (A:: X ) where {X; ! HasWrapperStructure{X}} =
484
478
all (isfinite, blockbandwidths (A)):: Bool
485
479
486
- @traitfn opisbandedblockbanded (A:: X ) where {X; HasWrapperStructure{X}} =
487
- isbandedblockbanded (A. op)
488
480
@traitfn opisbandedblockbanded (A:: X ) where {X; ! HasWrapperStructure{X}} =
489
481
isbandedblockbandedabove (A) && isbandedblockbandedbelow (A)
490
482
491
- @traitfn opisbanded (A:: X ) where {X; HasWrapperStructure{X}} =
492
- isbanded (A. op)
493
483
@traitfn opisbanded (A:: X ) where {X; ! HasWrapperStructure{X}} =
494
484
all (isfinite, bandwidths (A)):: Bool
495
485
496
- @traitfn opisraggedbelow (A:: X ) where {X; HasWrapperStructure{X}} =
497
- israggedbelow (A. op)
498
486
@traitfn function opisraggedbelow (A:: X ) where {X; ! HasWrapperStructure{X}}
499
487
isbandedbelow (A):: Bool ||
500
488
isbandedblockbanded (A):: Bool ||
505
493
# TODO : I think it can be generalized to the case when the domainspace
506
494
# blocklengths == rangespace blocklengths, in which case replace the definition
507
495
# of p with maximum(blocklength(domainspace(A)))
508
- @traitfn opblockbandwidths (A:: X ) where {X; HasWrapperStructure{X}} =
509
- opblockbandwidths (A. op)
510
496
@traitfn function opblockbandwidths (A:: X ) where {X; ! HasWrapperStructure{X}}
511
497
hastrivialblocks (A) && return bandwidths (A)
512
498
@@ -530,19 +516,28 @@ end
530
516
return (length (blocklengths (rangespace (A)))- 1 ,length (blocklengths (domainspace (A)))- 1 )
531
517
end
532
518
533
- @traitfn opsubblockbandwidths (A:: X ) where {X; HasWrapperStructure{X}} =
534
- subblockbandwidths (A. op)
535
519
@traitfn opsubblockbandwidths (A:: X ) where {X; ! HasWrapperStructure{X}} =
536
520
maximum (blocklengths (rangespace (A)))- 1 , maximum (blocklengths (domainspace (A)))- 1
537
521
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
-
542
522
defaultsize (A, k) = k== 1 ? dimension (rangespace (A)) : dimension (domainspace (A))
543
523
@traitfn opsize (A:: X , k:: Integer ) where {X; ! HasWrapperStructure{X}} =
544
524
defaultsize (A, k)
545
525
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
+
546
541
# use this for wrapper operators that have the same structure but
547
542
# not necessarily the same entries
548
543
#
0 commit comments