From d1ad2a1409ce6cea96cd304a540c485d2b393f5d Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Wed, 8 May 2019 08:26:04 -0500 Subject: [PATCH] Allow trailing 1s for gridded & scaled (fixes #301) (#318) --- src/gridded/indexing.jl | 10 +++++++++- src/scaling/scaling.jl | 6 ++++++ test/gridded/gridded.jl | 3 +++ test/scaling/scaling.jl | 3 +++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/gridded/indexing.jl b/src/gridded/indexing.jl index 77e1a3d5..68b38bf6 100644 --- a/src/gridded/indexing.jl +++ b/src/gridded/indexing.jl @@ -4,8 +4,16 @@ wis = weightedindexes((value_weights,), itpinfo(itp)..., x) coefficients(itp)[wis...] end +@propagate_inbounds function (itp::GriddedInterpolation{T,N})(x::Vararg{Number,M}) where {T,M,N} + inds, trailing = split_trailing(itp, x) + @boundscheck (check1(trailing) || Base.throw_boundserror(itp, x)) + @assert length(inds) == N + itp(inds...) +end @inline function (itp::GriddedInterpolation)(x::Vararg{UnexpandedIndexTypes}) - itp(to_indices(itp, x)...) + xis = to_indices(itp, x) + xis == x && error("evaluation not supported for GriddedInterpolation at positions $x") + itp(xis...) end @inline function gradient(itp::GriddedInterpolation{T,N}, x::Vararg{Number,N}) where {T,N} diff --git a/src/scaling/scaling.jl b/src/scaling/scaling.jl index 65cde39f..bccf3d44 100644 --- a/src/scaling/scaling.jl +++ b/src/scaling/scaling.jl @@ -67,6 +67,12 @@ ubound(ax::AbstractRange, ::DegreeBC, ::OnGrid) = last(ax) xl = maybe_clamp(sitp.itp, coordslookup(itpflag(sitp.itp), sitp.ranges, xs)) @inbounds sitp.itp(xl...) end +@propagate_inbounds function (itp::ScaledInterpolation{T,N})(x::Vararg{Number,M}) where {T,M,N} + inds, trailing = split_trailing(itp, x) + @boundscheck (check1(trailing) || Base.throw_boundserror(itp, x)) + @assert length(inds) == N + itp(inds...) +end @inline function (sitp::ScaledInterpolation)(x::Vararg{UnexpandedIndexTypes}) xis = to_indices(sitp, x) xis == x && error("evaluation not supported for ScaledInterpolation at positions $x") diff --git a/test/gridded/gridded.jl b/test/gridded/gridded.jl index 9e7beca0..23a69ac7 100644 --- a/test/gridded/gridded.jl +++ b/test/gridded/gridded.jl @@ -85,4 +85,7 @@ using Interpolations, Test @test itp(2) === 2.0f0 @test itp(2.0) === 2.0 @test itp(2.0f0) === 2.0f0 + + # trailing 1s, issue #301 + @test itp(1.8, 1) == itp(1.8) end diff --git a/test/scaling/scaling.jl b/test/scaling/scaling.jl index 13d93985..648e1e2f 100644 --- a/test/scaling/scaling.jl +++ b/test/scaling/scaling.jl @@ -14,6 +14,9 @@ using Test, LinearAlgebra, StaticArrays for (x,y) in zip(-3:.05:1.5, 1:.1:10,) @test sitp(x) ≈ y end + # trailing 1s, issue #301 + @test sitp(0.8, 1) == sitp(0.8) + @test_throws ArgumentError scale(itp, reverse(-3:.5:1.5))