Package evaluation of LearnTestAPI on Julia 1.11.4 (a71dd056e0*) started at 2025-04-08T15:58:08.295 ################################################################################ # Set-up # Installing PkgEval dependencies (TestEnv)... Set-up completed after 9.02s ################################################################################ # Installation # Installing LearnTestAPI... Resolving package versions... Updating `~/.julia/environments/v1.11/Project.toml` [3111ed91] + LearnTestAPI v0.2.3 Updating `~/.julia/environments/v1.11/Manifest.toml` [66dad0bd] + AliasTables v1.1.3 [324d7699] + CategoricalArrays v0.10.8 [af321ab8] + CategoricalDistributions v0.1.15 [3da002f7] + ColorTypes v0.12.1 [34da2185] + Compat v4.16.0 [a8cc5b0e] + Crayons v4.1.1 [9a962f9c] + DataAPI v1.16.0 [864edb3b] + DataStructures v0.18.22 [e2d170a0] + DataValueInterfaces v1.0.0 [31c24e10] + Distributions v0.25.118 [ffbed154] + DocStringExtensions v0.9.4 [1a297f60] + FillArrays v1.13.0 [53c48c17] + FixedPointNumbers v0.8.5 [34004b35] + HypergeometricFunctions v0.3.28 [92d709cd] + IrrationalConstants v0.2.4 [ceb4388c] + IsURL v0.2.0 [82899510] + IteratorInterfaceExtensions v1.0.0 [692b3bcd] + JLLWrappers v1.7.0 [b964fa9f] + LaTeXStrings v1.4.0 [92ad9a40] + LearnAPI v1.0.1 [5cca22a3] + LearnDataFrontEnds v0.1.1 [3111ed91] + LearnTestAPI v0.2.3 [2ab3a3ac] + LogExpFunctions v0.3.29 [c2834f40] + MLCore v1.0.0 [1914dd2f] + MacroTools v0.5.15 [e1d29d7a] + Missings v1.2.0 [bac558e1] + OrderedCollections v1.8.0 [90014a1f] + PDMats v0.11.33 ⌅ [aea7be01] + PrecompileTools v1.2.1 [21216c6a] + Preferences v1.4.3 [08abe8d2] + PrettyTables v2.4.0 [43287f4e] + PtrArrays v1.3.0 [1fd47b50] + QuadGK v2.11.2 [189a3867] + Reexport v1.2.2 [ae029012] + Requires v1.3.1 [79098fc4] + Rmath v0.8.0 [321657f4] + ScientificTypes v3.1.0 [30f210dd] + ScientificTypesBase v3.0.0 [1277b4bf] + ShiftedArrays v2.0.0 [699a6c99] + SimpleTraits v0.9.4 [a2af1166] + SortingAlgorithms v1.2.1 [276daf66] + SpecialFunctions v2.5.0 [860ef19b] + StableRNGs v1.0.2 [64bff920] + StatisticalTraits v3.4.0 [10745b16] + Statistics v1.11.1 [82ae8749] + StatsAPI v1.7.0 [2913bbd2] + StatsBase v0.34.4 [4c63d2b9] + StatsFuns v1.4.0 [3eaba693] + StatsModels v0.7.4 [892a3eda] + StringManipulation v0.4.1 [3783bdb8] + TableTraits v1.0.1 [bd369af6] + Tables v1.12.0 [3a884ed6] + UnPack v1.0.2 [efe28fd5] + OpenSpecFun_jll v0.5.6+0 [f50d1b31] + Rmath_jll v0.5.1+0 [56f22d72] + Artifacts v1.11.0 [2a0f44e3] + Base64 v1.11.0 [ade2ca70] + Dates v1.11.0 [9fa8497b] + Future v1.11.0 [b77e0a4c] + InteractiveUtils v1.11.0 [8f399da3] + Libdl v1.11.0 [37e2e46d] + LinearAlgebra v1.11.0 [56ddb016] + Logging v1.11.0 [d6f4376e] + Markdown v1.11.0 [de0858da] + Printf v1.11.0 [3fa0cd96] + REPL v1.11.0 [9a3f8284] + Random v1.11.0 [ea8e919c] + SHA v0.7.0 [9e88b42a] + Serialization v1.11.0 [6462fe0b] + Sockets v1.11.0 [2f01184e] + SparseArrays v1.11.0 [f489334b] + StyledStrings v1.11.0 [4607b0f0] + SuiteSparse [fa267f1f] + TOML v1.0.3 [8dfed614] + Test v1.11.0 [cf7118a7] + UUIDs v1.11.0 [4ec0a83e] + Unicode v1.11.0 [e66e0078] + CompilerSupportLibraries_jll v1.1.1+0 [4536629a] + OpenBLAS_jll v0.3.27+1 [05823500] + OpenLibm_jll v0.8.5+0 [bea87d4a] + SuiteSparse_jll v7.7.0+0 [8e850b90] + libblastrampoline_jll v5.11.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m` Installation completed after 4.41s ################################################################################ # Precompilation # Precompiling PkgEval dependencies... Precompiling package dependencies... Precompilation completed after 43.49s ################################################################################ # Testing # Testing LearnTestAPI Status `/tmp/jl_i0W5In/Project.toml` [324d7699] CategoricalArrays v0.10.8 [af321ab8] CategoricalDistributions v0.1.15 [a93c6f00] DataFrames v1.7.0 [31c24e10] Distributions v0.25.118 [ceb4388c] IsURL v0.2.0 [92ad9a40] LearnAPI v1.0.1 [5cca22a3] LearnDataFrontEnds v0.1.1 [3111ed91] LearnTestAPI v0.2.3 [c2834f40] MLCore v1.0.0 [1914dd2f] MacroTools v0.5.15 [321657f4] ScientificTypes v3.1.0 [30f210dd] ScientificTypesBase v3.0.0 [860ef19b] StableRNGs v1.0.2 [10745b16] Statistics v1.11.1 [3eaba693] StatsModels v0.7.4 [bd369af6] Tables v1.12.0 [3a884ed6] UnPack v1.0.2 [b77e0a4c] InteractiveUtils v1.11.0 [37e2e46d] LinearAlgebra v1.11.0 [9a3f8284] Random v1.11.0 [9e88b42a] Serialization v1.11.0 [8dfed614] Test v1.11.0 Status `/tmp/jl_i0W5In/Manifest.toml` [66dad0bd] AliasTables v1.1.3 [324d7699] CategoricalArrays v0.10.8 [af321ab8] CategoricalDistributions v0.1.15 [3da002f7] ColorTypes v0.12.1 [34da2185] Compat v4.16.0 [a8cc5b0e] Crayons v4.1.1 [9a962f9c] DataAPI v1.16.0 [a93c6f00] DataFrames v1.7.0 [864edb3b] DataStructures v0.18.22 [e2d170a0] DataValueInterfaces v1.0.0 [31c24e10] Distributions v0.25.118 [ffbed154] DocStringExtensions v0.9.4 [1a297f60] FillArrays v1.13.0 [53c48c17] FixedPointNumbers v0.8.5 [34004b35] HypergeometricFunctions v0.3.28 [842dd82b] InlineStrings v1.4.3 [41ab1584] InvertedIndices v1.3.1 [92d709cd] IrrationalConstants v0.2.4 [ceb4388c] IsURL v0.2.0 [82899510] IteratorInterfaceExtensions v1.0.0 [692b3bcd] JLLWrappers v1.7.0 [b964fa9f] LaTeXStrings v1.4.0 [92ad9a40] LearnAPI v1.0.1 [5cca22a3] LearnDataFrontEnds v0.1.1 [3111ed91] LearnTestAPI v0.2.3 [2ab3a3ac] LogExpFunctions v0.3.29 [c2834f40] MLCore v1.0.0 [1914dd2f] MacroTools v0.5.15 [e1d29d7a] Missings v1.2.0 [bac558e1] OrderedCollections v1.8.0 [90014a1f] PDMats v0.11.33 [2dfb63ee] PooledArrays v1.4.3 ⌅ [aea7be01] PrecompileTools v1.2.1 [21216c6a] Preferences v1.4.3 [08abe8d2] PrettyTables v2.4.0 [43287f4e] PtrArrays v1.3.0 [1fd47b50] QuadGK v2.11.2 [189a3867] Reexport v1.2.2 [ae029012] Requires v1.3.1 [79098fc4] Rmath v0.8.0 [321657f4] ScientificTypes v3.1.0 [30f210dd] ScientificTypesBase v3.0.0 [91c51154] SentinelArrays v1.4.8 [1277b4bf] ShiftedArrays v2.0.0 [699a6c99] SimpleTraits v0.9.4 [a2af1166] SortingAlgorithms v1.2.1 [276daf66] SpecialFunctions v2.5.0 [860ef19b] StableRNGs v1.0.2 [64bff920] StatisticalTraits v3.4.0 [10745b16] Statistics v1.11.1 [82ae8749] StatsAPI v1.7.0 [2913bbd2] StatsBase v0.34.4 [4c63d2b9] StatsFuns v1.4.0 [3eaba693] StatsModels v0.7.4 [892a3eda] StringManipulation v0.4.1 [3783bdb8] TableTraits v1.0.1 [bd369af6] Tables v1.12.0 [3a884ed6] UnPack v1.0.2 [efe28fd5] OpenSpecFun_jll v0.5.6+0 [f50d1b31] Rmath_jll v0.5.1+0 [56f22d72] Artifacts v1.11.0 [2a0f44e3] Base64 v1.11.0 [ade2ca70] Dates v1.11.0 [9fa8497b] Future v1.11.0 [b77e0a4c] InteractiveUtils v1.11.0 [8f399da3] Libdl v1.11.0 [37e2e46d] LinearAlgebra v1.11.0 [56ddb016] Logging v1.11.0 [d6f4376e] Markdown v1.11.0 [de0858da] Printf v1.11.0 [3fa0cd96] REPL v1.11.0 [9a3f8284] Random v1.11.0 [ea8e919c] SHA v0.7.0 [9e88b42a] Serialization v1.11.0 [6462fe0b] Sockets v1.11.0 [2f01184e] SparseArrays v1.11.0 [f489334b] StyledStrings v1.11.0 [4607b0f0] SuiteSparse [fa267f1f] TOML v1.0.3 [8dfed614] Test v1.11.0 [cf7118a7] UUIDs v1.11.0 [4ec0a83e] Unicode v1.11.0 [e66e0078] CompilerSupportLibraries_jll v1.1.1+0 [4536629a] OpenBLAS_jll v0.3.27+1 [05823500] OpenLibm_jll v0.8.5+0 [bea87d4a] SuiteSparse_jll v7.7.0+0 [8e850b90] libblastrampoline_jll v5.11.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. Testing Running tests... Test Summary: | Pass Total Time tools.jl | 3 3 9.7s Precompiling DataFrames... 81915.7 ms ✓ DataFrames 1 dependency successfully precompiled in 83 seconds. 32 already precompiled. [ Info: ------ running @testapi - selector - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` excludes `:(LearnAPI.features)`, as │ `LearnAPI.is_static(learner)` is `true`. └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ [ Info: @testapi - selector - dataset #1 ┌ Info: │ `LearnAPI.is_static(learner)` is `true`. Therefore attempting to call │ `fit(learner)`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `transform(model, X)`. └ ┌ Info: │ Testing that `transform(model, X)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Testing that `transform(model, X)` can be called using the deserialized version of │ `model` without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `transform(learner, X)` with `obs(model, X)` gives the │ same output. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `transform(model, X)` is unchanged by replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ The following traits, deemed optional for selector, have not been overloaded: │ │ `LearnAPI.pkg_name`, `LearnAPI.doc_url`, `LearnAPI.pkg_license` and `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - selector - tests complete ------ [ Info: ------ running @testapi - fancy selector - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` excludes `:(LearnAPI.features)`, as │ `LearnAPI.is_static(learner)` is `true`. └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ [ Info: @testapi - fancy selector - dataset #1 ┌ Info: │ `LearnAPI.is_static(learner)` is `true`. Therefore attempting to call │ `fit(learner)`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `transform(model, X)`. └ ┌ Info: │ Testing that `transform(model, X)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Testing that `transform(model, X)` can be called using the deserialized version of │ `model` without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `transform(learner, X)` with `obs(model, X)` gives the │ same output. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `transform(model, X)` is unchanged by replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ The following traits, deemed optional for fancy selector, have not been overloaded: │ │ `LearnAPI.pkg_name`, `LearnAPI.doc_url`, `LearnAPI.pkg_license` and `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - fancy selector - tests complete ------ Test Summary: | Pass Total Time learners/static_algorithms.jl | 44 44 1m57.0s [ Info: ------ running @testapi - ridge regression - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:(LearnAPI.features).` └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ ┌ Info: │ Testing that `LearnAPI.kinds_of_proxy(learner)` is overloaded and has valid form. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/kinds_of_target_proxy/). List │ allowed kinds of proxy with `LearnAPI.kinds_of_proxy()`. └ [ Info: @testapi - ridge regression - dataset #1 ┌ Info: │ Attempting to call `fit(learner, data)`. If you implemented `fit(learner)` instead, │ then you need to arrange `LearnAPI.is_static(learner) == true`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, observations)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `predict(model, kind, X)` for each `kind` in │ `LearnAPI.kinds_of_proxy(learner)`. Here `X = LearnAPI.features(obs(learner, data))`. └ ┌ Info: │ Checking that `predict(model, ...)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Checking that `predict(model, X)` can be called on the deserialized version of `model` │ without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `predict(learner, kind, X)` with `obs(model, X)` gives │ the same output, for each supported `kind` of proxy. └ ┌ Info: │ Testing that `obs(learner, obs(learner, data)) == obs(learner, data)` (involutivity). └ ┌ Info: │ Testing that replacing `data` with `obs(learner, data)` in the call `fit(learner, │ data)` makes no difference to `predict`, `transform` or `inverse_transform` outcomes │ (where implemented). └ ┌ Info: │ Testing that we can select all observations from `_data = LearnAPI.obs(learner, │ data)`, using the interface declared by `LearnAPI.data_interface(learner)`. For │ example, if this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `data3 = MLCore.getobs(_data, 1:MLCore.numobs(_data))`. For this interface, also │ testing that we can call `fit` on the selection, obtaining a new `fit` result │ `model3`. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `predict(model, X)` is unchanged by replacing `model` with `model3` │ (trained on "subsampled" `fit` data) and/or replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `model3` and `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, data)` (fallback returns │ `last(data)`). └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, observations)` (fallback returns │ `last(observations)`). └ ┌ Info: │ Checking that all observations can be extracted from `LearnAPI.target(learner, data)` │ using the data interface declared by `LearnAPI.data_interface(learner)`. Doing the │ same with `data` replaced with `observations`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Checking `LearnAPI.feature_importances(model)` has the correct form, and that the │ feature names match those returned by `LearnAPI.feature_names(model)`, if the │ latter is implemented. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.target(learner, observatoins)` satisfies the constraints │ articulated by `LearnAPI.target_observation_scitype(learner)`. └ ┌ Info: │ The following traits, deemed optional for ridge regression, have not been overloaded: │ │ `LearnAPI.pkg_name`, `LearnAPI.doc_url`, `LearnAPI.pkg_license` and `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - ridge regression - tests complete ------ [ Info: running @testapi - baby ridge - specify `verbosity=1` if debugging Test Summary: | Pass Total Time learners/regression.jl | 74 74 25.0s [ Info: ------ running @testapi - constant classifier - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:(LearnAPI.features).` └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ ┌ Info: │ Testing that `LearnAPI.kinds_of_proxy(learner)` is overloaded and has valid form. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/kinds_of_target_proxy/). List │ allowed kinds of proxy with `LearnAPI.kinds_of_proxy()`. └ [ Info: @testapi - constant classifier - dataset #1 ┌ Info: │ Attempting to call `fit(learner, data)`. If you implemented `fit(learner)` instead, │ then you need to arrange `LearnAPI.is_static(learner) == true`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, observations)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `predict(model, kind, X)` for each `kind` in │ `LearnAPI.kinds_of_proxy(learner)`. Here `X = LearnAPI.features(obs(learner, data))`. └ ┌ Info: │ Checking that `predict(model, ...)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Checking that `predict(model, X)` can be called on the deserialized version of `model` │ without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `predict(learner, kind, X)` with `obs(model, X)` gives │ the same output, for each supported `kind` of proxy. └ ┌ Info: │ Testing that `obs(learner, obs(learner, data)) == obs(learner, data)` (involutivity). └ ┌ Info: │ Testing that replacing `data` with `obs(learner, data)` in the call `fit(learner, │ data)` makes no difference to `predict`, `transform` or `inverse_transform` outcomes │ (where implemented). └ ┌ Info: │ Testing that we can select all observations from `_data = LearnAPI.obs(learner, │ data)`, using the interface declared by `LearnAPI.data_interface(learner)`. For │ example, if this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `data3 = MLCore.getobs(_data, 1:MLCore.numobs(_data))`. For this interface, also │ testing that we can call `fit` on the selection, obtaining a new `fit` result │ `model3`. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `predict(model, X)` is unchanged by replacing `model` with `model3` │ (trained on "subsampled" `fit` data) and/or replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `model3` and `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, data)` (fallback returns │ `last(data)`). └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, observations)` (fallback returns │ `last(observations)`). └ ┌ Info: │ Checking that all observations can be extracted from `LearnAPI.target(learner, data)` │ using the data interface declared by `LearnAPI.data_interface(learner)`. Doing the │ same with `data` replaced with `observations`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.target(learner, observatoins)` satisfies the constraints │ articulated by `LearnAPI.target_observation_scitype(learner)`. └ ┌ Info: │ The following traits, deemed optional for constant classifier, have not been overloaded: │ │ `LearnAPI.pkg_name`, `LearnAPI.doc_url`, `LearnAPI.pkg_license` and `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - constant classifier - tests complete ------ [ Info: running @testapi - constant classifier - specify `verbosity=1` if debugging Test Summary: | Pass Total Time learners/classification.jl | 158 158 1m02.3s [ Info: ------ running @testapi - ensemble - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:(LearnAPI.features).` └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ ┌ Info: │ Testing that `LearnAPI.kinds_of_proxy(learner)` is overloaded and has valid form. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/kinds_of_target_proxy/). List │ allowed kinds of proxy with `LearnAPI.kinds_of_proxy()`. └ [ Info: @testapi - ensemble - dataset #1 ┌ Info: │ Attempting to call `fit(learner, data)`. If you implemented `fit(learner)` instead, │ then you need to arrange `LearnAPI.is_static(learner) == true`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, observations)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `predict(model, kind, X)` for each `kind` in │ `LearnAPI.kinds_of_proxy(learner)`. Here `X = LearnAPI.features(obs(learner, data))`. └ ┌ Info: │ Checking that `predict(model, ...)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Checking that `predict(model, X)` can be called on the deserialized version of `model` │ without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `predict(learner, kind, X)` with `obs(model, X)` gives │ the same output, for each supported `kind` of proxy. └ ┌ Info: │ Testing that `obs(learner, obs(learner, data)) == obs(learner, data)` (involutivity). └ ┌ Info: │ Testing that replacing `data` with `obs(learner, data)` in the call `fit(learner, │ data)` makes no difference to `predict`, `transform` or `inverse_transform` outcomes │ (where implemented). └ ┌ Info: │ Testing that we can select all observations from `_data = LearnAPI.obs(learner, │ data)`, using the interface declared by `LearnAPI.data_interface(learner)`. For │ example, if this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `data3 = MLCore.getobs(_data, 1:MLCore.numobs(_data))`. For this interface, also │ testing that we can call `fit` on the selection, obtaining a new `fit` result │ `model3`. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `predict(model, X)` is unchanged by replacing `model` with `model3` │ (trained on "subsampled" `fit` data) and/or replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `model3` and `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, data)` (fallback returns │ `last(data)`). └ ┌ Info: │ Attempting to call `LearnAPI.target(learner, observations)` (fallback returns │ `last(observations)`). └ ┌ Info: │ Checking that all observations can be extracted from `LearnAPI.target(learner, data)` │ using the data interface declared by `LearnAPI.data_interface(learner)`. Doing the │ same with `data` replaced with `observations`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Calling `LearnAPI.update(model, data; verbosity=0)`. └ ┌ Info: │ Attempting to increase number of iterations by one with an `update` call, giving a new │ model `newmodel`. Checking that `LearnAPI.learner(newmodel)` reflects the iteration │ update. Checking that retraining from scratch with the extra iteration gives, │ approximately, the same predictions/transformations. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.target(learner, observatoins)` satisfies the constraints │ articulated by `LearnAPI.target_observation_scitype(learner)`. └ ┌ Info: │ The following traits, deemed optional for ensemble, have not been overloaded: │ │ `LearnAPI.pkg_name`, `LearnAPI.doc_url`, `LearnAPI.pkg_license` and `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - ensemble - tests complete ------ [ Info: running @testapi - stump regressor - specify `verbosity=1` if debugging Test Summary: | Pass Total Time learners/ensembling.jl | 70 70 18.7s [ Info: running @testapi - normal distribution estimator - specify `verbosity=1` if debugging Test Summary: | Pass Total Time learners/incremental_algorithms.jl | 30 30 3.4s [ Info: ------ running @testapi - truncated svd - specify `verbosity=0` for silent testing. ------ ┌ Info: │ Testing that learner can be reconstructed from its constructors. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing all elements of `LearnAPI.nonlearners(learner)` are indeed non-learners, and │ that all elements of `LearnAPI.learners(learner)` are learners. │ [Reference](https://juliaai.github.io/LearnAPI.jl/dev/reference/#learners). └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:LearnAPI.fit`, `:LearnAPI.learner`, `:LearnAPI.clone`, `:LearnAPI.strip` and `:LearnAPI.obs`. └ ┌ Info: │ Testing that `LearnAPI.functions(learner)` includes `:(LearnAPI.features).` └ ┌ Info: │ Testing that `LearnAPI.tags(learner)` has correct form. List allowed tags with │ `LearnAPII.tags()`. └ [ Info: @testapi - truncated svd - dataset #1 ┌ Info: │ Attempting to call `fit(learner, data)`. If you implemented `fit(learner)` instead, │ then you need to arrange `LearnAPI.is_static(learner) == true`. └ ┌ Info: │ Attempting to call `LearnAPI.strip(model)` and to check that applying │ `LearnAPI.learner` to the result or to `model` returns `learner` in both cases. └ ┌ Info: │ Checking for overloaded LearnAPI.jl functions missing from the return value of │ `LearnAPI.functions(learner)`. Run `??LearnAPI.functions` for a │ checklist. └ ┌ Info: │ Attempting to call `observations = obs(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, data)`. └ ┌ Info: │ Attempting to call `LearnAPI.features(learner, observations)`. └ ┌ Info: │ Testing that `obs(model, obs(model, data)) == obs(model, data)` (involutivity). └ ┌ Info: │ Checking that `LearnAPI.strip(model)` can be Julia-serialized/deserialized. └ ┌ Info: │ Attempting to call `transform(model, X)`. └ ┌ Info: │ Testing that `transform(model, X)` gives the same answer if we replace `model` with │ `LearnAPI.strip(model)`. └ ┌ Info: │ Testing that `transform(model, X)` can be called using the deserialized version of │ `model` without a change in return value. └ ┌ Info: │ Testing that replacing `X` in `transform(learner, X)` with `obs(model, X)` gives the │ same output. └ ┌ Info: │ Testing that `inverse_transform(model, W)` executes, where `W` is the output of │ `transform(model, X)` and `X = LearnAPI.features(learner, observations)`. └ ┌ Info: │ Testing that `inverse_transform(model, X)` gives the same answer if we replace │ `model` with `LearnAPI.strip(model)`. └ ┌ Info: │ Testing that `inverse_transform(model, X)` can be called using the deserialized │ version of `model` without a change in return value. └ ┌ Info: │ Testing that `obs(learner, obs(learner, data)) == obs(learner, data)` (involutivity). └ ┌ Info: │ Testing that replacing `data` with `obs(learner, data)` in the call `fit(learner, │ data)` makes no difference to `predict`, `transform` or `inverse_transform` outcomes │ (where implemented). └ ┌ Info: │ Testing that we can select all observations from `_data = LearnAPI.obs(learner, │ data)`, using the interface declared by `LearnAPI.data_interface(learner)`. For │ example, if this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `data3 = MLCore.getobs(_data, 1:MLCore.numobs(_data))`. For this interface, also │ testing that we can call `fit` on the selection, obtaining a new `fit` result │ `model3`. └ ┌ Info: │ Testing that we can select all observations from `_X = LearnAPI.obs(model, X)`, │ using the interface declared by `LearnAPI.data_interface(learner)`. For example, if │ this interface is `LearnAPI.RandomAccess()`, the attempted selection is │ `X3 = MLCore.getobs(_X, 1:MLCore.numobs(_X))`. └ ┌ Info: │ Testing that `transform(model, X)` is unchanged by replacing `model` with `model3` │ (trained on "subsampled" `fit` data) and/or replacing `X` with `X3` │ ("subsampled" features). If not described in the log, re-run `@testapi` with │ `verbosity=1` for further explanation of `model3` and `X3`. └ ┌ Info: │ Attempting to call `LearnAPI.weights(learner, observations)` (fallback returns │ `nothing`). └ ┌ Info: │ Checking that `:(LearnAPI.weights)` is excluded from `LearnAPI.functions(learner)`, as │ `LearnAPI.weights` has not been overloaded. └ ┌ Info: │ Checking that `LearnAPI.pkg_name(learner)` is a string not including ".jl". └ ┌ Info: │ Checking that `LearnAPI.pkg_license(learner)` is a string. └ ┌ Info: │ Checking that `LearnAPI.doc_url(learner)`, if overloaded, is a syntactically valid │ URL. Its reachability is *not* checked. └ ┌ Info: │ Checking `path = LearnAPI.load_path(learner)`, if overloaded, is a string. If │ `LearnAPI.pkg_name(learner)` is overloaded, checking this is the first part of `path`. │ Checking `:(import $path)` can be evaluated. └ ┌ Info: │ Checking that `LearnAPI.human_name(learner)` is a string. └ ┌ Info: │ The following traits, deemed optional for truncated svd, have not been overloaded: │ │ `LearnAPI.fit_scitype`. └ [ Info: ------ @testapi - truncated svd - tests complete ------ Test Summary: | Pass Total Time learners/dimension_reduction.jl | 33 33 13.0s Testing LearnTestAPI tests passed Testing completed after 256.19s PkgEval succeeded after 339.04s