@@ -11,35 +11,33 @@ mutable struct SparsePredQR{T,M<:SparseMatrixCSC,F} <: GLM.LinPred
11
11
qr:: F
12
12
scratch:: M
13
13
end
14
- function SparsePredQR (X:: SparseMatrixCSC{T} ) where T
14
+ function SparsePredQR (X:: SparseMatrixCSC{T} ) where {T}
15
15
# The one(float(T))* part is because of a promotion issue in SPQR.jl on Julia 1.9
16
16
fqr = qr (sparse (one (float (T))* I, size (X)... ))
17
- return SparsePredQR {eltype(X),typeof(X),typeof(fqr)} (
18
- X,
19
- zeros (T, size (X, 2 )),
20
- zeros (T, size (X, 2 )),
21
- zeros (T, size (X, 2 )),
22
- fqr,
23
- similar (X)
24
- )
17
+ return SparsePredQR {eltype(X),typeof(X),typeof(fqr)} (X,
18
+ zeros (T, size (X, 2 )),
19
+ zeros (T, size (X, 2 )),
20
+ zeros (T, size (X, 2 )),
21
+ fqr,
22
+ similar (X))
25
23
end
26
24
27
25
GLM. qrpred (X:: SparseMatrixCSC , pivot:: Bool ) = SparsePredQR (X)
28
26
29
- function GLM. delbeta! (p:: SparsePredQR{T} , r:: Vector{T} , wt:: Vector{T} ) where T
27
+ function GLM. delbeta! (p:: SparsePredQR{T} , r:: Vector{T} , wt:: Vector{T} ) where {T}
30
28
wtsqrt = sqrt .(wt)
31
29
Wsqrt = Diagonal (wtsqrt)
32
30
scr = mul! (p. scratch, Wsqrt, p. X)
33
31
p. qr = qr (scr)
34
- p. delbeta = p. qr \ (Wsqrt* r)
32
+ return p. delbeta = p. qr \ (Wsqrt* r)
35
33
end
36
34
37
- function GLM. delbeta! (p:: SparsePredQR{T} , r:: Vector{T} ) where T
35
+ function GLM. delbeta! (p:: SparsePredQR{T} , r:: Vector{T} ) where {T}
38
36
p. qr = qr (p. X)
39
- p. delbeta = p. qr \ r
37
+ return p. delbeta = p. qr \ r
40
38
end
41
39
42
- function GLM. inverse (x:: SparsePredQR{T} ) where T
40
+ function GLM. inverse (x:: SparsePredQR{T} ) where {T}
43
41
Rinv = UpperTriangular (x. qr. R) \ Diagonal (ones (T, size (x. qr. R, 2 )))
44
42
pinv = invperm (x. qr. pcol)
45
43
RinvRinvt = Rinv* Rinv'
@@ -56,38 +54,41 @@ mutable struct SparsePredChol{T,M<:SparseMatrixCSC,C} <: GLM.LinPred
56
54
chol:: C
57
55
scratch:: M
58
56
end
59
- function SparsePredChol (X:: SparseMatrixCSC{T} ) where T
60
- chol = cholesky (sparse (I, size (X, 2 ), size (X,2 )))
57
+ function SparsePredChol (X:: SparseMatrixCSC{T} ) where {T}
58
+ chol = cholesky (sparse (I, size (X, 2 ), size (X, 2 )))
61
59
return SparsePredChol {eltype(X),typeof(X),typeof(chol)} (X,
62
- X' ,
63
- zeros (T, size (X, 2 )),
64
- zeros (T, size (X, 2 )),
65
- zeros (T, size (X, 2 )),
66
- chol,
67
- similar (X))
60
+ X' ,
61
+ zeros (T, size (X, 2 )),
62
+ zeros (T, size (X, 2 )),
63
+ zeros (T, size (X, 2 )),
64
+ chol,
65
+ similar (X))
68
66
end
69
67
70
68
GLM. cholpred (X:: SparseMatrixCSC , pivot:: Bool = false ) = SparsePredChol (X)
71
69
72
- function GLM. delbeta! (p:: SparsePredChol{T} , r:: Vector{T} , wt:: Vector{T} ) where T
70
+ function GLM. delbeta! (p:: SparsePredChol{T} , r:: Vector{T} , wt:: Vector{T} ) where {T}
73
71
scr = mul! (p. scratch, Diagonal (wt), p. X)
74
72
XtWX = p. Xt* scr
75
73
c = p. chol = cholesky (Symmetric {eltype(XtWX),typeof(XtWX)} (XtWX, ' L' ))
76
- p. delbeta = c \ mul! (p. delbeta, adjoint (scr), r)
74
+ return p. delbeta = c \ mul! (p. delbeta, adjoint (scr), r)
77
75
end
78
76
79
- function GLM. delbeta! (p:: SparsePredChol{T} , r:: Vector{T} ) where T
77
+ function GLM. delbeta! (p:: SparsePredChol{T} , r:: Vector{T} ) where {T}
80
78
scr = p. scratch = p. X
81
79
XtWX = p. Xt* scr
82
80
c = p. chol = cholesky (Symmetric {eltype(XtWX),typeof(XtWX)} (XtWX, ' L' ))
83
- p. delbeta = c \ mul! (p. delbeta, adjoint (scr), r)
81
+ return p. delbeta = c \ mul! (p. delbeta, adjoint (scr), r)
84
82
end
85
83
86
84
LinearAlgebra. cholesky (p:: SparsePredChol{T} ) where {T} = copy (p. chol)
87
85
LinearAlgebra. cholesky! (p:: SparsePredChol{T} ) where {T} = p. chol
88
86
89
- GLM. invchol (x:: SparsePredChol ) = cholesky! (x) \ Matrix {Float64} (I, size (x. X, 2 ), size (x. X, 2 ))
87
+ function GLM. invchol (x:: SparsePredChol )
88
+ return cholesky! (x) \
89
+ Matrix {Float64} (I, size (x. X, 2 ), size (x. X, 2 ))
90
+ end
90
91
91
92
GLM. inverse (x:: SparsePredChol ) = GLM. invchol (x)
92
93
93
- end
94
+ end
0 commit comments