JuliaApproximation / ApproxFunBase.jl

Core functionality of ApproxFun
MIT License
12 stars 13 forks source link

Accept vectors in `PiecewiseSpace` #574

Open jishnub opened 12 months ago

jishnub commented 12 months ago

Currently, PiecewiseSpace converts vectors to Tuples, which is intrinsically type-unstable. Since it is often used in contexts where the number of terms isn't known at compile time (e.g. roots), the way to improve type-inference is to allow vector arguments.

Along with https://github.com/JuliaArrays/FillArrays.jl/pull/291, this makes the following type-inferred as a Union:

julia> s = space(abs(Fun()));

julia> @code_typed Derivative(s)
CodeInfo(
1 ─ %1 = Core.getfield(x, 1)::ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}
│   %2 = invoke ApproxFunBase.DefaultDerivative(%1::ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}, 1::Int64)::Union{ApproxFunBase.DerivativeWrapper{TimesOperator{Float64, Tuple{Int64, Int64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Operator{Float64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Tuple{Int64, Int64}}, ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}, PiecewiseSpace{Vector{Ultraspherical{Int64, Segment{Float64}, Float64}}, DomainSets.UnionDomain{Float64, Vector{Segment{Float64}}}, Float64}, Int64, Float64}, ApproxFunBase.DerivativeWrapper{TimesOperator{Float64, Tuple{Int64, Int64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Operator{Float64}, Tuple{Int64, Int64}, Tuple{Int64, Int64}}, ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}, PiecewiseSpace{Vector{Ultraspherical{Int64, Segment{Float64}, Float64}}, DomainSets.UnionDomain{Float64, Vector{Segment{Float64}}}, Float64}, Int64, Float64}}
└──      return %2
) => Union{ApproxFunBase.DerivativeWrapper{TimesOperator{Float64, Tuple{Int64, Int64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Operator{Float64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Tuple{Int64, Int64}}, ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}, PiecewiseSpace{Vector{Ultraspherical{Int64, Segment{Float64}, Float64}}, DomainSets.UnionDomain{Float64, Vector{Segment{Float64}}}, Float64}, Int64, Float64}, ApproxFunBase.DerivativeWrapper{TimesOperator{Float64, Tuple{Int64, Int64}, Tuple{Infinities.InfiniteCardinal{0}, Infinities.InfiniteCardinal{0}}, Operator{Float64}, Tuple{Int64, Int64}, Tuple{Int64, Int64}}, ContinuousSpace{Float64, Float64, PiecewiseSegment{Float64, Vector{Float64}}}, PiecewiseSpace{Vector{Ultraspherical{Int64, Segment{Float64}, Float64}}, DomainSets.UnionDomain{Float64, Vector{Segment{Float64}}}, Float64}, Int64, Float64}}
codecov[bot] commented 12 months ago

Codecov Report

Patch coverage: 40.29% and project coverage change: +0.18% :tada:

Comparison is base (c31337a) 27.53% compared to head (e80cec5) 27.71%. Report is 12 commits behind head on master.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #574 +/- ## ========================================== + Coverage 27.53% 27.71% +0.18% ========================================== Files 80 80 Lines 8379 8403 +24 ========================================== + Hits 2307 2329 +22 - Misses 6072 6074 +2 ``` | [Files Changed](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation) | Coverage Δ | | |---|---|---| | [src/Operators/Operator.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL09wZXJhdG9ycy9PcGVyYXRvci5qbA==) | `51.98% <0.00%> (ø)` | | | [src/Operators/banded/CalculusOperator.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL09wZXJhdG9ycy9iYW5kZWQvQ2FsY3VsdXNPcGVyYXRvci5qbA==) | `17.21% <0.00%> (ø)` | | | [src/specialfunctions.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL3NwZWNpYWxmdW5jdGlvbnMuamw=) | `16.77% <0.00%> (ø)` | | | [src/Operators/general/InterlaceOperator.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL09wZXJhdG9ycy9nZW5lcmFsL0ludGVybGFjZU9wZXJhdG9yLmps) | `23.17% <26.31%> (-0.30%)` | :arrow_down: | | [src/Spaces/SumSpace.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL1NwYWNlcy9TdW1TcGFjZS5qbA==) | `35.71% <33.33%> (+3.73%)` | :arrow_up: | | [src/ApproxFunBase.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL0FwcHJveEZ1bkJhc2Uuamw=) | `61.76% <88.88%> (+17.76%)` | :arrow_up: | | [src/LinearAlgebra/helper.jl](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation#diff-c3JjL0xpbmVhckFsZ2VicmEvaGVscGVyLmps) | `56.00% <100.00%> (+0.41%)` | :arrow_up: | ... and [1 file with indirect coverage changes](https://app.codecov.io/gh/JuliaApproximation/ApproxFunBase.jl/pull/574/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaApproximation)

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.