@@ -21,6 +21,12 @@ function diff(arg::Variable, wrt::Variable)
2121 return Zero (unique (indices)... )
2222end
2323
24+ function diff (arg:: Literal , wrt:: Variable )
25+ indices = union (arg. indices, [flip (i) for i ∈ wrt. indices])
26+
27+ return Zero (unique (indices)... )
28+ end
29+
2430function diff (arg:: KrD , wrt:: Variable )
2531 indices = union (arg. indices, [flip (i) for i ∈ wrt. indices])
2632
@@ -69,7 +75,7 @@ function collect_factors(arg)
6975 return Value[arg]
7076end
7177
72- function evaluate (arg:: Union{Variable,KrD,Zero,Real} )
78+ function evaluate (arg:: Union{Variable,Literal, KrD,Zero,Real} )
7379 return arg
7480end
7581
@@ -123,7 +129,7 @@ function is_diag(arg1::KrD, arg2::KrD)
123129 return false
124130end
125131
126- function is_diag (arg:: Union{Variable,KrD,Zero} )
132+ function is_diag (arg:: Union{Variable,Literal, KrD,Zero} )
127133 return false
128134end
129135
@@ -143,11 +149,11 @@ function is_diag(arg1::Value, arg2::Value)
143149 return is_diag (arg1) || is_diag (arg2)
144150end
145151
146- function evaluate (:: Mult , arg1:: Variable , arg2:: BinaryOperation{Mult} )
152+ function evaluate (:: Mult , arg1:: Union{ Variable,Literal} , arg2:: BinaryOperation{Mult} )
147153 return evaluate (Mult (), arg2, arg1)
148154end
149155
150- function evaluate (:: Mult , arg1:: BinaryOperation{Mult} , arg2:: Variable )
156+ function evaluate (:: Mult , arg1:: BinaryOperation{Mult} , arg2:: Union{ Variable,Literal} )
151157 if arg1. arg1 isa Real
152158 return BinaryOperation {Mult} (arg1. arg1, BinaryOperation {Mult} (arg1. arg2, arg2))
153159 end
@@ -351,19 +357,19 @@ function evaluate(::Mult, arg1::Power, arg2::KrD)
351357 return BinaryOperation {Mult} (evaluate (arg1), evaluate (arg2))
352358end
353359
354- function evaluate (:: Mult , arg1:: Variable , arg2:: KrD )
360+ function evaluate (:: Mult , arg1:: Union{ Variable,Literal} , arg2:: KrD )
355361 return _multiply_with_krd (arg1, arg2)
356362end
357363
358- function evaluate (:: Mult , arg1:: KrD , arg2:: Variable )
364+ function evaluate (:: Mult , arg1:: KrD , arg2:: Union{ Variable,Literal} )
359365 return _multiply_with_krd (arg2, arg1)
360366end
361367
362368function evaluate (:: Mult , arg1:: KrD , arg2:: KrD )
363369 return _multiply_with_krd (arg1, arg2)
364370end
365371
366- function _multiply_with_krd (arg1:: Union{Variable,KrD} , arg2:: KrD )
372+ function _multiply_with_krd (arg1:: Union{Variable,Literal, KrD} , arg2:: KrD )
367373 arg1_indices = get_free_indices (arg1)
368374 contracting_index = eliminated_indices ([arg1_indices; get_indices (arg2)])
369375
405411function evaluate (
406412 :: Mult ,
407413 arg1:: BinaryOperation{Op} ,
408- arg2:: KrD ,
414+ arg2:: Union{Literal, KrD} ,
409415) where {Op<: AdditiveOperation }
410416 return evaluate (
411417 Op (),
416422
417423function evaluate (
418424 :: Mult ,
419- arg1:: KrD ,
425+ arg1:: Union{Literal, KrD} ,
420426 arg2:: BinaryOperation{Op} ,
421427) where {Op<: AdditiveOperation }
422428 return evaluate (
0 commit comments