Skip to content

Commit 53ff7b2

Browse files
authored
[Nonlinear.SymbolicAD] simplify zero and one terms in simplify! (#3023)
1 parent 4924469 commit 53ff7b2

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/Nonlinear/SymbolicAD/SymbolicAD.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,14 @@ _iszero(x::Any)::Bool = _isnum(x) && iszero(x)
167167

168168
_isone(x::Any)::Bool = _isnum(x) && isone(x)
169169

170+
_iszero(x::MOI.ScalarAffineFunction) = iszero(x)
171+
172+
_isone(x::MOI.ScalarAffineFunction) = isone(x)
173+
174+
_iszero(x::MOI.ScalarQuadraticFunction) = iszero(x)
175+
176+
_isone(x::MOI.ScalarQuadraticFunction) = isone(x)
177+
170178
"""
171179
_isexpr(f::Any, head::Symbol[, n::Int])
172180

test/Nonlinear/test_SymbolicAD.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,36 @@ function test_simplify_if_quadratic()
755755
return
756756
end
757757

758+
function test_simplify_drops_zeros()
759+
x, y = MOI.VariableIndex.(1:2)
760+
f = MOI.ScalarNonlinearFunction(:/, Any[1.0*x*x, y])
761+
for F in (
762+
MOI.ScalarAffineFunction{Float64},
763+
MOI.ScalarQuadraticFunction{Float64},
764+
)
765+
g = MOI.ScalarNonlinearFunction(:+, Any[zero(F), f])
766+
@test isapprox(MOI.Nonlinear.SymbolicAD.simplify(g), f)
767+
g = MOI.ScalarNonlinearFunction(:+, Any[f, zero(F)])
768+
@test isapprox(MOI.Nonlinear.SymbolicAD.simplify(g), f)
769+
end
770+
return
771+
end
772+
773+
function test_simplify_drops_ones()
774+
x, y = MOI.VariableIndex.(1:2)
775+
f = MOI.ScalarNonlinearFunction(:/, Any[1.0*x*x, y])
776+
for F in (
777+
MOI.ScalarAffineFunction{Float64},
778+
MOI.ScalarQuadraticFunction{Float64},
779+
)
780+
g = MOI.ScalarNonlinearFunction(:*, Any[one(F), f])
781+
@test isapprox(MOI.Nonlinear.SymbolicAD.simplify(g), f)
782+
g = MOI.ScalarNonlinearFunction(:*, Any[f, one(F)])
783+
@test isapprox(MOI.Nonlinear.SymbolicAD.simplify(g), f)
784+
end
785+
return
786+
end
787+
758788
end # module
759789

760790
TestMathOptSymbolicAD.runtests()

0 commit comments

Comments
 (0)