Skip to content

Commit b3dfdc0

Browse files
committed
Add isinvertible trait
1 parent 196f6a1 commit b3dfdc0

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

src/identity.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ struct Identity <: Transform end
1111

1212
isrevertible(::Type{Identity}) = true
1313

14+
isinvertible(::Type{Identity}) = true
15+
16+
Base.inv(::Identity) = Identity()
17+
1418
apply(::Identity, object) = object, nothing
1519

1620
revert(::Identity, newobject, cache) = newobject

src/interface.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,27 @@ function assertions end
3030
3131
Tells whether or not the `transform` is revertible, i.e. supports a
3232
[`revert`](@ref) function. Defaults to `false` for new transform types.
33+
34+
Transforms can be revertible and yet don't be invertible. Invertibility
35+
is a mathematical concept, whereas revertibility is a computational concept.
36+
37+
See also [`isinvertible`](@ref).
3338
"""
3439
function isrevertible end
3540

41+
"""
42+
isinvertible(transform)
43+
44+
Tells whether or not the `transform` is invertible, i.e. supports a
45+
[`inv`](@ref) function. Defaults to `false` for new transform types.
46+
47+
Transforms can be invertible in the mathematical sense, i.e., there
48+
exists a one-to-one mapping between input and output spaces.
49+
50+
See also [`isrevertible`](@ref).
51+
"""
52+
function isinvertible end
53+
3654
"""
3755
prep = preprocess(transform, object)
3856
@@ -79,6 +97,10 @@ isrevertible(transform::Transform) =
7997
isrevertible(typeof(transform))
8098
isrevertible(::Type{<:Transform}) = false
8199

100+
isinvertible(transform::Transform) =
101+
isinvertible(typeof(transform))
102+
isinvertible(::Type{<:Transform}) = false
103+
82104
preprocess(transform::Transform, object) = nothing
83105

84106
(transform::Transform)(object) =

src/sequential.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ end
2525

2626
isrevertible(s::SequentialTransform) = all(isrevertible, s.transforms)
2727

28+
isinvertible(s::SequentialTransform) = all(isinvertible, s.transforms)
29+
2830
function apply(s::SequentialTransform, table)
2931
allcache = []
3032
current = table

test/runtests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ using TransformsBase
22
using Test
33

44
@testset "TransformsBase.jl" begin
5+
@test TransformsBase.isrevertible(Identity())
6+
@test TransformsBase.isinvertible(Identity())
7+
@test inv(Identity()) == Identity()
58
@test (Identity() Identity()) == Identity()
69
end

0 commit comments

Comments
 (0)