diff --git a/Project.toml b/Project.toml index acf3e459b..e893e2fbd 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Symbolics" uuid = "0c5d862f-8b57-4792-8d23-62f2024744c7" authors = ["Shashi Gowda "] -version = "6.3.0" +version = "6.4.0" [deps] ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" @@ -68,7 +68,7 @@ DiffRules = "1.4" Distributions = "0.25" DocStringExtensions = "0.9" DomainSets = "0.6, 0.7" -DynamicPolynomials = "0.6" +DynamicPolynomials = "0.5, 0.6" ForwardDiff = "0.10.36" Groebner = "0.5, 0.6, 0.7" IfElse = "0.1" diff --git a/ext/SymbolicsForwardDiffExt.jl b/ext/SymbolicsForwardDiffExt.jl index 480fc83f5..9882bec12 100644 --- a/ext/SymbolicsForwardDiffExt.jl +++ b/ext/SymbolicsForwardDiffExt.jl @@ -103,6 +103,25 @@ function binary_dual_definition(M, f, Ts) return expr end +##################### +# Generic Functions # +##################### + +# Predicates # +#------------# + +for pred in [:isequal, :(==)] + @eval begin + @define_binary_dual_op( + Base.$(pred), + $(pred)(value(x), value(y)) && $(pred)(partials(x), partials(y)), + $(pred)(value(x), y) && iszero(partials(x)), + $(pred)(x, value(y)) && iszero(partials(y)), + $AMBIGUOUS_TYPES + ) + end +end + ################################### # General Mathematical Operations # ################################### diff --git a/test/forwarddiff_symbolic_dual_ops.jl b/test/forwarddiff_symbolic_dual_ops.jl index 1b89c79e6..e132f9a50 100644 --- a/test/forwarddiff_symbolic_dual_ops.jl +++ b/test/forwarddiff_symbolic_dual_ops.jl @@ -107,3 +107,10 @@ for f ∈ (hypot, muladd) end # fma is not defined for Symbolics.Num + +# https://github.com/JuliaSymbolics/Symbolics.jl/issues/1246 +@testset "isequal type ambiguity" begin + @variables z + y(x) = isequal(z, x) ? 0 : x + @test ForwardDiff.derivative(y, 0) == 1 # expect ∂(x)/∂x +end diff --git a/test/utils.jl b/test/utils.jl index c601f653b..5121a0300 100644 --- a/test/utils.jl +++ b/test/utils.jl @@ -23,9 +23,9 @@ end @testset "symbolic_to_float" begin @variables x - symbolic_to_float((1//2 * x)/x) isa Float64 - symbolic_to_float((1/2 * x)/x) isa Float64 - symbolic_to_float((1//2)*√(279//4)) isa Float64 - symbolic_to_float((big(1)//2)*√(279//4)) isa BigFloat - symbolic_to_float((-1//2)*√(279//4)) isa Float64 + @test symbolic_to_float((1//2 * x)/x) isa Rational{Int} + @test symbolic_to_float((1/2 * x)/x) isa Float64 + @test symbolic_to_float((1//2)*√(279//4)) isa Float64 + @test symbolic_to_float((big(1)//2)*√(279//4)) isa BigFloat + @test symbolic_to_float((-1//2)*√(279//4)) isa Float64 end