Skip to content

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

Attention: Patch coverage is 62.85714% with 13 lines in your changes missing coverage. Please review.

Project coverage is 27.71%. Comparing base (c31337a) to head (e80cec5).
Report is 74 commits behind head on master.

Files with missing lines Patch % Lines
src/Spaces/SumSpace.jl 42.85% 12 Missing ⚠️
src/ApproxFunBase.jl 88.88% 1 Missing ⚠️
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     

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

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

# 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