diff --git a/.travis.yml b/.travis.yml index bd2e29f..2219022 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,8 @@ os: - linux julia: - 0.6 + - 0.7 + - 1.0 - nightly notifications: email: false @@ -14,7 +16,7 @@ git: ## (tests will run but not make your overall status red) matrix: allow_failures: - - julia: nightly + - julia: nightly ## uncomment and modify the following lines to manually install system packages addons: @@ -25,10 +27,10 @@ addons: # - if [ $TRAVIS_OS_NAME = osx ]; then brew install gcc; fi ## uncomment the following lines to override the default test script -#script: -# - julia -e 'Pkg.clone(pwd()); Pkg.build("AMG"); Pkg.test("AMG"; coverage=true)' +script: + - julia -e 'VERSION >= v"0.7-" && using Pkg; Pkg.clone(pwd()); Pkg.build("AlgebraicMultigrid"); Pkg.test("AlgebraicMultigrid"; coverage=true)' after_success: # push coverage results to Coveralls - - julia -e 'cd(Pkg.dir("AMG")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' + - julia -e 'cd(Pkg.dir("AlgebraicMultigrid")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' # push coverage results to Codecov - - julia -e 'cd(Pkg.dir("AMG")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' + - julia -e 'cd(Pkg.dir("AlgebraicMultigrid")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' diff --git a/REQUIRE b/REQUIRE index 4221a44..2a724da 100644 --- a/REQUIRE +++ b/REQUIRE @@ -1,2 +1,3 @@ julia 0.6 -IterativeSolvers 0.4.1 +IterativeSolvers 0.6.0 +Compat 1.0.0 diff --git a/src/AMG.jl b/src/AlgebraicMultigrid.jl similarity index 64% rename from src/AMG.jl rename to src/AlgebraicMultigrid.jl index 0389f84..2489a3d 100644 --- a/src/AMG.jl +++ b/src/AlgebraicMultigrid.jl @@ -1,25 +1,34 @@ -module AMG +module AlgebraicMultigrid import IterativeSolvers: gauss_seidel! +using Compat, Compat.LinearAlgebra +using Compat.SparseArrays, Compat.Printf using Base.Threads +using Compat: rmul! + +if VERSION < v"0.7-" + const mul! = A_mul_B! +end + const MT = false +const AMG = AlgebraicMultigrid include("utils.jl") export approximate_spectral_radius include("strength.jl") -export strength_of_connection, Classical, SymmetricStrength +export Classical, SymmetricStrength include("splitting.jl") -export split_nodes, RS +export RS include("gallery.jl") export poisson include("smoother.jl") export GaussSeidel, SymmetricSweep, ForwardSweep, BackwardSweep, - smooth_prolongator, JacobiProlongation + JacobiProlongation include("multilevel.jl") export solve @@ -28,7 +37,7 @@ include("classical.jl") export ruge_stuben include("aggregate.jl") -export aggregation, StandardAggregation +export StandardAggregation include("aggregation.jl") export fit_candidates, smoothed_aggregation diff --git a/src/aggregate.jl b/src/aggregate.jl index a25a1d1..d1d3e5c 100644 --- a/src/aggregate.jl +++ b/src/aggregate.jl @@ -1,7 +1,7 @@ struct StandardAggregation end -function aggregation(::StandardAggregation, S::SparseMatrixCSC{T,R}) where {T,R} +function (::StandardAggregation)(S::SparseMatrixCSC{T,R}) where {T,R} n = size(S, 1) x = zeros(R, n) @@ -97,7 +97,7 @@ function aggregation(::StandardAggregation, S::SparseMatrixCSC{T,R}) where {T,R} if minimum(x) == -1 mask = x .!= -1 I = collect(R, 1:n)[mask] - J = x[mask] + R(1) + J = x[mask] .+ R(1) #J = x[mask] + 1 V = ones(eltype(S), length(J)) AggOp = sparse(J,I,V,N,M) diff --git a/src/aggregation.jl b/src/aggregation.jl index c7b2399..93881a0 100644 --- a/src/aggregation.jl +++ b/src/aggregation.jl @@ -1,17 +1,17 @@ -function smoothed_aggregation(A::SparseMatrixCSC{T,V}, +function smoothed_aggregation(A::TA, + ::Type{Val{bs}}=Val{1}, symmetry = HermitianSymmetry(), strength = SymmetricStrength(), aggregate = StandardAggregation(), smooth = JacobiProlongation(4.0/3.0), presmoother = GaussSeidel(), postsmoother = GaussSeidel(), - improve_candidates = GaussSeidel(4), + improve_candidates = GaussSeidel(iter=4), max_levels = 10, max_coarse = 10, diagonal_dominance = false, keep = false, - coarse_solver = Pinv()) where {T,V} - + coarse_solver = Pinv) where {T,V,bs,TA<:SparseMatrixCSC{T,V}} n = size(A, 1) # B = kron(ones(n, 1), eye(1)) @@ -28,13 +28,21 @@ function smoothed_aggregation(A::SparseMatrixCSC{T,V}, # agg = [aggregate for _ in 1:max_levels - 1] # sm = [smooth for _ in 1:max_levels] - levels = Vector{Level{T,V}}() + @static if VERSION < v"0.7-" + levels = Vector{Level{TA, TA, TA}}() + else + levels = Vector{Level{TA, TA, Adjoint{T, TA}}}() + end bsr_flag = false + w = MultiLevelWorkspace(Val{bs}, eltype(A)) while length(levels) + 1 < max_levels && size(A, 1) > max_coarse + residual!(w, size(A, 1)) A, B, bsr_flag = extend_hierarchy!(levels, strength, aggregate, smooth, improve_candidates, diagonal_dominance, keep, A, B, symmetry, bsr_flag) + coarse_x!(w, size(A, 1)) + coarse_b!(w, size(A, 1)) #=if size(A, 1) <= max_coarse break end=# @@ -42,7 +50,7 @@ function smoothed_aggregation(A::SparseMatrixCSC{T,V}, #=A, B = extend_hierarchy!(levels, strength, aggregate, smooth, improve_candidates, diagonal_dominance, keep, A, B, symmetry)=# - MultiLevel(levels, A, presmoother, postsmoother) + MultiLevel(levels, A, coarse_solver(A), presmoother, postsmoother, w) end struct HermitianSymmetry @@ -54,18 +62,22 @@ function extend_hierarchy!(levels, strength, aggregate, smooth, symmetry, bsr_flag) # Calculate strength of connection matrix - S = strength_of_connection(strength, A, bsr_flag) + if symmetry isa HermitianSymmetry + S, _T = strength(A, bsr_flag) + else + S, _T = strength(adjoint(A), bsr_flag) + end # Aggregation operator - AggOp = aggregation(aggregate, S) + AggOp = aggregate(S) # b = zeros(eltype(A), size(A, 1)) # Improve candidates b = zeros(size(A,1)) - relax!(improve_candidates, A, B, b) + improve_candidates(A, B, b) T, B = fit_candidates(AggOp, B) - P = smooth_prolongator(smooth, A, T, S, B) + P = smooth(A, T, S, B) R = construct_R(symmetry, P) push!(levels, Level(A, P, R)) @@ -81,7 +93,7 @@ construct_R(::HermitianSymmetry, P) = P' function fit_candidates(AggOp, B, tol = 1e-10) - A = AggOp.' + A = adjoint(AggOp) n_fine, n_coarse = size(A) n_col = n_coarse diff --git a/src/classical.jl b/src/classical.jl index 310eaab..45a76e0 100644 --- a/src/classical.jl +++ b/src/classical.jl @@ -7,86 +7,106 @@ struct Solver{S,T,P,PS} max_coarse::Int64 end -function ruge_stuben{Ti,Tv}(A::SparseMatrixCSC{Ti,Tv}; +function ruge_stuben(_A::Union{TA, Symmetric{Ti, TA}, Hermitian{Ti, TA}}, + ::Type{Val{bs}}=Val{1}; strength = Classical(0.25), CF = RS(), presmoother = GaussSeidel(), postsmoother = GaussSeidel(), max_levels = 10, - max_coarse = 10) + max_coarse = 10, + coarse_solver = Pinv) where {Ti,Tv,bs,TA<:SparseMatrixCSC{Ti,Tv}} s = Solver(strength, CF, presmoother, postsmoother, max_levels, max_levels) - levels = Vector{Level{Ti,Tv}}() + if _A isa Symmetric && Ti <: Real || _A isa Hermitian + A = _A.data + At = A + symmetric = true + @static if VERSION < v"0.7-" + levels = Vector{Level{TA, TA}}() + else + levels = Vector{Level{TA, Adjoint{Ti, TA}, TA}}() + end + else + symmetric = false + A = _A + At = adjoint(A) + @static if VERSION < v"0.7-" + levels = Vector{Level{TA, TA, TA}}() + else + levels = Vector{Level{TA, Adjoint{Ti, TA}, TA}}() + end + end + w = MultiLevelWorkspace(Val{bs}, eltype(A)) while length(levels) + 1 < max_levels && size(A, 1) > max_coarse - A = extend_heirarchy!(levels, strength, CF, A) - #if size(A, 1) <= max_coarse - # break - #end + residual!(w, size(A, 1)) + A = extend_heirarchy!(levels, strength, CF, A, symmetric) + coarse_x!(w, size(A, 1)) + coarse_b!(w, size(A, 1)) end - MultiLevel(levels, A, presmoother, postsmoother) + + MultiLevel(levels, A, coarse_solver(A), presmoother, postsmoother, w) end -function extend_heirarchy!{Ti,Tv}(levels::Vector{Level{Ti,Tv}}, strength, CF, A::SparseMatrixCSC{Ti,Tv}) - S, T = strength_of_connection(strength, A) - splitting = split_nodes(CF, S) - P, R = direct_interpolation(A, T, splitting) +function extend_heirarchy!(levels, strength, CF, A::SparseMatrixCSC{Ti,Tv}, symmetric) where {Ti,Tv} + if symmetric + At = A + else + At = adjoint(A) + end + S, T = strength(At) + splitting = CF(S) + P, R = direct_interpolation(At, T, splitting) push!(levels, Level(A, P, R)) A = R * A * P end -function direct_interpolation(A, T, splitting) - - fill!(T.nzval, eltype(A)(1.)) - T .= A .* T - Pp = rs_direct_interpolation_pass1(T, A, splitting) - Pp .= Pp .+ 1 - - Px, Pj, Pp = rs_direct_interpolation_pass2(A, T, splitting, Pp) - - Pj .= Pj .+ 1 - - R = SparseMatrixCSC(maximum(Pj), size(A, 1), Pp, Pj, Px) +function direct_interpolation(At, T, splitting) + fill!(T.nzval, eltype(At)(1)) + T .= At .* T + + Pp = rs_direct_interpolation_pass1(T, splitting) + Px, Pj, Pp = rs_direct_interpolation_pass2(At, T, splitting, Pp) + R = SparseMatrixCSC(maximum(Pj), size(At, 1), Pp, Pj, Px) P = R' P, R end - -function rs_direct_interpolation_pass1(T, A, splitting) - - Bp = zeros(Int, size(A.colptr)) - n = size(A, 1) - nnz = 0 - for i = 1:n - if splitting[i] == C_NODE - nnz += 1 - else - for j in nzrange(T, i) - row = T.rowval[j] - if splitting[row] == C_NODE && row != i - nnz += 1 +# calculates the number of nonzeros in each column of the interpolation matrix +function rs_direct_interpolation_pass1(T, splitting) + n = size(T, 2) + Bp = ones(Int, n+1) + nnzplus1 = 1 + for i = 1:n + if splitting[i] == C_NODE + nnzplus1 += 1 + else + for j in nzrange(T, i) + row = T.rowval[j] + if splitting[row] == C_NODE + nnzplus1 += 1 end - end + end end - Bp[i+1] = nnz - end - Bp + Bp[i+1] = nnzplus1 + end + Bp end - function rs_direct_interpolation_pass2(A::SparseMatrixCSC{Tv,Ti}, +function rs_direct_interpolation_pass2(At::SparseMatrixCSC{Tv,Ti}, T::SparseMatrixCSC{Tv, Ti}, splitting::Vector{Ti}, Bp::Vector{Ti}) where {Tv,Ti} - Bx = zeros(Tv, Bp[end] - 1) Bj = zeros(Ti, Bp[end] - 1) - n = size(A, 1) + n = size(At, 1) for i = 1:n if splitting[i] == C_NODE @@ -98,7 +118,7 @@ function rs_direct_interpolation_pass1(T, A, splitting) for j in nzrange(T, i) row = T.rowval[j] sval = T.nzval[j] - if splitting[row] == C_NODE && row != i + if splitting[row] == C_NODE if sval < 0 sum_strong_neg += sval else @@ -109,9 +129,9 @@ function rs_direct_interpolation_pass1(T, A, splitting) sum_all_pos = zero(Tv) sum_all_neg = zero(Tv) diag = zero(Tv) - for j in nzrange(A, i) - row = A.rowval[j] - aval = A.nzval[j] + for j in nzrange(At, i) + row = At.rowval[j] + aval = At.nzval[j] if row == i diag += aval else @@ -122,28 +142,43 @@ function rs_direct_interpolation_pass1(T, A, splitting) end end end - alpha = sum_all_neg / sum_strong_neg - beta = sum_all_pos / sum_strong_pos if sum_strong_pos == 0 - diag += sum_all_pos - beta = zero(beta) + beta = zero(diag) + if diag >= 0 + diag += sum_all_pos + end + else + beta = sum_all_pos / sum_strong_pos + end + + if sum_strong_neg == 0 + alpha = zero(diag) + if diag < 0 + diag += sum_all_neg + end + else + alpha = sum_all_neg / sum_strong_neg end - neg_coeff = -1 * alpha / diag - pos_coeff = -1 * beta / diag + if isapprox(diag, 0, atol=eps(Tv)) + neg_coeff = Tv(0) + pos_coeff = Tv(0) + else + neg_coeff = alpha / diag + pos_coeff = beta / diag + end nnz = Bp[i] - for j in nzrange(T, i) row = T.rowval[j] sval = T.nzval[j] - if splitting[row] == C_NODE && row != i + if splitting[row] == C_NODE Bj[nnz] = row if sval < 0 - Bx[nnz] = neg_coeff * sval + Bx[nnz] = abs(neg_coeff * sval) else - Bx[nnz] = pos_coeff * sval + Bx[nnz] = abs(pos_coeff * sval) end nnz += 1 end @@ -157,7 +192,7 @@ function rs_direct_interpolation_pass1(T, A, splitting) m[i] = sum sum += splitting[i] end - Bj .= m[Bj] + Bj .= m[Bj] .+ 1 - Bx, Bj, Bp + Bx, Bj, Bp end diff --git a/src/multilevel.jl b/src/multilevel.jl index dfcf797..4d432d6 100644 --- a/src/multilevel.jl +++ b/src/multilevel.jl @@ -1,23 +1,65 @@ -struct Level{T,V} - A::SparseMatrixCSC{T,V} - P::SparseMatrixCSC{T,V} - R::SparseMatrixCSC{T,V} +struct Level{TA, TP, TR} + A::TA + P::TP + R::TR end -struct MultiLevel{S, Pre, Post, Ti, Tv} - levels::Vector{Level{Ti,Tv}} - final_A::SparseMatrixCSC{Ti,Tv} +struct MultiLevel{S, Pre, Post, TA, TP, TR, TW} + levels::Vector{Level{TA, TP, TR}} + final_A::TA coarse_solver::S presmoother::Pre postsmoother::Post + workspace::TW +end + +struct MultiLevelWorkspace{TX, bs} + coarse_xs::Vector{TX} + coarse_bs::Vector{TX} + res_vecs::Vector{TX} +end +function MultiLevelWorkspace(::Type{Val{bs}}, ::Type{T}) where {bs, T<:Number} + if bs === 1 + TX = Vector{T} + else + TX = Matrix{T} + end + MultiLevelWorkspace{TX, bs}(TX[], TX[], TX[]) +end +Base.eltype(w::MultiLevelWorkspace{TX}) where TX = eltype(TX) +blocksize(w::MultiLevelWorkspace{TX, bs}) where {TX, bs} = bs + +function residual!(m::MultiLevelWorkspace{TX, bs}, n) where {TX, bs} + if bs === 1 + push!(m.res_vecs, TX(undef, n)) + else + push!(m.res_vecs, TX(undef, n, bs)) + end +end +function coarse_x!(m::MultiLevelWorkspace{TX, bs}, n) where {TX, bs} + if bs === 1 + push!(m.coarse_xs, TX(undef, n)) + else + push!(m.coarse_xs, TX(undef, n, bs)) + end +end +function coarse_b!(m::MultiLevelWorkspace{TX, bs}, n) where {TX, bs} + if bs === 1 + push!(m.coarse_bs, TX(undef, n)) + else + push!(m.coarse_bs, TX(undef, n, bs)) + end end abstract type CoarseSolver end -struct Pinv <: CoarseSolver +struct Pinv{T} <: CoarseSolver + pinvA::Matrix{T} + Pinv{T}(A) where T = new{T}(pinv(Matrix(A))) end +Pinv(A) = Pinv{eltype(A)}(A) + +(p::Pinv)(x, b) = mul!(x, p.pinvA, b) -MultiLevel{Ti,Tv}(l::Vector{Level{Ti,Tv}}, A::SparseMatrixCSC{Ti,Tv}, presmoother, postsmoother) = - MultiLevel(l, A, Pinv(), presmoother, postsmoother) Base.length(ml) = length(ml.levels) + 1 function Base.show(io::IO, ml::MultiLevel) @@ -74,7 +116,7 @@ struct V <: Cycle end """ - solve(ml::MultiLevel, b::Vector, cycle, kwargs...) + solve(ml::MultiLevel, b::AbstractArray, cycle, kwargs...) Execute multigrid cycling. @@ -92,61 +134,74 @@ Keyword Arguments * log::Bool - return vector of residuals along with solution """ -function solve{T}(ml::MultiLevel, b::Vector{T}, +function solve(ml::MultiLevel, b::AbstractArray, args...; kwargs...) + n = length(ml) == 1 ? size(ml.final_A, 1) : size(ml.levels[1].A, 1) + V = promote_type(eltype(ml.workspace), eltype(b)) + x = zeros(V, size(b)) + return solve!(x, ml, b, args...; kwargs...) +end +function solve!(x, ml::MultiLevel, b::AbstractArray{T}, cycle::Cycle = V(); maxiter::Int = 100, tol::Float64 = 1e-5, verbose::Bool = false, - log::Bool = false) - - A = length(ml) == 1 ? ml.final_A : ml.levels[1].A + log::Bool = false, + calculate_residual = true) where {T} + + A = length(ml) == 1 ? ml.final_A : ml.levels[1].A V = promote_type(eltype(A), eltype(b)) - x = zeros(V, size(b)) tol = eltype(b)(tol) - residuals = Vector{V}() - normb = norm(b) + log && (residuals = Vector{V}()) + normres = normb = norm(b) if normb != 0 tol *= normb end - push!(residuals, normb) + log && push!(residuals, normb) - lvl = 1 - while length(residuals) <= maxiter && residuals[end] > tol + res = ml.workspace.res_vecs[1] + itr = lvl = 1 + while itr <= maxiter && (!calculate_residual || normres > tol) if length(ml) == 1 - x = coarse_solver(ml.coarse_solver, A, b) + ml.coarse_solver(x, b) else - x = __solve(cycle, ml, x, b, lvl) + __solve!(x, ml, cycle, b, lvl) + end + if calculate_residual + mul!(res, A, x) + reshape(res, size(b)) .= b .- reshape(res, size(b)) + normres = norm(res) + log && push!(residuals, normres) end - push!(residuals, T(norm(b - A * x))) + itr += 1 end # @show residuals - if log - return x, residuals - else - return x - end + log ? (x, residuals) : x end -function __solve(v::V, ml, x, b, lvl) +function __solve!(x, ml, v::V, b, lvl) A = ml.levels[lvl].A - presmoother!(ml.presmoother, A, x, b) + ml.presmoother(A, x, b) + + res = ml.workspace.res_vecs[lvl] + mul!(res, A, x) + reshape(res, size(b)) .= b .- reshape(res, size(b)) - res = b - A * x - coarse_b = ml.levels[lvl].R * res - coarse_x = zeros(eltype(coarse_b), size(coarse_b)) + coarse_b = ml.workspace.coarse_bs[lvl] + mul!(coarse_b, ml.levels[lvl].R, res) + coarse_x = ml.workspace.coarse_xs[lvl] + coarse_x .= 0 if lvl == length(ml.levels) - coarse_x = coarse_solver(ml.coarse_solver, ml.final_A, coarse_b) + ml.coarse_solver(coarse_x, coarse_b) else - coarse_x = __solve(v, ml, coarse_x, coarse_b, lvl + 1) + coarse_x = __solve!(coarse_x, ml, v, coarse_b, lvl + 1) end - x .+= ml.levels[lvl].P * coarse_x + mul!(res, ml.levels[lvl].P, coarse_x) + x .+= res - postsmoother!(ml.postsmoother, A, x, b) + ml.postsmoother(A, x, b) x end - -coarse_solver(::Pinv, A, b) = pinv(full(A)) * b diff --git a/src/preconditioner.jl b/src/preconditioner.jl index fbb2e51..27a931e 100644 --- a/src/preconditioner.jl +++ b/src/preconditioner.jl @@ -1,13 +1,37 @@ -import Base: \, *, A_ldiv_B!, A_mul_B! - -struct Preconditioner - ml::MultiLevel +struct Preconditioner{ML<:MultiLevel} + ml::ML + init::Symbol end +Preconditioner(ml) = Preconditioner(ml, :zero) aspreconditioner(ml::MultiLevel) = Preconditioner(ml) -\(p::Preconditioner, b) = solve(p.ml, b, maxiter = 1, tol = 1e-12) -*(p::Preconditioner, b) = p.ml.levels[1].A * x +@static if VERSION < v"0.7-" + import Base: \, *, A_ldiv_B!, A_mul_B! + function A_ldiv_B!(x, p::Preconditioner, b) + if p.init == :zero + x .= 0 + else + x .= b + end + solve!(x, p.ml, b, maxiter = 1, calculate_residual = false) + end + A_mul_B!(b, p::Preconditioner, x) = A_mul_B!(b, p.ml.levels[1].A, x) +else + import Compat.LinearAlgebra: \, *, ldiv!, mul! + ldiv!(p::Preconditioner, b) = copyto!(b, p \ b) + function ldiv!(x, p::Preconditioner, b) + if p.init == :zero + x .= 0 + else + x .= b + end + solve!(x, p.ml, b, maxiter = 1, calculate_residual = false) + end + mul!(b, p::Preconditioner, x) = mul!(b, p.ml.levels[1].A, x) +end -A_ldiv_B!(x, p::Preconditioner, b) = copy!(x, p \ b) -A_mul_B!(b, p::Preconditioner, x) = A_mul_B!(b, p.ml.levels[1].A, x) +function \(p::Preconditioner, b) + ldiv!(similar(b), p, b) +end +*(p::Preconditioner, b) = p.ml.levels[1].A * x diff --git a/src/smoother.jl b/src/smoother.jl index aef9340..5b327a7 100644 --- a/src/smoother.jl +++ b/src/smoother.jl @@ -10,90 +10,139 @@ struct GaussSeidel{S} <: Smoother sweep::S iter::Int end -GaussSeidel(iter = 1) = GaussSeidel(SymmetricSweep(), iter) +GaussSeidel(; iter = 1) = GaussSeidel(SymmetricSweep(), iter) GaussSeidel(f::ForwardSweep) = GaussSeidel(f, 1) GaussSeidel(b::BackwardSweep) = GaussSeidel(b, 1) GaussSeidel(s::SymmetricSweep) = GaussSeidel(s, 1) -presmoother!(s, A, x, b) = smoother!(s, s.sweep, A, x, b) -postsmoother!(s, A, x, b) = smoother!(s, s.sweep, A, x, b) -relax!(s, A, x, b) = smoother!(s, s.sweep, A, x, b) - -function smoother!(s::GaussSeidel, ::ForwardSweep, A, x, b) - for i in 1:s.iter - gs!(A, b, x, 1, 1, size(A, 1)) - end -end - -function smoother!(s::GaussSeidel, ::SymmetricSweep, A, x, b) - for i in 1:s.iter - gs!(A, b, x, 1, 1, size(A, 1)) - gs!(A, b, x, size(A,1), -1, 1) - end -end - -function smoother!(s::GaussSeidel, ::BackwardSweep, A, x, b) +function (s::GaussSeidel{S})(A, x, b) where {S<:Sweep} for i in 1:s.iter - gs!(A, b, x, size(A,1), -1, 1) + if S === ForwardSweep || S === SymmetricSweep + gs!(A, b, x, 1, 1, size(A, 1)) + end + if S === BackwardSweep || S === SymmetricSweep + gs!(A, b, x, size(A, 1), -1, 1) + end end end - function gs!(A, b, x, start, step, stop) n = size(A, 1) z = zero(eltype(A)) - for i = start:step:stop - rsum = z - d = z - for j in nzrange(A, i) - row = A.rowval[j] - val = A.nzval[j] - if i == row - d = val - else - rsum += val * x[row] + @inbounds for col in 1:size(x, 2) + for i in start:step:stop + rsum = z + d = z + for j in nzrange(A, i) + row = A.rowval[j] + val = A.nzval[j] + d = ifelse(i == row, val, d) + rsum += ifelse(i == row, z, val * x[row, col]) end - end - - if d != 0 - x[i] = (b[i] - rsum) / d + x[i, col] = ifelse(d == 0, x[i, col], (b[i, col] - rsum) / d) end end end -struct Jacobi{T} <: Smoother +struct Jacobi{T,TX} <: Smoother ω::T + temp::TX + iter::Int end +Jacobi(ω, x::TX; iter=1) where {T, TX<:AbstractArray{T}} = Jacobi{T,TX}(ω, similar(x), iter) +Jacobi(x::TX, ω=0.5; iter=1) where {T, TX<:AbstractArray{T}} = Jacobi{T,TX}(ω, similar(x), iter) -function jacobi!(A, x, b, ω, start, step, stop) +function (jacobi::Jacobi)(A, x, b) - one = one(eltype(A)) - temp = similar(x) + ω = jacobi.ω + one = Base.one(eltype(A)) + temp = jacobi.temp + z = zero(eltype(A)) - for i = start:step:stop - temp[i] = x[i] - end + for i in 1:jacobi.iter + @inbounds for col = 1:size(x, 2) + for i = 1:size(A, 1) + temp[i, col] = x[i, col] + end - for i = start:step:stop - rsum = zero(eltype(A)) - diag = zero(eltype(A)) + for i = 1:size(A, 1) + rsum = z + diag = z - for j in nzrange(A, i) - row = A.nzval[j] - val = A.nzval[j] + for j in nzrange(A, i) + row = A.rowval[j] + val = A.nzval[j] - if row == i - diag = val - else - rsum += val * temp[row] + diag = ifelse(row == i, val, diag) + rsum += ifelse(row == i, z, val * temp[row, col]) + end + + xcand = (one - ω) * temp[i, col] + ω * ((b[i, col] - rsum) / diag) + x[i, col] = ifelse(diag == 0, x[i, col], xcand) end end + end +end - if diag != 0 - x[i] = (one - ω) * temp[i] + ω * ((b[i] - rsum) / diag) - end +#= +using KissThreading: tmap! + +struct ParallelJacobi{T,TX} <: Smoother + ω::T + temp::TX +end +ParallelJacobi(ω, x::TX) where {T, TX<:AbstractArray{T}} = ParallelJacobi{T,TX}(ω, similar(x)) +ParallelJacobi(x::TX, ω = 0.5) where {T, TX<:AbstractArray{T}} = ParallelJacobi{T,TX}(ω, similar(x)) + +struct ParallelTemp{TX, TI} + temp::TX + col::TI +end +(ptemp::ParallelTemp)(i) = ptemp.temp[i, ptemp.col] + +struct ParallelJacobiMapper{TA, TX, TB, TTemp, TF, TI} + A::TA + x::TX + b::TB + temp::TTemp + ω::TF + col::TI +end +function (pjacobmapper::ParallelJacobiMapper)(i) + A = pjacobmapper.A + x = pjacobmapper.x + b = pjacobmapper.b + temp = pjacobmapper.temp + ω = pjacobmapper.ω + col = pjacobmapper.col + + one = Base.one(eltype(A)) + z = zero(eltype(A)) + rsum = z + diag = z + + for j in nzrange(A, i) + row = A.rowval[j] + val = A.nzval[j] + + diag = ifelse(row == i, val, diag) + rsum += ifelse(row == i, z, val * temp[row, col]) + end + xcand = (one - ω) * temp[i, col] + ω * ((b[i, col] - rsum) / diag) + + return ifelse(diag == 0, x[i, col], xcand) +end + +function (jacobi::ParallelJacobi)(A, x, b) + ω = jacobi.ω + temp = jacobi.temp + for col = 1:size(x, 2) + @views tmap!(ParallelTemp(temp, col), x[1:size(A, 1), col], 1:size(A, 1)) + @views tmap!(ParallelJacobiMapper(A, x, b, temp, ω, col), + x[1:size(A, 1), col], 1:size(A, 1)) end end +=# struct JacobiProlongation{T} ω::T @@ -104,10 +153,7 @@ end struct LocalWeighting end -function smooth_prolongator(j::JacobiProlongation, - A, T, S, B, - degree = 1, - weighting = LocalWeighting()) +function (j::JacobiProlongation)(A, T, S, B, degree = 1, weighting = LocalWeighting()) D_inv_S = weight(weighting, A, j.ω) P = T for i = 1:degree @@ -143,7 +189,7 @@ function weight(::LocalWeighting, S, ω) end D_inv_S = scale_rows(S, D) # eltype(S)(ω) * D_inv_S - scale!(D_inv_S, eltype(S)(ω)) + rmul!(D_inv_S, eltype(S)(ω)) end #approximate_spectral_radius(A) = diff --git a/src/splitting.jl b/src/splitting.jl index 4281e0a..d4ee51f 100644 --- a/src/splitting.jl +++ b/src/splitting.jl @@ -17,9 +17,9 @@ function remove_diag!(a) dropzeros!(a) end -function split_nodes(::RS, S) +function (::RS)(S) remove_diag!(S) - RS_CF_splitting(S, S') + RS_CF_splitting(S, adjoint(S)) end function RS_CF_splitting(S::SparseMatrixCSC, T::SparseMatrixCSC) @@ -33,108 +33,127 @@ function RS_CF_splitting(S::SparseMatrixCSC, T::SparseMatrixCSC) Sp = S.colptr Sj = S.rowval - # compute lambdas - number of neighbors - for i = 1:n - lambda[i] = Sp[i+1] - Sp[i] - end - interval_ptr = zeros(Int, n+1) interval_count = zeros(Int, n+1) index_to_node = zeros(Int,n) node_to_index = zeros(Int,n) - # Number of nodes with a certain neighbor count for i = 1:n + # compute lambda[i] - the number of nodes strongly coupled to node i + lambda[i] = Sp[i+1] - Sp[i] interval_count[lambda[i] + 1] += 1 end - csum = 0 - for i = 1:n - interval_ptr[i] = csum - csum += interval_count[i] - interval_count[i] = 0 - end + + # initial interval_ptr + @views accumulate!(+, interval_ptr[2:end], interval_count[1:end-1]) + + # sort the nodes by the number of nodes strongly coupled to them: + # `index_to_node[idx]` is the node with `idx`th least number of nodes coupled to it + # `node_to_index[idx]` is the position of the `idx`th node in `index_to_node` + # linear time and allocation-free equivalent to: + # sortperm!(index_to_node, lambda) + # node_to_index[index_to_node] .= 1:n + interval_count .= 0 # temporarily zeroed, goes back to its original at end of loop for i = 1:n lambda_i = lambda[i] + 1 - index = interval_ptr[lambda_i] + interval_count[lambda_i] - index_to_node[index+1] = i - node_to_index[i] = index+1 interval_count[lambda_i] += 1 + index = interval_ptr[lambda_i] + interval_count[lambda_i] + index_to_node[index] = i + node_to_index[i] = index end - splitting = fill(2, n) + splitting = fill(U_NODE, n) - # all nodes with no neighbors become F nodes + # all nodes which no other nodes are strongly coupled to become F nodes for i = 1:n - # check if diagonal or check if no neighbors - if lambda[i] == 0 || (lambda[i] == 1 && Tj[Tp[i]] == i) + if lambda[i] == 0 splitting[i] = F_NODE end end + # i = index_to_node[top_index] can either refer to an F node or to the U node with the + # highest lambda[i]. + + # index_to_node[interval_ptr[i]+1 : interval_ptr[i+1]] includes the set of U nodes with + # i-1 nodes strongly coupled to them, and other "inactive" F and C nodes. + + # C nodes are always in index_to_node[top_index:n]. So at the end of the last + # non-empty interval_ptr[i]+1 : interval_ptr[i+1] will be all the C nodes together + # with some other inactive F nodes. + + # when lambda_k+1 > lambda_i, i.e. lambda_k == lambda_i, where lambda_k+1 = lambda_i+1 + # is the new highest lambda[i], the line: `interval_ptr[lambda_k+1] = new_pos - 1` + # pushes the all the inactive C and F points to the end of the next now-non-empty + # interval. for top_index = n:-1:1 i = index_to_node[top_index] lambda_i = lambda[i] + 1 interval_count[lambda_i] -= 1 - if splitting[i] == F_NODE - continue - else - @assert splitting[i] == U_NODE - splitting[i] = C_NODE - for j in nzrange(S, i) - row = S.rowval[j] - if splitting[row] == U_NODE - splitting[row] = F_NODE - - for k in nzrange(T, row) - rowk = T.rowval[k] - - if splitting[rowk] == U_NODE - lambda[rowk] >= n - 1 && continue - lambda_k = lambda[rowk] + 1 - old_pos = node_to_index[rowk] - new_pos = interval_ptr[lambda_k] + interval_count[lambda_k]# - 1 - - node_to_index[index_to_node[old_pos]] = new_pos - node_to_index[index_to_node[new_pos]] = old_pos - (index_to_node[old_pos], index_to_node[new_pos]) = (index_to_node[new_pos], index_to_node[old_pos]) - - # update intervals - interval_count[lambda_k] -= 1 - interval_count[lambda_k + 1] += 1 # invalid write! - interval_ptr[lambda_k + 1] = new_pos - 1 - - # increment lambda_k - lambda[rowk] += 1 - end - end - end - end - for j in nzrange(T, i) - row = T.rowval[j] - if splitting[row] == U_NODE + splitting[i] == F_NODE && continue + + @assert splitting[i] == U_NODE + splitting[i] = C_NODE + for j in nzrange(S, i) + row = S.rowval[j] + if splitting[row] == U_NODE + splitting[row] = F_NODE - lambda[row] == 0 && continue + # increment lambda for all U nodes that node `row` is strongly coupled to + for k in nzrange(T, row) + rowk = T.rowval[k] - # move j to the beginning of its current interval - lambda_j = lambda[row] + 1 - old_pos = node_to_index[row] - new_pos = interval_ptr[lambda_j] + 1 + if splitting[rowk] == U_NODE + # to ensure `intervalcount` is inbounds + lambda[rowk] >= n - 1 && continue - node_to_index[index_to_node[old_pos]] = new_pos - node_to_index[index_to_node[new_pos]] = old_pos - (index_to_node[old_pos],index_to_node[new_pos]) = (index_to_node[new_pos],index_to_node[old_pos]) + # move rowk to the end of its current interval + lambda_k = lambda[rowk] + 1 + old_pos = node_to_index[rowk] + new_pos = interval_ptr[lambda_k] + interval_count[lambda_k] - # update intervals - interval_count[lambda_j] -= 1 - interval_count[lambda_j-1] += 1 - interval_ptr[lambda_j] += 1 - interval_ptr[lambda_j-1] = interval_ptr[lambda_j] - interval_count[lambda_j-1] + swap_node = index_to_node[new_pos] + (index_to_node[old_pos], index_to_node[new_pos]) = (swap_node, rowk) + node_to_index[rowk] = new_pos + node_to_index[swap_node] = old_pos - # decrement lambda_j - lambda[row] -= 1 + # increment lambda[rowk] + lambda[rowk] += 1 + + # update intervals + interval_count[lambda_k] -= 1 + interval_count[lambda_k+1] += 1 + interval_ptr[lambda_k+1] = new_pos - 1 + end end end end + + # decrement lambda for all U nodes that node i is strongly coupled to + for j in nzrange(T, i) + row = T.rowval[j] + if splitting[row] == U_NODE + # to ensure `intervalcount` is inbounds + lambda[row] == 0 && continue + + # move row to the beginning of its current interval + lambda_j = lambda[row] + 1 + old_pos = node_to_index[row] + new_pos = interval_ptr[lambda_j] + 1 + + swap_node = index_to_node[new_pos] + (index_to_node[old_pos], index_to_node[new_pos]) = (swap_node, row) + node_to_index[row] = new_pos + node_to_index[swap_node] = old_pos + + # decrement lambda[row] + lambda[row] -= 1 + + # update intervals + interval_count[lambda_j] -= 1 + interval_count[lambda_j-1] += 1 + interval_ptr[lambda_j] += 1 + end + end end splitting end diff --git a/src/strength.jl b/src/strength.jl index 693d59d..3179e5e 100644 --- a/src/strength.jl +++ b/src/strength.jl @@ -4,37 +4,36 @@ struct Classical{T} <: Strength end Classical(;θ = 0.25) = Classical(θ) -function strength_of_connection(c::Classical{T}, - A::SparseMatrixCSC{Tv,Ti}) where {T,Ti,Tv} +function (c::Classical)(At::SparseMatrixCSC{Tv,Ti}) where {Ti,Tv} θ = c.θ - m, n = size(A) - S = deepcopy(A) + m, n = size(At) + T = deepcopy(At) for i = 1:n - _m = find_max_off_diag(A, i) + _m = find_max_off_diag(T, i) threshold = θ * _m - for j in nzrange(A, i) - row = A.rowval[j] - val = A.nzval[j] + for j in nzrange(T, i) + row = T.rowval[j] + val = T.nzval[j] if row != i if abs(val) >= threshold - S.nzval[j] = abs(val) + T.nzval[j] = abs(val) else - S.nzval[j] = 0 + T.nzval[j] = 0 end end end end + + dropzeros!(T) - dropzeros!(S) - - scale_cols_by_largest_entry!(S) + scale_cols_by_largest_entry!(T) - S', S + adjoint(T), T end function find_max_off_diag(A, i) @@ -60,7 +59,6 @@ function find_max(A, i) end function scale_cols_by_largest_entry!(A::SparseMatrixCSC) - n = size(A, 1) for i = 1:n _m = find_max(A, i) @@ -76,19 +74,19 @@ struct SymmetricStrength{T} <: Strength end SymmetricStrength() = SymmetricStrength(0.) -function strength_of_connection{T}(s::SymmetricStrength{T}, A, bsr_flag = false) +function (s::SymmetricStrength{T})(A, bsr_flag = false) where {T} θ = s.θ if bsr_flag && θ == 0 S = SparseMatrixCSC(size(A)..., A.colptr, A.rowval, ones(eltype(A), size(A.rowval))) - return S + return S, S else S = deepcopy(A) end n = size(A, 1) - diags = Vector{eltype(A)}(n) + diags = Vector{eltype(A)}(undef, n) for i = 1:n diag = zero(eltype(A)) @@ -117,16 +115,8 @@ function strength_of_connection{T}(s::SymmetricStrength{T}, A, bsr_flag = false) dropzeros!(S) - # S.nzval .= abs.(S.nzval) - # for i = 1:size(S.nzval, 1) - # S.nzval[i] = abs(S.nzval[i]) - # end - - scale_cols_by_largest_entry!(S) - - for i = 1:size(S.nzval, 1) - S.nzval[i] = abs(S.nzval[i]) - end + S.nzval .= abs.(S.nzval) + scale_cols_by_largest_entry!(S) - S + S, S end diff --git a/src/utils.jl b/src/utils.jl index cf99593..a3936df 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -1,3 +1,11 @@ +function adjoint(A) + @static if VERSION < v"0.7-" + A' + else + copy(A') + end +end + function approximate_spectral_radius(A, tol = 0.01, maxiter = 15, restart = 5) @@ -21,19 +29,19 @@ function approximate_spectral_radius(A, tol = 0.01, # m, max_index = findmax(abs.(ev)) m, max_index = findmaxabs(ev) error = H[nvecs, nvecs-1] * evect[end, max_index] + @static if VERSION < v"0.7-" + @views A_mul_B!(v0, X, evect[:, max_index]) + else + @views mul!(v0, X, evect[:, max_index]) + end if (abs(error) / abs(ev[max_index]) < tol) || flag # v0 = X * evect[:, max_index] - A_mul_B!(v0, X, evect[:, max_index]) break - else - # v0 = X * evect[:, max_index] - A_mul_B!(v0, X, evect[:, max_index]) end end - ρ = abs(ev[max_index]) - end + function findmaxabs(arr) m = abs(arr[1]) m_i = 1 @@ -70,7 +78,7 @@ function approximate_eigenvalues(A, tol, maxiter, symmetric, v0) w = A * V[end] # V[j+1] = A * V[j] # w = V[j+1] - # A_mul_B!(w, A, V[j]) + # mul!(w, A, V[j]) for (i,v) in enumerate(V) # for i = 1:j v = V[i] @@ -81,17 +89,21 @@ function approximate_eigenvalues(A, tol, maxiter, symmetric, v0) if H[j+1, j] < breakdown flag = true if H[j+1,j] != 0 - scale!(w, 1/H[j+1,j]) + rmul!(w, 1/H[j+1,j]) push!(V, w) break end end #w = w / H[j+1, j] - scale!(w, 1/H[j+1,j]) + rmul!(w, 1/H[j+1,j]) push!(V, w) end - Eigs, Vects = eig(H[1:maxiter, 1:maxiter], eye(eltype(A), maxiter)) + @static if VERSION < v"0.7-" + Eigs, Vects = eig(H[1:maxiter, 1:maxiter], Matrix{eltype(A)}(I, maxiter, maxiter)) + else + Eigs, Vects = (eigen(H[1:maxiter, 1:maxiter], Matrix{eltype(A)}(I, maxiter, maxiter))...,) + end Vects, Eigs, H, V, flag end diff --git a/test/REQUIRE b/test/REQUIRE index 1b9872d..e69de29 100644 --- a/test/REQUIRE +++ b/test/REQUIRE @@ -1 +0,0 @@ -JLD diff --git a/test/gmg.jl b/test/gmg.jl index a1e133f..29ee885 100644 --- a/test/gmg.jl +++ b/test/gmg.jl @@ -1,19 +1,23 @@ -import AMG: Level, MultiLevel, GaussSeidel +import AlgebraicMultigrid: Level, MultiLevel, GaussSeidel -function multigrid(A::SparseMatrixCSC{T,V}; max_levels = 10, max_coarse = 10, - presmoother = GaussSeidel(), postsmoother = GaussSeidel()) where {T,V} +function multigrid(A::TA; max_levels = 10, max_coarse = 10, + presmoother = GaussSeidel(), postsmoother = GaussSeidel()) where {T,V,TA<:SparseMatrixCSC{T,V}} - levels = Vector{Level{T,V}}() + levels = Vector{Level{TA,TA,TA}}() + w = AlgebraicMultigrid.MultiLevelWorkspace(Val{1}, eltype(A)) while length(levels) + 1 < max_levels && size(A, 1) > max_coarse + AlgebraicMultigrid.residual!(w, size(A, 1)) A = extend!(levels, A) + AlgebraicMultigrid.coarse_x!(w, size(A, 1)) + AlgebraicMultigrid.coarse_b!(w, size(A, 1)) #=if size(A, 1) <= max_coarse # push!(levels, Level(A,spzeros(T,0,0),spzeros(T,0,0))) break end=# end - MultiLevel(levels, A, presmoother, postsmoother) + MultiLevel(levels, A, Pinv(A), presmoother, postsmoother, w) end function extend!(levels, A::SparseMatrixCSC{Ti,Tv}) where {Ti,Tv} @@ -22,9 +26,9 @@ function extend!(levels, A::SparseMatrixCSC{Ti,Tv}) where {Ti,Tv} size_C = rem(size_F,2) == 0 ? div((size_F-1), 2) +1 : div((size_F-1), 2) total_len = size_C + 2 * (size_C - 1) - I = Vector{Tv}(total_len) - J = Vector{Tv}(total_len) - V = Vector{Ti}(total_len) + I = Vector{Tv}(undef, total_len) + J = Vector{Tv}(undef, total_len) + V = Vector{Ti}(undef, total_len) l = 1 for k = 1:size_C @@ -39,7 +43,7 @@ function extend!(levels, A::SparseMatrixCSC{Ti,Tv}) where {Ti,Tv} P = sparse(I, J, V, size_F, size_C) - R = transpose(P) + R = AlgebraicMultigrid.adjoint(P) push!(levels, Level(A, P, R)) diff --git a/test/onetoall.jl b/test/onetoall.jl new file mode 100644 index 0000000..eae315c --- /dev/null +++ b/test/onetoall.jl @@ -0,0 +1,5 @@ +Gm, Gn = 42, 42; +Gcolptr = [1, 3, 7, 11, 14, 16, 20, 25, 29, 32, 36, 41, 45, 51, 55, 59, 64, 68, 72, 76, 81, 84, 87, 92, 96, 100, 103, 105, 109, 114, 118, 122, 127, 131, 135, 140, 144, 146, 148, 151, 154, 157, 159]; +Growval = [1, 2, 1, 2, 3, 6, 2, 3, 4, 7, 3, 4, 8, 5, 9, 2, 6, 7, 10, 3, 6, 7, 8, 11, 4, 7, 8, 12, 5, 9, 13, 6, 10, 11, 15, 7, 10, 11, 12, 16, 8, 11, 12, 17, 9, 13, 14, 18, 23, 28, 13, 14, 15, 18, 10, 14, 15, 16, 11, 15, 16, 17, 19, 12, 16, 17, 20, 13, 14, 18, 23, 16, 19, 20, 25, 17, 19, 20, 21, 26, 20, 21, 22, 21, 22, 27, 13, 18, 23, 24, 29, 23, 24, 25, 30, 19, 24, 25, 26, 20, 25, 26, 22, 27, 13, 28, 29, 31, 23, 28, 29, 30, 32, 24, 29, 30, 33, 28, 31, 32, 34, 29, 31, 32, 33, 35, 30, 32, 33, 36, 31, 34, 35, 40, 32, 34, 35, 36, 41, 33, 35, 36, 37, 36, 37, 38, 39, 38, 39, 42, 34, 40, 41, 35, 40, 41, 39, 42]; +Gnzval = [-1.0666666666666667, 0.4, 0.4, -1.0857142857142859, 0.2857142857142857, 0.4, 0.2857142857142857, -0.8412698412698412, 0.2222222222222222, 0.3333333333333333, 0.2222222222222222, -0.5079365079365079, 0.2857142857142857, -1.0666666666666667, 0.4, 0.4, -1.5666666666666667, 0.5, 0.6666666666666666, 0.3333333333333333, 0.5, -2.0, 0.5, 0.6666666666666666, 0.2857142857142857, 0.5, -1.4523809523809523, 0.6666666666666666, 0.4, -0.6857142857142857, 0.2857142857142857, 0.6666666666666666, -2.6666666666666665, 1.0, 1.0, 0.6666666666666666, 1.0, -3.6666666666666665, 1.0, 1.0, 0.6666666666666666, 1.0, -2.6666666666666665, 1.0, 0.2857142857142857, -1.4228937728937727, 0.4, 0.3333333333333333, 0.25, 0.15384615384615385, 0.4, -2.4, 1.0, 1.0, 1.0, 1.0, -3.0, 1.0, 1.0, 1.0, -4.0, 1.0, 1.0, 1.0, 1.0, -3.0, 1.0, 0.3333333333333333, 1.0, -2.0, 0.6666666666666666, 1.0, -2.6666666666666665, 1.0, 0.6666666666666666, 1.0, 1.0, -2.9166666666666665, 0.25, 0.6666666666666666, 0.25, -0.7222222222222222, 0.25, 0.25, -0.9166666666666666, 0.6666666666666666, 0.25, 0.6666666666666666, -2.083333333333333, 0.5, 0.6666666666666666, 0.5, -1.6666666666666665, 0.5, 0.6666666666666666, 0.6666666666666666, 0.5, -1.6666666666666665, 0.5, 0.6666666666666666, 0.5, -1.6666666666666665, 0.6666666666666666, -1.1666666666666665, 0.15384615384615385, -0.5371794871794872, 0.25, 0.13333333333333333, 0.6666666666666666, 0.25, -2.9166666666666665, 1.0, 1.0, 0.6666666666666666, 1.0, -2.6666666666666665, 1.0, 0.13333333333333333, -0.47320261437908495, 0.2222222222222222, 0.11764705882352941, 1.0, 0.2222222222222222, -3.2222222222222223, 1.0, 1.0, 1.0, 1.0, -3.0, 1.0, 0.11764705882352941, -0.42291021671826623, 0.2, 0.10526315789473684, 1.0, 0.2, -3.2, 1.0, 1.0, 1.0, 1.0, -4.0, 1.0, 1.0, -2.6666666666666665, -2.4, 1.0, 1.0, -1.3333333333333333, 0.3333333333333333, 0.10526315789473684, -0.28708133971291866, 0.18181818181818182, 1.0, 0.18181818181818182, -2.1818181818181817, 0.3333333333333333, -0.5555555555555556]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/onetoall.jld b/test/onetoall.jld deleted file mode 100644 index 4823974..0000000 Binary files a/test/onetoall.jld and /dev/null differ diff --git a/test/randlap.jl b/test/randlap.jl new file mode 100644 index 0000000..7776359 --- /dev/null +++ b/test/randlap.jl @@ -0,0 +1,5 @@ +Gm, Gn = 100, 100; +Gcolptr = [1, 22, 42, 69, 89, 106, 123, 141, 162, 178, 203, 222, 249, 268, 289, 314, 335, 357, 379, 403, 422, 448, 470, 491, 515, 538, 558, 573, 590, 607, 626, 655, 675, 694, 717, 734, 756, 779, 806, 827, 843, 860, 877, 903, 928, 949, 965, 983, 1002, 1028, 1050, 1064, 1090, 1116, 1133, 1152, 1177, 1190, 1210, 1236, 1257, 1276, 1302, 1325, 1342, 1355, 1374, 1398, 1407, 1431, 1447, 1468, 1482, 1509, 1526, 1548, 1568, 1595, 1621, 1652, 1679, 1694, 1722, 1736, 1753, 1771, 1791, 1815, 1832, 1848, 1866, 1881, 1901, 1931, 1954, 1972, 1991, 2004, 2024, 2040, 2067]; +Growval = [1, 3, 6, 8, 16, 18, 22, 36, 37, 42, 45, 51, 52, 59, 66, 87, 90, 93, 94, 97, 100, 2, 4, 9, 10, 15, 26, 28, 35, 40, 42, 46, 47, 50, 52, 53, 77, 80, 85, 92, 94, 1, 3, 8, 9, 10, 11, 15, 16, 17, 19, 21, 22, 32, 35, 39, 42, 49, 50, 56, 58, 61, 65, 66, 77, 80, 82, 98, 2, 4, 6, 15, 19, 24, 25, 29, 36, 40, 47, 53, 59, 73, 78, 85, 87, 88, 89, 100, 5, 6, 11, 13, 21, 28, 30, 36, 39, 43, 44, 47, 59, 77, 82, 93, 98, 1, 4, 5, 6, 18, 22, 24, 50, 57, 63, 64, 75, 78, 87, 90, 91, 100, 7, 13, 15, 19, 21, 25, 26, 34, 36, 38, 56, 57, 59, 60, 67, 70, 78, 90, 1, 3, 8, 19, 20, 24, 30, 33, 35, 45, 56, 63, 69, 70, 73, 74, 80, 82, 89, 91, 94, 2, 3, 9, 14, 22, 25, 36, 37, 40, 44, 48, 50, 56, 59, 75, 93, 2, 3, 10, 11, 13, 16, 35, 38, 41, 43, 44, 46, 47, 55, 60, 61, 62, 63, 71, 81, 82, 83, 87, 92, 96, 3, 5, 10, 11, 13, 23, 24, 27, 29, 38, 39, 47, 50, 52, 55, 73, 76, 89, 93, 12, 20, 22, 24, 28, 32, 39, 47, 49, 50, 57, 63, 64, 67, 69, 70, 71, 72, 73, 78, 79, 86, 91, 93, 95, 98, 100, 5, 7, 10, 11, 13, 16, 17, 22, 28, 34, 41, 43, 49, 54, 55, 67, 78, 79, 100, 9, 14, 23, 27, 28, 32, 36, 37, 38, 40, 49, 54, 57, 65, 67, 69, 73, 77, 81, 88, 90, 2, 3, 4, 7, 15, 20, 27, 30, 31, 38, 39, 43, 44, 47, 53, 62, 71, 75, 82, 87, 89, 95, 98, 99, 100, 1, 3, 10, 13, 16, 19, 27, 31, 32, 38, 40, 42, 44, 46, 50, 55, 61, 73, 78, 94, 95, 3, 13, 17, 19, 21, 26, 29, 39, 52, 53, 55, 61, 62, 68, 70, 79, 80, 81, 83, 87, 92, 99, 1, 6, 18, 19, 21, 26, 34, 37, 43, 46, 51, 52, 53, 64, 65, 78, 79, 82, 91, 93, 94, 96, 3, 4, 7, 8, 16, 17, 18, 19, 33, 36, 43, 48, 51, 58, 60, 62, 67, 69, 73, 90, 93, 94, 95, 100, 8, 12, 15, 20, 21, 22, 32, 55, 56, 61, 63, 69, 70, 73, 78, 85, 86, 91, 98, 3, 5, 7, 17, 18, 20, 21, 28, 29, 31, 32, 35, 36, 43, 45, 48, 52, 53, 55, 60, 66, 74, 77, 81, 82, 87, 1, 3, 6, 9, 12, 13, 20, 22, 23, 31, 38, 44, 48, 50, 53, 54, 63, 75, 76, 85, 89, 100, 11, 14, 22, 23, 34, 38, 52, 53, 59, 69, 76, 78, 79, 84, 86, 91, 92, 93, 94, 95, 99, 4, 6, 8, 11, 12, 24, 26, 31, 36, 37, 38, 39, 48, 50, 52, 53, 57, 74, 76, 82, 83, 89, 97, 98, 4, 7, 9, 25, 30, 33, 34, 41, 43, 45, 46, 49, 51, 56, 62, 63, 64, 66, 69, 71, 77, 81, 87, 2, 7, 17, 18, 24, 26, 29, 38, 46, 51, 55, 58, 67, 69, 71, 73, 76, 78, 79, 80, 11, 14, 15, 16, 27, 31, 41, 43, 56, 60, 69, 71, 90, 93, 96, 2, 5, 12, 13, 14, 21, 28, 31, 41, 42, 49, 52, 60, 62, 66, 75, 84, 4, 11, 17, 21, 26, 29, 31, 33, 40, 46, 61, 72, 73, 79, 88, 96, 99, 5, 8, 15, 25, 30, 34, 39, 41, 44, 49, 51, 59, 62, 63, 66, 73, 82, 83, 94, 15, 16, 21, 22, 24, 27, 28, 29, 31, 32, 34, 36, 39, 45, 48, 50, 52, 53, 60, 71, 75, 77, 79, 80, 82, 86, 96, 98, 100, 3, 12, 14, 16, 20, 21, 31, 32, 33, 34, 48, 49, 64, 65, 69, 73, 74, 76, 79, 81, 8, 19, 25, 29, 32, 33, 40, 49, 67, 71, 73, 74, 79, 80, 82, 84, 85, 97, 98, 7, 13, 18, 23, 25, 30, 31, 32, 34, 35, 50, 51, 58, 62, 63, 65, 66, 71, 73, 80, 87, 88, 99, 2, 3, 8, 10, 21, 34, 35, 50, 58, 60, 62, 70, 75, 80, 84, 93, 96, 1, 4, 5, 7, 9, 14, 19, 21, 24, 31, 36, 37, 53, 58, 61, 73, 74, 78, 83, 91, 93, 100, 1, 9, 14, 18, 24, 36, 37, 38, 48, 50, 58, 59, 62, 66, 73, 74, 79, 86, 87, 89, 92, 93, 99, 7, 10, 11, 14, 15, 16, 22, 23, 24, 26, 37, 38, 39, 42, 49, 59, 69, 71, 77, 79, 82, 84, 87, 95, 96, 98, 99, 3, 5, 11, 12, 15, 17, 24, 30, 31, 38, 39, 45, 48, 59, 71, 74, 77, 78, 80, 92, 98, 2, 4, 9, 14, 16, 29, 33, 40, 41, 49, 51, 76, 77, 78, 88, 93, 10, 13, 25, 27, 28, 30, 40, 41, 54, 59, 67, 69, 71, 77, 79, 80, 94, 1, 2, 3, 16, 28, 38, 42, 45, 55, 58, 61, 64, 67, 69, 76, 88, 93, 5, 10, 13, 15, 18, 19, 21, 25, 27, 43, 44, 46, 49, 53, 54, 55, 56, 59, 66, 71, 75, 80, 82, 85, 96, 99, 5, 9, 10, 15, 16, 22, 30, 43, 44, 47, 49, 56, 58, 60, 64, 73, 79, 81, 82, 88, 90, 93, 94, 98, 100, 1, 8, 21, 25, 31, 39, 42, 45, 48, 49, 52, 62, 63, 66, 72, 74, 81, 82, 84, 93, 97, 2, 10, 16, 18, 25, 26, 29, 43, 46, 54, 72, 86, 88, 92, 94, 97, 2, 4, 5, 10, 11, 12, 15, 44, 47, 50, 53, 55, 71, 72, 83, 90, 93, 97, 9, 19, 21, 22, 24, 31, 32, 37, 39, 45, 48, 52, 56, 62, 75, 76, 77, 85, 86, 3, 12, 13, 14, 25, 28, 30, 32, 33, 38, 40, 43, 44, 45, 49, 52, 53, 56, 59, 61, 75, 76, 84, 92, 93, 97, 2, 3, 6, 9, 11, 12, 16, 22, 24, 31, 34, 35, 37, 47, 50, 57, 59, 83, 86, 87, 92, 94, 1, 18, 19, 25, 26, 30, 34, 40, 51, 56, 59, 66, 96, 100, 1, 2, 11, 17, 18, 21, 23, 24, 28, 31, 45, 48, 49, 52, 57, 58, 61, 76, 77, 78, 82, 85, 88, 95, 98, 100, 2, 4, 15, 17, 18, 21, 22, 23, 24, 31, 36, 43, 47, 49, 53, 61, 64, 66, 73, 74, 75, 76, 79, 80, 87, 100, 13, 14, 22, 41, 43, 46, 54, 59, 61, 62, 64, 67, 77, 79, 81, 88, 96, 10, 11, 13, 16, 17, 20, 21, 26, 42, 43, 47, 55, 59, 62, 67, 73, 78, 88, 89, 3, 7, 8, 9, 20, 25, 27, 43, 44, 48, 49, 51, 56, 60, 62, 63, 65, 69, 73, 78, 79, 81, 84, 86, 87, 6, 7, 12, 14, 24, 50, 52, 57, 64, 66, 73, 88, 93, 3, 19, 26, 34, 35, 36, 37, 42, 44, 52, 58, 63, 70, 71, 77, 85, 86, 87, 91, 95, 1, 4, 5, 7, 9, 23, 30, 37, 38, 39, 41, 43, 49, 50, 51, 54, 55, 59, 60, 63, 68, 69, 74, 81, 90, 93, 7, 10, 19, 21, 27, 28, 31, 35, 44, 56, 59, 60, 61, 63, 76, 77, 80, 84, 92, 94, 100, 3, 10, 16, 17, 20, 29, 36, 42, 49, 52, 53, 54, 60, 61, 72, 77, 78, 90, 100, 10, 15, 17, 19, 25, 28, 30, 34, 35, 37, 45, 48, 54, 55, 56, 62, 70, 76, 78, 79, 80, 81, 82, 86, 97, 100, 6, 8, 10, 12, 20, 22, 25, 30, 34, 45, 56, 58, 59, 60, 63, 67, 75, 84, 86, 89, 91, 93, 96, 6, 12, 18, 25, 32, 42, 44, 53, 54, 57, 64, 71, 78, 84, 85, 95, 98, 3, 14, 18, 32, 34, 56, 65, 78, 80, 86, 91, 93, 95, 1, 3, 21, 25, 28, 30, 34, 37, 43, 45, 51, 53, 57, 66, 70, 72, 75, 82, 85, 7, 12, 13, 14, 19, 26, 33, 41, 42, 54, 55, 63, 67, 68, 70, 74, 77, 78, 79, 82, 87, 90, 92, 94, 17, 59, 67, 68, 69, 70, 80, 94, 95, 8, 12, 14, 19, 20, 23, 25, 26, 27, 32, 38, 41, 42, 56, 59, 68, 69, 71, 75, 87, 92, 96, 98, 100, 7, 8, 12, 17, 20, 35, 58, 62, 66, 67, 68, 70, 73, 79, 81, 89, 10, 12, 15, 25, 26, 27, 31, 33, 34, 38, 39, 41, 43, 47, 58, 64, 69, 71, 77, 87, 93, 12, 29, 45, 46, 47, 61, 66, 72, 74, 78, 79, 80, 97, 100, 4, 8, 11, 12, 14, 16, 19, 20, 26, 29, 30, 32, 33, 34, 36, 37, 44, 53, 55, 56, 57, 70, 73, 82, 87, 89, 93, 8, 21, 24, 32, 33, 36, 37, 39, 45, 53, 59, 67, 72, 74, 75, 80, 97, 6, 9, 15, 22, 28, 31, 35, 43, 48, 49, 53, 63, 66, 69, 74, 75, 76, 82, 87, 91, 92, 100, 11, 22, 23, 24, 26, 32, 40, 42, 48, 49, 52, 53, 60, 62, 75, 76, 77, 91, 94, 96, 2, 3, 5, 14, 21, 25, 31, 38, 39, 40, 41, 48, 52, 54, 58, 60, 61, 67, 71, 76, 77, 86, 88, 91, 92, 94, 96, 4, 6, 7, 12, 13, 16, 18, 20, 23, 26, 36, 39, 40, 52, 55, 56, 61, 62, 64, 65, 67, 72, 78, 83, 84, 90, 12, 13, 17, 18, 23, 26, 29, 31, 32, 33, 37, 38, 41, 44, 53, 54, 56, 62, 67, 70, 72, 79, 82, 87, 90, 92, 93, 94, 97, 98, 99, 2, 3, 8, 17, 26, 31, 33, 34, 35, 39, 41, 43, 53, 60, 62, 65, 68, 72, 74, 80, 83, 84, 85, 93, 95, 96, 99, 10, 14, 17, 21, 25, 32, 44, 45, 54, 56, 59, 62, 70, 81, 99, 3, 5, 8, 10, 15, 18, 21, 24, 30, 31, 33, 38, 43, 44, 45, 52, 62, 66, 67, 73, 75, 79, 82, 84, 89, 90, 92, 95, 10, 17, 24, 30, 36, 47, 50, 78, 80, 83, 85, 88, 96, 100, 23, 28, 33, 35, 38, 45, 49, 56, 60, 63, 64, 78, 80, 82, 84, 90, 94, 2, 4, 20, 22, 33, 43, 48, 52, 58, 64, 66, 80, 83, 85, 95, 98, 99, 100, 12, 20, 23, 31, 37, 46, 48, 50, 56, 58, 62, 63, 65, 77, 86, 89, 93, 94, 98, 99, 1, 4, 6, 10, 15, 17, 21, 25, 34, 37, 38, 50, 53, 56, 58, 67, 69, 71, 73, 75, 79, 87, 95, 99, 4, 14, 29, 34, 40, 42, 44, 46, 52, 54, 55, 57, 77, 83, 88, 94, 96, 4, 8, 11, 15, 22, 24, 37, 55, 63, 70, 73, 82, 86, 89, 90, 100, 1, 6, 7, 14, 19, 27, 44, 47, 59, 61, 67, 78, 79, 82, 84, 89, 90, 91, 6, 8, 12, 18, 20, 23, 36, 58, 63, 65, 75, 76, 77, 90, 91, 2, 10, 17, 23, 37, 39, 46, 49, 50, 60, 67, 69, 75, 77, 79, 82, 92, 93, 95, 98, 1, 5, 9, 11, 12, 18, 19, 23, 27, 35, 36, 37, 40, 42, 44, 45, 47, 49, 57, 59, 63, 65, 71, 73, 79, 80, 86, 92, 93, 98, 1, 2, 8, 16, 18, 19, 23, 30, 41, 44, 46, 50, 60, 67, 68, 76, 77, 79, 84, 86, 88, 94, 97, 12, 15, 16, 19, 23, 38, 52, 58, 64, 65, 68, 80, 82, 85, 87, 92, 95, 100, 10, 18, 27, 29, 31, 35, 38, 43, 51, 54, 63, 69, 76, 77, 80, 83, 88, 96, 100, 1, 24, 33, 45, 46, 47, 49, 62, 72, 74, 79, 94, 97, 3, 5, 12, 15, 20, 24, 31, 33, 38, 39, 44, 52, 64, 69, 79, 85, 86, 92, 93, 98, 15, 17, 23, 29, 34, 37, 38, 43, 79, 80, 81, 85, 86, 87, 99, 100, 1, 4, 6, 12, 13, 15, 19, 22, 31, 36, 44, 51, 52, 53, 60, 61, 62, 69, 72, 75, 83, 85, 89, 95, 96, 99, 100]; +Gnzval = [11.049210253673401, -0.30570065342053154, -0.905803706195337, -0.5486462806827126, -0.8243213559107914, -0.31931103423222806, -0.46246587439931064, -0.9841769885098344, -0.37148886053422125, -0.4922975818753703, -0.22964450452196905, -0.5435252370432331, -0.30459684910568474, -0.5627975689918179, -0.9233829232762429, -0.8398922336727683, -0.7981145249934654, -0.5271617620078821, -0.14835492074074264, -0.9350401707195675, -0.022487222839689736, 11.69579864607309, -0.7143926955231628, -0.8256989651858082, -0.6665603644974687, -0.6913841249203949, -0.9922967825341977, -0.30808223251073863, -0.6713716144909807, -0.7721536885543203, -0.22857680109305, -0.5510813864383033, -0.5524462919695232, -0.3053143382397816, -1.5457707675441692, -0.022583597275840805, -0.617003305800838, -0.32770581067592897, -0.6799216244119353, -0.8559009941050417, -0.36755326030160496, -0.30570065342053154, 12.36103638576997, -0.5434753120551996, -0.11343498316350265, -0.14082776550421117, -0.01192461246804366, -0.9460972454534755, -0.9905040303409169, -0.04472615885203024, -0.8513254097009955, -0.034419356416512725, -0.8749394970204205, -0.9465584985068294, -0.080297733393774, -0.3495847159379961, -0.8313915731950678, -0.5239005971497637, -0.3843481311225281, -0.9297897296421593, -0.572451831535215, -0.6865246130144149, -0.04154217920172831, -0.10663551066273791, -0.03882329030859588, -0.8186557301057427, -0.3248196736347324, -0.8683375539628453, -0.7143926955231628, 11.580007257599744, -0.4230602210666581, -1.1338612803176376, -0.8817576855470557, -0.05640515398514645, -0.6418161824184287, -0.6910501139205614, -0.5603246929611738, -0.08889372569112375, -0.5988507108501036, -0.8169604139190232, -0.08180873286415236, -1.3730673676708254, -0.22099015878050166, -0.7651513605979896, -0.637919830089438, -0.9943492161225798, -0.4082728512217113, -0.49107486405247136, 7.622451321701211, -0.1250456151068069, -0.5410845503607156, -0.12422565343156133, -0.024147142462195736, -0.12468301140307081, -0.2580684969526328, -0.021895090464451705, -0.3038977454887539, -0.6394129974111553, -1.5240046691565643, -0.8279012959859486, -0.1278385178848085, -0.9220718502238312, -0.5516410414426027, -0.954391552129005, -0.5521420917971065, -0.905803706195337, -0.4230602210666581, -0.1250456151068069, 8.007403328386463, -0.5872716724142355, -0.6678487952960217, -0.7998624991923358, -0.31688366347318575, -0.6713072290824307, -0.25626559986702313, -0.4768505020573308, -0.9070184044368812, -0.264911310717008, -0.5227425067314215, -0.22106143726159222, -0.45758297444788987, -0.403887191040305, 11.037467631649733, -0.47165925978831624, -0.3969650395624289, -0.8195092963351773, -0.9934981630682629, -0.20032515342137258, -0.10681061642688716, -0.7182826898606698, -0.8951860999401184, -0.6613228765703683, -0.5558496451988013, -0.18989135832899962, -0.7668121880463186, -1.2477415369651164, -0.8534971586100903, -0.5935078507907501, -0.6622042314371697, -0.9044044672988854, -0.5486462806827126, -0.5434753120551996, 9.79388238506617, -0.10979127065800554, -0.8384429740234149, -0.21485624956104643, -0.10932996770310255, -0.649922665665174, -0.9460509094346983, -0.5175755782668303, -0.20257139397450907, -0.4500054138219838, -0.2564708106494049, -0.97796779789206, -0.24495910867397375, -0.9636054262758076, -0.8520044849841384, -0.7425930531114051, -0.17854646291335197, -0.36642919784071104, -0.08063802687864108, -0.8256989651858082, -0.11343498316350265, 8.06505576342701, -1.2039249928452818, -0.3276332486808824, -0.6804452698755388, -0.5251040465719641, -0.1116429064216573, -0.5720927686156287, -0.7830134201928025, -0.07519909733706176, -0.5345407426173243, -0.656357983582869, -0.9978004344209452, -0.057560643005053924, -0.6006062609106879, -0.6665603644974687, -0.14082776550421117, 8.518504557264425, -0.6615110201397072, -0.16321876828513626, -0.001151951745084645, -0.3182212708570791, -0.36087764709333725, -0.4199989619367863, -0.22120106513824078, -0.08755063547457254, -0.11665893787030113, -0.5712185739700724, -0.12069224524660083, -0.06085931716484083, -0.527429723681659, -0.8476043151912853, -0.6205446202950187, -0.1791165172359801, -0.4748101508811371, -0.03932836265363937, -0.8199035803926842, -0.3240120030671727, -0.7179519497517932, -0.05725480919061554, -0.01192461246804366, -0.5410845503607156, -0.6615110201397072, 10.54629266122914, -0.847313917156741, -0.36537648116817545, -0.09693233195470485, -0.8899698110006229, -0.44972910186733683, -0.681895830797288, -0.18225332539430195, -0.7614160970648216, -0.27520537132991785, -0.7730871536239041, -0.9481690743269224, -0.12914428954218837, -1.76846747041627, -0.3957493697675798, -0.7670628528498982, 13.586540219224695, -0.7463230006241537, -0.203732253961469, -0.490221371669872, -0.3918539213731762, -0.6550460130374118, -0.9512131954088192, -0.8251170624667956, -0.5061287037151805, -0.4185082653337875, -0.8723385198267206, -0.7815462421607451, -0.3928700705877739, -0.18129536119261935, -0.7013813480094384, -0.1118859987483034, -0.13991874135332782, -0.30251736752343716, -0.473319464138362, -0.9923018049228953, -0.1424377352680326, -0.35602171313695496, -0.9722237677171546, -0.504966569994904, -0.2664719256186341, -0.27931623025521257, -0.9275835711795133, -0.12422565343156133, -0.47165925978831624, -0.16321876828513626, -0.847313917156741, 8.868130498085305, -0.16688184693792518, -0.13194408301446692, -0.8291622972561545, -0.4678567699941558, -0.9114202239352542, -0.8700391990478351, -0.6465629803533945, -0.7699945477585401, -0.5662642734575563, -0.2619702847509826, -0.195519230175359, -0.7599425621729325, -0.6282796964620732, -0.05587490410692042, -1.2039249928452818, 10.041258807451737, -0.9585857070040449, -0.40077503330261766, -0.2864174985553869, -0.37906308219118445, -0.9067446167441886, -0.8161143481015705, -0.33709844105885356, -0.008008628142579521, -0.04025363659833947, -0.08677187465481406, -0.7552855936291201, -0.7595402125829787, -0.8855933927248747, -0.3243272135191342, -0.20353497564344725, -0.5607046017126742, -0.0013444671182565315, -0.26145504882090886, -0.8657154425014815, -0.6913841249203949, -0.9460972454534755, -1.1338612803176376, -0.3969650395624289, 11.592247265008501, -0.44919234484719994, -0.7368945481814069, -0.37502283520635005, -0.8054051625831287, -0.26210981647446285, -0.036387010210889636, -0.19479755978856184, -0.2747281351556192, -0.04932798215814782, -0.6936969138013196, -0.6708784320805292, -0.03160792090226949, -0.5438285403665997, -0.2296993036631163, -0.17347979416031123, -0.9459164683250751, -0.4297343125880855, -0.8391097592604597, -0.2919422115727788, -0.3901805234282545, -0.8243213559107914, -0.9905040303409169, -0.001151951745084645, -0.16688184693792518, 8.969151580670676, -0.8817172875806134, -0.208879533247879, -0.7893620059380417, -0.38915075995643256, -0.6125984880859863, -0.4078993113088416, -0.4255237049179488, -0.009867795258318157, -0.16407794712371637, -0.1526945062022811, -0.2940902150216069, -0.33689098445081433, -0.24507063856995037, -0.5203417141275968, -0.6461289971578776, -0.9019985067880534, -0.04472615885203024, -0.13194408301446692, 7.07499530731098, -0.09559045549386713, -0.07816655014263518, -0.8555962997802189, -0.020163641505229313, -0.5375284545574046, -0.33999113675759585, -0.18414470239910719, -0.07318437440546677, -0.5446212120838012, -0.9120839300830221, -0.19329991648173483, -0.2232595012298182, -0.013912838135412775, -0.24296151388645537, -0.4777307185881361, -0.5001132304901748, -0.55544712396171, -0.8830249290720291, -0.16750453639066376, -0.31931103423222806, -0.5872716724142355, 12.24816041437517, -0.7417224395995572, -0.19416430997599843, -0.6196989980457792, -0.6439804248875531, -0.6449301277609898, -0.5018342155993363, -0.969235476535079, -0.25947151956590964, -0.29506619222364217, -0.8168382670319918, -0.6936178675892353, -0.7927951134386042, -0.15293201347807606, -0.603506319650142, -0.8744913699084358, -0.7892823340613053, -0.04384256656449437, -0.9141731616211415, -0.7899949901914345, -0.8513254097009955, -0.8817576855470557, -0.8195092963351773, -0.10979127065800554, -0.8817172875806134, -0.09559045549386713, -0.7417224395995572, 14.693427087404304, -0.4449939577284543, -0.5441998434509558, -0.23752097518149595, -0.6658044138610562, -0.704629617887317, -1.1568801817078156, -0.5922792895889639, -0.28150900934964285, -0.6979596281543703, -0.9284998102962352, -0.6035311675240218, -0.10164627444268404, -0.8648116620377351, -0.8927641863671658, -0.6720862649167656, -0.9228969599943546, -0.8384429740234149, -0.7463230006241537, -0.44919234484719994, 9.06263835707401, -0.14392009436140896, -0.1210960835861028, -0.31555339075870825, -0.10196186412350072, -0.5798649380140739, -0.9250862337531842, -0.9411806879655977, -0.7680072032824106, -0.8702984322509766, -0.6444918421024268, -0.05574872548255616, -0.2554747585202164, -0.47796321713668766, -0.08206460127090032, -0.7459679649704893, -0.034419356416512725, -0.024147142462195736, -0.9934981630682629, -0.07816655014263518, -0.19416430997599843, -0.14392009436140896, 11.705214454244, -0.11824424826631685, -0.3032084772440822, -0.651767712260664, -0.7167850878983919, -0.43708593012999897, -0.3807684566133518, -0.3592512207164684, -0.7392692147482314, -0.17773086289321838, -0.393231607740824, -0.6537495091003236, -0.6238538366759847, -0.8189640022579967, -1.075691221452822, -0.8982628680559843, -0.49268880608499543, -0.9697030405971934, -0.1883020983576198, -0.23834063672251937, -0.46246587439931064, -0.8749394970204205, -0.6678487952960217, -0.3276332486808824, -0.203732253961469, -0.8291622972561545, -0.1210960835861028, 13.711839617277578, -0.7562381288540707, -0.6965146195012797, -0.9622411231921082, -0.24314086525162226, -0.7184565784357972, -0.8731777860813359, -0.9535368122004706, -0.8539089250025051, -0.8805319508228346, -0.2586840805353656, -0.6256795934166484, -0.9782308664848147, -0.45189660226998885, -0.9727236350283752, -0.36537648116817545, -0.9585857070040449, -0.7562381288540707, 9.051039989617767, -0.4939842231338163, -0.4293790911257105, -0.5134198805385135, -0.21135141527612866, -0.17931628532697164, -0.11738339017674537, -0.6374437388890768, -0.977911111572237, -0.1850833824998659, -0.33613152898443266, -0.35755548533189563, -0.25614935915915793, -0.9933101940184865, -0.047343099390839916, -0.2373939964593581, -0.6922413302954813, -0.3054421604127602, -0.05640515398514645, -0.7998624991923358, -0.21485624956104643, -0.09693233195470485, -0.490221371669872, 12.607952034233985, -0.8031106650968678, -0.9257841898448309, -0.8721690574259171, -0.2725785687235176, -0.854923216696402, -0.5083861565297865, -0.06146707632026982, -0.648098662710743, -0.8427281329892025, -0.6750412963204047, -0.9971534789959651, -0.2659963570027344, -0.027511185640656022, -0.9533492310119924, -0.3179695024945324, -0.6107340401662686, -0.827485278041241, -0.48518833185954935, -0.6418161824184287, -0.20032515342137258, -0.6804452698755388, 12.438455647682233, -0.5673314704401973, -0.43994398514057886, -0.6420757318629053, -0.5964407929972335, -0.3991392056007088, -0.6123891255485969, -0.5468297182467701, -0.8454990015478323, -0.11730044014239582, -0.9880390097382523, -0.34472701899117975, -0.8052022924903093, -0.06807357023827776, -0.8384549679358853, -1.4267157766332097, -0.022102813898072338, -0.9175764902162105, -0.24319885334875235, -0.4948287769495232, -0.9922967825341977, -0.10681061642688716, -0.8555962997802189, -0.6196989980457792, -0.8031106650968678, 10.118656031476357, -0.41188473416528093, -0.327811213232275, -0.40806841445669106, -0.7856578997376429, -0.19016006717931355, -0.8112432954571449, -0.13901944292708346, -0.41600700958167836, -0.9243880136220362, -0.5650512998981789, -0.12913942983313764, -0.3841390327551619, -0.6507971104239889, -0.5977757063227913, -0.8899698110006229, -0.40077503330261766, -0.7368945481814069, -0.208879533247879, 9.679415739116935, -0.5000150215470842, -0.9541125075000254, -0.689522692342599, -0.8195594012995251, -0.5243482618232198, -0.9933418942509429, -0.999679998704398, -0.41911982248055524, -0.9081726300174722, -0.6350245834185881, -0.30808223251073863, -0.12468301140307081, -0.3918539213731762, -0.4678567699941558, -0.2864174985553869, -0.11824424826631685, 8.104587111469222, -0.26719200827955847, -0.34797627991820845, -0.2388799704635538, -1.2484567947164569, -0.5914178376261763, -0.5561709156887298, -0.6532926465141342, -0.9848574215601498, -0.7454906726873369, -0.7737148819120725, -0.6910501139205614, -0.44972910186733683, -0.020163641505229313, -0.3032084772440822, -0.41188473416528093, 8.25440222734918, -0.3066244218981531, -0.3121379723857436, -0.21447358421554275, -0.6606722040622683, -0.8655095412230072, -0.9361854086634398, -0.4731019333869735, -0.81390181947003, -0.9100425313491673, -0.7655386459702904, -0.12017809602207286, -0.2580684969526328, -0.10932996770310255, -0.37502283520635005, -0.5673314704401973, 10.75245037567615, -0.9257381658496311, -0.4321754405996028, -1.3585480054567127, -0.5941416419724268, -0.707921191489812, -0.42144167085403583, -0.025176757587499488, -0.923774966211045, -0.25949695231450476, -0.9714304003104139, -0.1222037720143947, -0.7500976155763743, -0.9944386252678967, -0.9561123998695162, -0.8054051625831287, -0.7893620059380417, -0.651767712260664, -0.6965146195012797, -0.9257841898448309, -0.5000150215470842, -0.26719200827955847, -0.3066244218981531, 12.871407578858525, -0.6023012252996598, -0.1331431956556648, -0.6033382386134358, -0.04203712793910719, -0.48529936854631583, -0.3771925659931743, -0.305833802475038, -0.7180880561370073, -0.9347945272342162, -0.467732105961137, -0.9679186820778418, -0.302456648543836, -0.3123054179289535, -0.01919901559187176, -0.16126731700918007, -0.41308371598256244, -0.32838823354784763, -0.3562725153103399, -0.06089155325573237, -0.33719912390286155, -0.9465584985068294, -0.6550460130374118, -0.37906308219118445, -0.38915075995643256, -0.31555339075870825, -0.7167850878983919, -0.6023012252996598, 10.011764519660563, -0.0656522457367621, -0.14425359639402502, -0.15922087943628904, -0.5045206099801185, -0.5795697854651862, -0.9550029735477841, -0.5077604779042135, -0.7167887048485948, -0.05398656168242022, -0.9965691677751003, -0.958313958375463, -0.36566750086598865, -0.649922665665174, -0.4449939577284543, -0.43994398514057886, -0.3121379723857436, -0.0656522457367621, 9.181725834227516, -0.5915116773222644, -0.7495407638307536, -0.5436273390960078, -0.9409308732581374, -0.3375159286897407, -0.7875401680900798, -0.379011220612518, -0.22545552849150985, -0.10735497645638614, -0.5194938393704118, -0.9992300825494427, -0.7038788766592174, -0.38398373314433343, -0.7182826898606698, -0.9114202239352542, -0.6439804248875531, -0.4939842231338163, -0.6420757318629053, -0.9257381658496311, -0.1331431956556648, -0.14425359639402502, 13.167646650708564, -0.21508893280150154, -0.813066644670323, -0.667722147580442, -0.8156487233194982, -0.3209251786340577, -0.7461992195042368, -0.7021182893491835, -0.3267256101975138, -0.7129023446054965, -0.9299700766314636, -0.6396592859883623, -0.10989026284023073, -0.5657016816073326, -0.9891500013994039, -0.6713716144909807, -0.080297733393774, -0.9460509094346983, -0.3182212708570791, -0.43708593012999897, -0.21508893280150154, 7.938284661128064, -0.7246654126541048, -0.16663293526589684, -1.0580399677165686, -0.12282823292368361, -0.22595618505340287, -0.9025467764252793, -0.7268280636664082, -0.0948773928697011, -0.9501915306489026, -0.29760177279608135, -0.9841769885098344, -0.5603246929611738, -0.021895090464451705, -0.8951860999401184, -0.5251040465719641, -0.9067446167441886, -0.5441998434509558, -0.3807684566133518, -0.8721690574259171, -0.6033382386134358, 12.831983416894492, -0.8757043684156682, -0.27008484636960595, -0.37915745114767896, -0.3935805450220833, -0.4062099787185429, -0.548563593771904, -0.25650038050763313, -0.8931836707721248, -0.21774655958825373, -1.8819864639475046, -0.415358427338101, -0.37148886053422125, -0.1116429064216573, -0.8161143481015705, -0.6449301277609898, -0.2725785687235176, -0.8757043684156682, 11.675844749093324, -0.46000541263760764, -0.5127368374554035, -0.05078608734569512, -0.5206678110963621, -0.6638750833609075, -0.4522816561092462, -0.661502716737584, -0.5833238345958078, -0.0380548689640694, -1.3714525194241796, -0.7015236152363729, -0.5401332649446173, -0.6731372698712614, -0.3707569265866897, -0.1738180776092173, -0.809329587160676, -0.6613228765703683, -0.36087764709333725, -0.681895830797288, -0.33709844105885356, -0.26210981647446285, -0.6125984880859863, -0.9622411231921082, -0.4293790911257105, -0.854923216696402, -0.327811213232275, -0.46000541263760764, 14.662062263808371, -0.2586158459189638, -0.40734859654680156, -0.7856116468584462, -0.508107095700737, -0.821675913713954, -0.45759688688501865, -0.7090101180192818, -0.8866080943161159, -0.6624352107832201, -0.8838736299628374, -0.6176098541886701, -0.8828216032169565, -0.2691553052764686, -0.42542666758149683, -0.13590263787500034, -0.3495847159379961, -0.3038977454887539, -0.18225332539430195, -0.9512131954088192, -0.036387010210889636, -0.5375284545574046, -0.5083861565297865, -0.4321754405996028, -0.04203712793910719, -0.2586158459189638, 9.163323979848956, -0.6549955132487466, -0.8758363630991788, -0.29745399276323337, -0.2114956095292635, -0.827388455259159, -0.05925518307237043, -0.9849768023447518, -0.919321373711989, -0.591128466305826, -0.13939320252880982, -0.7721536885543203, -0.08889372569112375, -0.5720927686156287, -0.008008628142579521, -0.4078993113088416, -0.21447358421554275, -0.5915116773222644, 8.130809411138515, -0.8233045267960766, -0.9926104257295494, -0.2406666363181995, -0.2508014867915729, -0.8623498024241238, -0.9535671027782069, -0.8589581000145132, -0.49351794643597025, -0.4199989619367863, -0.8700391990478351, -0.5964407929972335, -0.9541125075000254, -0.34797627991820845, -1.3585480054567127, -0.8233045267960766, 8.9773678899212, -0.846731415901818, -0.030583945173830784, -0.8234760829618897, -0.26552506428102385, -0.48912032319931, -0.3497629641499387, -0.03349994741046869, -0.7455594748307179, -0.02268839835932468, -0.4922975818753703, -0.22857680109305, -0.8313915731950678, -0.4255237049179488, -0.2388799704635538, -0.40734859654680156, 6.72117710810517, -0.05374372191389276, -0.2677747648571114, -0.16562102744089047, -0.8792096350193037, -0.8178099465101074, -0.39997516426263746, -0.2076899218736563, -0.5445357536593562, -0.6473241578340836, -0.11347478664233934, -0.6394129974111553, -0.22120106513824078, -0.6465629803533945, -0.19479755978856184, -0.5018342155993363, -0.23752097518149595, -0.3592512207164684, -0.3991392056007088, -0.689522692342599, 13.100826403508002, -0.4739761640119662, -0.6997435273012329, -0.7373905443968534, -0.7092210301094077, -0.47125274256306415, -0.9224565571981902, -0.8881790860921817, -0.7902476556340827, -0.24673404577072877, -0.7175100718324989, -0.5824252053727317, -0.031276495554763306, -0.5216957173829442, -0.4712583263162118, -0.8692555266234883, -0.07896079521569477, -1.5240046691565643, -0.7830134201928025, -0.08755063547457254, -0.2747281351556192, -0.009867795258318157, -0.24314086525162226, -0.5941416419724268, -0.4739761640119662, 12.309000545382938, -0.5394317645939151, -0.9072951760164571, -0.7255189049897048, -0.053449927785429674, -0.3102695814911316, -0.5640311597396765, -0.49505782927253805, -0.8094552373927979, -0.3122481963493877, -0.11713061015608939, -0.4439055285783302, -0.3982853215552502, -0.5519315169259811, -0.793910138704949, -0.8704542016950014, -0.4262021236624105, -0.22964450452196905, -0.5175755782668303, -0.7392692147482314, -0.6123891255485969, -0.48529936854631583, -0.6549955132487466, -0.05374372191389276, 10.575071024972926, -0.8389997884980509, -0.06165934003401907, -0.9143056100053031, -0.8093001399552857, -0.47381014543644584, -0.04611092728002264, -0.5241666213447769, -0.04102638045394058, -1.7366695935605267, -0.057844730035558234, -0.08508237949315811, -0.8736211075734264, -0.819557234507829, -0.5510813864383033, -0.11665893787030113, -0.16407794712371637, -0.969235476535079, -0.5468297182467701, -0.40806841445669106, -0.6606722040622683, -0.6997435273012329, 6.863521698512263, -0.589067908777795, -0.3882112966088993, -0.08134217167984414, -0.17662739645038705, -0.8152865701329146, -0.45426276238657537, -0.24235598044148499, -0.5524462919695232, -0.5988507108501036, -0.8279012959859486, -0.5712185739700724, -0.7614160970648216, -0.8251170624667956, -0.04932798215814782, -0.5394317645939151, 9.735529683291432, -0.8357009965160682, -0.14606889633644693, -0.1350007114766254, -0.7220671664780822, -0.20548721520043856, -0.6563993736998324, -0.5954279331495635, -0.9490765611667389, -0.7645910502083084, -0.07519909733706176, -0.6658044138610562, -0.17773086289321838, -0.7184565784357972, -0.06146707632026982, -0.3771925659931743, -0.15922087943628904, -0.5127368374554035, -0.8758363630991788, -0.8389997884980509, 9.321555857362762, -0.4200397492578831, -0.3706781596650235, -0.9571081726878841, -0.9933410040284103, -0.5612078754071266, -0.3861508635481834, -0.22336995304314455, -0.9470156163956054, -0.5239005971497637, -0.5061287037151805, -0.7699945477585401, -0.04025363659833947, -0.8454990015478323, -1.2484567947164569, -0.707921191489812, -0.5045206099801185, -0.7495407638307536, -0.7856116468584462, -0.9926104257295494, -0.7373905443968534, -0.9072951760164571, -0.06165934003401907, 16.34530341184262, -0.38698528607839844, -0.27328249512443503, -0.15611579997495273, -0.8282202959236682, -0.6685500588074829, -0.5928279548332942, -0.4968763777842553, -0.9626553306990575, -0.8842032951337915, -0.7650967874785879, -0.949706750182576, -0.3053143382397816, -0.3843481311225281, -0.31688366347318575, -0.5345407426173243, -0.27520537132991785, -0.4185082653337875, -0.1526945062022811, -0.8731777860813359, -0.648098662710743, -0.305833802475038, -0.813066644670323, -0.7246654126541048, -0.05078608734569512, -0.8357009965160682, 10.829802469257402, -0.2700208836829696, -0.3560868551142413, -1.3104435167297623, -0.20955153916394686, -0.23190010357111834, -0.98545894788806, -0.8275162123351905, -0.5435252370432331, -0.25947151956590964, -0.704629617887317, -0.11730044014239582, -0.7856578997376429, -0.42144167085403583, -0.667722147580442, -0.2406666363181995, 7.436410207938996, -0.9926667497829758, -0.9341276558254143, -0.9244373008629085, -0.4380646569066018, -0.40669867543191995, -0.30459684910568474, -1.5457707675441692, -0.7730871536239041, -0.33999113675759585, -0.29506619222364217, -0.393231607740824, -0.5134198805385135, -0.8427281329892025, -0.5914178376261763, -0.7180880561370073, -0.9143056100053031, -0.4200397492578831, -0.38698528607839844, 14.393876342446195, -0.8346422797496875, -0.052290486388985924, -0.0786190273751175, -0.5538590116399038, -0.4050981491900736, -0.885712300608636, -0.07194834833952912, -0.3901816737984607, -0.9601569275007178, -0.7954057492904651, -0.6964104378114733, -0.6308236911248397, -0.022583597275840805, -0.8169604139190232, -0.6936969138013196, -0.18414470239910719, -0.8168382670319918, -0.6537495091003236, -0.9535368122004706, -0.21135141527612866, -0.6750412963204047, -0.9347945272342162, -0.27008484636960595, -0.7092210301094077, -0.14606889633644693, -0.27328249512443503, 14.359142545129007, -0.9883695454442711, -0.31061106653721104, -0.9486214622420148, -1.0281066988949472, -0.93878711592619, -0.8266028242410084, -0.708573195884836, -0.816968218414319, -0.009733706438177059, -0.08447698820372063, -0.33693700040358876, -0.5662642734575563, -0.08677187465481406, -0.8539089250025051, -0.846731415901818, -0.47125274256306415, -0.589067908777795, 7.195715647987099, -0.3872086351651858, -0.11375962292400343, -0.39372704458458707, -0.5930880580272853, -0.07352365831954111, -0.5425341130052295, -0.0364833055639755, -0.9489105332609129, -0.4829876526944967, -0.20949588408432884, -0.12069224524660083, -0.9481690743269224, -0.2619702847509826, -0.2940902150216069, -0.07318437440546677, -0.10196186412350072, -0.6238538366759847, -0.19016006717931355, -0.2677747648571114, -0.9224565571981902, -0.1350007114766254, 7.054232848965125, -0.3734613954126238, -0.6465018698104177, -0.5065803151085138, -0.0058144177598056235, -0.9174315142150586, -0.30838307307180446, -0.356746268324595, -0.9297897296421593, -0.5558496451988013, -0.20257139397450907, -0.656357983582869, -0.5798649380140739, -0.9880390097382523, -0.8195594012995251, -0.8881790860921817, -0.7255189049897048, -0.3706781596650235, -0.15611579997495273, -0.9926667497829758, 14.87592260566278, -0.6833536098448014, -0.4968878870085689, -0.07487476961763018, -0.47242210320594524, -0.7381232613196878, -0.35175941740245564, -0.8419334237717491, -0.9119681797507084, -0.840785179703543, -0.08897176871199708, -0.6768748614312903, -0.8327773419393756, -0.6713072290824307, -0.18989135832899962, -0.8723385198267206, -0.7552855936291201, -0.9971534789959651, -0.2700208836829696, -0.8346422797496875, 7.923163299989832, -0.8009283721392819, -0.5102885813877145, -0.3054473247797549, -0.7607324019057775, -0.9551272764814103, -0.572451831535215, -1.1568801817078156, -0.8112432954571449, -0.8156487233194982, -0.16663293526589684, -0.37915745114767896, -0.5206678110963621, -0.16562102744089047, -0.053449927785429674, -0.052290486388985924, 8.971005931806221, -0.5352811519566929, -0.3339641357304306, -0.4041577343782796, -0.08575814270773296, -0.5542319539355611, -0.7518436041296448, -0.12090324545613118, -0.8825680507240805, -0.6082542416427508, -0.5627975689918179, -0.08180873286415236, -0.1278385178848085, -0.7668121880463186, -0.9978004344209452, -0.17931628532697164, -0.025176757587499488, -0.6638750833609075, -0.508107095700737, -0.29745399276323337, -0.030583945173830784, -0.7902476556340827, -0.8282202959236682, -0.3560868551142413, -0.9341276558254143, -0.3872086351651858, -0.3734613954126238, 11.972587121821597, -0.16021453378826234, -0.8506367696065344, -0.8951354499740645, -0.10248953927750737, -0.5252406305554451, -0.31904229942828843, -0.9477433990008648, -0.2611614049941906, -1.2477415369651164, -0.06085931716484083, -0.5922792895889639, -0.8189640022579967, -0.5243482618232198, -0.5561709156887298, -0.467732105961137, -1.0580399677165686, -0.3102695814911316, -0.6833536098448014, -0.16021453378826234, 10.72139204003552, -0.38430306260307634, -0.36377193112408057, -0.4619607114239819, -0.7243434409375162, -0.5990688875954979, -0.23797469650360004, -0.3542692229166349, -0.30194859069497526, -0.8137783739453859, -0.6865246130144149, -0.527429723681659, -0.33689098445081433, -0.5446212120838012, -0.9250862337531842, -0.8655095412230072, -0.3935805450220833, -0.8792096350193037, -0.6685500588074829, -0.0786190273751175, -0.9883695454442711, -0.11375962292400343, -0.38430306260307634, 10.045819348795913, -0.30011450804003426, -0.7162954432619286, -0.9926211442091528, -0.35231683029409666, -0.292017617588479, -0.8476043151912853, -0.6708784320805292, -0.9120839300830221, -0.28150900934964285, -0.34472701899117975, -0.6532926465141342, -0.923774966211045, -0.3209251786340577, -0.12282823292368361, -0.4522816561092462, -0.8093001399552857, -0.9571081726878841, -0.39372704458458707, -0.6465018698104177, -0.4968878870085689, 15.50217765295239, -0.9042743484795264, -0.4184825265864407, -0.7430873443767347, -0.9311959297416645, -0.7142253682166626, -0.5839840367433586, -0.7300586653414614, -0.5033863049512775, -0.5581332314280845, -0.5819193969526073, -0.25626559986702313, -0.4500054138219838, -0.6205446202950187, -0.7815462421607451, -0.9411806879655977, -0.8805319508228346, -0.8052022924903093, -0.25949695231450476, -0.7461992195042368, -0.47381014543644584, -0.07487476961763018, -0.5352811519566929, -0.8506367696065344, -0.36377193112408057, 11.779090206410586, -0.6311135057836059, -0.0046673095171478884, -0.311965965452196, -0.9093694710580416, -0.019852496194460834, -0.3347645581353962, -0.889001800055712, -0.6390073532303879, -0.4768505020573308, -0.3928700705877739, -0.6936178675892353, -0.06807357023827776, -0.5795697854651862, -0.8178099465101074, -0.5640311597396765, -0.31061106653721104, -0.5930880580272853, -0.8009283721392819, 9.130191737158741, -0.1563824899607167, -0.8532106553699086, -0.4924581366432379, -0.46438036772074454, -0.9805071205563163, -0.8858025680164523, -0.04154217920172831, -0.7595402125829787, -0.7927951134386042, -0.9550029735477841, -0.7021182893491835, -0.47242210320594524, 7.237614926436117, -0.16981471450049712, -0.10306059399889356, -0.9593126694002296, -0.5834948961866246, -1.2113843017373174, -0.4871268792863317, -0.9233829232762429, -0.10663551066273791, -1.075691221452822, -0.8384549679358853, -0.9848574215601498, -0.9714304003104139, -0.3267256101975138, -0.661502716737584, -0.24673404577072877, -0.04611092728002264, -0.9244373008629085, -0.9486214622420148, -0.5102885813877145, 10.896108725616582, -0.6359328835598643, -0.27775565788517165, -0.42276646221944025, -0.5946617594617176, -0.4001188728136498, -0.8534971586100903, -0.18129536119261935, -0.195519230175359, -0.8855933927248747, -0.6979596281543703, -0.13901944292708346, -0.5436273390960078, -0.8234760829618897, -0.39997516426263746, -0.07352365831954111, -0.5065803151085138, -0.6311135057836059, 10.921563162655568, -0.7788655916025229, -0.6492837012235602, -0.6396850514052452, -0.2162775776149639, -0.9616982751386449, -0.050003721609149565, -0.026644272428671067, -0.47310942491655905, -0.21204126520061028, -0.32291746063978843, -0.6598565415592574, -0.19329991648173483, -0.8951354499740645, -0.7788655916025229, 3.8013351262079746, -0.5775817595906021, -0.3035444610997904, -0.07004092250820593, -0.8193464812265749, -0.16352054372447955, -0.2564708106494049, -0.7013813480094384, -0.3243272135191342, -0.9284998102962352, -0.7680072032824106, -0.11738339017674537, -1.4267157766332097, -0.41600700958167836, -0.9933418942509429, -0.5077604779042135, -0.821675913713954, -0.26552506428102385, -0.2076899218736563, -0.7381232613196878, -0.10248953927750737, -0.5775817595906021, 12.487515514481151, -0.2603556964119107, -0.060439418563272174, -0.10798192863435885, -0.5725696888508567, -0.9463628898166316, -0.6297101351941694, -0.7571153626501057, -0.5935078507907501, -0.97796779789206, -0.1118859987483034, -0.2232595012298182, -0.8702984322509766, -0.22595618505340287, -0.3339641357304306, -0.9042743484795264, -0.6359328835598643, -0.6492837012235602, -0.3035444610997904, 8.1309937043379, -0.5923793686523335, -0.2812411480233674, -0.7784306878623337, -0.6490672037413827, -0.1791165172359801, -0.13991874135332782, -0.03160792090226949, -0.022102813898072338, -0.9243880136220362, -0.999679998704398, -0.9679186820778418, -0.9409308732581374, -0.7129023446054965, -0.45759688688501865, -0.2114956095292635, -0.48912032319931, -0.7175100718324989, -0.7220671664780822, -0.4041577343782796, -0.1563824899607167, -0.2603556964119107, 9.613547531944644, -0.19467641349754805, -0.14593966516938783, -0.9356795689450672, -0.30251736752343716, -0.9361854086634398, -0.5241666213447769, -0.3882112966088993, -0.20548721520043856, -0.30011450804003426, -0.27775565788517165, 5.932150431760143, -0.9746936104627897, -0.20649232045795496, -0.27289237817918277, -0.6651369743021611, -0.4965426690892041, -0.3819544040026519, -1.3730673676708254, -0.24495910867397375, -0.12914428954218837, -0.473319464138362, -0.20353497564344725, -0.24507063856995037, -0.6035311675240218, -0.6444918421024268, -0.5650512998981789, -0.4731019333869735, -0.1222037720143947, -0.7167887048485948, -0.3375159286897407, -0.9299700766314636, -0.4062099787185429, -0.5833238345958078, -0.49505782927253805, -1.0281066988949472, -0.0058144177598056235, -0.35175941740245564, -0.3054473247797549, -0.5923793686523335, 12.645911969211205, -0.9100938717413407, -0.5799184259157477, -0.0397939562752323, -0.28625627586815616, -0.9636054262758076, -0.8982628680559843, -0.2659963570027344, -0.05398656168242022, -0.7875401680900798, -0.548563593771904, -0.0380548689640694, -0.827388455259159, -0.04102638045394058, -0.93878711592619, -0.5252406305554451, -0.6396850514052452, -0.9746936104627897, 9.011530406706676, -0.006324173679747913, -0.8213246078326248, -0.6810505372885312, -0.9070184044368812, -0.057560643005053924, -0.5438285403665997, -0.2586840805353656, -0.7454906726873369, -0.302456648543836, -0.9025467764252793, -0.5824252053727317, -0.9933410040284103, -0.5928279548332942, -0.8266028242410084, -0.0046673095171478884, -0.42276646221944025, -0.060439418563272174, -0.006324173679747913, 9.528412089998566, -0.19055069912650358, -0.210609869033892, -0.9386408480869344, -0.11177496400046816, -0.3017057013196258, -0.5681498899757371, -1.76846747041627, -0.6256795934166484, -0.6374437388890768, -0.027511185640656022, -0.12913942983313764, -0.9965691677751003, -0.2508014867915729, -0.5445357536593562, -0.5612078754071266, -0.4968763777842553, -0.5538590116399038, -0.708573195884836, -0.4619607114239819, -0.4184825265864407, -0.19055069912650358, 10.608783423703402, -0.5455103215466353, -0.853018532616926, -0.40538754723620096, -0.4332087980287742, -0.617003305800838, -0.03882329030859588, -0.9220718502238312, -0.5607046017126742, -0.49268880608499543, -0.9175764902162105, -0.3123054179289535, -0.7090101180192818, -0.05925518307237043, -0.8623498024241238, -0.3497629641499387, -0.3861508635481834, -0.4050981491900736, -0.5425341130052295, -0.08575814270773296, -0.7243434409375162, -0.7162954432619286, -0.2162775776149639, -0.19467641349754805, -0.5455103215466353, 12.462217747174003, -0.645947803518383, -0.7401420237895417, -0.17754891849364585, -0.06548030367007573, -0.3754666887334641, -0.7994357137172707, -0.22099015878050166, -0.264911310717008, -0.6622042314371697, -0.9923018049228953, -0.7599425621729325, -0.5203417141275968, -0.15293201347807606, -0.05574872548255616, -0.977911111572237, -0.3841390327551619, -0.25650038050763313, -0.9849768023447518, -0.9535671027782069, -0.885712300608636, -0.9174315142150586, -0.8419334237717491, -0.9926211442091528, -0.7430873443767347, -0.8532106553699086, -0.16981471450049712, -0.9616982751386449, -0.20649232045795496, 14.475172103798892, -0.34333877636650745, -0.21049332948309818, -0.16287135422422372, -0.1424377352680326, -0.6282796964620732, -0.013912838135412775, -0.603506319650142, -0.1850833824998659, -0.6507971104239889, -0.81390181947003, -0.01919901559187176, -0.958313958375463, -0.379011220612518, -1.3714525194241796, -0.8866080943161159, -0.03349994741046869, -0.8094552373927979, -0.816968218414319, -0.0364833055639755, -0.9119681797507084, -0.9311959297416645, -0.050003721609149565, -0.2812411480233674, -0.27289237817918277, 15.32717336124726, -0.4713040551955081, -0.11328730983742208, -0.27507446854149564, -0.6089604616677073, -0.1834798798969819, -0.914936705763602, -0.6986338016350093, -0.7022849102692317, -0.5629999921249755, -0.32770581067592897, -0.8186557301057427, -0.8520044849841384, -0.24296151388645537, -0.5977757063227913, -0.16126731700918007, -0.22545552849150985, -0.6396592859883623, -0.7268280636664082, -0.919321373711989, -0.7455594748307179, -0.031276495554763306, -0.009733706438177059, -0.5990688875954979, -0.7142253682166626, -0.10306059399889356, -0.07004092250820593, -0.6651369743021611, -0.8213246078326248, 12.371944697673946, -0.18305838556854326, -0.2567172048150721, -0.5674977293368415, -0.1192942396786032, -0.7181238351677848, -0.3528152860292699, -0.9033761709576205, -0.4748101508811371, -0.0013444671182565315, -0.4777307185881361, -0.9697030405971934, -0.24319885334875235, -0.36566750086598865, -0.3122481963493877, -1.7366695935605267, -0.9489105332609129, -0.840785179703543, -0.31904229942828843, -0.5839840367433586, -0.7784306878623337, 8.821024434201995, -0.7684991758941795, -0.3248196736347324, -0.5516410414426027, -0.7425930531114051, -0.03932836265363937, -0.2296993036631163, -0.8744913699084358, -0.1883020983576198, -0.9533492310119924, -0.7500976155763743, -0.41308371598256244, -0.10735497645638614, -0.6624352107832201, -0.5216957173829442, -0.11713061015608939, -0.057844730035558234, -0.07194834833952912, -0.7300586653414614, -0.5946617594617176, -0.026644272428671067, -0.9100938717413407, -0.210609869033892, -0.4713040551955081, 11.074865931966865, -0.20716232475976892, -0.16315787566537354, -0.6530448124590265, -0.4511963709596065, -0.051116996424291905, -0.8199035803926842, -0.5001132304901748, -0.3179695024945324, -0.9944386252678967, -0.8931836707721248, -0.6563993736998324, -1.3104435167297623, -0.34333877636650745, -0.18305838556854326, 7.26713111651962, -0.18778979483197222, -0.15995193691351384, -0.8003423870115542, -0.10019833598052252, -0.33613152898443266, -0.7737148819120725, -0.5194938393704118, -0.0948773928697011, -0.8838736299628374, -0.08508237949315811, -0.9626553306990575, -0.08897176871199708, -0.23797469650360004, -0.311965965452196, -0.4924581366432379, -0.21049332948309818, -0.2567172048150721, -0.20716232475976892, 6.227998985580136, -0.32664533148053976, -0.43978124443895483, -0.6799216244119353, -0.7651513605979896, -0.2554747585202164, -0.9782308664848147, -0.9992300825494427, -0.4712583263162118, -0.22336995304314455, -0.3901816737984607, -0.5542319539355611, -0.46438036772074454, -0.4001188728136498, -0.5674977293368415, -0.18778979483197222, 8.903891162033583, -0.371262431816354, -0.7287478307339641, -0.6330630505914558, -0.23398048453082398, -0.35602171313695496, -0.47796321713668766, -0.35755548533189563, -0.32838823354784763, -0.7015236152363729, -0.08134217167984414, -0.9470156163956054, -0.20955153916394686, -0.6768748614312903, -0.7518436041296448, -0.5033863049512775, -0.9093694710580416, -0.9593126694002296, -0.645947803518383, 9.516567353987222, -0.6601724077892837, -0.026935692354183693, -0.53445490231167, -0.2972403143033666, -0.09166773111069904, -0.8398922336727683, -0.637919830089438, -0.5227425067314215, -0.3240120030671727, -0.17347979416031123, -0.55544712396171, -0.23834063672251937, -0.4948287769495232, -0.10989026284023073, -0.5401332649446173, -0.6176098541886701, -0.23190010357111834, -0.08447698820372063, -0.8327773419393756, -0.12090324545613118, -0.47310942491655905, -0.10798192863435885, -0.14593966516938783, -0.5799184259157477, -0.9386408480869344, -0.11328730983742208, 10.378417049718811, -0.17845308479625133, -1.5167323958634216, -0.9943492161225798, -0.26145504882090886, -0.9100425313491673, -0.5657016816073326, -0.8589581000145132, -0.6473241578340836, -0.4439055285783302, -0.17662739645038705, -0.9601569275007178, -0.4829876526944967, -0.30838307307180446, -0.7607324019057775, -0.7401420237895417, -0.15995193691351384, 9.026734252236157, -0.32587878023378725, -0.43013779534921337, -0.4082728512217113, -0.17854646291335197, -0.3957493697675798, -0.9459164683250751, -0.45189660226998885, -0.6107340401662686, -0.6731372698712614, -0.356746268324595, -0.019852496194460834, -0.6490672037413827, -0.0397939562752323, -0.16315787566537354, -0.6601724077892837, 6.638195165922637, -0.9208982842641882, -0.1642536091328839, -0.7981145249934654, -0.22106143726159222, -0.9044044672988854, -0.8657154425014815, -0.10164627444268404, -0.41911982248055524, -0.3982853215552502, -0.5954279331495635, -0.9477433990008648, -0.35231683029409666, -0.21204126520061028, -0.16287135422422372, -0.27507446854149564, -0.6530448124590265, -0.32664533148053976, -0.9208982842641882, 8.958337327986845, -0.8039263588383232, -0.45758297444788987, -0.36642919784071104, -0.9722237677171546, -0.7892823340613053, -0.08206460127090032, -0.25614935915915793, -0.21774655958825373, -0.8825680507240805, -0.3347645581353962, -0.5834948961866246, -0.11177496400046816, -0.853018532616926, -0.17754891849364585, -0.8039263588383232, 6.888575073080839, -0.8559009941050417, -0.7179519497517932, -0.8830249290720291, -0.9933101940184865, -0.3707569265866897, -0.591128466305826, -0.8152865701329146, -0.8842032951337915, -0.98545894788806, -0.3542692229166349, -0.32291746063978843, -0.5725696888508567, -0.3017057013196258, -0.06548030367007573, -0.6089604616677073, -0.4511963709596065, 11.652172025218334, -0.4815722394607893, -0.8200462260893338, -0.5764320766492841, -0.5271617620078821, -0.954391552129005, -0.6006062609106879, -0.7670628528498982, -0.504966569994904, -0.04384256656449437, -0.8648116620377351, -0.047343099390839916, -0.9081726300174722, -0.9501915306489026, -1.8819864639475046, -0.1738180776092173, -0.49351794643597025, -0.11347478664233934, -0.5519315169259811, -0.8736211075734264, -0.9490765611667389, -0.7650967874785879, -0.9551272764814103, -0.2611614049941906, -0.889001800055712, -1.2113843017373174, -0.9356795689450672, -0.28625627586815616, -0.1834798798969819, -0.1192942396786032, -0.026935692354183693, -0.4815722394607893, 17.94904201765331, -0.6280756038493136, -0.14835492074074264, -0.36755326030160496, -0.08063802687864108, -0.6461289971578776, -0.9141731616211415, -0.8927641863671658, -0.2373939964593581, -0.9561123998695162, -0.02268839835932468, -0.793910138704949, -0.45426276238657537, -0.8275162123351905, -0.30194859069497526, -0.6598565415592574, -0.8193464812265749, -0.40538754723620096, -0.3754666887334641, -0.914936705763602, -0.43978124443895483, -0.53445490231167, -0.32587878023378725, 11.895338252736275, -0.7767843093557023, -0.2664719256186341, -0.4297343125880855, -0.9019985067880534, -0.6720862649167656, -0.6922413302954813, -0.8828216032169565, -0.7954057492904651, -0.6082542416427508, -0.9805071205563163, -0.4871268792863317, -0.16352054372447955, -0.7181238351677848, -0.051116996424291905, -0.371262431816354, -0.17845308479625133, -0.8200462260893338, 9.353525345562156, -0.3343542933438197, -0.05725480919061554, -0.7899949901914345, -0.6350245834185881, -0.7655386459702904, -0.3562725153103399, -0.29760177279608135, -0.2691553052764686, -0.8692555266234883, -0.4380646569066018, -0.20949588408432884, -0.6390073532303879, -0.9463628898166316, -0.4332087980287742, -0.7994357137172707, -0.3528152860292699, -0.8003423870115542, -0.43013779534921337, 9.320568801336213, -0.2315998883848729, -0.9350401707195675, -0.827485278041241, -0.7038788766592174, -0.819557234507829, -0.24235598044148499, -0.7645910502083084, -0.949706750182576, -0.5581332314280845, -0.4965426690892041, -0.6810505372885312, -0.6986338016350093, -0.7767843093557023, 8.453759889556755, -0.8683375539628453, -0.5521420917971065, -0.27931623025521257, -0.8391097592604597, -0.7459679649704893, -0.48518833185954935, -0.06089155325573237, -0.38398373314433343, -0.42542666758149683, -0.13939320252880982, -0.8704542016950014, -0.6964104378114733, -0.8858025680164523, -0.6297101351941694, -0.7022849102692317, -0.7287478307339641, -0.2972403143033666, -0.5764320766492841, -0.6280756038493136, 10.794915167138292, -0.2919422115727788, -0.16750453639066376, -0.3054421604127602, -0.12017809602207286, -0.9891500013994039, -0.809329587160676, -0.13590263787500034, -0.07896079521569477, -0.5629999921249755, -0.9033761709576205, -0.7684991758941795, -0.6330630505914558, -0.09166773111069904, -1.5167323958634216, 7.986817296162003, -0.6120687535706006, -0.022487222839689736, -0.49107486405247136, -0.403887191040305, -0.9275835711795133, -0.05587490410692042, -0.3901805234282545, -0.9228969599943546, -0.9727236350283752, -0.33719912390286155, -0.415358427338101, -0.4262021236624105, -0.40669867543191995, -0.6308236911248397, -0.33693700040358876, -0.8137783739453859, -0.292017617588479, -0.5819193969526073, -0.7571153626501057, -0.3819544040026519, -0.5681498899757371, -0.10019833598052252, -0.23398048453082398, -0.1642536091328839, -0.3343542933438197, -0.2315998883848729, -0.6120687535706006, 11.811318323592095]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/randlap.jld b/test/randlap.jld deleted file mode 100644 index a9f26b2..0000000 Binary files a/test/randlap.jld and /dev/null differ diff --git a/test/ref_R.jl b/test/ref_R.jl new file mode 100644 index 0000000..9fa7aa5 --- /dev/null +++ b/test/ref_R.jl @@ -0,0 +1,5 @@ +Gm, Gn = 100, 100; +Gcolptr = [1, 4, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78, 83, 88, 93, 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, 148, 153, 158, 163, 168, 173, 178, 183, 188, 193, 198, 203, 208, 213, 218, 223, 228, 233, 238, 243, 248, 253, 258, 263, 268, 273, 278, 283, 288, 293, 298, 303, 308, 313, 318, 323, 328, 333, 338, 343, 348, 353, 358, 363, 368, 373, 378, 383, 388, 393, 398, 403, 408, 413, 418, 423, 428, 433, 438, 443, 448, 453, 458, 463, 468, 473, 478, 483, 488, 492, 495]; +Growval = [1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8, 5, 6, 7, 8, 9, 6, 7, 8, 9, 10, 7, 8, 9, 10, 11, 8, 9, 10, 11, 12, 9, 10, 11, 12, 13, 10, 11, 12, 13, 14, 11, 12, 13, 14, 15, 12, 13, 14, 15, 16, 13, 14, 15, 16, 17, 14, 15, 16, 17, 18, 15, 16, 17, 18, 19, 16, 17, 18, 19, 20, 17, 18, 19, 20, 21, 18, 19, 20, 21, 22, 19, 20, 21, 22, 23, 20, 21, 22, 23, 24, 21, 22, 23, 24, 25, 22, 23, 24, 25, 26, 23, 24, 25, 26, 27, 24, 25, 26, 27, 28, 25, 26, 27, 28, 29, 26, 27, 28, 29, 30, 27, 28, 29, 30, 31, 28, 29, 30, 31, 32, 29, 30, 31, 32, 33, 30, 31, 32, 33, 34, 31, 32, 33, 34, 35, 32, 33, 34, 35, 36, 33, 34, 35, 36, 37, 34, 35, 36, 37, 38, 35, 36, 37, 38, 39, 36, 37, 38, 39, 40, 37, 38, 39, 40, 41, 38, 39, 40, 41, 42, 39, 40, 41, 42, 43, 40, 41, 42, 43, 44, 41, 42, 43, 44, 45, 42, 43, 44, 45, 46, 43, 44, 45, 46, 47, 44, 45, 46, 47, 48, 45, 46, 47, 48, 49, 46, 47, 48, 49, 50, 47, 48, 49, 50, 51, 48, 49, 50, 51, 52, 49, 50, 51, 52, 53, 50, 51, 52, 53, 54, 51, 52, 53, 54, 55, 52, 53, 54, 55, 56, 53, 54, 55, 56, 57, 54, 55, 56, 57, 58, 55, 56, 57, 58, 59, 56, 57, 58, 59, 60, 57, 58, 59, 60, 61, 58, 59, 60, 61, 62, 59, 60, 61, 62, 63, 60, 61, 62, 63, 64, 61, 62, 63, 64, 65, 62, 63, 64, 65, 66, 63, 64, 65, 66, 67, 64, 65, 66, 67, 68, 65, 66, 67, 68, 69, 66, 67, 68, 69, 70, 67, 68, 69, 70, 71, 68, 69, 70, 71, 72, 69, 70, 71, 72, 73, 70, 71, 72, 73, 74, 71, 72, 73, 74, 75, 72, 73, 74, 75, 76, 73, 74, 75, 76, 77, 74, 75, 76, 77, 78, 75, 76, 77, 78, 79, 76, 77, 78, 79, 80, 77, 78, 79, 80, 81, 78, 79, 80, 81, 82, 79, 80, 81, 82, 83, 80, 81, 82, 83, 84, 81, 82, 83, 84, 85, 82, 83, 84, 85, 86, 83, 84, 85, 86, 87, 84, 85, 86, 87, 88, 85, 86, 87, 88, 89, 86, 87, 88, 89, 90, 87, 88, 89, 90, 91, 88, 89, 90, 91, 92, 89, 90, 91, 92, 93, 90, 91, 92, 93, 94, 91, 92, 93, 94, 95, 92, 93, 94, 95, 96, 93, 94, 95, 96, 97, 94, 95, 96, 97, 98, 95, 96, 97, 98, 99, 96, 97, 98, 99, 100, 97, 98, 99, 100, 98, 99, 100]; +Gnzval = [-0.22222222222222232, 0.33333333333333326, -0.3333333333333333, 0.7777777777777777, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.4444444444444444, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.3333333333333333, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.33333333333333326, -0.4444444444444444, -0.3333333333333333, 0.33333333333333326, 2.220446049250313e-16, 0.7777777777777777, -0.3333333333333333, 0.33333333333333326, -0.22222222222222232]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/ref_R.jld b/test/ref_R.jld deleted file mode 100644 index 2248ffd..0000000 Binary files a/test/ref_R.jld and /dev/null differ diff --git a/test/ref_S_test.jl b/test/ref_S_test.jl new file mode 100644 index 0000000..2abb172 --- /dev/null +++ b/test/ref_S_test.jl @@ -0,0 +1,5 @@ +Gm, Gn = 100, 100; +Gcolptr = [1, 17, 33, 50, 65, 74, 87, 101, 113, 124, 136, 149, 170, 182, 195, 211, 224, 234, 251, 271, 284, 299, 317, 329, 345, 362, 377, 390, 402, 415, 429, 450, 464, 478, 496, 506, 525, 543, 567, 580, 590, 602, 612, 633, 649, 662, 673, 686, 699, 721, 736, 747, 769, 786, 797, 810, 830, 839, 851, 867, 883, 898, 919, 938, 952, 962, 978, 994, 999, 1016, 1027, 1039, 1049, 1067, 1079, 1093, 1109, 1129, 1147, 1168, 1186, 1198, 1213, 1222, 1232, 1246, 1261, 1275, 1288, 1297, 1309, 1319, 1337, 1358, 1373, 1387, 1401, 1414, 1432, 1442, 1461]; +Growval = [3, 6, 8, 16, 18, 22, 36, 37, 42, 51, 59, 66, 87, 90, 93, 97, 4, 9, 10, 15, 26, 35, 40, 42, 46, 47, 52, 77, 80, 85, 92, 94, 1, 8, 15, 16, 19, 22, 32, 39, 42, 49, 50, 56, 58, 61, 80, 82, 98, 2, 6, 15, 19, 25, 29, 36, 47, 53, 73, 85, 87, 88, 89, 100, 11, 39, 43, 44, 47, 77, 82, 93, 98, 1, 4, 18, 22, 24, 57, 63, 64, 75, 78, 87, 91, 100, 13, 15, 19, 21, 34, 36, 38, 56, 59, 60, 67, 70, 78, 90, 1, 3, 20, 33, 35, 45, 63, 70, 74, 80, 82, 91, 2, 14, 22, 25, 36, 40, 44, 50, 56, 59, 93, 2, 11, 35, 38, 41, 47, 61, 62, 63, 81, 83, 92, 5, 10, 13, 23, 27, 29, 38, 47, 52, 55, 76, 89, 93, 20, 24, 28, 32, 39, 47, 49, 50, 57, 63, 64, 69, 72, 73, 78, 86, 91, 93, 95, 98, 100, 7, 11, 22, 28, 34, 41, 43, 49, 54, 55, 78, 79, 9, 23, 27, 32, 36, 37, 38, 57, 65, 67, 77, 88, 90, 2, 3, 4, 7, 20, 27, 30, 31, 38, 53, 62, 75, 89, 95, 98, 100, 1, 3, 19, 31, 32, 38, 40, 42, 55, 61, 78, 94, 95, 17, 26, 39, 61, 62, 80, 81, 83, 87, 92, 1, 6, 19, 26, 34, 37, 43, 46, 51, 53, 64, 65, 79, 82, 91, 94, 96, 3, 4, 7, 16, 18, 33, 36, 43, 48, 51, 58, 60, 62, 67, 69, 73, 93, 94, 95, 100, 8, 12, 15, 32, 56, 61, 63, 69, 70, 73, 85, 86, 98, 7, 29, 31, 32, 35, 43, 45, 52, 53, 55, 60, 66, 74, 77, 81, 1, 3, 6, 9, 13, 23, 31, 38, 48, 50, 53, 54, 63, 75, 76, 85, 89, 100, 14, 22, 34, 38, 52, 76, 78, 84, 86, 91, 92, 95, 6, 12, 26, 31, 36, 38, 39, 50, 52, 53, 57, 74, 82, 89, 97, 98, 4, 9, 30, 33, 34, 41, 43, 45, 46, 49, 56, 62, 63, 66, 69, 77, 87, 2, 17, 18, 24, 29, 38, 46, 51, 58, 69, 71, 73, 78, 79, 80, 11, 14, 15, 31, 41, 43, 56, 60, 69, 71, 90, 93, 96, 12, 13, 31, 41, 42, 49, 52, 60, 62, 66, 75, 84, 4, 11, 21, 26, 31, 33, 46, 61, 72, 73, 79, 88, 96, 15, 25, 34, 39, 41, 44, 49, 51, 62, 63, 66, 82, 83, 94, 15, 16, 21, 22, 24, 27, 29, 32, 36, 45, 48, 52, 53, 60, 71, 75, 77, 82, 86, 96, 100, 3, 12, 14, 16, 20, 21, 31, 49, 64, 65, 69, 73, 76, 79, 8, 19, 25, 29, 40, 49, 67, 71, 74, 79, 84, 85, 97, 98, 7, 13, 18, 23, 25, 30, 50, 51, 58, 62, 63, 65, 66, 71, 73, 80, 88, 99, 2, 8, 10, 21, 50, 60, 75, 80, 93, 96, 1, 4, 7, 9, 14, 19, 21, 24, 31, 37, 53, 58, 61, 73, 74, 78, 83, 93, 100, 1, 14, 18, 24, 36, 38, 48, 58, 59, 62, 66, 73, 79, 86, 87, 89, 92, 99, 7, 10, 11, 14, 16, 22, 23, 24, 26, 37, 39, 42, 49, 59, 69, 71, 77, 79, 82, 84, 87, 95, 96, 98, 3, 12, 17, 24, 30, 38, 45, 48, 59, 74, 78, 80, 92, 2, 9, 16, 33, 41, 49, 77, 78, 88, 93, 10, 13, 25, 27, 28, 30, 40, 54, 67, 71, 77, 80, 1, 3, 16, 38, 55, 61, 64, 67, 76, 88, 5, 10, 13, 18, 21, 25, 27, 43, 44, 46, 49, 53, 54, 55, 56, 59, 71, 75, 82, 85, 96, 5, 9, 30, 43, 47, 49, 56, 64, 73, 79, 88, 90, 93, 94, 98, 100, 8, 21, 25, 31, 39, 48, 52, 62, 63, 72, 81, 93, 97, 2, 18, 25, 26, 29, 43, 54, 72, 92, 94, 97, 2, 4, 5, 10, 11, 12, 44, 50, 71, 83, 90, 93, 97, 19, 22, 31, 37, 39, 45, 52, 56, 62, 75, 76, 77, 86, 3, 12, 13, 25, 28, 30, 32, 33, 38, 40, 43, 44, 52, 53, 59, 61, 75, 76, 84, 92, 93, 97, 3, 6, 9, 12, 22, 24, 31, 34, 35, 47, 57, 59, 83, 92, 94, 1, 18, 19, 26, 30, 34, 56, 59, 66, 96, 100, 1, 2, 11, 17, 18, 21, 23, 24, 28, 31, 45, 48, 49, 57, 76, 77, 78, 85, 88, 95, 98, 100, 4, 15, 18, 21, 22, 24, 31, 43, 61, 64, 66, 73, 74, 75, 76, 79, 100, 13, 22, 41, 43, 46, 59, 62, 64, 77, 81, 88, 11, 13, 16, 21, 42, 43, 55, 59, 62, 67, 78, 88, 89, 3, 7, 9, 20, 25, 27, 43, 44, 48, 51, 60, 62, 65, 69, 73, 78, 79, 81, 86, 87, 6, 12, 14, 24, 52, 64, 66, 88, 93, 3, 19, 26, 34, 37, 63, 70, 71, 85, 86, 91, 95, 1, 7, 9, 37, 38, 39, 43, 49, 50, 51, 54, 55, 63, 68, 74, 90, 7, 19, 21, 27, 28, 31, 35, 56, 61, 63, 76, 77, 80, 92, 94, 100, 3, 10, 16, 17, 20, 29, 42, 49, 53, 60, 72, 77, 78, 90, 100, 10, 15, 17, 28, 30, 34, 37, 45, 48, 54, 55, 56, 70, 78, 79, 80, 81, 82, 86, 97, 100, 6, 8, 10, 12, 20, 22, 25, 34, 45, 58, 59, 60, 63, 67, 84, 86, 91, 93, 96, 6, 12, 18, 32, 42, 44, 53, 54, 57, 78, 84, 85, 95, 98, 14, 18, 32, 34, 56, 65, 86, 91, 93, 95, 1, 21, 25, 28, 30, 34, 37, 43, 51, 53, 57, 70, 72, 75, 82, 85, 7, 14, 19, 33, 41, 42, 55, 63, 67, 68, 70, 74, 78, 87, 92, 94, 59, 67, 69, 70, 94, 8, 12, 14, 19, 20, 25, 26, 27, 32, 38, 56, 68, 71, 92, 96, 98, 100, 7, 8, 20, 58, 62, 66, 67, 68, 73, 81, 89, 26, 27, 31, 33, 34, 38, 41, 43, 47, 58, 71, 93, 12, 29, 45, 46, 61, 66, 74, 80, 97, 100, 4, 8, 12, 19, 20, 26, 29, 32, 33, 34, 37, 44, 53, 56, 57, 70, 82, 87, 8, 21, 24, 33, 36, 39, 53, 59, 67, 72, 80, 97, 6, 15, 22, 28, 31, 35, 43, 48, 49, 53, 66, 87, 92, 100, 11, 22, 23, 32, 40, 42, 48, 49, 52, 53, 60, 62, 77, 91, 94, 96, 2, 5, 14, 21, 25, 31, 38, 40, 41, 48, 52, 54, 60, 61, 76, 77, 86, 88, 94, 96, 6, 7, 12, 13, 16, 23, 26, 39, 40, 52, 55, 56, 61, 62, 64, 67, 78, 83, 13, 18, 26, 29, 32, 33, 37, 38, 44, 53, 56, 62, 70, 72, 82, 90, 92, 94, 97, 98, 99, 3, 8, 17, 26, 34, 35, 39, 41, 60, 62, 72, 74, 80, 84, 85, 95, 96, 99, 10, 17, 21, 32, 45, 54, 56, 59, 62, 70, 81, 99, 3, 5, 8, 18, 24, 30, 31, 38, 43, 62, 66, 73, 79, 90, 92, 10, 17, 24, 30, 36, 47, 50, 78, 96, 23, 28, 33, 38, 49, 63, 64, 80, 90, 94, 2, 4, 20, 22, 33, 43, 52, 58, 64, 66, 80, 95, 98, 99, 12, 20, 23, 31, 37, 48, 56, 58, 62, 63, 65, 77, 89, 94, 98, 1, 4, 6, 10, 17, 25, 37, 38, 56, 67, 73, 75, 87, 99, 4, 29, 34, 40, 42, 44, 52, 54, 55, 57, 77, 94, 96, 4, 15, 22, 24, 37, 55, 70, 86, 90, 1, 7, 14, 27, 44, 47, 59, 61, 82, 84, 89, 91, 6, 8, 12, 18, 23, 58, 63, 65, 76, 90, 2, 10, 17, 23, 37, 39, 46, 49, 50, 60, 67, 69, 75, 79, 82, 93, 95, 98, 1, 5, 9, 11, 12, 19, 27, 35, 36, 40, 44, 45, 47, 49, 57, 59, 63, 65, 71, 92, 98, 16, 18, 19, 30, 44, 46, 50, 67, 68, 77, 79, 84, 86, 88, 97, 12, 15, 16, 19, 23, 38, 52, 58, 64, 65, 80, 85, 92, 100, 18, 27, 29, 31, 35, 38, 43, 51, 63, 69, 77, 80, 83, 88, 1, 24, 33, 45, 46, 47, 49, 62, 72, 74, 79, 94, 97, 3, 5, 12, 15, 20, 24, 33, 38, 44, 52, 64, 69, 79, 85, 86, 92, 93, 98, 15, 23, 34, 37, 79, 80, 81, 85, 87, 100, 4, 6, 12, 15, 19, 22, 31, 44, 51, 52, 53, 60, 61, 62, 69, 72, 75, 95, 99]; +Gnzval = [0.3086314079058456, 0.9986607788380012, 0.5610064890329525, 0.832224131008404, 0.3294462924259989, 0.4727573932124432, 0.5229458380085813, 0.27087256414111605, 0.5599319687443616, 0.5475404884489812, 0.5640382080194491, 0.8584089047683475, 0.553751100697396, 0.8421209009050953, 0.28010922081880957, 0.4894927072798642, 0.5202896174970701, 0.6858392093301448, 0.786405109732176, 0.6097607678487019, 1.0, 0.6345427724624766, 0.7779020535541951, 0.25997986371934084, 0.5685732722128215, 0.5820882261494038, 1.0, 0.6691488365587362, 0.35646490992886976, 0.6804455112852272, 0.8616653682395536, 0.3844247395512977, 0.31061552646480806, 0.5557190259501611, 0.8344029925675192, 1.0, 0.7358803644161728, 0.8944100283447786, 0.9498171618334101, 0.3549166996682608, 0.9456124456334171, 0.41963854845994036, 0.2932962208715996, 0.9366584806486538, 0.4948237860641257, 0.6916280365570763, 0.890500050923668, 0.3407142556667635, 0.6368968698231599, 0.462159532657063, 0.46642958841536775, 1.0, 0.7621858334934764, 0.4498556705758161, 0.7381551854211765, 0.2977304585846391, 0.6309825101084697, 0.7946260974635482, 1.0, 0.7657409178932815, 0.4205882539525326, 1.0, 0.43161617848205563, 0.5048452061495825, 0.3059623993159188, 0.3085328961710782, 0.4790575785932825, 1.0, 0.872322982002817, 1.0, 0.5786347998173016, 0.5071192436353391, 0.4049779585811116, 0.920366678728016, 0.3081132295673938, 0.6059122748103212, 0.6827108182507844, 0.802145824129018, 0.6732235741265936, 0.2722809797775942, 0.48633048354281944, 0.9130987251694483, 0.16792928811770605, 0.34465045261583066, 0.47065602553857, 0.4152126837429248, 0.5174992252770355, 0.35010018108319557, 0.708378714834061, 0.9235904721119229, 0.7261615415705166, 0.47566022237080685, 0.6872735540303211, 0.5599559422337107, 0.7685025598243236, 1.0, 0.8874895387402504, 0.6068787255265603, 0.41977628238218145, 0.9542714496902132, 0.5574670888347338, 0.548685613998101, 0.8908416680709261, 0.6504234380203574, 0.8941542269678509, 0.29802766178781015, 0.47812860970903437, 1.0, 0.9886239285166574, 0.9267754556210938, 0.7789307726436544, 0.3768980043566626, 0.5341665029010937, 1.0, 0.3349242596057137, 0.47693120172909714, 0.2790158466233321, 0.5763517627725415, 0.5137867593451328, 0.40790826601308333, 0.6612067783335817, 0.9999999999999999, 0.31913420867592435, 0.4312155324016517, 0.37405891327138613, 0.3007648865513607, 0.3750386866611699, 0.309152831000324, 0.6018677494973111, 0.5313504822646872, 0.8855888387317028, 0.6593257046490747, 0.2734026971173483, 0.6256687678067726, 0.722787256262097, 0.355041268121685, 0.7804479145324065, 0.9296632825397264, 0.36783724094285836, 0.8902546936560085, 0.48038465212718906, 0.7086538024223994, 0.8022704681788595, 0.5001305302545863, 1.0, 1.0, 0.41837665694554327, 0.4075814930363359, 0.7929646349176189, 0.4916207805477212, 0.31387063055087305, 0.657301102842506, 0.9657214191689005, 0.8693893582752115, 0.4054034595807778, 0.31936383368753135, 0.8748287382049544, 0.8303891613523123, 0.4006804870166255, 0.4916055177188628, 0.3103717560842533, 0.3447168546007089, 0.6290276366365739, 0.3711216629292957, 1.0, 0.26831572897486544, 0.27176949563348846, 0.20486921466022615, 0.9535941533408456, 0.37801038581718915, 0.47912326991080945, 0.847614122252833, 0.3747480665523656, 0.9214176036453711, 0.6404184434802861, 0.48441445048853726, 0.6167570644152066, 0.59675201571596, 0.2762906868028233, 0.4817333511756801, 0.4581126124044482, 1.0, 0.9650416483958933, 0.4009033228853521, 0.3803680611928475, 0.48180188014863484, 0.5950729876118684, 0.350326371357497, 0.7574416672442622, 0.40523520126285845, 0.9208640751666125, 0.6080920934486442, 0.2629408708546492, 0.9134491924862159, 0.44727467968541407, 0.955167486928693, 0.8257870713518156, 0.31814684997020104, 0.4772647277943498, 0.7371304308743143, 0.2760468041615327, 0.8321000281285578, 0.27239515144078236, 0.6747324130335252, 0.7009431652813863, 0.5474741686501907, 1.0, 0.43827760510730873, 0.6154592493116096, 0.40112166434289687, 0.837574303742781, 1.0, 0.7621509137437208, 0.8155251268045675, 0.3904904672349383, 0.6366371934445823, 0.410935953054335, 0.4839843513641727, 0.3101664281028919, 0.3393953336740818, 0.3298485572204908, 0.6757876973942154, 0.91993060313145, 0.2707960676353462, 0.8622383089816502, 0.5457270194362043, 0.5486697671725652, 0.952958041849733, 0.26428354744482635, 0.27508440313548116, 0.3816366169968296, 0.3662130020276344, 0.8889719791354472, 0.32444472687347065, 0.6474749239281873, 0.6411402419432995, 0.6245097323233761, 0.6510442541338313, 0.4702533398908854, 0.37598154112230303, 0.9999999999999999, 0.26138834570880637, 0.7945072898658906, 0.7074072722650838, 0.4229775883253915, 0.4400490072405359, 0.9172833432509847, 0.8118319673613743, 0.9561356611899414, 0.8347696202928084, 0.8594870728673177, 0.6421809346782505, 0.6567941132491838, 0.8901703179109118, 0.7652654670164794, 0.4453368303254978, 0.28916246417069635, 0.17795419188577394, 0.6702677239346234, 0.7098350156700307, 1.0, 0.47468107139365234, 0.2941245487007703, 0.7257573879434771, 0.6507952217976634, 0.43954956743878454, 0.45952066000717945, 0.9337439682708898, 0.6854476125940218, 0.9487761238241454, 0.8573318833509846, 0.752112912544934, 0.39616164044455604, 0.3166397285430773, 0.5841486462005989, 0.9319630547364821, 0.9999999999999999, 0.5383042760589416, 0.8899049990468427, 0.46938107865435424, 0.25567160455017157, 0.49823507223720315, 0.5471428244808886, 0.7962371481875565, 0.3238765253529882, 0.6733703195618738, 0.7192527233194029, 0.4131090917796851, 0.2691562739573891, 0.4256821317592017, 0.25439192925453463, 0.6358771028367011, 0.657956321892106, 0.6563570883838363, 1.0, 0.9215848533463602, 0.5343279983717063, 0.558369331848037, 0.46990112530424144, 0.8833275486211594, 0.7363122865303411, 0.2721375921489712, 0.9097475297136448, 0.7613312874547992, 0.7196003470106229, 1.0, 0.7232728494264885, 0.6663223366241441, 0.9274687279300606, 0.8998834927757241, 0.935561005534593, 0.2604182043087865, 0.3537976264100425, 0.978984603815119, 0.4777341524354235, 0.9999999999999999, 0.7962171337091215, 0.7730671304326604, 0.49940274218768654, 0.44622816545327215, 0.3321449022834124, 0.36044979596884097, 0.619905267027834, 0.34917121244250726, 0.3727204870081016, 0.26346749345638143, 1.0, 0.706003368851335, 0.8818591720737212, 0.49402446840048186, 0.8093452273883495, 0.9564689751182814, 0.4634300374278596, 0.8884708791703964, 0.5161402332720586, 0.49456436270377074, 0.5451831220279059, 0.65658680859289, 1.0, 0.2729025348554793, 0.9999999999999999, 0.6456532480586678, 0.43318781552554086, 0.3558695906054176, 0.46743240537946834, 0.5651890889543015, 0.41760134213989253, 0.4402829666798088, 0.6491186685078362, 0.43902813194792023, 0.29904093618817956, 0.35262270256777767, 0.5641866517325925, 0.6772352917025517, 0.9953380728771916, 0.3601756090150912, 0.8555236022009636, 0.7794569214792634, 1.0, 0.995124718310694, 0.3262465932019833, 0.6419430379775529, 0.9380675084389861, 0.6393688768607003, 0.8054032624000077, 0.43996064278903346, 0.3406747075460717, 0.42102092250636064, 0.7914618877981048, 0.701233635327357, 0.2915836611573606, 0.9246839136724336, 0.41152481895822207, 0.24350864496574667, 0.4745312733810382, 0.6502358407148993, 0.5032435291507724, 0.33289036749328604, 0.6498983261647092, 0.5165878402860212, 0.7023031233844951, 0.5166004956360988, 0.8256138341278212, 0.4202378828379737, 0.6962437161766372, 1.0, 0.44222921829094464, 0.4825606599276818, 0.6710159392890304, 0.3948938915853573, 0.5133271763205812, 0.2760479916618351, 0.256138376060717, 0.2716985357630993, 1.0, 0.382603844013551, 0.4457420861707507, 0.6825692906575722, 0.9155577380561006, 0.7504881703906944, 0.8037299095931034, 0.5032892997033424, 0.25430442424902366, 0.28187315392847645, 0.41508220263838863, 0.31678737850158967, 0.31237847802715524, 0.6816426142634668, 0.8719434864674187, 0.96049199319049, 0.3445584277408837, 0.5934597136558226, 0.9152142090460307, 0.8089271612484954, 0.3307484272690676, 0.397648557429565, 0.9358925992417119, 0.4387671258559621, 1.0, 0.38985552603408025, 0.56703699678337, 0.4245550391872948, 0.9651729998467905, 0.2757142763685669, 0.9030755117610851, 0.7868025600441677, 0.7588565341217742, 1.0, 0.7103207213826934, 0.7969296254820437, 0.605905950761958, 0.7120145595120534, 0.9284269767348193, 0.5001750782201424, 0.32752531609727864, 0.6043747336116498, 0.32058585445291765, 0.27944254355910797, 0.37972112745119935, 0.46455015919201526, 0.9092388253466036, 0.37486297610865993, 0.9682285164575469, 0.30448420765603024, 0.33869965540444813, 0.43329737156662806, 0.3423161645026107, 0.3764650105620389, 0.3466546013277709, 0.9556331620185714, 0.660127805661213, 0.31485606200044924, 0.3928815512466846, 0.3352739753306991, 0.6663483661513072, 0.6222642836138808, 0.4041153943935262, 0.5910918679880185, 0.5095198592266572, 0.3558946261198822, 0.5220346224267965, 0.5635213451455362, 0.6987583928737265, 0.6645644847059751, 0.38464999639940506, 0.3083613375179511, 0.3334146948854633, 0.5959152372266439, 0.6003738110945085, 0.5652784799033094, 0.9412320687395962, 0.8079874122865662, 0.2763575225860902, 0.5396467695173596, 1.0, 0.368479973077396, 0.2816393654593703, 0.575666248642928, 1.0, 0.664421020978018, 0.49731113816055605, 0.4500375914942832, 0.6814173383136499, 0.6204514992751057, 0.6726548942295332, 0.7050416596431076, 0.33530711344026143, 0.7928331180670295, 0.3745990555617443, 0.30373549925994575, 0.7131305473045673, 0.6772938448089398, 0.6957950769768124, 0.5689165058260527, 0.6521585509066127, 0.43432805729507806, 0.9673640701399818, 0.37543611465128474, 0.4063302938734346, 0.5529924818602802, 0.8479640505437054, 0.9085971209937749, 0.7906136901088885, 0.5048875477328656, 0.3144689801327111, 1.0, 0.40808244821349815, 0.7174451386121848, 0.43616010107985687, 0.7531570672033683, 0.470402944104025, 0.3539756103048682, 0.8746587920488481, 0.6233356683623907, 0.638523285358317, 0.26270118331093906, 0.32774133150760454, 0.39650630788815117, 0.2958412589817853, 0.562806186357827, 0.16259753569594224, 0.6815888356646476, 1.0, 0.4270055875901325, 0.3774614371920048, 0.6778780679457582, 0.6654008683901576, 0.27335668426687665, 0.46530853711820047, 0.4780562808535975, 0.5161740382970629, 0.45006200238276983, 0.6653385391099522, 0.4725501975801607, 0.6149559497605293, 0.4248326399201499, 1.0, 0.7312773380497218, 0.35611638969255266, 0.7116244324017098, 0.3732539229128152, 0.5336007784682106, 0.5300159183438783, 0.42576192761818965, 0.38558573578782324, 0.2799995373982361, 0.6184714744422988, 0.9836544277628815, 0.43227089957532366, 0.8573637205350025, 0.3303560174760293, 0.33541475634223655, 0.2625603418307162, 0.4633122526436575, 0.6292661870103966, 0.50922717426517, 0.5759212361504547, 0.45774336535498544, 0.7689315294108274, 0.646473779995219, 0.6948505219645864, 0.9181620895622001, 0.40719764137238385, 0.9003724549354264, 0.2844102491472594, 0.31203638686983115, 0.35293618726384607, 0.9585926284621957, 0.5893409990333635, 0.5098374194529022, 0.3181156932723296, 0.268764075537574, 0.3771560898385238, 0.8817076507939354, 0.29810970460827185, 0.8488702976787862, 0.6243842619725074, 0.9999999999999999, 0.5951096342970024, 0.4995266470079993, 0.4751897103353425, 0.4118098451032538, 0.59196744338709, 0.6060179864746851, 0.7950699054467367, 0.9352305920789038, 0.6044734153049013, 0.863839470165202, 0.26223246335194483, 0.49551300578501883, 0.9545972057666796, 0.418051585862971, 0.954417922471762, 0.2787251280067237, 1.0, 0.8294336886407009, 0.8923195456499379, 0.8562728084784927, 0.48927689243879846, 0.379322895569401, 0.8109889491857846, 0.5002124492066917, 0.8393621305194641, 0.42960320390770124, 0.42333318201520653, 0.28241246430358097, 0.885745422761262, 0.8340683401116982, 0.4159050448592875, 0.3079139213859449, 0.6510028341534729, 0.41956104882869427, 0.26097208470242467, 0.7094016167007122, 0.5177629458976718, 0.33397243888563666, 0.27976084104334004, 0.6897434111277928, 1.0, 0.3110070287870447, 0.7219541011878216, 0.5906416205330725, 0.6898321262488695, 0.49662505161958015, 0.9728819281023432, 0.8947404416299449, 0.7919896888927374, 0.7177397494822383, 0.586329571628228, 0.5472241445342726, 0.47162143588976024, 0.9185224145802212, 1.0, 0.6503838900646768, 0.4373357728884155, 0.35510988103436963, 0.5683753942155829, 0.726733339796927, 0.7308786207942628, 0.5752443280775552, 0.360548827340001, 0.5902174708408113, 0.4464281978411166, 0.42024594629214274, 0.2932707155439862, 0.8303523088010327, 0.6384493609125711, 0.43815335447254533, 0.5292358085638685, 0.6872503930540391, 0.42922993884158495, 0.5013844422390095, 0.6649857252368991, 0.8446241372253419, 0.5914884853579543, 0.8455681009206062, 0.5034210237150176, 0.537775784839607, 1.0, 0.46420158928294764, 0.42903749170617383, 0.35650912671471297, 0.9999999999999999, 0.3832786650310891, 0.41123625677243164, 0.7057065811413229, 0.5242580948189572, 0.6207834017328003, 0.3982905935174588, 0.8207774117716758, 0.475114392877417, 0.1268731426805701, 0.3573921202088831, 0.43614080776382563, 0.5432406558466367, 0.6739212669548067, 0.4305513727575639, 0.8315182521822679, 0.35395676634800266, 0.6377237827095186, 0.722298302870812, 0.5008986387584945, 0.6282585917003262, 0.5042951048521527, 0.40026274255190925, 0.5755171748885688, 0.7344448054655102, 0.3896944784487999, 0.37386408220000367, 0.8891949140469476, 0.4831084689966445, 0.2717348251611834, 0.37341651641506474, 1.0, 1.0, 0.31734136182613915, 0.4187860885834938, 0.9871813920561348, 0.5289232361522495, 0.5100552082080594, 0.8448293416552926, 0.5926190874142127, 1.0, 0.5210866223691706, 0.5062574945063679, 0.7501182929945124, 0.8164394847855628, 1.0, 0.5524637911750025, 0.5953362180436003, 0.2503510185363501, 0.265811413755178, 0.8300460366148369, 0.6735198647618312, 0.5968020573288837, 0.2809643864511108, 1.0, 0.890158281328718, 0.4065368174188575, 0.4971706487338218, 0.3880328795736865, 0.3493685044571082, 0.4439983768042092, 0.42175501773505975, 0.8926091130399741, 0.6499487554948054, 0.31597055428096626, 0.8219851827529027, 0.6849130796240683, 0.8805411815130135, 0.2707916979388709, 0.35687181808142787, 1.0, 0.9920958768190388, 0.8655009729484989, 0.5522637121054796, 0.26770741047727087, 0.6090774386394321, 0.7917569759030904, 0.3102147801632941, 0.6750464000766107, 1.0, 0.9361868602187147, 0.8593890908716064, 0.4628928940688722, 0.41810300560863434, 0.30949397584156285, 1.0, 0.437150904133923, 0.3727629942198941, 0.30443189438182205, 0.3655617893857382, 0.5168776920142614, 0.8451338241709254, 0.47371910676371953, 0.7418888274741012, 0.5264706731755406, 0.4228555426127055, 0.30997090785691833, 0.8370248886762044, 0.31318586341287574, 0.43933468860559705, 0.5614597418122041, 0.3904823129453313, 0.9656134001340161, 0.8112187383597694, 0.5107940177527805, 0.6485127619073818, 0.5949893160048346, 0.61180051373391, 0.8427655474932756, 0.6077482980825794, 0.9747564147376784, 0.6769683008077197, 0.9657779569121266, 0.5313587786723944, 0.995716796091152, 0.3167861405850656, 0.8818715290441921, 0.7487663920226688, 0.963161249698199, 0.8321440682391955, 0.4006707546156044, 0.5956955905096392, 0.34638512756376066, 0.6212987802844527, 0.8729114509246172, 0.6232620507342075, 0.353069453814275, 0.60776552554974, 0.38806220343038333, 0.4113715208165741, 0.604878889294329, 0.588385940719837, 0.5463966990493874, 0.4857324216313917, 0.5361529630532237, 0.2874308445997272, 0.2969096601458405, 0.5799562404473391, 0.3045630463902186, 0.6911179573109365, 0.0055489581662255, 0.3742846590654724, 0.6754741922167704, 0.5267559776328825, 0.5815667917760697, 0.31013558221962545, 0.37714352193939715, 0.9387036308394823, 0.4454846045686635, 0.5451817907955155, 0.616103735901633, 0.6925268689954808, 0.8198217453201901, 0.6654367741400747, 0.476060815083481, 0.3731630509178315, 1.0, 0.5476724061835141, 0.5191554112563257, 0.25204994140158093, 0.5173583087877003, 0.25618511202342203, 0.5337079799039907, 0.6649651860595284, 0.4841365236203405, 0.7055831565890588, 0.5490601665861466, 0.7401252563328183, 0.8791060496907026, 0.6273526989784678, 1.0, 0.5399521696711336, 0.8168511531918854, 0.4743820263760467, 0.7650555655609802, 0.5075101733080543, 0.5779399315903697, 1.0, 0.8175409915018916, 0.8245955842547197, 0.3796469828317284, 0.568733675479175, 0.34148786539829484, 0.4042871067762432, 0.5546589955753632, 0.7837315487553226, 0.9077828376860282, 0.6203465827944645, 0.5718458931294086, 0.6145601194871151, 0.8287895345230815, 0.4840671287983366, 0.528045500711047, 0.3019908611605266, 0.5920651127359726, 0.6633952407714433, 0.2717300292368672, 0.9410284529321048, 0.40805599852975677, 0.3938763723945892, 0.9037975178233014, 1.0, 0.5388776790134677, 1.0, 1.0, 0.5119625169087315, 0.761337441382025, 0.5245161076572342, 0.4454867145122507, 0.4832349190296145, 1.0, 0.6884018327340987, 0.3871598593733973, 0.3865059449003242, 0.26122092667909996, 0.7855607355995992, 0.6516425101448562, 0.35665517685207765, 0.31580867556595144, 0.8365977186538159, 0.6931063296916856, 0.6222593658724235, 0.34012076087652204, 0.597117429789852, 0.9828997190250446, 0.9245065488241969, 0.9999999999999999, 0.5355011576186107, 0.9613491931397905, 0.30799893344724044, 0.3079065101263343, 0.7768325679696754, 0.6292300682309973, 0.3717428479750089, 0.3002061501054825, 1.0, 0.5916759340195396, 1.0, 0.5232801401529532, 0.6799722663465934, 0.3244454108881641, 0.3297829488833795, 0.4660069727460682, 0.9635242769667345, 0.4149253599615462, 0.6818423921591732, 0.5005586085332286, 0.9246463436000913, 0.4710487008377107, 0.6789851756097529, 0.7769049960546438, 0.33626663293279196, 0.7657830326946345, 0.5247364295376176, 0.29218225593917235, 0.5982371312851179, 0.2825362733693641, 0.4601433858987366, 0.7321159285921941, 0.7876094130670995, 0.9999999999999999, 0.9001269342348065, 0.5643747028510756, 0.7543842879730561, 0.27282687921370147, 0.46269368290715934, 0.8525119254935838, 0.29154429851624847, 0.1161422805173723, 0.6562489734034517, 0.3240681846384767, 0.9479385606640501, 0.3443287124336051, 0.4723741732929433, 0.6752244409691538, 0.5257340972627579, 0.3959179240012579, 0.7156340067832128, 0.5815650375368426, 0.9301649048604338, 0.37009805229260256, 0.3021194851381369, 0.6250199963416462, 0.8032147397667786, 0.5408567025051199, 0.5115622600724877, 0.4647381777537374, 1.0, 0.6497068798606109, 0.6308866558106152, 0.8179592396604881, 0.9582907081902652, 0.709819833549875, 0.4759120856110369, 1.0, 0.9999999999999999, 0.6001652248810057, 0.6436732277002749, 0.49681115932125774, 0.9382285239917659, 1.0, 0.587681850630745, 0.7888598353808676, 0.7150504777222365, 0.3303094674571879, 0.4823373083417599, 0.18485675924952247, 0.9312665112083346, 0.9226877553289299, 0.5117452750618938, 0.65025953301384, 0.2849671475257664, 0.4256005344639421, 0.6237606745961042, 0.4004271686784926, 0.6840336186018563, 0.7355885109020938, 0.6033119411934473, 0.5440462097668168, 0.6061442655352145, 0.45492582011326077, 0.534272134395567, 0.6705550951622102, 0.24142709993973696, 0.8701092014902211, 0.6639111253182824, 0.6562934695976097, 0.6096278271054203, 0.3119267619039908, 0.32509226481750836, 0.6901453653872811, 0.897108699389913, 0.8098856073025985, 0.4048330922320003, 0.31038287943024184, 0.8569562337423862, 0.2622487276188536, 0.7068226063177803, 0.2693915446946901, 0.8025894340462817, 0.8160039970034775, 1.0, 0.41923647935172204, 0.9936598666956731, 0.5095085161402483, 0.8539189335290018, 0.7435760908492823, 0.6452450962670923, 0.2604390372412532, 0.5764258660575072, 1.0, 0.4618715523367149, 0.7783458069547369, 0.4756656993517585, 1.0, 0.9246879407737996, 0.28867651206318046, 0.9447984818058941, 0.5911853428542229, 0.675142836384889, 0.33910450212711973, 0.43142775263620464, 0.4482318863350352, 0.6861781409627846, 0.9315640541142023, 1.0, 1.0, 0.94165587054529, 0.7207221792416874, 0.47555324321101683, 0.360031681791678, 0.5375690500819532, 0.7608102402090884, 0.3493514201113307, 0.6201489244881461, 0.4971765668189029, 0.30486427216258427, 1.0, 0.30182288173199856, 0.4005335194670301, 0.3023454716745363, 0.2582113271409211, 1.0, 0.7235086590193208, 0.259939650705488, 0.3926648744291177, 1.0, 0.25047768362308626, 0.476991437272595, 0.521688569885495, 0.6847695138066671, 0.5694378031289298, 0.5053506805477829, 0.7192563527214755, 0.3377759883175256, 0.9401709299052567, 0.42533286886280486, 0.3248401000939976, 1.0, 0.35435801338098605, 0.3063192690129409, 0.6057248203153163, 0.9546280021385912, 0.3823472271689831, 0.9853140648933334, 0.8350564271062805, 0.2667556826563614, 0.7881469762006607, 0.29148115795757684, 0.8400080624127885, 0.9131222634141362, 0.5263984785296858, 0.6651618994668821, 1.0, 0.8934031464060519, 0.3565293574876279, 0.9999999999999999, 0.4796252855677836, 0.264440726006657, 0.5971297331572046, 0.31248146579271413, 0.8530365619109169, 0.4363614905033652, 1.0, 0.4748485949551296, 0.8040049005900616, 0.3930184180999957, 0.6188572556680967, 0.30373764724900304, 0.5840815104273308, 1.0, 0.6396032008936419, 0.6417368337983786, 1.0, 0.252668600178402, 0.6193468906279678, 0.5649700084172461, 0.3979924494680678, 0.35830604593451, 0.6892020027166835, 0.37023750331147076, 0.4372363945145301, 0.5916136810967754, 0.8773890959484252, 0.42399570101959305, 0.4577618191608436, 0.39915576019146554, 0.6050321687886541, 0.46573051065875765, 0.45802066267638863, 0.6431389525820794, 0.3226566691103885, 0.7368320693541283, 0.8687696402043263, 0.25745351856915527, 0.3887394781672973, 0.26206870882522254, 0.5717442203332083, 0.580523625669574, 0.7216201744650723, 0.30846500185735987, 0.5624080576531992, 0.6733443892930497, 0.7443481744529276, 0.39270141124067137, 0.8447454167102542, 0.2920682859588468, 0.5307222784679029, 1.0, 0.8338004163345377, 0.525330234091529, 0.9844972068755765, 0.3871211108577018, 1.0, 0.96066601564995, 0.5729907171267085, 0.9675821950492496, 0.8481531429916626, 0.9999999999999999, 0.7763880463896716, 0.8701728294291401, 1.0, 1.0, 0.2620019649708491, 0.6893414036275599, 0.6226622263225624, 0.6558492598977669, 0.8693810135665435, 0.9616130915578651, 0.37930325280590643, 1.0, 0.9213990890089069, 0.5311369799416545, 0.7946336885971379, 0.9187052754109976, 0.9729265262948814, 0.28757710492059424, 0.2799776003965103, 0.4943666390701472, 0.2902415029547936, 0.6130617256671121, 0.9569342536384492, 0.36573418091371834, 0.5151027489635106, 0.3711926992925339, 0.8265041888057472, 0.8711989155681541, 0.26638065409653683, 0.602416249699157, 0.6466757166086051, 0.6869570959923448, 0.933343172675266, 0.5487914095314416, 0.4801225813581666, 0.7462326501829734, 0.6824062117185221, 0.8426490119727528, 0.25429037885178524, 0.2666761369603077, 0.567934992398271, 0.7324004284235474, 0.3728118355292142, 0.5956068278236786, 0.5601790155751898, 0.5237793396323196, 0.9014696980491468, 0.3669263636585938, 1.0, 1.0, 0.8469964163576164, 0.3197456008459634, 0.6101546861765202, 0.795967607052283, 0.1459631645904522, 0.5066807948390265, 0.32793372231199736, 0.3619680783182243, 0.7593226021470355, 0.9022486187099299, 0.9560707063589859, 0.5521318441185364, 0.4267752277451563, 0.6884295368562907, 0.3908620690286871, 0.7627755003817481, 0.5528182694087352, 0.6628180766433622, 0.3436532060135707, 0.6890523459698933, 0.454235115753991, 0.9673187897912604, 0.5483193092160413, 0.3188771931224632, 0.731986371680395, 0.4745962247245148, 0.6916189910884466, 1.0, 0.21764505314015709, 0.8457034776232927, 0.33839532807430034, 0.6197370106730804, 0.5198941149219323, 0.9185573227536804, 0.771076207661388, 0.3314623530222701, 0.5022484042378285, 0.27924642258507754, 0.34465587607879683, 0.4599681423428597, 0.4398592848874709, 0.5572569697697632, 0.2714407146118095, 0.9999999999999999, 1.0, 0.3530736372438787, 0.2524188463069196, 0.47907463771865294, 0.4736124378752765, 0.37196443071576957, 0.6173007019791437, 0.3786432796181109, 0.5345124256882472, 0.41738612052990115, 0.3587837000504286, 0.5078336426237405, 0.35996357178756705, 0.3392725438906634, 0.5115187039292588, 0.9533640638562828, 0.6818752230587695, 0.649888913318365, 0.5259450491762055, 0.9662007334889993, 0.5118191982704826, 0.7005395548747968, 0.6979182939464459, 0.5589875232081593, 0.21801593735190072, 0.8533955208041076, 0.4645947060642481, 0.5763306501547387, 0.38226799611567625, 0.6089868548732689, 0.34683066175747307, 0.3938402950846586, 0.6418452083401203, 0.8389294213001933, 0.49195203646211433, 0.4223524930896001, 0.9449331541538666, 0.8222675473725303, 0.9999999999999999, 0.7241809393586591, 0.9720751070542792, 0.5719068703503046, 0.8653526879724195, 0.736256897161814, 0.2912757011591064, 0.6211509155566186, 0.5089917708413657, 0.32524059413213474, 0.7629040242348248, 0.8026945227856959, 0.34083731188745275, 0.45451676093570975, 0.29734364156820403, 0.834243557607054, 0.4619529169978442, 0.6124774701495476, 0.49082068853093513, 0.37624752587278676, 0.6636897504604966, 0.6881723017397747, 0.971674701438198, 0.8109461350055639, 0.724833180995697, 0.7190775568629929, 0.4192539842987171, 0.2613412738267231, 0.6273760806162776, 0.9498326181335748, 0.3549358507517958, 0.6850006180482371, 0.3393170131238329, 0.9735513812279997, 0.8268943689023313, 0.5044913887188193, 0.37468431847196104, 0.9797661990473747, 0.8143349610797487, 0.2578744894612354, 0.7628863080887179, 0.3556857492040174, 0.3113102739984362, 0.48234900945966425, 0.848253187187421, 0.553704994347155, 0.8470366854960708, 0.9681399923268599, 1.0, 0.27033887162375575, 0.6001445566013698, 0.8411645981505789, 0.7082370001715657, 0.7520041385280705, 0.2839283717189735, 0.33577835064041733, 0.40132007946391207, 0.30372822635538443, 0.4440259163499051, 0.47327501432046654, 0.25588507074098815, 0.8363490778364355, 0.4227938589182584, 0.5356371548638525, 0.6262392572965, 0.49887348836512835, 0.4337443948965278, 0.5088840587507965, 0.7475377966636774, 0.9084633394631072, 0.8980677097667479, 1.0, 0.4971919835249001, 0.36215867844515115, 0.5030439358256541, 0.9999999999999999, 0.6128340129322238, 0.957853827520242, 0.26173711293857144, 0.9445601800195532, 0.6463062168253, 0.9359790834644321, 0.48481556150407, 0.4606726776681997, 0.6523234407592361, 0.9431899510005763, 0.7716997840253819, 0.7037752041364878, 0.5209368152030175, 0.4686815261968328, 0.631477970451007, 0.6861367630758495, 0.9153324016497332, 0.40719894945531665, 0.6671296984803738, 0.45684185233732216, 0.5571227393940452, 0.3277307156780763, 0.40664590299519765, 0.2685391927099636, 0.37900078258929576, 0.9106459733208746, 0.5809471676873356, 0.696903479360243, 0.9174640138932246, 0.514569020188006, 0.525771165640361, 1.0, 0.25989533628093325, 0.7811455881507257, 0.37154849348521657, 0.8255691233488658, 0.34372999822715966, 0.8150702376429599, 0.6352278571558805, 0.8177211895058523, 0.368081040181522, 0.28127649415584643, 0.2797171091416061, 0.6512589663473924, 0.44130082628674205, 0.67894227049179, 0.663315640939975, 0.8669993705189127, 0.3837779650490343, 0.610741612892118, 0.4325822240062867, 0.9500731897169573, 0.8298474562556176, 0.7044212228512335, 0.47191315927145916, 0.2500486066687155, 0.8056157758952187, 0.7607045387568007, 0.583145403367163, 0.5094346200273572, 0.6987329453869764, 0.5094115849729446, 0.8124403673268045, 1.0, 0.8766623126853672, 0.36229685050944144, 0.2814831423962957, 0.7400462241954264, 0.7925874112259261, 0.48657337318632843, 0.38427959671173495, 0.4421206466111112, 0.571162424441088, 0.450526334456363, 0.9034126825248033, 0.4413704155428708, 0.5120738051974955, 0.7293093387206996, 0.3098471684828302, 0.5803142665004766, 0.3337301388087098, 1.0, 0.25747612749506243, 0.3074992708743665, 1.0, 0.5901258524797363, 0.4105136591687168, 0.982655463899435, 0.4425131750701062, 0.6335508324331612, 0.9999999999999999, 0.629231912878056, 0.3576480481693306, 0.44529106472878766, 0.9347796875685308, 0.34411663066839193, 0.7977463652562109, 0.9943702129577762, 0.34837546804964287, 0.27965932932363335, 0.40970313100628736, 0.40809653305001736, 0.3277257124827053, 0.6522010767748746, 0.294188391303247, 0.6079975216577458, 0.5306700711172905, 0.3918712505166603, 0.5719585597208344, 0.3410013923755241, 0.40354432676449276]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/ref_S_test.jld b/test/ref_S_test.jld deleted file mode 100644 index 3c55b15..0000000 Binary files a/test/ref_S_test.jld and /dev/null differ diff --git a/test/runtests.jl b/test/runtests.jl index 3ae3cca..825bfc6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,15 +1,20 @@ -using AMG -using Base.Test -using JLD -using IterativeSolvers -import AMG: V, coarse_solver, Pinv, Classical +using Compat, Compat.Test, Compat.LinearAlgebra +using Compat.SparseArrays, Compat.DelimitedFiles, Compat.Random +using IterativeSolvers, AlgebraicMultigrid +import AlgebraicMultigrid: Pinv, Classical + +if VERSION < v"0.7-" + const seed! = srand +else + using Random: seed! +end include("sa_tests.jl") -@testset "AMG Tests" begin +@testset "AlgebraicMultigrid Tests" begin -graph = load("test.jld")["G"] -ref_S = load("ref_S_test.jld")["G"] +graph = include("test.jl") +ref_S = include("ref_S_test.jl") ref_split = readdlm("ref_split_test.txt") @testset "Strength of connection" begin @@ -17,13 +22,13 @@ ref_split = readdlm("ref_split_test.txt") # classical strength of connection A = poisson(5) A = float.(A) -S, T = strength_of_connection(Classical(0.2), A) -@test full(S) == [ 1.0 0.5 0.0 0.0 0.0 +S, T = Classical(0.2)(A) +@test Matrix(S) == [ 1.0 0.5 0.0 0.0 0.0 0.5 1.0 0.5 0.0 0.0 0.0 0.5 1.0 0.5 0.0 0.0 0.0 0.5 1.0 0.5 0.0 0.0 0.0 0.5 1.0 ] -S, T = strength_of_connection(Classical(0.25), graph) +S, T = Classical(0.25)(graph) diff = S - ref_S @test maximum(diff) < 1e-10 @@ -33,35 +38,35 @@ end # Ruge-Stuben splitting S = poisson(7) -@test split_nodes(RS(), S) == [0, 1, 0, 1, 0, 1, 0] -srand(0) +@test RS()(S) == [0, 1, 0, 1, 0, 1, 0] +seed!(0) S = sprand(10,10,0.1); S = S + S' -@test split_nodes(RS(), S) == [0, 1, 1, 0, 0, 0, 0, 0, 1, 1] +@test RS()(S) == [0, 1, 1, 0, 0, 0, 0, 0, 1, 1] -a = load("thing.jld")["G"] -S, T = AMG.strength_of_connection(Classical(0.25), a) -@test split_nodes(RS(), S) == [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, +a = include("thing.jl") +S, T = Classical(0.25)(a) +@test RS()(S) == [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0] -@test split_nodes(RS(), ref_S) == Int.(vec(ref_split)) +@test RS()(ref_S) == Int.(vec(ref_split)) end @testset "Interpolation" begin # Direct Interpolation -using AMG +using AlgebraicMultigrid A = poisson(5) A = Float64.(A) splitting = [1,0,1,0,1] -P, R = AMG.direct_interpolation(A, copy(A), splitting) +P, R = AlgebraicMultigrid.direct_interpolation(A, copy(A), splitting) @test P == [ 1.0 0.0 0.0 0.5 0.5 0.0 0.0 1.0 0.0 0.0 0.5 0.5 0.0 0.0 1.0 ] -A = load("thing.jld")["G"] +A = include("thing.jl") ml = ruge_stuben(A) @test size(ml.levels[2].A, 1) == 19 end @@ -69,13 +74,13 @@ end @testset "Coarse Solver" begin A = float.(poisson(10)) b = A * ones(10) -@test sum(abs2, coarse_solver(Pinv(), A, b) - ones(10)) < 1e-6 +@test sum(abs2, Pinv(A)(similar(b), b) - ones(10)) < 1e-6 end @testset "Multilevel" begin A = poisson(1000) A = float.(A) #FIXME -ml = AMG.ruge_stuben(A) +ml = AlgebraicMultigrid.ruge_stuben(A) @test length(ml) == 8 s = [1000, 500, 250, 125, 62, 31, 15] n = [2998, 1498, 748, 373, 184, 91, 43] @@ -86,7 +91,7 @@ end @test size(ml.final_A, 1) == 7 @test nnz(ml.final_A) == 19 -A = load("randlap.jld")["G"] +A = include("randlap.jl") ml = ruge_stuben(A) @test length(ml) == 3 s = [100, 17] @@ -97,8 +102,13 @@ for i = 1:2 end @test size(ml.final_A, 1) == 2 @test nnz(ml.final_A) == 4 -@test round(AMG.operator_complexity(ml), 3) ≈ 1.142 -@test round(AMG.grid_complexity(ml), 3) ≈ 1.190 +@static if VERSION < v"0.7-" + @test round(AlgebraicMultigrid.operator_complexity(ml), 3) ≈ 1.142 + @test round(AlgebraicMultigrid.grid_complexity(ml), 3) ≈ 1.190 +else + @test round(AlgebraicMultigrid.operator_complexity(ml), digits=3) ≈ 1.142 + @test round(AlgebraicMultigrid.grid_complexity(ml), digits=3) ≈ 1.190 +end include("gmg.jl") @@ -123,7 +133,7 @@ x = solve(ml, A * ones(1000)) @test sum(abs2, x - ones(1000)) < 1e-8 -A = load("randlap.jld")["G"] +A = include("randlap.jl") ml = ruge_stuben(A, presmoother = fsmoother, postsmoother = fsmoother) @@ -137,7 +147,7 @@ x = solve(ml, A * ones(100)) end @testset "Preconditioning" begin -A = load("thing.jld")["G"] +A = include("thing.jl") n = size(A, 1) smoother = GaussSeidel(ForwardSweep()) ml = ruge_stuben(A, presmoother = smoother, @@ -283,15 +293,15 @@ for sz in [10, 5, 2] ml = ruge_stuben(a) @test isempty(ml.levels) @test size(ml.final_A) == (sz,sz) - @test AMG.operator_complexity(ml) == 1 - @test AMG.grid_complexity(ml) == 1 + @test AlgebraicMultigrid.operator_complexity(ml) == 1 + @test AlgebraicMultigrid.grid_complexity(ml) == 1 a = poisson(sz) ml = smoothed_aggregation(a) @test isempty(ml.levels) @test size(ml.final_A) == (sz,sz) - @test AMG.operator_complexity(ml) == 1 - @test AMG.grid_complexity(ml) == 1 + @test AlgebraicMultigrid.operator_complexity(ml) == 1 + @test AlgebraicMultigrid.grid_complexity(ml) == 1 end end diff --git a/test/sa_tests.jl b/test/sa_tests.jl index ba058f0..7200e04 100644 --- a/test/sa_tests.jl +++ b/test/sa_tests.jl @@ -1,4 +1,4 @@ -import AMG: scale_cols_by_largest_entry!, strength_of_connection, +import AlgebraicMultigrid: scale_cols_by_largest_entry!, SymmetricStrength, poisson function symmetric_soc(A::SparseMatrixCSC{T,V}, θ) where {T,V} D = abs.(diag(A)) @@ -11,14 +11,14 @@ function symmetric_soc(A::SparseMatrixCSC{T,V}, θ) where {T,V} j = j[mask] v = v[mask] - S = sparse(i,j,v, size(A)...) + spdiagm(D) - - scale_cols_by_largest_entry!(S) + S = sparse(i,j,v, size(A)...) + spdiagm(0=>D) for i = 1:size(S.nzval,1) S.nzval[i] = abs(S.nzval[i]) end + scale_cols_by_largest_entry!(S) + S end @@ -30,7 +30,7 @@ function test_symmetric_soc() for matrix in cases for θ in (0.0, 0.1, 0.5, 1., 10.) ref_matrix = symmetric_soc(matrix, θ) - calc_matrix = strength_of_connection(SymmetricStrength(θ), matrix) + calc_matrix, _ = SymmetricStrength(θ)(matrix) @test sum(abs2, ref_matrix - calc_matrix) < 1e-6 end @@ -42,7 +42,7 @@ function generate_matrices() cases = [] # Random matrices - srand(0) + seed!(0) for T in (Float32, Float64) for s in [2, 3, 5] @@ -113,11 +113,11 @@ function stand_agg(C) @assert length(R) == 0 - Pj = aggregates + 1 + Pj = aggregates .+ 1 Pp = collect(1:n+1) Px = ones(eltype(C), n) - SparseMatrixCSC(maximum(aggregates + 1), n, Pp, Pj, Px) + SparseMatrixCSC(maximum(aggregates .+ 1), n, Pp, Pj, Px) end # Standard aggregation tests @@ -128,7 +128,7 @@ function test_standard_aggregation() for matrix in cases for θ in (0.0, 0.1, 0.5, 1., 10.) C = symmetric_soc(matrix, θ) - calc_matrix = aggregation(StandardAggregation(), matrix) + calc_matrix = StandardAggregation()(matrix) ref_matrix = stand_agg(matrix) @test sum(abs2, ref_matrix - calc_matrix) < 1e-6 end @@ -152,7 +152,7 @@ function test_fit_candidates() end end function mask_candidates!(A,B) - B[(diff(A.colptr) .== 0)] = 0 + B[(diff(A.colptr) .== 0)] .= 0 end function generate_fit_candidates_cases() @@ -189,7 +189,7 @@ end function test_approximate_spectral_radius() cases = [] - srand(0) + seed!(0) push!(cases, [2. 0. 0. 1.]) @@ -206,98 +206,95 @@ function test_approximate_spectral_radius() end for A in cases - E,V = eig(A) + @static if VERSION < v"0.7-" + E,V = eig(A) + else + E,V = (eigen(A)...,) + end E = abs.(E) - largest_eig = find(E .== maximum(E))[1] + largest_eig = findall(E .== maximum(E))[1] expected_eig = E[largest_eig] @test isapprox(approximate_spectral_radius(A), expected_eig) - end # Symmetric matrices for A in cases A = A + A' - E,V = eig(A) + @static if VERSION < v"0.7-" + E,V = eig(A) + else + E,V = (eigen(A)...,) + end E = abs.(E) - largest_eig = find(E .== maximum(E))[1] + largest_eig = findall(E .== maximum(E))[1] expected_eig = E[largest_eig] @test isapprox(approximate_spectral_radius(A), expected_eig) - end - end # Test Gauss Seidel -import AMG: gs!, relax! -function test_gauss_seidel() - +import AlgebraicMultigrid: gs! +function test_gauss_seidel() N = 1 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = zeros(N) s = GaussSeidel(ForwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - zeros(N)) < 1e-8 N = 3 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = zeros(N) s = GaussSeidel(ForwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - [1.0/2.0, 5.0/4.0, 5.0/8.0]) < 1e-8 N = 1 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = zeros(N) s = GaussSeidel(BackwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - zeros(N)) < 1e-8 N = 3 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = zeros(N) s = GaussSeidel(BackwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - [1.0/8.0, 1.0/4.0, 1.0/2.0]) < 1e-8 N = 1 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = eltype(A).([10.]) s = GaussSeidel(ForwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - [5.]) < 1e-8 N = 3 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = eltype(A).(collect(0:N-1)) b = eltype(A).([10., 20., 30.]) s = GaussSeidel(ForwardSweep()) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - [11.0/2.0, 55.0/4, 175.0/8.0]) < 1e-8 N = 100 - A = spdiagm((2 * ones(N), -ones(N-1), -ones(N-1)), - (0, -1, 1), N, N) + A = spdiagm(0 => 2 * ones(N), -1 => -ones(N-1), 1 => -ones(N-1)) x = ones(eltype(A), N) b = zeros(eltype(A), N) s1 = GaussSeidel(ForwardSweep(), 200) - relax!(s1, A, x, b) + s1(A, x, b) resid1 = norm(A*x,2) x = ones(eltype(A), N) s2 = GaussSeidel(BackwardSweep(), 200) - relax!(s2, A, x, b) + s2(A, x, b) resid2 = norm(A*x,2) @test resid1 < 0.01 && resid2 < 0.01 @test isapprox(resid1, resid2) @@ -308,30 +305,27 @@ end function test_jacobi_prolongator() A = poisson(100) T = poisson(100) - x = smooth_prolongator(JacobiProlongation(4/3), A, T, 1, 1) - ref = load("ref_R.jld")["G"] + x = JacobiProlongation(4/3)(A, T, 1, 1) + ref = include("ref_R.jl") @test sum(abs2, x - ref) < 1e-6 end # Issue #24 function nodes_not_agg() - A = load("onetoall.jld")["G"] + A = include("onetoall.jl") ml = smoothed_aggregation(A) @test size(ml.levels[2].A) == (11,11) @test size(ml.final_A) == (2,2) end # Issue 26 -import AMG: relax! function test_symmetric_sweep() A = poisson(10) s = GaussSeidel(SymmetricSweep(), 4) x = ones(size(A,1)) b = zeros(size(A,1)) - relax!(s, A, x, b) + s(A, x, b) @test sum(abs2, x - [0.176765; 0.353529; 0.497517; 0.598914; 0.653311; 0.659104; 0.615597; 0.52275; - 0.382787; 0.203251]) < 1e-6 - + 0.382787; 0.203251]) < 1e-6 end - diff --git a/test/test.jl b/test/test.jl new file mode 100644 index 0000000..d62163d --- /dev/null +++ b/test/test.jl @@ -0,0 +1,5 @@ +Gm, Gn = 100, 100; +Gcolptr = [1, 21, 40, 66, 85, 101, 117, 134, 154, 169, 193, 211, 237, 255, 275, 299, 319, 341, 362, 385, 403, 428, 449, 469, 492, 514, 533, 547, 563, 579, 597, 625, 644, 662, 684, 700, 721, 743, 769, 789, 804, 820, 836, 862, 886, 906, 921, 938, 956, 981, 1002, 1015, 1040, 1065, 1081, 1100, 1124, 1136, 1155, 1180, 1200, 1218, 1243, 1266, 1282, 1295, 1313, 1337, 1345, 1368, 1383, 1404, 1417, 1443, 1459, 1480, 1499, 1526, 1552, 1582, 1609, 1624, 1651, 1664, 1680, 1697, 1716, 1740, 1756, 1771, 1788, 1802, 1821, 1850, 1872, 1889, 1907, 1920, 1940, 1955, 1981]; +Growval = [3, 6, 8, 16, 18, 22, 36, 37, 42, 45, 51, 52, 59, 66, 87, 90, 93, 94, 97, 100, 4, 9, 10, 15, 26, 28, 35, 40, 42, 46, 47, 50, 52, 53, 77, 80, 85, 92, 94, 1, 8, 9, 10, 11, 15, 16, 17, 19, 21, 22, 32, 35, 39, 42, 49, 50, 56, 58, 61, 65, 66, 77, 80, 82, 98, 2, 6, 15, 19, 24, 25, 29, 36, 40, 47, 53, 59, 73, 78, 85, 87, 88, 89, 100, 6, 11, 13, 21, 28, 30, 36, 39, 43, 44, 47, 59, 77, 82, 93, 98, 1, 4, 5, 18, 22, 24, 50, 57, 63, 64, 75, 78, 87, 90, 91, 100, 13, 15, 19, 21, 25, 26, 34, 36, 38, 56, 57, 59, 60, 67, 70, 78, 90, 1, 3, 19, 20, 24, 30, 33, 35, 45, 56, 63, 69, 70, 73, 74, 80, 82, 89, 91, 94, 2, 3, 14, 22, 25, 36, 37, 40, 44, 48, 50, 56, 59, 75, 93, 2, 3, 11, 13, 16, 35, 38, 41, 43, 44, 46, 47, 55, 60, 61, 62, 63, 71, 81, 82, 83, 87, 92, 96, 3, 5, 10, 13, 23, 24, 27, 29, 38, 39, 47, 50, 52, 55, 73, 76, 89, 93, 20, 22, 24, 28, 32, 39, 47, 49, 50, 57, 63, 64, 67, 69, 70, 71, 72, 73, 78, 79, 86, 91, 93, 95, 98, 100, 5, 7, 10, 11, 16, 17, 22, 28, 34, 41, 43, 49, 54, 55, 67, 78, 79, 100, 9, 23, 27, 28, 32, 36, 37, 38, 40, 49, 54, 57, 65, 67, 69, 73, 77, 81, 88, 90, 2, 3, 4, 7, 20, 27, 30, 31, 38, 39, 43, 44, 47, 53, 62, 71, 75, 82, 87, 89, 95, 98, 99, 100, 1, 3, 10, 13, 19, 27, 31, 32, 38, 40, 42, 44, 46, 50, 55, 61, 73, 78, 94, 95, 3, 13, 17, 19, 21, 26, 29, 39, 52, 53, 55, 61, 62, 68, 70, 79, 80, 81, 83, 87, 92, 99, 1, 6, 19, 21, 26, 34, 37, 43, 46, 51, 52, 53, 64, 65, 78, 79, 82, 91, 93, 94, 96, 3, 4, 7, 8, 16, 17, 18, 33, 36, 43, 48, 51, 58, 60, 62, 67, 69, 73, 90, 93, 94, 95, 100, 8, 12, 15, 21, 22, 32, 55, 56, 61, 63, 69, 70, 73, 78, 85, 86, 91, 98, 3, 5, 7, 17, 18, 20, 28, 29, 31, 32, 35, 36, 43, 45, 48, 52, 53, 55, 60, 66, 74, 77, 81, 82, 87, 1, 3, 6, 9, 12, 13, 20, 23, 31, 38, 44, 48, 50, 53, 54, 63, 75, 76, 85, 89, 100, 11, 14, 22, 34, 38, 52, 53, 59, 69, 76, 78, 79, 84, 86, 91, 92, 93, 94, 95, 99, 4, 6, 8, 11, 12, 26, 31, 36, 37, 38, 39, 48, 50, 52, 53, 57, 74, 76, 82, 83, 89, 97, 98, 4, 7, 9, 30, 33, 34, 41, 43, 45, 46, 49, 51, 56, 62, 63, 64, 66, 69, 71, 77, 81, 87, 2, 7, 17, 18, 24, 29, 38, 46, 51, 55, 58, 67, 69, 71, 73, 76, 78, 79, 80, 11, 14, 15, 16, 31, 41, 43, 56, 60, 69, 71, 90, 93, 96, 2, 5, 12, 13, 14, 21, 31, 41, 42, 49, 52, 60, 62, 66, 75, 84, 4, 11, 17, 21, 26, 31, 33, 40, 46, 61, 72, 73, 79, 88, 96, 99, 5, 8, 15, 25, 34, 39, 41, 44, 49, 51, 59, 62, 63, 66, 73, 82, 83, 94, 15, 16, 21, 22, 24, 27, 28, 29, 32, 34, 36, 39, 45, 48, 50, 52, 53, 60, 71, 75, 77, 79, 80, 82, 86, 96, 98, 100, 3, 12, 14, 16, 20, 21, 31, 33, 34, 48, 49, 64, 65, 69, 73, 74, 76, 79, 81, 8, 19, 25, 29, 32, 40, 49, 67, 71, 73, 74, 79, 80, 82, 84, 85, 97, 98, 7, 13, 18, 23, 25, 30, 31, 32, 35, 50, 51, 58, 62, 63, 65, 66, 71, 73, 80, 87, 88, 99, 2, 3, 8, 10, 21, 34, 50, 58, 60, 62, 70, 75, 80, 84, 93, 96, 1, 4, 5, 7, 9, 14, 19, 21, 24, 31, 37, 53, 58, 61, 73, 74, 78, 83, 91, 93, 100, 1, 9, 14, 18, 24, 36, 38, 48, 50, 58, 59, 62, 66, 73, 74, 79, 86, 87, 89, 92, 93, 99, 7, 10, 11, 14, 15, 16, 22, 23, 24, 26, 37, 39, 42, 49, 59, 69, 71, 77, 79, 82, 84, 87, 95, 96, 98, 99, 3, 5, 11, 12, 15, 17, 24, 30, 31, 38, 45, 48, 59, 71, 74, 77, 78, 80, 92, 98, 2, 4, 9, 14, 16, 29, 33, 41, 49, 51, 76, 77, 78, 88, 93, 10, 13, 25, 27, 28, 30, 40, 54, 59, 67, 69, 71, 77, 79, 80, 94, 1, 2, 3, 16, 28, 38, 45, 55, 58, 61, 64, 67, 69, 76, 88, 93, 5, 10, 13, 15, 18, 19, 21, 25, 27, 43, 44, 46, 49, 53, 54, 55, 56, 59, 66, 71, 75, 80, 82, 85, 96, 99, 5, 9, 10, 15, 16, 22, 30, 43, 47, 49, 56, 58, 60, 64, 73, 79, 81, 82, 88, 90, 93, 94, 98, 100, 1, 8, 21, 25, 31, 39, 42, 48, 49, 52, 62, 63, 66, 72, 74, 81, 82, 84, 93, 97, 2, 10, 16, 18, 25, 26, 29, 43, 54, 72, 86, 88, 92, 94, 97, 2, 4, 5, 10, 11, 12, 15, 44, 50, 53, 55, 71, 72, 83, 90, 93, 97, 9, 19, 21, 22, 24, 31, 32, 37, 39, 45, 52, 56, 62, 75, 76, 77, 85, 86, 3, 12, 13, 14, 25, 28, 30, 32, 33, 38, 40, 43, 44, 45, 52, 53, 56, 59, 61, 75, 76, 84, 92, 93, 97, 2, 3, 6, 9, 11, 12, 16, 22, 24, 31, 34, 35, 37, 47, 57, 59, 83, 86, 87, 92, 94, 1, 18, 19, 25, 26, 30, 34, 40, 56, 59, 66, 96, 100, 1, 2, 11, 17, 18, 21, 23, 24, 28, 31, 45, 48, 49, 57, 58, 61, 76, 77, 78, 82, 85, 88, 95, 98, 100, 2, 4, 15, 17, 18, 21, 22, 23, 24, 31, 36, 43, 47, 49, 61, 64, 66, 73, 74, 75, 76, 79, 80, 87, 100, 13, 14, 22, 41, 43, 46, 59, 61, 62, 64, 67, 77, 79, 81, 88, 96, 10, 11, 13, 16, 17, 20, 21, 26, 42, 43, 47, 55, 59, 62, 67, 73, 78, 88, 89, 3, 7, 8, 9, 20, 25, 27, 43, 44, 48, 49, 51, 60, 62, 63, 65, 69, 73, 78, 79, 81, 84, 86, 87, 6, 7, 12, 14, 24, 50, 52, 64, 66, 73, 88, 93, 3, 19, 26, 34, 35, 36, 37, 42, 44, 52, 63, 70, 71, 77, 85, 86, 87, 91, 95, 1, 4, 5, 7, 9, 23, 30, 37, 38, 39, 41, 43, 49, 50, 51, 54, 55, 60, 63, 68, 69, 74, 81, 90, 93, 7, 10, 19, 21, 27, 28, 31, 35, 44, 56, 59, 61, 63, 76, 77, 80, 84, 92, 94, 100, 3, 10, 16, 17, 20, 29, 36, 42, 49, 52, 53, 54, 60, 72, 77, 78, 90, 100, 10, 15, 17, 19, 25, 28, 30, 34, 35, 37, 45, 48, 54, 55, 56, 70, 76, 78, 79, 80, 81, 82, 86, 97, 100, 6, 8, 10, 12, 20, 22, 25, 30, 34, 45, 56, 58, 59, 60, 63, 67, 75, 84, 86, 89, 91, 93, 96, 6, 12, 18, 25, 32, 42, 44, 53, 54, 57, 71, 78, 84, 85, 95, 98, 3, 14, 18, 32, 34, 56, 65, 78, 80, 86, 91, 93, 95, 1, 3, 21, 25, 28, 30, 34, 37, 43, 45, 51, 53, 57, 70, 72, 75, 82, 85, 7, 12, 13, 14, 19, 26, 33, 41, 42, 54, 55, 63, 67, 68, 70, 74, 77, 78, 79, 82, 87, 90, 92, 94, 17, 59, 67, 69, 70, 80, 94, 95, 8, 12, 14, 19, 20, 23, 25, 26, 27, 32, 38, 41, 42, 56, 59, 68, 71, 75, 87, 92, 96, 98, 100, 7, 8, 12, 17, 20, 35, 58, 62, 66, 67, 68, 73, 79, 81, 89, 10, 12, 15, 25, 26, 27, 31, 33, 34, 38, 39, 41, 43, 47, 58, 64, 69, 71, 77, 87, 93, 12, 29, 45, 46, 47, 61, 66, 74, 78, 79, 80, 97, 100, 4, 8, 11, 12, 14, 16, 19, 20, 26, 29, 30, 32, 33, 34, 36, 37, 44, 53, 55, 56, 57, 70, 82, 87, 89, 93, 8, 21, 24, 32, 33, 36, 37, 39, 45, 53, 59, 67, 72, 75, 80, 97, 6, 9, 15, 22, 28, 31, 35, 43, 48, 49, 53, 63, 66, 69, 74, 76, 82, 87, 91, 92, 100, 11, 22, 23, 24, 26, 32, 40, 42, 48, 49, 52, 53, 60, 62, 75, 77, 91, 94, 96, 2, 3, 5, 14, 21, 25, 31, 38, 39, 40, 41, 48, 52, 54, 58, 60, 61, 67, 71, 76, 77, 86, 88, 91, 92, 94, 96, 4, 6, 7, 12, 13, 16, 18, 20, 23, 26, 36, 39, 40, 52, 55, 56, 61, 62, 64, 65, 67, 72, 78, 83, 84, 90, 12, 13, 17, 18, 23, 26, 29, 31, 32, 33, 37, 38, 41, 44, 53, 54, 56, 62, 67, 70, 72, 82, 87, 90, 92, 93, 94, 97, 98, 99, 2, 3, 8, 17, 26, 31, 33, 34, 35, 39, 41, 43, 53, 60, 62, 65, 68, 72, 74, 80, 83, 84, 85, 93, 95, 96, 99, 10, 14, 17, 21, 25, 32, 44, 45, 54, 56, 59, 62, 70, 81, 99, 3, 5, 8, 10, 15, 18, 21, 24, 30, 31, 33, 38, 43, 44, 45, 52, 62, 66, 67, 73, 75, 79, 84, 89, 90, 92, 95, 10, 17, 24, 30, 36, 47, 50, 78, 80, 85, 88, 96, 100, 23, 28, 33, 35, 38, 45, 49, 56, 60, 63, 64, 78, 80, 82, 90, 94, 2, 4, 20, 22, 33, 43, 48, 52, 58, 64, 66, 80, 83, 95, 98, 99, 100, 12, 20, 23, 31, 37, 46, 48, 50, 56, 58, 62, 63, 65, 77, 89, 93, 94, 98, 99, 1, 4, 6, 10, 15, 17, 21, 25, 34, 37, 38, 50, 53, 56, 58, 67, 69, 71, 73, 75, 79, 87, 95, 99, 4, 14, 29, 34, 40, 42, 44, 46, 52, 54, 55, 57, 77, 83, 94, 96, 4, 8, 11, 15, 22, 24, 37, 55, 63, 70, 73, 82, 86, 90, 100, 1, 6, 7, 14, 19, 27, 44, 47, 59, 61, 67, 78, 79, 82, 84, 89, 91, 6, 8, 12, 18, 20, 23, 36, 58, 63, 65, 75, 76, 77, 90, 2, 10, 17, 23, 37, 39, 46, 49, 50, 60, 67, 69, 75, 77, 79, 82, 93, 95, 98, 1, 5, 9, 11, 12, 18, 19, 23, 27, 35, 36, 37, 40, 42, 44, 45, 47, 49, 57, 59, 63, 65, 71, 73, 79, 80, 86, 92, 98, 1, 2, 8, 16, 18, 19, 23, 30, 41, 44, 46, 50, 60, 67, 68, 76, 77, 79, 84, 86, 88, 97, 12, 15, 16, 19, 23, 38, 52, 58, 64, 65, 68, 80, 82, 85, 87, 92, 100, 10, 18, 27, 29, 31, 35, 38, 43, 51, 54, 63, 69, 76, 77, 80, 83, 88, 100, 1, 24, 33, 45, 46, 47, 49, 62, 72, 74, 79, 94, 97, 3, 5, 12, 15, 20, 24, 31, 33, 38, 39, 44, 52, 64, 69, 79, 85, 86, 92, 93, 98, 15, 17, 23, 29, 34, 37, 38, 43, 79, 80, 81, 85, 86, 87, 100, 1, 4, 6, 12, 13, 15, 19, 22, 31, 36, 44, 51, 52, 53, 60, 61, 62, 69, 72, 75, 83, 85, 89, 95, 96, 99]; +Gnzval = [0.30570065342053154, 0.905803706195337, 0.5486462806827126, 0.8243213559107914, 0.31931103423222806, 0.46246587439931064, 0.9841769885098344, 0.37148886053422125, 0.4922975818753703, 0.22964450452196905, 0.5435252370432331, 0.30459684910568474, 0.5627975689918179, 0.9233829232762429, 0.8398922336727683, 0.7981145249934654, 0.5271617620078821, 0.14835492074074264, 0.9350401707195675, 0.022487222839689736, 0.7143926955231628, 0.8256989651858082, 0.6665603644974687, 0.6913841249203949, 0.9922967825341977, 0.30808223251073863, 0.6713716144909807, 0.7721536885543203, 0.22857680109305, 0.5510813864383033, 0.5524462919695232, 0.3053143382397816, 1.5457707675441692, 0.022583597275840805, 0.617003305800838, 0.32770581067592897, 0.6799216244119353, 0.8559009941050417, 0.36755326030160496, 0.30570065342053154, 0.5434753120551996, 0.11343498316350265, 0.14082776550421117, 0.01192461246804366, 0.9460972454534755, 0.9905040303409169, 0.04472615885203024, 0.8513254097009955, 0.034419356416512725, 0.8749394970204205, 0.9465584985068294, 0.080297733393774, 0.3495847159379961, 0.8313915731950678, 0.5239005971497637, 0.3843481311225281, 0.9297897296421593, 0.572451831535215, 0.6865246130144149, 0.04154217920172831, 0.10663551066273791, 0.03882329030859588, 0.8186557301057427, 0.3248196736347324, 0.8683375539628453, 0.7143926955231628, 0.4230602210666581, 1.1338612803176376, 0.8817576855470557, 0.05640515398514645, 0.6418161824184287, 0.6910501139205614, 0.5603246929611738, 0.08889372569112375, 0.5988507108501036, 0.8169604139190232, 0.08180873286415236, 1.3730673676708254, 0.22099015878050166, 0.7651513605979896, 0.637919830089438, 0.9943492161225798, 0.4082728512217113, 0.49107486405247136, 0.1250456151068069, 0.5410845503607156, 0.12422565343156133, 0.024147142462195736, 0.12468301140307081, 0.2580684969526328, 0.021895090464451705, 0.3038977454887539, 0.6394129974111553, 1.5240046691565643, 0.8279012959859486, 0.1278385178848085, 0.9220718502238312, 0.5516410414426027, 0.954391552129005, 0.5521420917971065, 0.905803706195337, 0.4230602210666581, 0.1250456151068069, 0.5872716724142355, 0.6678487952960217, 0.7998624991923358, 0.31688366347318575, 0.6713072290824307, 0.25626559986702313, 0.4768505020573308, 0.9070184044368812, 0.264911310717008, 0.5227425067314215, 0.22106143726159222, 0.45758297444788987, 0.403887191040305, 0.47165925978831624, 0.3969650395624289, 0.8195092963351773, 0.9934981630682629, 0.20032515342137258, 0.10681061642688716, 0.7182826898606698, 0.8951860999401184, 0.6613228765703683, 0.5558496451988013, 0.18989135832899962, 0.7668121880463186, 1.2477415369651164, 0.8534971586100903, 0.5935078507907501, 0.6622042314371697, 0.9044044672988854, 0.5486462806827126, 0.5434753120551996, 0.10979127065800554, 0.8384429740234149, 0.21485624956104643, 0.10932996770310255, 0.649922665665174, 0.9460509094346983, 0.5175755782668303, 0.20257139397450907, 0.4500054138219838, 0.2564708106494049, 0.97796779789206, 0.24495910867397375, 0.9636054262758076, 0.8520044849841384, 0.7425930531114051, 0.17854646291335197, 0.36642919784071104, 0.08063802687864108, 0.8256989651858082, 0.11343498316350265, 1.2039249928452818, 0.3276332486808824, 0.6804452698755388, 0.5251040465719641, 0.1116429064216573, 0.5720927686156287, 0.7830134201928025, 0.07519909733706176, 0.5345407426173243, 0.656357983582869, 0.9978004344209452, 0.057560643005053924, 0.6006062609106879, 0.6665603644974687, 0.14082776550421117, 0.6615110201397072, 0.16321876828513626, 0.001151951745084645, 0.3182212708570791, 0.36087764709333725, 0.4199989619367863, 0.22120106513824078, 0.08755063547457254, 0.11665893787030113, 0.5712185739700724, 0.12069224524660083, 0.06085931716484083, 0.527429723681659, 0.8476043151912853, 0.6205446202950187, 0.1791165172359801, 0.4748101508811371, 0.03932836265363937, 0.8199035803926842, 0.3240120030671727, 0.7179519497517932, 0.05725480919061554, 0.01192461246804366, 0.5410845503607156, 0.6615110201397072, 0.847313917156741, 0.36537648116817545, 0.09693233195470485, 0.8899698110006229, 0.44972910186733683, 0.681895830797288, 0.18225332539430195, 0.7614160970648216, 0.27520537132991785, 0.7730871536239041, 0.9481690743269224, 0.12914428954218837, 1.76846747041627, 0.3957493697675798, 0.7670628528498982, 0.7463230006241537, 0.203732253961469, 0.490221371669872, 0.3918539213731762, 0.6550460130374118, 0.9512131954088192, 0.8251170624667956, 0.5061287037151805, 0.4185082653337875, 0.8723385198267206, 0.7815462421607451, 0.3928700705877739, 0.18129536119261935, 0.7013813480094384, 0.1118859987483034, 0.13991874135332782, 0.30251736752343716, 0.473319464138362, 0.9923018049228953, 0.1424377352680326, 0.35602171313695496, 0.9722237677171546, 0.504966569994904, 0.2664719256186341, 0.27931623025521257, 0.9275835711795133, 0.12422565343156133, 0.47165925978831624, 0.16321876828513626, 0.847313917156741, 0.16688184693792518, 0.13194408301446692, 0.8291622972561545, 0.4678567699941558, 0.9114202239352542, 0.8700391990478351, 0.6465629803533945, 0.7699945477585401, 0.5662642734575563, 0.2619702847509826, 0.195519230175359, 0.7599425621729325, 0.6282796964620732, 0.05587490410692042, 1.2039249928452818, 0.9585857070040449, 0.40077503330261766, 0.2864174985553869, 0.37906308219118445, 0.9067446167441886, 0.8161143481015705, 0.33709844105885356, 0.008008628142579521, 0.04025363659833947, 0.08677187465481406, 0.7552855936291201, 0.7595402125829787, 0.8855933927248747, 0.3243272135191342, 0.20353497564344725, 0.5607046017126742, 0.0013444671182565315, 0.26145504882090886, 0.8657154425014815, 0.6913841249203949, 0.9460972454534755, 1.1338612803176376, 0.3969650395624289, 0.44919234484719994, 0.7368945481814069, 0.37502283520635005, 0.8054051625831287, 0.26210981647446285, 0.036387010210889636, 0.19479755978856184, 0.2747281351556192, 0.04932798215814782, 0.6936969138013196, 0.6708784320805292, 0.03160792090226949, 0.5438285403665997, 0.2296993036631163, 0.17347979416031123, 0.9459164683250751, 0.4297343125880855, 0.8391097592604597, 0.2919422115727788, 0.3901805234282545, 0.8243213559107914, 0.9905040303409169, 0.001151951745084645, 0.16688184693792518, 0.8817172875806134, 0.208879533247879, 0.7893620059380417, 0.38915075995643256, 0.6125984880859863, 0.4078993113088416, 0.4255237049179488, 0.009867795258318157, 0.16407794712371637, 0.1526945062022811, 0.2940902150216069, 0.33689098445081433, 0.24507063856995037, 0.5203417141275968, 0.6461289971578776, 0.9019985067880534, 0.04472615885203024, 0.13194408301446692, 0.24698874161987439, 0.09559045549386713, 0.07816655014263518, 0.8555962997802189, 0.020163641505229313, 0.5375284545574046, 0.33999113675759585, 0.18414470239910719, 0.07318437440546677, 0.5446212120838012, 0.9120839300830221, 0.19329991648173483, 0.2232595012298182, 0.013912838135412775, 0.24296151388645537, 0.4777307185881361, 0.5001132304901748, 0.55544712396171, 0.8830249290720291, 0.16750453639066376, 0.31931103423222806, 0.5872716724142355, 0.7417224395995572, 0.19416430997599843, 0.6196989980457792, 0.6439804248875531, 0.6449301277609898, 0.5018342155993363, 0.969235476535079, 0.25947151956590964, 0.29506619222364217, 0.8168382670319918, 0.6936178675892353, 0.7927951134386042, 0.15293201347807606, 0.603506319650142, 0.8744913699084358, 0.7892823340613053, 0.04384256656449437, 0.9141731616211415, 0.7899949901914345, 0.8513254097009955, 0.8817576855470557, 0.8195092963351773, 0.10979127065800554, 0.8817172875806134, 0.09559045549386713, 0.7417224395995572, 0.4449939577284543, 0.5441998434509558, 0.23752097518149595, 0.6658044138610562, 0.704629617887317, 1.1568801817078156, 0.5922792895889639, 0.28150900934964285, 0.6979596281543703, 0.9284998102962352, 0.6035311675240218, 0.10164627444268404, 0.8648116620377351, 0.8927641863671658, 0.6720862649167656, 0.9228969599943546, 0.8384429740234149, 0.7463230006241537, 0.44919234484719994, 0.14392009436140896, 0.1210960835861028, 0.31555339075870825, 0.10196186412350072, 0.5798649380140739, 0.9250862337531842, 0.9411806879655977, 0.7680072032824106, 0.8702984322509766, 0.6444918421024268, 0.05574872548255616, 0.2554747585202164, 0.47796321713668766, 0.08206460127090032, 0.7459679649704893, 0.034419356416512725, 0.024147142462195736, 0.9934981630682629, 0.07816655014263518, 0.19416430997599843, 0.14392009436140896, 0.11824424826631685, 0.3032084772440822, 0.651767712260664, 0.7167850878983919, 0.43708593012999897, 0.3807684566133518, 0.3592512207164684, 0.7392692147482314, 0.17773086289321838, 0.393231607740824, 0.6537495091003236, 0.6238538366759847, 0.8189640022579967, 1.075691221452822, 0.8982628680559843, 0.49268880608499543, 0.9697030405971934, 0.1883020983576198, 0.23834063672251937, 0.46246587439931064, 0.8749394970204205, 0.6678487952960217, 0.3276332486808824, 0.203732253961469, 0.8291622972561545, 0.1210960835861028, 0.7562381288540707, 0.6965146195012797, 0.9622411231921082, 0.24314086525162226, 0.7184565784357972, 0.8731777860813359, 0.9535368122004706, 0.8539089250025051, 0.8805319508228346, 0.2586840805353656, 0.6256795934166484, 0.9782308664848147, 0.45189660226998885, 0.9727236350283752, 0.36537648116817545, 0.9585857070040449, 0.7562381288540707, 0.4939842231338163, 0.4293790911257105, 0.5134198805385135, 0.21135141527612866, 0.17931628532697164, 0.11738339017674537, 0.6374437388890768, 0.977911111572237, 0.1850833824998659, 0.33613152898443266, 0.35755548533189563, 0.25614935915915793, 0.9933101940184865, 0.047343099390839916, 0.2373939964593581, 0.6922413302954813, 0.3054421604127602, 0.05640515398514645, 0.7998624991923358, 0.21485624956104643, 0.09693233195470485, 0.490221371669872, 0.8031106650968678, 0.9257841898448309, 0.8721690574259171, 0.2725785687235176, 0.854923216696402, 0.5083861565297865, 0.06146707632026982, 0.648098662710743, 0.8427281329892025, 0.6750412963204047, 0.9971534789959651, 0.2659963570027344, 0.027511185640656022, 0.9533492310119924, 0.3179695024945324, 0.6107340401662686, 0.827485278041241, 0.48518833185954935, 0.6418161824184287, 0.20032515342137258, 0.6804452698755388, 0.5673314704401973, 0.43994398514057886, 0.6420757318629053, 0.5964407929972335, 0.3991392056007088, 0.6123891255485969, 0.5468297182467701, 0.8454990015478323, 0.11730044014239582, 0.9880390097382523, 0.34472701899117975, 0.8052022924903093, 0.06807357023827776, 0.8384549679358853, 1.4267157766332097, 0.022102813898072338, 0.9175764902162105, 0.24319885334875235, 0.4948287769495232, 0.9922967825341977, 0.10681061642688716, 0.8555962997802189, 0.6196989980457792, 0.8031106650968678, 0.41188473416528093, 0.327811213232275, 0.40806841445669106, 0.7856578997376429, 0.19016006717931355, 0.8112432954571449, 0.13901944292708346, 0.41600700958167836, 0.9243880136220362, 0.5650512998981789, 0.12913942983313764, 0.3841390327551619, 0.6507971104239889, 0.5977757063227913, 0.8899698110006229, 0.40077503330261766, 0.7368945481814069, 0.208879533247879, 0.5000150215470842, 0.9541125075000254, 0.689522692342599, 0.8195594012995251, 0.5243482618232198, 0.9933418942509429, 0.999679998704398, 0.41911982248055524, 0.9081726300174722, 0.6350245834185881, 0.30808223251073863, 0.12468301140307081, 0.3918539213731762, 0.4678567699941558, 0.2864174985553869, 0.11824424826631685, 0.26719200827955847, 0.34797627991820845, 0.2388799704635538, 1.2484567947164569, 0.5914178376261763, 0.5561709156887298, 0.6532926465141342, 0.9848574215601498, 0.7454906726873369, 0.7737148819120725, 0.6910501139205614, 0.44972910186733683, 0.020163641505229313, 0.3032084772440822, 0.41188473416528093, 0.3066244218981531, 0.3121379723857436, 0.21447358421554275, 0.6606722040622683, 0.8655095412230072, 0.9361854086634398, 0.4731019333869735, 0.81390181947003, 0.9100425313491673, 0.7655386459702904, 0.12017809602207286, 0.2580684969526328, 0.10932996770310255, 0.37502283520635005, 0.5673314704401973, 0.9257381658496311, 0.4321754405996028, 1.3585480054567127, 0.5941416419724268, 0.707921191489812, 0.42144167085403583, 0.025176757587499488, 0.923774966211045, 0.25949695231450476, 0.9714304003104139, 0.1222037720143947, 0.7500976155763743, 0.9944386252678967, 0.9561123998695162, 0.8054051625831287, 0.7893620059380417, 0.651767712260664, 0.6965146195012797, 0.9257841898448309, 0.5000150215470842, 0.26719200827955847, 0.3066244218981531, 0.6023012252996598, 0.1331431956556648, 0.6033382386134358, 0.04203712793910719, 0.48529936854631583, 0.3771925659931743, 0.305833802475038, 0.7180880561370073, 0.9347945272342162, 0.467732105961137, 0.9679186820778418, 0.302456648543836, 0.3123054179289535, 0.01919901559187176, 0.16126731700918007, 0.41308371598256244, 0.32838823354784763, 0.3562725153103399, 0.06089155325573237, 0.33719912390286155, 0.9465584985068294, 0.6550460130374118, 0.37906308219118445, 0.38915075995643256, 0.31555339075870825, 0.7167850878983919, 0.6023012252996598, 0.0656522457367621, 0.14425359639402502, 0.15922087943628904, 0.5045206099801185, 0.5795697854651862, 0.9550029735477841, 0.5077604779042135, 0.7167887048485948, 0.05398656168242022, 0.9965691677751003, 0.958313958375463, 0.36566750086598865, 0.649922665665174, 0.4449939577284543, 0.43994398514057886, 0.3121379723857436, 0.0656522457367621, 0.5915116773222644, 0.7495407638307536, 0.5436273390960078, 0.9409308732581374, 0.3375159286897407, 0.7875401680900798, 0.379011220612518, 0.22545552849150985, 0.10735497645638614, 0.5194938393704118, 0.9992300825494427, 0.7038788766592174, 0.38398373314433343, 0.7182826898606698, 0.9114202239352542, 0.6439804248875531, 0.4939842231338163, 0.6420757318629053, 0.9257381658496311, 0.1331431956556648, 0.14425359639402502, 0.21508893280150154, 0.813066644670323, 0.667722147580442, 0.8156487233194982, 0.3209251786340577, 0.7461992195042368, 0.7021182893491835, 0.3267256101975138, 0.7129023446054965, 0.9299700766314636, 0.6396592859883623, 0.10989026284023073, 0.5657016816073326, 0.9891500013994039, 0.6713716144909807, 0.080297733393774, 0.9460509094346983, 0.3182212708570791, 0.43708593012999897, 0.21508893280150154, 0.7246654126541048, 0.16663293526589684, 1.0580399677165686, 0.12282823292368361, 0.22595618505340287, 0.9025467764252793, 0.7268280636664082, 0.0948773928697011, 0.9501915306489026, 0.29760177279608135, 0.9841769885098344, 0.5603246929611738, 0.021895090464451705, 0.8951860999401184, 0.5251040465719641, 0.9067446167441886, 0.5441998434509558, 0.3807684566133518, 0.8721690574259171, 0.6033382386134358, 0.8757043684156682, 0.27008484636960595, 0.37915745114767896, 0.3935805450220833, 0.4062099787185429, 0.548563593771904, 0.25650038050763313, 0.8931836707721248, 0.21774655958825373, 1.8819864639475046, 0.415358427338101, 0.37148886053422125, 0.1116429064216573, 0.8161143481015705, 0.6449301277609898, 0.2725785687235176, 0.8757043684156682, 0.46000541263760764, 0.5127368374554035, 0.05078608734569512, 0.5206678110963621, 0.6638750833609075, 0.4522816561092462, 0.661502716737584, 0.5833238345958078, 0.0380548689640694, 1.3714525194241796, 0.7015236152363729, 0.5401332649446173, 0.6731372698712614, 0.3707569265866897, 0.1738180776092173, 0.809329587160676, 0.6613228765703683, 0.36087764709333725, 0.681895830797288, 0.33709844105885356, 0.26210981647446285, 0.6125984880859863, 0.9622411231921082, 0.4293790911257105, 0.854923216696402, 0.327811213232275, 0.46000541263760764, 0.2586158459189638, 0.40734859654680156, 0.7856116468584462, 0.508107095700737, 0.821675913713954, 0.45759688688501865, 0.7090101180192818, 0.8866080943161159, 0.6624352107832201, 0.8838736299628374, 0.6176098541886701, 0.8828216032169565, 0.2691553052764686, 0.42542666758149683, 0.13590263787500034, 0.3495847159379961, 0.3038977454887539, 0.18225332539430195, 0.9512131954088192, 0.036387010210889636, 0.5375284545574046, 0.5083861565297865, 0.4321754405996028, 0.04203712793910719, 0.2586158459189638, 0.6549955132487466, 0.8758363630991788, 0.29745399276323337, 0.2114956095292635, 0.827388455259159, 0.05925518307237043, 0.9849768023447518, 0.919321373711989, 0.591128466305826, 0.13939320252880982, 0.7721536885543203, 0.08889372569112375, 0.5720927686156287, 0.008008628142579521, 0.4078993113088416, 0.21447358421554275, 0.5915116773222644, 0.8233045267960766, 0.9926104257295494, 0.2406666363181995, 0.2508014867915729, 0.8623498024241238, 0.9535671027782069, 0.8589581000145132, 0.49351794643597025, 0.4199989619367863, 0.8700391990478351, 0.5964407929972335, 0.9541125075000254, 0.34797627991820845, 1.3585480054567127, 0.8233045267960766, 0.846731415901818, 0.030583945173830784, 0.8234760829618897, 0.26552506428102385, 0.48912032319931, 0.3497629641499387, 0.03349994741046869, 0.7455594748307179, 0.02268839835932468, 0.4922975818753703, 0.22857680109305, 0.8313915731950678, 0.4255237049179488, 0.2388799704635538, 0.40734859654680156, 0.05374372191389276, 0.2677747648571114, 0.16562102744089047, 0.8792096350193037, 0.8178099465101074, 0.39997516426263746, 0.2076899218736563, 0.5445357536593562, 0.6473241578340836, 0.11347478664233934, 0.6394129974111553, 0.22120106513824078, 0.6465629803533945, 0.19479755978856184, 0.5018342155993363, 0.23752097518149595, 0.3592512207164684, 0.3991392056007088, 0.689522692342599, 1.3347309926475743, 0.4739761640119662, 0.6997435273012329, 0.7373905443968534, 0.7092210301094077, 0.47125274256306415, 0.9224565571981902, 0.8881790860921817, 0.7902476556340827, 0.24673404577072877, 0.7175100718324989, 0.5824252053727317, 0.031276495554763306, 0.5216957173829442, 0.4712583263162118, 0.8692555266234883, 0.07896079521569477, 1.5240046691565643, 0.7830134201928025, 0.08755063547457254, 0.2747281351556192, 0.009867795258318157, 0.24314086525162226, 0.5941416419724268, 0.4739761640119662, 0.5394317645939151, 0.9072951760164571, 0.7255189049897048, 0.053449927785429674, 0.3102695814911316, 0.5640311597396765, 0.49505782927253805, 0.8094552373927979, 0.3122481963493877, 0.11713061015608939, 0.4439055285783302, 0.3982853215552502, 0.5519315169259811, 0.793910138704949, 0.8704542016950014, 0.4262021236624105, 0.22964450452196905, 0.5175755782668303, 0.7392692147482314, 0.6123891255485969, 0.48529936854631583, 0.6549955132487466, 0.05374372191389276, 0.8389997884980509, 0.06165934003401907, 0.9143056100053031, 0.8093001399552857, 0.47381014543644584, 0.04611092728002264, 0.5241666213447769, 0.04102638045394058, 1.7366695935605267, 0.057844730035558234, 0.08508237949315811, 0.8736211075734264, 0.819557234507829, 0.5510813864383033, 0.11665893787030113, 0.16407794712371637, 0.969235476535079, 0.5468297182467701, 0.40806841445669106, 0.6606722040622683, 0.6997435273012329, 0.589067908777795, 0.3882112966088993, 0.08134217167984414, 0.17662739645038705, 0.8152865701329146, 0.45426276238657537, 0.24235598044148499, 0.5524462919695232, 0.5988507108501036, 0.8279012959859486, 0.5712185739700724, 0.7614160970648216, 0.8251170624667956, 0.04932798215814782, 0.5394317645939151, 0.8357009965160682, 0.14606889633644693, 0.1350007114766254, 0.7220671664780822, 0.20548721520043856, 0.6563993736998324, 0.5954279331495635, 0.9490765611667389, 0.7645910502083084, 0.07519909733706176, 0.6658044138610562, 0.17773086289321838, 0.7184565784357972, 0.06146707632026982, 0.3771925659931743, 0.15922087943628904, 0.5127368374554035, 0.8758363630991788, 0.8389997884980509, 0.4200397492578831, 0.3706781596650235, 0.9571081726878841, 0.9933410040284103, 0.5612078754071266, 0.3861508635481834, 0.22336995304314455, 0.9470156163956054, 0.5239005971497637, 0.5061287037151805, 0.7699945477585401, 0.04025363659833947, 0.8454990015478323, 1.2484567947164569, 0.707921191489812, 0.5045206099801185, 0.7495407638307536, 0.7856116468584462, 0.9926104257295494, 0.7373905443968534, 0.9072951760164571, 0.06165934003401907, 0.38698528607839844, 0.27328249512443503, 0.15611579997495273, 0.8282202959236682, 0.6685500588074829, 0.5928279548332942, 0.4968763777842553, 0.9626553306990575, 0.8842032951337915, 0.7650967874785879, 0.949706750182576, 0.3053143382397816, 0.3843481311225281, 0.31688366347318575, 0.5345407426173243, 0.27520537132991785, 0.4185082653337875, 0.1526945062022811, 0.8731777860813359, 0.648098662710743, 0.305833802475038, 0.813066644670323, 0.7246654126541048, 0.05078608734569512, 0.8357009965160682, 0.2700208836829696, 0.3560868551142413, 1.3104435167297623, 0.20955153916394686, 0.23190010357111834, 0.98545894788806, 0.8275162123351905, 0.5435252370432331, 0.25947151956590964, 0.704629617887317, 0.11730044014239582, 0.7856578997376429, 0.42144167085403583, 0.667722147580442, 0.2406666363181995, 0.9926667497829758, 0.9341276558254143, 0.9244373008629085, 0.4380646569066018, 0.40669867543191995, 0.30459684910568474, 1.5457707675441692, 0.7730871536239041, 0.33999113675759585, 0.29506619222364217, 0.393231607740824, 0.5134198805385135, 0.8427281329892025, 0.5914178376261763, 0.7180880561370073, 0.9143056100053031, 0.4200397492578831, 0.38698528607839844, 0.8346422797496875, 0.052290486388985924, 0.0786190273751175, 0.5538590116399038, 0.4050981491900736, 0.885712300608636, 0.07194834833952912, 0.3901816737984607, 0.9601569275007178, 0.7954057492904651, 0.6964104378114733, 0.6308236911248397, 0.022583597275840805, 0.8169604139190232, 0.6936969138013196, 0.18414470239910719, 0.8168382670319918, 0.6537495091003236, 0.9535368122004706, 0.21135141527612866, 0.6750412963204047, 0.9347945272342162, 0.27008484636960595, 0.7092210301094077, 0.14606889633644693, 0.27328249512443503, 0.9883695454442711, 0.31061106653721104, 0.9486214622420148, 1.0281066988949472, 0.93878711592619, 0.8266028242410084, 0.708573195884836, 0.816968218414319, 0.009733706438177059, 0.08447698820372063, 0.33693700040358876, 0.5662642734575563, 0.08677187465481406, 0.8539089250025051, 0.846731415901818, 0.47125274256306415, 0.589067908777795, 0.3872086351651858, 0.11375962292400343, 0.39372704458458707, 0.5930880580272853, 0.07352365831954111, 0.5425341130052295, 0.0364833055639755, 0.9489105332609129, 0.4829876526944967, 0.20949588408432884, 0.12069224524660083, 0.9481690743269224, 0.2619702847509826, 0.2940902150216069, 0.07318437440546677, 0.10196186412350072, 0.6238538366759847, 0.19016006717931355, 0.2677747648571114, 0.9224565571981902, 0.1350007114766254, 0.005261350527948849, 0.3734613954126238, 0.6465018698104177, 0.5065803151085138, 0.0058144177598056235, 0.9174315142150586, 0.30838307307180446, 0.356746268324595, 0.9297897296421593, 0.5558496451988013, 0.20257139397450907, 0.656357983582869, 0.5798649380140739, 0.9880390097382523, 0.8195594012995251, 0.8881790860921817, 0.7255189049897048, 0.3706781596650235, 0.15611579997495273, 0.9926667497829758, 0.6833536098448014, 0.4968878870085689, 0.07487476961763018, 0.47242210320594524, 0.7381232613196878, 0.35175941740245564, 0.8419334237717491, 0.9119681797507084, 0.840785179703543, 0.08897176871199708, 0.6768748614312903, 0.8327773419393756, 0.6713072290824307, 0.18989135832899962, 0.8723385198267206, 0.7552855936291201, 0.9971534789959651, 0.2700208836829696, 0.8346422797496875, 0.8009283721392819, 0.5102885813877145, 0.3054473247797549, 0.7607324019057775, 0.9551272764814103, 0.572451831535215, 1.1568801817078156, 0.8112432954571449, 0.8156487233194982, 0.16663293526589684, 0.37915745114767896, 0.5206678110963621, 0.16562102744089047, 0.053449927785429674, 0.052290486388985924, 0.5352811519566929, 0.3339641357304306, 0.4041577343782796, 0.08575814270773296, 0.5542319539355611, 0.7518436041296448, 0.12090324545613118, 0.8825680507240805, 0.6082542416427508, 0.5627975689918179, 0.08180873286415236, 0.1278385178848085, 0.7668121880463186, 0.9978004344209452, 0.17931628532697164, 0.025176757587499488, 0.6638750833609075, 0.508107095700737, 0.29745399276323337, 0.030583945173830784, 0.7902476556340827, 0.8282202959236682, 0.3560868551142413, 0.9341276558254143, 0.3872086351651858, 0.3734613954126238, 0.16021453378826234, 0.8506367696065344, 0.8951354499740645, 0.10248953927750737, 0.5252406305554451, 0.31904229942828843, 0.9477433990008648, 0.2611614049941906, 1.2477415369651164, 0.06085931716484083, 0.5922792895889639, 0.8189640022579967, 0.5243482618232198, 0.5561709156887298, 0.467732105961137, 1.0580399677165686, 0.3102695814911316, 0.6833536098448014, 0.16021453378826234, 0.38430306260307634, 0.36377193112408057, 0.4619607114239819, 0.7243434409375162, 0.5990688875954979, 0.23797469650360004, 0.3542692229166349, 0.30194859069497526, 0.8137783739453859, 0.6865246130144149, 0.527429723681659, 0.33689098445081433, 0.5446212120838012, 0.9250862337531842, 0.8655095412230072, 0.3935805450220833, 0.8792096350193037, 0.6685500588074829, 0.0786190273751175, 0.9883695454442711, 0.11375962292400343, 0.38430306260307634, 0.30011450804003426, 0.7162954432619286, 0.9926211442091528, 0.35231683029409666, 0.292017617588479, 0.8476043151912853, 0.6708784320805292, 0.9120839300830221, 0.28150900934964285, 0.34472701899117975, 0.6532926465141342, 0.923774966211045, 0.3209251786340577, 0.12282823292368361, 0.4522816561092462, 0.8093001399552857, 0.9571081726878841, 0.39372704458458707, 0.6465018698104177, 0.4968878870085689, 0.9042743484795264, 0.4184825265864407, 0.7430873443767347, 0.9311959297416645, 0.7142253682166626, 0.5839840367433586, 0.7300586653414614, 0.5033863049512775, 0.5581332314280845, 0.5819193969526073, 0.25626559986702313, 0.4500054138219838, 0.6205446202950187, 0.7815462421607451, 0.9411806879655977, 0.8805319508228346, 0.8052022924903093, 0.25949695231450476, 0.7461992195042368, 0.47381014543644584, 0.07487476961763018, 0.5352811519566929, 0.8506367696065344, 0.36377193112408057, 0.1093108714792339, 0.6311135057836059, 0.0046673095171478884, 0.311965965452196, 0.9093694710580416, 0.019852496194460834, 0.3347645581353962, 0.889001800055712, 0.6390073532303879, 0.4768505020573308, 0.3928700705877739, 0.6936178675892353, 0.06807357023827776, 0.5795697854651862, 0.8178099465101074, 0.5640311597396765, 0.31061106653721104, 0.5930880580272853, 0.8009283721392819, 0.1563824899607167, 0.8532106553699086, 0.4924581366432379, 0.46438036772074454, 0.9805071205563163, 0.8858025680164523, 0.04154217920172831, 0.7595402125829787, 0.7927951134386042, 0.9550029735477841, 0.7021182893491835, 0.47242210320594524, 1.8743194328034152, 0.16981471450049712, 0.10306059399889356, 0.9593126694002296, 0.5834948961866246, 1.2113843017373174, 0.4871268792863317, 0.9233829232762429, 0.10663551066273791, 1.075691221452822, 0.8384549679358853, 0.9848574215601498, 0.9714304003104139, 0.3267256101975138, 0.661502716737584, 0.24673404577072877, 0.04611092728002264, 0.9244373008629085, 0.9486214622420148, 0.5102885813877145, 0.6359328835598643, 0.27775565788517165, 0.42276646221944025, 0.5946617594617176, 0.4001188728136498, 0.8534971586100903, 0.18129536119261935, 0.195519230175359, 0.8855933927248747, 0.6979596281543703, 0.13901944292708346, 0.5436273390960078, 0.8234760829618897, 0.39997516426263746, 0.07352365831954111, 0.5065803151085138, 0.6311135057836059, 0.23218002558377027, 0.7788655916025229, 0.6492837012235602, 0.6396850514052452, 0.2162775776149639, 0.9616982751386449, 0.050003721609149565, 0.026644272428671067, 0.47310942491655905, 0.21204126520061028, 0.32291746063978843, 0.6598565415592574, 0.19329991648173483, 0.8951354499740645, 0.7788655916025229, 0.5775817595906021, 0.3035444610997904, 0.07004092250820593, 0.8193464812265749, 0.16352054372447955, 0.2564708106494049, 0.7013813480094384, 0.3243272135191342, 0.9284998102962352, 0.7680072032824106, 0.11738339017674537, 1.4267157766332097, 0.41600700958167836, 0.9933418942509429, 0.5077604779042135, 0.821675913713954, 0.26552506428102385, 0.2076899218736563, 0.7381232613196878, 0.10248953927750737, 0.5775817595906021, 0.2603556964119107, 0.060439418563272174, 0.10798192863435885, 0.5725696888508567, 0.9463628898166316, 0.6297101351941694, 0.7571153626501057, 0.5935078507907501, 0.97796779789206, 0.1118859987483034, 0.2232595012298182, 0.8702984322509766, 0.22595618505340287, 0.3339641357304306, 0.9042743484795264, 0.6359328835598643, 0.6492837012235602, 0.3035444610997904, 0.5923793686523335, 0.2812411480233674, 0.7784306878623337, 0.6490672037413827, 0.1791165172359801, 0.13991874135332782, 0.03160792090226949, 0.022102813898072338, 0.9243880136220362, 0.999679998704398, 0.9679186820778418, 0.9409308732581374, 0.7129023446054965, 0.45759688688501865, 0.2114956095292635, 0.48912032319931, 0.7175100718324989, 0.7220671664780822, 0.4041577343782796, 0.1563824899607167, 0.2603556964119107, 0.6199504760288437, 0.19467641349754805, 0.14593966516938783, 0.9356795689450672, 0.30251736752343716, 0.9361854086634398, 0.5241666213447769, 0.3882112966088993, 0.20548721520043856, 0.30011450804003426, 0.27775565788517165, 0.9746936104627897, 0.20649232045795496, 0.27289237817918277, 0.6651369743021611, 0.4965426690892041, 0.3819544040026519, 1.3730673676708254, 0.24495910867397375, 0.12914428954218837, 0.473319464138362, 0.20353497564344725, 0.24507063856995037, 0.6035311675240218, 0.6444918421024268, 0.5650512998981789, 0.4731019333869735, 0.1222037720143947, 0.7167887048485948, 0.3375159286897407, 0.9299700766314636, 0.4062099787185429, 0.5833238345958078, 0.49505782927253805, 1.0281066988949472, 0.0058144177598056235, 0.35175941740245564, 0.3054473247797549, 0.5923793686523335, 0.9100938717413407, 0.5799184259157477, 0.0397939562752323, 0.28625627586815616, 0.9636054262758076, 0.8982628680559843, 0.2659963570027344, 0.05398656168242022, 0.7875401680900798, 0.548563593771904, 0.0380548689640694, 0.827388455259159, 0.04102638045394058, 0.93878711592619, 0.5252406305554451, 0.6396850514052452, 0.9746936104627897, 0.006324173679747913, 0.8213246078326248, 0.6810505372885312, 0.9070184044368812, 0.057560643005053924, 0.5438285403665997, 0.2586840805353656, 0.7454906726873369, 0.302456648543836, 0.9025467764252793, 0.5824252053727317, 0.9933410040284103, 0.5928279548332942, 0.8266028242410084, 0.0046673095171478884, 0.42276646221944025, 0.060439418563272174, 0.006324173679747913, 0.19055069912650358, 0.210609869033892, 0.9386408480869344, 0.11177496400046816, 0.3017057013196258, 0.5681498899757371, 1.76846747041627, 0.6256795934166484, 0.6374437388890768, 0.027511185640656022, 0.12913942983313764, 0.9965691677751003, 0.2508014867915729, 0.5445357536593562, 0.5612078754071266, 0.4968763777842553, 0.5538590116399038, 0.708573195884836, 0.4619607114239819, 0.4184825265864407, 0.19055069912650358, 0.5455103215466353, 0.853018532616926, 0.40538754723620096, 0.4332087980287742, 0.617003305800838, 0.03882329030859588, 0.9220718502238312, 0.5607046017126742, 0.49268880608499543, 0.9175764902162105, 0.3123054179289535, 0.7090101180192818, 0.05925518307237043, 0.8623498024241238, 0.3497629641499387, 0.3861508635481834, 0.4050981491900736, 0.5425341130052295, 0.08575814270773296, 0.7243434409375162, 0.7162954432619286, 0.2162775776149639, 0.19467641349754805, 0.5455103215466353, 0.5185806383010765, 0.645947803518383, 0.7401420237895417, 0.17754891849364585, 0.06548030367007573, 0.3754666887334641, 0.7994357137172707, 0.22099015878050166, 0.264911310717008, 0.6622042314371697, 0.9923018049228953, 0.7599425621729325, 0.5203417141275968, 0.15293201347807606, 0.05574872548255616, 0.977911111572237, 0.3841390327551619, 0.25650038050763313, 0.9849768023447518, 0.9535671027782069, 0.885712300608636, 0.9174315142150586, 0.8419334237717491, 0.9926211442091528, 0.7430873443767347, 0.8532106553699086, 0.16981471450049712, 0.9616982751386449, 0.20649232045795496, 1.5775170233040274, 0.34333877636650745, 0.21049332948309818, 0.16287135422422372, 0.1424377352680326, 0.6282796964620732, 0.013912838135412775, 0.603506319650142, 0.1850833824998659, 0.6507971104239889, 0.81390181947003, 0.01919901559187176, 0.958313958375463, 0.379011220612518, 1.3714525194241796, 0.8866080943161159, 0.03349994741046869, 0.8094552373927979, 0.816968218414319, 0.0364833055639755, 0.9119681797507084, 0.9311959297416645, 0.050003721609149565, 0.2812411480233674, 0.27289237817918277, 0.4713040551955081, 0.11328730983742208, 0.27507446854149564, 0.6089604616677073, 0.1834798798969819, 0.914936705763602, 0.6986338016350093, 0.7022849102692317, 0.5629999921249755, 0.32770581067592897, 0.8186557301057427, 0.8520044849841384, 0.24296151388645537, 0.5977757063227913, 0.16126731700918007, 0.22545552849150985, 0.6396592859883623, 0.7268280636664082, 0.919321373711989, 0.7455594748307179, 0.031276495554763306, 0.009733706438177059, 0.5990688875954979, 0.7142253682166626, 0.10306059399889356, 0.07004092250820593, 0.6651369743021611, 0.8213246078326248, 0.23377458040776533, 0.18305838556854326, 0.2567172048150721, 0.5674977293368415, 0.1192942396786032, 0.7181238351677848, 0.3528152860292699, 0.9033761709576205, 0.4748101508811371, 0.0013444671182565315, 0.4777307185881361, 0.9697030405971934, 0.24319885334875235, 0.36566750086598865, 0.3122481963493877, 1.7366695935605267, 0.9489105332609129, 0.840785179703543, 0.31904229942828843, 0.5839840367433586, 0.7784306878623337, 0.25348978972410885, 0.7684991758941795, 0.3248196736347324, 0.5516410414426027, 0.7425930531114051, 0.03932836265363937, 0.2296993036631163, 0.8744913699084358, 0.1883020983576198, 0.9533492310119924, 0.7500976155763743, 0.41308371598256244, 0.10735497645638614, 0.6624352107832201, 0.5216957173829442, 0.11713061015608939, 0.057844730035558234, 0.07194834833952912, 0.7300586653414614, 0.5946617594617176, 0.026644272428671067, 0.9100938717413407, 0.210609869033892, 0.4713040551955081, 0.20716232475976892, 0.16315787566537354, 0.6530448124590265, 0.4511963709596065, 0.051116996424291905, 0.8199035803926842, 0.5001132304901748, 0.3179695024945324, 0.9944386252678967, 0.8931836707721248, 0.6563993736998324, 1.3104435167297623, 0.34333877636650745, 0.18305838556854326, 0.18778979483197222, 0.15995193691351384, 0.8003423870115542, 0.10019833598052252, 0.33613152898443266, 0.7737148819120725, 0.5194938393704118, 0.0948773928697011, 0.8838736299628374, 0.08508237949315811, 0.9626553306990575, 0.08897176871199708, 0.23797469650360004, 0.311965965452196, 0.4924581366432379, 0.21049332948309818, 0.2567172048150721, 0.20716232475976892, 0.32664533148053976, 0.43978124443895483, 0.6799216244119353, 0.7651513605979896, 0.2554747585202164, 0.9782308664848147, 0.9992300825494427, 0.4712583263162118, 0.22336995304314455, 0.3901816737984607, 0.5542319539355611, 0.46438036772074454, 0.4001188728136498, 0.5674977293368415, 0.18778979483197222, 0.371262431816354, 0.7287478307339641, 0.6330630505914558, 0.23398048453082398, 0.35602171313695496, 0.47796321713668766, 0.35755548533189563, 0.32838823354784763, 0.7015236152363729, 0.08134217167984414, 0.9470156163956054, 0.20955153916394686, 0.6768748614312903, 0.7518436041296448, 0.5033863049512775, 0.9093694710580416, 0.9593126694002296, 0.645947803518383, 0.6601724077892837, 0.026935692354183693, 0.53445490231167, 0.2972403143033666, 0.09166773111069904, 0.8398922336727683, 0.637919830089438, 0.5227425067314215, 0.3240120030671727, 0.17347979416031123, 0.55544712396171, 0.23834063672251937, 0.4948287769495232, 0.10989026284023073, 0.5401332649446173, 0.6176098541886701, 0.23190010357111834, 0.08447698820372063, 0.8327773419393756, 0.12090324545613118, 0.47310942491655905, 0.10798192863435885, 0.14593966516938783, 0.5799184259157477, 0.9386408480869344, 0.11328730983742208, 1.2471598271670774, 0.17845308479625133, 1.5167323958634216, 0.9943492161225798, 0.26145504882090886, 0.9100425313491673, 0.5657016816073326, 0.8589581000145132, 0.6473241578340836, 0.4439055285783302, 0.17662739645038705, 0.9601569275007178, 0.4829876526944967, 0.30838307307180446, 0.7607324019057775, 0.7401420237895417, 0.15995193691351384, 0.32587878023378725, 0.43013779534921337, 0.4082728512217113, 0.17854646291335197, 0.3957493697675798, 0.9459164683250751, 0.45189660226998885, 0.6107340401662686, 0.6731372698712614, 0.356746268324595, 0.019852496194460834, 0.6490672037413827, 0.0397939562752323, 0.16315787566537354, 0.6601724077892837, 0.9208982842641882, 0.1642536091328839, 0.7981145249934654, 0.22106143726159222, 0.9044044672988854, 0.8657154425014815, 0.10164627444268404, 0.41911982248055524, 0.3982853215552502, 0.5954279331495635, 0.9477433990008648, 0.35231683029409666, 0.21204126520061028, 0.16287135422422372, 0.27507446854149564, 0.6530448124590265, 0.32664533148053976, 0.9208982842641882, 0.8039263588383232, 0.45758297444788987, 0.36642919784071104, 0.9722237677171546, 0.7892823340613053, 0.08206460127090032, 0.25614935915915793, 0.21774655958825373, 0.8825680507240805, 0.3347645581353962, 0.5834948961866246, 0.11177496400046816, 0.853018532616926, 0.17754891849364585, 0.8039263588383232, 0.8559009941050417, 0.7179519497517932, 0.8830249290720291, 0.9933101940184865, 0.3707569265866897, 0.591128466305826, 0.8152865701329146, 0.8842032951337915, 0.98545894788806, 0.3542692229166349, 0.32291746063978843, 0.5725696888508567, 0.3017057013196258, 0.06548030367007573, 0.6089604616677073, 0.4511963709596065, 0.4815722394607893, 0.8200462260893338, 0.5764320766492841, 0.5271617620078821, 0.954391552129005, 0.6006062609106879, 0.7670628528498982, 0.504966569994904, 0.04384256656449437, 0.8648116620377351, 0.047343099390839916, 0.9081726300174722, 0.9501915306489026, 1.8819864639475046, 0.1738180776092173, 0.49351794643597025, 0.11347478664233934, 0.5519315169259811, 0.8736211075734264, 0.9490765611667389, 0.7650967874785879, 0.9551272764814103, 0.2611614049941906, 0.889001800055712, 1.2113843017373174, 0.9356795689450672, 0.28625627586815616, 0.1834798798969819, 0.1192942396786032, 0.026935692354183693, 0.4815722394607893, 0.6280756038493136, 0.14835492074074264, 0.36755326030160496, 0.08063802687864108, 0.6461289971578776, 0.9141731616211415, 0.8927641863671658, 0.2373939964593581, 0.9561123998695162, 0.02268839835932468, 0.793910138704949, 0.45426276238657537, 0.8275162123351905, 0.30194859069497526, 0.6598565415592574, 0.8193464812265749, 0.40538754723620096, 0.3754666887334641, 0.914936705763602, 0.43978124443895483, 0.53445490231167, 0.32587878023378725, 0.7767843093557023, 0.2664719256186341, 0.4297343125880855, 0.9019985067880534, 0.6720862649167656, 0.6922413302954813, 0.8828216032169565, 0.7954057492904651, 0.6082542416427508, 0.9805071205563163, 0.4871268792863317, 0.16352054372447955, 0.7181238351677848, 0.051116996424291905, 0.371262431816354, 0.17845308479625133, 0.8200462260893338, 0.3343542933438197, 0.05725480919061554, 0.7899949901914345, 0.6350245834185881, 0.7655386459702904, 0.3562725153103399, 0.29760177279608135, 0.2691553052764686, 0.8692555266234883, 0.4380646569066018, 0.20949588408432884, 0.6390073532303879, 0.9463628898166316, 0.4332087980287742, 0.7994357137172707, 0.3528152860292699, 0.8003423870115542, 0.43013779534921337, 0.2315998883848729, 0.9350401707195675, 0.827485278041241, 0.7038788766592174, 0.819557234507829, 0.24235598044148499, 0.7645910502083084, 0.949706750182576, 0.5581332314280845, 0.4965426690892041, 0.6810505372885312, 0.6986338016350093, 0.7767843093557023, 1.9102228834329997, 0.8683375539628453, 0.5521420917971065, 0.27931623025521257, 0.8391097592604597, 0.7459679649704893, 0.48518833185954935, 0.06089155325573237, 0.38398373314433343, 0.42542666758149683, 0.13939320252880982, 0.8704542016950014, 0.6964104378114733, 0.8858025680164523, 0.6297101351941694, 0.7022849102692317, 0.7287478307339641, 0.2972403143033666, 0.5764320766492841, 0.6280756038493136, 1.3633880069216655, 0.2919422115727788, 0.16750453639066376, 0.3054421604127602, 0.12017809602207286, 0.9891500013994039, 0.809329587160676, 0.13590263787500034, 0.07896079521569477, 0.5629999921249755, 0.9033761709576205, 0.7684991758941795, 0.6330630505914558, 0.09166773111069904, 1.5167323958634216, 0.6120687535706006, 0.022487222839689736, 0.49107486405247136, 0.403887191040305, 0.9275835711795133, 0.05587490410692042, 0.3901805234282545, 0.9228969599943546, 0.9727236350283752, 0.33719912390286155, 0.415358427338101, 0.4262021236624105, 0.40669867543191995, 0.6308236911248397, 0.33693700040358876, 0.8137783739453859, 0.292017617588479, 0.5819193969526073, 0.7571153626501057, 0.3819544040026519, 0.5681498899757371, 0.10019833598052252, 0.23398048453082398, 0.1642536091328839, 0.3343542933438197, 0.2315998883848729, 0.6120687535706006]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/test.jld b/test/test.jld deleted file mode 100644 index 651fa7a..0000000 Binary files a/test/test.jld and /dev/null differ diff --git a/test/thing.jl b/test/thing.jl new file mode 100644 index 0000000..baf5570 --- /dev/null +++ b/test/thing.jl @@ -0,0 +1,5 @@ +Gm, Gn = 46, 46; +Gcolptr = [1, 4, 7, 11, 15, 18, 21, 25, 30, 34, 37, 41, 46, 50, 56, 60, 64, 69, 73, 77, 81, 86, 90, 93, 98, 102, 106, 110, 114, 117, 121, 126, 130, 134, 139, 143, 147, 152, 157, 161, 165, 169, 172, 175, 179, 186, 189]; +Growval = [1, 2, 6, 1, 2, 3, 2, 3, 4, 7, 3, 4, 5, 8, 4, 5, 9, 1, 6, 10, 3, 7, 8, 11, 4, 7, 8, 9, 12, 5, 8, 9, 13, 6, 10, 14, 7, 11, 12, 16, 8, 11, 12, 13, 17, 9, 12, 13, 18, 10, 14, 15, 19, 24, 30, 14, 15, 16, 19, 11, 15, 16, 17, 12, 16, 17, 18, 20, 13, 17, 18, 21, 14, 15, 19, 24, 17, 20, 21, 26, 18, 20, 21, 22, 27, 21, 22, 23, 28, 22, 23, 29, 14, 19, 24, 25, 31, 24, 25, 26, 32, 20, 25, 26, 27, 21, 26, 27, 28, 22, 27, 28, 29, 23, 28, 29, 14, 30, 31, 33, 24, 30, 31, 32, 34, 25, 31, 32, 35, 30, 33, 34, 36, 31, 33, 34, 35, 37, 32, 34, 35, 38, 33, 36, 37, 43, 34, 36, 37, 38, 44, 35, 37, 38, 39, 45, 38, 39, 40, 45, 39, 40, 41, 45, 40, 41, 42, 45, 41, 42, 46, 36, 43, 44, 37, 43, 44, 45, 38, 39, 40, 41, 44, 45, 46, 42, 45, 46]; +Gnzval = [1.3333333333333333, -0.6666666666666666, -0.6666666666666666, -0.6666666666666666, 1.0666666666666667, -0.4, -0.4, 1.0857142857142859, -0.2857142857142857, -0.4, -0.2857142857142857, 0.8412698412698412, -0.2222222222222222, -0.3333333333333333, -0.2222222222222222, 0.5079365079365079, -0.2857142857142857, -0.6666666666666666, 1.0666666666666667, -0.4, -0.4, 1.5666666666666667, -0.5, -0.6666666666666666, -0.3333333333333333, -0.5, 2.0, -0.5, -0.6666666666666666, -0.2857142857142857, -0.5, 1.4523809523809523, -0.6666666666666666, -0.4, 0.6857142857142857, -0.2857142857142857, -0.6666666666666666, 2.6666666666666665, -1.0, -1.0, -0.6666666666666666, -1.0, 3.6666666666666665, -1.0, -1.0, -0.6666666666666666, -1.0, 2.6666666666666665, -1.0, -0.2857142857142857, 1.4228937728937727, -0.4, -0.3333333333333333, -0.25, -0.15384615384615385, -0.4, 2.4, -1.0, -1.0, -1.0, -1.0, 3.0, -1.0, -1.0, -1.0, 4.0, -1.0, -1.0, -1.0, -1.0, 3.0, -1.0, -0.3333333333333333, -1.0, 2.0, -0.6666666666666666, -1.0, 2.6666666666666665, -1.0, -0.6666666666666666, -1.0, -1.0, 2.9166666666666665, -0.25, -0.6666666666666666, -0.25, 0.7222222222222222, -0.25, -0.2222222222222222, -0.25, 0.9166666666666666, -0.6666666666666666, -0.25, -0.6666666666666666, 2.083333333333333, -0.5, -0.6666666666666666, -0.5, 1.6666666666666665, -0.5, -0.6666666666666666, -0.6666666666666666, -0.5, 1.6666666666666665, -0.5, -0.6666666666666666, -0.5, 1.6666666666666665, -0.5, -0.2222222222222222, -0.5, 1.2222222222222223, -0.5, -0.6666666666666666, -0.5, 1.1666666666666665, -0.15384615384615385, 0.5371794871794872, -0.25, -0.13333333333333333, -0.6666666666666666, -0.25, 2.9166666666666665, -1.0, -1.0, -0.6666666666666666, -1.0, 2.6666666666666665, -1.0, -0.13333333333333333, 0.47320261437908495, -0.2222222222222222, -0.11764705882352941, -1.0, -0.2222222222222222, 3.2222222222222223, -1.0, -1.0, -1.0, -1.0, 3.0, -1.0, -0.11764705882352941, 0.42291021671826623, -0.2, -0.10526315789473684, -1.0, -0.2, 3.2, -1.0, -1.0, -1.0, -1.0, 4.0, -1.0, -1.0, -1.0, 2.6666666666666665, -1.0, -0.6666666666666666, -1.0, 2.5, -1.0, -0.5, -1.0, 2.4, -1.0, -0.4, -1.0, 1.3333333333333333, -0.3333333333333333, -0.10526315789473684, 0.28708133971291866, -0.18181818181818182, -1.0, -0.18181818181818182, 2.1818181818181817, -1.0, -1.0, -0.6666666666666666, -0.5, -0.4, -1.0, 3.7888888888888888, -0.2222222222222222, -0.3333333333333333, -0.2222222222222222, 0.5555555555555556]; +G = SparseMatrixCSC(Gm, Gn, Gcolptr, Growval, Gnzval); diff --git a/test/thing.jld b/test/thing.jld deleted file mode 100644 index 1252557..0000000 Binary files a/test/thing.jld and /dev/null differ