@@ -49,7 +49,7 @@ function diff(arg::UnaryOperation{Cos}, wrt::Variable)
4949 return BinaryOperation {Mult} (- UnaryOperation {Sin} (arg. arg), diff (arg. arg, wrt))
5050end
5151
52- function diff (arg:: Log , wrt:: Variable )
52+ function diff (arg:: UnaryOperation{ Log} , wrt:: Variable )
5353 return BinaryOperation {Mult} (
5454 BinaryOperation {Div} (Literal (1 , get_free_indices (arg)... ), arg. arg),
5555 diff (arg. arg, wrt),
@@ -413,20 +413,12 @@ function evaluate(::Mult, arg1::Zero, arg2::KrD)
413413 return Zero (free_indices... )
414414end
415415
416- function evaluate (:: Mult , arg1:: UnaryOperation , arg2:: KrD )
416+ function evaluate (:: Mult , arg1:: KrD , arg2:: UnaryOperation )
417417 return evaluate (Mult (), arg2, arg1)
418418end
419419
420- function evaluate (:: Mult , arg1:: KrD , arg2:: UnaryOp ) where {UnaryOp<: UnaryOperation }
421- if can_contract (evaluate (arg1), evaluate (arg2. arg))
422- return UnaryOp (evaluate (Mult (), evaluate (arg1), evaluate (arg2. arg)))
423- end
424-
425- return BinaryOperation {Mult} (evaluate (arg2), evaluate (arg1))
426- end
427-
428- function evaluate (:: Mult , arg1:: Log , arg2:: KrD )
429- attempt = Log (evaluate (Mult (), evaluate (arg1. arg), evaluate (arg2)))
420+ function evaluate (:: Mult , arg1:: UnaryOperation{Op} , arg2:: KrD ) where {Op}
421+ attempt = UnaryOperation {Op} (evaluate (Mult (), evaluate (arg1. arg), evaluate (arg2)))
430422
431423 # This ensures that arg1.base and arg2 can contract and that the contraction is simple
432424 if length (get_free_indices (attempt)) == length (get_free_indices (arg1))
@@ -941,10 +933,6 @@ function _sub_from_product(arg1::BinaryOperation{Mult}, arg2::Value)
941933 return BinaryOperation {Sub} (evaluate (arg1), evaluate (arg2))
942934end
943935
944- function evaluate (op:: Log )
945- return Log (evaluate (op. arg))
946- end
947-
948936function evaluate (op:: Power )
949937 if op. exponent == 1
950938 return evaluate (op. base)
0 commit comments