Skip to content

Accept vectors in PiecewiseSpace #574

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

jishnub
Copy link
Member

@jishnub jishnub commented Aug 23, 2023

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 JuliaArrays/FillArrays.jl#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
Copy link

codecov bot commented Aug 23, 2023

Codecov Report

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

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
@@            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 Coverage Δ
src/Operators/Operator.jl 51.98% <0.00%> (ø)
src/Operators/banded/CalculusOperator.jl 17.21% <0.00%> (ø)
src/specialfunctions.jl 16.77% <0.00%> (ø)
src/Operators/general/InterlaceOperator.jl 23.17% <26.31%> (-0.30%) ⬇️
src/Spaces/SumSpace.jl 35.71% <33.33%> (+3.73%) ⬆️
src/ApproxFunBase.jl 61.76% <88.88%> (+17.76%) ⬆️
src/LinearAlgebra/helper.jl 56.00% <100.00%> (+0.41%) ⬆️

... and 1 file with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant