Skip to content

Commit 1036d45

Browse files
authored
Implement complex for dual arguments (#90)
* Implement complex wrappers * Test complex implementations * Increment version number * Overload complex for types
1 parent 7848bf4 commit 1036d45

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "DualNumbers"
22
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
3-
version = "0.6.6"
3+
version = "0.6.7"
44

55
[deps]
66
Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"

src/dual.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ dual(x::ReComp, y::ReComp) = Dual(x, y)
3939
dual(x::ReComp) = Dual(x)
4040
dual(z::Dual) = z
4141

42+
function Base.complex(x::Dual, y::Dual)
43+
dual(complex(value(x), value(y)), complex(epsilon(x), epsilon(y)))
44+
end
45+
Base.complex(x::Real, y::Dual) = complex(dual(x), y)
46+
Base.complex(x::Dual, y::Real) = complex(x, dual(y))
47+
Base.complex(::Type{Dual{T}}) where {T} = Dual{complex(T)}
48+
4249
const realpart = value
4350
const dualpart = epsilon
4451

test/automatic_differentiation_test.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,14 @@ test(x, y) = x^2 + y
200200
@test epsilon(Dual(-2.0,1.0)^Dual(2.0,0.0)) == -4
201201

202202

203+
# test complex and dual mixing
204+
@test complex(dual(1, 2), dual(3, 4)) == dual(complex(1, 3), complex(2, 4))
205+
@test complex(1, dual(2, 3)) == dual(complex(1, 2), complex(0, 3))
206+
@test complex(dual(1, 2), 3) == dual(complex(1, 3), complex(2, 0))
207+
@test complex(dual(1, 2)) == dual(complex(1, 0), complex(2, 0))
208+
@test complex(Dual128) === DualComplex256
209+
@test complex(Dual64) === DualComplex128
210+
203211
# test for flipsign
204212
flipsign(Dual(1.0,1.0),2.0) == Dual(1.0,1.0)
205213
flipsign(Dual(1.0,1.0),-2.0) == Dual(-1.0,-1.0)

0 commit comments

Comments
 (0)