Skip to content

Commit 07ac8c9

Browse files
committed
Dispatch on Type instead of using Core.Typeof
1 parent 7f9884c commit 07ac8c9

File tree

4 files changed

+9
-7
lines changed

4 files changed

+9
-7
lines changed

src/inverse.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ An instance `NoInverse(f)` signifies that `inverse(f)` is not defined.
6262
"""
6363
struct NoInverse{F}
6464
f::F
65-
NoInverse{F}(f) where F = new{F}(f)
66-
NoInverse(f) = new{Core.Typeof(f)}(f)
6765
end
6866
export NoInverse
6967

68+
NoInverse(::Type{F}) where F = NoInverse{Type{F}}(F)
69+
7070
(f::NoInverse)(x) = error("inverse of ", f.f, " is not defined")
7171

7272
inverse(f) = NoInverse(f)

src/setinverse.jl

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ Do not construct directly, use [`setinverse(f, invf)`](@ref) instead.
1111
struct FunctionWithInverse{F,InvF} <: Function
1212
f::F
1313
invf::InvF
14-
FunctionWithInverse{F, InvF}(f, invf) where {F, InvF} = new{F, InvF}(f, invf)
15-
FunctionWithInverse(f, invf) = new{Core.Typeof(f),Core.Typeof(invf)}(f, invf)
1614
end
17-
15+
FunctionWithInverse(::Type{F}, invf::InvF) where {F,InvF} = FunctionWithInverse{Type{F},InvF}(F,invf)
16+
FunctionWithInverse(f::F, ::Type{InvF}) where {F,InvF} = FunctionWithInverse{F,Type{InvF}}(f,InvF)
17+
FunctionWithInverse(::Type{F}, ::Type{InvF}) where {F,InvF} = FunctionWithInverse{Type{F},Type{InvF}}(F,InvF)
1818

1919
(f::FunctionWithInverse)(x) = f.f(x)
2020

test/test_inverse.jl

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ InverseFunctions.inverse(f::Bar) = Bar(inv(f.A))
3838

3939
@test @inferred(inverse(Complex)) isa NoInverse{Type{Complex}}
4040
@test @inferred(NoInverse(Complex)) isa NoInverse{Type{Complex}}
41-
@test @inferred(NoInverse{Type{Complex}}(Complex)) isa NoInverse{Type{Complex}}
4241

4342
InverseFunctions.test_inverse(inverse, log, compare = ===)
4443

test/test_setinverse.jl

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ using InverseFunctions
77
@testset "setinverse" begin
88
@test @inferred(setinverse(Complex, Real)) isa InverseFunctions.FunctionWithInverse{Type{Complex},Type{Real}}
99
@test @inferred(InverseFunctions.FunctionWithInverse(Complex, Real)) isa InverseFunctions.FunctionWithInverse{Type{Complex},Type{Real}}
10-
@test @inferred(InverseFunctions.FunctionWithInverse{Type{Complex},Type{Real}}(Complex, Real)) isa InverseFunctions.FunctionWithInverse{Type{Complex},Type{Real}}
10+
@test @inferred(InverseFunctions.FunctionWithInverse(Real, identity)) isa InverseFunctions.FunctionWithInverse{Type{Real},typeof(identity)}
11+
@test @inferred(InverseFunctions.FunctionWithInverse(identity, Real)) isa InverseFunctions.FunctionWithInverse{typeof(identity),Type{Real}}
1112
InverseFunctions.test_inverse(setinverse(Complex, Real), 4.2)
13+
InverseFunctions.test_inverse(setinverse(Real, identity), 4.2)
14+
InverseFunctions.test_inverse(setinverse(identity, Real), 4.2)
1215

1316
@test @inferred(setinverse(sin, asin)) === InverseFunctions.FunctionWithInverse(sin, asin)
1417
@test @inferred(setinverse(sin, setinverse(asin, sqrt))) === InverseFunctions.FunctionWithInverse(sin, asin)

0 commit comments

Comments
 (0)