@@ -581,15 +581,34 @@ end
581581
582582
583583# we represent as a Mul with a banded matrix
584- # sublayout(::AbstractBasisLayout, ::Type{<:Tuple{<:Inclusion,<:Integer}}) = SubBasisLayout()
585- sublayout (:: AbstractBasisLayout , :: Type{<:Tuple{<:Inclusion,<:AbstractVector}} ) = SubBasisLayout ()
586- sublayout (:: AbstractBasisLayout , :: Type{<:Tuple{<:AbstractAffineQuasiVector,<:AbstractVector}} ) = MappedBasisLayout ()
587- sublayout (:: WeightedBasisLayouts , :: Type{<:Tuple{<:AbstractAffineQuasiVector,<:AbstractVector}} ) = MappedWeightedBasisLayout ()
588- sublayout (:: WeightedBasisLayout , :: Type{<:Tuple{<:Inclusion,<:AbstractVector}} ) = SubWeightedBasisLayout ()
589- sublayout (:: MappedWeightedBasisLayout , :: Type{<:Tuple{<:Inclusion,<:AbstractVector}} ) = MappedWeightedBasisLayout ()
584+ # sublayout(::AbstractBasisLayout, ::Type{Tuple{Inclusion,Integer}}) = SubBasisLayout()
585+ sublayout (:: AbstractBasisLayout , :: Type{<:Tuple{Inclusion,AbstractVector}} ) = SubBasisLayout ()
586+ sublayout (:: AbstractBasisLayout , :: Type{<:Tuple{AbstractAffineQuasiVector,AbstractVector}} ) = MappedBasisLayout ()
587+ sublayout (:: WeightedBasisLayouts , :: Type{<:Tuple{AbstractAffineQuasiVector,AbstractVector}} ) = MappedWeightedBasisLayout ()
588+ sublayout (:: WeightedBasisLayout , :: Type{<:Tuple{Inclusion,AbstractVector}} ) = SubWeightedBasisLayout ()
589+ # sublayout(::MappedWeightedBasisLayout, ::Type{<:Tuple{Inclusion,AbstractVector}}) = MappedWeightedBasisLayout() # not used
590+ sublayout (lay:: ExpansionLayout , :: Type{<:Tuple{Inclusion,Integer}} ) = lay
591+ sublayout (lay:: ExpansionLayout , :: Type{<:Tuple{Inclusion,AbstractVector}} ) = lay
592+
593+
594+ sub_basis_layout (_, P, j) = basis (P) # TODO : restrict to ExpansionLayout?
595+ function basis (V:: SubQuasiArray{<:Any, N, <:Any, <:Tuple{Inclusion,Any}} ) where N
596+ P = parent (V)
597+ _,j = parentindices (V)
598+ sub_basis_layout (MemoryLayout (P), P, j)
599+ end
600+
601+
602+ sub_coefficients_layout (_, P, j) = coefficients (P)[:,j] # TODO : restrict to ExpansionLayout?
603+ function coefficients (V:: SubQuasiArray{<:Any, N, <:Any, <:Tuple{Inclusion,Any}} ) where N
604+ P = parent (V)
605+ _,j = parentindices (V)
606+ sub_coefficients_layout (MemoryLayout (P), P, j)
607+ end
590608
591609@inline sub_materialize (:: AbstractBasisLayout , V:: AbstractQuasiArray ) = V
592610@inline sub_materialize (:: AbstractBasisLayout , V:: AbstractArray ) = V
611+ @inline sub_materialize (:: ExpansionLayout , V:: AbstractQuasiArray ) = basis (V) * coefficients (V)
593612
594613demap (x) = x
595614demap (x:: BroadcastQuasiArray ) = BroadcastQuasiArray (x. f, map (demap, arguments (x))... )
0 commit comments