JuliaDiff / FiniteDifferences.jl
Showing 1 of 2 files from the diff.
Other files ignored by Codecov
test/to_vec.jl has changed.

@@ -156,6 +156,51 @@
Loading
156 156
    return x_vec, PermutedDimsArray_from_vec
157 157
end
158 158
159 +
# Factorizations
160 +
161 +
function to_vec(x::F) where {F <: SVD}
162 +
    # Convert the vector S to a matrix so we can work with a vector of matrices
163 +
    # only and inferrence work
164 +
    v = [x.U, reshape(x.S, length(x.S), 1), x.Vt]
165 +
    x_vec, back = to_vec(v)
166 +
    function SVD_from_vec(v)
167 +
        U, Smat, Vt = back(v)
168 +
        return F(U, vec(Smat), Vt)
169 +
    end
170 +
    return x_vec, SVD_from_vec
171 +
end
172 +
173 +
function to_vec(x::Cholesky)
174 +
    x_vec, back = to_vec(x.factors)
175 +
    function Cholesky_from_vec(v)
176 +
        return Cholesky(back(v), x.uplo, x.info)
177 +
    end
178 +
    return x_vec, Cholesky_from_vec
179 +
end
180 +
181 +
function to_vec(x::S) where {U, S <: Union{LinearAlgebra.QRCompactWYQ{U}, LinearAlgebra.QRCompactWY{U}}}
182 +
    # x.T is composed of upper triangular blocks. The subdiagonals elements
183 +
    # of the blocks are abitrary. We make sure to set all of them to zero
184 +
    # to avoid NaN.
185 +
    blocksize, cols = size(x.T)
186 +
    T = zeros(U, blocksize, cols)
187 +
188 +
    for i in 0:div(cols - 1, blocksize)
189 +
        used_cols = i * blocksize
190 +
        n = min(blocksize, cols - used_cols)
191 +
        T[1:n, (1:n) .+ used_cols] = UpperTriangular(view(x.T, 1:n, (1:n) .+ used_cols))
192 +
    end
193 +
194 +
    x_vec, back = to_vec([x.factors, T])
195 +
196 +
    function QRCompact_from_vec(v)
197 +
        factors, Tback = back(v)
198 +
        return S(factors, Tback)
199 +
    end
200 +
201 +
    return x_vec, QRCompact_from_vec
202 +
end
203 +
159 204
# Non-array data structures
160 205
161 206
function to_vec(x::Tuple)
Files Coverage
src 98.46%
Project Totals (5 files) 98.46%
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file. The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files. The size and color of each slice is representing the number of statements and the coverage, respectively.
Grid
Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.
Loading