Skip to content

Commit 4e2f098

Browse files
authored
Simplify Testing and Deps (#41)
* Remove old code * Remove unnecessary deps * Bump patch version * Test on lts and 1 * Update workflow * Formatting * Actions upgrade
1 parent bb9df91 commit 4e2f098

File tree

7 files changed

+26
-146
lines changed

7 files changed

+26
-146
lines changed

.github/workflows/CI.yml

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
matrix:
1717
version:
1818
- '1'
19-
- '1.6'
19+
- 'lts'
2020
os:
2121
- ubuntu-latest
2222
arch:
@@ -27,29 +27,18 @@ jobs:
2727
arch: x64
2828
coverage: true
2929
steps:
30-
- uses: actions/checkout@v2
31-
- uses: julia-actions/setup-julia@v1
30+
- uses: actions/checkout@v4
31+
- uses: julia-actions/setup-julia@v2
3232
with:
3333
version: ${{ matrix.version }}
3434
arch: ${{ matrix.arch }}
35-
- uses: actions/cache@v1
36-
env:
37-
cache-name: cache-artifacts
38-
with:
39-
path: ~/.julia/artifacts
40-
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }}
41-
restore-keys: |
42-
${{ runner.os }}-test-${{ env.cache-name }}-
43-
${{ runner.os }}-test-
44-
${{ runner.os }}-
35+
include-all-prereleases: false
36+
- uses: julia-actions/cache@v2
4537
- uses: julia-actions/julia-buildpkg@v1
4638
- uses: julia-actions/julia-runtest@v1
47-
with:
48-
coverage: ${{ matrix.coverage || false }}
4939
- uses: julia-actions/julia-processcoverage@v1
50-
if: matrix.coverage
51-
- name: Send coverage
52-
if: matrix.coverage
53-
uses: codecov/codecov-action@v2
40+
- uses: codecov/codecov-action@v5
5441
with:
55-
file: lcov.info
42+
files: lcov.info
43+
token: ${{ secrets.CODECOV_TOKEN }}
44+
fail_ci_if_error: false

Project.toml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "BayesianLinearRegressors"
22
uuid = "f579363c-4606-5e5c-a623-c4549f609c4b"
3-
authors = ["Will Tebbutt <[email protected]>"]
4-
version = "0.3.8"
3+
authors = ["Will Tebbutt"]
4+
version = "0.3.9"
55

66
[deps]
77
AbstractGPs = "99985d1d-32ba-4be9-9821-2ec096f28918"
@@ -11,6 +11,14 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1111
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1212

1313
[compat]
14-
AbstractGPs = "0.3, 0.4, 0.5"
14+
AbstractGPs = "0.5"
15+
LinearAlgebra = "1"
1516
PDMats = "0.11"
16-
julia = "1.3"
17+
Test = "1"
18+
julia = "1.10"
19+
20+
[extras]
21+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
22+
23+
[targets]
24+
test = ["Test"]

src/BayesianLinearRegressors.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
module BayesianLinearRegressors
22

3-
using AbstractGPs
4-
using LinearAlgebra
5-
using Random
6-
using Statistics
7-
using PDMats
3+
using AbstractGPs, LinearAlgebra, PDMats, Random
84

95
using AbstractGPs: AbstractGP, _cholesky, FiniteGP
106

test/Project.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

test/bayesian_linear_regression.jl

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,13 @@
1818
Σ_empirical = (Y .- mean(Y; dims=2)) * (Y .- mean(Y; dims=2))' ./ samples
1919
@test mean(f(X, Σy)) m_empirical atol = 1e-2 rtol = 1e-2
2020
@test cov(f(X, Σy)) Σ_empirical atol = 1e-2 rtol = 1e-2
21-
22-
@testset "Zygote (everything dense)" begin
23-
function rand_blr(X, A_Σy, mw, A_Λw)
24-
Σy, Λw = Symmetric(A_Σy * A_Σy' + I), Symmetric(A_Λw * A_Λw' + I)
25-
f = BayesianLinearRegressor(mw, Λw)
26-
return rand(MersenneTwister(123456), f(X, Σy), 3)
27-
end
28-
mw, A_Σy, A_Λw = f.mw, 0.1 .* randn(rng, N, N), 0.1 .* randn(rng, D, D)
29-
30-
# Run the model forwards and check that output agrees with non-Zygote output
31-
z, back = Zygote.pullback(rand_blr, X, A_Σy, mw, A_Λw)
32-
@test z == rand_blr(X, A_Σy, mw, A_Λw)
33-
34-
# Compute adjoints using Zygote.
35-
= randn(rng, size(z))
36-
dX, dA_Σy, dmw, dA_Λw = back(z̄)
37-
38-
# Verify adjoints via finite differencing.
39-
fdm = central_fdm(5, 1)
40-
@test dX first(j′vp(fdm, X -> rand_blr(X, A_Σy, mw, A_Λw), z̄, X))
41-
@test dA_Σy
42-
first(j′vp(fdm, A_Σy -> rand_blr(X, A_Σy, mw, A_Λw), z̄, A_Σy))
43-
@test dmw first(j′vp(fdm, mw -> rand_blr(X, A_Σy, mw, A_Λw), z̄, mw))
44-
@test dA_Λw
45-
first(j′vp(fdm, A_Λw -> rand_blr(X, A_Σy, mw, A_Λw), z̄, A_Λw))
46-
end
4721
end
4822
@testset "logpdf" begin
4923
rng, N, D = MersenneTwister(123456), 13, 7
5024
X, f, Σy = generate_toy_problem(rng, N, D, Tx)
5125
y = rand(rng, f(X, Σy))
5226

53-
# Construct MvNormal using a naive but simple computation for the mean / cov.
27+
# Compute logpdf using a naive but simple computation for the mean / cov.
5428
function naive_normal_stats(X::Matrix)
5529
return (X' * f.mw, Symmetric(X' * (cholesky(f.Λw) \ X) + Σy))
5630
end
@@ -59,33 +33,8 @@
5933
m, Σ = naive_normal_stats(X)
6034

6135
# Check that logpdf agrees between distributions and BLR.
62-
@test logpdf(f(X, Σy), y) logpdf(MvNormal(m, Σ), y)
63-
64-
@testset "Zygote (everything dense)" begin
65-
function logpdf_blr(X, A_Σy, y, mw, A_Λw)
66-
Σy, Λw = Symmetric(A_Σy * A_Σy' + I), Symmetric(A_Λw * A_Λw' + I)
67-
f = BayesianLinearRegressor(mw, Λw)
68-
return logpdf(f(X, Σy), y)
69-
end
70-
mw, A_Σy, A_Λw = f.mw, 0.1 .* randn(rng, N, N), 0.1 .* randn(rng, D, D)
71-
72-
z, back = Zygote.pullback(logpdf_blr, X, A_Σy, y, mw, A_Λw)
73-
@test z == logpdf_blr(X, A_Σy, y, mw, A_Λw)
74-
75-
# Compute gradients using Zygote.
76-
= randn(rng)
77-
dX, dA_Σy, dy, dmw, dA_Λw = back(z̄)
78-
79-
# Check correctness via finite differencing.
80-
fdm = central_fdm(5, 1)
81-
@test dX first(j′vp(fdm, X -> logpdf_blr(X, A_Σy, y, mw, A_Λw), z̄, X))
82-
@test dA_Σy
83-
first(j′vp(fdm, A_Σy -> logpdf_blr(X, A_Σy, y, mw, A_Λw), z̄, A_Σy))
84-
@test dy first(j′vp(fdm, y -> logpdf_blr(X, A_Σy, y, mw, A_Λw), z̄, y))
85-
@test dmw first(j′vp(fdm, mw -> logpdf_blr(X, A_Σy, y, mw, A_Λw), z̄, mw))
86-
@test dA_Λw
87-
first(j′vp(fdm, A_Λw -> logpdf_blr(X, A_Σy, y, mw, A_Λw), z̄, A_Λw))
88-
end
36+
δ = y - m
37+
@test logpdf(f(X, Σy), y) -(N * log(2π) + logdet(Σ) + δ' *\ δ)) / 2
8938
end
9039
@testset "posterior" begin
9140
@testset "low noise" begin

test/runtests.jl

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
using AbstractGPs
2-
using BayesianLinearRegressors
3-
using Distributions
4-
using FiniteDifferences
5-
using LinearAlgebra
6-
using Random
7-
using Test
8-
using Zygote
9-
using PDMats
1+
using AbstractGPs, BayesianLinearRegressors, LinearAlgebra, PDMats, Random, Test
102

113
using BayesianLinearRegressors: BayesianLinearRegressor, posterior, marginals, cov, mean
12-
using FiniteDifferences: j′vp
134

145
include("test_utils.jl")
156

test/sampling_functions.jl

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -44,46 +44,6 @@
4444
@test mean(f(X, Σy)) m_empirical atol = 1e-3 rtol = 1e-3
4545
@test cov(f(X, Σy)) Σ_empirical + Σy atol = 1e-2 rtol = 1e-2
4646
end
47-
48-
@testset "Zygote (everything dense)" begin
49-
function test_rand_funcs_adjoints(sample_function)
50-
rng, N, D = MersenneTwister(123456), 11, 5
51-
X, f, _ = generate_toy_problem(rng, N, D, Tx)
52-
mw, A_Λw = f.mw, 0.1 .* randn(rng, D, D)
53-
54-
# Run the model forwards and check that output agrees with non-Zygote.
55-
z, back = Zygote.pullback(sample_function, X, mw, A_Λw)
56-
@test z == sample_function(X, mw, A_Λw)
57-
58-
# Compute adjoints using Zygote.
59-
= randn(rng, size(z))
60-
dX, dmw, dA_Λw = back(z̄)
61-
62-
# Verify adjoints via finite differencing.
63-
fdm = central_fdm(5, 1)
64-
@test dX first(j′vp(fdm, X -> sample_function(X, mw, A_Λw), z̄, X))
65-
@test dmw first(j′vp(fdm, mw -> sample_function(X, mw, A_Λw), z̄, mw))
66-
@test dA_Λw
67-
first(j′vp(fdm, A_Λw -> sample_function(X, mw, A_Λw), z̄, A_Λw))
68-
end
69-
70-
function rand_funcs_single(X, mw, A_Λw)
71-
Λw = Symmetric(A_Λw * A_Λw' + I)
72-
f = BayesianLinearRegressor(mw, Λw)
73-
g = rand(MersenneTwister(123456), f)
74-
return g(X)
75-
end
76-
77-
function rand_funcs_multi(X, mw, A_Λw)
78-
Λw = Symmetric(A_Λw * A_Λw' + I)
79-
f = BayesianLinearRegressor(mw, Λw)
80-
gs = rand(MersenneTwister(123456), f, 1, 1)
81-
return reduce(hcat, map(h -> h(X), reshape(gs, :)))
82-
end
83-
84-
test_rand_funcs_adjoints(rand_funcs_single)
85-
test_rand_funcs_adjoints(rand_funcs_multi)
86-
end
8747
end
8848

8949
@testset "basis_function_regression" begin

0 commit comments

Comments
 (0)