Skip to content

Commit fb25c1f

Browse files
committed
multiplication by scalar
1 parent be3fe0e commit fb25c1f

2 files changed

Lines changed: 27 additions & 19 deletions

File tree

src/BuildCompTree.jl

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ Base.:+(FO1::FunOp, FO2::FunOp) = begin
1414
FunctionOperatorComposite(FO1, FO2, :+)
1515
end
1616

17-
Base.:+(FO1::FunOp, S::LinearAlgebra.UniformScaling) = begin
18-
assertAddDimScaling(FO1, S)
19-
FunctionOperatorComposite(FO1, createScalingForAddSub(FO1, S), :+)
17+
Base.:+(FO::FunOp, S::LinearAlgebra.UniformScaling) = begin
18+
assertAddDimScaling(FO, S)
19+
FunctionOperatorComposite(FO, createScalingForAddSub(FO, S), :+)
2020
end
2121

22-
Base.:+(S::LinearAlgebra.UniformScaling, FO2::FunOp) = begin
23-
assertAddDimScaling(FO2, S)
24-
FunctionOperatorComposite(createScalingForAddSub(FO2, S), FO2, :+)
22+
Base.:+(S::LinearAlgebra.UniformScaling, FO::FunOp) = begin
23+
assertAddDimScaling(FO, S)
24+
FunctionOperatorComposite(createScalingForAddSub(FO, S), FO, :+)
2525
end
2626

2727
Base.:-(FO1::FunOp, FO2::FunOp) = begin
@@ -30,14 +30,14 @@ Base.:-(FO1::FunOp, FO2::FunOp) = begin
3030
FunctionOperatorComposite(FO1, FO2, :-)
3131
end
3232

33-
Base.:-(FO1::FunOp, S::LinearAlgebra.UniformScaling) = begin
34-
assertAddDimScaling(FO1, S)
35-
FunctionOperatorComposite(FO1, createScalingForAddSub(FO1, S), :-)
33+
Base.:-(FO::FunOp, S::LinearAlgebra.UniformScaling) = begin
34+
assertAddDimScaling(FO, S)
35+
FunctionOperatorComposite(FO, createScalingForAddSub(FO, S), :-)
3636
end
3737

38-
Base.:-(S::LinearAlgebra.UniformScaling, FO2::FunOp) = begin
39-
assertAddDimScaling(FO2, S)
40-
FunctionOperatorComposite(createScalingForAddSub(FO2, S), FO2, :-)
38+
Base.:-(S::LinearAlgebra.UniformScaling, FO::FunOp) = begin
39+
assertAddDimScaling(FO, S)
40+
FunctionOperatorComposite(createScalingForAddSub(FO, S), FO, :-)
4141
end
4242

4343
Base.:*(FO1::FunOp, FO2::FunOp) = begin
@@ -52,17 +52,21 @@ Base.:*(FO::FunctionOperator, S::LinearAlgebra.UniformScaling{Bool}) =
5252
Base.:*(FO::FunctionOperatorComposite, S::LinearAlgebra.UniformScaling{Bool}) =
5353
FunctionOperatorComposite(FO, name = getName(FO) * " * I")
5454

55-
Base.:*(FO1::FunOp, S::LinearAlgebra.UniformScaling) =
56-
FunctionOperatorComposite(FO1, createScalingForMult(FO1, S, FO1.inDims), :*)
57-
5855
Base.:*(S::LinearAlgebra.UniformScaling{Bool}, FO::FunctionOperator) =
5956
FunctionOperator(FO, name = "I * " * getName(FO))
6057

6158
Base.:*(S::LinearAlgebra.UniformScaling{Bool}, FO::FunctionOperatorComposite) =
6259
FunctionOperatorComposite(FO, name = "I * " * getName(FO))
6360

64-
Base.:*(S::LinearAlgebra.UniformScaling, FO2::FunOp) =
65-
FunctionOperatorComposite(createScalingForMult(FO2, S, FO2.outDims), FO2, :*)
61+
Base.:*(FO::FunOp, S::LinearAlgebra.UniformScaling) =
62+
FunctionOperatorComposite(FO, createScalingForMult(FO, S, FO.inDims), :*)
63+
64+
Base.:*(S::LinearAlgebra.UniformScaling, FO::FunOp) =
65+
FunctionOperatorComposite(createScalingForMult(FO, S, FO.outDims), FO, :*)
66+
67+
Base.:*(FO::FunOp, λ::Number) = FO **I)
68+
69+
Base.:*::Number, FO::FunOp) =*I) * FO
6670

6771
# Adjoint operator creates a new FunctionOperatorComposite object, toggles the adjoint field and
6872
# switches the input and output dimension constraints (and also voids plan for FunctionOperatorComposite)

test/functionality.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ using FunctionOperators, LinearAlgebra, Test
3535
@test Op₁' * I * (ones(10,10)*8) == ones(10,10)*2
3636
@test I * Op₁ * (ones(10,10)*2) == ones(10,10)*8
3737
@test I * Op₁' * (ones(10,10)*8) == ones(10,10)*2
38+
@test Op₁ * 2 * (ones(10,10)*2) == ones(10,10)*64
39+
@test Op₁' * 2 * (ones(10,10)*4) == ones(10,10)*2
40+
@test 2 * Op₁ * (ones(10,10)*2) == ones(10,10)*16
41+
@test 2 * Op₁' * (ones(10,10)*8) == ones(10,10)*4
3842
@test Op₃ * Op₁ * (ones(10,10)*2) == ones(10,10)*8 .* w
3943
@test (Op₃ * Op₁)' * (ones(10,10)*8 .* w) == Op₁' * Op₃' * (ones(10,10)*8 .* w)
4044
@test (Op₃ * Op₁)' * (ones(10,10)*8 .* w) == ones(10,10)*2
@@ -62,9 +66,9 @@ using FunctionOperators, LinearAlgebra, Test
6266
manual_tests()
6367
end
6468
@testset "With automatic reshape" begin
65-
FO_settings.auto_reshape = true
69+
FunctionOperators_global_settings.auto_reshape = true
6670
manual_tests()
67-
FO_settings.auto_reshape = false
71+
FunctionOperators_global_settings.auto_reshape = false
6872
end
6973
end
7074
@testset "Adjoint of addition/substraction" begin

0 commit comments

Comments
 (0)