@@ -78,6 +78,10 @@ function evaluate(::Mult, arg1::BinaryOperation{Mult}, arg2::Real)
7878end
7979
8080function evaluate (:: Mult , arg1:: Real , arg2:: BinaryOperation{Mult} )
81+ if arg1 == 1
82+ return arg2
83+ end
84+
8185 if arg2. arg1 isa Real
8286 return BinaryOperation {Mult} (arg1 * arg2. arg1, arg2. arg2)
8387 elseif arg2. arg2 isa Real
@@ -140,6 +144,10 @@ function evaluate(::Mult, arg1::Monomial, arg2::BinaryOperation{Mult})
140144end
141145
142146function evaluate (:: Mult , arg1:: BinaryOperation{Mult} , arg2:: Monomial )
147+ if arg1. arg1 isa Real
148+ return BinaryOperation {Mult} (arg1. arg1, BinaryOperation {Mult} (arg1. arg2, arg2))
149+ end
150+
143151 is_elementwise = is_elementwise_multiplication (arg1. arg1, arg1. arg2)
144152 arg1_indices, arg2_indices = get_free_indices .((arg1, arg2))
145153
182190function evaluate (:: Mult , arg1:: BinaryOperation{Mult} , arg2:: BinaryOperation{Mult} )
183191 if arg1. arg1 == - 1 && arg2. arg1 == - 1
184192 return BinaryOperation {Mult} (arg1. arg2, arg2. arg2)
193+ elseif arg1. arg1 == - 1
194+ return BinaryOperation {Mult} (
195+ arg1. arg1,
196+ evaluate (BinaryOperation {Mult} (arg1. arg2, arg2)),
197+ )
198+ elseif arg2. arg1 == - 1
199+ return BinaryOperation {Mult} (
200+ arg2. arg1,
201+ evaluate (BinaryOperation {Mult} (arg2. arg2, arg1)),
202+ )
185203 end
186204
187205 new_args = []
0 commit comments