Skip to content

Commit 57b3093

Browse files
authored
Merge pull request #663 from JuliaDiff/ox/tkz
handling type-known empty containers in zero_tangent
2 parents f4731b7 + b4a0171 commit 57b3093

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/tangent_types/abstract_zero.jl

+5-1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ end
172172
function zero_tangent(::T) where {K,V,T<:AbstractDict{K,V}}
173173
return Tangent{T}(Dict{K,guess_zero_tangent_type(V)}())
174174
end
175+
if isdefined(Base, :Pairs)
176+
zero_tangent(::Base.Pairs{Symbol,Union{},Tuple{},@NamedTuple{}}) = NoTangent()
177+
end
175178

176179
# Sad heauristic methods we need because of unassigned values
177180
guess_zero_tangent_type(::Type{T}) where {T<:Number} = T
@@ -180,6 +183,7 @@ function guess_zero_tangent_type(::Type{<:Array{T,N}}) where {T,N}
180183
return Array{guess_zero_tangent_type(T),N}
181184
end
182185
guess_zero_tangent_type(T::Type) = Any
186+
guess_zero_tangent_type(::Type{Union{}}) = Union{} # This will only show up for empty containers
183187

184188
# Stuff that conceptually has its own identity regardless of structual implementation and doesn't have a tangent
185189
zero_tangent(::Base.AbstractLogger) = NoTangent()
@@ -190,4 +194,4 @@ zero_tangent(::Expr) = NoTangent()
190194
zero_tangent(::Core.Compiler.AbstractInterpreter) = NoTangent()
191195
zero_tangent(::Core.Compiler.InstructionStream) = NoTangent()
192196
zero_tangent(::Core.CodeInfo) = NoTangent()
193-
zero_tangent(::Core.MethodInstance) = NoTangent()
197+
zero_tangent(::Core.MethodInstance) = NoTangent()

0 commit comments

Comments
 (0)