Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name = "ContinuumArrays"
uuid = "7ae1f121-cc2c-504b-ac30-9b923412ae5c"
version = "0.20.2"
version = "0.20.3"

[deps]
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"
Expand Down
8 changes: 5 additions & 3 deletions src/ContinuumArrays.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module ContinuumArrays
using IntervalSets, DomainSets, LinearAlgebra, LazyArrays, FillArrays, BandedMatrices, QuasiArrays, Infinities, InfiniteArrays, StaticArrays, BlockArrays
import Base: @_inline_meta, @_propagate_inbounds_meta, axes, size, getindex, convert, prod, *, /, \, +, -, ==, ^,
IndexStyle, IndexLinear, ==, OneTo, tail, similar, copyto!, copy, diff,
first, last, show, isempty, findfirst, findlast, findall, Slice, union, minimum, maximum, sum, _sum, _maximum, _minimum,
first, last, show, isempty, findfirst, findlast, findall, Slice, union, minimum, maximum, extrema, sum, _sum, _maximum, _minimum,
getproperty, isone, iszero, zero, abs, <, ≤, >, ≥, string, summary, to_indices, view, @propagate_inbounds
import Base.Broadcast: materialize, BroadcastStyle, broadcasted, Broadcasted
import LazyArrays: MemoryLayout, Applied, ApplyStyle, flatten, _flatten, colsupport, combine_mul_styles, AbstractArrayApplyStyle,
Expand All @@ -18,8 +18,10 @@ import QuasiArrays: cardinality, checkindex, QuasiAdjoint, QuasiTranspose, Inclu
QuasiDiagonal, MulQuasiArray, MulQuasiMatrix, MulQuasiVector, QuasiMatMulMat, QuasiArrayLayout,
ApplyQuasiArray, ApplyQuasiMatrix, LazyQuasiArrayApplyStyle, AbstractQuasiArrayApplyStyle, AbstractQuasiLazyLayout,
LazyQuasiArray, LazyQuasiVector, LazyQuasiMatrix, LazyLayout, LazyQuasiArrayStyle, _factorize, _cutdim,
AbstractQuasiFill, UnionDomain, sum_size, maximum_size, minimum_size, sum_layout, _cumsum, cumsum_layout, applylayout, equals_layout, layout_broadcasted, PolynomialLayout, dot_size,
diff_layout, diff_size, AbstractQuasiVecOrMat, vec_layout, searchsortedfirst_layout
AbstractQuasiFill, UnionDomain, sum_size, maximum_size, minimum_size, sum_layout, _cumsum, cumsum_layout,
applylayout, equals_layout, layout_broadcasted, PolynomialLayout, dot_size,
diff_layout, diff_size, AbstractQuasiVecOrMat, vec_layout, searchsortedfirst_layout,
maximum_layout, minimum_layout
import InfiniteArrays: Infinity, InfAxes
import AbstractFFTs: Plan

Expand Down
2 changes: 2 additions & 0 deletions src/bases/bases.jl
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,8 @@ function sum_layout(::MappedBasisLayouts, V, dims)
sum(demap(V); dims=dims)/kr.A
end

maximum_layout(::ExpansionLayout, A, dims) = error("Overload")
minimum_layout(::ExpansionLayout, A, dims) = error("Overload")
sum_layout(::ExpansionLayout, A, dims) = sum_layout(ApplyLayout{typeof(*)}(), A, dims)
cumsum_layout(::ExpansionLayout, A, dims) = cumsum_layout(ApplyLayout{typeof(*)}(), A, dims)

Expand Down
11 changes: 10 additions & 1 deletion src/bases/splines.jl
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,13 @@ function _sum(P::Spline{-1,T}, dims) where T
end

_cumsum(H::HeavisideSpline{T}, dims) where T = LinearSpline(H.points) * tril(Ones{T}(length(H.points),length(H.points)-1) .* diff(H.points)',-1)
_cumsum(S::Spline{-1,T}, dims) where T = HeavisideSpline(S.points) * tril(ones(T,length(S.points)-1,length(S.points)-2),-1)
_cumsum(S::Spline{-1,T}, dims) where T = HeavisideSpline(S.points) * tril(ones(T,length(S.points)-1,length(S.points)-2),-1)


for λ in (0, 1)
@eval begin
_minimum(f::ApplyQuasiVector{<:Any, typeof(*), <:Tuple{Spline{$λ}, AbstractVector}}, ::Colon) = minimum(coefficients(f))
_maximum(f::ApplyQuasiVector{<:Any, typeof(*), <:Tuple{Spline{$λ}, AbstractVector}}, ::Colon) = maximum(coefficients(f))
extrema(f::ApplyQuasiVector{<:Any, typeof(*), <:Tuple{Spline{$λ}, AbstractVector}}) = extrema(coefficients(f))
end
end
7 changes: 7 additions & 0 deletions test/test_chebyshev.jl
Original file line number Diff line number Diff line change
Expand Up @@ -288,4 +288,11 @@ Base.:(==)(::FooBasis, ::FooBasis) = true
@test_throws ErrorException Chebyshev(5)'LinearSpline([-1,1])
@test_throws ErrorException FooBasis()'FooBasis()
end

@testset "maximum/minimum/norm" begin
T = Chebyshev(5)
x = axes(T,1)
@test_throws ErrorException maximum(exp.(x))
@test_throws ErrorException minimum(exp.(x))
end
end
9 changes: 9 additions & 0 deletions test/test_splines.jl
Original file line number Diff line number Diff line change
Expand Up @@ -685,4 +685,13 @@ Random.seed!(24543)
f = expand(H, exp)
@test mean(sample(f, 1000)) ≈ 1/(ℯ-1) atol=1E-1
end

@testset "minimum/maximum" begin
for H in (HeavisideSpline(range(0,1,1000)), LinearSpline(range(0,1,1000)))
f = expand(H, exp)
@test minimum(f) ≈ exp(first(grid(H)))
@test maximum(f) ≈ exp(last(grid(H)))
extrema(f) == [minimum(f), maximum(f)]
end
end
end
Loading