@@ -37,7 +37,7 @@ import InfiniteLinearAlgebra: chop!, chop, pad, choplength, compatible_resize!,
3737import ContinuumArrays: Basis, Weight, basis_axes, @simplify , AbstractAffineQuasiVector, ProjectionFactorization,
3838 grid, plotgrid, plotgrid_layout, plotvalues_layout, grid_layout, transform_ldiv, TransformFactorization, QInfAxes, broadcastbasis, ExpansionLayout, basismap,
3939 AffineQuasiVector, AffineMap, AbstractWeightLayout, AbstractWeightedBasisLayout, WeightedBasisLayout, WeightedBasisLayouts, demap, AbstractBasisLayout, BasisLayout,
40- checkpoints, weight, unweighted, MappedBasisLayouts, sum_layout, invmap, plan_ldiv, layout_broadcasted, MappedBasisLayout, SubBasisLayout, broadcastbasis_layout,
40+ checkpoints, weight, unweighted, MappedBasisLayouts, sum_layout, invmap, plan_ldiv, layout_broadcasted, MappedBasisLayout, MappedWeightLayout, SubBasisLayout, broadcastbasis_layout,
4141 plan_grid_transform, plan_transform, MAX_PLOT_POINTS, MulPlan, grammatrix, AdjointBasisLayout, grammatrix_layout, plan_transform_layout, _cumsum
4242import FastTransforms: Λ, ChebyshevGrid, chebyshevpoints, Plan, ScaledPlan, th_cheb2leg, pochhammer
4343import RecurrenceRelationships: forwardrecurrence, forwardrecurrence!, clenshaw, clenshaw!,
@@ -197,27 +197,45 @@ recurrencecoefficients(Q) = recurrencecoefficients_layout(MemoryLayout(Q), Q)
197197
198198
199199
200+ singularities_layout (lay:: BroadcastLayout , a) = singularitiesbroadcast (call (lay, a), map (singularities, arguments (lay, a))... )
201+ singularities_layout (:: WeightedBasisLayouts , a) = singularities_layout (BroadcastLayout {typeof(*)} (), a)
202+ singularities_layout (:: MappedWeightLayout , a) = view (singularities (demap (a)), basismap (a))
203+ singularities_layout (:: WeightedOPLayout , a) = singularities (weight (a))
204+ singularities_layout (:: ExpansionLayout , f) = singularities (basis (f))
205+ singularities_layout (lay, a) = NoSingularities () # assume no singularities
206+
200207"""
201208 singularities(f)
202209
203210gives the singularity structure of an expansion, e.g.,
204211`JacobiWeight`.
205212"""
206- singularities (:: AbstractWeightLayout , w) = w
207- singularities (lay:: BroadcastLayout , a) = singularitiesbroadcast (call (a), map (singularities, arguments (lay, a))... )
208- singularities (:: WeightedBasisLayouts , a) = singularities (BroadcastLayout {typeof(*)} (), a)
209- singularities (:: WeightedOPLayout , a) = singularities (weight (a))
210- singularities (w) = singularities (MemoryLayout (w), w)
211- singularities (:: ExpansionLayout , f) = singularities (basis (f))
213+ singularities (w) = singularities_layout (MemoryLayout (w), w)
214+
212215
213- singularitiesview (w, :: Inclusion ) = w # for now just assume it doesn't change
214- singularitiesview (w, ind) = view (w, ind)
215- singularities (S:: SubQuasiArray ) = singularitiesview (singularities (parent (S)), parentindices (S)[1 ])
216216
217217struct NoSingularities end
218218
219- basis_singularities (ax, :: NoSingularities ) = basis (ax)
220- basis_singularities (ax, sing) = basis_singularities (sing)
219+ # # default is to just assume no singularities
220+ singularitiesbroadcast (_... ) = NoSingularities ()
221+
222+ for op in (:+ , :* )
223+ @eval singularitiesbroadcast (:: typeof ($ op), A, B, C, D... ) = singularitiesbroadcast (* , singularitiesbroadcast (* , A, B), C, D... )
224+ @eval singularitiesbroadcast (:: typeof ($ op), :: NoSingularities , :: NoSingularities ) = NoSingularities ()
225+ end
226+
227+ singularitiesbroadcast (:: typeof (* ), :: NoSingularities , b) = b
228+ singularitiesbroadcast (:: typeof (* ), a, :: NoSingularities ) = a
229+
230+
231+ # for singularitiesbroadcast(literal_pow), ^, ...)
232+ # singularitiesbroadcast(F::Function, G::Function, V::SubQuasiArray, K) = singularitiesbroadcast(F, G, parent(V), K)[parentindices(V)...]
233+ # singularitiesbroadcast(F, V::SubQuasiArray...) = singularitiesbroadcast(F, map(parent,V)...)[parentindices(V...)...]
234+ # singularitiesbroadcast(F, V::NoSingularities...) = NoSingularities() # default is to assume smooth
235+
236+
237+
238+
221239basis_axes (ax:: Inclusion{<:Any,<:AbstractInterval} , v) = convert (AbstractQuasiMatrix{eltype (v)}, basis_singularities (ax, singularities (v)))
222240
223241
0 commit comments