diff --git a/Project.toml b/Project.toml index 85e4ca031..48b32f932 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ChainRulesCore" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.26.1" +version = "2.0.0" [deps] Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" diff --git a/docs/Project.toml b/docs/Project.toml index d7a3da37f..862a1e7dd 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -7,7 +7,7 @@ Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" [compat] -ChainRulesCore = "1" +ChainRulesCore = "2" Compat = "4" DocThemeIndigo = "0.1.3" Documenter = "1" diff --git a/src/tangent_types/abstract_zero.jl b/src/tangent_types/abstract_zero.jl index c5260489e..ba0dffa9b 100644 --- a/src/tangent_types/abstract_zero.jl +++ b/src/tangent_types/abstract_zero.jl @@ -17,7 +17,6 @@ Base.iterate(x::AbstractZero) = (x, nothing) Base.iterate(::AbstractZero, ::Any) = nothing Base.first(x::AbstractZero) = x -Base.tail(x::AbstractZero) = x Base.last(x::AbstractZero) = x Base.Broadcast.broadcastable(x::AbstractZero) = Ref(x) diff --git a/src/tangent_types/structural_tangent.jl b/src/tangent_types/structural_tangent.jl index 05d90144d..1cf8695ed 100644 --- a/src/tangent_types/structural_tangent.jl +++ b/src/tangent_types/structural_tangent.jl @@ -360,16 +360,6 @@ Base.iszero(::Tangent{<:,Tuple{}}) = true Base.first(tangent::Tangent{P,T}) where {P,T<:Union{Tuple,NamedTuple}} = first(backing(canonicalize(tangent))) Base.last(tangent::Tangent{P,T}) where {P,T<:Union{Tuple,NamedTuple}} = last(backing(canonicalize(tangent))) -Base.tail(t::Tangent{P}) where {P<:Tuple} = Tangent{_tailtype(P)}(Base.tail(backing(canonicalize(t)))...) -@generated _tailtype(::Type{P}) where {P<:Tuple} = Tuple{P.parameters[2:end]...} -Base.tail(t::Tangent{<:Tuple{Any}}) = NoTangent() -Base.tail(t::Tangent{<:Tuple{}}) = NoTangent() - -Base.tail(t::Tangent{P}) where {P<:NamedTuple} = Tangent{_tailtype(P)}(; Base.tail(backing(canonicalize(t)))...) -_tailtype(::Type{NamedTuple{S,P}}) where {S,P} = NamedTuple{Base.tail(S), _tailtype(P)} -Base.tail(t::Tangent{<:NamedTuple{<:Any, <:Tuple{Any}}}) = NoTangent() -Base.tail(t::Tangent{<:NamedTuple{<:Any, <:Tuple{}}}) = NoTangent() - function Base.getindex(tangent::Tangent{P,T}, idx::Int) where {P,T<:Union{Tuple,NamedTuple}} back = backing(canonicalize(tangent)) return unthunk(getfield(back, idx)) diff --git a/src/tangent_types/thunks.jl b/src/tangent_types/thunks.jl index 6f23ff782..14f92003c 100644 --- a/src/tangent_types/thunks.jl +++ b/src/tangent_types/thunks.jl @@ -30,7 +30,6 @@ end Base.first(x::AbstractThunk) = first(unthunk(x)) Base.last(x::AbstractThunk) = last(unthunk(x)) -Base.tail(x::AbstractThunk) = Base.tail(unthunk(x)) Base.:(==)(a::AbstractThunk, b::AbstractThunk) = unthunk(a) == unthunk(b) diff --git a/test/tangent_types/abstract_zero.jl b/test/tangent_types/abstract_zero.jl index 85a9e1d07..98c50cd1f 100644 --- a/test/tangent_types/abstract_zero.jl +++ b/test/tangent_types/abstract_zero.jl @@ -100,7 +100,6 @@ @test first(z) === z @test last(z) === z - @test Base.tail(z) === z end @testset "NoTangent" begin diff --git a/test/tangent_types/structural_tangent.jl b/test/tangent_types/structural_tangent.jl index 0972e1dce..dbf214ed9 100644 --- a/test/tangent_types/structural_tangent.jl +++ b/test/tangent_types/structural_tangent.jl @@ -84,15 +84,11 @@ end @test getindex(Tangent{Tuple{Float64}}(@thunk 2.0^2), 1) == 4.0 @test getproperty(Tangent{Tuple{Float64}}(2.0), 1) == 2.0 @test getproperty(Tangent{Tuple{Float64}}(@thunk 2.0^2), 1) == 4.0 - @test NoTangent() === @inferred Base.tail(tang1) - @test NoTangent() === @inferred Base.tail(Tangent{Tuple{}}()) tang3 = Tangent{Tuple{Float64, String, Vector{Float64}}}(1.0, NoTangent(), @thunk [3.0] .+ 4) @test @inferred(first(tang3)) === tang3[1] === 1.0 @test @inferred(last(tang3)) isa Thunk @test unthunk(last(tang3)) == [7.0] - @test Tuple(@inferred Base.tail(tang3))[1] === NoTangent() - @test Tuple(Base.tail(tang3))[end] isa Thunk NT = NamedTuple{(:a, :b),Tuple{Float64,Float64}} @test getindex(Tangent{NT}(; a=(@thunk 2.0^2)), :a) == 4.0 @@ -109,10 +105,6 @@ end @test unthunk(first(Tangent{NT}(; a=(@thunk 2.0^2)))) == 4.0 @test last(Tangent{NT}(; a=(@thunk 2.0^2))) isa ZeroTangent - ntang1 = @inferred Base.tail(Tangent{NT}(; b=(@thunk 2.0^2))) - @test ntang1 isa Tangent{<:NamedTuple{(:b,)}} - @test NoTangent() === @inferred Base.tail(ntang1) - # TODO: uncomment this once https://github.com/JuliaLang/julia/issues/35516 # if VERSION >= v"1.8-" # @test haskey(Tangent{Tuple{Float64}}(2.0), 1) == true diff --git a/test/tangent_types/thunks.jl b/test/tangent_types/thunks.jl index f9c5801fb..a5423c6c5 100644 --- a/test/tangent_types/thunks.jl +++ b/test/tangent_types/thunks.jl @@ -17,11 +17,9 @@ @test nothing === iterate(@thunk ()) == iterate(()) end - @testset "first, last, tail" begin + @testset "first, last" begin @test first(@thunk (1,2,3) .+ 4) === 5 @test last(@thunk (1,2,3) .+ 4) === 7 - @test Base.tail(@thunk (1,2,3) .+ 4) === (6, 7) - @test Base.tail(@thunk NoTangent() * 5) === NoTangent() end @testset "show" begin