Skip to content

Commit 98c3baa

Browse files
authored
Merge pull request #29 from alan-turing-institute/isrepresented
Add isrepresented method (version of `in` for MLJTypes)
2 parents f1a4c67 + ed24eed commit 98c3baa

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/MLJModelInterface.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export matrix, int, classes, decoder, table,
3838
nrows, selectrows, selectcols, select
3939

4040
# equality
41-
export is_same_except
41+
export is_same_except, isrepresented
4242

4343
# re-exports from ScientificTypes
4444
export Scientific, Found, Unknown, Known, Finite, Infinite,

src/equality.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,24 @@ end
6161
Base.in(x::MLJType, itr::Set) = special_in(x, itr)
6262
Base.in(x::MLJType, itr::AbstractVector) = special_in(x, itr)
6363
Base.in(x::MLJType, itr::Tuple) = special_in(x, itr)
64+
65+
# A version of `in` that actually uses `==`:
66+
67+
"""
68+
isrepresented(object::MLJType, objects)
69+
70+
Test if `object` has a representative in the iterable
71+
`objects`. This is a weaker requirement than `object in objects`.
72+
73+
Here we say `m1` *respresents* `m2` if `is_same_except(m1, m2)` is
74+
`true`.
75+
76+
"""
77+
isrepresented(object::MLJType, ::Nothing) = false
78+
function isrepresented(object::MLJType, itr)::Union{Bool,Missing}
79+
for m in itr
80+
ismissing(m) && return missing
81+
is_same_except(m, object) && return true
82+
end
83+
return false
84+
end

test/equality.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,17 @@ end
8484

8585
end
8686

87+
@testset "isrepresented" begin
88+
m = Foo(MersenneTwister(7), 1, 2)
89+
m2 = Foo(MersenneTwister(8), 1, 2)
90+
n = Foo(MersenneTwister(7), 3, 2)
91+
p = Foo(MersenneTwister(9), 4, 5)
92+
models = [m, n]
93+
94+
@test isrepresented(m, nothing) == false
95+
@test isrepresented(m, models)
96+
@test isrepresented(m2, models)
97+
@test !isrepresented(p, models)
98+
end
99+
87100
true

0 commit comments

Comments
 (0)