diff --git a/src/backends.jl b/src/backends.jl index 2bb885b..c0aa7e6 100644 --- a/src/backends.jl +++ b/src/backends.jl @@ -118,7 +118,7 @@ end function Base.show(io::IO, ::MIME"text/plain", observations::SageObs) A = observations.features y = observations.target - println(io, "SaffronObs") + println(io, "SageObs") println(io, " features :: $(typeof(A))($(size(A)))") println(io, " names: $(observations.names)") println(io, " target :: $(typeof(y))($(size(y)))") diff --git a/src/tarragon.jl b/src/tarragon.jl index 28ddf54..bca1abf 100644 --- a/src/tarragon.jl +++ b/src/tarragon.jl @@ -186,3 +186,9 @@ end # involutivity: obs(model, observations::BasicObs, ::Tarragon) = observations + +# data deconstructors: +LearnAPI.features(learner, observations::BasicObs, ::Tarragon) = + BasicObs(observations.features, observations.names) +LearnAPI.features(learner, data, frontend::Tarragon) = + LearnAPI.features(learner, obs(learner, data), frontend) diff --git a/test/backends.jl b/test/backends.jl new file mode 100644 index 0000000..d98ec93 --- /dev/null +++ b/test/backends.jl @@ -0,0 +1,25 @@ +using Test +using LearnDataFrontEnds +import CategoricalArrays + +@testset "show methods" begin + x = fill(0,2,3) + y = [3, 2, 1] + names = [:x1, :x2] + ycat = CategoricalArrays.categorical(y) + c = LearnDataFrontEnds.classes(ycat) + d = LearnDataFrontEnds.decoder(ycat) + mime = MIME"text/plain"() + + @test sprint(show, mime, LearnDataFrontEnds.BasicObs(x, names)) == + "BasicObs\n features :: Matrix{Int64}((2, 3))\n names: [:x1, :x2]\n" + @test sprint(show, mime, LearnDataFrontEnds.SaffronObs(x, names, y)) == + "SaffronObs\n features :: Matrix{Int64}((2, 3))\n names: "* + "[:x1, :x2]\n target :: Vector{Int64}((3,))" + @test sprint(show, mime, LearnDataFrontEnds.SageObs(x, names, y, c, d)) == + "SageObs\n features :: Matrix{Int64}((2, 3))\n names: "* + "[:x1, :x2]\n target :: Vector{Int64}((3,))\n classes_seen: "* + "[1, 2, 3] (categorical vector with complete pool)\n decoder: " +end + +true diff --git a/test/runtests.jl b/test/runtests.jl index cd8c5ef..410b165 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,6 +2,7 @@ using Test test_files = [ "tools.jl", + "backends.jl", "saffron.jl", "sage.jl", "tarragon.jl", diff --git a/test/tarragon.jl b/test/tarragon.jl index f9f6d03..277a9fd 100644 --- a/test/tarragon.jl +++ b/test/tarragon.jl @@ -111,6 +111,10 @@ LearnAPI.learner(model::TruncatedSVDFitted) = model.learner LearnAPI.obs(learner::TruncatedSVD, data) = fitobs(learner, data, Tarragon()) LearnAPI.obs(model::TruncatedSVDFitted, data) = obs(model, data, Tarragon()) +# training data deconstructor: +LearnAPI.features(learner::TruncatedSVD, data) = + LearnAPI.features(learner, data, Tarragon()) + function LearnAPI.fit(learner::TruncatedSVD, observations::Obs; verbosity=1) x = observations.features # p x n matrix @@ -198,6 +202,7 @@ model0 = fit(learner, X) @testset "matrix features for fit" begin observations = obs(learner, x) feats = LearnAPI.features(learner, observations) + @test LearnAPI.features(learner, x).features == feats.features @test feats isa Obs @test feats.features == x @test feats.names == [:x1, :x2, :x3, :x4, :x5]