From 7ae3e8c25dbcf83fae18bbd424e108ec58d14a21 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 01:03:33 -0400 Subject: [PATCH 01/25] =?UTF-8?q?src:=20nested=20Archimedean=20density=20v?= =?UTF-8?q?ia=20Fa=C3=A0=20di=20Bruno's=20formula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the density kernels for nested (hierarchical) Archimedean copulas in src/nested/. The nested-copula density is the mixed partial of the nested CDF; differentiating the composition of generators is Faà di Bruno's formula, carried here by partial Bell polynomials expressed through truncated Taylor series: * _composition_taylor — Taylor coefficients of ϕ⁻¹_outer ∘ ϕ_inner, * _faa_di_bruno_coeffs — partial-Bell-polynomial step per child block, * _cauchy_product — convolution of sibling contributions, * _phi_deriv / _assemble_density — contraction against ϕ⁽ᵏ⁾ of the outer generator, * _process_node / _leaf_log_jacobian / _nested_logpdf — the recursion, with censored leaves shifting the argument but not the differentiation order (the per-variable survival likelihood). Follows the algorithm of Yang & Li, arXiv:2605.23134 (2026). Built only on the public Generator interface (ϕ, ϕ⁻¹, ϕ⁽ᵏ⁾, ϕ⁻¹⁽¹⁾); no parallel generator system. Generic in the value type with a Float64 default; BigFloat / Double64 coordinates flow precision through the whole recursion for adversarial high-d / deep-tail inputs. FrankTaylorGenerator.jl adds Taylor1-compatible ϕ / ϕ⁻¹ methods for the Frank generator (its default log1mexp form has no Taylor1 method), using the equivalent expm1/log1p closed forms; the scalar ϕ path is untouched. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/nested/FrankTaylorGenerator.jl | 30 ++++ src/nested/NestedArchimedeanDensity.jl | 195 +++++++++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 src/nested/FrankTaylorGenerator.jl create mode 100644 src/nested/NestedArchimedeanDensity.jl diff --git a/src/nested/FrankTaylorGenerator.jl b/src/nested/FrankTaylorGenerator.jl new file mode 100644 index 00000000..1f66c66d --- /dev/null +++ b/src/nested/FrankTaylorGenerator.jl @@ -0,0 +1,30 @@ +# ============================================================================= +# Taylor-series-compatible ϕ / ϕ⁻¹ methods for the Frank generator. +# +# The nested-Archimedean density recursion evaluates the generator on a +# `TaylorSeries.Taylor1` argument (to obtain ϕ⁽ᵏ⁾ and the composition Taylor +# coefficients). For θ > 0, Frank's default ϕ / ϕ⁻¹ are written with +# `LogExpFunctions.log1mexp`, which has no `Taylor1` method, so the nested path +# would otherwise fail for Frank. +# +# These methods add the *equivalent* closed forms built only from +# `exp` / `expm1` / `log` / `log1p` (all Taylor1-compatible). They are exactly +# the forms Copulas already uses for the θ < 0 branch, extended here to every +# θ ≠ 0 and specialised on a `Taylor1` argument: +# +# ϕ(t) = -log1p( e^{-t} · expm1(-θ) ) / θ +# ϕ⁻¹(t) = -log( expm1(-θ t) / expm1(-θ) ) +# +# They only ADD methods on a `Taylor1` argument; the scalar Float64/BigFloat ϕ +# path is untouched, so Frank's ordinary behaviour is unchanged. +# ============================================================================= + +function ϕ(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} + θ = T(G.θ) + return -log1p(exp(-t) * expm1(-θ)) / θ +end + +function ϕ⁻¹(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} + θ = T(G.θ) + return -log(expm1(-θ * t) / expm1(-θ)) +end diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl new file mode 100644 index 00000000..2b647fe7 --- /dev/null +++ b/src/nested/NestedArchimedeanDensity.jl @@ -0,0 +1,195 @@ +# ============================================================================= +# Density kernels for nested Archimedean copulas via Faà di Bruno's formula. +# +# A nested Archimedean copula is a tree of Archimedean generators: an outer +# generator `G` acts on a sum of inverse-generator terms, some of which are bare +# marginal coordinates and some of which are the CDFs of *inner* nested copulas. +# Its density is the mixed partial of that nested CDF over the differentiated +# (observed) coordinates. +# +# Differentiating the composition of generators is exactly Faà di Bruno's +# formula; the bookkeeping is carried by the partial Bell polynomials, here +# expressed through truncated Taylor series. Concretely, for each node we form +# the Taylor expansion of the inner-to-outer change of variables `ϕ⁻¹_outer ∘ +# ϕ_inner`, raise it to the appropriate power (the leaf-count of the child), +# convolve the children's contributions (a Cauchy product of the per-child +# Taylor coefficient vectors), and finally contract the resulting coefficient +# vector against the derivatives `ϕ⁽ᵏ⁾` of the outer generator. The same +# recursion, restricted to differentiating the observed coordinates only, yields +# the per-variable censored (survival) likelihood. +# +# Follows the nested-density and per-variable censored-likelihood algorithm of +# Yang & Li, "Archimedean Copula Inference via Taylor-Mode AD," arXiv:2605.23134 +# (2026); see the `NestedArchimedeanCopula` docstring. +# +# Everything is written generically in the value type `T`. The default working +# type is `Float64`; passing `BigFloat` (or any high-precision real, e.g. +# `Double64`) coordinates flows that precision through the whole recursion, which +# is the recommended option for adversarial high-dimensional or deep-tail inputs +# where the alternating-sign Faà di Bruno sum can lose Float64 precision. +# +# These helpers build *only* on the public Copulas generator interface +# (`ϕ`, `ϕ⁻¹`, `ϕ⁽ᵏ⁾`, `ϕ⁻¹⁽¹⁾`); they do not introduce a parallel generator +# system. The Taylor route requires `ϕ` (and, for nested nodes, `ϕ⁻¹` of the +# outer generator) to accept a `TaylorSeries.Taylor1` argument; that holds for +# the closed-form generators shipped with the package. +# ============================================================================= + +# Internal tree representation built from a NestedArchimedeanCopula and a data +# point. A node carries its outer generator, its bare leaves (each a coordinate +# value and a censoring flag), and its child sub-trees. +struct _NestedLeaf{T} + u::T + censored::Bool +end +struct _NestedNode{TG<:Generator, T} + G::TG + leaves::Vector{_NestedLeaf{T}} + children::Vector{_NestedNode} +end + +# Family-agnostic k-th derivative of the generator, ϕ⁽ᵏ⁾(G, t), obtained from the +# Taylor expansion of ϕ rather than a family-specialised closed form: the k-th +# Taylor coefficient of ϕ(G, t + s) in s, times k!. This avoids the integer +# Stirling-number overflow that caps some closed-form ϕ⁽ᵏ⁾ at moderate orders and +# keeps the whole recursion in the working type `T`. +function _phi_deriv(G::Generator, k::Int, t::T) where {T} + k == 0 && return ϕ(G, t) + return TaylorSeries.getcoeff(ϕ(G, t + TaylorSeries.Taylor1(T, k)), k) * T(factorial(big(k))) +end + +# Taylor coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] of the change of variables +# h = ϕ⁻¹_outer ∘ ϕ_inner at t₀, to order d. This is the inner-to-outer link in +# the Faà di Bruno recursion for a child sub-tree. +function _composition_taylor(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} + h(x) = ϕ⁻¹(outer, ϕ(inner, x)) + ht = h(t₀ + TaylorSeries.Taylor1(T, d)) + return T[TaylorSeries.getcoeff(ht, k) for k in 1:d] +end + +# Partial-Bell-polynomial step: given the Taylor coefficients `p` of the link +# h (without its constant term) and the inner contribution `β` (the child's own +# Faà di Bruno coefficient vector), return the order-`d` coefficient vector of +# the composed contribution: it combines the derivatives of the composition with +# the inner block's coefficients, with the partial Bell polynomial B_{n,k} +# accumulated implicitly through the running polynomial powers `q`. +function _faa_di_bruno_coeffs(p::AbstractVector{T}, β::AbstractVector{T}, d::Int) where {T} + n = d + 1 + p_pad = zeros(T, n) + p_pad[2:min(n, length(p) + 1)] .= p[1:min(d, length(p))] + facts = T[factorial(big(j)) for j in 0:d] + invf = T[1 / factorial(big(j)) for j in 0:d] + β_scaled = T[β[j] * facts[j] for j in 1:n] + α = zeros(T, n) + q1 = copy(p_pad) + q2 = zeros(T, n) + for k in 1:d + s = zero(T) + for j in 1:n + s += β_scaled[j] * q1[j] + end + α[k + 1] = s * invf[k + 1] + if k < d + fill!(q2, zero(T)) + for i in 1:n, j in 1:n + idx = i + j - 1 + idx <= n && (q2[idx] += q1[i] * p_pad[j]) + end + q1, q2 = q2, q1 + end + end + return α +end + +# Cauchy product (polynomial convolution) of the per-child coefficient vectors, +# truncated to order `d`. Combining sibling sub-trees under one parent generator +# multiplies their Faà di Bruno generating polynomials. +function _cauchy_product(coeffs::Vector{Vector{T}}, d::Int) where {T} + n = d + 1 + isempty(coeffs) && return T[one(T)] + r1 = zeros(T, n) + a1 = coeffs[1] + r1[1:min(n, length(a1))] .= a1[1:min(n, length(a1))] + r2 = zeros(T, n) + for i in 2:length(coeffs) + a = coeffs[i] + fill!(r2, zero(T)) + for j in 1:n, k in 1:min(length(a), n - j + 1) + r2[j + k - 1] += r1[j] * a[k] + end + r1, r2 = r2, r1 + end + return r1 +end + +# Process one node: accumulate its argument t = Σ ϕ⁻¹(leaf/child-CDF), the node +# CDF C = ϕ(G, t), the number `d` of differentiated coordinates in the subtree, +# and its Faà di Bruno coefficient vector `β`. Censored leaves shift `t` but do +# not add a differentiation order. Returns (t, C, d, β). +function _process_node(node::_NestedNode{TG, T}) where {TG, T} + G = node.G + psum = zero(T) + coeffs = Vector{T}[] + dtot = 0 + for leaf in node.leaves + psum += ϕ⁻¹(G, leaf.u) + if leaf.censored + push!(coeffs, T[one(T)]) + else + push!(coeffs, T[zero(T), one(T)]) + dtot += 1 + end + end + for child in node.children + (tc, Cc, dc, βc) = _process_node(child) + psum += ϕ⁻¹(G, Cc) + if dc == 0 + push!(coeffs, T[one(T)]) + else + p = _composition_taylor(G, child.G, tc, dc) + β_pad = zeros(T, dc + 1) + β_pad[1:min(dc + 1, length(βc))] .= βc[1:min(dc + 1, length(βc))] + push!(coeffs, _faa_di_bruno_coeffs(p, β_pad, dc)) + dtot += dc + end + end + t = psum + C = ϕ(G, t) + β = dtot == 0 ? T[one(T)] : _cauchy_product(coeffs, dtot) + return (t, C, dtot, β) +end + +# Log-Jacobian of the marginal change of variables: Σ log|ϕ⁻¹′(u)| over the +# differentiated (observed) leaves, recursively over the tree. +function _leaf_log_jacobian(node::_NestedNode{TG, T}) where {TG, T} + s = zero(T) + for leaf in node.leaves + leaf.censored || (s += log(abs(ϕ⁻¹⁽¹⁾(node.G, leaf.u)))) + end + for child in node.children + s += _leaf_log_jacobian(child) + end + return s +end + +# Contract the root coefficient vector against the outer generator derivatives: +# the density on the generator scale is Σₖ β[k] ϕ⁽ᵏ⁾(G, t). Done directly in the +# working type `T` (no log-space), so a high-precision `T` keeps the alternating +# sum exact. +function _assemble_density(β::Vector{T}, G::Generator, t::T, d::Int) where {T} + d == 0 && return ϕ(G, t) + s = zero(T) + for k in 0:d + s += β[k + 1] * _phi_deriv(G, k, t) + end + return s +end + +# Full nested log-density of a node, including the marginal log-Jacobian. With +# no censored leaves this is the ordinary nested-Archimedean log-density; with +# censored leaves it is the mixed partial of the nested CDF over the observed +# coordinates only (the survival likelihood). See `censored_logpdf`. +function _nested_logpdf(node::_NestedNode{TG, T}) where {TG, T} + (t, C, d, β) = _process_node(node) + return log(abs(_assemble_density(β, node.G, t, d))) + _leaf_log_jacobian(node) +end From 76d979cf0b20e804ea3575fb4600b6f68a7c1555 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 01:03:33 -0400 Subject: [PATCH 02/25] src: NestedArchimedeanCopula type with optional censoring mask MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the public NestedArchimedeanCopula{d,TG} <: Copula{d} and wire it into the module (include + export). Follows the algorithm of Yang & Li (arXiv:2605.23134). * Unified constructor NestedArchimedeanCopula(G; leaves=, children=): children may be ArchimedeanCopula OR NestedArchimedeanCopula, nesting to arbitrary depth; children are auto-placed on consecutive free dim blocks or pinned with `child => dims`. A purely flat declaration (leaves only) returns the native ArchimedeanCopula fast path. The legacy positional form NestedArchimedeanCopula(G, children) still works. * Distributions._logpdf — uncensored nested density (element-typed). * logpdf(C, u; censored=δ) — optional per-variable right-censoring mask: the mixed partial of the nested CDF over observed dims only (the survival likelihood); default (omitted) is the plain density. No nesting-validity check: the caller supplies a valid parameter combination. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/Copulas.jl | 6 + src/NestedArchimedeanCopula.jl | 240 +++++++++++++++++++++++++++++++++ 2 files changed, 246 insertions(+) create mode 100644 src/NestedArchimedeanCopula.jl diff --git a/src/Copulas.jl b/src/Copulas.jl index bbdaa54c..43f62577 100644 --- a/src/Copulas.jl +++ b/src/Copulas.jl @@ -101,6 +101,11 @@ module Copulas include("Generator/InvGaussianGenerator.jl") include("Generator/JoeGenerator.jl") + # Nested (hierarchical) Archimedean copulas + include("nested/NestedArchimedeanDensity.jl") + include("nested/FrankTaylorGenerator.jl") + include("NestedArchimedeanCopula.jl") + #Extreme value copulas include("Tail.jl") include("ExtremeValueCopula.jl") @@ -142,6 +147,7 @@ module Copulas SklarDist, # SklarDist to make multivariate models AMHCopula, # And a bunch of copulas. ArchimedeanCopula, + NestedArchimedeanCopula, AsymGalambosCopula, AsymLogCopula, AsymMixedCopula, diff --git a/src/NestedArchimedeanCopula.jl b/src/NestedArchimedeanCopula.jl new file mode 100644 index 00000000..81e27e83 --- /dev/null +++ b/src/NestedArchimedeanCopula.jl @@ -0,0 +1,240 @@ +""" + NestedArchimedeanCopula{d, TG} + +A nested (hierarchical) Archimedean copula: an outer Archimedean +[`Generator`](@ref) acting on a mix of bare coordinates and inner Archimedean +sub-copulas, each occupying its own block of dimensions. With a single outer +generator over inner copulas ``C_1, \\dots, C_m`` on disjoint coordinate blocks +``I_1, \\dots, I_m`` (and possibly some bare coordinates attached directly to the +root), the CDF is + +```math +C(\\mathbf u) = \\phi_0\\!\\left( + \\sum_{i \\in \\text{root leaves}} \\phi_0^{-1}(u_i) + \\;+\\; \\sum_{k=1}^m \\phi_0^{-1}\\bigl(C_k(\\mathbf u_{I_k})\\bigr) +\\right), +``` + +where ``\\phi_0`` is the outer generator and each child ``C_k`` is itself an +Archimedean (or nested Archimedean) copula. The construction nests to arbitrary +depth. + +# Constructor + + NestedArchimedeanCopula(G::Generator; leaves = Int[], children = []) + +* `G` — the outer generator ``\\phi_0``. +* `leaves` — dimension indices of bare coordinates attached directly to `G`. +* `children` — inner sub-copulas. Each entry is either + - a sub-copula (an [`ArchimedeanCopula`](@ref) or a `NestedArchimedeanCopula`, + so trees nest to arbitrary depth), which is auto-placed on the next free + block of dimensions in declaration order, or + - a `Pair` `sub_copula => dims`, which places the child on the explicit + dimension indices `dims`. + +The bare `leaves` and the children's dimension blocks must together tile +`1:d` exactly (no gaps, no overlaps). + +A purely flat declaration (only `leaves`, no `children`) returns the package's +native [`ArchimedeanCopula`](@ref) so its fast specialised density is used; only +genuinely nested declarations build a `NestedArchimedeanCopula`. The legacy +positional form `NestedArchimedeanCopula(G, children)` (children in consecutive +blocks, no root leaves) is also supported. + +The constructor does **not** check the nesting condition: the caller is +responsible for supplying a parameter combination for which the nested +construction is a valid copula (for same-family nestings this means the inner +generator is at least as dependent as the outer one). + +# Density and precision + +The (log-)density is computed via Faà di Bruno's formula / partial Bell +polynomials over the generator tree. The recursion is generic in the value type: +`logpdf` on `Float64` coordinates works out of the box, while passing `BigFloat` +(or `Double64`) coordinates carries that precision through the whole recursion — +recommended for adversarial high-dimensional or deep-tail inputs where the +alternating-sign Faà di Bruno sum can lose `Float64` precision. + +# Censored / survival likelihood + +`logpdf(C, u; censored = δ)` computes the per-variable right-censored +log-likelihood: the mixed partial of the nested CDF over the *observed* +coordinates only, with right-censored coordinates (`δ[i] == true`) entering the +CDF as plain arguments rather than being differentiated. With `censored` +omitted (all observed) this is the ordinary nested density; with all coordinates +censored it reduces to `log C(u)`. This is the survival-analysis copula +likelihood for partially observed multivariate event times. + +# Example + +```julia +# outer Clayton(2) over two inner Clayton panels on dims 1:2 and 3:4 +C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) +logpdf(C, [0.3, 0.5, 0.4, 0.6]) +logpdf(C, [0.3, 0.5, 0.4, 0.6]; censored = [false, true, false, true]) +``` + +The density and the per-variable censored (survival) likelihood follow the +algorithm of Yang & Li (arXiv:2605.23134), computed via Faà di Bruno's formula / +partial Bell polynomials over the generator tree. + +References: +* Yang, C. & Li, D. "Archimedean Copula Inference via Taylor-Mode AD." + arXiv:2605.23134 (2026). https://arxiv.org/abs/2605.23134 +""" +struct NestedArchimedeanCopula{d, TG<:Generator} <: Copula{d} + G::TG + leafdims::Vector{Int} # dims of bare leaves attached directly to G + children::Vector{Any} # each: (ArchimedeanCopula, dims) | NestedArchimedeanCopula + dims::Vector{Int} # all dims covered by this subtree (sorted) +end + +Base.length(::NestedArchimedeanCopula{d}) where {d} = d + +# Dimension count of a sub-copula entry. +_subdim(c::ArchimedeanCopula) = length(c) +_subdim(c::NestedArchimedeanCopula{d}) where {d} = d +_subdim(c::Tuple) = _subdim(c[1]) + +# ---- Unified keyword constructor -------------------------------------------- +function NestedArchimedeanCopula(G::Generator; + leaves::AbstractVector{<:Integer} = Int[], + children::AbstractVector = Any[]) + leafdims = collect(Int, leaves) + kids = Any[] + kiddims = Vector{Int}[] + used = Set{Int}(leafdims) + length(leafdims) == length(used) || throw(ArgumentError("duplicate dimension in `leaves`: $(leafdims)")) + + pending = Any[] # children awaiting automatic dimension assignment + for ch in children + if ch isa Pair + c, ds = ch.first, collect(Int, ch.second) + length(ds) == _subdim(c) || throw(ArgumentError("child block $(ds) has size ≠ child dimension $(_subdim(c))")) + for x in ds + (x in used) && throw(ArgumentError("dimension $x assigned to more than one child/leaf")) + push!(used, x) + end + push!(kids, c); push!(kiddims, ds) + else + push!(pending, ch) + end + end + # Auto-assign pending children to the lowest free dims, as consecutive blocks + # in declaration order (this reproduces the legacy positional behaviour). + nextfree() = (i = 1; while i in used; i += 1; end; i) + for c in pending + k = _subdim(c); ds = Int[]; s = nextfree() + for j in 0:k-1 + push!(ds, s + j); push!(used, s + j) + end + push!(kids, c); push!(kiddims, ds) + end + + alldims = sort(collect(used)) + d = length(alldims) + alldims == collect(1:d) || throw(ArgumentError("declared dimensions $(alldims) must tile 1:$d with no gaps or overlaps")) + + # Flat declaration (no children) → native ArchimedeanCopula (fast path). + isempty(kids) && return ArchimedeanCopula(length(leafdims), G) + + kids2 = Any[_place_dims(kids[i], kiddims[i]) for i in eachindex(kids)] + return NestedArchimedeanCopula{d, typeof(G)}(G, leafdims, kids2, alldims) +end + +# Legacy positional form: children in consecutive blocks, no root leaves. +NestedArchimedeanCopula(G::Generator, children::AbstractVector) = + NestedArchimedeanCopula(G; leaves = Int[], children = collect(Any, children)) + +# ---- Dimension placement ---------------------------------------------------- +# A flat child keeps its generator and is tagged with its (global) dims. +_place_dims(c::ArchimedeanCopula, ds::Vector{Int}) = (c, ds) +function _place_dims(c::NestedArchimedeanCopula, ds::Vector{Int}) + length(ds) == length(c.dims) || throw(ArgumentError("nested child block size mismatch")) + remap = Dict(c.dims[i] => ds[i] for i in eachindex(c.dims)) + return _remap_dims(c, remap) +end +function _remap_dims(c::NestedArchimedeanCopula, remap::Dict{Int,Int}) + newleaf = [remap[x] for x in c.leafdims] + newkids = Any[] + for ch in c.children + if ch isa Tuple + cc, ds = ch + push!(newkids, (cc, [remap[x] for x in ds])) + else + push!(newkids, _remap_dims(ch, remap)) + end + end + newdims = sort([remap[x] for x in c.dims]) + return NestedArchimedeanCopula{length(newdims), typeof(c.G)}(c.G, newleaf, newkids, newdims) +end + +# ---- Build the internal density tree from structure + data + censoring ------ +function _build_tree(C::NestedArchimedeanCopula, u, censored, ::Type{T}) where {T} + lvs = [_NestedLeaf{T}(T(u[i]), censored[i]) for i in C.leafdims] + kids = _NestedNode[] + for ch in C.children + if ch isa Tuple # (flat ArchimedeanCopula, dims) + cc, ds = ch + clvs = [_NestedLeaf{T}(T(u[i]), censored[i]) for i in ds] + push!(kids, _NestedNode(cc.G, clvs, _NestedNode[])) + else # nested child + push!(kids, _build_tree(ch, u, censored, T)) + end + end + return _NestedNode(C.G, lvs, kids) +end + +# ---- Distributions.jl interface --------------------------------------------- +# Uncensored nested log-density (the standard Distributions._logpdf entry point). +function Distributions._logpdf(C::NestedArchimedeanCopula{d}, u) where {d} + if !all(0 .< u .< 1) + return eltype(u)(-Inf) + end + T = eltype(u) <: AbstractFloat ? float(eltype(u)) : Float64 + tree = _build_tree(C, u, falses(d), T) + return _nested_logpdf(tree) +end + +""" + logpdf(C::NestedArchimedeanCopula, u; censored = falses(length(C))) + +Log-density of the nested Archimedean copula `C` at `u`, with optional +per-variable right-censoring. + +* With `censored` omitted (or all `false`) this is the ordinary nested-copula + log-density. +* With `censored[i] == true`, coordinate `i` is treated as right-censored: it + enters the copula CDF as a plain argument but is **not** differentiated. The + returned value is then the mixed partial of the nested CDF over the observed + coordinates only — the per-variable censored (survival) copula likelihood for + partially observed multivariate event times. With all coordinates censored it + reduces to `log C(u)`. + +The keyword `T` (default `BigFloat`) sets the working precision of the censored +recursion; censored survival likelihoods are typically evaluated on +high-dimensional panels where the extra precision is cheap insurance. The +uncensored `logpdf(C, u)` path uses the element type of `u` (defaulting to +`Float64`). + +This censored likelihood differs from `logpdf(SklarDist(C, margins), x)` with +`Distributions.censored` margins: the latter plugs a censored marginal *density* +into a fully-differentiated joint density, and so does not compute the +mixed-partial-over-observed-dimensions quantity needed for survival data. +""" +function Distributions.logpdf(C::NestedArchimedeanCopula{d}, u::AbstractVector; + censored::AbstractVector{Bool} = falses(d), + T::Type = BigFloat) where {d} + length(u) == d || throw(ArgumentError("length(u) = $(length(u)) ≠ copula dimension $d")) + length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ copula dimension $d")) + if !any(censored) + # No censoring: defer to the standard (element-typed) density path. + return Distributions._logpdf(C, u) + end + tree = _build_tree(C, u, collect(Bool, censored), T) + return _nested_logpdf(tree) +end + +Base.show(io::IO, C::NestedArchimedeanCopula{d}) where {d} = + print(io, "NestedArchimedeanCopula{$d}($(C.G), $(length(C.children)) children)") From b79373a389643c13c43f8741b6ad28f75cbb6d04 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 01:04:28 -0400 Subject: [PATCH 03/25] test: nested Archimedean density and censored likelihood MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add test/NestedArchimedeanCopula.jl (wired into runtests.jl) covering: * flat declaration dispatches to the native ArchimedeanCopula with a bit-for-bit identical logpdf; * uncensored density vs an INDEPENDENT reference — the nested CDF assembled from the generators and mixed-partial-differentiated by nested ForwardDiff (no shared code path with the Faà di Bruno recursion), same-family and heterogeneous trees; * uncensored density vs an EXTERNAL acopula reference (log-likelihoods committed under test/data/nested/), Clayton/Gumbel/Frank, d = 10, 20; * censored likelihood (logpdf with a mask) vs the ForwardDiff reference, incl. the bivariate Clayton closed form and the omitted-mask == plain-density default; * arbitrary-depth nesting; * constructor validation (bad dim tiling) and a fit/smoke usage. Adds DelimitedFiles to the test target (with its [compat] entry, so Aqua's dependency-compat check stays green) for reading the reference CSVs. Co-Authored-By: Claude Opus 4.7 (1M context) --- Project.toml | 4 +- test/NestedArchimedeanCopula.jl | 234 ++++++++ test/data/nested/clayton_d10_2level_U.csv | 500 ++++++++++++++++++ .../nested/clayton_d10_2level_acopula_ll.csv | 500 ++++++++++++++++++ test/data/nested/clayton_d20_2level_U.csv | 500 ++++++++++++++++++ .../nested/clayton_d20_2level_acopula_ll.csv | 500 ++++++++++++++++++ test/data/nested/frank_d10_U.csv | 500 ++++++++++++++++++ test/data/nested/frank_d10_acopula_ll.csv | 500 ++++++++++++++++++ test/data/nested/gumbel_d10_U.csv | 500 ++++++++++++++++++ test/data/nested/gumbel_d10_acopula_ll.csv | 500 ++++++++++++++++++ test/runtests.jl | 7 +- 11 files changed, 4241 insertions(+), 4 deletions(-) create mode 100644 test/NestedArchimedeanCopula.jl create mode 100644 test/data/nested/clayton_d10_2level_U.csv create mode 100644 test/data/nested/clayton_d10_2level_acopula_ll.csv create mode 100644 test/data/nested/clayton_d20_2level_U.csv create mode 100644 test/data/nested/clayton_d20_2level_acopula_ll.csv create mode 100644 test/data/nested/frank_d10_U.csv create mode 100644 test/data/nested/frank_d10_acopula_ll.csv create mode 100644 test/data/nested/gumbel_d10_U.csv create mode 100644 test/data/nested/gumbel_d10_acopula_ll.csv diff --git a/Project.toml b/Project.toml index 97e863fd..a08332fb 100644 --- a/Project.toml +++ b/Project.toml @@ -36,6 +36,7 @@ CopulasPlotsExt = ["Plots", "RecipesBase"] ADTypes = "1.21.0" Aqua = "v0.8" Combinatorics = "1" +DelimitedFiles = "1" Distributions = "0.25" ForwardDiff = "0.10,1" HCubature = "1" @@ -64,6 +65,7 @@ julia = "1" [extras] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" HypothesisTests = "09f84164-cd44-5f33-b23f-e6b0d136a0d5" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -72,4 +74,4 @@ StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "InteractiveUtils", "LinearAlgebra", "HypothesisTests", "Aqua", "StableRNGs", "StatsBase"] +test = ["Test", "InteractiveUtils", "LinearAlgebra", "HypothesisTests", "Aqua", "StableRNGs", "StatsBase", "DelimitedFiles"] diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl new file mode 100644 index 00000000..0e4363ff --- /dev/null +++ b/test/NestedArchimedeanCopula.jl @@ -0,0 +1,234 @@ +# Tests for NestedArchimedeanCopula: the nested-Archimedean density and its +# optional per-variable censored (survival) likelihood (Yang & Li, arXiv:2605.23134). +# +# Coverage: +# 1. Flat dispatch — a leaves-only declaration returns the native +# ArchimedeanCopula and gives a bit-for-bit identical logpdf. +# 2. Uncensored density vs an INDEPENDENT reference: the nested CDF assembled +# directly from the generators, mixed-partial-differentiated by nested +# ForwardDiff. This shares no code path with the Faà di Bruno recursion. +# 3. Uncensored density vs an EXTERNAL reference (acopula log-likelihoods, +# committed in test/data/nested/). +# 4. Censored likelihood vs the same independent ForwardDiff reference (mixed +# partial over the observed dims only), incl. the bivariate Clayton +# closed form; plus the omitted-mask == plain-density default. +# 5. Heterogeneous (mixed-family) and arbitrary-depth nesting build & are finite. +# 6. Constructor errors (bad tiling) and a fit/smoke usage of logpdf. + +using Test, Copulas, Distributions, ForwardDiff, DelimitedFiles +import Copulas: Generator, ϕ, ϕ⁻¹ +import Copulas: ClaytonGenerator, GumbelGenerator, FrankGenerator, JoeGenerator + +# --------------------------------------------------------------------------- +# Independent reference: nested-Archimedean CDF assembled straight from the +# generators, mixed-partial over the observed dims by nested ForwardDiff. No +# Faà di Bruno / partial-Bell code is touched. +# --------------------------------------------------------------------------- +struct RefSpec + G::Any + leaves::Vector{Tuple{BigFloat,Bool}} # (value, censored) + children::Vector{RefSpec} +end +RefSpec(G, leaves) = RefSpec(G, leaves, RefSpec[]) + +function ref_vars(s::RefSpec) + vars = Tuple{BigFloat,Bool}[] + walk(n) = (for lf in n.leaves; push!(vars, lf); end; for c in n.children; walk(c); end) + walk(s); return vars +end + +# CDF in depth-first variable order; generic in eltype(x) for ForwardDiff Duals. +function ref_cdf(s::RefSpec, x::AbstractVector) + idx = Ref(0) + function eval_node(node)::eltype(x) + acc = zero(eltype(x)) + for _ in node.leaves + idx[] += 1; acc += ϕ⁻¹(node.G, x[idx[]]) + end + for ch in node.children + acc += ϕ⁻¹(node.G, eval_node(ch)) + end + return ϕ(node.G, acc) + end + return eval_node(s) +end + +# Nested mixed partial of f over index set `obs`, at u (BigFloat). +function mixed_partial(f, u::Vector{BigFloat}, obs::Vector{Int}) + function rec(k::Int, uu::AbstractVector) + k > length(obs) && return f(uu) + i = obs[k] + return ForwardDiff.derivative(uu[i]) do t + R = promote_type(typeof(t), eltype(uu)) + v = R[j == i ? t : uu[j] for j in eachindex(uu)] + rec(k + 1, v) + end + end + return rec(1, copy(u)) +end + +function ref_logpdf(s::RefSpec) + vars = ref_vars(s) + u = BigFloat[v[1] for v in vars] + obs = [i for (i, v) in enumerate(vars) if !v[2]] + f = x -> ref_cdf(s, x) + isempty(obs) && return log(abs(f(u))) + return log(abs(mixed_partial(f, u, obs))) +end + +@testset "NestedArchimedeanCopula" begin + + # ----------------------------------------------------------------------- + # 1. Flat dispatch → native ArchimedeanCopula, bit-for-bit logpdf. + # ----------------------------------------------------------------------- + @testset "flat declaration dispatches to native (bit-for-bit)" begin + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); leaves = [1, 2, 3]) + @test C isa ArchimedeanCopula{3} + @test !(C isa NestedArchimedeanCopula) + native = ClaytonCopula(3, 2.0) + for _ in 1:5 + u = rand(rng, 3) .* 0.6 .+ 0.2 + @test logpdf(C, u) === logpdf(native, u) + end + Cg = NestedArchimedeanCopula(GumbelGenerator(2.5); leaves = [1, 2, 3, 4]) + @test Cg isa ArchimedeanCopula{4} + ng = GumbelCopula(4, 2.5) + for _ in 1:5 + u = rand(rng, 4) .* 0.6 .+ 0.2 + @test logpdf(Cg, u) === logpdf(ng, u) + end + end + + # ----------------------------------------------------------------------- + # 2. Uncensored density vs the independent ForwardDiff reference. + # ----------------------------------------------------------------------- + @testset "uncensored density vs independent ForwardDiff reference" begin + # Same-family Clayton: root(1.5) over two Clayton(3.0) panels (dims 1:2, 3:4). + C = NestedArchimedeanCopula(ClaytonGenerator(1.5); + children = [ClaytonCopula(2, 3.0), ClaytonCopula(2, 3.0)]) + for _ in 1:5 + u = big.(rand(rng, 4) .* 0.6 .+ 0.2) + spec = RefSpec(ClaytonGenerator(big(1.5)), + Tuple{BigFloat,Bool}[], + [RefSpec(ClaytonGenerator(big(3.0)), [(u[1], false), (u[2], false)]), + RefSpec(ClaytonGenerator(big(3.0)), [(u[3], false), (u[4], false)])]) + @test logpdf(C, u) ≈ ref_logpdf(spec) atol = 1e-10 + end + # Heterogeneous: Clayton root over a Gumbel panel + a Frank panel. + H = NestedArchimedeanCopula(ClaytonGenerator(1.5); + children = [GumbelCopula(2, 2.0), FrankCopula(2, 3.0)]) + for _ in 1:5 + u = big.(rand(rng, 4) .* 0.6 .+ 0.2) + spec = RefSpec(ClaytonGenerator(big(1.5)), + Tuple{BigFloat,Bool}[], + [RefSpec(GumbelGenerator(big(2.0)), [(u[1], false), (u[2], false)]), + RefSpec(FrankGenerator(big(3.0)), [(u[3], false), (u[4], false)])]) + @test logpdf(H, u) ≈ ref_logpdf(spec) atol = 1e-10 + end + end + + # ----------------------------------------------------------------------- + # 3. Uncensored density vs external acopula reference log-likelihoods. + # Files in test/data/nested/ : 2-level nesting, equal-size sectors with + # a single sector parameter; compared at Float64 tolerance. + # ----------------------------------------------------------------------- + @testset "uncensored density vs external acopula reference" begin + datadir = joinpath(@__DIR__, "data", "nested") + cases = [ + ("clayton_d10_2level", ClaytonGenerator, [5, 5], 1.5, 3.0), + ("clayton_d20_2level", ClaytonGenerator, [5, 5, 5, 5], 2.0, 4.0), + ("gumbel_d10", GumbelGenerator, [5, 5], 2.0, 5.0), + ("frank_d10", FrankGenerator, [5, 5], 2.0, 5.0), + ] + for (name, GT, sectors, θroot, θsector) in cases + U = readdlm(joinpath(datadir, name * "_U.csv"), ',') + ll = vec(readdlm(joinpath(datadir, name * "_acopula_ll.csv"), ',')) + C = NestedArchimedeanCopula(GT(θroot); + children = [ArchimedeanCopula(s, GT(θsector)) for s in sectors]) + maxerr = 0.0 + for i in axes(U, 1) + ours = Float64(logpdf(C, big.(U[i, :]))) + maxerr = max(maxerr, abs(ours - ll[i])) + end + @test maxerr < 1e-9 + end + end + + # ----------------------------------------------------------------------- + # 4. Censored likelihood (logpdf with a mask) vs the ForwardDiff reference. + # ----------------------------------------------------------------------- + @testset "censored likelihood vs independent ForwardDiff reference" begin + # Bivariate Clayton(3), dim 2 right-censored: closed form ∂C/∂u₁. + θ = big(3.0) + u1 = BigFloat(cdf(Exponential(1.0), 0.5)) + u2 = BigFloat(cdf(Exponential(1.0), 1.0)) + Cbiv = NestedArchimedeanCopula(ClaytonGenerator(2.0); # outer irrelevant: single panel + children = [ClaytonCopula(2, 3.0)]) + v = logpdf(Cbiv, [u1, u2]; censored = [false, true]) + dC_du1 = u1^(-θ - 1) * (u1^(-θ) + u2^(-θ) - 1)^(-(1 / θ + 1)) + @test Float64(v) ≈ Float64(log(dC_du1)) atol = 1e-9 + + # Nested, censoring across sectors: root Clayton(2) over Clayton(5) + + # Gumbel(3), one censored leaf in each sector + a censored root leaf. + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + leaves = [1], + children = [ClaytonCopula(2, 5.0), GumbelCopula(2, 3.0)]) + u = big.([0.40, 0.30, 0.70, 0.55, 0.80]) + δ = [false, false, true, true, false] + spec = RefSpec(ClaytonGenerator(big(2.0)), + [(u[1], false)], + [RefSpec(ClaytonGenerator(big(5.0)), [(u[2], false), (u[3], true)]), + RefSpec(GumbelGenerator(big(3.0)), [(u[4], true), (u[5], false)])]) + @test logpdf(C, u; censored = δ) ≈ ref_logpdf(spec) atol = 1e-9 + + # Omitted mask == plain density; full mask present changes the value. + C2 = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) + u2v = big.([0.30, 0.55, 0.70, 0.40, 0.62, 0.80]) + @test logpdf(C2, u2v; censored = falses(6)) == logpdf(C2, u2v) + @test logpdf(C2, u2v; censored = [false, true, false, false, false, true]) != logpdf(C2, u2v) + end + + # ----------------------------------------------------------------------- + # 5. Arbitrary-depth nesting builds, is finite, and matches the reference. + # ----------------------------------------------------------------------- + @testset "arbitrary-depth nesting" begin + # Inner nested copula: Joe(3) over a Joe(4) panel (dims 5:6 once placed). + joesub = NestedArchimedeanCopula(JoeGenerator(3.0); + children = [JoeCopula(2, 4.0)]) + C = NestedArchimedeanCopula(ClaytonGenerator(1.5); + children = [GumbelCopula(2, 2.0), FrankCopula(2, 3.0), joesub]) + @test C isa NestedArchimedeanCopula{6} + u = big.([0.2, 0.3, 0.4, 0.5, 0.6, 0.7]) + spec = RefSpec(ClaytonGenerator(big(1.5)), + Tuple{BigFloat,Bool}[], + [RefSpec(GumbelGenerator(big(2.0)), [(u[1], false), (u[2], false)]), + RefSpec(FrankGenerator(big(3.0)), [(u[3], false), (u[4], false)]), + RefSpec(JoeGenerator(big(3.0)), Tuple{BigFloat,Bool}[], + [RefSpec(JoeGenerator(big(4.0)), [(u[5], false), (u[6], false)])])]) + @test isfinite(logpdf(C, u)) + @test logpdf(C, u) ≈ ref_logpdf(spec) atol = 1e-9 + end + + # ----------------------------------------------------------------------- + # 6. Constructor validation and a fit/smoke usage. + # ----------------------------------------------------------------------- + @testset "constructor validation & smoke" begin + # Overlapping dims must error. + @test_throws ArgumentError NestedArchimedeanCopula(ClaytonGenerator(2.0); + leaves = [1], children = [ClaytonCopula(2, 5.0) => [1, 2]]) + # Legacy positional form still works and tiles 1:4. + old = NestedArchimedeanCopula(ClaytonGenerator(2.0), + [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) + @test old isa NestedArchimedeanCopula{4} + + # Smoke: a small log-likelihood over sampled-ish data is finite, and a + # higher root dependence gives a different (here larger) value at a + # strongly-clustered point. + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) + pts = [big.([0.3, 0.32, 0.6, 0.62]), big.([0.5, 0.52, 0.2, 0.22])] + ll = sum(logpdf(C, p) for p in pts) + @test isfinite(ll) + end +end diff --git a/test/data/nested/clayton_d10_2level_U.csv b/test/data/nested/clayton_d10_2level_U.csv new file mode 100644 index 00000000..8aecfaab --- /dev/null +++ b/test/data/nested/clayton_d10_2level_U.csv @@ -0,0 +1,500 @@ +0.54227733862211447,0.41852752493451761,0.95334904913249918,0.77137585544080867,0.8367257295522279,0.74896279346072159,0.80543905645243874,0.98229694003148837,0.70418746779830033,0.82202620018678074 +0.87674268320829651,0.6728306426788484,0.93345008498647242,0.53012049566516528,0.71000649326136045,0.44593068424326776,0.77869507142203875,0.55459470411215339,0.64884661733560733,0.48690373142452992 +0.13546228071302172,0.10698410194153861,0.2064930392305325,0.14650287855127517,0.35921651732356624,0.11059709927597559,0.143924589575223,0.12684219424462043,0.14977210342273783,0.068078383979192775 +0.95238106967435432,0.70189463205647618,0.63140680446999631,0.60544589860292086,0.53260729646270999,0.72616162737404921,0.49358774393762478,0.61723729798702209,0.42849949600233905,0.70955246502415337 +0.1334120607064706,0.16546077715018251,0.18342550553940845,0.20096805100641557,0.73414093765074984,0.38063164948599332,0.2279266578953513,0.995,0.16169958127298911,0.77836094431218028 +0.17592453656901141,0.14802221130022925,0.16166945288485118,0.24448784766630682,0.21414272136989077,0.52219680066690322,0.49268979895676779,0.42266019998553395,0.65651508173163253,0.57092213232965938 +0.8322249379867086,0.80360779972392682,0.7642709269007899,0.95443472936028395,0.88641684852087621,0.72649499481605606,0.83401834189653301,0.47789965033430143,0.5094223577042688,0.39894006335921611 +0.94059221925793424,0.9944899970503005,0.84909613126640349,0.80105356995598209,0.81221647027680743,0.2881271488095532,0.32660323681749087,0.32711052419926723,0.64641211590427727,0.19934405008936978 +0.98515250338496052,0.68067645974105762,0.93854522410518038,0.77348167652195898,0.76582226115890828,0.995,0.69304671470366852,0.65684138275253923,0.63399370727751225,0.40609393377194414 +0.91720993822078734,0.97461199796823006,0.98021239354099809,0.82428541925694665,0.68786349002020564,0.995,0.81996650978736152,0.53667402032567413,0.5104085133149413,0.4800439372378234 +0.83399304978835576,0.90151723055161381,0.56699377125515005,0.82477722704424528,0.47503261659416379,0.6729401357185345,0.8561729976061061,0.68674181788283117,0.62158060633115086,0.64930815217492699 +0.90267377204053256,0.87931823230796269,0.77956829927825211,0.97039998837851127,0.88646990997074671,0.95342682516421695,0.9160937791842545,0.94313587769401641,0.6775138956993817,0.81010485862084136 +0.77574239019381541,0.89769601369841756,0.66244318625892296,0.97014802654257348,0.54832747798549164,0.82561405802730214,0.90139211958574672,0.94997975417018177,0.6560371572655217,0.94546083700849504 +0.061855419182792963,0.040976564269285476,0.076066735784487347,0.047582139949460603,0.11027387648541202,0.10825677368505009,0.1551314694594598,0.19447522312137519,0.59226575986594376,0.13474530143104121 +0.54909259595410653,0.54981651844774815,0.48518625844762903,0.36575457834228559,0.44190950597131773,0.85616141470193596,0.64902549963372658,0.87473375761816974,0.94675254724371161,0.78836557284447561 +0.79658817062911491,0.44182237489767417,0.55416398609383144,0.71598400050963495,0.47593693524316888,0.95842945647212729,0.45242250583825921,0.50066215432504302,0.56926724278268359,0.47462294030177166 +0.87778118183796039,0.98944743612460306,0.83101155745974475,0.9709827701644782,0.75705608307472916,0.40383791427539195,0.28663547967522407,0.39575138860123299,0.20100618594372729,0.37616744324453316 +0.15626444346727683,0.10863445335547345,0.18210740333646594,0.079422589866557272,0.27385695650277742,0.70351012413182734,0.72515183631320246,0.68326931711721139,0.48237559703358879,0.913931540496285 +0.19463807090909824,0.42360575830216041,0.45440716284381216,0.25922795911209873,0.27231350542138288,0.76520954981912359,0.56202644373938571,0.5542992784301638,0.63819066674950464,0.8192560186854867 +0.49420737983353541,0.73174897561951002,0.86647666017055547,0.6903944815457117,0.70603712207975144,0.46364704413299679,0.72025439564667515,0.45688679992744741,0.33230376961122138,0.39789174594628551 +0.80482494498038026,0.58816792765833459,0.90689450271430483,0.84924921220983618,0.69367988673073555,0.70830465699528222,0.67033735434578623,0.62331740560521809,0.43979780560587983,0.42082386258266974 +0.7927891883034961,0.93630066158082526,0.75407945791477859,0.94799600525135075,0.78934988936619754,0.96380867168345097,0.76205244774742031,0.54939805755496807,0.6899877016321333,0.6875117473672252 +0.24511376515038077,0.27058742886276566,0.87827858143103799,0.33955886777636973,0.52894545294564066,0.34603718989463089,0.28313145576209647,0.216558966429795,0.21069930287187252,0.1822499585466317 +0.83134183476214774,0.65107761704215283,0.90176200369169202,0.549353932471356,0.9834563784567697,0.92070944063227644,0.6378769950135379,0.67182814741250418,0.89225334731670114,0.69944505667290513 +0.86595363390483915,0.95541481377309623,0.69754293530939926,0.81984112658685271,0.69290182017492197,0.5638244582729075,0.81447021181738632,0.64899206130135445,0.38322968127357776,0.40647601373953007 +0.57541075814653642,0.69416434143673911,0.96977843314124024,0.995,0.6776040156153228,0.48765411140520964,0.68640302055249092,0.61687061120590325,0.38366567815737718,0.41951520035640016 +0.53218794043937334,0.29015657113208426,0.19662741112311599,0.28070453600768391,0.24052412264763703,0.72531035572667568,0.89549208318015994,0.94714432604317722,0.95375233261870496,0.99082720985911965 +0.13231162326238502,0.13095605549461706,0.31419082658168018,0.19080988139801561,0.28798239532013753,0.20728162162613623,0.19669923953300913,0.13488979002789961,0.19297358261605899,0.30225825382880606 +0.8694401701459552,0.73420802143172625,0.94393246004667652,0.66020716913405519,0.79130295594233568,0.46097735744397361,0.73051734720241679,0.41342702179063578,0.90838913315322378,0.71050255056654954 +0.66203412461301958,0.56340637149358519,0.70675834331335918,0.66087929057456629,0.68891285252026002,0.45138114250307199,0.78824516938959621,0.995,0.80711426206092396,0.775768699414492 +0.80431494144376714,0.64204790238030218,0.35513575063167707,0.27604042365835929,0.6662469029001673,0.66593856541295182,0.43702249335114579,0.50568928794693047,0.45275078528277934,0.45859142294331029 +0.41124893572655358,0.48655376207091683,0.33087208806365798,0.36174261888423587,0.78760959795420493,0.97238040077251375,0.74199942263262264,0.41721466927340944,0.40825122231714928,0.57492925035619324 +0.010158713397954806,0.011185515990177773,0.014180963737942656,0.016686985595145799,0.021990658025262445,0.02703401817177719,0.026038244658222819,0.025929257075966775,0.015592237950698281,0.075397294820766736 +0.23114755819269409,0.24952612673916605,0.23034001573498727,0.42864707648761557,0.14981711611094758,0.13245001596913417,0.17109232059398591,0.099951020085939493,0.11975280161707379,0.15203305225348165 +0.76187462666742911,0.81526708073982102,0.71143920348432399,0.70943107906676717,0.98622114832128849,0.66026551497316588,0.48561256992034935,0.83067755096803186,0.68624476689990421,0.54041296318363907 +0.089822979298998296,0.057362311214622951,0.041895223583044476,0.04128121886834589,0.069474342779934362,0.07111823164724268,0.17328466555994121,0.072333597876368089,0.08314804799100832,0.065934163948790203 +0.25888817042854678,0.81373913449903301,0.27317393735263973,0.34179833470106458,0.41562630397232575,0.36369816500105262,0.35395476171694273,0.26863765931540579,0.42641334625678717,0.33014433254514741 +0.4546977744973707,0.43531627008578483,0.30416037880801339,0.28491157130045458,0.50171452857161258,0.37851091285547078,0.86161801775400904,0.47345722185517075,0.31882874723465721,0.5139100810819226 +0.56397242948978688,0.75334375402044229,0.65628641088754402,0.84831261988592632,0.89254627754851867,0.5729639072595053,0.46384957461912191,0.77187953486767436,0.96194686039904298,0.98244341928458767 +0.70132684837863446,0.79857890099797102,0.81419465516364742,0.9526820265924808,0.90979586289838799,0.84593303796827868,0.47807321773539746,0.82915969644116505,0.53702929437299829,0.83381503320434547 +0.076569204273597744,0.076723620274166085,0.092211363345290578,0.083165495381219562,0.21268620670554153,0.017954007002190686,0.065170941494363241,0.021559404424375185,0.023744589615408502,0.050893517898240336 +0.44080311514162818,0.53868219971897657,0.49546545369897943,0.77589547367260314,0.50788432884856016,0.5673780218330694,0.697261400045038,0.86215923506823422,0.65403379793695604,0.62096271747693699 +0.46930450846881588,0.61938434631239969,0.32505876223940511,0.6187389723056308,0.37520143079367663,0.16949971026194827,0.18688769619863882,0.10792785710945041,0.087602939747712036,0.090788894577953708 +0.14479317610920772,0.12998817592658224,0.20621551091542881,0.2853946836045067,0.30292150744129526,0.52415364244470597,0.50929087521615424,0.47419884028736042,0.91684295977055441,0.42583254227731165 +0.31536388740513116,0.38184731915606496,0.40961609448486708,0.42234860054608725,0.80954305100532986,0.23411671317791957,0.17853553814515161,0.14419399332591076,0.33065185948949671,0.34780927333790007 +0.20239097309779172,0.11128151306500642,0.15320689358091988,0.24398762836063434,0.12602540604155735,0.38399830606377472,0.5023767492213419,0.5245982163414572,0.35988238290666769,0.26174682845106689 +0.65449212154245839,0.49796250065019459,0.82904907608838541,0.86080886877293894,0.54723226742987829,0.038829381226883987,0.063178703096911509,0.12318072564723156,0.095552546930206442,0.07968327568697256 +0.80239175908032279,0.83059291338991248,0.6847531807981746,0.82277848204007253,0.88956741926935101,0.79316327102844075,0.89735188036776492,0.69574627968506053,0.82276879191104602,0.96090323391386279 +0.15239142048983761,0.17564211870003033,0.30462766853787021,0.15429708925584515,0.29898856898807424,0.61830388400721048,0.23787648616297291,0.61190604766278167,0.29377643239200651,0.34356449668076472 +0.96777934978935776,0.675420053744202,0.86239309510537809,0.69571298038992646,0.40096927471824417,0.85050618774083409,0.83948630166277372,0.745642287850244,0.92149872157041102,0.58410319996091731 +0.26504464591313281,0.55895855504993985,0.51675506009224026,0.35812983189722819,0.97250448066811179,0.44743390883807799,0.62040564152091926,0.98527997865542238,0.64012089739058176,0.4684313189019384 +0.1049376729370731,0.14814642677223483,0.10038910244126831,0.095911858974007155,0.097372869097354264,0.159414195278897,0.17831442181662158,0.088359238907931126,0.091656662750619677,0.074069055460770444 +0.82848918649170511,0.68741058866494975,0.31236602045025907,0.66932351902653608,0.45089831054359542,0.65434845627938554,0.40028436119477462,0.63028398605094138,0.33786236114945606,0.3237695180155547 +0.40966217333660532,0.95070591480380395,0.72779496373209029,0.48015770950068293,0.79554804920024502,0.3188914433264477,0.74045392157907886,0.35712669140826508,0.64172311641708546,0.6966130792111106 +0.65070801685380775,0.52675272310555199,0.63562145338385112,0.51296913294753355,0.77105890686890677,0.13523718995425357,0.067429184529666619,0.09441097101054538,0.055172327039637557,0.076444760242959334 +0.72884550704752671,0.6685017241508967,0.89407256590020645,0.66899684916968327,0.96141827024887294,0.78487962700470892,0.52258242967499202,0.82407769267943587,0.85222472841008212,0.75525358253084629 +0.4347084669735129,0.67820465824476484,0.3893267950012137,0.44760305387711208,0.39983906452228385,0.33107424203423891,0.24287648025008038,0.9395563910205722,0.43821884108679138,0.54130182439110308 +0.3314688870028813,0.43938122310668237,0.58075757798331273,0.31726380087292577,0.28273747266965432,0.4074084867719408,0.44702054816687475,0.81139821587706584,0.61813232396326268,0.94300789001582253 +0.056067133880603998,0.13327746303096605,0.060389505402512131,0.069576050559125163,0.085480508642179279,0.45947982431998352,0.26958456482154214,0.27276379791754629,0.18904454488046987,0.30218756563068366 +0.2387396961855924,0.11329145851111659,0.1170389974512545,0.18537370652835283,0.15268926046126347,0.087147663084670299,0.045711984917089971,0.041254031154917215,0.066227826719976388,0.069655130713083796 +0.25207861171377893,0.10251676626307904,0.16328168155721107,0.14499047676228272,0.15010849617450622,0.49976807926689487,0.90301530422997256,0.38073135538915664,0.50237863998268828,0.64624738124983072 +0.054738789740778053,0.062318316747428229,0.094896989820646122,0.074137053682979986,0.088194812695987487,0.14600730103895357,0.16786949524311684,0.34383855030745836,0.097581187180647844,0.18427349188040326 +0.15750217942675296,0.12778774617082223,0.15136262274426407,0.13537471883776822,0.23065670114639969,0.099384691064989705,0.14330272096938751,0.080518376265889216,0.12023175527524355,0.12414437604924292 +0.33103123057232253,0.28010714688114807,0.29117001342667187,0.36328237016013287,0.46458730724612218,0.36344585466672408,0.36241026246150837,0.22749743917373594,0.35888240325839743,0.55730075305911531 +0.2183046332299497,0.31733957802339774,0.35081316246027594,0.53415693633893591,0.28277629740093885,0.60113872355432896,0.24594212302759927,0.24534287286655693,0.41599206300355362,0.34890467756387727 +0.78137193828167784,0.90888502214374556,0.99476950871614556,0.80263181700846808,0.92774875369274679,0.9296763221423997,0.99492587256731679,0.89180674674050153,0.72123592606376996,0.83129734520937815 +0.70228207292716249,0.57370768169597741,0.57707999674639932,0.91735865676740502,0.7356676750248391,0.75747583201398161,0.74932790882639044,0.47420000092999409,0.79360347902312267,0.87309246993814249 +0.27827723373900648,0.51779652937059928,0.45872102534769033,0.4383067181382227,0.97600330876787111,0.46796632455283477,0.65808161946975485,0.31179379963999815,0.48054626624504371,0.27051937346353783 +0.83214517114676756,0.98796060189974455,0.94676732124543861,0.95823838376032477,0.87649531636712175,0.99067222285764978,0.74550011663156368,0.55638456451974239,0.90183682600740867,0.75766725579312155 +0.39956595766569802,0.28692994626676077,0.26873429156050138,0.54130786124773977,0.4987300959022013,0.37139665246658354,0.74997029416097605,0.30445814400200905,0.42280589127381346,0.67792728032804728 +0.36372928978945718,0.30522173031733169,0.24612951243393258,0.54740776127487734,0.29236679265207266,0.32151588142312976,0.3241415007881655,0.54029907591620396,0.34547225526823094,0.22376434009654694 +0.93664106155461158,0.82726249904963811,0.66369717273174766,0.89605042735106544,0.92688498155535082,0.49190374296566575,0.51646418103097791,0.58639466112335537,0.39888589712776179,0.73776015334551059 +0.26465687545741812,0.091279902120177087,0.094493388691711241,0.057481720894159885,0.10211791782024617,0.50624435372810983,0.37912918340608454,0.44294378710129939,0.28591866860633763,0.34624798989983285 +0.3192274808290157,0.24281889086781197,0.45904696517287047,0.1829433697265275,0.17282004949348412,0.086465565897972357,0.076203519668525385,0.09370624280839028,0.11066578645857118,0.1055091046870387 +0.43295880870364706,0.40789134048842546,0.60257474925238907,0.59808640894893528,0.33540534938503086,0.1939251721491462,0.82051808239276858,0.32321222389370252,0.23338013547440756,0.26512766040590763 +0.70203651760989727,0.98948121894869356,0.64419467063248614,0.81378489673861931,0.68711971147005335,0.96229879603451396,0.63351173208177669,0.81937049209626533,0.73538883752670881,0.98790343896149202 +0.063712112129541004,0.050521325858491263,0.046635254753274166,0.04711594364096422,0.079228531566610499,0.12604702355890698,0.12060575074467454,0.23587270728545875,0.19668807452298723,0.1950544806766196 +0.19967948979858655,0.3553204442557647,0.23115384613875245,0.27541682228832537,0.26698222120569154,0.074969006387288303,0.19913613121654286,0.084843053548374917,0.18810070832857401,0.16493541078286586 +0.31950563384649355,0.27600418449600966,0.47807876637612706,0.30830463445033612,0.43210994739831732,0.53839874062566462,0.42658252985614303,0.44144152500109179,0.54825020158011262,0.5582202523115648 +0.92032203383087907,0.88428413762169988,0.91067324829242724,0.95646524042121983,0.9865089719520278,0.98451187571265331,0.8502600004073233,0.84682945808572863,0.71469835638857404,0.90808354740684705 +0.47738696976887091,0.13857819481912928,0.15985610723618304,0.19897067519361183,0.17486398745818407,0.58045063861784052,0.42377099461460971,0.67597630179238499,0.42616471388020305,0.8101393566869417 +0.1171313574561187,0.23180290349224003,0.30460989215125839,0.17895563617553448,0.37293740740889897,0.34603570702236197,0.73302746535779895,0.2210814830936218,0.25695660695595857,0.30786818797016674 +0.25879706489310655,0.30321201207497872,0.26835391594633939,0.35676562000056611,0.31260826534036307,0.24109614204996677,0.1447460618966159,0.29672679009932412,0.24768100885892427,0.44677010088453006 +0.20321751636968816,0.49109688810568441,0.1950773596085259,0.18706003120973416,0.28957109463807579,0.078724911994504598,0.063893901766525651,0.066616035913382624,0.050286373455872953,0.045841126401563348 +0.38357467869165573,0.41372508369744426,0.45300254396184148,0.3705612663360669,0.52976517168195325,0.42295103392410344,0.7008950163380252,0.48515024923939376,0.29943824585920675,0.30464197740895105 +0.64711959036018774,0.6020731777858559,0.74661565875735847,0.91393822508939948,0.97833368390598041,0.8006627710129528,0.90270534797028557,0.9190416038947814,0.95233738915082744,0.97904248654246506 +0.57386120177977606,0.85872635263025721,0.58571806328071729,0.35613161939732146,0.42290245464693521,0.46907080736167656,0.44851917806684116,0.51839611664138885,0.34238719476244411,0.37674192002230028 +0.92037034283641217,0.82029812702402249,0.58494376624107858,0.43616073140816225,0.55888933319333167,0.50748854645563124,0.53775379707350268,0.58003151095213379,0.84022883713200036,0.74158208743971854 +0.97038796584698472,0.91382511652448817,0.79697775800020287,0.86953795188559169,0.92022625890395215,0.67225356839184258,0.70521699043461294,0.80045722913811101,0.97701355521238642,0.82936094088288881 +0.57313593400656671,0.80761043728099147,0.880918532212428,0.81991570020744231,0.94387775249309946,0.74073018231231447,0.87363276761136055,0.91156642651876718,0.7161961353227505,0.75944027582293105 +0.066326573994823043,0.090117038045384817,0.076979327230229627,0.046761099252863023,0.091743070337079485,0.11502607065468974,0.20467717465308816,0.10358357660826979,0.081877122636178343,0.12359292372787621 +0.075415654661178694,0.071216327012390432,0.086677237794624579,0.06857170535455491,0.15551923625040412,0.69584593831934438,0.38541646935975432,0.45917624584904132,0.41957924896041465,0.48403720834529929 +0.37609545292505392,0.28758295165079523,0.51712308877748858,0.96743044075889562,0.62271131770524324,0.39073794478478074,0.72746123813070906,0.30824702914039637,0.44737159777723406,0.51827446948616818 +0.42973447807911153,0.17935176412493839,0.074263113462117933,0.12425149801790025,0.11296667554724753,0.14412816567012615,0.087758023802263913,0.12113402632328137,0.10064530437450382,0.13724199225933165 +0.51456872440975709,0.70585034304382144,0.39806077356411157,0.48574527334315398,0.47899073486056726,0.67947330412388751,0.77711847346899277,0.54033878056218942,0.47266731937909923,0.89306015509148584 +0.58415979093907566,0.50893659210669284,0.63595255663004191,0.47955962767189253,0.56837294723893039,0.39143524633159438,0.40779504099652231,0.43202904925368268,0.28252130577599949,0.31103259715685777 +0.033140338494631286,0.02660038346980945,0.015478113954254566,0.037588208447138741,0.027960869908545329,0.023358638200827776,0.021799545932015527,0.039555389014368489,0.064935388579486289,0.018673455748425917 +0.3880449553639555,0.42481629875948373,0.3007732155259204,0.44690316723276391,0.43913740408478058,0.14231448615353709,0.12075706397403588,0.074361214714717114,0.12274747046136818,0.070107866621049383 +0.21453669655057386,0.47564681749903581,0.16444182667303897,0.15096962163080449,0.10889449698778085,0.11088305284312025,0.1052880250361897,0.13763464722877114,0.086262322413753811,0.34903880685677957 +0.41825210998006751,0.62228186719115208,0.42094941416872905,0.28478798515468196,0.69001387650254276,0.59163994823391453,0.73395454692682649,0.6731322885587897,0.49429979277649544,0.67512416783375917 +0.19406197992157811,0.37085430709900352,0.65535823700079132,0.63264598728367571,0.46519558051002086,0.12295083020091455,0.16316404397305001,0.22209392533411207,0.17293597159330851,0.09133389827324255 +0.7124127534828224,0.69457637211140311,0.70464239428770159,0.82231556898781955,0.75737566059234385,0.31249142174248717,0.5581684835976819,0.67626410749686738,0.56062805077316502,0.34979950804151844 +0.29392147927578122,0.34219057086170829,0.3694540335639836,0.4698168037291735,0.39556724145295474,0.33384749394467095,0.30885327385446765,0.1627040690181954,0.11285204904263287,0.093389579219101182 +0.48672635019699001,0.57964601364967405,0.77342237076004827,0.74735041850818773,0.4768467209976216,0.56015520990362289,0.72296816585031509,0.78823979941021771,0.63346953522428906,0.70839269826514562 +0.29630438825360594,0.53115765817416405,0.48166968622165812,0.97632334793175424,0.70877706815937336,0.59796466857919595,0.36519547633174748,0.67937468312719207,0.39246990473311893,0.51193556015030728 +0.7013627963190735,0.51464817945263464,0.74067747746577206,0.76095554777055086,0.66703373476592032,0.77621493175263823,0.65274118677904724,0.68248484163319856,0.85671326963354155,0.91901595031223193 +0.81047087058878542,0.69047026123066457,0.7612256179728949,0.76453283612800604,0.86825168059363866,0.19829603792274861,0.11963627879658993,0.18204448431256229,0.67883626008540376,0.19033502946663214 +0.083911634332766757,0.078335507334367074,0.056486714757515676,0.048444029948354915,0.15464705344515761,0.058755958916577866,0.029217212124205704,0.073302700949305771,0.038097482855173573,0.019768277399428623 +0.86505944061249562,0.48016503144783096,0.59494597089156676,0.51321252192608691,0.88207751481081609,0.39290366471154026,0.41979756694475778,0.33561161576869319,0.51944207147570476,0.81754184437076227 +0.24126930107437003,0.1431608011604133,0.16156203553026233,0.15807690511010394,0.10207592655935159,0.12267420309499363,0.083833054365083551,0.15612448986255248,0.10978873660674979,0.16736523393364788 +0.70942491635307858,0.84837840284430277,0.63143733902533317,0.82536681003268331,0.70871391487546376,0.85588238927526383,0.62115623198303993,0.69926919645071983,0.46967937861597026,0.8254707374145932 +0.37243663062204013,0.51978370476405944,0.39812591215556287,0.3050522513310821,0.31558865303465894,0.81944263795995753,0.33128009681838,0.45003217012147784,0.37403941937700846,0.47316689570277976 +0.013526316609142575,0.020358442252819915,0.019291494363759119,0.011350839580572945,0.014447368555863482,0.017317505326247189,0.02461249057803741,0.037531740024496066,0.025148055513037237,0.036323640666399613 +0.69569181422096915,0.95618035521280231,0.82732793727140308,0.63605472430067989,0.83067277445947396,0.66873240390079958,0.93323111987560114,0.52817379405250797,0.64684148904860872,0.62839862795885981 +0.77519438378427774,0.64306944682425093,0.47836318454883553,0.47514843596161593,0.53503618165745714,0.17412034211569136,0.1573152234191785,0.093942411977804591,0.16951445926538244,0.13575014137451102 +0.55103611783430184,0.38872411928431988,0.40092218648174444,0.57779149473275049,0.38270598897987979,0.60900227350579161,0.51812709638985865,0.71296482858200472,0.67152910968633606,0.63925149756158217 +0.37832595446474532,0.48269611453927586,0.59066035473609924,0.53364875940431022,0.67655548351989958,0.7190888683583464,0.39292050988136334,0.61305745275953027,0.92551904528672124,0.69372083323879907 +0.33337924027241811,0.46137503835719446,0.35510452556380118,0.35586800489000947,0.81149319380672258,0.57487159370958585,0.61245983613552524,0.52628203080645475,0.63000571146235418,0.54343931974607318 +0.34457713417305047,0.67272658511137717,0.59352139722814223,0.4557383701826947,0.4489196765387341,0.39764745514026328,0.73167979357207868,0.41107612787631992,0.56803587313496429,0.33287069259366842 +0.39591624587912461,0.397065716297482,0.2820420100351067,0.34458367886477792,0.29445224617901222,0.45937645074981098,0.72061528935554864,0.36237263009375931,0.43861112737093416,0.37275652089109973 +0.13077354521076665,0.19712457234171146,0.19266392605718502,0.21271550890011709,0.2368605522789764,0.61419571256588801,0.67601501648280482,0.57355184133477843,0.45319827985159744,0.32230461762758145 +0.41186937218501596,0.79535654989421822,0.46372141643526843,0.59192987359916394,0.57455444562083258,0.89142563257325635,0.71301551357538628,0.96345044875943675,0.95394254450032556,0.52224707964069217 +0.035111071565918396,0.064157641128518322,0.061144443586281211,0.075665023047372854,0.059078026313827761,0.18919285526625962,0.31822308536231547,0.43562993486726009,0.2463929693227071,0.48137741578468529 +0.17508494604184072,0.11318986457306729,0.14246432685777591,0.12730084053453986,0.079126408530639014,0.26403930303358597,0.12086682732778899,0.09860298430722951,0.15879099574206285,0.13849111839430939 +0.53120998905602057,0.92728368922768045,0.64899627312051356,0.98465591104537886,0.78954073199685881,0.49353671137479765,0.66509279288507606,0.51027889437451779,0.65661089465551181,0.73051892149851971 +0.1535820396731,0.23481002620120811,0.16292955581164265,0.20480117981481985,0.25899184374550077,0.47474683033562032,0.80408716340134456,0.33523006807350747,0.21368741371726355,0.48863282210761178 +0.076554706431560426,0.077384457310701926,0.066879807084207821,0.089873597232763114,0.087146989404876682,0.15484988803717351,0.076627781830125932,0.18537766116783766,0.14274275606377537,0.069441783990638897 +0.22565775708528266,0.50921934514474332,0.48732947444498698,0.42884816462330394,0.41397359636375564,0.93712844181135146,0.70905676254879502,0.7751232527252947,0.6345466207096192,0.7756267986202674 +0.30445531108680596,0.28728218579744169,0.47754788732068809,0.29640719680817246,0.18736891540208517,0.64382217532160757,0.21761746319480646,0.63922282817950693,0.40582658030219315,0.31057109795182869 +0.45082978692828046,0.63584123137262039,0.90842643530046641,0.51514517192916687,0.67533196631647741,0.59664009067248802,0.67314296471502744,0.46165924541981357,0.76087859292278426,0.84496119958404525 +0.99466044606590254,0.76354369487929874,0.77654627917081243,0.93076870834250003,0.94754860306568778,0.94624093256448671,0.76669166272098521,0.89948484672708051,0.97769279236862827,0.82251208805048204 +0.33572085675675434,0.41600650403166367,0.41288109010930441,0.41670050680242998,0.32374396668465871,0.35143148059910495,0.11160588837143198,0.16415185952623579,0.36635739080664231,0.14657940762368793 +0.092429690294879435,0.15362819038568268,0.092086137606868665,0.23938412187928015,0.14293188735272572,0.35961893025348296,0.37001037182235574,0.36488185998148304,0.39035327320471203,0.41329660885905173 +0.5519990759479535,0.26822712952553135,0.2316704600612719,0.42708098417855705,0.38498570637174329,0.28780437587607033,0.50975543426017755,0.33890435277911951,0.30654463327250436,0.30044353285289482 +0.25682764409246439,0.38285635520266253,0.79153766284691562,0.25745563061601434,0.26152671900373287,0.40241919730677428,0.41708072593147416,0.47759404117934995,0.635546990953479,0.35679010372440506 +0.24310464657752695,0.11517587552673855,0.23270825476321505,0.31911525773378435,0.20110179174324552,0.042962965710768013,0.059513453877787614,0.111568870367331,0.097319622367357292,0.05282665482519415 +0.29807151486756323,0.1193826250675184,0.1020935516782438,0.067989744399128124,0.073648673360133171,0.070071925810416824,0.063087523280639421,0.094144284679263737,0.050500993309908287,0.072775163434403406 +0.81649794353355798,0.98140323601955071,0.82952542729921563,0.77209091235530858,0.70471955563588751,0.76575593097664341,0.68933439408895614,0.67992270919265785,0.60021876438421728,0.94878058023600276 +0.46258356093967085,0.69430765970705133,0.92026555307352431,0.50672664841752824,0.84116789380583024,0.54662967422586017,0.59057608256925676,0.43080094205699326,0.66446850241030997,0.54971819694797663 +0.56226373044900768,0.76035722463904054,0.77005604316875376,0.44078214794424586,0.59812490036510324,0.50308814177896699,0.49906258674029552,0.69320090595354766,0.92218795860170466,0.66514697350082874 +0.2666038702328633,0.42792095342660214,0.37287914662160787,0.35250759072633048,0.27075090849143302,0.25710528512617303,0.17760447693728418,0.24453356265272508,0.27285250512339543,0.1936229192214618 +0.23827230471187019,0.21920219719976541,0.2215777849663576,0.20988020733998719,0.42031633409553809,0.39125871631314224,0.40462537226059742,0.92976027212673573,0.70123582524041683,0.56964492395454569 +0.33710595993773007,0.66301712947286873,0.6935633516923253,0.17322062062192572,0.55097342986169706,0.38010459670125601,0.19345856596549321,0.21520211979429499,0.39236018038588721,0.63507385649018078 +0.65924857300450523,0.78661140962693454,0.8573516945760945,0.5971572849782868,0.88600677097661618,0.47254550296003245,0.90834806804625912,0.77466239524782865,0.70996901036344773,0.91094081394514004 +0.15244621431565122,0.24785100170453717,0.47464211254416805,0.26366195752616778,0.19014701259474198,0.099365593353936355,0.08258549687676664,0.10099711036417043,0.09443534244692392,0.076735075582457013 +0.45321757580624378,0.5717906617933034,0.46167877437821964,0.58408931411498644,0.27749556944657849,0.19078005347727414,0.96833333485433137,0.20948595228506073,0.28272473187890623,0.17363042570369919 +0.37834562775367991,0.35364136838707094,0.23689805522175933,0.5198125226135959,0.56424347419348286,0.55758344439586094,0.71115320256999714,0.54704077822917385,0.32535416631788505,0.48134668463327118 +0.77169282069630096,0.41691119659970999,0.48931211379418282,0.38818747632397066,0.86910476514862367,0.44139513441327116,0.72692697947146512,0.66145005809431989,0.57284536424357535,0.44228490328139786 +0.93042849816008988,0.95454264339038775,0.78417140970619048,0.94384932406053312,0.69251373030983787,0.96795225020997233,0.95125177409928596,0.995,0.9750172699297629,0.81874084456996976 +0.65453432253614585,0.41426389144424991,0.65219547593424565,0.83159093509225501,0.49697140378438454,0.87363899473550466,0.73665636925062683,0.82323603883326879,0.78653458587758396,0.96101087617514047 +0.77856556081621819,0.89572779028211402,0.79145915375863241,0.76444744422291322,0.3884690219082651,0.25947500031272813,0.52224916179199188,0.4364709418087423,0.37535385895708895,0.41738847643347532 +0.77850265216318559,0.95173156467976527,0.90216587899590706,0.82174478140110085,0.9124999326368034,0.8242171766119718,0.52785988882530355,0.35120244224032404,0.35304705825126215,0.46895189824735728 +0.52339060963511241,0.63308744493890279,0.75313271249189906,0.31164056320301869,0.53338768332762176,0.65828626030327575,0.61124472358588811,0.75989091602221204,0.79502262002272939,0.50623855023634778 +0.38502242637825107,0.50944769439595772,0.26402404866104512,0.40352336085177265,0.67034243182177566,0.25556629593935648,0.1721526565441657,0.11181439898679119,0.16680097303672148,0.16025702266556568 +0.28226696854595973,0.26301073950396531,0.5392076543776142,0.21602476441064011,0.28723193525086915,0.1499070238047692,0.10678828338630382,0.14837589142483004,0.25136552451400324,0.16022673761961087 +0.97756909099435074,0.77756118537836971,0.8574754284443733,0.89104469813331011,0.99408206943380339,0.65778920090022353,0.5108367193836062,0.69790013431703968,0.47964489789333725,0.60241258458768787 +0.38088849067732272,0.64578680413312861,0.67335331379560415,0.91598584350975942,0.7152717614333679,0.48564992513802324,0.58376382672019844,0.73805178445688369,0.62430641540577003,0.52232444220474428 +0.68795780482490443,0.69028095913492304,0.96814118718427666,0.86145377436869097,0.7479881814325795,0.88375936061967486,0.9557303606121943,0.64692883539124202,0.87862941002745609,0.76358374675469887 +0.81505117738667177,0.91079742303967171,0.76563864664777337,0.81622523341892661,0.80592418338502092,0.55954435805740677,0.63150076446272585,0.35840852613799251,0.27979394766722504,0.65035414012227133 +0.90089451453970937,0.78105620126511355,0.63423725461596347,0.74717900431609763,0.69489821692809606,0.73780745394812208,0.81019421274201975,0.62185995646834169,0.77884401436807316,0.94181979190422671 +0.4927465140188908,0.3321844418405554,0.69909133874479257,0.36392549771034033,0.61840881887022914,0.10030596152620694,0.084441132500539431,0.1327296176806726,0.2414537607335398,0.1014467814613491 +0.25366999339241952,0.12943218533113848,0.20851192489850354,0.20120061526219943,0.16597445247033435,0.050968408151243309,0.061203037515796692,0.039189340543423837,0.027778408326169981,0.034833728627446763 +0.48447515421678039,0.50626643806100402,0.54096861369973703,0.98354174563915242,0.77979814824382265,0.11168494418164457,0.24467357296395609,0.10789225031821181,0.11750060124757634,0.13692569811751729 +0.6931009964486966,0.43104865643524948,0.38782839151120807,0.57982765430115379,0.6338797911213484,0.47761295043980012,0.890790784273506,0.80304181884901416,0.43256131736286818,0.33033224370185182 +0.26716429340726405,0.43342901931293754,0.36390388493513021,0.41327571805705271,0.49451326821878167,0.38288667007306837,0.41790851266162521,0.6173066417254266,0.38581642291326002,0.9579673301580679 +0.85399992044529072,0.77966569042197498,0.65718968949193157,0.85288104662496045,0.86231156881396909,0.59655873837395956,0.75542709897545679,0.81290391172248588,0.64838661363800298,0.82513817995709027 +0.97294669042659887,0.94096567626241445,0.995,0.9384591516366485,0.67060398646058017,0.53605724995616066,0.6888254580808264,0.46249001351623059,0.66744875248393165,0.76915992771658015 +0.078250032906820755,0.074903374569018785,0.27538367151451154,0.083134001606470262,0.1258600993121366,0.11315503497234325,0.11281927671030531,0.083332362891396228,0.15659516287859837,0.090135792005531928 +0.28954856223051184,0.1936679954549729,0.26700626533347888,0.48255567589791282,0.31470102394307498,0.056804083147919369,0.046393956857227005,0.041207505531167352,0.086374176460441779,0.06330815689112082 +0.1573569140709303,0.1742617682895056,0.19807615979921481,0.43586647513301163,0.40879606896817378,0.51768137196107944,0.73092792298339637,0.58037605354533117,0.69373393892166102,0.35169178554932662 +0.77458553220347437,0.72659825286141466,0.95814318269532983,0.35690254195307031,0.40915098730195826,0.56899121643086992,0.67284462972272641,0.40570562313660519,0.774826400704972,0.68942118406891095 +0.66507383226107275,0.78953010512658783,0.995,0.79956052901321295,0.96912794673325042,0.65452346477635259,0.95929420017390821,0.66155316877008696,0.88444588520292022,0.89109968075082846 +0.3272408737437516,0.8830014868175331,0.53885409685415042,0.33385225546240627,0.35244669387815686,0.49943104156075951,0.54342602204658785,0.47115338281334374,0.38714496166207207,0.48911707289038098 +0.12464099363645217,0.14926139616581394,0.24613115456583892,0.12975122441965009,0.11906492579907962,0.25431043938237891,0.45768783058229778,0.37706851394630986,0.69951764185667009,0.29589542478437925 +0.10177202545658223,0.10921034444916496,0.12528556705887478,0.097429154589529221,0.10992349648383536,0.4784775100200081,0.39682531383629149,0.72278289785559402,0.77591046650677442,0.38361664894804298 +0.79457169552131068,0.55245217584709438,0.52281593017650319,0.32475062409726385,0.42919110938241323,0.53997359580977378,0.3146195199652157,0.39151050529877912,0.70634668051415639,0.73688768255769133 +0.81681108822253345,0.71663606700067506,0.52831729023199336,0.59165469370634305,0.64448003548285471,0.41352330034293983,0.40068660035979209,0.42015713620979517,0.42585723823291616,0.34161155317703812 +0.97494564274896789,0.92326342824255869,0.9145551705701741,0.84623295322227921,0.94086167259586051,0.708069832581255,0.86727247532112262,0.76608747743235006,0.84181007413402098,0.96321349546085178 +0.37906098988051473,0.3454405331216755,0.70204394256911407,0.38156768487860337,0.45668491527773786,0.56196407356251399,0.92277205074146595,0.62537461325545407,0.93093829138555428,0.87574319363039832 +0.97149181292497855,0.90964723282502291,0.96947055773424062,0.98435849961678878,0.84522751174542443,0.61681253977216544,0.83270687176725788,0.7744015904159034,0.7177567997708475,0.48659048954200768 +0.097488672661529371,0.13204854329585961,0.61123699476232962,0.14300891863401913,0.29595841702087977,0.14417524408487534,0.12947598650895609,0.088006097464651753,0.12712990946196351,0.10751005884789634 +0.74153219853106689,0.64924203481765097,0.77863098032712064,0.90636027049110335,0.60782629447890668,0.96040694777023583,0.91921663718942137,0.71570734770681188,0.68263815892769342,0.83472920876133472 +0.46648559958725894,0.84847753386072644,0.71283143477412392,0.44236584168709309,0.70794718071915641,0.53285328865878046,0.87172183572478656,0.36305897434087331,0.38328392711776993,0.32529566001755261 +0.38497088696671616,0.435302707129956,0.47869407966846622,0.63183980168000897,0.32521835138043625,0.53714692225117855,0.85026765355661704,0.46437574269364634,0.59871767493471562,0.44223226368623852 +0.65619384793612867,0.53821843095951216,0.8343091657426438,0.96234677165152682,0.5201902234788498,0.78955088549948116,0.93275987016428263,0.7887516216276409,0.71720896315620131,0.79047224377802694 +0.064590455940476854,0.38813414835354965,0.038233882067968024,0.049048880625288546,0.083475652898185052,0.55526442642097706,0.41538763698111536,0.32563055967169569,0.53940944927572543,0.34798265914418125 +0.139633970183352,0.19813126909424367,0.20865892823129312,0.1662393354006374,0.19318857793891103,0.21027493013069204,0.20595702768895152,0.3389688457702642,0.24282247535454762,0.29922356355156232 +0.82455426670919441,0.95278589232334088,0.44790247339884276,0.68953587323346821,0.93186699427752784,0.9095662964890413,0.98766533461461603,0.88675737167363211,0.91433069652913423,0.89879342669837881 +0.94730422817160764,0.72288553922326892,0.44327341341690329,0.81645466441038006,0.92149561727763296,0.88491038078816964,0.97319969072385326,0.71258448766042237,0.94725624422148724,0.92066737555474987 +0.023049130105423695,0.037992989154722573,0.057421551452609652,0.041792313463131787,0.042735330899442092,0.036747125938631747,0.030987916819870339,0.046603897911690402,0.064006422574517316,0.033772157858173432 +0.032484256078793058,0.03553204448694202,0.024956438646375867,0.029607663229870761,0.045741033278181895,0.032410547685458056,0.046801008297454275,0.051293312756795925,0.073501186004447466,0.044375929119386086 +0.42123022916866976,0.73023638734452267,0.6569561082351919,0.93036618326818099,0.51169819051378707,0.95180108918117279,0.590749293095436,0.48713245139877132,0.58544579234253391,0.99344269084712111 +0.86129079524119712,0.81072779205556866,0.68135176176435897,0.91094191936666058,0.80469565961477929,0.84117380219187343,0.72465491372991864,0.73316218668898236,0.995,0.82699208571629834 +0.82209703347998231,0.72177784196123407,0.68139352543081178,0.72763603111781616,0.87579261481854953,0.6058201094131429,0.72461708969227145,0.57608452450671344,0.70296476866809965,0.67577822101746621 +0.9029353882567257,0.94335638475444961,0.86894196998106699,0.81634757843503802,0.56825083419243294,0.91871779233725892,0.7130040594142929,0.86064955679880828,0.78327029123951653,0.99489967789647271 +0.82102674812412224,0.98489983938474479,0.82900213974834691,0.81618193135783923,0.8737668506684666,0.56677112761256387,0.82950617615688049,0.93639753674210979,0.81137680377967569,0.78132474074680303 +0.31575936245747022,0.35943443481901571,0.63751100176239506,0.33608068488468412,0.25825444591546731,0.17105722071128429,0.24717072807201462,0.27763899264882402,0.16136778794867696,0.30053749484870601 +0.49621521705506527,0.87296710409105926,0.38111541013080269,0.53692618632441513,0.56986395718625349,0.36436853903063388,0.38376804404822457,0.42344732333573248,0.52621531815554301,0.87581206365088582 +0.52736867909480067,0.28873418454396177,0.32638597549057041,0.82592712919907174,0.66432945912357133,0.65656700922784406,0.84979477149496396,0.60572283835349061,0.36661070240751853,0.73442781189083706 +0.31347305583191465,0.12811161142161046,0.065247011004424635,0.086336115336372518,0.12335496516664339,0.07384708352120338,0.1263660372570409,0.22133717138327744,0.21808391655847414,0.10507307995191748 +0.34144655265725077,0.59782732391561111,0.68258999667604436,0.57081775423262782,0.71175592920206698,0.52412409087696721,0.60859478573937076,0.87145026337394282,0.48818084749394891,0.5883742715612742 +0.69442340710339778,0.57719009373588892,0.53308827428702243,0.45015815606123283,0.62047614451709154,0.88389570180736599,0.89093208214894815,0.78102631332280781,0.87490862999598984,0.58568512919614257 +0.55329235152853551,0.95685859804785744,0.8017041276604262,0.83714954417890575,0.60931783121661265,0.79696943493442485,0.71357164807150852,0.72855067723199107,0.62053609329786485,0.86893304952833517 +0.74798772814195413,0.27583517599088742,0.47262024778677791,0.36105451712894504,0.81341292946555743,0.70081950417868411,0.65858446462168985,0.74641316138910518,0.62871222545956595,0.55825260180793812 +0.49157507822127372,0.43374288848800779,0.50258363219835434,0.5286808167052246,0.45173462205422193,0.85144048372015613,0.69985898779788247,0.88848616691197202,0.98256822532569221,0.62722539865600402 +0.17537432975352221,0.25977782938782268,0.20581291521918779,0.33024521659672967,0.30650447352182658,0.24953047527564587,0.31101030937129204,0.48919267998644816,0.46771588791264257,0.27125055975734436 +0.12072286456227342,0.20894011090178127,0.21007860553342467,0.062167254842371851,0.089716653559510043,0.14909442873737141,0.22604351726770663,0.20755600782980077,0.36055918063406112,0.21780623442773356 +0.24557859356048287,0.27645002012099756,0.29476051621928728,0.25851297224407693,0.34112336644045471,0.38877204321952674,0.23978052426731167,0.29280187475386799,0.38135291241749697,0.30207171468479183 +0.78675400834152054,0.53708037832013722,0.63827805188821385,0.8410643017713697,0.46427229635317313,0.65020874978409826,0.78243637574877334,0.40571238851102176,0.50049016659296242,0.69213203397959433 +0.40988999722287428,0.62076385517260424,0.49709275312715695,0.45072912161417622,0.52229048871624784,0.25333622465629885,0.15587265971109124,0.37508874712132412,0.23773169955668166,0.19233940298012364 +0.20576349339441871,0.25597395176668414,0.31385709628619068,0.24105986999209683,0.1920857070900949,0.26190534550752514,0.41418985215163306,0.26040086348779568,0.25270276500869915,0.22482462897381492 +0.91288986788994386,0.81915104806683603,0.56070077254222883,0.51822877028126546,0.71073567454783493,0.84438852512876139,0.9543726773832788,0.85121131720917564,0.77635600530734727,0.76446765481311596 +0.53953898021553581,0.21555061577700396,0.46716129516538807,0.60885500482181076,0.35106823639031859,0.72633166244398606,0.59793860472836746,0.65867453755427718,0.49623669158824046,0.64165347064534128 +0.43941326766115518,0.7249226832106952,0.44205886755655688,0.86988947039486031,0.43892283979985525,0.59807602725838849,0.44810419622267134,0.55057019891178849,0.79542920509371329,0.35192327072087692 +0.44686791380310381,0.41072484125714742,0.42676232928245,0.34554784794267662,0.27820148251664989,0.96174944739672441,0.99107339645192649,0.87696494318743401,0.94640988865539588,0.98622150801547903 +0.24812339526486743,0.35342918640253884,0.42688775282584618,0.20508916076499342,0.2910454523056823,0.57500243676044416,0.60364540183567783,0.30452311015461919,0.36878601531586613,0.45774925251205223 +0.32469070250911874,0.39861206983240277,0.47225323327595631,0.53135972298393552,0.48640710748102001,0.22695410781255718,0.1718992447416586,0.18170334331644702,0.25100470483463461,0.16799980983315718 +0.66771888661921819,0.22651262035775238,0.50709430749157336,0.32454862307503529,0.39062486500895055,0.19970568734468444,0.13587613237001051,0.2127397667226128,0.16787328521158651,0.13753603834585124 +0.26944459924385072,0.28480936332188761,0.96037791616676271,0.44997227803386741,0.28247892261980967,0.22005385008133713,0.25328308945752248,0.26495315310049705,0.30325840513877372,0.30479369519361244 +0.51050614831715124,0.30514719742097107,0.31785359684026288,0.44210702488235809,0.73638965292724345,0.81250083861048916,0.62145666652921017,0.64992514661028766,0.65338225706423292,0.95367013879610518 +0.43235791283003494,0.40949405817123519,0.36521880904532911,0.3270492374342297,0.77591739811907556,0.56297056254231392,0.41525369321204686,0.53265045587477378,0.46909970195808121,0.61702449586416674 +0.097530627998361125,0.27591979268419337,0.27880728947696448,0.23041580192956981,0.1283563318054935,0.18902581742027302,0.2819220515715265,0.12142072134814812,0.4269151549962466,0.20720022619107473 +0.75752649371849334,0.51362222502963717,0.49254967520035187,0.74544784677558706,0.58518162790949191,0.55745732869800657,0.39793017000681369,0.50986588756309625,0.27420193416566113,0.41882640495519402 +0.60625825872848815,0.36456270850035721,0.57676863304717829,0.98833148471074039,0.55922715802287781,0.65494644704555516,0.57435903161433766,0.59355763866811195,0.85925142856745296,0.43807074598767709 +0.62063592259471878,0.73155451367560176,0.456490948904335,0.51322523945596321,0.7128993866926463,0.72182176833853995,0.54296382502877938,0.55787333263935879,0.71518513400654715,0.64608989699617414 +0.85412520355869159,0.86114566392552694,0.89448275388785081,0.58066943362479462,0.82493914599150209,0.97670928502873577,0.96960989814682064,0.90321254526327477,0.73218169036659109,0.79183068724619532 +0.95553487470360543,0.71178573863676098,0.9605328256090917,0.59281260623892362,0.97777886788464785,0.15997189559925581,0.22887213731394829,0.28770530051810744,0.20081776227470299,0.307368247552472 +0.78143575403627386,0.75399687854517394,0.69904946952512592,0.94320529493121219,0.62049331989962575,0.5650330655957837,0.41582309326088907,0.38125095471191062,0.91217744371505505,0.48499005596781236 +0.8523502737333728,0.71184697411949527,0.8294989052213384,0.7726076629420966,0.61962615832112444,0.56571795301764138,0.94614035482839032,0.74349766003818107,0.8940908229924015,0.75780341945398355 +0.995,0.95972283901467559,0.62361770521334292,0.54175288480485284,0.60917831342797368,0.6753425111604201,0.93785145777040535,0.87386623071100356,0.75418723710907465,0.90765408344959664 +0.16528341295804169,0.30050794178580326,0.14364144469764958,0.2276267355540845,0.37370379457582087,0.29222109090143766,0.17437782738176402,0.2222103054948493,0.18972657990476938,0.19729678728473685 +0.27382696093925046,0.20782810650790814,0.12866521326419414,0.097396991380773054,0.17950423113874017,0.16340923191453452,0.054422638078847174,0.092072814474317158,0.11356910016866156,0.092894077062826125 +0.66625988761550325,0.77448399361420817,0.98307370393174953,0.89349975021590178,0.92343427338103812,0.86656427204172659,0.78844147353011362,0.74228202639576191,0.95478980969122063,0.59589630396375637 +0.68294704716103904,0.98230401188036331,0.77882496637473708,0.49333939796766024,0.91121529745754559,0.96145976884351803,0.94159585500891585,0.6033481194730671,0.83473324170730057,0.58909931753962985 +0.55794386013597141,0.52427833105178512,0.35637925719535157,0.34397362327489917,0.56328630555016868,0.52013474153901018,0.37210098596380992,0.42161449414156021,0.42696046374554353,0.25928466557513208 +0.56568352568108826,0.57442019732934713,0.7180516290425587,0.70136474082319245,0.35243797395742821,0.61704582286929566,0.52117549827109944,0.7712688179985786,0.34516382832719439,0.73658277236741287 +0.47345044523490759,0.29951928026489971,0.46619794462320852,0.25964608206650447,0.22228358600861464,0.50924357664128139,0.39433752639193415,0.23229267877292981,0.23588109350729319,0.25084399839341393 +0.93331323498225305,0.96154464235049097,0.89162117233393601,0.9651487451798737,0.83921715545832054,0.66260730476676999,0.79679053650875209,0.91666073834138695,0.89352765356626651,0.93247152047709614 +0.81876134799588463,0.84130540027060507,0.49848706414980265,0.49168694311550876,0.81997720651215322,0.11655276430469823,0.13026245556429636,0.20768779288689673,0.17419946539617337,0.21799609294427807 +0.48075964384504055,0.47296058483672387,0.78531577023424715,0.51452330557456938,0.36234254169909313,0.77913114983419385,0.87235595197598026,0.65401610635810392,0.6615989050107185,0.67612444900287627 +0.72072264532697083,0.18748552934731397,0.96329471092880226,0.1704819552014771,0.39796658790011347,0.10336107547296529,0.2217859085475882,0.2341749700288154,0.081446742788182439,0.086753637398082881 +0.088871086031108812,0.16993365418569503,0.14313065831285937,0.14741042148410877,0.14006911116962087,0.11811361518110283,0.13686779344860356,0.12754580576064536,0.097716443580553439,0.10495827612263492 +0.59493084758872017,0.80737397673359323,0.77896092501316805,0.96790538275647253,0.77907499209937914,0.83967605116008226,0.8778413358678977,0.9366050129361555,0.72663579687445412,0.97422466664957852 +0.62397509347712998,0.57271854534972133,0.41189045053715112,0.59612602410923621,0.5553669210906621,0.75996109159330905,0.45295932570125125,0.54466176477490025,0.7361597709690838,0.81743925145030416 +0.069455820974101232,0.095057663400060527,0.067063237235389941,0.12039828220687944,0.16025754814699991,0.033869337053244519,0.096771635237160605,0.095508995979672023,0.079091528251927071,0.047745441498832517 +0.38025435377447403,0.27298090524421814,0.40033654798808765,0.15028352795291838,0.25073866857852539,0.19560436868130002,0.29643850861870208,0.29875752496841612,0.24842954552871321,0.18033713321131753 +0.20104812402048458,0.089170196753572156,0.19566109533652232,0.62509255281041043,0.17509771359601334,0.1248856793957499,0.11354002711669031,0.13833694067478389,0.13321632642386724,0.27099538995103162 +0.19420588952012346,0.29785838695917688,0.4256758522926648,0.14676695823268016,0.25512682090008065,0.25266267169682388,0.47862477312478069,0.1659979591436653,0.27546426745539071,0.2668070602823262 +0.34396105747049061,0.30724089222220113,0.39481172200831588,0.40813419368880582,0.4234888935045662,0.17925345090443479,0.19655016388310242,0.24743479068695448,0.24347443879944458,0.34539747623022377 +0.36318454120964966,0.64672048073025967,0.45109787290880948,0.5331195470831116,0.82003271916429343,0.60805965230852965,0.90977946713563251,0.64330021755494726,0.74962820477411662,0.53452513882609198 +0.19909870082418685,0.1745439978465351,0.27293986192006919,0.21302530612371379,0.25542245511619988,0.72298288576168313,0.22873769307969363,0.23802720337594288,0.19340131019652299,0.26579908736540819 +0.96302809430642022,0.66553533106203533,0.64491727454845738,0.30256385572248673,0.54359493786066204,0.29930273835890142,0.30836782650501476,0.49829390330858436,0.36109836097958259,0.26549552462013959 +0.65116978223628186,0.49870318467908697,0.73080298641821639,0.33271918015416341,0.33117073990534779,0.48440900396852349,0.5651662535705303,0.37621705687502022,0.75204964415141218,0.66645218575499887 +0.076570697484153641,0.1261423286050137,0.23413992241409196,0.11787027121015366,0.068012191775019465,0.13422428883806187,0.18004656649314721,0.079624012825143697,0.069466269099054304,0.04534919420050252 +0.28871829837542035,0.61533429198031886,0.35629510545267823,0.4270016364510828,0.35384808457103806,0.50827301948371362,0.64313124002225108,0.87069287855167166,0.96806449756134239,0.52708832611977252 +0.80344851431061237,0.97390434613836474,0.89002472408116751,0.94288773177976914,0.8495600583255678,0.77419874795118149,0.7606855188037408,0.55641593004604684,0.62455250354189784,0.80391588169363348 +0.81524910628420455,0.69699053665341826,0.6627167439611229,0.63504911502056949,0.46937965325845854,0.61058756698606143,0.95958038166405457,0.96308298117104396,0.99194901283785319,0.93026282260536952 +0.95503274965335205,0.30229686674171169,0.43150357962848085,0.39715317289723062,0.68444602432272694,0.60975922433774665,0.57923173435951958,0.98474291357916588,0.62680753881659856,0.66408828135235631 +0.70578379815979142,0.79085776562862942,0.91742514174132983,0.69596743513413284,0.91523182513835977,0.72230773241225543,0.774884425117082,0.71195975838596337,0.52884142253085509,0.84931153403320625 +0.63391476425612392,0.24400241086782451,0.4111895327869266,0.31711059222772031,0.76048131830322407,0.5962905515182505,0.995,0.52701768833914264,0.79006857137040609,0.82070060515433518 +0.52041679671328533,0.74291115430020094,0.664122880417234,0.37832199944683037,0.53016496944712443,0.88426039918252686,0.59810325811618603,0.50033910149253491,0.630159853802012,0.96202670110278821 +0.16381044254397345,0.59207147282639894,0.3515404097691735,0.41489902850209864,0.42891188774998257,0.41126569304593902,0.54244936707761182,0.97652993892110485,0.54444175929866845,0.94599796837021388 +0.059287622156420118,0.03821410737945484,0.058979275220007538,0.036528059782336531,0.046759241922739087,0.014799880307741117,0.022594659652390214,0.048692724546094253,0.018201283155083708,0.036060703202732129 +0.48453194079573114,0.72357646509294704,0.36699943572077559,0.41705303379966685,0.51031579992516451,0.30484563402128334,0.37486176651855735,0.64710604453507758,0.75360462404964856,0.25431782743496223 +0.25170869424696546,0.33021717121946209,0.93057295513980265,0.3357828828529037,0.37769112002793481,0.27902742943455505,0.24471405556644318,0.16165182111749948,0.24751045067988953,0.18191858070582478 +0.57072424061971394,0.43096059895642191,0.73467697156146206,0.33999270881828708,0.43272995579016532,0.32128045936643213,0.41993881117421628,0.67006681421167269,0.64091502501112818,0.4375957446572496 +0.59747742565746997,0.67584054172314767,0.42219463656963974,0.69946184105262432,0.34606860273818918,0.83060692564467709,0.52926669811122051,0.34663865254711856,0.70965425341449806,0.63969204079025543 +0.74379396776800266,0.56917363269208554,0.87160737153615053,0.56301712204425558,0.63349546729396855,0.43813339337098811,0.82872103808064679,0.41373686147192773,0.47565505806603342,0.71584629137506228 +0.91222906707966389,0.61136437462996451,0.68562928270176282,0.9816514717811563,0.5462195963031693,0.5287172771143146,0.53269359024352048,0.63062531842199365,0.28783592715515172,0.4406351273157178 +0.8795921472281294,0.95578603519320959,0.95076840300727061,0.9138622180838516,0.58566317614862551,0.70146055675929864,0.81939830825799831,0.72040398173316367,0.69976746209984231,0.93427319780187523 +0.38929848062517319,0.39034943085190754,0.96430453660942184,0.4305916016632067,0.3408373973381294,0.08008181843801386,0.079396200190354649,0.062358085450913196,0.050893434246931803,0.10212371742971439 +0.79763675799289491,0.87928659562269973,0.81459333413006196,0.66786068273273447,0.95399736221584064,0.21804454488040276,0.28930144834045296,0.27616407864644155,0.22134006524194177,0.26226334182855843 +0.94196011644479016,0.92346914502918109,0.95499027815592163,0.72079259128188855,0.97430590226979508,0.89743609611444874,0.68993958743322181,0.79276325140688797,0.54626198049643204,0.65764477118857256 +0.52639520384569916,0.48655078665831958,0.47645770104725033,0.70129804788083194,0.42213121758531741,0.69379929331155987,0.90829912594705675,0.80570175418465684,0.78651460204001344,0.65855640115055558 +0.24547871517975101,0.2970507506714144,0.22591068121655419,0.23340766936955812,0.65065716664013828,0.48487481923963682,0.44099391701976198,0.49474203157157526,0.53670040369067951,0.72445382314004947 +0.055054965412308719,0.034122597632319472,0.11329675571649843,0.069264486631908678,0.07070407446063226,0.059553816347846095,0.056796597428333144,0.032306703000939241,0.047599697578654863,0.053258224614735027 +0.78898057999064164,0.37260233261309317,0.37588191821767802,0.35268496404911626,0.46611739749021902,0.8213913395851441,0.66777499621298086,0.79892465053847184,0.58514938113983161,0.72532979803609443 +0.48657815929439741,0.30260809606678363,0.79057836972155127,0.44091555969714219,0.45476282937445101,0.24592018200389085,0.58053047354359633,0.29214123594564928,0.28804920313299293,0.62725036278284807 +0.16809655750509078,0.17325543327913409,0.34076954035716789,0.16370959159324933,0.27725144251268641,0.41433881253061355,0.37000185926236528,0.73107168521444188,0.90437387243838208,0.62763388029924139 +0.038021294030611129,0.02993091216045048,0.042282670477565745,0.040470357809966571,0.028492138132022282,0.26768855174895712,0.13295049130451864,0.057889996382592138,0.093650086235004926,0.08889910097936489 +0.64510478378086178,0.5247951580993041,0.49893929952841609,0.825244036867396,0.79671206347700341,0.90026055119998538,0.58673971682767001,0.7185414456190079,0.35397303956162657,0.67440139897684848 +0.81887486273907673,0.74065668858372524,0.68107607364029021,0.97862075219118827,0.66824702954360293,0.55060438962249592,0.83787479421332622,0.59707344248055516,0.71714227182078116,0.88774257559190484 +0.05440065860494659,0.058986446075694129,0.10627733877137326,0.050801265869462542,0.18219811544304684,0.087416460275486801,0.13845923569176441,0.13472349690012006,0.051107156634147846,0.1046980701482406 +0.92420745095831891,0.70128142834832097,0.85248708718020494,0.9425781371951456,0.54679290912912115,0.42807179457123484,0.59755930293352855,0.35439471646993898,0.60607708891106726,0.35365950940585966 +0.59488457126926808,0.60559541560487207,0.67337136887226912,0.89306197534879495,0.9047354051563633,0.40217468495021208,0.51725947502347369,0.52666457825556934,0.49092576393327891,0.84916137077621101 +0.293366080516338,0.70654974495218037,0.25518065095693487,0.31394625785972841,0.49544201073327376,0.49680629196705828,0.67578089972721278,0.62122278295500044,0.66408642904886561,0.45976446886144157 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0061687180804502291,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.48338863485442601,0.66724477482892364,0.86258772838381559,0.72963689137880261,0.55973785113942476,0.92618227030367783,0.88801413961256015,0.94072789292350345,0.84546932085258852,0.98106554193838846 +0.56274861930126674,0.47129571174754309,0.59185314572888925,0.5048334137368089,0.64607091619653456,0.31143736179439596,0.54978045651227403,0.35202178726916927,0.44763321653779858,0.35300380967960243 +0.48213533451944124,0.64724526211681799,0.70693462916953542,0.43195659901355821,0.52249590021965109,0.49433842329191446,0.66714159062700762,0.55624016119773489,0.80471229370373276,0.59493502394371256 +0.8731592676795743,0.50103461854152831,0.55999342704686783,0.49311026624604326,0.71659396819620136,0.85120405593689408,0.66830524752098008,0.59897972858717918,0.995,0.75682553264439378 +0.65207118664818797,0.49872858688336213,0.51553375557860714,0.60930240164063154,0.51177657796855269,0.84763501292756249,0.74055944416751462,0.83125040474513312,0.66709957488317639,0.72505431292093026 +0.76160910514378832,0.40089288587972077,0.9652106889310138,0.78940775373536398,0.85645739952425004,0.47622732401212897,0.64590147979044521,0.50323915345986425,0.75658615321486589,0.33311452470701636 +0.13323362024454496,0.15206064269105893,0.18348015358353506,0.20279364405804762,0.3439378892711113,0.3410245298302228,0.25074242987091361,0.18127754576812433,0.24375559852373826,0.29134683201236294 +0.63057230026305455,0.32681264942550292,0.29066939690980104,0.29459937083749582,0.23044615863911619,0.34176004868116877,0.62806150665144467,0.65730528127260102,0.46026593835413948,0.31026651406654465 +0.83474108948062997,0.94467368174258115,0.95530194612821295,0.93601379507399551,0.59535062861923949,0.71154175458359525,0.77066398091751565,0.90745617953192492,0.78285757760107699,0.77453380697120255 +0.12370295865247431,0.064676522899770772,0.041738966905579315,0.069609727731043985,0.11876156381393187,0.11464343807593558,0.13244019242880795,0.13151997783005145,0.28702840852157424,0.12716506426868848 +0.70557337455115687,0.92642818992317444,0.61453113868770748,0.97034647189330681,0.77720170044748216,0.30003559908149763,0.49027725090465957,0.59433124315202968,0.33459369091191521,0.26739415295655256 +0.65253160431206725,0.91086915141493874,0.97441560040623698,0.75659886788657305,0.8025511537597172,0.99340499500457335,0.97562302905090614,0.90530874314903065,0.79155233060951957,0.90353276052570897 +0.19298221080259437,0.12400242992469382,0.11896100875855621,0.092257926844680968,0.079859132418172718,0.14379906746686766,0.077607328205380896,0.099498683718857603,0.15918438492371453,0.090703154646155748 +0.08392488017512556,0.18386624676514096,0.1134535676678267,0.22212426191820395,0.088226692260085657,0.38581202873707365,0.56097855626090076,0.6872020577750102,0.64328381578871108,0.50645711618151734 +0.14289333142973804,0.047991293968375384,0.16840788102464088,0.057482970187750761,0.10487334852130605,0.031017826815922914,0.011613551812358503,0.025315947947432596,0.012375161817283657,0.016554197451862984 +0.73427355509802494,0.53091640660223316,0.9677128440369025,0.85174601572789055,0.67851862212880831,0.28599075270633956,0.71871775105996949,0.40992802054269506,0.57680024978037214,0.24066916722823997 +0.64014240112873155,0.70545687662434886,0.68437809972842223,0.60859352490120344,0.96640056753342563,0.35096202106611585,0.61141320195775606,0.30775759596399699,0.40427445544172363,0.4499290679760598 +0.75017335414168917,0.68809337616079058,0.58946147403417326,0.68848999023968127,0.71595388408419702,0.71324077132013608,0.821610590778037,0.71993962972054582,0.79553967930568226,0.98019574014042887 +0.42850276826796246,0.3298660345984224,0.5001051407221786,0.63748139894147737,0.23252339223286381,0.27890616766296134,0.23609003654102279,0.21804554042301522,0.37963044616073044,0.20199641621389683 +0.16204452154323329,0.33923819553713808,0.53033620751074406,0.15948077058809274,0.13774978369117766,0.27800893540181781,0.22997940155227264,0.22009634925336091,0.20521079272804293,0.34265455591198551 +0.86334837248736396,0.99079866935359195,0.95365848047480262,0.98620526050418289,0.78548324036282691,0.94513704278277844,0.84802818791008638,0.98643017069951577,0.91671892643314945,0.97840582304489376 +0.92897571167544768,0.64215300795463715,0.69000290851860868,0.8068012851532198,0.81076659921763661,0.81083647881829601,0.48543573397489403,0.88563691737655237,0.88881323186303918,0.66451907854123782 +0.79490158040415193,0.64369009128014254,0.7881677349157451,0.38315512636400451,0.51542117114830088,0.95619473794197296,0.85680114146594033,0.4769736256479426,0.47890874823997703,0.71204312383260282 +0.80343102467204142,0.37025131880985102,0.83702121295209908,0.64745958503184076,0.3642143796610422,0.19311329385725096,0.22434483759012991,0.77329377565071333,0.89000742628194063,0.20260341868276874 +0.18417911050663047,0.19792638799068582,0.14299740375653658,0.31684542123392762,0.25887988320061012,0.14193560680832451,0.11765351654310892,0.35373717660939075,0.10229957650111932,0.11344380948705997 +0.83269723215824065,0.64840081036710073,0.94172644252111215,0.67136592676355766,0.98641216214471994,0.84333235661347117,0.94225361336077029,0.99163173444708153,0.96721293143979636,0.79222126996231523 +0.90253745846733513,0.91307095237250724,0.82799990801926426,0.83970490358930727,0.55450148764255325,0.35651931274030024,0.74400281625135001,0.3782997812950582,0.4843269772209286,0.33677157356366288 +0.67712680225026456,0.56430701506179426,0.95188288695793832,0.50838058736770342,0.65825974738266413,0.86456900522843427,0.49860396143871005,0.46775233306077318,0.80989825239223401,0.79807694995481193 +0.80474255327205269,0.9191366911624943,0.53386228623428578,0.69789409752382892,0.85228205662655432,0.61538353700675863,0.55960265191026126,0.46139258301462166,0.4730848774385375,0.44184998470631032 +0.95257035992951022,0.4695852703569659,0.56019566045639357,0.65240045188434892,0.73574524679786379,0.33038940481556206,0.56032486803701664,0.23380718955058943,0.52117922758469448,0.38061047818450788 +0.4984944832590365,0.47733412374012429,0.63790377610450821,0.5671004752662927,0.37393182610682363,0.42461035684992593,0.34523979286594175,0.34327753047248277,0.49574656842560466,0.40511037077918044 +0.18109829977843375,0.23430231743353094,0.33834333446301801,0.56651622539377666,0.2464926187217904,0.65221767959476817,0.48406717661155568,0.62008288715567816,0.35310396814986,0.26079754376522352 +0.15351736581593411,0.069531450807296669,0.14620833990204254,0.048611903155119124,0.066059390649854791,0.02454834285628394,0.017939982857284299,0.023352498572352182,0.014605608788550809,0.015491213464701462 +0.063711508058544669,0.070244735464441807,0.062742593834318655,0.11802905533784395,0.12619613538273633,0.069248207611971299,0.14755827907370461,0.13217362882385067,0.23735379891316002,0.1758068214942842 +0.048743416282732606,0.062468956517191025,0.061833509425897049,0.12307514280627371,0.052648560540553904,0.11308070799141443,0.059830693813214694,0.066793149904018551,0.085475128494110056,0.069204406730332277 +0.57320989222660179,0.95784823892324544,0.86842500741701767,0.58243978969694743,0.89763652685097439,0.4265999477389007,0.38866482486139459,0.6218612551238859,0.89217985853077786,0.48573173049366408 +0.10920279517282827,0.14129880424885535,0.083151689092107836,0.081922949115327812,0.07674500858011743,0.072174105419776341,0.086460576983451998,0.06083592422179341,0.07085504471017591,0.051460491722200491 +0.64297457130012903,0.79491993548226603,0.9734456495499525,0.58431770484365486,0.71307084915669927,0.89408548162752477,0.96999435537276235,0.9948001156609444,0.92920114710169766,0.89840120466520179 +0.27057925770661961,0.22365327553120848,0.33267614541887236,0.28030657494434263,0.19972907384709049,0.21897088037917797,0.32007209346553328,0.30643734700475261,0.43214411471152669,0.22483774741353368 +0.053963602156258207,0.038229758675131779,0.077103932018330767,0.057095990465084887,0.061242892927946678,0.19914771123866529,0.14344064360612285,0.18431086428434343,0.16363896906008113,0.45969347241386804 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.012473341573471994,0.0050000000000000001,0.0050000000000000001,0.0075522771412137616 +0.83952000092869161,0.74140219853741463,0.67997447897989582,0.77743474477744257,0.90451076516665319,0.66906751773092232,0.28070459861619323,0.40842592202220535,0.97191403310132762,0.3385285549705413 +0.35530227926014069,0.36628645939802534,0.27236725401540318,0.36792729965604648,0.41639328032056733,0.46066665864512857,0.55964302715850467,0.75236217385496829,0.74689677257205378,0.63202207060215254 +0.9553066206594879,0.86133972034741901,0.93396297223908187,0.96797096544266659,0.71680911092230426,0.64550279158875601,0.4105007905628964,0.60450400878921839,0.81614255923902423,0.61394146745966127 +0.84916082577919039,0.67620718359741105,0.68747788410071808,0.84921325220394217,0.86446255297384511,0.32042131254747003,0.68303517770154565,0.69915260073780694,0.91744224961030785,0.48488099358470138 +0.32006153728615511,0.8707491814550139,0.31024375380179597,0.50044152871036707,0.54910491214222124,0.79469792623030622,0.20841300716491887,0.27371366443974499,0.62145302459049745,0.52914909350824146 +0.39808769934657467,0.20671908687177631,0.19468569334281233,0.32581117080258498,0.24840594595390522,0.30659826817466329,0.42151587543622343,0.17555033018119809,0.1803318779897542,0.30278456758223066 +0.49285465076448742,0.93164253396277952,0.78819603493498236,0.91981306577852173,0.6001921748975575,0.56733530694941825,0.61599423346660742,0.770941765050001,0.70607382927517426,0.45292720475799431 +0.69101610198724939,0.70502924160535763,0.39370362418326649,0.61546811036443316,0.43199540097827593,0.0894129041829686,0.10685318091469913,0.19420672171888428,0.13588138041883355,0.095981456602261123 +0.15251843509093541,0.23913538318592226,0.54050107316206408,0.11890362305773337,0.33794688545241236,0.099698315253464051,0.064122798689705982,0.12025897789708599,0.070696129700622265,0.058665949825813871 +0.14324084711184695,0.14298094862338373,0.17059260450745731,0.56589144598097607,0.15569904900865117,0.0050000000000000001,0.0075364940372125008,0.0050000000000000001,0.0053443928471204761,0.0062627909492934302 +0.081571711718909604,0.052759090119493611,0.14753770135845731,0.049715764373989113,0.053535387470985164,0.073070889731288086,0.048318233122323785,0.044325113579071651,0.07684938523557959,0.063972988634457412 +0.30630896292589715,0.30592799754011574,0.22695626327440477,0.60488083237114854,0.66257209729509214,0.69597558330824683,0.52487588961832055,0.7545014941002397,0.68738124003372247,0.48050787159752278 +0.54792165834189255,0.27202299424637227,0.49219791886848602,0.26977464333683443,0.26239482136301689,0.65442457308797908,0.9432973197810296,0.77010694813709046,0.61615956928655091,0.82887824853019665 +0.93159058626990665,0.60833456552674414,0.80663793721615318,0.66567379891349632,0.66361224246434003,0.70026173677781689,0.55224640716094553,0.7436810969365909,0.64445833948003217,0.9393958830306387 +0.28072308962295645,0.12132440545716369,0.23420518724348977,0.10737518372061813,0.34453658973799001,0.20200122594771228,0.32391941756758724,0.1911495493981045,0.28594033190613677,0.3315671011575026 +0.995,0.96364698956828865,0.89946935405485551,0.88132489675638637,0.84738533131630001,0.63777477978152886,0.52918303364312302,0.46769124298071807,0.80184330475661159,0.79247341857315179 +0.82581283931130123,0.909130101108096,0.78385099500073385,0.98073787263922585,0.99047076653824595,0.50303826512931948,0.85173226905705757,0.9024065111404681,0.94654022769972357,0.79626763833777892 +0.93193314447202769,0.93054226428705522,0.8144006401865963,0.72643280288203349,0.5073844762194506,0.81160418266354106,0.7307007601055292,0.99316110993020501,0.91048186113054708,0.92747233636369464 +0.77200524510319279,0.5808993426672201,0.83691703903977621,0.93047472002681275,0.95881351646783719,0.76602099272519053,0.696586198935923,0.80826686493590927,0.87119011448864181,0.7454349049686585 +0.5585891088560172,0.40177621556877674,0.45095752278770934,0.6863049350505247,0.94985421023433469,0.5842496690941954,0.78570509939937683,0.89364924898345943,0.87047131105017583,0.82803885811711686 +0.8194399361113105,0.498236539470861,0.78033942878077722,0.58839047452035376,0.72618004546679937,0.41498546457808189,0.20711999814338108,0.18860211715872205,0.11079874852110259,0.11855260952241932 +0.26537376995736872,0.20211342140517061,0.28361075891729254,0.14037681063826227,0.30573223627078239,0.50845608174852064,0.57105806358249389,0.66983167987427439,0.57505231804787749,0.83625990275975182 +0.030916716823553621,0.027002162057856851,0.060472013436241603,0.020030760832722615,0.030193200284525008,0.062687847314782968,0.042461809168376531,0.025687035101245512,0.031583471875922781,0.031880614366497542 +0.022859560694799708,0.026462368487532636,0.025291612000168009,0.024363440662389706,0.036665224105314406,0.021661894479819237,0.014231320072534814,0.02946271703394273,0.044035020374098927,0.038552414741501284 +0.57040593030025977,0.995,0.9395371667072876,0.59914930420947388,0.4901343232165567,0.99410569053419739,0.91852093191972295,0.83000717636604049,0.93268885511264743,0.83218120457863554 +0.96280489999105068,0.97939277109473311,0.92179432326699551,0.98045437722984419,0.995,0.66869329518144227,0.82443781584621723,0.71490438231222597,0.96310485352500697,0.85139969652764991 +0.80112619006382046,0.95452660086244934,0.75650725661912732,0.84837799389342938,0.59684831286684159,0.686621797131862,0.71868842929264987,0.65969147883169188,0.76784691054958953,0.93338472370404624 +0.22359470624795755,0.19606948141990854,0.24464172937950754,0.20709096400743937,0.17761618088598555,0.1242891348990867,0.37797634237068645,0.24651440398845328,0.46651395706451698,0.22704463057018387 +0.81414348983378904,0.81470830946452755,0.93541272384983265,0.98934823235231484,0.89273453936639935,0.83627568484620285,0.71244911797556731,0.45560968351811487,0.6842191769608692,0.96036358569151759 +0.43491651930975561,0.35070808649312363,0.44607506050669038,0.28421858370793984,0.39752624499441441,0.41753514800054353,0.53514669946375926,0.64234351816267488,0.48451283931135508,0.52876988873180952 +0.0051915774895291466,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0077339604895883905,0.0089650618431584214,0.010663703079107106,0.01347617749319664,0.021268338571734921,0.016710834733543484 +0.15612071178188683,0.1155591574855048,0.19849613379068937,0.17556703779308253,0.30674569936508955,0.1408766933549305,0.11264213069220926,0.11927732891979755,0.1518023039914993,0.10780288126960676 +0.995,0.43022779990058169,0.37890130311576542,0.53351284731333204,0.57363723829263691,0.85628651335810435,0.9562926263560183,0.64080487901826166,0.6586515446639053,0.89814664925402932 +0.48667815118639357,0.2869940950599863,0.56980736112225994,0.37976291193198985,0.62441268490563273,0.84828060380911952,0.50930113437873925,0.60666379253889258,0.81935415643227461,0.85112931466389252 +0.051488407956975867,0.031446628838857904,0.02976720478890146,0.067654080649608775,0.032916444681299464,0.035663664618239138,0.046161317137685301,0.10419137246299319,0.10978454391516355,0.059678646796902844 +0.32358052085895506,0.51981961133562637,0.23893528096236777,0.3673467089898067,0.42617446185749863,0.13919749384111971,0.1619923274644742,0.19258236658510933,0.12663977456568698,0.16037231788322176 +0.90699350131795942,0.90419592304753538,0.98661200648448122,0.77453093853786215,0.66229234250350955,0.49105981798438481,0.94086003243993832,0.4938318087984121,0.45188645070750022,0.40922771406959879 +0.39743881505785694,0.61973514014731734,0.46787053617960578,0.63783588456884488,0.78006120864098261,0.46747629129509766,0.3293555618833498,0.64464677808169046,0.33629500512501126,0.71839973927165157 +0.70991718746251198,0.70611455487975683,0.82639092390798685,0.69531764050503719,0.66777985775100246,0.73556624897511613,0.78270866065284683,0.9707287185467337,0.94032011001196969,0.98736307835872439 +0.69619846689985876,0.90161190762732035,0.72000453452581303,0.40855251170655693,0.53788196564382817,0.56890857744629442,0.47587180712056992,0.59034067281411673,0.76930983513343654,0.6755500718657006 +0.84591816256897778,0.87120319109403244,0.71275632171467884,0.90562427511096477,0.88940460708128299,0.37938974812874987,0.42544404934643282,0.45911764644253927,0.4589061028605525,0.2903989352293912 +0.71343678732701721,0.86087485601312164,0.94953092138729933,0.99117142188509466,0.61295571124877901,0.89669465254806247,0.70396752759267489,0.94926284872491351,0.86928809273671448,0.8446758625940517 +0.99334076432722729,0.49805586160697513,0.45024338873322906,0.48779529080323153,0.56282261157197122,0.81990814530021738,0.60401791042788378,0.55344583933632685,0.53186370877154299,0.49262411850041588 +0.29562463014063495,0.2856376268334338,0.44832885472251116,0.4061735484713494,0.40476994099821378,0.42150078623515114,0.40661404517271904,0.5735223661969705,0.27835479801698715,0.4906808337970216 +0.0086733633388576363,0.014908740620682988,0.022308656149591023,0.011042452970874089,0.018765277881072542,0.036537811274946347,0.018829913909791798,0.016503487262659412,0.011113759854942071,0.025675992613443752 +0.34390243573958262,0.2554728297021146,0.34789855054841806,0.32488827171571216,0.30749350114408236,0.57728952587237214,0.65283518781614869,0.87481765827468894,0.63329777578639634,0.92636546217755966 +0.27991128797392273,0.32631877682822658,0.37354038016727692,0.3783548459870566,0.50462903085084065,0.039682771260217145,0.094360336638025594,0.05022863104353658,0.053388891735534995,0.029794577902426189 +0.32276674460465204,0.2364120311318007,0.33223788005365668,0.34717769186919645,0.28594393584585975,0.31870112756891972,0.39832503698318111,0.26650888128241729,0.53760904367368822,0.34222082742660259 +0.70448133803094604,0.80306625844187041,0.41425544022275235,0.60879260671996471,0.62719497789425049,0.18298671637918099,0.070007313822754241,0.21435267995139981,0.088747391737625428,0.23611574978188421 +0.10981756149364329,0.10416391039751879,0.15712906960769885,0.1400374914583444,0.093146045196741967,0.21276859004370727,0.28598764780885083,0.15533535501051399,0.1404375846748406,0.25986963250709261 +0.57499148447482706,0.38494910021318895,0.43663922928271359,0.3373061220179413,0.68275575428892399,0.69243892186084244,0.67382421832560557,0.78413151975506246,0.70690559390911745,0.76829367670861959 +0.23990166409526198,0.4897719427215812,0.24011908071425231,0.38271146434336439,0.6583298194212821,0.16966688469953742,0.31919211313067475,0.40022514318414537,0.2098725529984887,0.24874953322785498 +0.35993197299520008,0.85216420481862931,0.35343303062709414,0.65983716604705922,0.45464436269984809,0.62026556335642213,0.88856621605407116,0.71571172947812334,0.97913958255527633,0.76898082985757443 +0.90787698873389799,0.82238615241566471,0.62930994651330996,0.56366214520162128,0.69555339168600616,0.49842038797617083,0.47417130190037399,0.39129335031229778,0.97453675127440154,0.2589289524636138 +0.98456254274934185,0.98038108568980709,0.92422777343383977,0.99218446831018003,0.79853397479961474,0.80810799669868749,0.63453525448661985,0.8868132469401141,0.93222434384655661,0.93188100975403199 +0.5105814589330353,0.948030015849885,0.61748277451809785,0.62852755380256264,0.68380943444371323,0.59678135546479139,0.88127979187412386,0.59287995308992636,0.97208768603750595,0.62970090689210534 +0.12025619115988441,0.084955872781639893,0.063811214846869246,0.11315747147535216,0.06826616505068106,0.21107418872920419,0.095392989718525056,0.22577575089139379,0.21114741757611072,0.087526974217787448 +0.81616210885970741,0.63011923885174204,0.758471159734737,0.66848664604962171,0.58161477780409443,0.5936842099614611,0.71159228136410657,0.74836341900097925,0.72398141834734375,0.66530660818398579 +0.29477251149784062,0.2353054492995815,0.16115669227984508,0.13868505775989226,0.26040004513893128,0.11408652022595134,0.11786417791402708,0.063045379871072282,0.077391080128965423,0.11045138294110268 +0.6358782784436845,0.88133983052713349,0.8699845782218959,0.64119793879771492,0.79321063334150577,0.84667143790299848,0.5622188751142766,0.49452495145492686,0.55692321352845364,0.55540275291593511 +0.45306966247201558,0.65708869774861078,0.4648811037702299,0.44310788923942679,0.64665660590434393,0.61754791940187426,0.9655318132727716,0.92838714953521018,0.87475649922279775,0.77349472210132353 +0.17769715274323639,0.21450003799915596,0.12292688534989089,0.14975371582251618,0.27931894604652485,0.23735643894121788,0.51258605670169688,0.58893447280132738,0.40934884117595388,0.43776060074191792 +0.50614420331600762,0.67236264001373658,0.78358258063500774,0.68367519834244139,0.86929196556024757,0.60698246026182545,0.93259801725340541,0.67400633756254424,0.44637748241833497,0.5549697124704015 +0.44648668684146292,0.2649494510062595,0.44808918248710855,0.21061479429270205,0.4933859035767002,0.19209536605427033,0.25993647083504223,0.40478725377427499,0.24794034738787027,0.24154432789131244 +0.60209856702620312,0.59958374614594578,0.69007204203555583,0.89116008585044304,0.82897816563685622,0.86683999533213318,0.82825382621597599,0.74273528989588233,0.90381813444235226,0.98179449610723235 +0.36699088516699874,0.29162734704198295,0.21212139712800301,0.31941232553579108,0.31415049123785338,0.22318967407278184,0.35436047118805747,0.11081020491611082,0.35679995964604305,0.27300881844552022 +0.3883145641744542,0.51442823997473186,0.64927914348336724,0.33979899169637223,0.28259570002947132,0.39008769132499421,0.34439229569381974,0.33744463913143269,0.39620478551159932,0.63110835966221335 +0.19584645991297711,0.3364677780729402,0.23195809340254844,0.222046997789308,0.28348464555070341,0.31053233881024278,0.19400994351661652,0.28857792034488827,0.82351354911624797,0.28304388251372792 +0.18774129480705301,0.12732273842109426,0.21954499119599008,0.21268831358673285,0.1843402531457817,0.78351051365220437,0.30843001557685529,0.18351824736743233,0.32947529164777689,0.30157863717741518 +0.11052089278590792,0.080056248260856389,0.1207141237356494,0.09753207649647995,0.084752868427009589,0.15932358131467617,0.25713119050151739,0.36798558203954934,0.17559783524666772,0.23747084846915448 +0.88809067848607182,0.77166606283633477,0.78874392387956604,0.80197589631048394,0.82173797300508911,0.77174966299782721,0.86408939890045056,0.61839447909964695,0.78135564249219824,0.76309548838561092 +0.46491234679783122,0.25904047349650888,0.54319897485894564,0.21346365144249965,0.36490289599991299,0.34499088256145405,0.21310758574607519,0.17034239515909225,0.20213610835229512,0.25926962680553861 +0.80536324225831935,0.78975312472138504,0.51443592967828899,0.78021075009818752,0.68476493130986016,0.33406857169027726,0.25651521839397395,0.58876419202466757,0.32930334373954417,0.91108532933734077 +0.85294973767732185,0.46123932157829295,0.43820256194099239,0.94205729696448082,0.70661580081765152,0.94367168447955796,0.57683069594455283,0.96172526855885843,0.95591105599677817,0.77708842540727652 +0.5958921488168083,0.2353159067418743,0.55149601874915322,0.32851621894717115,0.31398889038115502,0.56494754908635647,0.99466449684417613,0.55432064779398005,0.4394464580295287,0.71588256888519775 +0.069387511349587039,0.1244308772454112,0.1921845774903542,0.21897260382889794,0.098577496270774015,0.09513863704046395,0.070556439297810997,0.23933753738169439,0.090097785402825273,0.18960618459329129 +0.21966878607021642,0.29035436337965709,0.23213310648927343,0.25160516284515139,0.27937257805955423,0.2433155139914577,0.27435196544660617,0.42464917898126397,0.4237177329396028,0.19177916551270532 +0.87998399837320074,0.98350132660587974,0.97433257568334564,0.87271604792699597,0.71572355210822036,0.82050572432071633,0.61633344849894967,0.91927082146927297,0.55954959705433815,0.75151503596814095 +0.87490212676611201,0.92321157810426258,0.83864370492407769,0.69002541380889826,0.94430437350051188,0.81368562614240869,0.90875967316785089,0.97108002109890446,0.72390803416821536,0.99490836623778989 +0.23113177962514717,0.77181401517341996,0.21809171041441131,0.36036869503499624,0.127879681649612,0.076899455084070159,0.10705120484008442,0.11636187190909601,0.078187624305327053,0.099376933261965061 +0.22889092246373785,0.58325925812742174,0.20639343628355197,0.36340273483301877,0.86378032209781819,0.37261235001162807,0.45484411637536437,0.52415725099127142,0.59588744924822956,0.454740437862518 +0.60510885962397443,0.85170913466228348,0.66933391012079502,0.85631123184278823,0.9052822672297014,0.9047838168807314,0.97998140614812024,0.97496395421932247,0.74113625267539596,0.8768054751849983 +0.46627539003012752,0.71210708542629453,0.39285554748887919,0.37193570907573092,0.65112614666541102,0.33568683752826678,0.55315139425831861,0.42417416291011528,0.23086618986507729,0.36936976753946127 +0.21647168161910441,0.22563370971908014,0.16414127769273232,0.486403213290932,0.40738882830576106,0.30511545198309642,0.51453819510493837,0.31438175501669624,0.22688587537082761,0.24184332303581305 +0.84708194661659575,0.91512587891681851,0.83426121301130352,0.96264809634409199,0.68620137963697625,0.77977200514931055,0.59796289971514849,0.7759607411875542,0.90557856000593784,0.84697150875450988 +0.59797473144541857,0.69685692603499294,0.4692866070651438,0.38985830231346663,0.72355791917012091,0.3090070266813198,0.73938261628960511,0.26902540512003409,0.41255410999922992,0.32666551326045795 +0.13310049194295123,0.22347429962902987,0.15703276217894277,0.1541668479555581,0.24533445509619412,0.11630418525885644,0.20649726416578268,0.24659271314950057,0.56188426170466133,0.24194774126329388 +0.77563297948583088,0.8711593929898771,0.73358030738855595,0.86337872784695102,0.94910115759780533,0.63284068842679009,0.72207726614924572,0.58397172234369277,0.9178294098381502,0.48452292600102448 +0.11203890797767509,0.11982379595463832,0.11355543374988908,0.1245154974278347,0.11332663714641755,0.26292597343040436,0.30421046665234741,0.31761374496051292,0.23845500612032927,0.24963158916470793 +0.13722552900062879,0.074443660087634506,0.13368339988064581,0.085635939295750613,0.084485439419243372,0.21291949153020784,0.087031197538211993,0.21993416728731846,0.11645789096594139,0.12399243431788282 +0.57565497247279929,0.44183763715141622,0.39663313388397853,0.48639068914438632,0.74903817915480653,0.73292413316147353,0.65282819477172649,0.69682548221195706,0.93955814336993515,0.60303732704298074 +0.44161113138364749,0.26495957150777255,0.35249220824155503,0.38255013094719276,0.22850622320773975,0.31533050685403663,0.38206586534094039,0.56458155501518692,0.58246519872781188,0.26480855003307147 +0.68134630454210388,0.40585788637690967,0.55963207592892583,0.4759969978941187,0.67196518621439438,0.84556573219916853,0.60608872059468888,0.44255666410306932,0.75842083696617912,0.84718018039582177 +0.29492289678719735,0.49854429400950656,0.4776992617053909,0.32420762365595629,0.63071642218533597,0.80311596366662408,0.55508908871108908,0.52939448502710906,0.7548268454635495,0.68630364797479582 +0.32009025904940236,0.23692112454040931,0.1756730083544189,0.37399974892582977,0.20312170138755881,0.1669150756772296,0.36376747490073064,0.27351887081572523,0.21046150564222257,0.15734687642995407 +0.34579631842453429,0.19188951995967984,0.24152719241929671,0.32783858365362534,0.27043981963570501,0.073525290612612246,0.10738241347725623,0.13260748901395583,0.094415546658789082,0.18954822267087804 +0.98162057635986355,0.63043296837303642,0.86484507592287796,0.67696206528494884,0.7560046462187785,0.48711211776758595,0.87807249901686069,0.76452532343705326,0.99435793320737775,0.81067212136660449 +0.7748829745249679,0.49898292093962437,0.98069445661816423,0.73912554110658291,0.78200664101571804,0.27228867323973022,0.32455748374334298,0.27302565174122884,0.46696110881792241,0.25709475680766447 +0.55476070112676423,0.39063553679018648,0.39071556847566286,0.40715378648185413,0.36917072682604929,0.49120709175698207,0.7774551292106997,0.4567895203712698,0.73616158667371978,0.7247637595176385 +0.48105898886342235,0.23459399468246978,0.73050266928381413,0.24909490776951751,0.71473128813905162,0.61171685961122324,0.63929258673695044,0.59469269421427984,0.46443525630436155,0.47687457599013011 +0.72122269823059526,0.65139556442400548,0.81187928960378652,0.67134270429650189,0.68863429055482439,0.1442699094388418,0.11574016553683754,0.074041247812449501,0.24177573093807567,0.16598246324071941 +0.13767534671519155,0.1884676032614338,0.17222223748188834,0.20173046772405254,0.090126443540050116,0.1787068929802868,0.102234673602226,0.10046574319541128,0.41457217478123448,0.074423757520133429 +0.26146133579238723,0.19387990881040343,0.16778889326723079,0.21429750707408121,0.53574717303992925,0.090689724275640801,0.14427027369517387,0.21932779617275594,0.092206960318076556,0.098278119121263038 +0.01495288269933061,0.016630933802517015,0.053778978643873723,0.015045419170796397,0.021063613953808413,0.030749377683406319,0.075582260861690273,0.031565743684869335,0.034163183588578894,0.027079172848996379 +0.60812719003858851,0.96345269075136508,0.73811634076655552,0.81433249932251228,0.95093932062702347,0.66883552629406151,0.79247414761405544,0.69846692968505397,0.69341136437081408,0.77278024435625725 +0.64726973495660212,0.82228025525843729,0.86035318896598667,0.697467347521736,0.82902968701513491,0.67822041349124851,0.995,0.72458311057476366,0.857238314123139,0.78866901307361703 +0.35701636609150766,0.42068930445085428,0.43793924279221419,0.35384355015143665,0.8460294241774835,0.80232272165179996,0.52846420595518384,0.99069444179195099,0.63425154592020738,0.97149803576876081 +0.25426469956709613,0.14820938513026632,0.40793549101569315,0.18039340105198831,0.3325400016548189,0.3872852606247737,0.31495285878973761,0.60900786550190111,0.34080771615608035,0.95953517942340671 +0.23823646346388405,0.52590903791255295,0.38311297020544144,0.31603653384659092,0.19377146579564081,0.28205438488630952,0.29277517894403443,0.23817515336643388,0.65051257261692397,0.79902644966779313 +0.95945600705332124,0.84761361288015413,0.93881497998776198,0.83335323405475681,0.87922295238896364,0.78763129124330822,0.95056568269626973,0.72926436141434625,0.77025957509829268,0.95689171632406056 +0.10696189027023038,0.051306466521181614,0.087886331476015003,0.067641199595060486,0.049844090870223949,0.12165374413725888,0.23663145060138166,0.22205004282288021,0.086855263658825788,0.11965959714304276 +0.93613115356233534,0.64310485088761671,0.85370427978803998,0.82611823601151624,0.82026865484243972,0.57636569920298142,0.84456434471700803,0.76117315451551915,0.70277903006068931,0.72910266593176742 +0.82676403923112263,0.84084250265546912,0.73247800572907407,0.62672651921910516,0.68332852999027938,0.5318484380614068,0.72499480141126071,0.47498841674434583,0.7619829554961961,0.7212674986668165 +0.82806200967355259,0.47655822079573845,0.56362871467375986,0.48060235763519438,0.72943038956954975,0.10673905300457126,0.16214296127353597,0.13693705794751165,0.14032606241762613,0.20169081334469249 +0.39985224601914515,0.73514574371226971,0.44091104122647179,0.58281160109829644,0.98935558808444446,0.92393018272985827,0.64036043330752479,0.70435528731507735,0.61907079617390792,0.94261865393823319 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.036470164716576832,0.037524678884893921,0.097279365110930757,0.06750677366116678,0.080782241384741132,0.39094603370593523,0.2155837453094285,0.11244561740784913,0.24057814599237642,0.14799656263616434 +0.17537425451008101,0.50990902789156456,0.30642934362128899,0.16283865736612296,0.28874998179857453,0.3017114982619451,0.32213946761990503,0.57397488109722627,0.55856240547539437,0.82173438534300425 +0.51339193447042997,0.86239102602706263,0.42605028181365096,0.75880909683633546,0.73959346978742435,0.51221117672998839,0.46898142754630512,0.52356002322298145,0.67900344159824755,0.77224280676765378 +0.995,0.75015489489406428,0.85120877725005528,0.56948412177106222,0.95955071982839324,0.74139867898797351,0.9485299616680718,0.995,0.995,0.87570202781161555 +0.62874337704222361,0.91108083550871832,0.73284314172459608,0.85600878154304016,0.78457504815249723,0.34238612825843201,0.52147159432757739,0.56768956973432982,0.51742087703643891,0.68467663342371188 +0.85674240493621845,0.56973519048994603,0.67943856130053071,0.99470620534348053,0.74944155986947225,0.52822438742745637,0.44843618372739841,0.35656424131870212,0.60453415565503898,0.70443821388541172 +0.98669411847369126,0.70643898003819239,0.37211088001353171,0.57358547836950091,0.40473415447954447,0.42188712077583657,0.69736922512910504,0.87375755850220171,0.57202435467497159,0.46308175616080838 +0.21477074924467898,0.7263229700596634,0.17359228383855238,0.30683255859331271,0.2093778460431486,0.43334883729197565,0.2957737858520193,0.96328299876298618,0.70742977756812631,0.43813146552536802 +0.56691539389642398,0.58647034790425057,0.41218984936086395,0.33991677437415962,0.49079249763221028,0.68488763494503835,0.53429259150223862,0.47156971012945875,0.54003342182850911,0.69717650239445239 +0.20898983509254387,0.068274477161369279,0.086324963759863912,0.06550791965622256,0.074559108883755956,0.053761544742728422,0.042766015034342769,0.022067547889816345,0.041983673286952773,0.01921326045074739 +0.88988208984859229,0.97613228029191657,0.99061108215618998,0.69893389954719631,0.83600642016087712,0.91777780341184312,0.87349661913179755,0.96187283272506041,0.98161719434649619,0.995 +0.33694352357733276,0.3169071180429166,0.42176361541130453,0.47789211372944906,0.63370377976055503,0.48679330752510852,0.87538541373530732,0.80385593564102198,0.40719592185252518,0.72766028555876061 +0.8934126561187844,0.86165047146558316,0.73761669365446025,0.83733942001362593,0.94117567087919918,0.94643862040403393,0.93497411447903034,0.9270296483290642,0.9640280728817282,0.89772049086301797 +0.78264187349143843,0.49795288024430201,0.86603036691971436,0.630099057523276,0.90051386729012484,0.52157513339304606,0.41120361921357002,0.62791091724884229,0.5639688044246699,0.82285896382201951 +0.83081139737479104,0.469176971852731,0.67055263630892803,0.65809374826032596,0.73533353417710545,0.90189944229035079,0.66903420413273662,0.44236310724088918,0.51398879855891411,0.77161299374901826 +0.64936841250766852,0.61549340361247451,0.74460622804443133,0.76733746872394237,0.4696014259780521,0.58710026392039905,0.46624768231624125,0.46803553810033904,0.45183251582214334,0.47144120372665543 +0.75161050497953386,0.68256263267544348,0.43743309161464744,0.96584999699073404,0.78533247807588202,0.45497489511450506,0.33284007000474564,0.55143961692788457,0.60955837751040265,0.3684437166500823 +0.40592465688981177,0.29161055368069683,0.31851908476093821,0.28710748005710401,0.5174120496864556,0.22839581275979756,0.45322447818919598,0.3175870343384154,0.2275098584761131,0.19112831541497938 +0.59409722522995767,0.42024685562516484,0.46835080986543631,0.61371018440839653,0.88676430522723604,0.23366720915962039,0.37036529339266666,0.48480690180344521,0.48264197884883586,0.36987726341125582 +0.066749932314688537,0.24185462600659929,0.05382428297538415,0.04587870466674053,0.057475065489704928,0.11564798877605906,0.18624804696715258,0.12377858531999933,0.086523702920294959,0.1837344552085006 +0.62171618042938903,0.50896004767313385,0.49508413621592429,0.573753957249169,0.35942216196490823,0.34308502471709434,0.38449119846222846,0.29414367291298271,0.36425708534619394,0.32782215088371686 +0.023312996706204497,0.014091195701070064,0.018970588520850224,0.034265437166737724,0.013561508886343379,0.028324243731477558,0.020314937013182915,0.032501339380544468,0.024178893554160634,0.028386848794789456 +0.14571440930138643,0.27290739560265398,0.099518449537177908,0.11266723393636105,0.1875089774603389,0.064355688083538032,0.16580006146503359,0.14301981098410854,0.18507211561391138,0.12209871406055478 +0.69903252910086522,0.46688656381605925,0.73951458227341449,0.62964663226364992,0.53233805831368064,0.94495975288690726,0.68140322093765127,0.9617984051022832,0.80923687304445036,0.79833755556969388 +0.4640425088989068,0.29085288889855165,0.34127452856331864,0.3879256397987037,0.40667948753012378,0.73212319032791429,0.78734053841869545,0.62166441625038649,0.78536586154230525,0.8003433967479493 +0.12353414681004835,0.13692342310396313,0.17549613796139515,0.20305704877563041,0.19382742164509495,0.14041043700316319,0.19228169607788287,0.12830346165448742,0.11986096176067823,0.1138864737286369 +0.8394465046440921,0.99370319569769716,0.96176492860531515,0.69911439732452452,0.78415636320071025,0.49117979574193604,0.51835743630681197,0.27328967326210046,0.45024071912422298,0.33882871746145521 +0.76161539895946351,0.83840145736719129,0.91984201024844725,0.82077075636602259,0.98930552704237962,0.79676427630802482,0.7243659583350498,0.85987640434844326,0.92718345148482761,0.9938616423343426 +0.50742176043157095,0.95930112743391305,0.56623248735592813,0.28899291637180996,0.59395713198533462,0.39108225151214082,0.71664117820824291,0.27946061986764059,0.42593005905735959,0.30116650517485638 +0.80688009468153377,0.89493595492282618,0.9900460271061754,0.995,0.96162146269553728,0.93110628881764179,0.84047510682295723,0.7831849574025086,0.82588739048286441,0.95135975808879014 +0.24845862066281357,0.19814364855854638,0.23983926531434449,0.17302045570465202,0.13761636646180031,0.22351362239296974,0.25519855523168805,0.34875094553689545,0.33672693571716167,0.3897054057675855 +0.66414708061779859,0.42635741282051087,0.16286155997257457,0.21213277377792242,0.39995584941270401,0.19412833976851979,0.17625653230457702,0.21125144272077973,0.14680867012507273,0.33253357477402634 +0.80705938709640346,0.34930973173716862,0.32643968623442898,0.46930266499537276,0.4632285201589067,0.67646942901870266,0.98391276861628763,0.58812894362175561,0.67944259048368938,0.53126693624870669 +0.051074110284546212,0.025980754778760048,0.024496042357065782,0.01623397110789471,0.03973046100807337,0.16487287099963877,0.1458812029547204,0.13166461297751686,0.19963090943882406,0.16082613031397203 +0.68095051014117169,0.61608570637542492,0.80289316167911917,0.48423440793197309,0.71302558923984749,0.66124164126138696,0.84261837393612049,0.81500751331995092,0.87107812065307955,0.81013688314713972 +0.34709702671849629,0.21132434189045832,0.50824467038492238,0.26575824795168324,0.34295844227102401,0.40661653927765007,0.3015437601212877,0.48361738258913461,0.33232585971882289,0.25103438101954451 +0.7852704469074232,0.74853931375678817,0.64349024788045506,0.69439055305193942,0.67944411232046154,0.9217425879362422,0.84420078715565106,0.8601687008874731,0.8782442834009494,0.99166253237665936 +0.59705959054078883,0.64168613413364695,0.47552106551910611,0.92387716880877313,0.56275309042831434,0.47767534673992318,0.72659329579022158,0.61347031867503576,0.54501187471146617,0.79577208086714124 +0.21012682048784842,0.31189881885394072,0.13265169006958302,0.1480669635758837,0.14714100261109192,0.85788944448084126,0.97010689507351988,0.50728199661253626,0.8279262679642525,0.40717368820928501 +0.8562960999353656,0.76010687979497726,0.71412889244075783,0.77349740170287573,0.74143024469314844,0.90008733715442923,0.75032906036466307,0.98611843892574802,0.76048314629577651,0.94142359177295487 +0.87897852561842271,0.9219960406717288,0.94071664434104352,0.94067880320261676,0.97437663627757776,0.99240794534623744,0.98660539740456599,0.87618544635477302,0.98531768050337287,0.95184820829674621 +0.51188718463372518,0.4406053342202379,0.64995954078952733,0.63915200663601279,0.37071861969150205,0.61500648042214567,0.76690659999003052,0.97816829974903718,0.88017611687282349,0.85121952450044236 +0.66656784578132688,0.70527827339933225,0.90557752675864511,0.70004533241906941,0.95993685786113692,0.61275938236734617,0.38173488520161308,0.61012428133500463,0.57121335442880972,0.62142771809628106 +0.36519930096982961,0.24888602506898869,0.31405867525214187,0.28255412907024746,0.29997319798989031,0.50904879305543416,0.35008321726021308,0.15467575767599492,0.30562555524951013,0.24893734363985751 +0.47457773882044674,0.60976108391148076,0.57830101928116417,0.3848091339288216,0.40239636991651673,0.16996592870540475,0.099893061618920656,0.2667084390774459,0.19965994506084336,0.17474702689753399 +0.87946569366493399,0.67180166563744892,0.39046103245333524,0.92230336754824482,0.71314211822075235,0.5573537049224766,0.47185664263124749,0.3167380186971861,0.33432888228034269,0.42877080408364082 +0.24164595719022181,0.24686407980296957,0.27830406388818268,0.2858797921563066,0.22614537595968634,0.19955135496131232,0.23851795713394039,0.11231325363594494,0.20614069533864834,0.096043217158367847 +0.66973545604037243,0.63326992906702073,0.76589030874950526,0.91252266012191774,0.72861836361056065,0.70878383812449341,0.64969788505849857,0.77778899724173201,0.87009108193592999,0.84116115401863745 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0063639591799743971,0.0050000000000000001,0.0056137712040651129,0.011978924689326598,0.0059966743575784612 +0.90475794289706446,0.60898350225519216,0.50111126821789254,0.65481405971535489,0.39990223010641407,0.90237335783444306,0.98567139287418593,0.64471629215595716,0.76838696957839914,0.87484835099895941 +0.39121801304193932,0.25134250666321312,0.45224125591375641,0.59766579906084938,0.30575167101126571,0.090018752604051025,0.098556500417771836,0.18447510695558614,0.14390078830036349,0.11615884485663916 +0.15680143284134934,0.11757785366034197,0.15228490390872207,0.26352765412456491,0.26761964038224889,0.098040082124033756,0.089943922416624675,0.05392225812232266,0.042777997783502518,0.055773468715913668 +0.19802224294660462,0.28691563519822733,0.3412627082405969,0.10158562628078041,0.22977505716182089,0.14722324701190251,0.39165098993079256,0.18471392646053833,0.21297957772587445,0.38774714279345551 +0.80915478817829334,0.98868964022116312,0.85985487079366529,0.92081401921178896,0.854702112629522,0.33121530752621697,0.24268598873407246,0.18003398315438512,0.39968709781425515,0.18723174271989851 +0.084777163401748651,0.14520466707375687,0.10232450104699381,0.15681644827866531,0.099970522907277301,0.17375219832750213,0.14359496753480841,0.17155010808425619,0.17607715939699004,0.20706514435935103 +0.31152254810531943,0.15837580820307498,0.15292303204401353,0.45275144775217974,0.49926553566041304,0.4187805500025884,0.60736048689120092,0.24294281141288512,0.36001826477804588,0.49296207095743066 diff --git a/test/data/nested/clayton_d10_2level_acopula_ll.csv b/test/data/nested/clayton_d10_2level_acopula_ll.csv new file mode 100644 index 00000000..fbc211f1 --- /dev/null +++ b/test/data/nested/clayton_d10_2level_acopula_ll.csv @@ -0,0 +1,500 @@ +3.0335048374976559 +3.506976341355184 +10.78679992581948 +3.5590999130799084 +-2.5321255320598155 +7.2653072177610554 +4.328275564638826 +3.7813779176505165 +3.1948639135563361 +4.0222178170410423 +3.5553979255143062 +8.2325989925510967 +4.9742032526020878 +10.759067135195238 +4.9346764783935839 +3.0953692817029435 +4.5990944329920715 +2.8436517707777256 +3.611929549600184 +3.4104006831541867 +3.7249756668183274 +5.677699090560008 +4.5923640027545858 +4.1959437872230474 +3.4919237727324877 +3.3346987183350656 +4.7698669445851465 +8.9813104118279483 +3.0785258110963909 +3.1193093674847994 +1.5821150450702177 +1.9094909183257514 +27.558642312332751 +10.646845158013392 +4.7243982542617999 +18.570991765090625 +5.0061164180599533 +3.6034222168690349 +2.4543723967794442 +4.2313171924202067 +16.772080014014477 +4.4489755867790208 +6.6005673618274159 +4.2387636398703776 +4.4373435460348247 +7.036209161156286 +4.5831313555129753 +6.947239726518724 +4.9616902738916764 +1.9773131029164901 +0.039618342968005038 +15.637915945186492 +0.96555151364142944 +-0.15829676837387296 +7.3557713707856749 +4.5463052059111853 +1.8689727267392868 +2.5577891226408767 +10.767275230135184 +15.316400795047059 +5.0934417954600804 +13.499960717029253 +14.817253688458862 +5.9362210104292785 +4.7962403649548904 +8.5579864563805792 +3.3754217574752765 +1.1640150410071115 +7.1035445511023738 +2.7363635023556512 +5.7216737166780689 +4.6240381504850241 +6.4791032008734248 +11.653822653750424 +2.9136720380308887 +5.2856106063194712 +15.912457142157933 +8.4321096292071473 +5.8328113104211781 +9.9810398954332271 +3.7331756183046423 +3.7130440772300091 +6.9189306100297401 +12.717439838434913 +4.7953889643077829 +7.0563924455676457 +3.8713106602372278 +2.7742247537625957 +7.7476429933187738 +5.6152527443127802 +16.271595181969545 +8.5486364756546891 +0.93338543828986786 +10.747894101484093 +3.5460515587366928 +5.8333261283448934 +24.656895874072973 +8.8821223380265337 +7.8951321032056114 +2.8077003426422564 +3.049029020849872 +3.4258475143882841 +4.7095067133343065 +4.2074484374666064 +0.73721802682084814 +4.9670319348015006 +2.1662369854911532 +16.596623450006078 +2.4147662832589134 +13.114764769910948 +4.0915103521284806 +4.734470413975032 +30.195122517301343 +4.6322745756684931 +6.5339312661939744 +4.9320339098214738 +2.262309933386895 +4.2319500326141011 +3.4547336589521649 +6.0203197507283122 +5.6209542449637269 +2.670702786241975 +9.8108775493800522 +12.841648141448232 +3.51179600989229 +4.4949761613734651 +15.907106514398293 +2.7031480607015368 +2.6117859508100736 +2.8642745864119448 +8.7385795641172699 +5.1748093170588376 +8.3065449418297419 +5.591214951613928 +3.9708937306719889 +10.799791093299206 +15.531823565640067 +5.7642960722017023 +3.1702005531193755 +3.1165386554820671 +8.8332535366123395 +4.1722772914582791 +-2.7406456771486418 +3.2884718760253087 +12.003397392061984 +1.4714580914197768 +2.5401864228404492 +2.4616694205703382 +9.6158972481718799 +4.409738366436212 +1.4054053156280375 +4.3026790930069367 +2.2540811917388837 +6.1597538874488578 +8.8139829576388635 +6.2066773746049932 +2.459573902904431 +5.9722693712909045 +2.9200028389101291 +5.541264411709161 +5.9139637836516954 +15.442566628984693 +5.4594714405990246 +1.4641624303507115 +3.4078930309580429 +5.7052530725756725 +5.0020039587234315 +14.193372897026549 +11.613008505066333 +2.1758029331505284 +0.31232196640922893 +5.7867762492428412 +3.8195076059682975 +7.2155811987669836 +7.9996383687880979 +1.4194331420346913 +5.4379605334214531 +9.1264770049862243 +3.3061866916766789 +6.8568605669494502 +8.6994116720316867 +5.5741140567535492 +1.9343127440130417 +4.0049586966417436 +4.5738905444674813 +3.1187415367908216 +11.062001499918601 +5.1854937685941174 +3.8805955139407295 +23.852905932698121 +24.981586124801638 +1.5469689252855297 +6.8254676632107998 +5.6555081858176592 +5.8339904475731963 +6.4796910238758709 +6.7951454550020216 +2.6473872139823271 +-0.43352455089181774 +8.8763625061529154 +2.5350986976871219 +4.4633344178847807 +4.5220260890244752 +1.4926764397638479 +5.1034760355717097 +6.8901138133745974 +7.8199268733038423 +8.7138239703250235 +2.6801444401256411 +5.9046429046615856 +9.5437796258904228 +5.1355927320676038 +1.7095032956827083 +2.2357939008751018 +7.2294340112138293 +4.9815151758168739 +7.9889467149897087 +6.6338213605497742 +5.4885912544302542 +2.9202402554073252 +4.4072350093281401 +5.1303353485345298 +3.655724563562913 +1.9223435112534411 +4.3610368948985716 +6.385116670317645 +4.358745518408611 +3.3470301628150381 +4.9350481283780745 +4.413071693859294 +9.0878929842728837 +10.911970326736949 +5.7229097902160291 +2.7777103439428394 +4.4989089191969356 +1.1432538347671937 +5.4409663440498193 +8.841607371017119 +4.7590858725552181 +4.0395620303920801 +0.089114413333007292 +15.505552693106253 +6.5059205561127893 +3.5649727814012202 +14.801918279531961 +6.8326982703151842 +6.5640781242873629 +5.7654426433220465 +8.1314842460804968 +2.8448271970904493 +7.7142421016393499 +1.9451140785478316 +2.0234807044519201 +11.186028517021427 +3.1053245144105901 +6.7246136136830295 +4.2134300816685055 +1.3815240922223921 +5.1574667778505194 +0.39101296510031602 +2.5678649554272397 +-1.8955934144638533 +23.690327921945325 +2.0437392591280954 +5.7717833770859528 +3.0585653665640535 +1.0708400822767388 +3.2284121454330013 +2.2126020778132336 +5.378604867259325 +8.1993898110817298 +6.3042327169499686 +6.1824978363327681 +4.8840508006533163 +4.4171503350772312 +19.65300262730878 +3.8334728223162102 +2.2641328856425318 +3.5216671372452737 +17.613234891034551 +1.3587466096556966 +4.6657248440780315 +13.30765859648514 +3.1774088014691131 +3.5284648544309469 +3.1132873981768867 +45.79076235097034 +6.3798663992742952 +5.3531737168568938 +4.2352009229237133 +3.7605908626186491 +5.4151085258570184 +0.11764487319481276 +9.1549107439741775 +3.6429380162404001 +5.8769369073680391 +12.773419439652827 +3.32762834759518 +8.0712205240340804 +14.835097976323794 +5.1265625799865759 +17.65961223040479 +0.93166500962590959 +4.1683431832491777 +5.8821942629657116 +5.2336349203061303 +6.6774201150730761 +11.377631760988955 +3.8880370566544791 +1.1342152196708142 +-3.1793288064589404 +9.721008261260593 +7.4097508885703007 +3.0955235416516373 +2.5356962094985924 +4.2477946412873777 +2.1268298900426714 +5.5626522154918021 +2.5225752936904797 +20.927400236566115 +12.271751497446658 +19.583557094398046 +2.3373452804020864 +19.330388047399524 +7.7871597408336175 +8.4022545924532182 +13.442690470558119 +42.859353241280417 +1.4779608881234303 +5.0457116403433204 +4.7771584184936842 +1.5762824653305287 +-1.7496175407186314 +6.8660613568548357 +2.8094925023324251 +6.4347234497173815 +8.9225562700918886 +19.716499920616883 +19.457199690650839 +1.8099985775781491 +3.419872330558384 +4.5016369329085997 +6.1383022538255858 +6.1160696627220759 +5.550743264270988 +5.1287828304976326 +5.5632738223452414 +2.8211019728486768 +2.6480469523093859 +4.3666944544310198 +24.824583556624759 +26.512168031618501 +5.1691609354879464 +10.034296512493341 +5.3327665206757686 +6.6790250807164284 +4.961664792713826 +5.6648808869887901 +38.009893153490964 +13.073838437183952 +2.7557210516900525 +2.3070171161578443 +19.453290331975239 +8.9358264015643059 +3.9066859383551673 +2.2745639926702026 +6.8004908007972382 +2.8185384315876867 +5.3642077189430495 +6.2420713955760814 +3.5602045655620849 +5.3512431561731546 +29.143283817364591 +5.2647649166928616 +9.9759135110992645 +7.2839339125752147 +1.4457706090973232 +12.538103346184172 +4.2045727689423522 +4.3164248612879348 +2.5113325333066676 +0.97055117162557991 +8.621655081414529 +3.6270488969278603 +12.46584093837518 +5.269082479744803 +12.09268597321163 +4.5074083514394374 +4.4175305576012356 +5.395014192313937 +3.1593600965555169 +5.653316332596134 +6.1157065601524128 +4.3610829169904264 +4.5624069160019829 +5.8864318724468845 +6.2886857104917482 +12.697083792491739 +6.5931374592287941 +6.2103585651695568 +1.019641658697779 +1.97354668337654 +1.781784621661096 +9.7085722640759968 +8.0759632482407042 +5.8523830832832484 +7.8055196547566794 +7.7913751954615407 +1.0665707523774302 +6.7613739933943684 +3.4487114591703758 +5.2478241108350545 +6.1761414316988663 +2.930053419857451 +6.9300095535791115 +5.0169596521754904 +13.057205409427723 +13.615106395122254 +4.0643908416685619 +4.741096742143597 +2.6534367856845869 +3.2918518341532135 +8.1082814486788735 +10.244782029135266 +3.4052016837830479 +4.0295021044921455 +4.3881185021717855 +0.60554216909560665 +4.2565398969189872 +8.5540235493697026 +9.3866683637642438 +25.444998416454212 +5.4838422670886935 +5.9736419418604356 +2.2964769062692554 +2.3561767590624214 +1.8880383218595114 +8.5304386247660133 +13.915361339649394 +5.5701834194800703 +4.4036834784451138 +6.4320386258880546 +2.2538477657464639 +46.125098249576666 +10.149418010955259 +1.7089758828322203 +2.7893927022862002 +6.4973846943471383 +3.7952031234575685 +3.2183999737671094 +1.1841531241573691 +0.52146131213601166 +4.3821648151862291 +17.545559958247111 +10.319344475133558 +2.3331090433292658 +10.286758032768509 +2.8033009355610012 +2.6249711809373402 +4.7792570366106197 +2.3542964617105966 +6.6169254231930807 +3.0293558323581848 +12.928659888077988 +6.0845722481456974 +29.511362431652373 +9.8297833491257478 +4.9594936588968324 +5.2747167646198996 +14.068468425724561 +4.2388621262360004 +8.0692566878205039 +0.81699132182883716 +10.011165753699483 +9.0023779896171874 +4.3318538213596014 +2.8329641012818243 +16.249696399164435 +4.9886524892218844 +5.8374871490102009 +7.6309994980340932 +3.6051277674390469 +2.9525191792034278 +7.181336297628679 +13.419619387518445 +3.918869971993864 +4.1079668677581154 +5.7984183493447716 +5.5108508959023439 +1.9171311242587663 +9.4069980205589303 +5.6366723739111819 +43.347604368347618 +3.4452293200340947 +7.9920597965029572 +13.231552809399091 +4.2073458409030309 +5.2596160666585163 +14.43437911999662 +1.1392279476448266 diff --git a/test/data/nested/clayton_d20_2level_U.csv b/test/data/nested/clayton_d20_2level_U.csv new file mode 100644 index 00000000..442a2572 --- /dev/null +++ b/test/data/nested/clayton_d20_2level_U.csv @@ -0,0 +1,500 @@ +0.27008575356896153,0.19196739565962162,0.29062851046887789,0.20205871085410804,0.41260383352090452,0.48864170344354729,0.72998251128996161,0.82822410228925047,0.84401835559426441,0.42866136253774195,0.28851223505703727,0.34262371874707648,0.24864595281061577,0.37248141667032769,0.29656058112770067,0.22196675173737115,0.33197641723899329,0.2102176675020625,0.295857693015735,0.17597407710134108 +0.76668663078289712,0.6405948435526041,0.37942738689680683,0.73276070994074105,0.34062931040510425,0.72546737740763267,0.65145702590078591,0.78183897998929963,0.65836166712491107,0.49444121664488966,0.93820029997311627,0.47711346516362335,0.5917192821174222,0.60680809681976744,0.47685757175815519,0.948136967491088,0.97730555254417895,0.90794008132760562,0.90939480279831486,0.85657791124924265 +0.21373916383976738,0.29498676024870429,0.20433906123978787,0.42295369920774523,0.46418540972072886,0.1427712971293553,0.10832581252040657,0.11013254077235664,0.13332668901779426,0.088302945383297221,0.22212370664630482,0.13716027051128649,0.14180832203297034,0.15895669401864426,0.17280636898657165,0.16106695735452933,0.26622934669745318,0.19262711210258107,0.10144307186186047,0.27759124813574543 +0.68659854085771554,0.83645986943397432,0.90545211759510291,0.72437337997152706,0.99471747020277623,0.28911177093966234,0.49076357251284947,0.94698789136810668,0.43960332135797087,0.28977023494394588,0.85490969623606561,0.76020662117385662,0.70287922825101878,0.57101428199612347,0.85960268752770952,0.4683573194327102,0.52570371314935715,0.56779158348404857,0.64172249150808758,0.40582897191222311 +0.59105878818137736,0.7304110627855176,0.23434142820395207,0.4083964515209334,0.49340695521046068,0.14135032407114637,0.16198487037886386,0.25336081247142961,0.33995631885440669,0.21993319126058131,0.34651682181865184,0.32556552409147738,0.31836372870581386,0.23603594880587492,0.1858013889402626,0.3128694445326794,0.34087259949398102,0.43838232405613553,0.34216408580719371,0.41786602620450281 +0.59640639001748363,0.95833728670731932,0.77337377011783148,0.93690024157443641,0.53114236643407808,0.74163295324790557,0.93594185238169714,0.70405729400001471,0.74870208788138415,0.95217472048776941,0.90772281245064312,0.69964572506261047,0.99044153925463385,0.7788094806151884,0.8506159086429711,0.68128090444441802,0.94217465895481223,0.8372572923815601,0.96780692360182896,0.71578400975616363 +0.40511893856084269,0.30462676838158592,0.79522922788854278,0.40077952195047312,0.26195065163339382,0.6206663747098613,0.55706780694653257,0.84404468883894213,0.60291066323060338,0.73265178985128665,0.46742604136432647,0.44377673100878096,0.38523161745539508,0.38785345188135151,0.38961607126715392,0.52564227418715825,0.52595710243331284,0.83171105925967104,0.42978218161606013,0.61389126707529018 +0.14970738732966715,0.27735210897301488,0.14519665582101721,0.32529322988938425,0.19773392138136797,0.55617460947294128,0.69671967572762405,0.53947692777048728,0.99421679438663269,0.83469829388910788,0.61438435744922471,0.44348818543505336,0.95999372506755132,0.52012094113269258,0.43347411891953952,0.89598899544247967,0.90459999874878405,0.83763409241838194,0.76058787401365568,0.93366864726331233 +0.97295483932995031,0.95533295659717432,0.96537113206776315,0.90411699229566544,0.96596643967929718,0.51903981527256271,0.52730179763865104,0.56608234876638786,0.59729854252670256,0.58643076912330627,0.61141454558784447,0.76376790820441187,0.45028859399186794,0.35311733463923739,0.46011628193193643,0.76214837854563899,0.53653691431068073,0.85089846999432517,0.56002016284949474,0.54275979122704343 +0.19366083970581338,0.81367356948082048,0.18770840684419321,0.34641134217798392,0.32381961910508733,0.31052192739342394,0.32514505150795275,0.3953058166375254,0.32110917215357865,0.53244623021152659,0.14983608504250009,0.14715760350841156,0.18836904590507006,0.10691371021818551,0.10992863568146925,0.19418537231830582,0.24374143452982053,0.17909645614174255,0.16772851550154927,0.18486363909259179 +0.1962956888393726,0.10417401780430563,0.16147565792941979,0.19177278063062161,0.11423614693081799,0.2181988453604089,0.26270015062844221,0.16811564903870674,0.18335346996294691,0.38937702972585636,0.10940410773152902,0.07697859600358449,0.062676055403270439,0.094259958186636364,0.10908803155574934,0.10000507787906497,0.19984478309147644,0.31111962616565281,0.069690699755490748,0.40597469023188121 +0.32408849243960597,0.58643314082554421,0.55405523732481954,0.25356742307748842,0.3122807831458202,0.35644442079564947,0.37764899591352941,0.51630588784018594,0.70138057511355234,0.44114998978506392,0.55269717226459769,0.44839745383058577,0.6840281735333017,0.43808639240213926,0.42291615142806305,0.31145556100015759,0.22095506425407663,0.53598455439721104,0.28874930137627752,0.36703294552722837 +0.80498734398547467,0.94421923007362607,0.91301043400017456,0.995,0.99202650418538951,0.75000555023556448,0.73612385124797342,0.85284442911434233,0.58281624870673088,0.8566695009216172,0.88915388014870167,0.78886865165820186,0.74660710605915792,0.70438974651764996,0.64783095150827807,0.91877842362944884,0.98705983945568054,0.88860205150786142,0.9691880427782158,0.90442698663314836 +0.63135790923282353,0.33621752351532397,0.47455755511225978,0.2503215625169401,0.40632715190899993,0.33153738026903817,0.23788301880046939,0.20867176002748281,0.25451226596106397,0.20940069651542292,0.43288732244049005,0.60600219641123743,0.41336437934636672,0.45320068386481388,0.39134384600427202,0.57683473632860272,0.49699914956670249,0.65110327240109866,0.68339065081667838,0.514677996550571 +0.31076191572617384,0.72493870387147219,0.2856208821939652,0.6442348335697573,0.41301382875174308,0.16744630315204434,0.31183393963309275,0.19777916061527273,0.21174977257161906,0.39887420466438628,0.74347005048442871,0.29340441241038578,0.35764019045580192,0.90234788535152299,0.44751677519005872,0.36735647330733989,0.45725044453047853,0.26902976514090765,0.30307079783871615,0.26068392212966857 +0.6985723893202761,0.69644079638810896,0.67247814894446234,0.81695680841541918,0.89764215192743479,0.51172004142798788,0.90343063644739097,0.54970531479718687,0.55428738089340179,0.78187396045566471,0.95811852433863631,0.9448766343736591,0.94671069326712598,0.97746203856358915,0.995,0.68542901064485007,0.92661057513353562,0.95521363758506217,0.96745850154753188,0.71602642048769616 +0.37093085119349251,0.39688648074685745,0.29132471892825257,0.24507552229798837,0.22706617927212094,0.43843946819214819,0.5514724433021333,0.4217725013165014,0.72690734874770602,0.75442006445468091,0.30402966876174292,0.23565988356481718,0.32120883307979819,0.29138397440803943,0.26976252223402397,0.19010368155865565,0.19736698678652514,0.24074456226081375,0.17477574158919151,0.26058980141563687 +0.15382433440009385,0.19196830972744072,0.27406328480693415,0.21552868635679631,0.20755192317025556,0.70612672147073186,0.38418658380450049,0.42075498493593483,0.71384414689972553,0.40773694129569277,0.15427115271902681,0.17670332245969841,0.14338556150438697,0.11667168104794819,0.1608068985833708,0.17753886109562086,0.18410904014638818,0.12531734885413623,0.12397592714914538,0.11582425885148302 +0.38030656517750272,0.2743418682198549,0.31598186455094379,0.21052195581034747,0.52737906025580072,0.11141862618465771,0.13594741256236542,0.13807909277365835,0.10946837291627219,0.11032089393902415,0.52539831661924374,0.5774762869760558,0.51403646430213357,0.60192878641741898,0.57449462401953466,0.18977501978349515,0.36712000765957675,0.34901512377872734,0.39852767762434932,0.22488029943949353 +0.47625501225775302,0.70834162164245729,0.51279693766606005,0.46494646091448927,0.80059778097888024,0.61143366279330247,0.53300541517949473,0.54487574441333819,0.51802980580923319,0.43395374082064464,0.97518847191823033,0.81858610059110992,0.90361288438322418,0.88359239779813381,0.89435538746166121,0.6785312039426874,0.62523176595177155,0.84755911377651361,0.86289666953147226,0.67978598288127468 +0.23710827747298494,0.35616510581815786,0.31272830517775174,0.45404205887401572,0.46098079317998042,0.43958986329973343,0.47239083571803486,0.72210110707851527,0.63591201382085571,0.3757514355787947,0.18226095005739498,0.30587119461429918,0.24214628584692274,0.36236964938451793,0.33870491647714779,0.56844040035766974,0.4245107760196542,0.25538601884929801,0.55423080808048653,0.21063632515356931 +0.45858360902967676,0.62969829769101138,0.62867522673787302,0.37086053505484401,0.59675158876948975,0.62428963959139105,0.52164033946499633,0.64879092621290657,0.61307761983790121,0.97848552632536179,0.96733688154493414,0.75528938036877247,0.60417378686502232,0.71805988892474104,0.6081957189233208,0.39818324459752991,0.48097169493531244,0.35935403454384429,0.62206487301370539,0.55964311223583774 +0.26406122048673475,0.49874047621023454,0.53204079474044841,0.55027345902704106,0.41535764641786016,0.29612995310596346,0.23380657774854702,0.26809193669577919,0.494911255535671,0.18543746863382846,0.41422602132203179,0.33179682143202999,0.28678114623774581,0.37781194978584659,0.25961564702365908,0.35957977413217018,0.37576412798279557,0.33082758533088097,0.42977750242352486,0.2912134607076397 +0.21631463957705679,0.29361755008256091,0.2934601192206428,0.38717119561639191,0.24564942616532734,0.29268009635304515,0.32778638571088115,0.2530024526074473,0.32783688854559773,0.58566756962753752,0.84780677073243227,0.6087947157987823,0.76004287774931267,0.62147408928380243,0.54876966383345416,0.83467470488270179,0.37678512911317974,0.26362431419354815,0.31213913126452542,0.44561242651110389 +0.75966828218729499,0.41796584896054645,0.85624872056039247,0.63844088315600123,0.59703500335025128,0.78773832736108951,0.51105648505516077,0.63328809147871612,0.4201142555681775,0.49460107675778275,0.93731238161795893,0.62551779646706629,0.63903546195349181,0.78638970763321847,0.95932336352625369,0.67774123497750194,0.71950396385519255,0.41750865219375083,0.436796973694979,0.4667850716190754 +0.81849506659540716,0.76807227518348031,0.6711457571913646,0.93011527245221748,0.90897312654138918,0.9886042253469739,0.96230710738458869,0.94327768467495809,0.95436393658517626,0.97863887909754932,0.9814499624789802,0.99396315958683878,0.94840189084463389,0.82569768526960596,0.96272826058447414,0.85710613891912946,0.95243432675898265,0.63253863484904771,0.91734886328398246,0.79570185392247295 +0.26791808312594706,0.40941711440070561,0.1910833404164318,0.32870524008116742,0.2248667627825077,0.11881095704468782,0.051589867533136907,0.039279865067053971,0.051392216521115044,0.039372651338913836,0.053757319504126995,0.050306182880541388,0.061403328104999828,0.10701418140688716,0.048536369667940719,0.090276516921064198,0.047248292908964547,0.052884494424377836,0.065392263571439901,0.051648391431817396 +0.021034377411159474,0.025816155058561593,0.022802806304220165,0.043041508397949194,0.025350565943404058,0.01454081841681882,0.0087980551363580801,0.020905028066783113,0.021809259044010175,0.01024779779302182,0.01231720738468985,0.011964592652334516,0.016161498592066205,0.01615444279055283,0.016944516595704746,0.021648557745302392,0.01585774465256384,0.031794464632087453,0.017971253872043923,0.01809330133375114 +0.71347322955764048,0.59990896374944658,0.61470214296426207,0.54031321018062017,0.45173364850632391,0.82136617172952298,0.83653158811231842,0.90577563517626647,0.88216278390938363,0.86677887197555437,0.74923870921987545,0.58835312697381248,0.77286681327117002,0.89862799341633104,0.74708782645456639,0.9392557396036898,0.86363103957265586,0.85640163117620571,0.55387054849352269,0.97256581976314871 +0.028246344621986892,0.036859218304299723,0.039193722794468283,0.033779558343403605,0.034246138135511459,0.056983167036552991,0.20097092428511415,0.071619067683616866,0.072575152616291216,0.07365118675303084,0.054257710325472275,0.047975744058780329,0.066728557644612635,0.14758670404142457,0.10419186603559437,0.032055932185100444,0.03808552269419202,0.041628309294433979,0.036109400333915902,0.045524483183432045 +0.085161548072470838,0.10113187298541428,0.09578846849265818,0.3073444480109685,0.08385771715386181,0.050709974543199046,0.045287281203699209,0.07474342214046141,0.082184531643061429,0.039742049480263428,0.05265452650164297,0.044461115149143735,0.03964557983929852,0.059584689411639129,0.050187983446431002,0.12166810196836605,0.15265528764423075,0.15280705022043317,0.1420799291470444,0.10651026810210722 +0.38833696105997417,0.31043430453000281,0.49259416352371899,0.42802643549369657,0.6101941984322784,0.78574042482364437,0.90982854512105682,0.79572453527208398,0.42750024456515179,0.47276846164643699,0.30513284068494673,0.24069289908504443,0.29117969903193203,0.39232121945881354,0.55393587538679123,0.35905663562256651,0.3640965487331127,0.30843125382183029,0.5429339755083582,0.45605972385066357 +0.017244219364496886,0.05238117325693474,0.018897469560658572,0.038839739245569174,0.023236646277473304,0.013677758160195371,0.013542444281151915,0.034056828007300435,0.016496457168806735,0.016244121837938663,0.015742526074403473,0.021799117700254205,0.02788081530960269,0.0093998281882638861,0.012585108307699542,0.020192561333951625,0.026495669812525983,0.0322136462846212,0.019476208883751338,0.027676405129875226 +0.52869061102424719,0.4248765176852069,0.38562268500618169,0.55607449793318919,0.50481943979900956,0.95226088958745536,0.83115050751654862,0.78910927103299211,0.9037395643874262,0.83043460236504152,0.30334775697402006,0.81634385742864157,0.34572412254503071,0.35379278283845955,0.4973719777566859,0.46329379367021167,0.42742138351798481,0.3510886648106421,0.72130303005138274,0.30685530841304487 +0.24965930346254736,0.24297215998985935,0.14167162025646743,0.16001020524740592,0.18509425650523717,0.18831037134567513,0.27633806134057332,0.35436287974162711,0.41457499302411682,0.28341490194501051,0.18656745669492553,0.091024843646052525,0.11212590137775227,0.13738704176459213,0.12490218880092378,0.18647151423249542,0.17166326683602146,0.19368101850529301,0.27481949270931749,0.22475856577495035 +0.25971460969794141,0.56288585691209403,0.39584340595383427,0.3676363686404433,0.34847996286210858,0.29190474434388003,0.31627670142580738,0.27357952754105941,0.29918629405366387,0.35259080054664632,0.62575283828320893,0.60997155044871998,0.39752803458124464,0.54362667736617565,0.51918659686596758,0.29640414433055168,0.34764030902286103,0.28097546292706926,0.1833772021985072,0.26115662543946544 +0.65752381823567463,0.995,0.86659955886977202,0.55174169875818202,0.98497673139620723,0.85618066425502448,0.68350408930265794,0.68486125330984315,0.82375292277805989,0.76945602736297247,0.73624856384826287,0.82867052005754716,0.82253991435891616,0.77101096069442565,0.76997033272334603,0.79286691170946921,0.58780999845350967,0.97279442414032136,0.5184556168238148,0.63119791670795389 +0.19308398598491275,0.15864058654361488,0.1505393002118276,0.14058557975054781,0.10022451022717842,0.34721156499199302,0.22613595882778928,0.25590934872836879,0.29221029881224381,0.26478699562701336,0.15301324548843712,0.24501302959859048,0.25347069560255225,0.26633584529555293,0.25528832116840544,0.099577381311368174,0.090522679822643212,0.053635777601333159,0.054480959088607228,0.11521730422163842 +0.61927938673649852,0.94391244348130887,0.42567856690328548,0.41315970126918189,0.37319841776381407,0.46269373030162886,0.42558200403413771,0.31747449352105478,0.63130331010765062,0.4450872893099912,0.58376112214236298,0.89752379261780713,0.69198486979572582,0.83633257536703964,0.77430623773273599,0.72412541128831898,0.5602354721376589,0.44705979176669514,0.51256554738221849,0.43546179582705496 +0.98285243374580833,0.92673010774592834,0.96911389331903519,0.87312305275162583,0.97622144877283357,0.64393203924000531,0.74769948611684389,0.66980774024316758,0.54191213342113442,0.87062568681208563,0.97355480785321236,0.78227714739974241,0.77417881498623631,0.995,0.83044025976813873,0.78138554805482696,0.7315754338083772,0.82220434579879287,0.95761510207221512,0.71316299079617607 +0.85185147004256057,0.68608678224672992,0.74632708314717977,0.4528811376609721,0.74321310949516872,0.69712943629127544,0.51154267444051171,0.56743503201977175,0.5122501153428709,0.36753390911258704,0.85033698719655204,0.45512349196034957,0.5353581363095391,0.73541366625796956,0.59531146014535563,0.458352541698964,0.50210999884718577,0.60597694629775201,0.35254541683980262,0.44820443074544364 +0.62956399110337191,0.66294531611379248,0.8084351502331657,0.79499965666731753,0.68020035104359244,0.57690103942655158,0.89846881992730199,0.58579886418822336,0.43345127114576926,0.79589817309764688,0.57799855077125062,0.61712190950583201,0.58833239500077994,0.56426013110346895,0.50508171007472491,0.54898207924712084,0.76049706120327298,0.61124356770951127,0.8312903325893144,0.76918862166240609 +0.23827956179401158,0.28727721268773676,0.24920222751646595,0.35394282564456164,0.40777841478017596,0.24474189792191284,0.15998592741324877,0.29835720996582576,0.59386290465704183,0.258758688856988,0.28190682147052593,0.1653312817837688,0.2476687467303326,0.21476699275887698,0.46746512854699984,0.25367190466585876,0.19250998458659382,0.20759736474141802,0.23285657917348257,0.27348520592704967 +0.21359639596821747,0.17828033685550812,0.33577277973761738,0.33461996525295185,0.32846307884946196,0.18844221235540051,0.22397899851826564,0.19820183736916611,0.43049513615996043,0.5707140529685969,0.28091950377115288,0.25661693944392228,0.47246803322556974,0.36760568666743443,0.51101390439588568,0.19804965180951614,0.20487466641814947,0.27614310231386302,0.27793350698351554,0.23895873995595068 +0.92615505675661636,0.85268205032290945,0.97011272972539708,0.96988353767329427,0.80907183027382357,0.63156117016878333,0.64060881568355266,0.7574493143767177,0.72807581111048214,0.61793747492178563,0.85555153718662047,0.92756859955805115,0.74371741206116959,0.85728346099119224,0.65612836171446431,0.67935360610503037,0.86449972617537119,0.83413082175084574,0.69357777322582914,0.79968225229450351 +0.19783752110693234,0.2879089443856237,0.15215249195860031,0.19983763588282633,0.22555434735834698,0.37925142109203047,0.24092801226121632,0.49371817388631223,0.25111934620227999,0.21949516265479876,0.66309623620385294,0.74917025478249011,0.60543526967092109,0.45305103868044772,0.69338174792605578,0.27767049091317475,0.29088226050552507,0.32976315709763382,0.3639623705045264,0.41845626953211063 +0.013639491112465681,0.0085472981628631484,0.013228487016673439,0.011784625317853658,0.012725097602100492,0.027522840962036811,0.029315685733260387,0.025194397150979698,0.036027930582970727,0.022785894898435927,0.0082181062451959705,0.0067705970885607288,0.0067103755055913095,0.009410217989234677,0.0082528977919207481,0.0093392533249025082,0.0083479744048288607,0.008140964671200835,0.010333848683067354,0.0085591286636381939 +0.82060179533188637,0.94611830664133967,0.81784199054814133,0.68347456504324322,0.89886829994743644,0.86170546131661752,0.7627643620789254,0.79343374302117897,0.75332358448472547,0.78675508205955136,0.80378548656249971,0.9342906125628877,0.96300242846894568,0.84276987282682203,0.70700784141368744,0.88681335523838634,0.90891817900631,0.84982112228180673,0.89698426182993496,0.9135345981128008 +0.61507233347784063,0.79042103832553778,0.75144561378376906,0.87718723545064903,0.85273687245824792,0.30989647728014524,0.39180198998339233,0.39981030688464592,0.28453773699633161,0.40591648207265624,0.48913527880171764,0.86899297422360711,0.53131040828874221,0.4750119901468528,0.37794004294050998,0.76121197426234655,0.72635564596947499,0.98638091075359025,0.91788117162788863,0.64653665752679812 +0.995,0.8573118488230711,0.84952191237018548,0.87571564926070833,0.67655802194823211,0.6338449274402802,0.70468327883854498,0.58484904315925257,0.67667900507468914,0.63290640900313133,0.91866897673177073,0.65569645947056465,0.7970956696447129,0.70436970038518909,0.92095777703204829,0.75068320428171997,0.61688285053362546,0.88353400878567212,0.65267922767281561,0.52633149516825506 +0.40724069268264396,0.35263202275247463,0.33913256106975997,0.3168308471956372,0.39245430793615521,0.43189372505757828,0.29960283125014397,0.29008815671097427,0.30892680901400854,0.29771247767684539,0.31600986537166098,0.42784850690358389,0.39437877602907501,0.41881177310057693,0.28850756639835673,0.39931028631740911,0.56867082929063539,0.52978060636404567,0.82959255335263238,0.55928675903230241 +0.1377728882895527,0.2221076764366551,0.13978723816768623,0.18090628790860563,0.26024624430501636,0.23840791687630092,0.1838367695938016,0.14950235366730172,0.22692064890572347,0.29930489972809859,0.19063915445845908,0.17702805109239947,0.12565044119135271,0.24656596794552565,0.32431354135291435,0.18026904984319786,0.14597754687690154,0.30134755971223109,0.16800914063454203,0.28276308215979973 +0.33170301885717651,0.25859730554938432,0.86044811730540638,0.56773326071372154,0.46139000969807292,0.54833975490226161,0.73312738685001089,0.38040308414903656,0.63227193166738449,0.46770523199781772,0.7315265402667368,0.47175125962139819,0.62402426354765961,0.75794800374617066,0.47867626802658236,0.67968369601561629,0.58800036890203045,0.69911391028603287,0.44244958557681652,0.57499344819311327 +0.96164563729019448,0.96928463559720135,0.97038445866690137,0.93453361157913228,0.90535048526808726,0.82546645057589307,0.86243974342645235,0.63970431292614283,0.65789398593670712,0.83414892688254694,0.89528459078653067,0.88373822421899306,0.82999804523482112,0.93379878282295681,0.90858800331230438,0.87550909012453548,0.83728077648051735,0.81388645165191731,0.77651571523245999,0.78392145853596118 +0.13678179887592759,0.14298775854525239,0.15015091147242468,0.095441812051049013,0.11876199515536366,0.17298819473396854,0.16996015273505399,0.21034965560401123,0.19434793649716189,0.2598494510498649,0.31912600241476757,0.17026256708864529,0.2031657641019913,0.28650796342167623,0.24801041097611995,0.14905609609603951,0.10715551681939998,0.12075492621398824,0.13913383773920909,0.094711884236718738 +0.66051215292099774,0.75917055199568828,0.9740515644501988,0.7155232382001806,0.98882997297212949,0.71310641609087844,0.35540868568444073,0.5380451912095926,0.59652412233786811,0.48485268754791394,0.3917209849070265,0.74756798779243161,0.61928279112502993,0.32520686906353902,0.71144423532682821,0.89500422969796023,0.49443046535826712,0.72291492735758789,0.5588485350044281,0.69994270552201676 +0.1097434823474146,0.098767126785526474,0.1186845680373781,0.086918701242310353,0.12126776663377827,0.10847357622923896,0.19358706031440553,0.25927487870464166,0.15318633883208607,0.20472195910333899,0.23008188519910711,0.21473847168234098,0.26577933245159613,0.21410345764987529,0.18502171424659861,0.17109917810798816,0.28173287809113895,0.18800692954835097,0.18007402986946966,0.16784762021055497 +0.93488267736025621,0.91840963902619577,0.8528386590116015,0.82367362505309216,0.95061203984235065,0.80903697344287295,0.61878041036622466,0.57666540021279122,0.8813735430707561,0.45613519932194807,0.88559425371280964,0.96081855091187551,0.74408584198695682,0.6605403914197493,0.995,0.5214569470844036,0.67965532207850865,0.57966246524633736,0.65588253809144781,0.66700597545967599 +0.41032980140207626,0.45394211689252639,0.69386126624356526,0.76316061487841524,0.46960582468746176,0.60991188443691724,0.94558381279824399,0.76550079771290358,0.64982578612342246,0.40408088607504511,0.76478118463977507,0.89091532066597401,0.84048805638694069,0.97724670540341585,0.9391532391193308,0.98569813969288589,0.87785648273841155,0.84794453335879794,0.71892374460253494,0.78960296095494775 +0.60865158041858036,0.39207718767364985,0.37010553851156164,0.57256342789869052,0.47621124564542183,0.63775286977829238,0.75826445208286697,0.82385418329404292,0.7100575080823236,0.68419790215165821,0.52455812143983904,0.83420745770652849,0.87786322235190817,0.72082375337309035,0.48731334944119681,0.54603708379282978,0.67383299217527648,0.45188985102323875,0.54662818441134176,0.57262367553965687 +0.52770295004844792,0.5512406767725514,0.46045075598735735,0.56150842743003548,0.67433623635746864,0.99289526999633071,0.94056295057880113,0.92777458577312188,0.89237826157745559,0.84330258324950369,0.39250202052760369,0.41180146284149166,0.64498871038890471,0.44599523969096011,0.44441272115014491,0.94492068818001651,0.95243788053025435,0.995,0.98477850973542014,0.83930912893951104 +0.87410137452558345,0.72805395784377958,0.89169700122787332,0.78280912113787815,0.72412156236664438,0.65991060470390228,0.690196423467766,0.81434110301233209,0.59319953238449485,0.56112290773485041,0.59602678086452332,0.91875770506472854,0.59003649835273397,0.48649055131179947,0.48147231262392454,0.81513338839481075,0.66047166103109778,0.89334458601389377,0.75377763963857436,0.85619545904833072 +0.1868044664561952,0.25565060182345062,0.28343838190777942,0.20020298182795815,0.4067304125034884,0.16669189453703911,0.19241093255795982,0.1373519265824083,0.15461155262008672,0.24582659725909206,0.46770709809228928,0.45758800943652478,0.59854263236598371,0.59198629010981807,0.53365252336658164,0.24404659002847107,0.29583293603909305,0.28258404572593127,0.28003532486537247,0.42260911646403237 +0.17431363459549362,0.20194298849927855,0.23683019456310847,0.17637138175535705,0.17672478620757071,0.32339593965954311,0.23159152790252385,0.45304348951571938,0.37840534319490038,0.33513113504902958,0.35584838181146594,0.42445427322153634,0.49223870210823417,0.50661220759839287,0.37476902279206281,0.17579995596607753,0.089613644157713307,0.11191874857667775,0.1662534907545293,0.12197630085700277 +0.8472959663050964,0.88851250560635109,0.93466474952918588,0.95465049217650177,0.82682352207298015,0.74809456656068019,0.97683933782661037,0.82963366088534374,0.86997766916069907,0.90013990922568943,0.69350318083683649,0.74944631444602661,0.94583386366711619,0.84232439686553207,0.85291247514121893,0.76606121255046777,0.81114796806500533,0.6659546613145243,0.92849583880049891,0.94594037404729758 +0.54637755758137552,0.35414441942549801,0.42027502784686621,0.62821921625046973,0.37295013383719705,0.94615165203901408,0.66979726600948752,0.49480985510652337,0.8621398316932255,0.8632185850557702,0.94818206047751774,0.79961153941506047,0.89694449166446777,0.87368212299588266,0.92946138332604478,0.53990902497125004,0.74496141434186958,0.52254992567302894,0.93547344547309785,0.56660745485860775 +0.41382388469253439,0.71387738341241835,0.76482842983901944,0.52949878081337121,0.62884717293889836,0.29440101618339259,0.26119765444201637,0.69942571248281216,0.30735990135641839,0.25364958443967583,0.33587829179113643,0.54600635993751556,0.42787703915423986,0.39840636569462168,0.43582284210865468,0.68487966018168234,0.50052334923436959,0.34105744606433969,0.64548992574255259,0.62045879416348748 +0.21010874884633865,0.16675511665531154,0.21119492881111662,0.38033042742026474,0.27902096682475735,0.1771377721273886,0.13468649889087744,0.10791831774984911,0.18486508900052606,0.28571052172863659,0.17369847881505346,0.21168075404034234,0.12378038317114008,0.10648219706975116,0.070724894088432189,0.39438539448528193,0.15909293291954349,0.11148596578275545,0.13017080054071348,0.20521317571414022 +0.67598616043288917,0.96930424585789587,0.52041837689616699,0.9534462560263739,0.61360586342360846,0.40273786160831215,0.5045092642580824,0.37757984912233672,0.52366372118479154,0.41502372501140161,0.7197320966345816,0.95970072363986292,0.64344254968242054,0.56383786400097358,0.67845021579137421,0.86876979426213974,0.9388131356028927,0.45080979248625302,0.4745310703777243,0.39191526259614695 +0.16161374161370032,0.044037354890963144,0.082761368156756679,0.045961965024836453,0.059568605329697349,0.027085468620993428,0.040392301491051032,0.034704619800332591,0.026260469427535987,0.057845997018040322,0.072098907203525825,0.033217537094439878,0.058165443716734502,0.027426625731726953,0.03591694764156346,0.021392760421376004,0.036555583679456272,0.034121659988101155,0.03510468886346594,0.035796314446507473 +0.41463650673687152,0.38530251957378475,0.5648156779955692,0.38277222614216388,0.51510810341969759,0.74526293848678626,0.84647323288185994,0.73630735220475685,0.9002696757120755,0.9770578330699824,0.9720040826154247,0.88791664464143405,0.68114415948799345,0.91402870367506051,0.995,0.96496170066634768,0.77734324380027109,0.50887561630923339,0.66143550817244823,0.63101587246425639 +0.876850783154413,0.47216619868741388,0.87351253135266405,0.42093581037695893,0.83056128700809384,0.83552037749467789,0.75459490307151689,0.62641421216656457,0.83863110890199721,0.98874396510850682,0.6167502848200912,0.72045776553915297,0.53325780556146796,0.55922022045965747,0.74559559871664771,0.59126311722730807,0.87557871994642156,0.59746458372988298,0.94475813189046642,0.59007950861090097 +0.67511910694498356,0.63339590302571147,0.33340717747710813,0.34330830490787789,0.31361197210702818,0.94093480650380756,0.84166716894458304,0.64726433054339982,0.7460497191834552,0.79771420324203968,0.44650922330740433,0.49881467572607308,0.45887350356943485,0.34299743542817679,0.56066150348160504,0.40590034319500684,0.48215260610614646,0.66752584500181411,0.40183384789144538,0.55643351436171073 +0.087596103813359,0.10147954219546818,0.077100040081012927,0.12458645851520657,0.10836818901172612,0.10512997401712769,0.20669058832429077,0.13748351204180848,0.1501268902235727,0.15017121200452352,0.053309620349677359,0.07707378454259653,0.042262469460054339,0.05759534074409077,0.057257560101090822,0.052539587877618824,0.081891597178425937,0.082659193096869962,0.15599618888940309,0.058699400047777898 +0.90024655491952421,0.66428290909315069,0.36709565770656188,0.60859842100112105,0.69573897848648725,0.41517464108645835,0.5761106721132434,0.32248251674548134,0.37129915354948023,0.35755553274597918,0.72170450555901755,0.55942301190586219,0.56366123761484177,0.38168549125439294,0.60137509351691087,0.67309277729866801,0.71664887037954772,0.54340057433610833,0.38114060439875347,0.53224942010766607 +0.9687570549047021,0.89261779817448994,0.83530131385039164,0.96081223298533169,0.97185769388172583,0.69757310326040867,0.45162693095337142,0.38204208145722029,0.69080767383123931,0.43382586354444308,0.65770800112880279,0.93370413315962031,0.84516096309674049,0.951113041258423,0.84596044667726955,0.78085101414417901,0.807186806647607,0.85412501906958604,0.60446188714352622,0.64140232059538371 +0.63327489728293884,0.5426373160390594,0.69457968567730222,0.45171909482015149,0.58054637625354877,0.26301451085054872,0.23686533624359668,0.46105327164873461,0.48623011120221371,0.22726145518595589,0.35497972180747733,0.27511014342051771,0.34522895008351284,0.19955477392713375,0.3355651620706751,0.60505108268767649,0.41482865225387117,0.53886377815577391,0.41792079220227346,0.45505132375148066 +0.2339631454049789,0.18019695842460254,0.34387065049958576,0.23233442118284478,0.19805865135854867,0.2633357141082564,0.25150947690830061,0.21892837800321754,0.26168771629231852,0.18354108968239283,0.69238464216062845,0.14468983891306297,0.29360977703468477,0.17211915884762072,0.21357320404954508,0.47522602317648088,0.3193887042347095,0.44537947331050354,0.23737873778943722,0.2940881187457528 +0.53776610279485815,0.35096626965542493,0.48312845199200977,0.48145340601958675,0.4350380956183309,0.34066818011598393,0.32311426054881309,0.37020980494496597,0.41668805267809689,0.75744221972689363,0.87546244436166798,0.81496925525851427,0.66402678754829314,0.65544304957211585,0.89477826103098912,0.75713902795354548,0.44084183827716722,0.54747939543044088,0.45936856088938882,0.5081898070223495 +0.10597881294061123,0.072859938967413052,0.091736581718597998,0.092437723275221942,0.11265244941107558,0.10224191047909974,0.10416536521558285,0.11303936216194264,0.14075185808690391,0.10322641872507246,0.093054752217319042,0.11141732751683105,0.10984410004411863,0.11752178511607,0.12959666775798648,0.23717740712880198,0.17038667314592185,0.22859634380065297,0.26679257141405749,0.21872498500004853 +0.05111697682981798,0.045224802108064142,0.061872674872245764,0.050722527933603621,0.040076095595015411,0.14728551307853105,0.11015544421624299,0.062125756162900572,0.12260999096841999,0.078356527908522142,0.085690727747300591,0.089310542821151515,0.058009326916226678,0.049455277744810261,0.098749189245544503,0.14014404074506384,0.20497076176404611,0.12476481176638318,0.25278379034995052,0.13371116328439561 +0.32448635462657688,0.17201258580447237,0.19280461503764668,0.21691327978933586,0.24800408248217776,0.22739797144534149,0.18175034777200005,0.24023607232601221,0.22123797684526317,0.53135966468342521,0.30541668632256519,0.26601800247541429,0.27495177444670971,0.38641194758760616,0.47111019219254036,0.30446943135048438,0.13077143700481625,0.31248858809588925,0.2735432619953192,0.13152578404771359 +0.99288236800473517,0.69127576889852116,0.79786879571607572,0.56399192788014674,0.65117878427123044,0.81195938520248179,0.66141201711572861,0.80746520092753871,0.87349972103853601,0.59549296577012045,0.89797873474688572,0.8769619577676,0.89191474320892905,0.8999916056766244,0.97945166996947064,0.81889383911613967,0.97691462053017997,0.87759284981633034,0.96883774008538615,0.8461894515237296 +0.83411069726666154,0.95225647322759122,0.52940900046798922,0.76224279741619516,0.78502475760158796,0.62396180505745591,0.73566161294386578,0.61302426585333203,0.37598828588114674,0.31889589955074887,0.28753431914502831,0.26809074614348805,0.28485264685071171,0.26723901835128477,0.6613983562371909,0.55485774189409964,0.54676638361920071,0.56425633246466533,0.86003479548605888,0.995 +0.36220366782661773,0.32071240188047273,0.43498076461037138,0.24613591538434484,0.34053103261034767,0.23909459771454142,0.10960779250456811,0.19112949129960716,0.20899203892934523,0.26120689532203989,0.80001050410849051,0.23626373989704544,0.27494684483833065,0.26575239570438597,0.34546238279496599,0.23317670582068717,0.48963963836303143,0.41622095481704718,0.29391958345991609,0.34380115780798992 +0.01833888153793263,0.016750197748219311,0.017027583558531151,0.014904797867567442,0.019732087954619938,0.015304842563395286,0.011242727193818773,0.013104509190363359,0.012963007249070764,0.012198590368177678,0.058471729588367188,0.044649251116457594,0.060572742789140925,0.044411076794796348,0.042122996196689633,0.043086601323777549,0.036898907156592303,0.041154127250570903,0.02621952793524111,0.042998799113132244 +0.995,0.95054752215537042,0.97264526815529462,0.89227231143250441,0.86007061737192714,0.96913846800883674,0.97675863202830404,0.76478866425184677,0.82810761531745891,0.93103447866062294,0.9544949987979009,0.99215714697032498,0.93134066281869154,0.88023804007521744,0.94528380630001874,0.98118469761016625,0.9608677553381777,0.93782965412490193,0.92930503506140161,0.63158866522956747 +0.012463483216003674,0.0060912537349115401,0.010490860257472765,0.010071846629838789,0.010623240354117651,0.031413539008939499,0.025620550604630598,0.05832339593352364,0.033354017047727717,0.03832038645930385,0.0050000000000000001,0.0050000000000000001,0.006537111077877353,0.0050000000000000001,0.0059049602043705299,0.0055040887826103991,0.0050000000000000001,0.0080255801061553285,0.0050000000000000001,0.007158137788816076 +0.72009606257046654,0.45858312146691238,0.42902877762150804,0.71751534400880146,0.3764890490241421,0.7236929174752319,0.71021347918302591,0.54453312737937554,0.41935746971622739,0.70091571942591713,0.87333548887884105,0.96607465143461868,0.74893415242940542,0.62967361436653513,0.95823846130822932,0.43239837614817128,0.42510872622071899,0.39229802915145817,0.36106766750563724,0.447374881186761 +0.13390808873398993,0.187400382696356,0.18002073648375028,0.10428579182736535,0.10309934063662846,0.5156577977959097,0.30764170751841591,0.29886943599682664,0.75020374891563812,0.55781812585364532,0.19873668950693668,0.69311252327813988,0.27122429913624635,0.20979785898258071,0.19967562514275614,0.24327833417036759,0.34492827180366709,0.32900041462007107,0.37533670432621419,0.4272191597065832 +0.64324214233685739,0.56054501410943969,0.74506538014042978,0.65429548866331599,0.50578814967147923,0.74450393545491822,0.95448996397844554,0.7373179615997939,0.98141232315417604,0.83992559337587647,0.69463439695395279,0.71462736204516597,0.94405773343516519,0.82372696902897369,0.73302540750179046,0.81630016666486327,0.43721159050186614,0.52061230999245633,0.80766497335446108,0.4583680385782225 +0.23391940961952024,0.2258537654142295,0.19830480501997022,0.19389794217569123,0.18248928103049034,0.45004611651972631,0.54449076684330655,0.26838879086611833,0.32070673617131162,0.48234501167038646,0.15193522426643463,0.19982228916717096,0.15552944567169399,0.16813968718099248,0.20397229622230287,0.94676772143313348,0.81803494473463756,0.73734351666326958,0.83783464068269387,0.63640904361520956 +0.19270048742647206,0.29455452412567651,0.26821861201978225,0.19365434104387638,0.17837726513715954,0.38419818728428889,0.42752892053083841,0.37654563276340119,0.35431019969872085,0.35788944606129003,0.44858950066259518,0.71145395162709812,0.39307311176781606,0.96114126692580903,0.71234770102896361,0.41584320315523227,0.56139180045430204,0.46045933327525052,0.62669774578634807,0.40818092807933715 +0.32306736025286797,0.11333970377759216,0.12219114094717301,0.14148336254834951,0.15667995418528524,0.14415551883980118,0.21025821955253396,0.064222084695483794,0.092329646396869275,0.12669084253764903,0.066783440919636838,0.12053282024429544,0.061453939450630927,0.048213043088796266,0.072184134101544881,0.081360658590491575,0.049388363698443329,0.1424104819820734,0.084187611240184937,0.045645825069246741 +0.47650417068831163,0.1833321058155884,0.25861821417654479,0.17148542990559881,0.31420621791390718,0.17965650044978893,0.099870473494778678,0.19699772505663407,0.21396232410905516,0.12726660849298496,0.081467247824943662,0.06489015854275651,0.10669998371304326,0.05893470098142254,0.058064589962918516,0.12015626416350549,0.073845696830050364,0.05234499418963668,0.068640134896896576,0.059412267507865282 +0.95970636917865526,0.98632827683279434,0.97790245398477049,0.73302212429125146,0.87687888530231728,0.48690656442634633,0.5100279064834452,0.47946377743050506,0.40069047760877174,0.90118199474894456,0.42502722618850597,0.69489866396731603,0.42893560932224756,0.891768277980727,0.64689022474321001,0.90357455666003939,0.81184320695815104,0.67210451745372612,0.71684358273361459,0.7902115785620597 +0.25487564059814682,0.29132752047848709,0.33863651198041389,0.18238240570680281,0.20281397441802407,0.038862993118089849,0.023697364322656841,0.034992866674360273,0.03981509354875587,0.031696628663893313,0.024242364260245675,0.033970774841125644,0.036707748216298138,0.021488388053817815,0.045006126000702321,0.02034250744237771,0.042660654176109189,0.039419365539929606,0.027170802788561765,0.021042316714968628 +0.85681833301744481,0.71299522213283528,0.64012126089333499,0.70102727538285892,0.95313024473225239,0.85068284862374366,0.76940836923569866,0.82452916513289465,0.79205630510921354,0.70002796280010704,0.80420440967087425,0.87269596455410925,0.78621174307739172,0.8079046009727987,0.93689450965261323,0.88192964504659332,0.95607357706187357,0.86312914834978804,0.95850219358002331,0.92172272764641849 +0.20949898270057368,0.11783947721778545,0.14430604903431629,0.18659814587939014,0.17146975547627283,0.10642896405756004,0.20690782587847195,0.10411708896585992,0.11192263745503581,0.1510920341183464,0.052553667580094346,0.045932432417403322,0.048940885834013383,0.054894761884423472,0.05290349640060181,0.05957729331204812,0.067540990882233781,0.098462345963659437,0.060685275331570018,0.047196358976806838 +0.33769107338435378,0.3624314876025041,0.41432167987159174,0.25791786983742071,0.27604520846341352,0.23156841225599206,0.19764256647043507,0.15728979042791472,0.14265616502136452,0.14004495826562874,0.085347312844505321,0.1272703960140662,0.12991078422996416,0.1403664602075671,0.11025010438745386,0.22418899503364417,0.19036905302073442,0.13479737350990731,0.1301933889334119,0.16973988319753783 +0.10850934542797233,0.11153724654705062,0.10615902469699197,0.087310272242202142,0.12258787390997683,0.14045747722524599,0.11184455058155712,0.12964493708392652,0.18157651571603675,0.14909598560156953,0.034170397615026257,0.093960854411490977,0.036100905803038534,0.05293809961445646,0.045950574793715032,0.14328283034413233,0.16464346510731498,0.13674701173773507,0.16954250957143208,0.18434434949731301 +0.026773151347737521,0.04959264149611315,0.019260583167127497,0.040294348242200351,0.029300738206120093,0.038922746294433208,0.043386272094849368,0.043912959850697313,0.036362825207213539,0.054986975747384863,0.023742243934984305,0.018444674603551557,0.021660201591074096,0.023664880584359616,0.021851960141124258,0.055431203316517866,0.045147062516600743,0.074758569634379227,0.076969958861293333,0.09063608921582525 +0.35578960278597827,0.39657091666777428,0.34025582551834993,0.29876768808057363,0.24097820412994853,0.4298090595778315,0.37375907318320239,0.23322112218421381,0.33038510031655527,0.25501661253135993,0.3458003399167357,0.6158696383600244,0.22983894023199877,0.36254508608834052,0.22222291179412038,0.17812257902659032,0.46150930958879366,0.26540922122734778,0.37343531853303968,0.16868908617729436 +0.30027526609126082,0.41550333060547323,0.50337922867358253,0.42321106919560647,0.45793164080371551,0.43608222148556314,0.44227055381476144,0.52891123673289553,0.5686280853731015,0.4865109286647058,0.3743181911184259,0.31494202924748887,0.214949874634842,0.5793862075881,0.44256855147230861,0.4466485944560199,0.51773470997227145,0.46291066458833213,0.48032544950172384,0.58163335960815543 +0.87036569713797429,0.63520353795269402,0.72531306429419085,0.92841252843983091,0.83156672017705147,0.4131169912756647,0.64158483547054779,0.92841416242314978,0.65489542453540317,0.66145426137076058,0.34024592780149399,0.32854423213175182,0.29747453368848831,0.30576168640711665,0.39527300882713184,0.63235800586870872,0.35070920825335927,0.60839971206135834,0.3596326909513744,0.40133552073890411 +0.42482779245666752,0.49130034539856704,0.50747611083752675,0.44539896973807785,0.47556675285721617,0.83373165723037868,0.66469213173089803,0.70502557833083557,0.69491548098270728,0.86226198650475561,0.76086009211088779,0.81795161774416547,0.69822306868492467,0.94125843140222165,0.52644687869243645,0.53577075028339094,0.67796938515998051,0.64653225730975716,0.44295401802621642,0.62751008118911333 +0.10174271858357499,0.1322158772560344,0.1771119424291564,0.089377995628895743,0.17952331157288348,0.082760120031206211,0.15238338274821295,0.11345543251674088,0.12057716440758949,0.17516443175475382,0.1612607651691722,0.13770051783493931,0.15250049449940098,0.11668524655988055,0.14769816110314532,0.1199841450521595,0.13805728966257139,0.16680177758053066,0.20564385344285793,0.1581102869037867 +0.95105145102630662,0.55863441765056276,0.9907309726540191,0.81460721487099208,0.58166877343828793,0.82094725200562368,0.8281710210540455,0.62544809705761717,0.53326967281591786,0.8047067106177116,0.9794864830072999,0.91109103912979406,0.50961159354808139,0.50607024412124024,0.51251861338882143,0.74145662677920421,0.72189038923017146,0.92226113100471685,0.93233402544374433,0.85216293849732183 +0.91051990631174529,0.33468472596595117,0.42025041075567748,0.60518997567068233,0.49264053240138023,0.50287263580685815,0.93331843690393546,0.45203970661070764,0.36592846815913305,0.70532925383659295,0.98583197356314467,0.93178759592088201,0.87509652141863203,0.96462358209522447,0.9424253441706808,0.57222994352994105,0.48617911272456416,0.54426946708113777,0.523296229647358,0.50327492296410758 +0.28955758535032222,0.39742408275249008,0.2609728645094721,0.1886323796512788,0.53807120747714388,0.49469209798558755,0.47982870188397186,0.3335245150236798,0.39427212034781289,0.30990285875725199,0.54600947395139365,0.42604540687634074,0.29587893094281148,0.30879523643397733,0.26457558019360172,0.15448376610872341,0.13311308767296484,0.15402453453018339,0.12892474527478992,0.12632694074950798 +0.78017515175062913,0.62964597901811903,0.51851904590756337,0.86184279763497129,0.59102812756723822,0.59467663076570765,0.66291239334976126,0.4535153646398718,0.684261785854822,0.67427482168772912,0.995,0.97217290811659174,0.89038633864594208,0.85922582949925386,0.90906811940495424,0.70450134341151927,0.85698018069808846,0.75969228436242586,0.66636560695224833,0.75998062541953715 +0.68692842437024415,0.72910784424302599,0.85792562416780049,0.9848257615326762,0.81777353243018558,0.95216524928177459,0.81921933404495151,0.96724735015084473,0.71687640590734192,0.82927931186828119,0.71827295878322195,0.91385185270554803,0.66123753401985907,0.75079062909283734,0.72699127865179181,0.86089720208032028,0.72116472756680239,0.66085172286804084,0.97572193539399854,0.76155719210576944 +0.12595186785053419,0.10539507685491076,0.16951513113704975,0.10997736193121915,0.12773706131555224,0.21039933355058502,0.16368301326770834,0.11484457500230347,0.11529648372351806,0.30799837666430363,0.062473603004719144,0.052062005014774052,0.057684540843768457,0.077957211027997769,0.064595441781033824,0.097308678673778168,0.15435811300417107,0.2758201471869296,0.097100827301046147,0.22688512345079176 +0.32672332954682698,0.35946425076340044,0.53039938050435542,0.34387666824481283,0.2918614272472107,0.45816214343768419,0.35973941452755626,0.38806201349530944,0.24354575096112666,0.50938933904338057,0.23890157477079133,0.22761976290964664,0.21735090279676386,0.26720831092364228,0.26217363826290824,0.5131374722565839,0.45972329138411455,0.38556866700903358,0.41492416091384882,0.46734329280152997 +0.10232238322028703,0.13210788563724735,0.16953857919359522,0.16192381054053992,0.28891576847121153,0.30069712624344563,0.31900713548092291,0.27805627465218552,0.35333893690005047,0.2822041509132785,0.17766780006148955,0.34124209345186418,0.25552757942469884,0.35229902821133413,0.22358459476865786,0.8447816752230386,0.84590202315673568,0.91917823827387612,0.72877222021042465,0.84826651520542773 +0.60433219419936512,0.43591428528258019,0.45073353842581504,0.76407479938579592,0.29711683848887716,0.87740961261301786,0.90107143672049761,0.79385737906918474,0.91615061701672251,0.80902085454349648,0.78330038708112326,0.63505491734110497,0.49077637366614008,0.44671345693006259,0.48090950118884285,0.57455716708807913,0.59715462439314393,0.66719419101232502,0.37663216319854431,0.30881817614216439 +0.50581385809507107,0.60647412187165384,0.79548948669670116,0.82304380142679068,0.48741630298209759,0.074040947883603145,0.064504231543748569,0.079646666548765982,0.20303118890784702,0.084905336385140626,0.19526857910768164,0.14272091223458655,0.12021009898878997,0.1691122898958439,0.11675738737647529,0.12850258977801218,0.079871543998579958,0.066119034674477634,0.10441172026403434,0.090244277571141868 +0.3632117807857409,0.45348364387286727,0.43983706117642446,0.53440423010142901,0.29663330874246152,0.17267321045248682,0.12368242712858621,0.23386663157934345,0.1576978052059318,0.20962350729696388,0.50885187848677738,0.2048415685820848,0.37383847550520677,0.2833011445026466,0.34426693609197134,0.75786486322696334,0.98232177270615961,0.5085900231315249,0.88841727130376513,0.97168139188119829 +0.53054033018658042,0.38040207705971968,0.53461162071849355,0.63408717161410943,0.55402400241603478,0.13335839304400854,0.18245990241025184,0.14831459001433545,0.13299052340760475,0.19015280906773799,0.23950885364242339,0.32140420336749298,0.20779125711766563,0.26597560027163686,0.16585077654557179,0.3544763538255058,0.18477631464588612,0.15097374290183854,0.19216186600543833,0.21676550192120547 +0.97408352020800493,0.8407036841697364,0.85585463232972003,0.85015982100974341,0.95618582696984622,0.30288180492066619,0.45833194504301383,0.41609528686855163,0.31893709094410061,0.37224810654180268,0.74291572166502651,0.90234849462731881,0.46887564633497453,0.34314468372899753,0.56209860467789052,0.3531377629472347,0.60894825997828184,0.36895068850110335,0.35820613628304604,0.38890527384911416 +0.3905001604887155,0.57125797764018738,0.29623491718752692,0.26336487779130424,0.41876410786837709,0.28419551251907971,0.23389804913096304,0.43602542045367559,0.27950724744150374,0.32363122720674703,0.45349890235458817,0.39003035742669667,0.28857046647348983,0.35694061583785852,0.64041820263050009,0.59508709667369442,0.44811826420118511,0.35813144354056575,0.40777785069917877,0.52744727749033138 +0.010558381522334197,0.0072983570931840847,0.0094659283358031771,0.011932267794072414,0.0073479025687879064,0.0050000000000000001,0.0083447385511164953,0.0063551023754873162,0.0051168722804334054,0.0060921703526020509,0.026857205989990234,0.011589326068089358,0.0090073804967452913,0.012435767147646945,0.0099155449392695164,0.0071935489609694049,0.0063713751847965308,0.0057675684755557153,0.0095086996587449533,0.0056881082781090365 +0.12668796815778982,0.10009075181477974,0.097683206493345234,0.14544131292866883,0.1775831368690394,0.089678033016500625,0.15221579012831468,0.21134070078134343,0.1254124941363283,0.13881285843953933,0.084007738682946753,0.057525390815677292,0.074881868740431054,0.095467827004530062,0.054447066354781824,0.092922407774423676,0.081828462450715705,0.081359457140574035,0.078012657186085591,0.12235921813536407 +0.206154251287892,0.25995708112054727,0.25193136306968417,0.30117983914936269,0.20181489678370526,0.13169517670736255,0.14539045342807105,0.18798503497451019,0.12480328753120162,0.19670249779879725,0.33478733032408453,0.47363813308672209,0.40225397968399357,0.44643038446102379,0.35820698207202589,0.35012527367701357,0.24175918285392334,0.16902384383908922,0.24976358108788405,0.34747481119397033 +0.51833128184517452,0.65163482079444535,0.60027991062122033,0.73025841053616369,0.8075004759309492,0.5805198649418184,0.79349269431097058,0.86678925269731821,0.98373134717752009,0.68801042683063263,0.49217072775482429,0.38325655127627301,0.57399614823036094,0.56269324988423752,0.76377275726073746,0.73881491132086319,0.95536132663653639,0.69497205790959793,0.78963300905943357,0.60542223892355751 +0.98902079940509213,0.84053005333159281,0.84526203070855677,0.95828986194124033,0.69939001393179823,0.89015093654385258,0.8707314998374498,0.60897462295426741,0.7005017201463446,0.8264884142690474,0.80029512093193833,0.71802208756673924,0.91301668818311033,0.87287758038444585,0.68208667095232867,0.61355548169709706,0.5776516361620937,0.53036525379537369,0.92500148855899744,0.43480795848435611 +0.049950857723440115,0.06106287947555844,0.036224960363579903,0.044604496937182096,0.040799072147947479,0.18078706136222292,0.13645711753927342,0.057780939454764001,0.074393042814065252,0.079473301275049965,0.099063562639474259,0.060918504199188497,0.060631790332637707,0.05115381225927456,0.086056007814185334,0.062823819438101267,0.06789927992293146,0.084941936796141052,0.093072199907096462,0.085164099769514084 +0.40662893759489788,0.25196082044543516,0.58605474871959928,0.33311738633757021,0.47889044920645885,0.44321541913805323,0.46201172198534396,0.5174802656631603,0.40361197852013819,0.66148681404026644,0.31819799532544618,0.3265137030237607,0.46404321173360552,0.38266027912023481,0.36563291884682597,0.61380832270454522,0.3461018153395668,0.43282947338294103,0.32072496531457145,0.34568439192536338 +0.030906037461402625,0.054480348397024293,0.035433867661557934,0.054271986470191276,0.034346526968184625,0.081825888024612714,0.091450306609234575,0.10910597390464792,0.070816523513896848,0.066665084019415469,0.065848620265524418,0.052578380729349949,0.040402680389641649,0.055512407459363797,0.039345037979437489,0.10873786772252184,0.096186289360982696,0.11369576449653947,0.15529682243390339,0.099332862863455149 +0.10143837249024273,0.063578610057355975,0.18119759003005326,0.072764291268261783,0.092425835431439562,0.41531238137436027,0.22747976142900683,0.28354279160221196,0.5003582715401268,0.25861291722629631,0.11728798541133183,0.13193063310096467,0.10994394066422453,0.24419747179603005,0.17752765818122651,0.14439170606068311,0.15212951935189245,0.096608018686344652,0.087825729856312013,0.1399534916009709 +0.15592939143071968,0.11598611138682494,0.072716592245748141,0.089610160191677501,0.10342752644983419,0.12412365382969871,0.1243120193844179,0.15556435920005579,0.25512405883864159,0.33875303818736829,0.086911932213038473,0.25866854803002931,0.07752320686052179,0.050473796070738722,0.069793788150020838,0.22738981082119872,0.21046647730133813,0.16569269834088157,0.14679093090817225,0.330518264495194 +0.68816527756287305,0.3676664696262989,0.44607940257047785,0.30880441972038519,0.30124307162188685,0.25944002510316178,0.18957145707697357,0.22944914441207914,0.24437653827540018,0.19696636811320384,0.33296198690550471,0.51828426876038314,0.4022460646796655,0.32151801421471599,0.45846983233113703,0.71132138883805118,0.42632894435536789,0.46395565965569202,0.41378322734302436,0.72874241678797447 +0.84603397122885071,0.40706287010217046,0.61972222194230031,0.89685788892888529,0.44071823359153817,0.7773855119700035,0.59180113367055831,0.41340860213141745,0.37851271209694354,0.52149121264804177,0.29574470637917333,0.41547950359199132,0.35177352730429245,0.57765922082900978,0.61769548319047463,0.44473050744910725,0.59059415052762576,0.64718938352428967,0.38296681828073326,0.34963981396138277 +0.55854744938719425,0.28751109898450339,0.40066473787966411,0.3200628901945638,0.37572714624827552,0.43860883021567909,0.37433177007025098,0.59748255353823165,0.7228874318605909,0.53640535284699264,0.64770309690437766,0.28820829590230201,0.33023500561800051,0.44991625841057248,0.55877935621108765,0.89739712185314913,0.74240219391215634,0.68436900722004435,0.63233221036471732,0.995 +0.024133973420042355,0.008470213821486574,0.009072541847736839,0.023220885335148364,0.018752572377621478,0.017725833043128358,0.0088491384591394082,0.013546704498777784,0.012306132245888028,0.013318265060914457,0.012561601079850378,0.011668990086591906,0.012853831138535974,0.013764047814248824,0.014111293127130685,0.03476822481643161,0.035997942323900724,0.042854609538591763,0.035122665578074197,0.094194813548711662 +0.85926438356005708,0.42724199810933727,0.53964465886174662,0.43553117925349577,0.36530225530579336,0.8005128538060734,0.69110133064414092,0.70600377950383031,0.76023922248407483,0.55760991064681276,0.9266786542428761,0.93467857374300289,0.88285860424195606,0.78487325438150868,0.8575746327280388,0.48747362722568494,0.8085417573100756,0.84673242175301588,0.91251503504715581,0.56073016444172241 +0.7677685750477492,0.60002003696820039,0.86897673600084602,0.75195983879515249,0.53637139871420902,0.98128855418878369,0.59950098518383155,0.74674265266405793,0.85651234880467386,0.7801260603129252,0.57999219238555066,0.40918387696819575,0.33078837245413401,0.6484958473012512,0.41857588068336676,0.9942040729551751,0.70895545249034264,0.86488390469289744,0.84704535504144352,0.89977504183861867 +0.26362564965611684,0.39685370166254624,0.35041641807370588,0.32408117353773452,0.35100048239191262,0.21449913136834253,0.15024250961250102,0.14442741807406917,0.11862567523066948,0.11572128948820444,0.20871908097318065,0.1590834806872258,0.26811837746550327,0.20828736076897844,0.32060139805050281,0.36192190969337873,0.35585837405399051,0.38597640671283118,0.61250132001876378,0.4268945671231244 +0.39458980097579704,0.3390171046907941,0.25407126196068125,0.25064704369140145,0.21726177045021036,0.49791216448321707,0.41338795230541397,0.30793740347535531,0.27604119589450532,0.39977014766085545,0.34332293088841453,0.51795271283624389,0.32211000161989778,0.29646761927234599,0.49696042459260958,0.32187745661636963,0.13779595296936312,0.18531373427818529,0.2738186347208415,0.24452914569992429 +0.57483637145557154,0.97076939859404077,0.39247050307701337,0.34774395931209401,0.82304102250845046,0.44551815870509737,0.73412241512687959,0.7741463346818529,0.64148149064665494,0.55596785410956995,0.93186543717823633,0.80768527733755735,0.79846186710339939,0.73736750638913084,0.90897796404530407,0.54058161592336651,0.51189367606529013,0.51929700354977593,0.59292952827870549,0.64737240201976454 +0.92837454474190861,0.54303317387127537,0.52518230210480721,0.5432425220742797,0.85527632096935768,0.27289863638477996,0.27890988475123296,0.2664726463858807,0.28818462453851817,0.23058505086768211,0.65643403590933991,0.92608278514266062,0.86133277369488193,0.89866128157456426,0.80080677036902026,0.25064096361707539,0.19725638895320324,0.21411692056175446,0.31611038140128039,0.1974392231973012 +0.90841092950738267,0.883917481903157,0.79524816273644805,0.94937877127892012,0.51080170945958148,0.67464816678923956,0.61023522560507781,0.56408986399407879,0.71240375034307102,0.56891498775562266,0.68864953341354618,0.91629959386466242,0.74050030787890564,0.88447049057830163,0.96932879106986558,0.73379859699112238,0.73293772930933976,0.72390859850502276,0.81573000409639762,0.98164299641995834 +0.10335754745661112,0.22212251210791689,0.1032235559817591,0.10508626058590163,0.17798652235973569,0.058081911899517141,0.044986191347819705,0.04323492376779451,0.076296252803646894,0.058602596553166027,0.081171807107551272,0.12184834318517526,0.094430579642999599,0.14367048131258067,0.098316140236995461,0.20655931069646946,0.22029163603946292,0.25515628343797697,0.23131963781507514,0.32590916900477801 +0.73693826314105393,0.64973113757462764,0.52275466035047691,0.65499114907995182,0.80726042651379371,0.67560067253727629,0.70495397049719755,0.69939567965836291,0.48599199133953014,0.78430836389598524,0.84518653141323352,0.91289727681782307,0.72790392214798771,0.74670268985765498,0.78168783295028876,0.93827834680061795,0.75617563809683019,0.8829292841719778,0.67309804982417776,0.62213557447902901 +0.71965303264343738,0.83570815479982585,0.76099866795301274,0.71326743993012465,0.94733061185047385,0.43609205968243409,0.45675974237803502,0.473040663598295,0.6129100714743303,0.49272494222977059,0.65833637046544458,0.78936017212963783,0.67852121754719152,0.74216743831182141,0.4508429005012845,0.52385750893244931,0.71504409239268452,0.6730853354535371,0.42059198502574768,0.72517441686381934 +0.9083426034003611,0.54181115265293678,0.82080669881697477,0.58618348019763311,0.88468588613473809,0.48592639284925981,0.19479145592257752,0.32063921674921836,0.31941900839289156,0.26278041258287027,0.35771529715784711,0.51118116837394501,0.36878861765141091,0.34003811034573428,0.76170651503297648,0.25357380610050445,0.3063187668964219,0.26923471244964609,0.26064473244214359,0.21855701746593253 +0.58574216041998073,0.66795038435306087,0.71616175117956449,0.48403097546181056,0.63391408992855525,0.93830033746525987,0.75613379711410156,0.96984188288886486,0.86198329190503253,0.97757260310734728,0.9735371438467596,0.90131864772659087,0.79939690060029012,0.74294500472418179,0.95735826519207701,0.48684097344754301,0.61538828281488545,0.77196696126372866,0.5411699951893395,0.75985150700912174 +0.33322326115605505,0.38444854937621586,0.36266345130589756,0.64602887828572819,0.50015216731569245,0.47913635613866457,0.31805194039891277,0.32601453522948254,0.27559830305158728,0.36104346007716592,0.60028971354531635,0.43684217524911395,0.47846048374920314,0.4814689400696357,0.3434958969252031,0.27032556146084274,0.31984355222260558,0.27486855887687989,0.31595482290278826,0.36440902359355837 +0.72282202893697911,0.68328227759483107,0.709638070432978,0.4364594397795577,0.57514178691176732,0.33971611017475606,0.45342410677407075,0.34273861672969391,0.2497963480996768,0.32818737834229805,0.64429207209750106,0.66935796734044861,0.40601649983401561,0.80007918201697947,0.7221004134526926,0.69472237835398587,0.59916281965163565,0.62946505694211596,0.89674317415968674,0.94619008742289812 +0.85426742679881407,0.46007871919568522,0.6665256486432628,0.53287618987138652,0.56453488306358146,0.82534006649443148,0.43029202785652837,0.50360633826179801,0.70680791776404184,0.70335218019621271,0.995,0.91474622098591185,0.81250395949607024,0.91495661198833911,0.80254744364689556,0.60114868584405767,0.58735491165736053,0.84320206387818897,0.59711054235147898,0.51392314695136243 +0.91344483103046858,0.73973082957118252,0.90702579528498417,0.68712685628643999,0.65011813180212807,0.89766067203759348,0.66704837141638518,0.6831204234548669,0.8068432084423901,0.72013156685896618,0.69749916280546354,0.8571322893862996,0.55531110018923002,0.69104386360283687,0.87075241305528173,0.77608997460039786,0.83889318176561323,0.64835776447487703,0.73751094825263419,0.83275806390114815 +0.32298567535535949,0.67915679614317626,0.27326823001039191,0.26350338832049902,0.41306909986342133,0.64205215475482891,0.93919165692292994,0.97173904614313278,0.81219354316167036,0.69756684192496365,0.54497748492422116,0.62297319893952363,0.70755565373852924,0.3951067573685616,0.41085170372914337,0.17585833250519523,0.21864194542241697,0.43263889518001086,0.22204427192947654,0.18979388779227374 +0.98540838754372895,0.94579818285014972,0.97630490974915252,0.80481745357345924,0.89207318882966091,0.90865586336298954,0.93907232534743379,0.82467739356154512,0.99090367219359154,0.91532555121179748,0.62430171190502304,0.87810806224273164,0.70035383315274091,0.96501833853981522,0.77592845084488404,0.96804628524909286,0.84016020860554841,0.88088890425151212,0.97987502462688947,0.89976713615965687 +0.18430601244995848,0.25205760720764453,0.15062390171451512,0.1506119573337468,0.14607698008702102,0.23999727101477189,0.30822629160438908,0.19308799034594754,0.19904587601059728,0.26804181457410342,0.34364500166765644,0.32730062327595338,0.33698200644377868,0.38782168405573569,0.26901138307392414,0.12766271090902864,0.16664243084071298,0.13759929775548099,0.1670584207047717,0.61609334210636568 +0.83599433011931723,0.96484363293386133,0.93858329148790709,0.85056870902218107,0.59118639853771726,0.7300860878987333,0.80144367918921766,0.72397131482312327,0.83067035410495482,0.81818757094018113,0.87637150088126892,0.88891487124606139,0.73942521392331084,0.6021614924502684,0.91851630913862381,0.56222692606152058,0.7468791941934213,0.78752964570353745,0.91608268167371343,0.77921601143926378 +0.92457826611367921,0.67818332435963324,0.94702743533163491,0.81256221270176676,0.87994186043588629,0.9832009373725713,0.9865938539748873,0.98476376746157834,0.75151370032172071,0.62099753995396223,0.9447697456200046,0.89380188001428651,0.84196004242233202,0.88444421199546852,0.97142476853188509,0.96551824789264051,0.96595871471439376,0.85963694485063114,0.85365223549950253,0.89155843218292297 +0.89313009735635029,0.83853012683443984,0.93202611074080477,0.995,0.9659458788648233,0.87331225576227345,0.82087161735483816,0.88534447217874501,0.82886413626419964,0.73111393366203359,0.95984986929568294,0.91524809461628365,0.9387933521446461,0.78393301519781133,0.92937836035333377,0.92155118272067238,0.995,0.91768409590854494,0.97700516931566528,0.80206942481849808 +0.53496815328649405,0.74989650265147811,0.29290170058903747,0.49794945892705711,0.45136253736559206,0.84454763196150739,0.94314650954250123,0.60648528133190871,0.72560911662783745,0.60153035109813069,0.54052654459833083,0.4608144325466042,0.6801380587247029,0.56334648518116692,0.47265930976794945,0.53664853853292938,0.96996406427883064,0.51485161416430891,0.47332826927518701,0.49375703117247316 +0.45183618140546228,0.48254406914651127,0.44239499068146376,0.40001162055210615,0.50765335450295168,0.93843060078417573,0.64338807904516426,0.73028208969512276,0.53049706845554845,0.7088535769799813,0.32933663555922438,0.62834817670670384,0.44922293936105168,0.61665789765422441,0.64173339427770737,0.73525801750737929,0.69563213624809039,0.90927937285850002,0.83873012221364929,0.69754717515847164 +0.46797146634894837,0.53252872598266232,0.37103361772319504,0.59846313026865983,0.52544528174475447,0.51105841555391973,0.87124984204812916,0.61456861910206684,0.39637388920564298,0.41410026036767461,0.80462251840485999,0.53915624717256483,0.50975330952284481,0.85776883943870819,0.69752870981550563,0.54614676380540172,0.65893381673998019,0.97842105240467669,0.71933423838959409,0.73642140040273318 +0.62846759176821365,0.8651665318238897,0.78894447951051239,0.80944727807736394,0.82561210390356765,0.54571198505827612,0.65450691673817019,0.4826882720102797,0.61533120852472256,0.73556017039342347,0.9609650651334195,0.86834323675132297,0.96533306122528284,0.69321859008494491,0.7819630980834068,0.38954885459019056,0.48634440638899501,0.41405488684227187,0.5206753338028286,0.55846865321941952 +0.74510512930843631,0.67476241249801705,0.81804907251767345,0.99497085423549692,0.66440417107912109,0.55499539270224041,0.43697865675506853,0.52686902435545868,0.54507139845701269,0.69738006408214748,0.77576991775097359,0.97541005700582095,0.8974449785114611,0.8023782662489608,0.66764702582811997,0.66558041958601022,0.74615102274985179,0.65273270078147982,0.32982651492661452,0.64257144607518824 +0.88175843797121056,0.72994691026096359,0.68357065180532584,0.81702621713220958,0.8565204906150754,0.64481164112725764,0.59794066017398839,0.85884518045058744,0.5854474501071506,0.69701307873535645,0.60839458508229549,0.67546474154425529,0.8239850989689298,0.995,0.61193686237903344,0.83319668166579763,0.80612395257882652,0.97043523788930564,0.51342596545840624,0.82490505441334838 +0.83278488262721295,0.68717771195881416,0.66484029885249041,0.70404323906210087,0.40293353199346782,0.91133795358294922,0.91548591407982483,0.98219083872216628,0.79709707926276119,0.95848898236202784,0.49581030762393435,0.38303253352517569,0.45511820869424735,0.56431740834000532,0.53285277699454148,0.44727801931425837,0.51956739407787222,0.61191651507784761,0.68791148800564861,0.60721133280795048 +0.83268510627939929,0.66288367798045134,0.45704432674632434,0.89979876784682566,0.69363344949668615,0.9310668015717628,0.51998585876007364,0.64450281612845706,0.5046056993104937,0.68538467011645643,0.95576832734408124,0.87104470351372454,0.84912949044558717,0.73989345510677662,0.83278340535994388,0.77173312255211379,0.9310366619150382,0.91089432996825825,0.69050112873465852,0.7826235519250605 +0.40373859313844102,0.29295455364419909,0.29403556987077861,0.28251873632557611,0.39723040848074248,0.23490264519903797,0.54408356159532023,0.7505589812317538,0.4621830607203844,0.23088051022635261,0.38974314407322597,0.38329367211598603,0.39198213634899826,0.41210314802798975,0.4322260321898822,0.32498740250871488,0.39382881886683069,0.47939955031190451,0.91603368497688675,0.43643823921753183 +0.20896672409584477,0.25697799922255893,0.34402531145957332,0.34044702280869177,0.1770091492004279,0.32995380543493846,0.41457801595817872,0.53064076944842986,0.41229681304362387,0.3624520755436097,0.77419381674656418,0.90994438299466363,0.86865662985642678,0.90583200887596005,0.60061771733470382,0.37691293677649385,0.43163075893071656,0.72139009073903038,0.2791365410672132,0.54339224724149171 +0.62109106922972002,0.80524544610190207,0.40461547473443432,0.47720209612707459,0.48147215289040179,0.44201228714408497,0.35521513277333877,0.28181521319493452,0.37247122955624973,0.40679632709787261,0.4522328648985065,0.35995798427475995,0.67835950942930712,0.623403612684574,0.57679286291689047,0.47102341477785181,0.4536775880182633,0.39455642639458044,0.29791373059253545,0.37903671698079616 +0.65997565304844397,0.5036981899287134,0.75948991862900839,0.74070159308752981,0.61663606498435664,0.48075081048309515,0.54685319813107125,0.29528378831345059,0.43710432662942789,0.38423856073126433,0.59556751086860327,0.67262928050168658,0.47343428813119398,0.38483966939188841,0.66561896081991612,0.65991566421933234,0.54117080922172678,0.82296074335314195,0.78257192068516324,0.90180634625537315 +0.72839278044311495,0.81897372135667956,0.67096419207520142,0.6887849844289482,0.66038552784163895,0.89841381592884728,0.71942060549751119,0.67325758222028931,0.93595292437262334,0.69415788145996105,0.60247739311043669,0.56255255010014094,0.90966734932674576,0.61520090838878294,0.66481351164662805,0.94243626612457876,0.71280886180195291,0.84672682576386193,0.91004968108798323,0.77943515435138977 +0.93537272225036494,0.94147804512896593,0.74675427479776768,0.69235841063327397,0.58510680020398842,0.75917457060034976,0.65377524525354636,0.80963572734929667,0.94191197929793413,0.74707423662188122,0.92948209679714489,0.67478512776477961,0.64425561735181158,0.638542635922835,0.75348921428443683,0.995,0.91363900550337362,0.70811566359018185,0.79669330967399932,0.92667607298667021 +0.05212607834778283,0.048965577702679099,0.056488957860760289,0.10510243766424729,0.061459623842461633,0.10401411906949563,0.18218849724852421,0.18240923256178004,0.1473141748254666,0.13405973839810195,0.054286089447603873,0.05919016790934678,0.093894679953781646,0.051078864027066836,0.049333544397632802,0.047203556476718506,0.044467220843532142,0.069635263085251517,0.043354758517341441,0.052119799333956954 +0.9887726572392519,0.98508923354660505,0.93004142882172081,0.89582319338798688,0.91937996886738438,0.8420342273982494,0.9129751165109885,0.71134708836673599,0.75202650943854832,0.90222747291203387,0.97639568468569415,0.77583202060108303,0.95844517318969913,0.76411216586461761,0.93149559109815816,0.86928335853504679,0.77519781525536546,0.80209531206345974,0.89266542431851947,0.995 +0.27160479345315569,0.61431397254694609,0.31697236196832934,0.33203814411171956,0.25248333985428512,0.1362561869148983,0.23115770259964669,0.12149735959382937,0.21650151812948173,0.12438161873605241,0.27273442546722143,0.20693286349420459,0.18546207790795527,0.24142368738368619,0.14871507991690494,0.24453884703225262,0.11195522335541762,0.14371871631338065,0.17839220793587507,0.13969479286879599 +0.21689589904205578,0.21006918762132715,0.22505282696342968,0.31723768598746893,0.37781422403337772,0.61959982127633029,0.58689298535206191,0.42427432286326566,0.42684232949065137,0.48612720138106508,0.42667277700355827,0.41195924874656714,0.40687549095868664,0.47533239423721302,0.43830469137418826,0.22183164467361438,0.15840940095534051,0.19573285885868313,0.19127425279874213,0.18220606016721216 +0.41702748213826529,0.76881501674941466,0.70391900938095786,0.94395289643659286,0.54691424925039056,0.48659280991498477,0.72271885329315411,0.83915797853015195,0.96312717057438313,0.53532261523816649,0.44613819428421669,0.48142307968253628,0.60193826155616548,0.62009181771087996,0.52255927408713754,0.32548969144161449,0.32719250131753003,0.74543630504101233,0.43890234294440567,0.64724022543753912 +0.97696258797696867,0.93610929873715809,0.99111635461539338,0.99386769504220818,0.88451101894615902,0.72794962872945046,0.90720348038876242,0.83594899148950486,0.76748637443900436,0.77802913767009529,0.64737965839686096,0.6106489876127198,0.70566662839796634,0.53263148111751368,0.82116685590328897,0.77540128118461615,0.75257224648213905,0.68972992052546711,0.50658814062896462,0.55782720725626112 +0.66343190686199549,0.84521215083406465,0.95098210098775404,0.84062605395934953,0.81904531076881526,0.75986739404456982,0.79386213373458681,0.62294377180372407,0.70978637784389986,0.82313331805088252,0.60907750805562999,0.42073520084747679,0.63075484459734477,0.66718838770006528,0.44551374533972538,0.69802222051294927,0.64125440360109998,0.72543021756346193,0.56035188783254952,0.49113507983567301 +0.77924958945172351,0.81255643032110791,0.69646826712420729,0.9185075652618051,0.51010144505364885,0.3732547410743558,0.34468717099718338,0.49441618614587712,0.44435653899831618,0.4121003838064119,0.40478113066312771,0.38859971882834304,0.2788321491857142,0.38712199413723397,0.37114938774732475,0.32416057451985264,0.39010234820922579,0.3442116617846816,0.42159825836736914,0.27119147233589147 +0.31192521914541271,0.1424823251634334,0.22561313175628803,0.15552982663496862,0.252002109438002,0.23941598108993703,0.18506416063789149,0.17043786613054079,0.18582163869725546,0.15498268096588244,0.054103902590239984,0.087859996380149491,0.074220462640846446,0.090472151223820851,0.073863847918598041,0.09733258373874619,0.35283907409742415,0.14248463766531139,0.16415496045638922,0.17980751889033844 +0.12430708377090598,0.15285454917886365,0.20709787505377478,0.23794247598749799,0.15798929996441904,0.1748880003051804,0.17391855178536927,0.1830936249914526,0.38602180957170984,0.16711276064124947,0.084449776250040451,0.1087892587248203,0.076741394424292175,0.087779187752619184,0.0841097410052669,0.16771301394300511,0.086170184378034795,0.071510569515416636,0.082558753968963894,0.15887251978740916 +0.090519791974249864,0.13935918220843763,0.079711095127300222,0.1030022895677348,0.069654933665214067,0.1699553065328013,0.16511472072666328,0.28371094639730848,0.23576667041654156,0.59603454800273847,0.64752858829272752,0.69693926321755628,0.50500089085473265,0.59484314367356128,0.50337397394633487,0.26331535501601006,0.090780754250828793,0.14772528433655702,0.15518769143659825,0.097755898176720687 +0.35608913078326837,0.25038347124268162,0.15443336413995631,0.21825507603636715,0.24676056642232039,0.38025591799618769,0.28837616076480499,0.41423642898555457,0.4560171632090701,0.49177396181337035,0.41674979926081168,0.77542205849129309,0.35835984466479287,0.51002598427597101,0.40081518636383451,0.52036885524408771,0.5923268901376314,0.85621881716002779,0.83890693976991471,0.47147568329033307 +0.054200325060615479,0.092884738889062582,0.10784929717872738,0.084814018273634814,0.075584488114889534,0.2406691166318235,0.20703741221308405,0.17613111771610979,0.16654006992967665,0.15817529763129329,0.20717930541203122,0.18970419758310539,0.16757045879552301,0.17682202428175975,0.15399360347246041,0.16608583208428909,0.12997134282725029,0.26757394038755983,0.43167659398307789,0.20488752741886224 +0.61548678475477947,0.69446511884815498,0.75914901205664742,0.45130574575871779,0.9041630014571862,0.76207920145147656,0.61854110432256848,0.82343276720663672,0.98051767435954351,0.49871253678415089,0.97219000355719187,0.89369757160672958,0.79355686481247223,0.719625064283125,0.58770526123543043,0.95105253867508854,0.7386526409157701,0.80397497002555351,0.95467425989925969,0.97580751909049535 +0.19081166393495042,0.2200381752815114,0.2440824907539636,0.16202310407743439,0.19409669157346665,0.10889861386126745,0.13442079047384761,0.13009076722248747,0.1829124441758383,0.19087013966848015,0.32042481238712411,0.42017264991707182,0.18461858471255879,0.17455583381151055,0.40508174738918984,0.22363565201460878,0.15323675560360581,0.19992245719044544,0.29427556873736826,0.165597331291301 +0.58057566090972579,0.85279350503806672,0.50355749355340895,0.84743602517504812,0.39500290087689272,0.61166394077376895,0.79696343179426299,0.8747091007157306,0.81998650274222051,0.91373958032039326,0.46131443310386716,0.77765073106273286,0.50732590620854956,0.4017585180392329,0.40359359637024217,0.51550987501534407,0.45265622671603661,0.85748443910006922,0.45094969210573366,0.64258952749757325 +0.88069229247353231,0.84098255775821396,0.96104809821952453,0.89638746389417945,0.88366457157091272,0.96855548249907109,0.97337931240761943,0.94348378435343672,0.97130167561936098,0.87683599733255579,0.78741974866814279,0.89350535960373167,0.79064976353805616,0.84818093790784121,0.95471078776279594,0.81741247874873402,0.82884239080669775,0.86827884445043368,0.80528700563943856,0.92559582261743567 +0.3676754927992919,0.18657152055266349,0.442158420581795,0.3298897880856303,0.22853467955399051,0.47353309738184007,0.58759466426023677,0.30455112852958538,0.50140101598700715,0.7222680099194263,0.63362477748024371,0.58038798773130451,0.81784626788228965,0.53535762098105411,0.66111894336483512,0.63404108236160928,0.29442012139709228,0.70144948778152227,0.70209623624180861,0.45382988449250578 +0.022220599386348093,0.024055379659444532,0.045610428555708175,0.023050277613991907,0.020488975442380927,0.12376787170420687,0.084219118867409626,0.072985459304380482,0.093880358092331431,0.06802064953554611,0.014099489343817473,0.019540209355271496,0.024138209927587848,0.020698235965115112,0.021339385083730816,0.010596431218803343,0.0069159231165075458,0.014342872549974704,0.0083915323345000094,0.0073539790099664878 +0.6249649983635972,0.7957521302910574,0.88141831519104352,0.74461178399150763,0.88411484130611551,0.92290752901454409,0.82014714612455009,0.75748983024158545,0.69820726992958049,0.91695428068777107,0.82213724298876323,0.72940994824919692,0.92931646908261412,0.82834745773784102,0.8232988829387774,0.72546219759081243,0.58499312778624846,0.77238231243869937,0.42762240014673703,0.69953496501223078 +0.54638965834263498,0.50318243133243479,0.52364474925921078,0.94678770186804373,0.40765526471393648,0.76726577084640712,0.86944231072288947,0.95746806563035125,0.89313360673702136,0.90874287909104101,0.72068763025738081,0.4060581509926689,0.59652435725345143,0.31514865960537175,0.40948766834605249,0.59586184993323188,0.53248666228079122,0.47583096243499745,0.58626625029109203,0.86105463925523484 +0.87343582671166387,0.9580376599011613,0.995,0.88146348292027665,0.995,0.62367153381415774,0.959899456271189,0.93792162337417839,0.94119440406296473,0.96088661763331473,0.89889909356417752,0.91082516846904549,0.87443103155643098,0.97589359043469626,0.94457324994889091,0.85938953184462297,0.81229046213133327,0.91086783123103199,0.90777979985058377,0.84622941117986261 +0.24109109110164664,0.34434342346270108,0.45299320600735521,0.36930246152014506,0.35090446620237581,0.85822989968709551,0.90023324775841029,0.96314723397057533,0.90797149157150692,0.97833094091511208,0.28315222424695513,0.20888853952235201,0.38114690039212268,0.19561632866239995,0.19421535013826149,0.35803287034186154,0.18048359404102107,0.23223725247255878,0.15774322661151682,0.29745891511498662 +0.30332736730145171,0.41633902142150614,0.29086650947772552,0.37751043054436451,0.62560617480311309,0.29197410837240595,0.4103356202694366,0.3469399448457976,0.47508396366656808,0.52818496547961891,0.79027170656650714,0.90809962936038813,0.66830096098112357,0.94111009659069689,0.73143543388928489,0.39610218600788438,0.57379898925016737,0.48763924326533281,0.39545878199582468,0.5135581099413119 +0.64059300047406509,0.79423345738582241,0.74564751285127229,0.89014316126714033,0.60226562004174011,0.5082920954668001,0.46973058196452355,0.85323085077310679,0.70029872179338359,0.84019429589095329,0.51476926686714908,0.47262897563382517,0.51674211722894303,0.38969597634681835,0.41128454235791573,0.26728265596074591,0.18305339890450575,0.32446406906469383,0.19391938104529169,0.3082555544521397 +0.21901235023997923,0.243960345009089,0.16626854362178525,0.170577704638949,0.28449242691057869,0.61623348538676836,0.58282940458341592,0.70958095665477749,0.46096827171092186,0.55054920897607806,0.13475280618048294,0.24581770913632325,0.20690407779515235,0.1719473303487829,0.17625259206984817,0.16100515454476605,0.29897133172227924,0.21846957165459208,0.17869358060846832,0.15636978750072422 +0.25157549528856082,0.48692719564217823,0.28976524731660341,0.20869080371436494,0.28886878026084062,0.25291189351329929,0.19294008917707137,0.27383138344455843,0.26553800400412847,0.38651649475479005,0.16730005497562653,0.2100560008500075,0.16432893265495757,0.17081093599613231,0.14542264657384513,0.75842002095493222,0.54054100033083519,0.63375522822229913,0.47804086756987757,0.65200465199035107 +0.010008395802835725,0.015119375985479454,0.0062970350242400677,0.0052221666099289722,0.010336469010710355,0.0052967976936813457,0.0055195095974933002,0.0050000000000000001,0.0050000000000000001,0.019010535356758531,0.0050000000000000001,0.0050000000000000001,0.012837531514101955,0.0050000000000000001,0.0050000000000000001,0.011089132232076065,0.0079372793763431582,0.0051867300773077154,0.0077840750982025976,0.0076217942936990428 +0.040435464746909962,0.059306855851328145,0.1010253275496948,0.041683098441470015,0.04686326702610695,0.063480388896822143,0.064069154806089476,0.05665313146676107,0.080594249605325505,0.071466361684053098,0.17711595559733001,0.11578085085883559,0.057785325879087572,0.083198869632554809,0.05605379680639825,0.1014062768381008,0.067132743604155262,0.050036929283665398,0.064572810813619777,0.19296689116339127 +0.18958722586805182,0.091247747472316315,0.11534932007113383,0.14821867995222718,0.20083811714966046,0.13612179523456572,0.22438712240143402,0.13235696298989061,0.22642538471910059,0.26615016322960589,0.14431998078468675,0.18770260984874648,0.090399468476537834,0.12309009492447866,0.098233086021473737,0.24881960911303827,0.13023541477409137,0.16555944713896512,0.19727137705862305,0.14613772400626462 +0.63686582436143258,0.46111769008849102,0.63307122111185665,0.5616862295642373,0.50175168644094692,0.50469502814909428,0.56089508388534681,0.55490473948512142,0.5285200928856314,0.96821452230876603,0.73972542759743032,0.73814444834908455,0.53954780350273135,0.57675794042968465,0.88970398806952711,0.526817946198187,0.43029423944734763,0.42597243265343532,0.57050381709986631,0.43334379999730999 +0.33543636517946368,0.30794002508153767,0.18557223409278414,0.15130657423311777,0.20564456443601159,0.16258882295861463,0.17204669975896891,0.24244443967604454,0.41564358299677007,0.18783105413597706,0.43427546960052882,0.17661823372325811,0.19189096471026873,0.16950311806011251,0.28838031803079001,0.45623551661722422,0.57998772586719693,0.4648459476776694,0.50441164279242712,0.42327827260425954 +0.76851180719288736,0.6481856958899318,0.48533234007492276,0.89338581100093684,0.47901285964686019,0.53349832580570788,0.53423466223993776,0.89400178138736064,0.53904217748097061,0.56236340437888499,0.71954694855369439,0.5825996867944232,0.61240211182207227,0.70106004135491684,0.6173389577301458,0.784644248970786,0.9745716512269651,0.90503946012439451,0.8641100549875893,0.79499647522403261 +0.25457147166498151,0.29725502723337532,0.29567703533783668,0.66702675261564792,0.2313089551909279,0.45538549062820605,0.29586030048304124,0.15226971083715707,0.1757539410730154,0.12284761535786826,0.10477645689195447,0.079651704187226072,0.10010094387717833,0.13051338108148083,0.12142220435949169,0.093592171230619373,0.074268890075570068,0.091552307554736687,0.078177921171183912,0.07687971191514463 +0.22860674786224902,0.30530901791509829,0.28646295429840146,0.2336395290438584,0.26585744489004859,0.32953029095254432,0.31760498069061782,0.53107699703161426,0.40992250164026878,0.2863994663933635,0.27429980222912809,0.44236815339785057,0.39544239154940936,0.25617584828200368,0.35253080235669304,0.30827341293616245,0.26671584103257062,0.24481333787389226,0.26417224677066403,0.2323084006071105 +0.58542830297040882,0.70851537556504207,0.63688539528563748,0.82678133693338118,0.67171392415797837,0.6103246366125179,0.63172924047160384,0.78440776612177787,0.78213931564777395,0.34334161644010464,0.42601487665581861,0.71396432380275532,0.35579860315281636,0.47079511794613832,0.62070772671107033,0.67340161902763018,0.85530650278214082,0.54371658934204414,0.68986051695143691,0.61462522510880913 +0.17267352903333238,0.14818110503206938,0.14615747900166462,0.18187478298646226,0.10327661225928689,0.11236085662841086,0.14737237786185783,0.093017433182561796,0.12185014702453913,0.080310539420585483,0.13413837524083247,0.076141849316688923,0.084053396886535264,0.065158537146502105,0.080574003708614422,0.31557019644432782,0.22504634971530549,0.24726861478792497,0.26249537856237654,0.16855444152964424 +0.93215121693284653,0.8378719133884015,0.77693838812738192,0.89292995516039675,0.67239514732607475,0.68625199535627335,0.78270046789458225,0.47663425487633959,0.69292527578901575,0.4734446722530567,0.94419971039606587,0.98116729952695547,0.96130101153095748,0.95625242132463162,0.98263941029459956,0.51829798336301158,0.61704347490729494,0.80168459924294644,0.75220358785683994,0.73893558067296017 +0.42314483491849259,0.45548066435659013,0.42012226998582675,0.4128214573819583,0.51559887786310543,0.3115340754129855,0.45178878657940252,0.39853717086802642,0.34389291144761036,0.79983783734728864,0.97608427570433343,0.6005330922373624,0.69194519898642703,0.5097542245883061,0.56218950159528214,0.46575975641889611,0.86766372883210396,0.58627086150891106,0.64578087335580259,0.7438535346608024 +0.11019015502482446,0.31839822731550055,0.076718079880551418,0.1142076036557115,0.087110725841144432,0.047759568083244261,0.10620305056152879,0.061775664535776514,0.075862391843397992,0.075666397443779176,0.073166951918907111,0.070907556774204239,0.078192231100794624,0.064613967105830283,0.049246748569065246,0.19870759924643933,0.13916889155779136,0.23273933835838856,0.10424765063398057,0.16091254437292477 +0.36016015596415163,0.51664677072106613,0.361800462512407,0.41951521616877008,0.40703084948380164,0.53552147979995934,0.90426015340611254,0.53059748492920766,0.43799127294804752,0.47844445834760874,0.46774106152541023,0.4221065194159565,0.437552783733902,0.48853578133430109,0.94604991391393212,0.56558091264928556,0.62866780389602817,0.45320303943662305,0.58711004576617409,0.5087442179842232 +0.12514087840804033,0.1436114987974941,0.11025874584213452,0.11653127158117901,0.085756458656911311,0.15161605135603737,0.11800273599365196,0.10228770527711374,0.11095633193752495,0.070904334753350312,0.24247097912795071,0.46445181640890554,0.26801464052922586,0.29038321883784035,0.32871603960496987,0.15926793879604656,0.14685357600163298,0.089781224261474474,0.13600921897370008,0.14980278792912069 +0.57652318897575805,0.44981097709199841,0.41771260286592532,0.53031601702201259,0.42841402321825517,0.34982282826430078,0.58613613209320037,0.49177777369839754,0.33528408498408846,0.25913519494493537,0.45391410395593745,0.3570047968390101,0.35543838203973999,0.32319451910683433,0.38910779953307917,0.64627246139233574,0.78050803426965643,0.92662692861777374,0.69422012144239642,0.99221792091658811 +0.18943681455528882,0.12623942997402374,0.10039378270234067,0.13310509376028359,0.1562276697010167,0.2871768448504205,0.15269522575147096,0.25074237989239856,0.26669273635791685,0.31366985221511046,0.40050158941101061,0.27419057530454954,0.66689335161522723,0.3119504796763668,0.48632196625912461,0.24922062120367883,0.52415349880950657,0.18490281268440867,0.21716447317442258,0.2382603869500094 +0.95783843145046321,0.41415276343971469,0.37731487755650855,0.55790970078840418,0.56560812033780528,0.43809894360133061,0.36317490629403903,0.48381393620032676,0.28406877641466571,0.38768302824662404,0.2525900700549723,0.22125483536156462,0.27628374879686413,0.19509800208938419,0.34355689910892157,0.75035291821062311,0.47067008555358608,0.50009525860757698,0.68927720071485366,0.47966480653269683 +0.084876453489687573,0.10751348583344679,0.17277254857968954,0.24288032683078548,0.15904623483455418,0.13056856107285014,0.16756100014740249,0.27344428455967584,0.11540198627262131,0.14908296356971698,0.082457416952572735,0.15200000442750145,0.14267669063457483,0.073433718415832114,0.069308009847854596,0.11184866666535734,0.11389258849836217,0.19380147629272665,0.1204349578410404,0.35023623780842172 +0.25665205218492471,0.14590754435114714,0.16029339906209797,0.21177355969150055,0.26632592430542901,0.11167262002660384,0.10745726580834966,0.21565779838076091,0.18875901881027288,0.1609919046829526,0.22760787970010013,0.32561215064972165,0.28645801003875165,0.49425329819343805,0.28142684063941686,0.16487380730558793,0.28105681279199002,0.10797759274678224,0.15514278365820208,0.21488511000477628 +0.34739920803300944,0.41092089022143902,0.23825267928884183,0.29466178543932825,0.51994276648941729,0.2794346052457653,0.23287245377028867,0.24966735023417791,0.47032987028623724,0.24050801780000283,0.21519807256847057,0.18130821382938803,0.12103809246275066,0.15995267897293769,0.18100981416210685,0.62201267069118749,0.72680982868355848,0.41802223807901023,0.6419604306367187,0.55634669620259058 +0.49244459135308521,0.50530283299633771,0.36099511477063717,0.35187145303677664,0.30277231452516834,0.36793799953168382,0.4251010728293696,0.57159238741563223,0.55355557949832068,0.51668543479130791,0.85320922607303573,0.97108118300501778,0.83772867317555066,0.87902344188190085,0.80761794032359668,0.98597115263122814,0.79345432290759554,0.9531502874408796,0.8025323560551374,0.83546604822327153 +0.24127498507906969,0.39730552131213148,0.24198825308158076,0.19542705262784504,0.49164331685674423,0.50945909610123896,0.53562546362835561,0.45229818698285185,0.48202905957762665,0.37402383395130956,0.51304993971230617,0.62918663699354316,0.52938822034998023,0.75745976697472228,0.53061004223719843,0.58502274186180869,0.49990700107310981,0.44637865073083777,0.40436588280304953,0.32800339420046853 +0.61006748027619961,0.47083967016194261,0.47524262509865861,0.59482892837680579,0.41156111831315823,0.7654157373204914,0.80611720329837055,0.74526091940185923,0.69444178393518075,0.82411393252541942,0.68655429414633218,0.9625906371559082,0.7156450135611131,0.74595969591211486,0.63601785111456299,0.6029795799017027,0.84224259191659501,0.79988794128141272,0.6372767534170054,0.57713592745175835 +0.32193249090261788,0.24558738140381262,0.17629110056893302,0.2867159750609426,0.32068339510748095,0.23642159611503585,0.31755151196895415,0.29876866573384475,0.30248130040197324,0.24790286975696874,0.26182065689013523,0.36473245862956721,0.22800001837556677,0.18085578242423869,0.2303392210701056,0.25724109945085222,0.18866588348517815,0.22586146448844246,0.28941336156776676,0.19736929982775736 +0.37391792084545578,0.55359715776241236,0.55605061300110414,0.66857791869438044,0.51447531718377271,0.81295414771405161,0.74134563566050471,0.62113075600335621,0.63850925892285559,0.92285243113306792,0.66705920886060199,0.5330080271102644,0.47541164762998894,0.63241247073002049,0.4166233937493522,0.75536914435321878,0.55764046052285576,0.70052368176957291,0.85408315158725034,0.63169265982638467 +0.32992523734852786,0.82114013600429725,0.4112557882298763,0.43346431990123369,0.41639728915066598,0.78413159183144887,0.69524383510516063,0.995,0.7745293536032426,0.64526773125556325,0.46856262043813729,0.51783153786775327,0.49524980341436431,0.82453711496655024,0.90099591103944587,0.73920797163516183,0.75884802295822473,0.88660235132079523,0.57257567276343302,0.93895137158355535 +0.91925578815894105,0.65578591102787653,0.70484494880530313,0.85508354415511079,0.71249047390541176,0.45085998033130603,0.4106939594171079,0.995,0.2953005178961346,0.45357682903197655,0.49121893578240849,0.4476038952109202,0.74587748621551064,0.40627777603936571,0.43100455734146331,0.85195525779907977,0.48439893606482654,0.47937357017118154,0.65616743369458186,0.62618718400652307 +0.63510553632756406,0.52476352831014328,0.88548975100178484,0.64925843171818676,0.63739409902315391,0.46388472574954331,0.41547903060798541,0.36908660163566909,0.37046466555800872,0.28608431920717392,0.57982950248379217,0.61151281480290121,0.356993703984401,0.5206106559212873,0.33564976084550585,0.73047620953162518,0.88656472330353753,0.60520627437343777,0.6516426454723353,0.52946561905169176 +0.30822217623302106,0.28241861181427208,0.34785627282770243,0.36635145938944158,0.29499375635146863,0.36204218990836989,0.31723886559965847,0.4449650277472123,0.45245041907756522,0.27479741922711121,0.32911501611467098,0.31682119319864199,0.44366700628879141,0.39319272063186744,0.31781953458097867,0.36070305529710001,0.4014382702508637,0.36671433481245408,0.48945751609382138,0.62046456132262118 +0.83755255518717731,0.50239258914281215,0.80288658176183358,0.58720004129823089,0.41138118194937384,0.55565965603577161,0.76435873476956129,0.64701748612368393,0.80572055832651945,0.69901513599831855,0.93776848984317906,0.76678396225964007,0.7730481883590038,0.88195624020590624,0.79849096305363232,0.93869004585522076,0.6337241486332521,0.84697676594097804,0.95070416498806254,0.83959798216944759 +0.18952257045658349,0.28334688934618063,0.27888697774980076,0.46110696059974304,0.18390368185065267,0.43165001276323733,0.2739003639832206,0.40294023512584437,0.50215096574690521,0.47018611721174058,0.26624569233267842,0.38055406058248809,0.52312901590901462,0.33705937588855506,0.27404838049632846,0.30124888948840112,0.28810035020109792,0.41090294654580201,0.36222653034681085,0.56643798196035477 +0.84747549300036773,0.90144319316869792,0.64300916404830888,0.74109007926159121,0.60733405483245595,0.98154247340775447,0.87952712829774249,0.87282762583743179,0.95502522889319585,0.9368823409721454,0.91823047502477351,0.89333902489494765,0.92951367899206294,0.69406327873659324,0.72796216171617445,0.94947591465757541,0.99460646124317997,0.97577827700091979,0.88314232515383662,0.99013700484313805 +0.84678861204344547,0.90303829087310972,0.84241472234981751,0.71804256798214761,0.81841246989713001,0.9349783304406325,0.4469585034984413,0.65542872648810302,0.49945266794604326,0.6308220824123778,0.74101798677520825,0.89017896264035812,0.74072417774080468,0.75814952303534699,0.97890381287772155,0.88838943106317536,0.79612364934202184,0.87054754482514385,0.91731189093203347,0.80964158272233133 +0.2535623173358546,0.27385374506532101,0.18224570058849288,0.5564627301233116,0.28038764114944142,0.12251206420095986,0.26996763514895428,0.10393235266861103,0.13614661489658622,0.23646480864001493,0.18231114079397598,0.19169555133284177,0.17560622298702191,0.14783399776077613,0.30004394622980141,0.20963287162063982,0.10585574752861936,0.1132395179907658,0.17013889471401472,0.15533661240794738 +0.90164998189871437,0.70107709003991425,0.73903061614330556,0.59776326670530067,0.4705907842004034,0.33189817397211419,0.39481085406492189,0.6088463056160307,0.47497422743483031,0.37036615856678889,0.57808466141555581,0.32490158759039761,0.47596938126800836,0.42228991938423216,0.34936561296877217,0.29564601612806307,0.66791327896994668,0.37636888022432663,0.29210778407718752,0.57920241050112531 +0.0065803266930931645,0.011683954748933875,0.014703383377904876,0.011676830740330891,0.008118614242054149,0.026325543564326336,0.012593779348430706,0.012743874665933522,0.014214292231685193,0.040242969216782394,0.005072846649061406,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0053939536082892132 +0.36149599047807845,0.51456174410015942,0.39168938110420737,0.47411453843197576,0.35339372986779971,0.38036186413971762,0.60190503031009268,0.43430740427502162,0.59871112435616047,0.38717291813875626,0.54784990384156773,0.47255811126216074,0.50666750949405748,0.46610070491259509,0.43130952656164995,0.33854420053997836,0.70683839042837693,0.61905530578280077,0.65008670532038537,0.58364649075314612 +0.48980646914812509,0.55194336592410953,0.4393185280280098,0.47902344853215378,0.67039683454054255,0.75800534102437989,0.75581273353202694,0.60976259056087512,0.82096118291796727,0.74419076503679915,0.31998853683689044,0.40142770620338081,0.29057933833600891,0.28060193156379454,0.29047185660290209,0.29332656527255835,0.73973331773643347,0.45350067296575075,0.50891543933661831,0.27179715194135279 +0.45185151540558954,0.52285311561760317,0.60131418908031298,0.29654751980545196,0.6673167184775004,0.22469763287687952,0.16632874817109328,0.16725376683991319,0.13908767692373411,0.1482666053773635,0.16112507375014345,0.20389403151678603,0.18316300251454143,0.14270027379497729,0.21867800147383279,0.1981062669338006,0.26871205480665544,0.24960501304210736,0.30720429319567855,0.36851878794984705 +0.95418266893846237,0.94506417311659707,0.74239848148437182,0.76651212383934464,0.90551187283251378,0.76275808711690196,0.9375304478986447,0.96965735567510536,0.70820414029462997,0.93797897944527264,0.86944359826264384,0.61889942635254058,0.8436188989926946,0.94317734791282493,0.72044329078344449,0.89926832442565041,0.98695347717824267,0.85597532915803964,0.89024002136380198,0.95796939706727902 +0.37110587782480198,0.40575925124683299,0.31872583113407754,0.41709559601895574,0.36742015102448516,0.30971721560563648,0.59122986351196138,0.64820571061610732,0.81846702163078056,0.46229006947346907,0.61848890752371888,0.51762909589886863,0.98264043617415209,0.74702817844164782,0.76135466801656071,0.75445854690630387,0.49217773482553173,0.62440163043590957,0.78237453455464567,0.51299888010095818 +0.45699284169536136,0.42091593788990861,0.3707426521627103,0.48114516632681881,0.31856380487171765,0.056032703914893713,0.043756258654254733,0.067865293897043794,0.04197805167540157,0.035902827303716051,0.07077290065620076,0.078440521733352947,0.057240406231479649,0.052999136068263973,0.071793302768694417,0.018251444545264527,0.033342011219423054,0.027356255336083931,0.02048156843932741,0.030670219673794647 +0.86886723780269748,0.97740615427270527,0.85994425987281597,0.90884310007362756,0.94494704661532936,0.64220977537817914,0.70216067996107501,0.74200205518286422,0.68536986359065522,0.68992176173311948,0.96008021070093941,0.56104724213936452,0.44880266478864506,0.53551820892501978,0.65776860196318032,0.62448036497117598,0.45264829975796972,0.41933969139765687,0.36925242778716655,0.72730667100750346 +0.33867941793324929,0.21336332578392128,0.41522086253630142,0.25007804859222282,0.30711828886071463,0.19509654259750994,0.47288905525352093,0.39427960322267513,0.29007176646110566,0.22452148176633169,0.17023195747960135,0.12547055539161439,0.18508529788486144,0.15796455992428815,0.11560286808102553,0.35233342058546774,0.29288915725666004,0.27597403663458281,0.38741336822591249,0.22737581110422977 +0.71729250159988656,0.91915626518104787,0.55608832209342374,0.63002723130970073,0.54382807525478294,0.67353775707790475,0.8406204346689703,0.73183281347142748,0.62958780785269819,0.56224576776902746,0.69145491425429884,0.86480438674501869,0.76542936358077873,0.75217639162144212,0.6903593375925513,0.90823971532183068,0.86891014894209295,0.86616560924816755,0.71424568486109441,0.78829083890036722 +0.70536522407669977,0.869074294486748,0.71451211848003016,0.65672404774446103,0.89970659304833478,0.79393099092977537,0.84187884046916361,0.9817018332685844,0.84305000658970208,0.65091831197085848,0.82137002674216231,0.69874428764764729,0.89788012311542331,0.87543509778756412,0.60947888478899781,0.92546976284817439,0.94801625931447342,0.73004549410344433,0.88300744405273879,0.85496786775321898 +0.97074484930621363,0.95209817200377389,0.96411752115172511,0.88183704422910236,0.92594909459910513,0.9007795211991233,0.76376611437528663,0.9063866920711835,0.76453810121239574,0.81045886224118135,0.84343918029053633,0.8657406032859245,0.89750412856373951,0.76539091434122863,0.9842301611031663,0.60521925252474562,0.995,0.88755872496192867,0.995,0.85941785393501047 +0.72674340507220458,0.56075511754027274,0.97947496164339753,0.59372179644885115,0.63972328890152552,0.25558000579498846,0.47810882540112998,0.51752259357216368,0.21637498601109034,0.21253744584285092,0.48779502653243412,0.43717382862306414,0.37064999086559258,0.33176224663712195,0.61195141068631698,0.4776845935563524,0.17093551261034756,0.21964618795035593,0.20928528826540438,0.21893738031747567 +0.17588193700677079,0.17708883622157728,0.18371674981473407,0.24753572850734654,0.24599076785810114,0.30017078878806613,0.17364017673835999,0.34510976601894572,0.25176335890502061,0.25296986119981307,0.28871480868337884,0.36267581216433509,0.19523504804081604,0.1551946764903567,0.26054366258502359,0.11849081949516813,0.097771779828669303,0.1171433928662626,0.087135776939508747,0.096228628701444371 +0.57144184658439245,0.63452603704689647,0.92319162047931758,0.72009583970119273,0.61690651373553174,0.43519918818188846,0.64734175576125974,0.38571785966343636,0.53056161837558591,0.90942378761145837,0.31617015754343059,0.52413056362641053,0.48802158345012958,0.33749959921826606,0.46393371173057946,0.74942153972980963,0.92615852465065518,0.66828463576505448,0.75056914415828935,0.72282802409016544 +0.37355216664701679,0.55136981074641167,0.51418998857196851,0.37355427633609722,0.34334403263178859,0.52676336852267891,0.56313752416964813,0.30470398111169938,0.50530895998229786,0.87469926870030534,0.18402998855544311,0.60393093984717572,0.32588543505790468,0.352887152073879,0.34532488470043315,0.27440863956683326,0.33502964071213798,0.3172628974840212,0.22816837415619257,0.26992937482266027 +0.55265842072320503,0.35063393259159553,0.49197097357746244,0.29719638561862183,0.18836456972983728,0.24626764354733263,0.28977939277255998,0.19330119584816371,0.21151814745638228,0.34870772292235669,0.73970882109542835,0.63488773708940394,0.76547638683359664,0.70251647033916731,0.56844637559221067,0.86143857683712954,0.84323598595733451,0.60481071751446691,0.96547582180527236,0.82844650949693532 +0.63401194197799127,0.71455252293058757,0.5516128228172138,0.65542015726935465,0.6752850638731539,0.88937251098958658,0.69123115339918428,0.71231976342564185,0.92249470413773826,0.96293420141827879,0.53476188174828232,0.57626682968953136,0.88960602265976407,0.55961968192451383,0.62751825091020585,0.67499729843974954,0.74641774391666471,0.89205361249897419,0.77245625557289654,0.99317261666983314 +0.23303839705707347,0.16912971080804998,0.19463291267431121,0.30044076005416109,0.17939266113203675,0.17880775730823267,0.12126197565686819,0.14065897794808327,0.17471611322854369,0.1438579943970911,0.19140444709197763,0.34993916240669842,0.17980260833562331,0.23920506456909613,0.23907160414667744,0.22691253881458834,0.18045456939252272,0.15368141198081128,0.23369117905677345,0.19667211740902532 +0.21122255418328126,0.17680805534671379,0.23158819214526885,0.11202902888727011,0.20421284967658046,0.83074156797257104,0.84574607297751392,0.94276798935533446,0.71110179625615133,0.54430745386218171,0.28375847134710325,0.26005528681133183,0.59343992605829832,0.2287126390440446,0.24381617609715214,0.33791597979559834,0.29485004417139271,0.28928060045537168,0.2149484556714206,0.24329827776362042 +0.18755705792945943,0.24002427571031132,0.31122611260595345,0.29441806049681973,0.23684524607868573,0.15225935234549495,0.16708710091152471,0.10793914589046459,0.1054579526138997,0.13321226742433856,0.17318424995902992,0.15895380839064627,0.20347005809869492,0.22653972475581899,0.3737210985707089,0.18941389484168916,0.12205157117292967,0.2309843404968169,0.12520593862770252,0.10167481619781386 +0.58392616507420703,0.66367869070864793,0.6010127381336402,0.41129594701006322,0.48410229065022714,0.44672089246493779,0.48805239064744765,0.44485682892587702,0.34461396965204671,0.77881693498394,0.70813165473041373,0.38468962914609833,0.56623071246283774,0.42509389763864769,0.40667385612547224,0.91137829975867701,0.84446894455972388,0.60891500287479328,0.67570146388867924,0.51550826977902253 +0.78672169272954151,0.88480204111328586,0.97925201093234837,0.84619528430417135,0.68472881666775087,0.80701611916755922,0.85490924527899137,0.81294280912181782,0.96371813242308024,0.8254699336014969,0.6945848619888928,0.73296557572107734,0.95414496719548036,0.6668630926462098,0.66390956214639918,0.88804242424989976,0.82293675586037662,0.8981202870664271,0.96674162754339832,0.97106931471463731 +0.71834108969894761,0.90544808222105055,0.72072981471763053,0.8097527417414212,0.63978378992778995,0.82320424913260914,0.81613001843369881,0.94380930101904814,0.87764940998219176,0.90172510513643145,0.88268332346295941,0.8363165006360298,0.8846681229850657,0.96700257575908288,0.87151010790780425,0.90624688519968077,0.73223105686476686,0.91362146927007026,0.69848269966154286,0.85569713242890144 +0.71465899967815771,0.28592532995749886,0.8820900009810213,0.22788319926377354,0.20429724855962134,0.42912401017144014,0.37458266704946142,0.3155316029357485,0.31777224300340123,0.27423682142659139,0.25141154031740953,0.21550328737976321,0.22614624168893308,0.51380296291263139,0.2002643407000449,0.31157334825755811,0.3662839850986353,0.35132293124180608,0.49668498716733278,0.39794771136934648 +0.41615740548879226,0.64986956840785226,0.51425495354355089,0.53608880724948682,0.550937970183633,0.24320461700311943,0.27174790543830091,0.22292043977690498,0.41242034178474157,0.30116644027132511,0.32847845938562387,0.4102958815747284,0.36825516078142367,0.56970150910279949,0.2964127850042364,0.39885693054010091,0.52419528589791142,0.49594548613061928,0.33772598429158007,0.35374898431491736 +0.17782179206062484,0.35503085596048028,0.10257541253337729,0.087159682398044822,0.23491273424418729,0.29170873333307118,0.13269216917620111,0.26978892414953204,0.14185331874900528,0.18289484051212351,0.16885963050874375,0.35940994346340593,0.12802403050467254,0.13144905817679461,0.11397568423996417,0.17933530350703139,0.17027338720050508,0.23325145427759858,0.1342284651456026,0.16512105407334501 +0.30023740521837494,0.35518891373378952,0.2838279305000313,0.41915776548250316,0.2850067733336959,0.29914840868465697,0.21432631275690328,0.3737611905793457,0.27332519919951831,0.2427555519826326,0.40079104257988213,0.25112873147908732,0.63017251151506304,0.37370852357227008,0.78360561140973195,0.35748833661072993,0.28916777174653391,0.48040168880792222,0.57305675603313722,0.32963662187735476 +0.43669836081096991,0.47617236418339642,0.45178589334446612,0.43883531197396625,0.59281471792074458,0.40853040950671515,0.57006925607372438,0.59425860487491899,0.29386738073902496,0.59061404732776457,0.35948476546335717,0.37005268182534201,0.42510915502208774,0.30110350937983538,0.40020526938162937,0.885079185831669,0.77406184105217102,0.72421333624296624,0.6286186180351212,0.68539298704242113 +0.3799819520246292,0.19753351387826051,0.16770971910741367,0.18911291960628934,0.16110425064561693,0.12512630818588025,0.21444661397787887,0.16964683239468012,0.14889310081792287,0.2193823719939515,0.58274274828713768,0.52089886235123672,0.4588466736448723,0.29893096298375077,0.41946642415631014,0.49284996560406952,0.33527313471872677,0.19119623197617977,0.33514466019051725,0.28553541493107187 +0.17198902342752506,0.45825438713178951,0.20650858834320487,0.28579253915131797,0.38358828080087159,0.19493995964749597,0.20015349378571839,0.13447520686767531,0.2849587030295242,0.1125100910752164,0.12249809374212962,0.17392373632042213,0.19616532071503068,0.59001174880151053,0.15235935146879195,0.070678195641943137,0.11348465825623721,0.064333316826528084,0.087164561660065101,0.068525140670302756 +0.42070569167031846,0.5735118847010765,0.44175241584105812,0.70038587731120605,0.53302253820494772,0.38933261781730355,0.58225225210132825,0.70572417713326152,0.60263082656406997,0.63353072570019231,0.43331951450526635,0.42767864672387812,0.40987201912430676,0.38083532761366856,0.49001213462853588,0.53410433704171423,0.95974863496364371,0.58071327890015667,0.50661210014814295,0.61956851149580006 +0.4824276860741441,0.54842500976204667,0.50448214071521003,0.30507452165309573,0.47243863840837502,0.78420144459146157,0.7929327695123396,0.95223394583038556,0.96025250013223951,0.99182111246425098,0.69134828176360741,0.49696915976951278,0.34559766530919472,0.45714059757804354,0.38220989998352217,0.60023306705443669,0.95557315804781151,0.66255200574431428,0.92605449345566915,0.64917567638229601 +0.32162044406029977,0.72909920613601165,0.19615313098191686,0.25089367420220476,0.30283178173552405,0.24533522051084605,0.52000049155673556,0.2040883111559873,0.41010420647413415,0.19630792790039159,0.64397487974241763,0.77886121130603181,0.59894706212538029,0.82701880373607817,0.49681621154563121,0.45711560937452739,0.38412339081795077,0.32408652951124012,0.47687850830559403,0.39316400721188666 +0.98879458969546319,0.96140520246219907,0.74869269292491503,0.62941054099424865,0.75852611469607378,0.90808490388467844,0.95497989465325528,0.69744445319178394,0.66199308024037551,0.68115449640204095,0.48624582142283251,0.97119889973585594,0.35971342400341461,0.48855260382160509,0.65983133955365403,0.7992539944086624,0.7310453017060794,0.92992446234037074,0.92204132117490312,0.995 +0.019077569952701646,0.018408622695856993,0.022724943599488241,0.032957472704127216,0.014393686141541486,0.018941824852463516,0.023969103191530089,0.044761088427507041,0.03009045828002584,0.035460801047312154,0.016501529663853438,0.012185864396697641,0.012785621588689924,0.013450396574749996,0.019449980671654887,0.041499151051505777,0.082044457564971182,0.055047188504883646,0.060455705134666353,0.051688462034499956 +0.45813085148266142,0.24290781456821547,0.19128513720866891,0.23511579232335816,0.32897165334897138,0.16337444763730796,0.08861378498329589,0.23296363698805103,0.13201726155251098,0.11442851888721566,0.7734388781279713,0.22852126782361193,0.2272871295806633,0.12615370469577852,0.20547556855204774,0.11797710286566745,0.096615265959798191,0.11899964293040106,0.090447968759697128,0.092243456800983961 +0.54052974533187892,0.56819169573938599,0.64143295165632785,0.44076764749474923,0.71044069142030342,0.97326623151295377,0.87205769693388757,0.92999622912786906,0.85201711630720367,0.8574870200209419,0.48133119046093864,0.60931201246777988,0.47516942994112576,0.56234249411205139,0.58585366192808175,0.53522682554955903,0.71794809127296677,0.56704317814823524,0.89152876894896993,0.80363118241586873 +0.29702975090972678,0.18283375694309315,0.15364969633243608,0.13606951410861601,0.1154034398752968,0.12649663753229484,0.11869533991288081,0.20095863595220684,0.12658245079153241,0.13324691731397981,0.53004342017676187,0.75420816080256792,0.88811960382388011,0.66925170891367758,0.43936390119933622,0.36116890674685026,0.39660587681902737,0.31636559515192997,0.19897674857222822,0.23439155543848611 +0.1763585713342731,0.1452482334709338,0.14870299318390831,0.11894496062086833,0.12298353907929283,0.095703912377732944,0.18999447850396792,0.1047911371911681,0.15152479259559071,0.12507882313998223,0.27118917362835038,0.53103014556143446,0.28712632160558982,0.29569755634896927,0.20306933224819476,0.34299121875802469,0.19288787991393591,0.19474764719675319,0.12978539907744144,0.93373399636697574 +0.7834768321075698,0.65722050934994924,0.92425498693371289,0.71934045217315967,0.9306009457995259,0.82543637423548544,0.67467805187673358,0.67433442434372304,0.96228572685799363,0.86668795651860964,0.65464162815716898,0.61853480408530748,0.46297477074577109,0.65112762182399841,0.75491097904210747,0.49044936742839768,0.58107754186844263,0.87967782982706888,0.84814065138938188,0.61582827770636472 +0.86147635110259957,0.74324014944402028,0.43645262093506876,0.42802371482078966,0.55999794776107015,0.69018033693400815,0.8093841683892774,0.86704916529757192,0.63157509614152774,0.74361524092063802,0.93107852637263278,0.81469972838362059,0.5456742644480288,0.68052299206658917,0.89594034568886538,0.52493072128273621,0.46987314161612015,0.97615715918195545,0.38595904433798928,0.43959671149095381 +0.88499396569008282,0.6765707158420744,0.94745561286592261,0.53289615790536915,0.95769556060024996,0.85677081432315316,0.60117432579303443,0.70349073420603203,0.96121794524886073,0.61130290278914079,0.94737813215949074,0.5880008571391856,0.62764361985272776,0.89506709426710307,0.79968273672144474,0.62503766253739512,0.62662440910625783,0.414729403044794,0.48611562068341108,0.77407823484143812 +0.84810984792495103,0.60957620219229891,0.62725099032269915,0.85271743589564741,0.4877775642355866,0.72645296996753517,0.53328005415995727,0.995,0.5756931831086709,0.68856867685138567,0.50806435654179394,0.95521761652672665,0.52651543955046187,0.64785427884101976,0.50986165116686633,0.72625040475024671,0.84899501140441214,0.71880983323798353,0.88452916254058278,0.66619344109156442 +0.77763869909774597,0.85724953031767959,0.76059207867285861,0.96506956154362644,0.97715926444106027,0.65898207993371338,0.72798368468666574,0.99072580251096776,0.63381792699473749,0.692455942432323,0.80405217206128876,0.60064569521767042,0.63938082473694313,0.65229237195646717,0.94058009603753534,0.60905397260557326,0.55598809575507468,0.91331635500191066,0.59538708432242593,0.71193976141354265 +0.44883787073225828,0.32896649483981927,0.36001691300296446,0.54207383115926477,0.45783121575069513,0.46678163669797457,0.50788931588429742,0.41388566218852646,0.47658458552520133,0.48783056085249288,0.40278206635433844,0.50666396600268881,0.92086736866230057,0.45455403439709824,0.57367321798401993,0.64345976749655043,0.67873940462823323,0.53513621875584916,0.73604021197845348,0.52590905374149677 +0.80024823931733069,0.49925141817882196,0.57358307395825625,0.55807230834599264,0.43561509208991456,0.58011237613317668,0.53278624650749229,0.61778523308158095,0.53937293817644072,0.62966984745248333,0.80723089760551969,0.74370412073327496,0.94740115528009505,0.74287889478177238,0.66959856747778379,0.4350684844187826,0.37159037927782501,0.4234956390084702,0.89259629609059077,0.63826707735604049 +0.42470838710610537,0.36513189793146195,0.26956285212860781,0.35225421712947408,0.38428640911303186,0.31847438808281542,0.39385022096987643,0.35574356165991378,0.37461524272353108,0.3532061415163808,0.41630414184424247,0.29055828771497533,0.43431821846935964,0.71729502405450385,0.27029054362709404,0.47922605240927585,0.45308328406745207,0.42923502941510999,0.69184191594648781,0.57415556475176999 +0.33756621102991469,0.24345487395198825,0.4001062521579149,0.40520980098095405,0.34194640405466925,0.81993287037191764,0.52871844487072439,0.5804363709408511,0.60143825569061082,0.62767923377940027,0.70576106385615622,0.91730348856930355,0.66714520140227107,0.85590430881814739,0.78093119039905745,0.61085288678131455,0.60663362444085955,0.85965827201390621,0.80437618920831566,0.49141463648666495 +0.98100896536187321,0.92486048616696803,0.82750034491514823,0.76510580570488484,0.93180495052038181,0.805492396604785,0.83057963628390219,0.92505396026244713,0.91535580166119024,0.70676330952543776,0.96646854064408183,0.72512777649423288,0.78831310026881751,0.80571754582822896,0.78476118277171447,0.79106744655191108,0.71393055857027488,0.89487425037884627,0.87037823950744164,0.89436845949926258 +0.42990264306014897,0.71561752850388682,0.56623866094262876,0.50700051542803182,0.62107363414198546,0.96118550676420811,0.88811444550032159,0.87336023208426194,0.85121421271620468,0.98393171795081946,0.88282390177350645,0.72197482347408271,0.77189310458825067,0.55893719718087798,0.68807906904755245,0.86041860814951854,0.89093144432568061,0.96332958697200011,0.67618215608909071,0.67631867440516524 +0.84130241924981297,0.62598866336057923,0.47545102332237038,0.48711993504911444,0.51793241450011251,0.17442178462193708,0.16713324068402782,0.2372041025118955,0.25556934109166124,0.23005150851324124,0.36737550737805014,0.35116725390299891,0.86884273505173792,0.52612190866007702,0.31199581834689699,0.36333851355548086,0.37657311034228552,0.43890728932485579,0.20709178430321998,0.52633058414155964 +0.47162670967303338,0.1866775833157357,0.36340669577596596,0.32799938074424217,0.30791185646619101,0.19026086842234038,0.12910406215248002,0.14854743451023258,0.12460569372895358,0.15089819501568283,0.11514510531513449,0.18009540271647173,0.14683167834992378,0.1287097745383704,0.11330779500656932,0.40732623963175374,0.27720859568595774,0.42404216928678595,0.32825214664657698,0.45550486284460467 +0.72185836247684032,0.83005898582841187,0.86916935330692624,0.8288841101035449,0.67075232270572371,0.57825044278009419,0.65810827276566397,0.82373371872277679,0.80020931273317053,0.54126736916013807,0.47134028882313395,0.57283535059628365,0.66945205112092554,0.76614473692690199,0.76115338734911042,0.8375116040624796,0.58239085178896843,0.98750309866921449,0.75980269122135058,0.90452203633611705 +0.25843866722232989,0.18246085772270476,0.20656538303102667,0.37271357657332949,0.1643086785914471,0.15676863301830538,0.12264813958452385,0.20865963238117716,0.10937616183042212,0.12914356341008501,0.21148742224988462,0.22161006140110254,0.22187297648192456,0.22103522379153842,0.30920375668667127,0.14180899200022937,0.11656857900391185,0.13758797920989307,0.10984679781243289,0.19377415234216178 +0.32433206738877507,0.27012246099497172,0.43256964516336605,0.26458591627356987,0.29089402426092748,0.35270850179758395,0.23315561105923893,0.3493370084800661,0.24784919479076278,0.20201054923951425,0.18278723606282435,0.13337593000741763,0.16032739494982973,0.15207393099083172,0.14453625240640877,0.29751142502801931,0.64287613040624159,0.2721052821663057,0.34641325538549794,0.33004957213245367 +0.54388591889785942,0.75370247259707579,0.91322529232376082,0.90661908153995474,0.76111200104628496,0.27723967413988021,0.23099403989518422,0.43560410630895413,0.21067505903754644,0.18632027677007806,0.3225964725451963,0.29968636954020694,0.23174145570480112,0.37222313029392579,0.24555435211514587,0.60455298890894793,0.49042899576971971,0.66874046150143729,0.5493025540520986,0.80301214310255598 +0.76143435865435327,0.51196448410229822,0.52845588937763577,0.56942219768204105,0.6620504990532553,0.72783909437845529,0.77940564796464806,0.66499722618599699,0.66928664163737728,0.995,0.64481412913346781,0.773067314471102,0.89253215822805854,0.92127440364707247,0.92910345438104069,0.82689425709895159,0.96673672199534155,0.93097581647050753,0.87167794660618714,0.97065849457395748 +0.33911659276591266,0.3902070405864449,0.45743512222185867,0.49500429840049337,0.3519535073615504,0.55488254560808803,0.42922460270416057,0.43691621146245324,0.48099009269539744,0.43919029550777472,0.28094137123611523,0.31431072835942669,0.20209507399947735,0.36370796721825782,0.26242270150215596,0.48143261709214252,0.59376908820791952,0.40359185875378051,0.38344076712699304,0.4849204552793237 +0.99265613614790871,0.97448181339366535,0.73926711771688558,0.95424360966732669,0.995,0.87143487688914101,0.81380666949223845,0.88760980374150089,0.90727938117776175,0.91748529088456676,0.72093637524483056,0.74799905628607333,0.97286884981701616,0.74646375701293866,0.87919126038172091,0.89554339001633942,0.78718083672793226,0.79777280455822475,0.90902377416605151,0.95966088898294999 +0.24311345352108327,0.33784774877737395,0.35620095623534315,0.34887113995007063,0.3658510846785521,0.30451574179601132,0.16762246426605232,0.35378183381545442,0.19506404738163777,0.19333379306010018,0.5444421008593836,0.53357208955254698,0.84395613246730405,0.92065775123711568,0.71490872407891326,0.39188909510040931,0.32756057859749416,0.32516689070896088,0.27027396914149154,0.32197876868836189 +0.51501662262504899,0.70215813098707147,0.72007440417518576,0.35844154105961362,0.305691190245304,0.99241252206631336,0.79405167583457503,0.74283400880098027,0.7178152484771918,0.8437645059102169,0.97494893617031508,0.87877533128605223,0.93006216077331716,0.87188102346364804,0.76190905698586076,0.7683409115886749,0.98382569626901584,0.82405057520926306,0.81490247684208239,0.79582372813974744 +0.85810228372670738,0.51848784768166134,0.46115293255920731,0.72626508437215298,0.86017348097312729,0.45202640670361205,0.75579544892426975,0.51928818226585238,0.35109209614297643,0.53764190959430713,0.69789607771079687,0.83043934078597681,0.82965766930995544,0.87029057767312634,0.66317691795833555,0.82631245189914149,0.52315588021106718,0.80011300224075088,0.69810588544902075,0.54387058322071979 +0.028259596192113511,0.032050025483802869,0.050827355456064142,0.035311708811694584,0.028423969579555976,0.026389306783610841,0.029857578173346021,0.032465709311704248,0.031023359308240846,0.024186619137511221,0.025287585837899928,0.046266706197517181,0.077893525333836727,0.052031750940949716,0.036039808419438449,0.031039968568947033,0.025035821940463051,0.023926391273593979,0.021929709435075204,0.05319018431931654 +0.38818310668520312,0.45854812960818209,0.43045035077209304,0.31179806976768226,0.82406709818619794,0.62597546629704881,0.79689178853690201,0.85810349052430257,0.52720016226347943,0.53362951281350379,0.67679639730859853,0.907326092368684,0.67760694931486565,0.91956612134471705,0.46467795714312238,0.84955396470164291,0.54653505333489283,0.82482200650418314,0.70062601035071037,0.49910218528117684 +0.40127719356485703,0.53572946601336002,0.74912636381135789,0.43402432135009661,0.49296968573696492,0.65958544780425366,0.51939914459629422,0.58168946050940507,0.40093638108504848,0.7207670261963991,0.31499389269006184,0.45919112959982222,0.46830850207382174,0.3856388382566836,0.8630399705073597,0.54276782170029758,0.62844099366250428,0.57363321645534249,0.59330755495232046,0.46059877143079664 +0.82639896819145786,0.96054813017890028,0.90259117540255418,0.75408776010084422,0.97666426408964524,0.97990398101502096,0.97692266308020637,0.86783097041096757,0.82897630256076693,0.83936969623324464,0.96229779441781238,0.8669734558752028,0.85921019566364298,0.90286089311507156,0.97492121364488005,0.85092521852710046,0.995,0.72137875624924097,0.60644366171963948,0.62297531513342419 +0.21149502443734675,0.28449169383112377,0.29873634341411137,0.29602416536506032,0.35079939622756151,0.22150266270797839,0.13587130289717167,0.18356634679529293,0.29393237419733731,0.16451458473001435,0.72411888064298879,0.81107803211919949,0.87301411332006973,0.88618007520627229,0.87132152831760801,0.16474722499147829,0.26574596880523199,0.10371038121710666,0.10553392699792544,0.15399492372744356 +0.57624714602666638,0.65865818535118947,0.54029805243591911,0.46294486591002998,0.47462089323344547,0.30653814449008576,0.60523336092260716,0.4711385875299739,0.39159202906802631,0.30656873308326082,0.63258043731186242,0.61395238341886516,0.56307942590448545,0.71278912902557157,0.60995653889993717,0.20642756639972354,0.23441833016348029,0.26612824483769271,0.33903494373683618,0.4601283819802563 +0.30669175247260172,0.18194428042339797,0.30295235344696747,0.20613076970846106,0.39775512328325191,0.53693132472791361,0.5203582076169927,0.58279198447366276,0.51911984026392455,0.79644585731906603,0.29214599085888077,0.20919914937767245,0.21623424955606499,0.26853882501442128,0.51995854520658535,0.51651964029138797,0.46092735701033294,0.470061382610926,0.23981664142447223,0.31926946666934264 +0.96002165456482103,0.98918390736357398,0.94142740326441188,0.995,0.93440594652321862,0.97397723062557506,0.995,0.93848247581137334,0.8898324511354655,0.88062170299523856,0.80788309931257096,0.8821690786752312,0.94818225463113615,0.92394364049379796,0.97931405374478864,0.85236904358675003,0.77602059362038123,0.65986224271930571,0.85183657352415298,0.92060338708908296 +0.55125957023821426,0.88354858443302531,0.74065120811388208,0.85356473459602922,0.85073088306843458,0.30945293445031863,0.32601696498820609,0.23005369332075298,0.54889848327823099,0.37960743470661723,0.44369768118016267,0.40351900793522782,0.36075851413448429,0.58647149220188133,0.73976612900758865,0.33250701472709154,0.7082056021678903,0.96797347273661793,0.64499860261356012,0.58917392510430266 +0.3711526046608587,0.58506356021382966,0.47239011154637989,0.31012593518672044,0.42939345035379184,0.15565428242860524,0.33992247337259113,0.20695371658871659,0.38366403692128326,0.20702221685889083,0.15463505789968146,0.12278013905636681,0.10360281545193971,0.16839681756369654,0.25145773625247081,0.56435344935920573,0.30601285896660113,0.54024892627135401,0.40843926004882897,0.31822877821349121 +0.89302022387365076,0.74132537423451816,0.54700070115967203,0.45245432132433189,0.43813873317399948,0.75842642293193985,0.65908797092327209,0.65693771422433844,0.6981441541548955,0.63997437553352521,0.41042857369419006,0.79931807540320854,0.57168936301117934,0.32766695306795846,0.40633387595514386,0.76162812814853864,0.84047457584397334,0.72855904742124133,0.67317946893157954,0.64915813918749476 +0.72532886800594987,0.82168631587794794,0.85002411867131766,0.83060898968268204,0.6788704278683011,0.72029917575963964,0.55797425993721406,0.71696488324180085,0.61250477422298621,0.50029730526807159,0.98595237506332667,0.97945529436554502,0.86656567971175769,0.95209370223049106,0.77233680830703377,0.88500181565286451,0.79164332214463184,0.70550335957055021,0.93222106738958299,0.86606409008568819 +0.75639148716163074,0.74792430811794763,0.53717912236076015,0.96448309847344105,0.85027349160652343,0.49105115279008077,0.31308475222955162,0.29163980111484733,0.3021399283036903,0.50758484364016365,0.67705797633137466,0.62024009124301083,0.71096219245241998,0.50192569877949922,0.91036040455891165,0.94065845794814829,0.87155570128968762,0.77689203584555344,0.90079769102173812,0.90431454158489322 +0.20336447286266143,0.12789827402120568,0.095313473291084055,0.15938866921150599,0.16742583419860627,0.16588244395089916,0.18419713683379599,0.10738590580936365,0.17522665139486571,0.2534771483010092,0.14731366942396909,0.10035907709519824,0.14353353871963198,0.093372183395519739,0.10207697837247288,0.44928638016797695,0.4302300017407521,0.4261904638633332,0.40253659993604768,0.68891725354706912 +0.94608985005444224,0.95262868781299892,0.82452497117326884,0.51330453896808326,0.72236600446027655,0.63919183177973282,0.54850843793915505,0.65251903054992266,0.85668569309409404,0.73143899512518229,0.38164983477062747,0.71501944259150652,0.55471230711919595,0.58160459028686839,0.68367315963751563,0.70445972907023624,0.48811319437703549,0.50407520068643441,0.80018496289808216,0.42608060258167013 +0.51424577461310028,0.54893425294595022,0.4065072805016901,0.79237800887571141,0.86069020259184903,0.51492692163343279,0.63874091562717428,0.52716003753390528,0.37850310976514923,0.44122038547257592,0.95612880351815299,0.53880150170936292,0.79267738369293439,0.7548226584915203,0.66512900716027301,0.53178139940750269,0.74819819902671381,0.60570016868455756,0.67152080552972071,0.66264241836406357 +0.83617757344239707,0.89830547190763899,0.57560039205360591,0.49401854587276339,0.56182418607930984,0.76564322926511741,0.38326249982261484,0.27946146649671771,0.39345699227469311,0.49389882549346226,0.3866037826856763,0.50936484511378033,0.81390984209113626,0.48685059904333894,0.42255329985979462,0.45447916371146962,0.51947925537635031,0.88914725802654582,0.39189910412705459,0.80528533062096896 +0.83955749855876072,0.92544809731704414,0.87842782253187013,0.9893072391838954,0.96658210718503723,0.91425422966481129,0.74562792370824849,0.80080117045611698,0.76735829794554244,0.93064961417558922,0.90774858116457025,0.66140764640626437,0.6267808546564213,0.46640839842406523,0.81273202657379151,0.88038973944175747,0.76805697604864043,0.92442049963908601,0.96126031659320943,0.92425995933551131 +0.58975363213160137,0.87433259677194552,0.86279140136036114,0.74162531529812059,0.88604807625669946,0.5229556508237172,0.79796683192554763,0.92928321290411231,0.61826931199135726,0.754422651862238,0.80992641059567028,0.38877990952183217,0.49295292429088866,0.48605924603607475,0.38946414805334362,0.31710869997589874,0.89493061699926701,0.3309567134988608,0.31420153201138662,0.47631364982334284 +0.53206134368506863,0.81334928128963357,0.42295344944039936,0.68488837864569085,0.525777309712401,0.79416840589338911,0.53735351387284924,0.48643589353564565,0.57922215886189155,0.69036426120022798,0.87871993691799877,0.82186686660475072,0.88216659454516022,0.59805062240181894,0.74912724252478724,0.91993400915439805,0.55551877171298947,0.71597692799396784,0.86787743293398878,0.54327283260664583 +0.40702107870035525,0.3498322652525685,0.57768721242556564,0.91816745292142998,0.7915271544800121,0.81606579816952429,0.47925366312177675,0.58433329701225301,0.67728677239564261,0.91910598551403866,0.55464870429742574,0.68386522951665285,0.57887041022808861,0.7257837655480488,0.68204826724110945,0.71273375402707395,0.95259811448751142,0.64800693714668267,0.8039433723710141,0.78710447516961424 +0.19066687092623819,0.1063032543360463,0.22162040378702694,0.26253394148650949,0.14657383633232687,0.25464910170991351,0.14110268204038062,0.25392326935327469,0.2010723594475288,0.18867869218765354,0.22017259831196478,0.083000458999425306,0.11768925585757166,0.14951826121404824,0.37390005998568926,0.11502971769715299,0.12649157322046545,0.09684937290135702,0.10414822889612907,0.12079104214961826 +0.36727306250215108,0.88760625317178299,0.71470439816571651,0.32102380006481668,0.63023391093658987,0.42171945741991651,0.46521588628431226,0.41359856403458312,0.54323166154217672,0.61001581986940034,0.50074185061682264,0.44006070497798866,0.68863776776890984,0.39631921936167763,0.45985025873017066,0.82489124037224271,0.76083411518623867,0.69380345877253502,0.73147408665702573,0.49598025351809871 +0.81517815844358288,0.96066793612904955,0.98301680866242647,0.82321755458441404,0.94576676299357298,0.44137912062371337,0.70723903547461953,0.45175428247927013,0.64880872609361484,0.4120961470625909,0.37432097161179967,0.33635935023350322,0.32566431276286062,0.27707044213856863,0.28202981462200971,0.26068443248586542,0.28105570486810988,0.50831630849140674,0.23800402575148311,0.20569824025150563 +0.74767419457004158,0.75476934958599995,0.96927038383888398,0.82363771100932548,0.68274235346568424,0.44474906875607634,0.43007177863270901,0.57428614540983813,0.43904222991230457,0.66678441199758676,0.89084826658138105,0.69315626784029638,0.75264202281050518,0.71674617460883827,0.50927464791732702,0.49995576222123228,0.63124461592732384,0.72792574975374247,0.49740389763280374,0.89615662671403629 +0.80129324689911752,0.44786417194909844,0.83417628368596497,0.84917523430342656,0.51344759916725413,0.48584056415944388,0.50623391320714861,0.4830752646739721,0.48119228396927743,0.44570146550007106,0.47320869782286989,0.34531951762391677,0.33483028071177146,0.48154667318554534,0.57442297852820157,0.27867180806829261,0.21837410402870816,0.26559101058576734,0.42201656261315162,0.20523727792182114 +0.69161285956099583,0.5748193540816755,0.64910472554352672,0.59125905677368351,0.93634261541955532,0.40231579549754604,0.41499240921287539,0.47101813218517313,0.48625887840633841,0.40429752076596726,0.59677778836260198,0.50055646604806114,0.41081325569403915,0.42820273806875309,0.52456731104444554,0.64871198744396663,0.51655119800237981,0.84824512329987523,0.37649732927847845,0.50179798788739816 +0.45339137496369919,0.38976855976526892,0.61006250541404161,0.39975217025787119,0.32443513866960849,0.35902885644185689,0.23854332475374371,0.19874574169276241,0.19940855142878325,0.24108864271023092,0.19206228121101446,0.19317369099834264,0.10275870055027241,0.1583969880095254,0.20485934271606598,0.61739952410216392,0.61585943847708968,0.39557641468137933,0.57184778354546184,0.95711143866743464 +0.9333772816920759,0.72410183098327496,0.96328645801322532,0.76818187635208124,0.82411465014086138,0.95616582784357917,0.76691690058309059,0.8500057196445413,0.80810023931383146,0.70732462821274178,0.46964818900037147,0.74757865976398763,0.45405538862111888,0.57521640052987766,0.52800945836767499,0.88848877942568516,0.86021094351119476,0.89932739858670807,0.87986438966312663,0.93358724003988558 +0.62805793577932467,0.94304309476767367,0.63947425698175664,0.88543885049722659,0.74614174482658036,0.47448497369211251,0.71515676690570285,0.7869775314882318,0.59842679486618922,0.46326123625447019,0.73634664853568255,0.54805111907307658,0.56731843213219546,0.48002536017694308,0.48782414991658857,0.78269814305449315,0.58063141182760547,0.58519151287172699,0.42231840013155897,0.48183816430483939 +0.55803256029703607,0.87472075225724732,0.35629303614362723,0.36509837677459561,0.45565237948546794,0.85153776623870725,0.32033326982181837,0.35062551482670945,0.3570861111266338,0.48636528972729454,0.44435153398865418,0.58773778970717772,0.77098496367302594,0.50070311182142413,0.65513397289385333,0.59160522299889717,0.49170343018213691,0.38649039280420544,0.57087539873197901,0.56057377973274569 +0.76390314479131605,0.88379356093357009,0.77288824083462115,0.91402392918330144,0.91936945418456262,0.54157670399864044,0.79122056322359702,0.62684324977106232,0.46530984695997818,0.67946483242368216,0.96494402110825095,0.46277055781525606,0.54286782803511358,0.80833065218260192,0.70615849265887587,0.76179987111881353,0.89091484024745315,0.88966882615799292,0.81847677604183433,0.68471232267085391 +0.87554442037641,0.84585909627813083,0.67183485241629726,0.9636435623295927,0.78481481045559776,0.81003797080136808,0.93005205155020332,0.96685504032419956,0.78077406751006151,0.96550443303680289,0.83149474777050958,0.95209074899886237,0.97171899967524811,0.94131132324783662,0.99414428265980859,0.99045346122106048,0.99461117442518643,0.73802527255115347,0.83691457255843704,0.9287310332993618 +0.47074680711034361,0.33032349016478812,0.21427233614106797,0.26574688310915673,0.2573041792380007,0.86585040213965225,0.75884602839513515,0.74063286312371601,0.76839752949360751,0.96950064735812114,0.2160580804256223,0.22772507295473876,0.26886772026482775,0.1900965302520434,0.21833450923394146,0.31843576618665742,0.42519558019717107,0.29358546025750709,0.32981098834800232,0.34363222777271485 +0.50143499175485928,0.46557550416059945,0.64948501317707208,0.36423750743630584,0.54042896130320617,0.23601231950731333,0.23008429450798926,0.54541164905171813,0.29891349101380604,0.30546112998264419,0.25630843907947454,0.46893701246043029,0.23273347868808514,0.28720102989578161,0.72919336709624816,0.30476882611369727,0.30551320760371442,0.31364699375862753,0.23263106573752088,0.26924860057294675 +0.049204007374866396,0.020092373085493116,0.014258680112796936,0.04126341359522108,0.021665553353752441,0.018056985091102654,0.028509277447843907,0.022731614508152781,0.016318639279099025,0.023123298807643723,0.015928321397139979,0.018993318694838737,0.017089010685724264,0.03206936001146541,0.019341441780823965,0.01718306100535108,0.023828765361923233,0.013135684182702553,0.014225002712117622,0.027233686528063981 +0.17811416684428499,0.20438592442153122,0.13666230119560882,0.21664453421371663,0.095855423148059657,0.68290776653283725,0.46002022997840192,0.40615134003776887,0.54222855717081975,0.48290683865095518,0.1698786002253794,0.11893775152866615,0.093215540790639886,0.12041325902083307,0.16595190522975994,0.17623133489526541,0.25073832597872381,0.27788583108186349,0.13197072306869118,0.30989756411590091 +0.060028276423835514,0.045067094276544324,0.061081962185098315,0.056804156488605692,0.08873256911638687,0.014861641976153316,0.010750184884992834,0.0098364937273413434,0.0095804457335548592,0.011897122205078586,0.040487455970609737,0.055518938839315204,0.031907551211892912,0.041299242163840663,0.033012162332135005,0.013755442675517957,0.019780080489400664,0.012034562978821311,0.026402047420407582,0.011389602105440919 +0.69860836916276203,0.81176572060154528,0.49445748954662466,0.77047770035511065,0.97307649089297488,0.90985997798618246,0.71714734434160932,0.86750050598702422,0.84660945117435893,0.81535616498319474,0.37070408079217121,0.44728242401193197,0.70707671242281434,0.48024838091488031,0.55720753807677881,0.42456055193318021,0.66390049379138782,0.98102557352789088,0.8640999280205206,0.39225847368398536 +0.60164021169479387,0.78499452048993335,0.82694155071103059,0.5402253639801412,0.44044505840219816,0.42764058177903336,0.42025863041396749,0.31850943953208927,0.51598075761509321,0.32393064276193512,0.2027783170867847,0.23539431845724598,0.25867850437497591,0.27505530751499829,0.25339505618764974,0.43622763755061505,0.21954659720701863,0.28208016318395207,0.29356367591172133,0.24282910338459843 +0.0050000000000000001,0.0056543936583238145,0.0057055657073678623,0.0050000000000000001,0.0061167930611293999,0.0075701810601392213,0.0072256134537202876,0.0064706094513433902,0.0065098691112242405,0.020376671684676554,0.0062876611804619084,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0052447743680777981,0.0053877651313055325,0.012685253413742738,0.0062548166974288012,0.0093579089039103093 +0.15686642153707928,0.1818064884032575,0.76308425134084312,0.1910153373656899,0.22632947764834041,0.2069293754731171,0.26175151971264959,0.2891279824780153,0.28225143985388729,0.24887115522690306,0.4656069956669846,0.60511853482777744,0.82629827867520211,0.4319019944446123,0.72039997392172694,0.47297825780023101,0.61642424860168621,0.43221520828675553,0.41533561322975815,0.30448520713039845 +0.32737476217215256,0.27626978445580425,0.34480302112278516,0.23472319091612465,0.77976526374407773,0.12834934686332494,0.22297370644010969,0.1851157619794537,0.20965065624445328,0.21366114637890829,0.21200086528010642,0.22181637099598514,0.13754079995315885,0.15267266648813219,0.12126641422472026,0.19862775011786005,0.40086464504665481,0.23507866308445255,0.2022813022065261,0.16323641554753685 +0.27913735072468748,0.26063049809195304,0.19459277354551305,0.16555533193972194,0.16568454919807038,0.13067972520041488,0.14640152689410657,0.24054122311493023,0.1601986734631819,0.2337468254598018,0.19437053221344089,0.44290013005900569,0.12186234550310616,0.14786768483981286,0.19058810470156734,0.32064684290169398,0.17470934617253012,0.32128626335965255,0.18355772387669494,0.20489602004185295 +0.40528399679179888,0.48425942464859062,0.54019582883433714,0.46243515180053141,0.51727109106988767,0.29350225123785972,0.31070882737789712,0.26837293090802788,0.2716280192967262,0.26942356647867038,0.33659899280417888,0.20156727669052132,0.3307761732101796,0.33301185345405021,0.29120991187008249,0.85059231710120153,0.61839613936438265,0.4660984761222427,0.34130204518808666,0.27145142373805503 +0.75038948539538819,0.64515387445434003,0.65829759598939253,0.61394903049589777,0.90450740664722651,0.56363526796603347,0.8274909646237536,0.70278808449984675,0.62748539175318119,0.94056565360317945,0.71970933577117147,0.5655094852960767,0.74888762820985177,0.59965214598875938,0.48775969839767191,0.43956657227177232,0.58160934399890907,0.60766184614534846,0.33218305846800239,0.29285367362296405 +0.49881097483562092,0.33414907677835992,0.37998625018131527,0.40128140328851825,0.40264893375343563,0.58787336714752991,0.42376563968016201,0.58101257624185931,0.72593596617180689,0.54943906861548419,0.19239915256019827,0.20346938234698578,0.36272270050354566,0.2020854162758299,0.18610425040964923,0.28671952925515132,0.45062628964817891,0.453240231726801,0.33435473592143189,0.3537998851059973 +0.11972471865512489,0.11267405968164743,0.11688755231544742,0.14845134221491682,0.095577318632193015,0.23700495621281326,0.28123678227474475,0.25774577921053354,0.23732988731379381,0.17276440938810031,0.053370077750123354,0.053610746837476228,0.070502364159407804,0.16831884337657377,0.071484992287140142,0.1270362283840028,0.21611904912733887,0.16894128981522047,0.12101275530076189,0.14281969676530964 +0.38657786285015006,0.3325880053251819,0.41042006743761361,0.51921982083370743,0.40024679495710319,0.24769110952365972,0.52916613501388909,0.26030406068045797,0.24418930109054751,0.36326957461039416,0.64493432244617244,0.30954536560348156,0.40631077666202464,0.25958249873463313,0.28856474059677611,0.63613523230632907,0.76110277760180489,0.75749994190820502,0.72368880468777241,0.69492064558356426 +0.034282072488546159,0.02492811105792149,0.030937615635255458,0.024229960294193706,0.035995861787665451,0.042544929522876106,0.067500656269509685,0.037217715234770993,0.044102206563113491,0.036583736429654491,0.041235920175708651,0.042975707302544165,0.043667992420373898,0.039593025533886987,0.036792618979614014,0.059023102460505086,0.060601095671990179,0.05960846179390817,0.098245743619503056,0.048647493701197642 +0.89537329944364819,0.91239727805977366,0.85886742819854889,0.80132828712624538,0.84953746995711288,0.81949662471369988,0.90486210230618302,0.87722258084093985,0.74723849024231315,0.99259069157414004,0.74892826430841664,0.66842043485097824,0.86400997316906958,0.65820107548729745,0.85712883685923014,0.6918018652254283,0.88738022254441573,0.76268988978192442,0.97104244751018642,0.78979174831457633 +0.42023109639717504,0.48312689007500353,0.49961250614682534,0.46399386788039454,0.47599142973599196,0.26513809505685321,0.32337938436293651,0.43353067160755965,0.3908251279021559,0.27820289638704049,0.26925232729516219,0.61278703813717161,0.3265320381502112,0.38330514020673762,0.29508403425833551,0.26338042892194435,0.54166061229582452,0.18803795330126905,0.14889312204634939,0.17998955929566404 +0.088490993262508019,0.16030693849162694,0.080631395311600171,0.062131346702584973,0.13450051117162745,0.21785092784329457,0.14635816070317628,0.13168811920120954,0.089969387699406753,0.15160873563577673,0.16797421568700591,0.13415694999050071,0.064876628464195604,0.059230701351389158,0.10889491167949168,0.0587884315345331,0.069042597526935048,0.055375718880536884,0.051954853384353523,0.067481248939989608 +0.095300192322177568,0.15076973434079127,0.080987576672298348,0.10963417973327806,0.1057485972827823,0.16667620061945237,0.14688831693995702,0.11181199505961349,0.16583174609182522,0.14882761817866808,0.28164643636043146,0.21990599681037795,0.1400291509910046,0.17527860293433997,0.15992479950722427,0.15361703610665425,0.27555113308703133,0.27417600618229693,0.10342201967411652,0.11079554804797352 +0.42970406373634318,0.40315995046435049,0.48975343697879253,0.64190529941557217,0.54326361359665198,0.84900532040343835,0.82001009565230965,0.98956405715989326,0.8331816835515391,0.81605402821283823,0.70831136396994154,0.81461826202191934,0.67517640867665318,0.5402807590428752,0.48307290203161574,0.28679062760239254,0.57232174694593629,0.35956403882928523,0.572236778771119,0.39232669537615805 +0.52059115961574498,0.4291867332490652,0.56364491412632767,0.41528658956454406,0.4377262273698298,0.27830048426205117,0.19705361468585947,0.23460898529889029,0.23340456588011518,0.76484268131502686,0.40520704238753874,0.32665840963581549,0.35747708957598423,0.62315569307024166,0.33595468010009633,0.23948519899661572,0.44743085197198318,0.33592476458597043,0.32408288840399735,0.31485367065389747 +0.25438413403333238,0.35396722838208844,0.22714831075405081,0.26255201511229692,0.22106252989245062,0.3356525512728481,0.23755083832875129,0.32599590170188142,0.39499202138565925,0.34657300815643205,0.7449373342623018,0.59207688308912709,0.55163255438365844,0.75930692796103272,0.76443184828855371,0.64878921298928471,0.81138775233366456,0.57322155409280784,0.65267657417634306,0.47033587269181426 +0.24757133141079263,0.49151544495619204,0.40767807578232063,0.25579931418293395,0.42016030539482579,0.93346344104961843,0.48016177621213907,0.45661024477208645,0.57684729345273367,0.35998300265384148,0.57160134000679297,0.48623464557054635,0.34314516072137585,0.52979927606856636,0.98260431892728384,0.58916247005473388,0.64406429744888027,0.58574478993400791,0.56611228809899805,0.74567366652395317 +0.5226991590622474,0.50613495672150555,0.96160305814662184,0.56929266770876596,0.78797656575004893,0.73067350761804384,0.88430444123137686,0.83682114917318917,0.63548141998536134,0.79625258210358485,0.61705828234748328,0.81552404539614876,0.68221299789622136,0.62472544575741895,0.47973602644098107,0.84871949487316034,0.76189037207725918,0.69250607512198692,0.79340712693442805,0.67968609655567636 +0.71385582374610068,0.77560235145111767,0.59583490196795241,0.48969189601139385,0.57640611382603679,0.9288787132593771,0.98089132090910514,0.86727688761356458,0.91561564178232779,0.96571914595876629,0.56505812996884996,0.75029176895853122,0.88606114670240466,0.79874532144765675,0.57669421177521529,0.46612066018649062,0.7262287006996293,0.83714637164626049,0.70617255891705277,0.64256105942548658 +0.34674996177653233,0.32375264414164567,0.38702339361806593,0.23315028867114346,0.35372956170395192,0.4579023968241972,0.38454352525617874,0.46506924665887034,0.43019802916426819,0.372099541854853,0.29569604081263356,0.34303778936536733,0.45518202409590508,0.20306450879945614,0.30506827032177991,0.35907333424946014,0.7907350820959208,0.68265240571691821,0.33276618763621069,0.455631820474658 +0.3013986806967166,0.24673428998907168,0.35009213254686306,0.30985292415699472,0.4457989778583959,0.26650162943430244,0.23017861508885881,0.38281998302222797,0.53449360099066834,0.30181411561003391,0.24527947842276659,0.69522139588730836,0.47783463411239518,0.28988805192688039,0.44959778601446848,0.22710971826956328,0.47668196245050909,0.34431793676925365,0.19031993882415227,0.23280189304467788 +0.88456993233384451,0.92001215640091005,0.74688200907059077,0.98581501113514158,0.86293169983479145,0.52550141270862261,0.40041460891032876,0.37805866554777134,0.56263032953473902,0.46871906290730792,0.63720864031708946,0.50632905434991016,0.4804158680343672,0.54574660573415257,0.39772898682160185,0.85860035659435541,0.95591430351310447,0.8646370650327958,0.73576183425613528,0.91275382077851264 +0.54692778542504294,0.76576958416946561,0.79580127048729876,0.70015865586190007,0.82858322049670385,0.55293896553840938,0.54066897637470834,0.51688232319115734,0.57113524860993681,0.51502288191908274,0.55443034205961894,0.56626249937829409,0.97788266434652638,0.78672529270410652,0.52860928761098791,0.53403963064197857,0.82939952565009922,0.69817397155024963,0.63621477524030989,0.63302082436127205 +0.58156521402430472,0.6145800122365882,0.64828677575687632,0.70247722440992233,0.93228493188749872,0.90949222697505916,0.69391176768852525,0.57803936105199871,0.86631076598593693,0.61177689522214318,0.57506032650655448,0.29945966648823885,0.34233654689094362,0.92338452808030125,0.47711509565982929,0.42095214937628661,0.26235815066338897,0.30332837280722214,0.29872755068369555,0.35471689386368332 +0.59217365654076415,0.84233298754990704,0.71631900697160489,0.79397779193710749,0.94101875694003634,0.87511228517381479,0.77380040154348317,0.93983950494629453,0.85884142081519566,0.95878998520087255,0.88668618041018543,0.68603709463387796,0.86420935344357386,0.80244201802701409,0.85666160961868087,0.90381859972526102,0.984836891044228,0.97740182402686104,0.87306058264660558,0.8976897217204991 +0.27961612643320971,0.43186758888367194,0.31260313112561505,0.31168161963057395,0.28732782018223696,0.28792805567619889,0.60215835796763428,0.3928501362319744,0.29111376292239161,0.45119790733737603,0.37099186100928283,0.59833098368839033,0.95019088184390255,0.5634950540089545,0.54372662542049943,0.32881367326737904,0.26137013327801389,0.39362272507060481,0.67525051059430075,0.49860469746059788 +0.52549763701245022,0.58974939678576443,0.69309239681198209,0.6592820181650233,0.58201178914355989,0.78877676837882627,0.66224847732588754,0.91448514514303458,0.80844923406536318,0.47256827169215915,0.78300560520872742,0.82308487982407363,0.91575663515236372,0.71949327703940014,0.68213232340855467,0.41449513169970542,0.33520578626608849,0.29175211445308147,0.40501704828913204,0.30955378609202383 +0.1589337627787035,0.13981465225793513,0.17039851983014995,0.18290132170902573,0.27149000363282838,0.081134003904056326,0.078976458132858973,0.10739649672908069,0.086393072459405876,0.10371919676521474,0.15302580817906722,0.17869816514276252,0.22379148400820212,0.14815931398319057,0.59509143415535248,0.20256756166347639,0.1840218371423801,0.19765398208997889,0.16483347601176243,0.16123614239714615 +0.29561159025952294,0.13669649625899272,0.29963918889993668,0.13132826658805044,0.15151605729119072,0.13909799266912307,0.16816761281882003,0.13578348030946569,0.12932432511524677,0.21309376237825209,0.14612517992005689,0.193717649819519,0.2441146619404729,0.12159908560772636,0.10950374089282511,0.77768881771512455,0.33148651886010766,0.55317564958736798,0.3069966220951772,0.43012598941940211 +0.95084977450099462,0.9354197697739578,0.94428079665896703,0.9846981181146115,0.90133845144415714,0.91189734347419416,0.75618686754826425,0.90032465417604823,0.79049139854024542,0.81513080509416103,0.79610717245798124,0.94660404118371322,0.86158084950497693,0.85663633618671398,0.82167012296275466,0.97013789612525736,0.72987769423503845,0.70888778494348836,0.95269840253072913,0.75723269288147876 +0.29628920721154522,0.18004804450864711,0.16074407711871663,0.23328271982678189,0.2274508031877357,0.31172025059150144,0.37166508776634227,0.57432873270165496,0.44954746137780954,0.57893500796506492,0.50148163511160571,0.86377009149454875,0.33288052316110361,0.33098938978851333,0.41750029798392141,0.66600056734961821,0.70129671603228361,0.6402281563615031,0.46541409899996383,0.59748573837089347 +0.86057522114052876,0.91189779015969619,0.82283944310972879,0.95942811232110703,0.91596771342654648,0.88471681013866454,0.95112897690002707,0.90963061699398973,0.98568971072534839,0.90928164972462655,0.79986236986016324,0.81092628770243935,0.86520657848244442,0.77642625038159352,0.86083964867415186,0.89503852118781468,0.77211161226770131,0.90361332460183852,0.8786892002060106,0.82020459303230486 +0.95305622716734129,0.995,0.77720988508712552,0.82151640446907326,0.69768118668962931,0.87709875995025699,0.86139353166384336,0.77843734233138229,0.9764435475562071,0.99136050023722799,0.60702449143562387,0.62444921213117366,0.75987850139814817,0.5287628416364859,0.64575355062474338,0.995,0.85383473181023617,0.96858386187355761,0.67898493507085089,0.74669069926189857 +0.15138414687829951,0.060880788255131144,0.085659767225441649,0.078479495262826493,0.073917759036700184,0.15355709986836436,0.12673638809540172,0.10637897779733753,0.17559907177206521,0.45123311533831273,0.50005746101602988,0.58298162019153643,0.52416201334857038,0.48309957635721917,0.46235507065687764,0.64244424287384383,0.60025506096476344,0.64728751945365448,0.7898291281889892,0.67651388083326791 +0.020531969350037624,0.018569045468869113,0.019482549613933076,0.021290874117653229,0.023643856543193616,0.015703009061142841,0.014080589688608531,0.022175651601603716,0.015476753926350844,0.023115688128471784,0.017086697061498124,0.019997413373920352,0.011299351306485588,0.030422861230535409,0.025446111037395601,0.033943631495046971,0.016155172950155852,0.018794383077145198,0.015679171262587027,0.019127669438641651 +0.49717548615607415,0.87832826115375595,0.52195857798973466,0.87221225385346168,0.62752535102851759,0.47942043277714935,0.78570006710094731,0.4610741707830871,0.56577580160881458,0.55833585968187682,0.61225199266969998,0.86054670875704853,0.92595038543028674,0.52573305262343983,0.91416715947904381,0.64171892524778096,0.43957870587985665,0.49112893562121801,0.50754288875897557,0.66903285717660987 +0.91351220197947913,0.70932555458773849,0.81599089000558489,0.84532086644314652,0.71599660456838077,0.84789835174689232,0.88186252478525951,0.88101878054509963,0.91983311902296827,0.9274751185713207,0.61424250203753306,0.97216743518474114,0.7378418569065528,0.95421422738160766,0.95699858868596899,0.87135257004048461,0.87970435606600739,0.69332979058547783,0.84442979940196872,0.66206358349942962 +0.055711356123809661,0.096009183396688236,0.075779192796809627,0.10576915930558042,0.088889777759541974,0.12709485738000384,0.20164830065781855,0.17314062670991406,0.088979405905711365,0.14948674314134178,0.31836020439368823,0.29983221811061483,0.22297176244164207,0.4834859415964437,0.43794658933894293,0.33061815574062364,0.36563705499106669,0.35614654465525619,0.41271388886130955,0.46818208922541626 +0.87606165874971942,0.84019859497233063,0.89467803634130993,0.995,0.95055620642472938,0.87724412708144461,0.79955602331274367,0.95834155570152602,0.92874319168193586,0.65832200695296406,0.8906723995033401,0.71457288612871073,0.66817210080134426,0.49741897334686419,0.70320066586556118,0.45851330914650712,0.43951301396101555,0.67636682717992991,0.69226316082849915,0.52203466426903333 +0.97713947862251427,0.9678244180364155,0.88372086309433662,0.97320759687691938,0.87044366620475078,0.995,0.80699113876457906,0.96981907630310793,0.79154239423759754,0.81715512934368439,0.68925391275195425,0.69497082057990966,0.87431788933005605,0.72820720637357317,0.78805865105624551,0.98553155289554817,0.9768175257683448,0.61153331377165199,0.92599849996283201,0.87808265825846132 +0.45913755718426219,0.67329713577232486,0.36803555060724097,0.39948017425678828,0.54029581676884164,0.26359840082560898,0.32093833677289679,0.2644214541195824,0.29741714829300631,0.19783600645364102,0.19037915911762598,0.14168224994031309,0.19898586089328354,0.25486693181797121,0.16848416256473167,0.37850549691532809,0.43739173798732039,0.43160101753825481,0.42788699165335642,0.25804055967084916 +0.20075415560235768,0.54549385653193905,0.21442724801489785,0.21802533475623848,0.46530234031866435,0.25081313755185147,0.35424707421059365,0.27251939396636732,0.71561176791011216,0.18995952864523349,0.39859686069669997,0.49848780988059893,0.3352450557715056,0.37838647258224234,0.39745058805971262,0.27718972466239022,0.24558495918013762,0.25545084677052599,0.17393647930298492,0.28495941688106796 +0.81241976310477049,0.58723766822876911,0.75939089618108768,0.50947861829144891,0.39865309317612274,0.42132362160700948,0.41250845205155501,0.4621259900466515,0.43571347101037206,0.44362003326947119,0.88888901283619204,0.82787853087043251,0.929100673800761,0.7308372165653465,0.63869924043909332,0.3668263874920043,0.21883443898540048,0.35759036090738061,0.21341456639723552,0.2045375549809017 +0.64349882598763231,0.78639957345806522,0.995,0.68424536547781578,0.52193194774193519,0.22445164722071451,0.22290027780614027,0.31709195637284615,0.29966204295831256,0.33037670758160892,0.31250836187608666,0.33859963166539808,0.33266983476700968,0.25622418288545978,0.52439783188521771,0.3390167818355313,0.36574485040772348,0.43494402049634839,0.34173107584333384,0.28122432615209741 +0.25048812019029199,0.24171432085819561,0.39572136407681208,0.28470355181386175,0.40319833850697429,0.7036009342607118,0.92489268169940864,0.95233736030248206,0.82280262069845722,0.79363942577633506,0.37598340381338408,0.29048928696850146,0.39430655764511668,0.4651434453431722,0.51569576505139814,0.94014987525765703,0.78486661244920219,0.97036815869774373,0.72084221903424972,0.74793213882782061 +0.61655883223191632,0.58444362928965377,0.56565370629362188,0.43785120605725192,0.86421598559777812,0.80019160226748409,0.86729038377890577,0.9629611817189212,0.76281766319486743,0.92740029641341637,0.49191507328694722,0.3828249723162932,0.66424028831188897,0.61724833323123829,0.52709483706242921,0.79809468682938933,0.78414364680437398,0.60094472177205538,0.80795194022391736,0.94349095982290365 +0.36569701035772534,0.2918279119735499,0.48332887985312956,0.42478412399162702,0.30504086102029887,0.31798621084758977,0.46050597660042691,0.36007612549445217,0.3608557038652645,0.33416483660302854,0.36352244810156797,0.51478025145821771,0.27000113260311431,0.42365338192780788,0.29179196799387652,0.42054624664122314,0.35832018529767579,0.3386630493982265,0.30886635405540169,0.33937005999429443 +0.58519727484885531,0.89038170430163044,0.69421826328171876,0.62808193748211172,0.74287438580000376,0.77328433710547539,0.59383068472520062,0.67171430645638441,0.73381304378196799,0.78309785028671408,0.51735654649193652,0.92151274833310759,0.70639065163708847,0.51269209093619073,0.60392798335839426,0.72171340725602329,0.88698610864652938,0.68541439000470417,0.80708404391269983,0.62274352474285521 +0.56889887570835029,0.74458656311222915,0.73885887328333943,0.7760948182629227,0.42803908575409322,0.36709659219930996,0.60438366139766986,0.34922505132519654,0.42436844086481668,0.36267807102627847,0.49938716643727527,0.28589240344300515,0.28576044575453197,0.38534651456208546,0.78859744615845151,0.36672815849377927,0.67035280447811973,0.67154492360845253,0.61889674505542713,0.74230953054632409 +0.04460600999025701,0.015907633674194538,0.021860984900340597,0.021153694903187196,0.018965559812208231,0.03939177737456441,0.043564014701375768,0.027214703829409406,0.030281715870864166,0.030061397731074968,0.021688158143732709,0.019038941943015007,0.023855728951831637,0.022076330624256072,0.027199560084953622,0.10518839113552704,0.12515460986756591,0.18551352447101793,0.12515934251801092,0.1420008019843696 +0.15646971746721933,0.19139976205137801,0.28208089682097143,0.27310512686576865,0.24306416782105811,0.7230005536956019,0.55297373197382205,0.87095979441895388,0.75069575920448994,0.70862083012739951,0.13036611649289026,0.22011395711291284,0.15701299676544961,0.25086547394963737,0.1239074790644063,0.22495128699822994,0.22958097690531259,0.15108619633304221,0.16629591554112794,0.19368212146466415 +0.62722083055196765,0.47500083533957144,0.79218060302022153,0.57886845427676037,0.44295154626522859,0.77716784140833028,0.69888202039124558,0.65711091568636526,0.60326903760000938,0.62591454231174293,0.81319591715027295,0.88442778465025829,0.84178828083363688,0.92483485841032531,0.95692202225628431,0.78254971969946119,0.75536046566341941,0.71097381875633059,0.76066120089630207,0.87965530075372178 +0.4624709293375236,0.4553961116044522,0.74844339179369379,0.79049175937924421,0.34580907603742767,0.46644504592198621,0.45781472396988482,0.4349820878164255,0.86071843506868539,0.3806110979899392,0.34418331954840709,0.69466482222318493,0.53908135540348667,0.44634667618383078,0.62174178316685869,0.4155565721841134,0.69212716330577106,0.55930234694265368,0.37243860452164501,0.37038754578567534 +0.31164390315763607,0.38430381275088921,0.43950719092558566,0.52443458532597287,0.25717280527584041,0.21489111470038649,0.22717781239014595,0.26393774375392098,0.33122853497850019,0.12297590543594392,0.30152276544559581,0.16206769037170243,0.19664237368645052,0.30911425843142565,0.15185015396832682,0.1859251568485481,0.36958692374281527,0.36236304651657902,0.26232946288649828,0.20754514656195469 +0.21692873576629212,0.13567124049827822,0.093317000847541451,0.12758765065506361,0.10151430481690313,0.25710679825991994,0.38082380527541604,0.35276307997461481,0.4352577999909914,0.38234081726154046,0.35368531142291693,0.28465988181329427,0.32407969983861695,0.60904600654966889,0.51578739589262279,0.095121825153565043,0.085940825670173818,0.10735871173784402,0.17495048944586392,0.10429243578364447 +0.35194085092862926,0.2626016333362578,0.40381770481592849,0.22047595075084703,0.31137507194322195,0.33451450056002324,0.44628276850984766,0.35514052566385618,0.44461311735064929,0.32131140852512319,0.73887603295405346,0.31575701215068175,0.31539581637736869,0.37527199010309259,0.38972359936504114,0.95318675936531716,0.96616550647155797,0.72691714735541801,0.63309883464991346,0.54460801337860609 +0.52846477267209357,0.34071714941637954,0.46114260307447369,0.57381605077907238,0.34813930157304918,0.69740872034973478,0.422671745980785,0.65881897284486146,0.62902345858972719,0.8787237174949234,0.31083720408173915,0.42509258874944267,0.30140344310324041,0.35551180893985901,0.77151818652399917,0.51156770582617106,0.45617572400693968,0.47419349707280295,0.47152154992579132,0.29361003721744033 +0.60369941250143544,0.47232171275098817,0.57993761428735302,0.36440535932765605,0.50077193792275898,0.4088648759970569,0.39209690346845993,0.57122028627886301,0.51935959074943805,0.44526648340471892,0.46537298518519249,0.31522740260514576,0.53230935985165106,0.32273431178767037,0.4204938680674763,0.64016212080825907,0.76905039985438683,0.93888446381472901,0.56717035132355209,0.73013450772496413 +0.50612632431479765,0.40894575878590184,0.57981308450526303,0.52699175644053764,0.44958033909792894,0.95134470178273556,0.94420301791536121,0.93478375350691223,0.94836471639332376,0.995,0.63370282921276,0.39256751420883673,0.69942107333594938,0.5080356531267809,0.46659002903876967,0.82026700479606085,0.995,0.97378731858110601,0.93745672453165496,0.81313008521113772 +0.27726787391576241,0.49559445278650704,0.35893315527162539,0.46001708570693289,0.27743899548281975,0.2919228359575452,0.22900799131712096,0.28145078510390137,0.35699529165897559,0.26118797894650819,0.51697968337897848,0.43881361734595281,0.76541965587764549,0.40242711526883346,0.35949939207599413,0.29157988066750212,0.38853941845832796,0.39630736223343138,0.27283343503316532,0.34987238341769544 +0.9672524977231477,0.64482693527465851,0.70762526298038553,0.80654862903265578,0.73973401617006673,0.4617562078023606,0.46336266110216229,0.49557744490409888,0.57105803477994177,0.73417888870626058,0.54666186799092642,0.4839380858633503,0.97151642667172899,0.55495482665319051,0.44873593151513164,0.84233178386536156,0.62574923964290696,0.4776385502578861,0.58696149346717419,0.75038234668055381 +0.69816556849336353,0.85689634703338657,0.67441457503560731,0.67901891826477045,0.71737712349830007,0.88062387856668334,0.87367773395114978,0.99277312492018044,0.995,0.7271718381303619,0.99090871371914568,0.995,0.96394842761494492,0.77931457484306854,0.87529569227434834,0.45194214271347144,0.4852680566724869,0.80148710192157724,0.77657843801323401,0.50537521892491966 +0.62048818657805049,0.55133497496489525,0.81607210393829588,0.86480901731885074,0.545012663539447,0.57479664421733501,0.84836677657439385,0.57419710978792626,0.67818370135042816,0.94621196053626611,0.90527202251914196,0.73277748431067669,0.77142261441474202,0.97384260117524279,0.74760910203907383,0.8526142594212881,0.82364888817666271,0.93472175386896184,0.88172870688101113,0.96670549868031352 +0.62001985118411485,0.8397879074969381,0.6373994912647063,0.62748403620959825,0.63619121499342035,0.72300062886455074,0.88114065230458327,0.71143572111951403,0.89466162262205562,0.83829265999029057,0.49773846712097969,0.72900323250390309,0.91073911932582541,0.68281965639990994,0.83093516694978953,0.87575245644644839,0.93607005550492628,0.83604418736617259,0.86848013521274769,0.64953254583895159 +0.20070564114028941,0.17400042091733317,0.20954723927232133,0.12104992744903149,0.2354022824346679,0.6387848380455301,0.36734327162100611,0.33848684139932561,0.38710591243028264,0.30609516092571626,0.13599164838935174,0.12620523878294496,0.11562522970353172,0.12638873175067347,0.14519187377195555,0.14636928916411049,0.12517099174484159,0.32382024521770481,0.16604679161601832,0.30904233759844529 +0.30518951641084607,0.38751462839934003,0.29717305344550432,0.30157892889302584,0.28191330494192096,0.24231761458862153,0.18109342329637398,0.37538404270725506,0.215822521673081,0.1897356065384701,0.79824528237931958,0.87127924214863905,0.88498781938853688,0.87954125787482151,0.84117079613849433,0.33314409243811177,0.28551349343901572,0.33372358426368803,0.30960365462615114,0.34414843472396162 +0.082961247992102458,0.092347606993951725,0.071219682582286462,0.10419618612053953,0.14748370484921808,0.082846267498247902,0.18409250075293929,0.14513652013097461,0.1286086813207277,0.17680068239246796,0.17067162647207526,0.13403547892870085,0.21882896863930745,0.13423049062413764,0.16003116932931066,0.075982133270733929,0.066390018308458545,0.053316895863625882,0.043463376591582226,0.080192579899784927 +0.15071493622597887,0.28642456727878862,0.97389795089206921,0.15716137487625501,0.22200594723237463,0.46928941673281022,0.51218370492437049,0.42767924121056472,0.67773559725808741,0.42351332067246122,0.12401455292803963,0.12930885073890391,0.18201249763355049,0.15535944491917841,0.20571774991429956,0.17069104561891676,0.12129648054490721,0.39345140743809087,0.14447348783422889,0.14309998087734893 +0.49440930991267146,0.7191127523480717,0.42691408752250098,0.65927086556400538,0.62124353743365057,0.57024420334448389,0.4725484919455657,0.57776874775745513,0.35689800802976829,0.62111048123151102,0.46746998642769405,0.41070751668850736,0.56230153907945402,0.57990662111590441,0.87557138663264678,0.40534288555553893,0.38954725772559207,0.33480354954754382,0.54164525276383202,0.45788613396242994 +0.92423790589308907,0.80964449504021385,0.90632281134584403,0.5684282369979009,0.55963812529398693,0.40098516587858624,0.51189026656393877,0.84200087371156485,0.65467151186986883,0.31331494135160159,0.31631172560296178,0.26988136430962406,0.32567252816548359,0.4060412197119535,0.24966583644849194,0.76337596536346586,0.94944019191984863,0.94865512242094585,0.87963990482098142,0.75369157996837088 +0.56224352899805297,0.50843718541920546,0.76393899738411819,0.72064497776368253,0.7964575787412943,0.61265829884387524,0.96962468243087763,0.77246021897882222,0.70361975180682568,0.90329825040023848,0.62539313168581445,0.69757106988499307,0.5984503739596766,0.66457397503005389,0.95361276493585079,0.95249401101138031,0.89445139975842702,0.88690894570292556,0.94667645611709605,0.86130079600714793 +0.17317986861163703,0.19987087305949908,0.19756865906290424,0.40652304301767328,0.15779305895977491,0.32149554496680316,0.21279234479814543,0.3722802599709486,0.27726764810677557,0.44057278909236236,0.9668808734323423,0.25437751237551509,0.34119120727426566,0.55958097116812899,0.50862273606796138,0.32467164169110713,0.32352325854567981,0.33014922397567253,0.19607391847708558,0.30465199475575727 +0.34229641535911554,0.30413246306413971,0.98470127204693458,0.30274809004375924,0.39013782398674601,0.21642557916236349,0.19942105322804474,0.12840859232745422,0.17506213058683096,0.11099917019796791,0.37695503894550436,0.29211638253408317,0.30511619792488687,0.35334299821208959,0.27241695876141925,0.86824220300084543,0.95829852472960353,0.98496137970052644,0.85657592087932488,0.77147673982981324 +0.32209704124946426,0.33935195829651082,0.36827485803310894,0.26054880371045991,0.26284826996730842,0.44248999068090483,0.31783503823827203,0.40070684389408262,0.25556371493396984,0.31927760350521872,0.58050165388262653,0.35786204286988665,0.38719580994347841,0.30951322820750715,0.35641970735327982,0.82091480628533653,0.41318711421787907,0.44295033204307255,0.35584285063695797,0.38736937297241258 +0.56725302808514089,0.77469260449362098,0.7195722338374555,0.52916710959708269,0.68335411288089865,0.3145902068275469,0.35975048663709375,0.33279619496595325,0.36989952533415177,0.63014194995914696,0.46415147356764114,0.47889473007268174,0.62564867289595183,0.50089818087984506,0.66286517690995739,0.27696189015166273,0.40100598650854852,0.38441460514320586,0.30140802066922534,0.25392896118635738 +0.063057295352143605,0.035804526662449432,0.031714720938441847,0.028053032347428859,0.021862787146557455,0.034719781146989842,0.065226022181089929,0.035151063160089847,0.045344885728716325,0.033867241780166715,0.031816208293534994,0.028274608321230556,0.018690426596170633,0.028052182931535195,0.017067546763506448,0.047051914626299644,0.028075135345043176,0.038160102248940897,0.055284115200918943,0.025417749489477431 +0.18175125261375635,0.13322415567381837,0.15606752468549431,0.22686462473178348,0.16613609717181355,0.51838339123069122,0.71440116924241714,0.47714817245392199,0.42478580179504194,0.86786847523226573,0.13479612422544124,0.28558190350173274,0.25980397792135473,0.17878998863834064,0.19264032566551478,0.20821918249807497,0.44108252205579723,0.25024953003383904,0.27361043903862231,0.27823263616019667 +0.62406753573853679,0.41279071725860433,0.48549999112882358,0.42704420283806932,0.47865792424282155,0.54491239437734573,0.65028738718700074,0.81160090620286818,0.430528837258214,0.47365640136059672,0.51728941239287629,0.76711002676019135,0.48487161922097449,0.57188727866488265,0.80165055429189602,0.38742536038405184,0.4165382867521753,0.36781209048440494,0.5410652711306273,0.49168892714760604 +0.84086651606150509,0.96550630183242769,0.87235312248871377,0.89353506136657801,0.76716319545849232,0.73133436147505859,0.61528524046034183,0.74315482904218655,0.99201746441889882,0.53893020789724222,0.678335611199537,0.94197818278445689,0.82231130409227171,0.73974949822421487,0.79402194243085855,0.88140233542557578,0.69782214782812002,0.58966335893269317,0.60318091920354022,0.88349974277329724 +0.3449837501796536,0.33837440238046174,0.37568940204066753,0.30298472972954749,0.3260603498418686,0.59302479099925942,0.36748031393624242,0.2240783672424401,0.18314556831902026,0.18813549176043193,0.30036650316819319,0.19924600003105544,0.29791428388822982,0.20923123983825906,0.49962609042709538,0.54768460507082484,0.51212390794345164,0.42250534239072907,0.43267915671410456,0.93390906998356915 +0.94980794232976118,0.46994450874148902,0.6876293769198123,0.51529053544054848,0.82103448860743433,0.77274973800438784,0.67579356523349088,0.83507724071884193,0.68930978377261176,0.94420346885253603,0.33014782844654617,0.5446965966508841,0.37313899327143984,0.33774273924688897,0.5320756322179685,0.7655429432461206,0.98533796319951628,0.85165659372217062,0.56115814678853626,0.57045781857099365 +0.50754049421017422,0.50694613396096466,0.67608370489328262,0.77645298128603113,0.97865475995233142,0.64318296921947427,0.61675177181877217,0.74217806724269475,0.43099968037658265,0.67457941902485463,0.29529310990698915,0.48037475176032163,0.49054322002802553,0.53434230782648007,0.38604482449516603,0.49152128971950976,0.46865253012192926,0.36312084592707455,0.33889741746441482,0.3919805396510917 +0.30295945707265681,0.46577207005412696,0.56248427186523808,0.36203238540141647,0.23920016519745491,0.60399033031062888,0.66600481062680084,0.67077938978232099,0.90354900287432738,0.92585970866642264,0.74136859824542467,0.53822387663083937,0.59565236029056201,0.67941596703664953,0.48457149402387473,0.93696791801025692,0.8554005898094762,0.90187775817759608,0.9550747438174606,0.88673186400803716 +0.21313454603827772,0.13506036787304476,0.25194752684739774,0.15151826998970602,0.15566486462894924,0.28638927318385116,0.23320259917080746,0.20452199139038346,0.2598364209228145,0.22431567616744608,0.16345264784531352,0.10964619676413086,0.12864198663433438,0.13847679645459965,0.11873452609437533,0.093659820029302607,0.087378571635859326,0.091861320631837953,0.096785690828889978,0.1490848488759455 +0.74576667365730054,0.75413892276538097,0.64247842381596187,0.84705895041485402,0.68565410115581371,0.85268791900936647,0.72587442818066805,0.73883080855805416,0.80887859532689044,0.63623408730560427,0.90170059331139274,0.95444432935229262,0.89553995663668529,0.83661362061833255,0.77384407428823254,0.90172638377169145,0.65407545483063367,0.50266490719441659,0.51161528526378386,0.85843478551201513 +0.3418322878796235,0.30320567207751342,0.96460377811083342,0.45112735202245352,0.19161525940459945,0.073780735778977813,0.084326318203406844,0.11967157547939461,0.19139788323614237,0.074512542162206236,0.68410515684715367,0.84446802515920427,0.77240436935155343,0.68248446133737106,0.92603100677116157,0.12429867028328599,0.062230549246125776,0.10551767814441682,0.085643658979831616,0.063420603665411496 +0.96181964852038249,0.83317155341427829,0.75493706706348318,0.93351874756163289,0.6214408920527803,0.81889325858449613,0.86425864663205587,0.71011919193043149,0.6281967822821678,0.53372183404775564,0.89781145726274592,0.72311037292496072,0.80510863757839779,0.65270674456930566,0.91303320371649632,0.72195281729397631,0.63451933751840728,0.67011681024013614,0.57773916980070816,0.73348775571623992 +0.69432451312363086,0.91058834142690603,0.906441528122785,0.63298642800101812,0.79339307350780908,0.60619345112004575,0.65784087030865834,0.87147666688373127,0.66931772971961789,0.96622225753609869,0.97014773270096977,0.80197799139740755,0.74434006819260834,0.96762540713895862,0.90136317909351993,0.82800120801032528,0.88531699649464102,0.97736340320160742,0.97055013045844185,0.93302139344867818 +0.65467543588580612,0.34256311632835518,0.47199374777919689,0.62711472438431304,0.52426036464722581,0.59478539589003254,0.56257318392662503,0.60222776468881445,0.43525783337479534,0.7208155423730227,0.43549632403398536,0.340498753210148,0.50476912812647379,0.78639638818638413,0.36454031735742198,0.72143281781442892,0.96714158443242315,0.75883785656731451,0.67757678220764006,0.49954275678891591 +0.82563949036616024,0.81608019568392465,0.79307341034216505,0.48831050601540649,0.81634601642223903,0.71646288853108142,0.75398016671028978,0.73280461234997485,0.6075574544369291,0.995,0.94543707665572507,0.556610064584241,0.78940818070818541,0.74361476311611674,0.4294003064103144,0.38622755760954514,0.48346415644045515,0.44378463417351088,0.77736593048424341,0.33883479493039986 +0.21792502025756061,0.21002826040526507,0.19156066763970259,0.10858255630293005,0.12192068235217979,0.06573543984327905,0.054979247244626106,0.06633765192225001,0.069678748540989058,0.078958087390127413,0.062670162764404583,0.063528960969468612,0.056872948729635289,0.084070687189788607,0.05610806665127456,0.15823605093847085,0.19920298558301716,0.13971916913188251,0.12971130061643499,0.13109114447767098 +0.23898332238969161,0.24298006488891191,0.26552385374245019,0.19360829493019932,0.20047807995643352,0.42849732222714437,0.30020492987122832,0.61402731198682525,0.41572086751226145,0.65450080649921294,0.4147762293304485,0.49652537563248156,0.73246949318236387,0.42084053041686154,0.33214241619818236,0.45442124802186018,0.37407589396111962,0.38065623230391538,0.56152046277527334,0.2813465429660027 +0.4626647216715104,0.36801646764880924,0.30299336119128156,0.33359349695768403,0.36126981860997937,0.59646576632928439,0.57510167427131864,0.64527515556456516,0.47349861407202842,0.27087384963290639,0.20649103696989493,0.3233865327610011,0.28008194185261209,0.2536258995611963,0.24170191098368973,0.28998527305930988,0.69393908599913068,0.34729675544974525,0.28990858728711738,0.28880398384423039 +0.26692460766758996,0.19183297821108461,0.14374998035068209,0.21265167219001016,0.16894124393524862,0.38721665081455731,0.13857812919557458,0.14212763079412088,0.15057072223954138,0.17767514887897479,0.10315633885342426,0.19639073073701407,0.14202178529595985,0.094585085913494002,0.082821804024537746,0.29610465879688597,0.18183461576394291,0.26698234938057569,0.21993187073453396,0.25841828569837161 +0.14696568562066895,0.15547138369424549,0.12298575837860598,0.067559794964703421,0.084120284241956694,0.24098541701175819,0.14284590922153043,0.22586904155272219,0.13294888861029275,0.15593743838890797,0.069471608251007066,0.081521408348425889,0.18791974065415148,0.091342775747620716,0.16520703540899792,0.27162643798310099,0.53248034695783864,0.3208065016374525,0.30392697697043047,0.3227474697332291 +0.098894315941309999,0.096816131192659527,0.093118636848543088,0.12488116162289539,0.097209168397381501,0.54158912553830507,0.36242476572735199,0.28749137801568481,0.20369360646448095,0.30641190624084985,0.18804891237832011,0.10705275834083003,0.1045743068669126,0.13735072407779406,0.087390130227199075,0.2374424062610376,0.17983344964090733,0.18656364220739846,0.13934366649865956,0.38151986763741025 +0.93037944875278267,0.74948781505615325,0.67880177298990307,0.74198063578278994,0.97873327844667968,0.86844871022407866,0.995,0.96837783748638206,0.97786983583832809,0.91590372793243435,0.69165787792069788,0.85100888705099109,0.80491179053948325,0.62635052766572674,0.92498338108630407,0.89044537219657227,0.80097087989922899,0.80354452640205165,0.61855164660730111,0.71749282457146046 +0.50543282456624283,0.43972442345023455,0.94927763697794709,0.82272637115785852,0.92828357203324163,0.96184720566669935,0.80307815333191412,0.70416066456503179,0.58210275692484281,0.84877124522001446,0.90721290050274739,0.56084970039180482,0.49022909921796876,0.6279260592843583,0.57412406286806106,0.64396181899736271,0.70403957375470028,0.62866157678856494,0.85317187908785685,0.76280310957322894 +0.76719334604408873,0.60122263357190775,0.76444036662870718,0.46439252362611577,0.55698606053648059,0.6267361456996231,0.70426855541325051,0.78202668793170738,0.70615362700515583,0.5294090411206267,0.98735350916500353,0.99247186290896316,0.90497554193217833,0.93059950181786943,0.85128585442377991,0.62781253654468039,0.3307834776470534,0.37933941874751714,0.91345036883417152,0.45902324548971429 +0.84697303243619759,0.88046781095262838,0.93912764762373024,0.93353029609838156,0.76324857220307718,0.99170637054009525,0.91690993259666742,0.97854392518143185,0.95752280761979858,0.97098966607802406,0.8456522286086614,0.77010620381862971,0.75714818809389184,0.89421261838595578,0.81066686578072966,0.80801196736980641,0.80811894631669934,0.83672554128414822,0.92604971070081932,0.78188554963160639 +0.93739067316054303,0.79904431214539995,0.77777536712144679,0.93994100938718439,0.85193127234703847,0.9473787331324649,0.95545561883154495,0.92498614166619497,0.64697766136671664,0.54239231969364943,0.7784767602355922,0.77287099789423508,0.97888717972220374,0.92081296054218464,0.83747475966273699,0.80085038952648768,0.75215154996516742,0.79581337970058885,0.64014489822892762,0.88298007691146529 +0.054077036344330552,0.074571126280649075,0.068344505971966688,0.083714286597323731,0.085602830633354526,0.099875475592555704,0.039106988538130286,0.071582085426778311,0.079925080552842392,0.062845330685905795,0.099590459683891019,0.10086884273083849,0.13988027271002468,0.084605205095961186,0.14946558679698599,0.040551373094890888,0.035168849844413333,0.06605015513300079,0.088393167184614124,0.037222035541986859 +0.75600391506096887,0.9809168363863352,0.88324481579140635,0.90108825387247027,0.78163501565644666,0.66636671890197252,0.73588859998593614,0.67476087680083718,0.77406867045372141,0.5412857741845003,0.96347516971348646,0.74787023500488725,0.82238312398742264,0.79004995242304732,0.99116439124624478,0.80856003120263531,0.7600983675102384,0.83639568511011808,0.82579047813697537,0.7503995744007983 +0.99013502769765216,0.88749645412721423,0.99369385830169588,0.92643270575556902,0.86873241406874457,0.85860397416884104,0.94810616365575706,0.94934473251631035,0.87343500339932378,0.93425844664410529,0.59590371145221255,0.8234369817445647,0.71172831422915805,0.9403261466385705,0.8709485504496246,0.83739593709426796,0.98712714595236706,0.80113760437728854,0.81595116254894584,0.66100860220653967 +0.96755754506633651,0.99398446183642242,0.95989332822723727,0.96453921969662815,0.98919134287442123,0.94720594638510047,0.96153371204890836,0.97720794441750536,0.94197597817764178,0.98193056265993606,0.854314808107553,0.995,0.94355734685988846,0.9540132840090888,0.97123407957498997,0.99382472707710134,0.98913417384463698,0.98809094671586517,0.94119703026830304,0.98667830591141548 +0.14460780259824593,0.13463451302523469,0.098247941566256353,0.12213438707530261,0.11391630909431966,0.13302055494099821,0.30664269440696251,0.17483856910121681,0.24296196881872012,0.16294283031326018,0.21630634543431029,0.34083130716571303,0.36255301740012308,0.29990165448646511,0.59093466447026266,0.13835585060335781,0.12328519371573404,0.13575938437065971,0.22448623530671893,0.13719916582182168 +0.31698756723080151,0.42602114951505571,0.36113575728954017,0.51118791550840492,0.41919981870498041,0.53061628316682818,0.41417412171602697,0.86397072601783065,0.44574743818020063,0.46698122782695317,0.85334189625191448,0.68269990291119764,0.94424539666999507,0.92439491072215663,0.85726749036739025,0.98663489541363136,0.68022536716139581,0.97763327270796907,0.76624610865986509,0.62765994310361706 +0.820753894651433,0.91408615954988992,0.79569491268593207,0.92733332891760412,0.89587030940204959,0.95262587224388928,0.91342986791692482,0.82454159752258971,0.83310781957520152,0.84911216008396451,0.72431506091330311,0.80032512536953004,0.97168119472358094,0.94969136015751743,0.83769946536128415,0.81214784842114052,0.78892450495059896,0.88748887543195654,0.97878566135233569,0.8710367527281162 +0.096412019906615021,0.11722185491331175,0.42348805750657026,0.10043399689327501,0.10676826475744569,0.1061836261160367,0.065959162586670256,0.080887462884982206,0.10785501972371156,0.091138236275802753,0.23921384958671346,0.14366341330027549,0.12644181235480889,0.17726249155508964,0.35081179112752231,0.13226887097419304,0.072183507495117025,0.084267319995610976,0.069841416102986401,0.070337896528114618 +0.23822202066399017,0.30153941871893025,0.28818320074853998,0.54272836744757225,0.29966310193262852,0.50331911902466309,0.43755511055574647,0.36029195766469907,0.51919744106212684,0.28438667628113012,0.24864375973215683,0.54570716104861261,0.20632709384599776,0.50620764211894886,0.27232255891560903,0.75460596326381979,0.97977013590691886,0.90572060166333446,0.45928955245945696,0.70352135802553384 +0.79943679198687723,0.90440194949557362,0.82788333518564516,0.79162321772544042,0.73426782308974625,0.995,0.89187657606437964,0.83328082656067226,0.82674295265216391,0.86960718518213853,0.79095868499532229,0.83037004340259157,0.82028107468311151,0.68588994732138286,0.93793443667836129,0.70335550340222064,0.95830889342008574,0.65203435920959329,0.96850672415683026,0.92573612659018079 +0.83011866400846268,0.76458924986026666,0.97866530073939872,0.7831354382645348,0.55096456923259496,0.49791627623445095,0.75704693390098055,0.70044813266772599,0.5201148197667983,0.62514801844169576,0.63816905218369002,0.68718529231530123,0.74563601489197684,0.63734210155315685,0.75489809619985426,0.8134966259801959,0.75480279006319029,0.95641466942601761,0.85885214292818923,0.53258041578104476 +0.54947007779283552,0.48406351050739144,0.35190880072297259,0.43467980323641148,0.43260423610397203,0.25386806641828069,0.2693782786210932,0.35626871830791618,0.3148109843647251,0.24451666286002158,0.47013114172360881,0.29322156945946803,0.34834919908501355,0.34459679643114383,0.37231699986336059,0.20848533990319063,0.26054109785679413,0.40347594459031172,0.50850650528877961,0.28050493167160634 +0.76912693424991196,0.77353459388481516,0.96833453526340829,0.95200274973712162,0.87451136742925695,0.88361386314302337,0.84830989965706816,0.74658132607632832,0.80181964980538889,0.95584885761270799,0.89677674305107324,0.88207073862820484,0.95601521718456817,0.98791047877532479,0.79880988750725623,0.67977103532284333,0.97587661920240421,0.66688373167548598,0.75400211479627133,0.90096053088484518 +0.79344674541075522,0.95178444702361498,0.99232696241887852,0.68153836453692662,0.78045661205848538,0.88349337515998383,0.83296265331287189,0.58444687065412593,0.85845665545230654,0.92802260507572654,0.56659299626426396,0.37219671635675622,0.5370657009423967,0.52604518491026186,0.38300489536635546,0.78178544634156155,0.51865051213453683,0.66284632125449594,0.5256192432125486,0.69626904481290797 +0.019451128672684601,0.0152219140202332,0.029161791827834932,0.016690041961057521,0.024690789552761397,0.01946323128382562,0.029740758208134828,0.033109458307758417,0.017317191606280032,0.026893617385062636,0.0097244788814617299,0.012404769881437037,0.015319174605186388,0.0092239955138292765,0.016141466238375493,0.012080735297854224,0.0069978915996117734,0.0065914244176078036,0.0067230374754765924,0.0086967748401251075 +0.19560733137138059,0.169934920367874,0.12292872818206842,0.27357337106034185,0.10954799699795263,0.12934980118244169,0.11333117207205455,0.15545136289916198,0.15011766624875245,0.27400835605682267,0.13677710615750918,0.10843122834787416,0.096539115225833791,0.099752924612652991,0.10308692341262522,0.15568767197189171,0.097295310558034157,0.11649955923771707,0.090239611547683896,0.077451840246026513 +0.98927909690196003,0.82175439738391232,0.9542331212712053,0.93745406124161668,0.995,0.70725313240876664,0.86166251452782527,0.90950008261419102,0.79143520114151233,0.67122516782915909,0.83374544157134078,0.995,0.81997224575080818,0.88453514024133628,0.87377707939844018,0.74740328901282305,0.95437973803113085,0.77285431630363288,0.70109137833627688,0.75269634222626369 +0.010745073395309078,0.011509962871492009,0.010502544590774121,0.014149122911269589,0.014893876431339707,0.03541615066050325,0.050983713632243431,0.018110789190950632,0.05762702722287201,0.040314829662793344,0.020926157534619235,0.018455818713051193,0.028331023423219057,0.012965074238521947,0.024432392368875403,0.028490663900515783,0.021940815917472531,0.032479232926359826,0.03500824120573573,0.031962582394003049 +0.37536689254996231,0.65558763294463274,0.70957975319450939,0.70725077466851638,0.54069871865239083,0.65091355617221058,0.68833871113599021,0.6129899456139849,0.62264510985151833,0.93912933802486653,0.61133461903844011,0.47931269024902301,0.7256574475169083,0.565725834704361,0.41790333266528118,0.58706823158699017,0.33609620339823409,0.5205019173440546,0.34222600714703438,0.59961812271601944 +0.079221781151000661,0.083354683317272332,0.10557744325308664,0.093998430741746311,0.073651913398462054,0.10307365106887642,0.098360340459077919,0.081787418490636671,0.22636190033294784,0.091666636250540709,0.067598107317195205,0.052062746090849037,0.067612254090634261,0.12704005433755605,0.091556378802824939,0.096761130015013339,0.10389686185435767,0.069785860743003261,0.06540800741837853,0.085839102549560453 +0.57321294165977732,0.68613093874886055,0.91972669213687153,0.57530867955178011,0.95790478205932983,0.50402747309297735,0.73656471914562915,0.55259846320666883,0.71838440622796951,0.82133646620976253,0.55746055147115048,0.51551143012691669,0.7215609001863923,0.654353522531535,0.6109000811091827,0.37375223709647326,0.44744299158473549,0.49378715793831257,0.62723557900337346,0.87314006611568284 +0.63078578154208698,0.84614646970827112,0.82296809944060245,0.72187640717745927,0.89842486736041138,0.73460641170438112,0.55051176769705878,0.56474279015997397,0.74089137924688597,0.95639413257190153,0.5945619054773833,0.78976509997347777,0.66459648512612357,0.97475524598070251,0.66129926928496419,0.70481915285990415,0.80305620935558408,0.95483012910523024,0.71662477464123886,0.61822299992817475 +0.028376437041173454,0.026455344529924176,0.027585674749810447,0.02216825268181169,0.025435339715423173,0.018686478810099483,0.012737179217993382,0.016330866895814204,0.024693433287592877,0.016893790320699476,0.032227597024579453,0.045628110465385695,0.022395371427234922,0.044672734627038482,0.037948539713932451,0.035462392493405055,0.042954730463058033,0.083882154730611988,0.030400905072357928,0.026840030330479752 +0.13409595786425271,0.089884293282392627,0.07150818552415332,0.097017830388834547,0.059371916275674862,0.098112687072453436,0.093444707792080584,0.12110431421750199,0.073613797250495966,0.085872041461786994,0.094771284346457194,0.15758859634743203,0.1198658495555813,0.096013964114333133,0.1485570847192233,0.093261130557029198,0.16342256357107673,0.069283168323432481,0.10859380639863936,0.12199145969790276 +0.031709425760766692,0.045099597441595057,0.039418990295279552,0.04647508809364484,0.043403378443268331,0.044468009466359183,0.065518009699185836,0.070290312990243436,0.12372450872864549,0.063210248392117543,0.069797934166294068,0.10661436957033395,0.097912863888612658,0.14335590793983541,0.072607930900386877,0.034070756378249967,0.055561725975205305,0.063941233441689838,0.033310993491197698,0.05886635363443856 +0.60871025316277916,0.55283904329540257,0.57068959067320912,0.47146437688811849,0.52215246020066908,0.77983126076676013,0.5384939512852237,0.66557439251953754,0.45079912508301317,0.88512364245104558,0.75186013703732935,0.40796091536071727,0.66651247461204133,0.58436340833636291,0.35366688996915768,0.47820462662611379,0.41918329040601543,0.83529454440739892,0.51881807579362893,0.63277888678225425 +0.63497116841090451,0.52432292709894857,0.75477366150276415,0.83823068823724078,0.60200789186412884,0.77827585709807023,0.70555066240420361,0.8013609570353214,0.85587520706986375,0.61075151814065953,0.77612145518969444,0.76409651618616725,0.90530474758855961,0.96495894697752949,0.88634051284579274,0.82449551046302449,0.79219820825759335,0.91646727710573939,0.897141010751075,0.88691916115227798 +0.51383013924029941,0.61482388066555527,0.77630489794443835,0.40081715926693268,0.44233686235218078,0.89054080902623123,0.59583023774239507,0.65973798574866083,0.71863067613278875,0.87697656165448423,0.35973329485337424,0.33422559466333057,0.44645671203420312,0.61431101995895332,0.4125574612981715,0.55545425692623662,0.57538058522926327,0.91097359643524789,0.58240232450314455,0.95978012744078733 +0.57464335763379737,0.60295785173163052,0.43945619214660536,0.51759304000275186,0.3753592438897615,0.35470952409645601,0.43661141040563828,0.49453384963809449,0.33011323282373922,0.35086354623237664,0.71115785291483213,0.32113833869530178,0.37412738611977292,0.5767599467244634,0.60640081684099623,0.4154833406516904,0.46680297959022182,0.35371165154975059,0.35303399320853229,0.45515480711758416 +0.49558114531159181,0.68599084222308038,0.49618653567082599,0.47878108993357649,0.28451778084340118,0.67483531531771279,0.61934975486944999,0.94009595925585843,0.6833086938806936,0.66234500989547562,0.38031276478719783,0.49903829661405796,0.73458949300100207,0.51557394616065666,0.40909064848319471,0.35969962380497522,0.39472847342713202,0.62186984156256508,0.64318859128278427,0.40610482478975041 +0.1497579282243498,0.1998469023301154,0.1645706183295482,0.20182333726641605,0.10990927705639822,0.41126240714822032,0.1600343521059866,0.10559426406725304,0.16109178376788663,0.2213268449634995,0.98422151157486348,0.47110696914176187,0.37450397378343681,0.39259282937991519,0.53521087903437559,0.095687428455909621,0.12884428518331661,0.075909433143297192,0.083345454175300968,0.075950404035342756 +0.79595946920327998,0.87079877538219796,0.75859551448019125,0.82091951678179553,0.69235776238362479,0.84262074221051575,0.967590747567728,0.97965862112182922,0.93445664281967111,0.94982204411551252,0.81958556543485805,0.93447542008148166,0.98357408154330417,0.93052198200658442,0.80970182093325627,0.90508217032546612,0.99262889785185093,0.96980212599940618,0.9624448206130759,0.95086633765744255 +0.65132430544695719,0.60265644863985868,0.49695796668115405,0.86615848882844781,0.66816777240292946,0.46720482071537062,0.65337150812152789,0.68037237033950615,0.60038666170926547,0.56493934653178679,0.65544703668240467,0.77132040509483502,0.76857744121423321,0.7096473970281868,0.67288472594794957,0.97231245176325598,0.53340485862742482,0.54755687129563579,0.72749993881946051,0.66089195310261128 +0.93839550582688336,0.97472553027834141,0.86863298773287934,0.9709564107706844,0.92401310424262151,0.94414595566060278,0.55545174201136549,0.88262942758978524,0.54966081900758723,0.66347968129018409,0.87302685233763488,0.70249554753013288,0.63018263594194057,0.97705535774176411,0.91400419301928337,0.97265861785674823,0.83439720342177381,0.89534371742395935,0.96380201486438555,0.88567643257733819 +0.41858861031824984,0.3735713397434357,0.26441962057228574,0.41933114882355038,0.4027837362365948,0.76063662846899383,0.65585008414438739,0.69924413375026673,0.54336864971822163,0.61034910816573684,0.94335290198173738,0.75202123295355494,0.91904541138773876,0.95874608940313732,0.6859377315911932,0.82761203312469689,0.66945570183344894,0.68704868007025843,0.93696248773865365,0.54629465762140406 +0.97700725008191458,0.92119989456841145,0.76456748226373417,0.97595446149238296,0.89848706263142908,0.82936599290199409,0.75392280659137312,0.82861097998542599,0.91232756230100953,0.93936015564962161,0.96779308728743441,0.85805052348657929,0.97336177830992388,0.89290420436167306,0.92451348215523044,0.98316897704920747,0.7068213575413641,0.94348061721300358,0.74297598780223495,0.89574313205085887 +0.17055031014619743,0.38825084387111425,0.13508165222889343,0.13321695817689369,0.1223891427084145,0.25081795007806329,0.22097798709623481,0.21920448297566716,0.25049513379216376,0.25643898205299354,0.12434315920326371,0.1890045674630893,0.17906700621579119,0.13208486547325332,0.12906626140813748,0.24139234623540437,0.39166926340153307,0.37765875088937056,0.3158890421434572,0.41485524948451658 +0.66416055079298775,0.43805784399973186,0.56428281861778495,0.70463239732392768,0.65609852676133407,0.85242445917961063,0.73366787807090439,0.995,0.62512525677249142,0.96628321305249054,0.80657936126220153,0.83976667943657091,0.94875273488191214,0.87330777321389008,0.83091430331999738,0.58068901930569428,0.71144813457309375,0.49638542125752888,0.86035291102911904,0.81908351533381363 +0.42031699896700259,0.35453675791454731,0.69166850642623423,0.60843537331333386,0.50791385620360929,0.55426415497836246,0.33408061439475595,0.83076300617959353,0.53944029212915345,0.73969329204697165,0.53966569953597776,0.43157208194009694,0.43624830127005215,0.50878630901149691,0.54462239290452186,0.43217534211345865,0.44425173109291571,0.31098025317983963,0.44677049896908905,0.49430546590152535 +0.29765428554264228,0.17991167554582771,0.24191658762764079,0.28099268330713517,0.18236140673876314,0.36674457210632239,0.49863607438644492,0.35514355658552865,0.26863106458036712,0.36389315998698529,0.14985799216285017,0.19864157767363386,0.21999126403551572,0.24539773582116783,0.14107435370987959,0.22387362907408484,0.33103599858632915,0.19398770770078391,0.20055129472638536,0.2496360440615541 +0.44179825469215206,0.47451012901015904,0.41214571403799399,0.55477835453108704,0.87912874710731215,0.72380932905668982,0.45968903179429915,0.50283175551435844,0.70257508040268568,0.37485274616373737,0.75789620282004599,0.58387086018446843,0.84840106057141662,0.77747457763850691,0.64881453323206206,0.81635472569581147,0.93119663923583673,0.87958219905080315,0.995,0.78149358239826483 +0.88038099384190538,0.80885492034008921,0.93198331778846644,0.97750232345663235,0.84037710821112366,0.96831223444401993,0.83177458927048475,0.83656381173648253,0.83769662904937603,0.81434494056171436,0.66257781402946292,0.87411263596591027,0.78731677193393979,0.95368073155994404,0.93468754545377319,0.72457329390983549,0.84908549216448281,0.85801629807269963,0.73458804983461956,0.86979272930201057 +0.93629184203830218,0.39534489296876474,0.30619319304064763,0.26362003400911549,0.46436907411811185,0.81869085912070305,0.82117665904677484,0.79938081019954299,0.80804547939653215,0.77151878790467487,0.67225275082628155,0.76747001436044993,0.45885931225890375,0.45068167516838353,0.71814025228929013,0.31629230649660883,0.34491718379723207,0.26563237971518816,0.56934079172146235,0.35635627194984543 +0.17604762581279534,0.18195108511139207,0.27546160594837787,0.3199086939550671,0.25690156674528386,0.17181800334453481,0.16893986755736679,0.16481552658112694,0.19954247389874205,0.119141872061231,0.15912367853213064,0.23645503983787836,0.25811473260741002,0.17658350036506854,0.20370234793565764,0.15392361899990936,0.22920706962243217,0.15255847923736471,0.14397074159819945,0.16093165778369511 +0.60086582904828179,0.28338643815877412,0.42300565503978715,0.36693234112852352,0.32646330684124897,0.20785923663292982,0.18938478806089207,0.17036024904150796,0.20313893310703032,0.27252337200833032,0.17991781857846317,0.20861945120429989,0.25165951927284164,0.18645926069639449,0.19423921616243175,0.51244483995292978,0.61420792058943718,0.36959739153267274,0.54092793451595667,0.56804981875062843 +0.53084956239157055,0.50616095937881933,0.37727642845016612,0.36108786202048115,0.35563449534346964,0.82833799000326436,0.91458972064462885,0.94578486786048155,0.84541285325083471,0.66534223654187308,0.61343350095886573,0.59514825741315958,0.75691698706108956,0.72349136878788678,0.664647824160983,0.60492673985711554,0.71902351104913387,0.56183562802291054,0.41515381920036276,0.80608854251271789 +0.72068673547473672,0.7141615232365397,0.94568910777366932,0.79005134991142933,0.78255540307795357,0.59614934456862811,0.85840630842816734,0.34090842956463935,0.50051230597469032,0.42455173869196439,0.40410944493993922,0.60535063902152142,0.5368140733411636,0.48920968793975583,0.44062038243020646,0.85436743891976985,0.83543615677314664,0.7649166062207764,0.96387685267210166,0.8073102532490668 +0.79502704645187183,0.989628529378064,0.93059931727192347,0.98999005899492576,0.90550280226935076,0.92106066432444966,0.83336612252806397,0.79549611521252461,0.98856901750454051,0.98664397750852473,0.89919378689093121,0.72256028681516349,0.93720790456063618,0.90684541643253436,0.93767849613704957,0.98628377128529576,0.995,0.95905083876460984,0.98760327703075845,0.96925297653709774 +0.39930800460046223,0.29147825045112319,0.31537810306615249,0.46671874219795345,0.28061252940835885,0.32064591412673388,0.36330556560471133,0.7712785157365678,0.48682183022898873,0.60739427606895569,0.28170563030157764,0.54286881711590185,0.60166933194811689,0.4259417942647612,0.34013176910936327,0.74333403130416453,0.48725874673369501,0.39824727113998665,0.3321601621016505,0.33671004696503298 +0.64342705646050657,0.43117744341620751,0.35396287246773028,0.995,0.3660209277995442,0.77618577746769768,0.50296854184605266,0.66309130223832513,0.4568390187177197,0.43564306458540336,0.55684715564358367,0.38443236690274568,0.34760239562709433,0.48750859101575666,0.73166944786809385,0.63350880081114858,0.51428941853509147,0.81535275933946305,0.74895728558593333,0.64865226490877725 +0.96993255734055428,0.92239359669056564,0.95259804290178152,0.68639299927903952,0.98152935202286118,0.995,0.90491989590583821,0.97321069739910726,0.89834972137413682,0.97001599381327819,0.89658372573630218,0.91365396906524732,0.95843009645852262,0.91340925206375578,0.94833769563757431,0.83680088790959484,0.89787144265783403,0.96434895599113357,0.94153956583088905,0.6870786286180085 +0.73082416022966601,0.87019782037001625,0.94389146593703088,0.98925392214110996,0.86650480115869677,0.79995111081204906,0.91586323403941516,0.65245518394685342,0.9266254818639601,0.97545686513891361,0.81356165769220956,0.95696311149681579,0.86169001938337275,0.97988588492404349,0.92069857743643213,0.84678377473096866,0.728192247302197,0.90625006078928427,0.78987623740142532,0.68009737560855532 +0.75693777947882013,0.87219812581692169,0.63846879112887545,0.7118265051342888,0.93163634776416193,0.84755012583032152,0.995,0.995,0.92146321582261581,0.94473113100461603,0.98252901090770406,0.66334906021912732,0.93606149373532632,0.7117510153822092,0.8183299915058907,0.80910936002815514,0.705650488184973,0.90696443933851623,0.68356836502567353,0.83799675670496687 +0.1048334046340771,0.16981422038139038,0.1490069194422213,0.19207349468076731,0.14381370124476767,0.20033583503186508,0.25796486317486156,0.17165907208296613,0.23272657625610021,0.28340337240201097,0.13762139314560926,0.17066454787884047,0.098453987044963331,0.11259762601791706,0.15668726553813467,0.60918892046084028,0.11099533478558565,0.1053786391960088,0.13655909054336018,0.13998399404516843 +0.42248579567101946,0.54320389836396032,0.5130167696825606,0.38948819760375558,0.59576533289835976,0.45092248171790544,0.73416265176549367,0.6860152943364366,0.7560009622532563,0.66249614961018477,0.73572115286428619,0.71092399882873036,0.77566328674863205,0.89995536601149517,0.83264138080893701,0.61273327127666044,0.79633761970540407,0.53685860809816111,0.75921298980534357,0.58575688612074794 +0.75980665319716578,0.5733812618353048,0.94343460258079614,0.95321227245060458,0.93597677837742144,0.62958239060641263,0.80960874313691922,0.68660416348035735,0.71156035584170163,0.96563905869947086,0.78504067948402345,0.97356485558071426,0.995,0.55380960501694376,0.52273943491911323,0.73634182614598176,0.47445128138942388,0.43423819155517157,0.55325329265538159,0.42220778035494932 +0.046894940686783584,0.018967755131158132,0.028747789291292441,0.029131950393171822,0.012623769456279726,0.035099638657958135,0.032886598641335654,0.036913230270376809,0.03426886601060472,0.024630405253079909,0.082825035538567029,0.035039201453466812,0.069797113520773266,0.046686826323535734,0.033987127635991987,0.10852196943736492,0.06442616027253277,0.080757699166407279,0.14360542838620657,0.063977150873464159 +0.84467099340388874,0.88003678088420723,0.48443712561730934,0.66818337797180827,0.66735798167483984,0.29218529832890278,0.3373686863301455,0.5177674356345302,0.44825236988791184,0.42472507937043602,0.29074810225006803,0.40868328288592698,0.56966590299862307,0.9152036353333185,0.40056738102907313,0.37354335228810404,0.28374658558291743,0.34163809956338675,0.31079043526868577,0.43435506096814386 +0.61488818480280028,0.60297115521287592,0.57125868914856381,0.5088094770208188,0.35037404212906575,0.76630975925793277,0.65304442943497598,0.71958056723720798,0.76039709233064212,0.83659303704444987,0.4441853016837719,0.31085884215528387,0.24553659168493733,0.32790345237443358,0.48421551346832958,0.66820684845936007,0.71106555970722451,0.59334196034653597,0.46856010563381867,0.5110412105654687 +0.94109123562966079,0.91433445856695772,0.9076142245613863,0.95141293573223062,0.99050577877634494,0.97599849408310724,0.88405788618612369,0.91821387580037428,0.88560987732457264,0.96303102093112736,0.97867711854921291,0.90893335443163192,0.995,0.97848015225187923,0.92487003524833322,0.9729422647903524,0.98352614106214142,0.90217855017614312,0.94711518775958903,0.95264431120395743 +0.057015142805075532,0.10147560696168514,0.15209287587958206,0.073263082250401151,0.062669356669783405,0.11165316633753201,0.16737007890907926,0.088667974197799898,0.075362172596178889,0.082009642781051606,0.050441904706975065,0.057034559375657885,0.12913232886569556,0.08480226328799792,0.055062665676757591,0.063045711246657823,0.052286612084555803,0.05328268377217539,0.045771095990588401,0.06215698805151218 diff --git a/test/data/nested/clayton_d20_2level_acopula_ll.csv b/test/data/nested/clayton_d20_2level_acopula_ll.csv new file mode 100644 index 00000000..ce63bf7e --- /dev/null +++ b/test/data/nested/clayton_d20_2level_acopula_ll.csv @@ -0,0 +1,500 @@ +13.817335078659852 +7.8141915002514963 +21.943951729050298 +6.2822648148727893 +10.274219389928504 +11.719594471977047 +9.6416874866539928 +5.0750837122922974 +12.837211860937174 +17.955057482206001 +17.051748384367897 +9.6928390550893795 +18.388670248610104 +12.841664331252829 +6.5645266336568682 +15.058716480753468 +17.851669057710836 +23.233501614550732 +15.377750808349276 +12.603498145531503 +7.6272779931432808 +8.727433074951918 +13.592376229132583 +10.689755344423929 +6.9450510288050964 +21.529294655023783 +35.895468859780749 +67.922976831756046 +11.17341097867785 +46.373662070034982 +39.22004123855794 +8.4844217042751069 +60.607509625709781 +9.772380924284704 +23.951228922354034 +15.420599762978242 +10.367805985226447 +23.752440328498636 +8.2471292616287002 +17.042318767927949 +7.6983283613518125 +10.237025374585741 +16.28747962681345 +14.297618618090468 +15.63092268756094 +14.773428595714051 +80.133894293488083 +18.166198451501181 +9.6549904811407714 +12.458239654215582 +16.142162299318642 +21.709312382678974 +4.5752735924702534 +20.451118551335465 +30.022064172906653 +4.7021497622284301 +28.786848468850025 +11.901693024737227 +8.5802406233419859 +10.008686688562292 +15.873366015426427 +11.789324744253129 +18.582153347409331 +20.149441731270059 +17.698614181032049 +8.5444976160889752 +7.8834563941914837 +17.98204236115356 +6.54347922364326 +47.327902567441697 +10.648205388400683 +6.5973407332043621 +9.57195129479787 +38.011225800753209 +6.20130961064811 +11.85014953351228 +11.725024240637566 +16.051307347528223 +10.761911399069845 +37.065850360368671 +36.47071517325287 +15.667173712687344 +15.769713474872049 +3.8871061286589565 +11.35837689502398 +65.201590882578444 +22.445405259515596 +78.27593886904242 +9.1835378648950297 +11.627657552208035 +10.489148624165288 +17.280664921590443 +11.839192453269533 +28.055022125202896 +28.093832396728459 +8.8281119971376256 +44.489617428061308 +17.788765874751704 +39.107199556259872 +27.433381070318433 +35.377678008918735 +54.931181809163434 +12.350910144105995 +11.573735439411251 +9.3843250735859414 +11.264487066433517 +31.994874882548316 +7.1680193244052077 +9.0914580500114823 +15.9057108528649 +13.337506268831277 +14.546612570600367 +29.301785306309881 +16.986802469600235 +15.039209661163767 +6.3539618643914366 +23.972754753197194 +8.5298623708386998 +20.133397365117617 +10.54883408087224 +12.985105945163895 +84.993043433897583 +36.847532047134536 +21.117724940553956 +8.867569543125505 +10.964161604875031 +42.547403623944689 +13.00865759972919 +45.985821476705695 +24.521513838059292 +22.366116265330675 +13.634854889932953 +5.5525696959231681 +8.0041670188456351 +63.854049992835428 +8.6047601994107339 +8.9271379774947945 +19.665198955482509 +14.73341888407063 +6.9229552790933866 +13.518380525976681 +10.81338093141138 +32.34569453543557 +11.369781119077544 +9.8189865749660044 +10.885050931747401 +13.111742756779023 +15.914509702456087 +6.9923329192557304 +9.9857516369243626 +12.529907602509645 +8.4069922281976517 +20.964134452938861 +20.889111452654987 +11.492356855163898 +18.334861448367906 +23.121211872433488 +7.2831918340626913 +9.562919202949459 +7.7634865908693058 +11.901713989259179 +7.0472621065820462 +9.9261984801382397 +10.626569027153636 +9.9201705260415523 +9.0935310368516156 +8.9523576973294894 +11.579087969862144 +8.21480066037104 +13.266261580212522 +12.693978729126009 +44.120587125878473 +20.90442940874642 +22.148928714126413 +18.66694046537161 +4.2984812874005058 +15.211478696052978 +11.196863910833073 +13.852096903099323 +25.223229775883482 +30.349736539717526 +16.170478616682374 +9.072216125929998 +26.031108825578741 +8.1532712223837152 +22.715855525917107 +6.7138444224109719 +23.32094376605232 +2.7453990234042891 +58.846150289099114 +11.648866711717751 +8.4303121556065292 +21.912906276381666 +15.094689846760588 +11.316677659465938 +8.95002741927253 +20.570731641885004 +17.682727625264988 +81.204487233614657 +37.805679556892301 +26.335226367094208 +11.214899647256402 +15.75629224225392 +11.160633113741731 +24.42565967461465 +20.700014116624033 +5.9055361804151829 +31.29151522689682 +14.05561087430906 +9.0327482923947571 +32.987335854980927 +11.549581475439169 +28.696398631462358 +11.937031585215877 +15.784555379019992 +10.90321763725801 +24.206868648557702 +20.551915454039232 +14.411224456928437 +12.600273289174332 +10.867127838142949 +12.017982555146524 +22.41159964735931 +9.9704214556695945 +6.8339997940650647 +7.066734427027896 +9.7814505618640055 +17.709468165969653 +9.9031838400296621 +12.780689041436517 +19.86122204182805 +12.943002303486615 +20.937259432620067 +8.5503164013121875 +82.468303340155501 +11.142812861278827 +10.698398738755074 +19.613727718020442 +17.398680128827706 +6.8580657346248728 +38.59160255731399 +11.048155974844576 +18.564113807166592 +12.682503215298539 +14.085847791262879 +18.75687441461158 +9.0354743530232611 +24.50853471035262 +8.5361559741045028 +8.385824434120039 +6.7780882359610786 +12.256298597363141 +27.765883714302987 +12.880944315035606 +25.693233723451158 +8.629343846571274 +17.422640640045444 +17.791009261026183 +10.223872551224247 +14.644081540392037 +19.215478744217535 +12.317149880211915 +11.551198140413931 +15.75245102849496 +18.269674980084346 +10.879100955203057 +9.3017382821056742 +7.9368929219427713 +8.1515355672573335 +59.860426088075087 +19.020534865267905 +12.460414713084134 +16.272382286519417 +17.191497940986324 +9.8223554809860687 +6.3878317717914967 +6.7571419561750403 +8.675536331414726 +12.082534740663412 +11.964579468028532 +9.7573426682651672 +13.941885390144435 +9.4802676317204657 +17.598944104717567 +12.676540703422646 +8.791360340113755 +21.485958969788413 +9.9540002083554313 +27.777064616370239 +20.721493645070154 +10.703499220294461 +13.922938963409536 +15.896347990126941 +19.71244207530766 +14.210627214091204 +9.0313147544593875 +7.0658964679583107 +56.854107896382686 +4.7720652803144503 +8.9642025710613922 +18.336845757402891 +16.529135688820759 +11.458019852083311 +10.587027026803042 +24.836848385103934 +3.0032493677263972 +12.688359579986752 +8.2682348668502499 +14.905555412377289 +8.5355393383092348 +22.762971389043884 +6.291392745760902 +8.2998625161244064 +4.5730993923521197 +15.279151666471005 +5.7379466471935103 +8.2942477963592012 +5.8198524328573455 +22.371814846697418 +6.5689081086006524 +13.548682158057645 +9.4830905625866109 +10.510290426457487 +11.329971311463481 +11.957114993499829 +14.480895387494186 +9.5878534519056871 +7.5919289215954393 +10.148153010555305 +20.51063766909018 +17.293672786192104 +12.669301165343683 +62.943405158884673 +17.525382015847413 +60.367060924996281 +4.9943786281043998 +15.168536022564041 +89.991180307566253 +9.9542461326447551 +19.327565015933317 +21.52758114789134 +13.1337836821005 +7.7896104127324719 +15.17499253729963 +30.196783403430771 +12.256879221932437 +56.515869419560545 +16.763005678089858 +13.129155028724085 +32.782273567154505 +27.889740613346589 +9.9955426334682898 +12.926498914038845 +12.93394384595679 +5.7634279298175528 +10.361602965323314 +11.784261330193353 +12.244795568936482 +11.371723654608743 +13.126842053539626 +10.799959506899043 +7.3301136823119037 +18.007454491637311 +9.1078866420642015 +10.083862413351284 +27.932079188224094 +18.729098172853355 +20.32065958486578 +9.5880831469623757 +22.302124485937533 +14.572848958348224 +12.699134719574687 +68.239205710445617 +7.7962863601491392 +15.287961450835997 +18.966494297053259 +11.907583324457327 +17.376395864117907 +16.7161893362223 +12.291894375531911 +9.8215234990701248 +14.353366736098522 +11.098980769779359 +10.128425209462023 +17.652701572378959 +11.118894732737658 +5.0566990426090257 +54.095899349356102 +18.61784102612171 +13.489557714958039 +6.5561433914324283 +13.825516709187099 +19.697183781809855 +11.409280102308387 +7.9817389298945045 +11.452183225461951 +15.229614298905062 +15.813478237449175 +9.3477039722308746 +13.266722127714303 +12.631947466658758 +11.624524125249877 +21.536877805507345 +18.407551477852792 +33.290992822544041 +13.419823392245775 +9.7546441486596649 +7.0053361330407284 +12.759974677466346 +10.295691720390749 +12.237265026421127 +15.539767060686628 +12.812919200556962 +55.016998231719867 +16.880033913360734 +11.419598973960433 +12.376407338692971 +11.051623341384655 +6.9674331945694661 +9.0690836703121249 +9.0115743455195343 +32.067580557665707 +12.377994011884759 +11.719215262176562 +11.565574815773843 +15.631435087001954 +6.9868855372312453 +4.7462070611690592 +38.104902997248246 +12.239263066631793 +12.531716357567007 +24.732740941534246 +21.908016024650323 +24.418494040903227 +16.113439793619619 +6.6759663950233303 +9.0917000090322091 +22.196331068717392 +13.482022418023618 +39.654927598006793 +15.549546183605678 +18.57693177255797 +37.905419658618285 +24.307421063244192 +9.8780223475927045 +20.06253785094264 +29.839060172874724 +6.2888377614787458 +16.402082597156813 +9.4144739124191972 +16.399243181733311 +17.78322777335584 +9.743576103754954 +71.488992437782485 +31.879684735755859 +18.821071218361784 +59.379746507570587 +7.3146437107280491 +40.013707480842015 +7.706685789316964 +10.666087862911318 +59.354451139113166 +36.792920932362875 +44.700722397170296 +7.2733035990292052 +14.494163688232149 +8.2941367663682399 +12.213603432933326 +7.7274109775080291 +18.053803762659356 +24.066197434481378 +10.723202348616574 +15.822277964699293 +9.5892331323544653 +20.697083311888143 +23.307718956864591 +10.381700630051135 +8.5876832704371253 +21.805847810593207 +9.4237608739109646 +18.086132911817259 +7.0210617512022111 +27.837681107943041 +18.54436010710333 +10.216199557461337 +10.223135859034272 +26.206487364386529 +8.999405020242321 +6.0807042537959148 +22.887164482389657 +17.450599463614413 +16.362315112358623 +24.77937884390235 +10.577968258604642 +6.9249825031008072 +43.632745139447707 +8.545839738708267 +9.4141141595279407 +32.175182103411373 +40.928763071821407 diff --git a/test/data/nested/frank_d10_U.csv b/test/data/nested/frank_d10_U.csv new file mode 100644 index 00000000..9a8f14cc --- /dev/null +++ b/test/data/nested/frank_d10_U.csv @@ -0,0 +1,500 @@ +0.41288497888847719,0.53766876112786055,0.3947612276824678,0.27109592969646201,0.29402934541576953,0.58495882499846474,0.39076416645548528,0.15354865949485214,0.15921933189384391,0.36312709093909057 +0.67048291619163169,0.89174658412229402,0.72950360804679337,0.84451781780807544,0.43260424767504579,0.71765243107801791,0.72296127703156809,0.56667027543880844,0.85572707784012181,0.52114646518020846 +0.67383629013439816,0.90356417794827482,0.54940883946255692,0.86252926875021507,0.41853987946524451,0.51898218979476907,0.7341348594927648,0.47551204400952019,0.68206515666679124,0.70095309193129252 +0.2601531332173217,0.5439897750329683,0.26090687754913711,0.76408469650777455,0.34998290598742032,0.48618371019256335,0.71048160662757742,0.76513279418576907,0.72990371703053358,0.6764804028498439 +0.36222368552754158,0.31557890717522608,0.41236381340422845,0.57596327396458791,0.7827095929824226,0.045063767145629763,0.15299356766627864,0.095444702805260823,0.34785412441124508,0.032104081212319474 +0.27054822369227471,0.43983982017380296,0.72317803066107,0.33154851806466801,0.64122313985717194,0.98928695954963519,0.9195240665285298,0.93381301747284895,0.97168544467421247,0.89043564468737846 +0.74049679202416741,0.63684457345516154,0.64023815377731541,0.94114745708065151,0.64614262213580953,0.76473674297448646,0.92409761066664098,0.78420599029049654,0.64795730492914738,0.91263432809500133 +0.3927129854216731,0.45546909651602707,0.24524443343398672,0.27917504616198574,0.89679058417095003,0.33491194059024898,0.68052487113163451,0.71624784552841003,0.92989188843056625,0.83654207366634425 +0.4389808446030099,0.58252603214350374,0.85927737128803727,0.91375196815351134,0.71959426227840151,0.87292319015249786,0.4285272905544858,0.37642047132249234,0.2329117611225282,0.19194139321917353 +0.74102803462638156,0.64869970231665941,0.26825831449241844,0.3380162837856947,0.5433142078400115,0.67347519451868365,0.54441627723281183,0.66748053141054364,0.99136740466928064,0.6113001811027039 +0.64353141381059809,0.91543503003776161,0.7228036169253711,0.81900640027014826,0.93824259625397666,0.15859819346224641,0.44593650035676646,0.14581710807397741,0.56127001615823136,0.65996761774294699 +0.27855290467480343,0.46714443448581799,0.37511812857701687,0.33331254401128141,0.76711345391231056,0.13289619775606121,0.8177736717916495,0.21544101691688977,0.37854641626472829,0.32684177570627415 +0.56672055904047247,0.1140928595850787,0.74449011162504997,0.13836225963314785,0.69500469518242936,0.47089822569978479,0.6363397742097705,0.38399558365927311,0.52439954192959659,0.41311482721357784 +0.97651123980564569,0.76419223696574967,0.73555527595453429,0.76442337172920283,0.98730962260741695,0.89475647479411347,0.71549110105842839,0.90952545477192959,0.89189723579328639,0.95746127245364732 +0.67606141586525781,0.66758844457217159,0.74241762256132882,0.5419129484507712,0.60099298667046042,0.39437323206220964,0.76687276744632449,0.40090553773916526,0.18387299453025385,0.32453227657243033 +0.025325883507557823,0.19103244054713903,0.005355492321551426,0.46897288589389119,0.044742953934483021,0.80879277831990581,0.13137095698039786,0.3775543301890163,0.10931582810008747,0.47071122933994103 +0.12749523716570255,0.34967583740945274,0.64045314505346784,0.14511759308516758,0.45992809013114389,0.66655660662217664,0.34080633943085881,0.28337590533192702,0.24321876742761162,0.40420550954877599 +0.82036310544155033,0.80295357931753952,0.30211872732616429,0.25346339636599202,0.51026691580773309,0.24254149783519613,0.47811146263848103,0.14890614183969569,0.11987109752954744,0.27914280319237594 +0.95636912660446183,0.5266562592296391,0.93643107710521734,0.62897917805821368,0.65120135628967257,0.75051196917774576,0.52478956102277108,0.3765043170715241,0.4862474350666165,0.23493192749447717 +0.49896682023141148,0.54843725633690976,0.25319085925003071,0.31803125064471172,0.69866381408064226,0.15424890813302011,0.62296210011117847,0.39619117698748807,0.33720347264898332,0.40541966390446948 +0.18752290433079821,0.5380263265979004,0.38378340759664076,0.21645919830189653,0.58811323580448338,0.67916823780978675,0.78106396648217369,0.92950915687833047,0.90655910872737056,0.85193615840397996 +0.5852039970386409,0.69208953515044014,0.012965478672422894,0.011101126001459079,0.28222261232440793,0.69637673444230641,0.67022759179235103,0.19269284742768539,0.42968931209179706,0.27835117388167863 +0.2863378930293472,0.18805988531676743,0.12751352603664434,0.017786947457362298,0.29682563050301225,0.3099078581726683,0.21906811589724945,0.29842041994561852,0.36244130737032088,0.24164998446940961 +0.19170585569585197,0.24796116686775854,0.10782557402854637,0.48349517930182662,0.48484354288666542,0.26215374484309473,0.495027509314241,0.26742658569128719,0.85637506048077938,0.098232826829197456 +0.50880924625042834,0.92553080563083379,0.96144092737812548,0.70095691297319318,0.7378260605328204,0.77019384104641553,0.64345925630186396,0.81764206619117696,0.995,0.76566686065052103 +0.26827819628957483,0.76642542044282358,0.18772623376572195,0.41271877885447061,0.169485321937834,0.78725825037690234,0.96981839466024189,0.83435430916141984,0.63682150034582907,0.59830565660376833 +0.075676841010870577,0.0088283401273754857,0.024590372137036368,0.07851307399688201,0.015474464715235312,0.36559174171998432,0.12719862701488471,0.05453288767604117,0.061517988651766831,0.25815060755121999 +0.797539891057645,0.94417107434127523,0.38638108837767737,0.94051548888091041,0.75759951307554219,0.62472892444929795,0.1300679625419508,0.56935851110028901,0.56642553073470348,0.15228581850534073 +0.51208751704260425,0.7084790244407444,0.61635564107564056,0.7451138876785941,0.74276050532352622,0.62313206880935224,0.048350122786368896,0.0094808253052276886,0.1903363232559121,0.16936918915599314 +0.46309299393920433,0.64370286403572829,0.72668812613118905,0.47038271735073123,0.44655561083345774,0.011956093512718081,0.3316208952746853,0.017879683844521974,0.071791046910229306,0.41710710621555502 +0.3620990881738444,0.33043106374680398,0.3593491709034452,0.22530156155699482,0.33691976629779996,0.82153922392171164,0.28949132360867647,0.44556345805176634,0.67424635836504976,0.44864143084851194 +0.15186633340527789,0.78808964850031193,0.21534664402134351,0.071867091726753096,0.19650870733312936,0.15817710178090011,0.30369691268424903,0.44298416489618941,0.59492248386959368,0.29328376313788296 +0.76424949815540622,0.83598014639573437,0.99055024128755509,0.91927538820890797,0.92290179393602623,0.60708153629093231,0.92093748730257241,0.18096783707733904,0.42111405785544931,0.45702821746817879 +0.64959813433414859,0.11426016947371723,0.19899371240172209,0.62256239997804852,0.13831080545788421,0.026017100346516983,0.024053616594765542,0.19293712606304941,0.42574259286630112,0.14008798947907775 +0.26441004358731934,0.28762914813706142,0.39032249865704438,0.29874175824807436,0.60190135330776484,0.30239517314476361,0.37707432688330544,0.26246201331378438,0.29044667698326943,0.53464830029406518 +0.81966624039392766,0.66938946096342655,0.61051121130003372,0.65834652355988199,0.91814644887926145,0.30296148083289554,0.21197889200994385,0.49970113593735732,0.19590446443181164,0.20238496150705626 +0.20053015694448328,0.19693742503296258,0.58510528222541169,0.21681450345204778,0.013209684722833757,0.62691984671982692,0.44673561005038309,0.62540029801311658,0.59373883387888604,0.46481986969593048 +0.04358422638322601,0.15123808218050516,0.091063347907046566,0.20245526512736117,0.10724407559610757,0.60580588414449976,0.6054975172446555,0.77146813270518955,0.73915433362707939,0.67803949621156434 +0.18874130270874989,0.032052389724422287,0.021125717525147164,0.20299928178429266,0.23567356352578445,0.51175762174534589,0.18456671721651852,0.072490751015729438,0.035459468344934256,0.010387050308064104 +0.28650443044182827,0.69073027020203503,0.12524085518089872,0.045205162285137698,0.24344409452169713,0.63630970715894097,0.170861202961539,0.41457681133761237,0.4046008949226253,0.34907218246371785 +0.38053532997379791,0.61951477834372559,0.10966504234239308,0.21551711918437488,0.015082695899773773,0.014546750491727538,0.015723804681338743,0.03818514713203526,0.084769941720887004,0.14189244274167129 +0.90571520168247122,0.94821571712963326,0.7871322447608633,0.94361970762837721,0.91107888359692057,0.2728905745025304,0.81139894502120402,0.78633958051795494,0.58290128767839477,0.60247843971592174 +0.31942217853151722,0.0052579108451126372,0.0070971293898863582,0.016103050351385394,0.24557911875309002,0.3285770140064449,0.15271109619062156,0.31630372090149106,0.15466052878765152,0.61262507599894667 +0.73957860518171437,0.18197956317454278,0.38864406108041516,0.64309827281976761,0.76174111061845373,0.68716636984026613,0.068776143045406107,0.38219258011668222,0.13019249399076954,0.16551106967381868 +0.34399165348422867,0.28415757688344889,0.14669334326755029,0.26985633224831418,0.19215140675078762,0.92602257538236743,0.40546078383340689,0.68190143429091776,0.74248451556195016,0.6918114664440469 +0.01070600185766013,0.10670080428827408,0.064441758237089364,0.098616499599310209,0.21394512525876624,0.26212794517050975,0.53357266410603121,0.63903132049017319,0.2530423029384159,0.12757902705926261 +0.061091476512975751,0.28821708200849083,0.26648711608141196,0.0074903015920525194,0.0050000000000000001,0.25352920297883008,0.75839273774180982,0.04616848568549356,0.12454587928369459,0.062327089341133263 +0.034705258395431482,0.28561240123236054,0.098702425573727687,0.21425043771160407,0.013074113434423187,0.27904394894722362,0.35172653532936526,0.061855280044264535,0.14687292525196222,0.078987262357267579 +0.2163140702094819,0.36191311050788777,0.12454757149681267,0.14098058544914954,0.05376676065498924,0.030604722240250633,0.0079492259828937845,0.22993392389617467,0.0050000000000000001,0.23407032681280349 +0.27602481863049544,0.22497210130678108,0.36847887097974574,0.49714674774440948,0.57271449555992016,0.46630339158582568,0.13924119129661261,0.37390310145565564,0.16465057732421645,0.30429726236616661 +0.84671672985116975,0.92128445740671916,0.63119182645459393,0.62908439300371999,0.51116644669673383,0.27019573937287078,0.18893407387077499,0.86598378952475463,0.1478446130349837,0.19342769155628659 +0.016933844595281577,0.046707624831478792,0.39209553695400468,0.0239144445222432,0.1162250168563409,0.27128027981962533,0.22918847584515417,0.35043361355201641,0.19885925840936275,0.18660477382946455 +0.69592176900756852,0.61060216589248517,0.31491594508407073,0.71322111404151234,0.094299545889961256,0.15948619632400324,0.16197120797006159,0.75555193200124848,0.030456602195054368,0.1833258680708304 +0.4531225610884515,0.4899069137463814,0.42522958412883016,0.20182849824778404,0.30108624542481666,0.99490573283400341,0.12002975612995975,0.45812421521986912,0.24193683071644562,0.25358697716729273 +0.71320578962231873,0.69063350357464137,0.83174982792115104,0.70305167583864714,0.5724635991209639,0.3101607713906599,0.46249624973279502,0.42734204875887516,0.33985297076288001,0.59344657024484881 +0.7483158766752942,0.81597629134193372,0.7713393893500271,0.83524418293381375,0.56727461973787152,0.68474371437332215,0.85387455215094832,0.80882166672380951,0.59309086643042797,0.80244407380814065 +0.72194443282696796,0.84649700429871921,0.995,0.99115519857149526,0.58845709290471682,0.61929411705932358,0.53071705912589029,0.75454479988547463,0.35291835540556638,0.7711838570248748 +0.83391378265575056,0.92829490001894599,0.89511766904614998,0.62712928155087622,0.90389050895463785,0.94633018705643757,0.93633892349315873,0.71824250437202419,0.89651393427629156,0.86256484439945047 +0.15571973706452846,0.077859441080371905,0.26139113251702406,0.094965639029404803,0.13110433021211804,0.024133246828578619,0.019163596763983673,0.049127682374100826,0.19638541198219778,0.095460585987901941 +0.14738150935799288,0.91529120472841052,0.26932172276429367,0.20883150605369011,0.14286168638501101,0.099298575107249071,0.097396967554240155,0.044323810579962833,0.017339903715774756,0.066247461043539735 +0.12129690578107888,0.1940397973812712,0.094907363672981693,0.086523044185022685,0.082928963034654912,0.1742303317587422,0.47825906585785605,0.088696386112141257,0.23508671819582178,0.57507057613110946 +0.2982653813369629,0.5114592380414249,0.37878966625430865,0.53485683366306991,0.21003027187544498,0.62552297071669938,0.51870370240067087,0.36456808305229327,0.85641435786964593,0.75130708949290637 +0.54786924275070281,0.33222959315753875,0.42391582517302739,0.3919602054229494,0.30582549332757869,0.16376051193220281,0.12262737014680924,0.12054686635384163,0.30606793469633364,0.62882391808670701 +0.25789940244698606,0.023897815175596832,0.03990470277495671,0.25417850239319284,0.11677440293716101,0.50698678698972777,0.71399871408356863,0.53962212245096364,0.68686295373481321,0.41965369638637806 +0.85736905764243487,0.55221408561919705,0.39213183367974347,0.7252977363823403,0.59468797364388415,0.14628478154191527,0.27209345469600976,0.57849513678229258,0.22723697757465378,0.28219012424233803 +0.73174113169283861,0.85371930550899577,0.85546405331114528,0.58166289437212826,0.57722973599447713,0.25742705140146915,0.0091407916916166829,0.17461960148649008,0.25459648590186168,0.17185975136818088 +0.23415086224546799,0.13333801724366645,0.14639682273264754,0.84476813834043463,0.10651074521593604,0.7442229021980844,0.12252542664646926,0.63114212339860121,0.18820064017200533,0.418985041993439 +0.76782218047059603,0.83257125134695587,0.97162642984766512,0.66091981568024161,0.70663918703211981,0.64484516732045161,0.89896959267206622,0.80124781056655903,0.74083831629831787,0.74439165796502005 +0.062627902932089752,0.34641521665617192,0.2517341224302122,0.18388128877268806,0.20315184918582102,0.20991865338874632,0.26032157873851725,0.078256884560695905,0.089731672866045303,0.34175927631440894 +0.75651768938599528,0.82144276853068088,0.47076628592913095,0.57788915754644976,0.5282678670191665,0.17201036147890336,0.38387514822534519,0.31781639214023383,0.12205265575904223,0.0050000000000000001 +0.0075488467964406336,0.12131918818341395,0.027795070403963458,0.17429730182630659,0.27358978285338253,0.15612496100948881,0.014195480878707423,0.056863761710710378,0.074600825755632622,0.15195186014171458 +0.79932729071366149,0.49923488995409571,0.62591392951435165,0.66641058106324302,0.70003707453724529,0.25291670442675729,0.69474967478890504,0.39004603409557825,0.43381519839749805,0.26381039971602616 +0.97080635318853647,0.74972692286245968,0.85765748898847249,0.88368999664088865,0.86208477659965133,0.42128804771346196,0.26984155768878282,0.63974534915177816,0.79096596324233692,0.29505955454078914 +0.81014145422088157,0.84800917390384001,0.56261548624024593,0.89013667122343709,0.88422614676527833,0.42669888885575491,0.75411433741100553,0.87540367487235171,0.83921446718158466,0.47543479580781467 +0.37876130436769095,0.3285650969774031,0.013554343284350304,0.58099056818173112,0.098107618774528282,0.29385769469081835,0.37370397677296097,0.026440309447944323,0.14759269604110864,0.2276663076190798 +0.37942754075577523,0.13746782598901336,0.61111909555620292,0.62145083371433185,0.54583088398794555,0.9624064946256019,0.79609919668291118,0.97201958784716203,0.82929021844756123,0.91446094730053185 +0.30009025787266874,0.050409736955780216,0.18586727531511033,0.29940135023207803,0.068079470860547636,0.55616783033474237,0.67193679223418812,0.27917192570749183,0.45926610406604673,0.32968394472846174 +0.0089819188176358811,0.33667208210681887,0.40743223324534672,0.075405377225260362,0.1873232260404683,0.53152415234944717,0.60969386159558558,0.48033520430908583,0.50975750762154326,0.56962498117354565 +0.46426718483699814,0.51103176784818038,0.17329237164813743,0.38551114677102538,0.52570966948405795,0.25751822217717324,0.20143331683357846,0.081483109941481613,0.4962045452266467,0.080203680525309407 +0.45131446205379366,0.13829092695960565,0.14928562202840817,0.23853520743432977,0.3551480873429711,0.34134026945685358,0.667369920556663,0.084753505507259547,0.038774679211210375,0.15994868861162786 +0.69431272661875076,0.69967071511200229,0.62195130236795859,0.61049937646020913,0.68407783293514135,0.7107132841774686,0.1373456564324515,0.46407696613459914,0.1289870038454029,0.1834933248756051 +0.56808310785495486,0.43853918326203833,0.65395271274610112,0.7242765029368412,0.26896523698815611,0.81545071149593529,0.79647376560023408,0.96700337840592487,0.62503200830542238,0.79698453695163463 +0.39296650727179938,0.1345255245396475,0.45315845779259778,0.84132846878491585,0.40585114152054491,0.072168643207996319,0.027595528023094069,0.32797698365175509,0.093837890686708225,0.06875968133682317 +0.33538597103215539,0.34198883510544276,0.33581072613015173,0.17382207934861721,0.52980869155726329,0.29482459774590508,0.16941903045518053,0.58756787845049807,0.4582516213704374,0.50812160971690878 +0.95977472181950385,0.88300177702330207,0.77176096008042272,0.55123509446275309,0.88304763831546684,0.95840588686404771,0.85305145199526322,0.9536103636782991,0.995,0.97525703252175799 +0.83523219957415562,0.86374101109685575,0.94658509289728521,0.87804882400086326,0.83763310321955275,0.81855822782380794,0.81982675541075234,0.71675610126112144,0.8146015841339187,0.79428082975209113 +0.40492211516850274,0.36662162517314112,0.40686405854649099,0.27802424840047468,0.52502882361295589,0.48867527212132722,0.53322412070701763,0.28037299108109881,0.61115657872869411,0.39084260308300367 +0.070692317008518968,0.2629156283510431,0.04161175838090464,0.10218936754973468,0.14108533944818907,0.79263932499451917,0.6207838478439931,0.49777826873469178,0.52034760153037452,0.77382085777935017 +0.79666674626762091,0.82718125541577403,0.80347391610848118,0.64954898253199356,0.87149577823583213,0.87472564660128382,0.4275691272632699,0.42515209582052338,0.3906258888600882,0.46939279566868264 +0.57256283020504051,0.77681090144323561,0.5180265987582966,0.79160538662108015,0.98258266932679317,0.75200943104573015,0.59555466120946043,0.80028246939763759,0.64639137839548932,0.84148226250544433 +0.054679460203884256,0.014587929734271414,0.24110916166683244,0.17140836772160328,0.037295766785982939,0.24485789219034415,0.28168269371963539,0.11206175546977512,0.18350627910695672,0.66140080630429687 +0.85657288510850638,0.68498953766538384,0.80978498698095169,0.83005083605530006,0.88090644180191835,0.94832227399455427,0.70311359115293781,0.75534412721753541,0.52527252517756962,0.995 +0.57389994536435385,0.12386090381188139,0.46774080672185003,0.55599001285736338,0.3463916941836972,0.85426646561244723,0.1691604218503992,0.2978070758690633,0.17815408963361468,0.094207762012964769 +0.8653315225479723,0.85432906102504802,0.87542254503932027,0.83318991135455933,0.96458232568692415,0.6285338693123752,0.80668977581080381,0.69246123314951147,0.85706186844617349,0.90430697260307258 +0.96613759636651464,0.81833884076331098,0.9516493970004285,0.97553997932117409,0.89509403574628887,0.85330941402934712,0.80486116322571744,0.61945592609117517,0.8413561590423273,0.86882250322377508 +0.77150089727088988,0.84008958461344485,0.96957275792373343,0.54801420305739068,0.9068552667449612,0.65853300553862626,0.83342706030816105,0.59441610201611006,0.77691562633844469,0.74659827174036275 +0.83240560657479357,0.3100664278899824,0.5267597239289894,0.45736313934321593,0.95600433621438241,0.8930105617910078,0.72528161134686808,0.78161735626053441,0.97530931842628843,0.74107106428709324 +0.068895605120512515,0.043798727419934971,0.16349459943013006,0.038092173723280345,0.72492327718645821,0.11223252772470779,0.19539872425958194,0.50014030424063094,0.19712892457028525,0.84718653469462191 +0.71840943334939511,0.51498954420094356,0.86171761158038129,0.89712290759779645,0.63085078928270111,0.88810302191995238,0.5430408955726298,0.64878581868833574,0.59571241782395923,0.75373026731539938 +0.23462479511771783,0.17596134109772454,0.27021862761467219,0.3629009067371981,0.01087489418569999,0.38341419564676704,0.074560050299632502,0.0658185924112418,0.099063857720474352,0.024144696973972229 +0.70001975189265897,0.4744734855194116,0.27601159361075123,0.32811575135565707,0.47648956763441719,0.37293297433643857,0.081113013467992656,0.45317209485801957,0.80472097409073595,0.50320738626760431 +0.86956289494459971,0.94225327056482477,0.90164876831112561,0.90044054432654885,0.94225561144411607,0.95482960258958882,0.94890531161217062,0.98797080651273905,0.863341902469976,0.83559734150184584 +0.73795121131160824,0.7978131961717676,0.88912647866526773,0.94731574997421397,0.81143177588818904,0.23312161685317356,0.25367179457680811,0.31719389840145962,0.12192454168690192,0.076222862029689448 +0.74787279784519689,0.35115698128356898,0.87006993251269882,0.32118043620721792,0.2925712726719254,0.15075589015032864,0.04686038274668132,0.085673684225193114,0.0470965874556077,0.037440935528147895 +0.27670846021058471,0.39182785261073372,0.36121437724796401,0.28583225954208025,0.45798303399351503,0.34635421758867169,0.44710076876799676,0.21589643097832434,0.47389212760026622,0.67305488235433231 +0.63215466706923729,0.56770622244221025,0.58090233945404024,0.51385736683732808,0.52953810934559375,0.76259826423483368,0.74164606400881405,0.88215792816480776,0.54580039155553006,0.42777349051903146 +0.95820735572861881,0.8768863001314382,0.98611888915182977,0.94570385702535553,0.96393680528853087,0.68975510002928409,0.7309253225976089,0.47795925868558742,0.39243958660518041,0.3469489685667243 +0.34348041385380923,0.52689922737772532,0.14249041644507804,0.35640620722552119,0.15584056967055182,0.88558339278096487,0.85307523721711931,0.78341760087641332,0.77548779771313447,0.76524070414597567 +0.018581973090275428,0.21247326236335201,0.70295807576621483,0.23831112027983703,0.08511266970891404,0.17975211012527054,0.6794778084440587,0.59843373074545325,0.90591287062851822,0.27311514408211679 +0.56999237138107328,0.58761878646327936,0.45569326254190035,0.8426474430889288,0.64109925154479863,0.22657830882235974,0.25387796942960028,0.41862047489849086,0.60060770405106978,0.18659010177362406 +0.025170159064383579,0.76030722763970915,0.11792634354788642,0.0355720800871588,0.06347074246151313,0.1669411952316362,0.19732512839255528,0.19866886417731316,0.36446962339687428,0.096576500480304167 +0.25894508834763008,0.011177720938586159,0.094896625407281054,0.082295236672515953,0.62028644440579006,0.75097078949328933,0.5301101173681666,0.72912463828105945,0.92074793085338635,0.42194214035407795 +0.065875659397467645,0.2346582233731222,0.13342417220702196,0.94067851922590329,0.077221307175940918,0.071056491258795568,0.023366060660928709,0.2036689926462773,0.083123175747468081,0.16936661538785053 +0.57113696129866032,0.61207383321015874,0.54400232664192938,0.73299424481228459,0.72838343746843282,0.22931227306253815,0.62166068292571919,0.977977565460596,0.51555740387993843,0.33469326267368493 +0.23314394806072092,0.064942367753255487,0.31835318673984514,0.19045891342103166,0.013753230654411426,0.55940895437379257,0.10440015661880234,0.11332925167517577,0.3057870165503157,0.051723703130855808 +0.17668829060845748,0.083971802174354848,0.2711613428255123,0.10941003050539491,0.17952990395134022,0.14530352290604043,0.070966462400983282,0.067256502079553249,0.35800393499085026,0.088835152942928319 +0.56116026087233739,0.23427976752282653,0.23069546683109904,0.026054216461498456,0.35570036401623217,0.38553609341033968,0.88600413300445457,0.45962948325905095,0.57302531678578683,0.5300269705767271 +0.42140345325464734,0.51267760302289367,0.19463866457227297,0.24576435759082016,0.53476456730277211,0.4758278152730786,0.57671095037949116,0.68863422781577888,0.97045648805214091,0.78546830223057773 +0.80184933720454854,0.44298589779646247,0.24932243514922947,0.17963943988434677,0.42806293795001837,0.54328620017622509,0.91100227387504762,0.85362131512373907,0.56730076656094619,0.54648253184859552 +0.63839122143729687,0.2486804810178051,0.145499643724186,0.66115100201568233,0.20737870506127948,0.6565842113632212,0.60578989601344602,0.85795740617322025,0.946020676608887,0.77912044766707722 +0.80357583113677311,0.39543765239068518,0.62575548802851455,0.11868985768524759,0.19952187241870578,0.75932214644853446,0.19203023731825558,0.1336277728842179,0.44517618519603386,0.067046499490979405 +0.59189881770045183,0.78837577221565303,0.8759934132394771,0.53271996407420308,0.71800525303114693,0.98522502949343949,0.82754709446452845,0.70286660335841189,0.60163198501686366,0.65619872623937825 +0.58589542800025929,0.75314101300318215,0.85531463488586468,0.48413865963812019,0.62793125226744206,0.93547294128801739,0.42687096222653198,0.13833324451116635,0.30531789167435297,0.13891109710676386 +0.44760611482388191,0.30779540984076836,0.25719561832375382,0.57374556022113987,0.93221201378036356,0.87980909770703097,0.28339966855128729,0.17436002535396905,0.96893311859456821,0.29915844948846315 +0.74624595896846979,0.51536727338680044,0.70550976824597034,0.32254909872427007,0.70789275944116103,0.52666807689820372,0.645032332657135,0.90925717764183989,0.89697891115792228,0.58118468077736751 +0.10773325950979196,0.12239810507163229,0.18659417054732957,0.59314175767940291,0.22941752630868534,0.69005619079689118,0.90625967326922452,0.67068095426656904,0.71181600875570017,0.53941222306457259 +0.37471528498988427,0.45873978457530107,0.35739222486154465,0.96291883333468808,0.5811166316561851,0.70874690657364714,0.43771320281666826,0.37402942552580754,0.29355212018709109,0.77227037187548753 +0.7396629074498926,0.93277454862253806,0.99091404720092147,0.70030681343632351,0.91115862972218653,0.9836685966874843,0.40772982841008532,0.43426444378565199,0.50533508407534078,0.5717435023107087 +0.078750917509284646,0.012194031587578799,0.17180295838625825,0.086189864930937887,0.044017546839322699,0.68304100734530593,0.41560460251639764,0.63573306644684369,0.68417216287343385,0.41206618348951629 +0.36615203244373906,0.3319034002197474,0.34243129371316483,0.45940696026082228,0.25965300566168048,0.81416238183737111,0.97796866120187542,0.91049017899785301,0.85176546705769596,0.6456483644724329 +0.39471413258192012,0.36322594483499693,0.47274269812624026,0.69235924430540363,0.4187457647931313,0.74329308714367892,0.29639071234851555,0.43260754973744175,0.55356613607727811,0.93861917729372202 +0.88516120688589384,0.95936200374852887,0.96412762199178337,0.98242808473877585,0.96593776359803973,0.91109063386101385,0.78661941675817948,0.84618222064454351,0.9274492277472659,0.874624622141702 +0.87516817359690147,0.92521295984624041,0.79232934178434666,0.51426770104444564,0.44823141113738629,0.91412160682374699,0.84127505405921732,0.94357290750484957,0.95112123401485404,0.9776316039205899 +0.42381477597375672,0.23924166933284663,0.27106514756451816,0.36001374418265464,0.28186043337337174,0.54283890806254842,0.83856494937207815,0.57040265234536358,0.69075614269240382,0.92540374104281975 +0.031498598270547129,0.098849236179384042,0.58162179987993867,0.29533088658354656,0.47425478950026501,0.29182289456366983,0.66106753217172476,0.28455025350559005,0.73369846321292687,0.59846377305802689 +0.064498378556215208,0.19926042159204971,0.7092774886114015,0.031384274101592655,0.048716038378197407,0.69059979068697053,0.33646219971706481,0.76693130933562692,0.27777239042916779,0.41758469768683593 +0.0077429623664602154,0.29752075465512873,0.17664367801626857,0.12469770913595152,0.18956276486279133,0.81775546466814641,0.77542736040776972,0.93613992058089068,0.55725778880878241,0.58272819491685213 +0.022298381506945075,0.016519909637291337,0.044336289836801393,0.59744477286585429,0.069641158770545608,0.31031887061545083,0.073224259336720388,0.23835145329940655,0.16743760902318838,0.28165702297701933 +0.90636094380244248,0.97941265252301446,0.90782553117605036,0.87345136227667508,0.79069669058662262,0.7531611731101242,0.51471142345690146,0.59563727272325018,0.85161389198037085,0.79116599026019108 +0.47489975213327718,0.41279631652287385,0.32106900282088091,0.27814545939327662,0.13324910312076832,0.32734224662999967,0.1269536798645351,0.48427252189139869,0.65124316114815595,0.42504458266194123 +0.23121910564667458,0.37780891646980552,0.48959629735327348,0.40524891795939955,0.45341386200743816,0.91484769593807025,0.85902098563382623,0.88911914461640795,0.7125388194399378,0.59008007342344904 +0.3188283043884359,0.61534433261840382,0.42584025827818694,0.50633968398324192,0.95542625556116945,0.40426266615395634,0.42862712251371848,0.49804922475595959,0.43813287795637856,0.27019094149000467 +0.053565643088116177,0.47131388008710984,0.31461538202711747,0.14050748609589203,0.34139549636165933,0.66727260311017411,0.81137407253844973,0.47772250001435212,0.89071083258021755,0.79147646765340474 +0.93124592284159058,0.31389543521800456,0.83857261130469185,0.61000597247038746,0.71472929001901808,0.90265317037118709,0.82811988951288451,0.51550766095169798,0.66161789538454863,0.68054458344704116 +0.78405610621753774,0.44097423195489793,0.25121232061065302,0.18456151938881427,0.16017462036689489,0.30140035020304312,0.15795755214640622,0.22209612422739711,0.63856532567296842,0.55332439122139365 +0.69218958136971942,0.60366222888114662,0.63363742336514139,0.73724553876672405,0.74371154935215111,0.7239597599545915,0.51410984134417936,0.98245697483070171,0.90070868653128056,0.62453059470862837 +0.1545412104724766,0.18758970187628332,0.050617446744590663,0.5642379829951083,0.1341968109191003,0.66521756231668072,0.84566742015885432,0.57465041065006361,0.61958326408057252,0.27092373205232889 +0.48052368139270918,0.39335130612016866,0.48370723324478637,0.24133751328918668,0.33310992977931497,0.4464187404664709,0.72122002320247258,0.84647147866780181,0.61110682741855049,0.51804826353327327 +0.54430600601943468,0.4498386628984018,0.65419933680095399,0.60832342956564189,0.51949509695987173,0.45353217524825684,0.74435547160100635,0.78008624564972151,0.82070335789466564,0.60025174790643887 +0.92518584246821112,0.676488650933603,0.54682590192533009,0.39466986528714398,0.25423556703026895,0.90779475049929803,0.72766298716305289,0.92634356222696668,0.61482777286437118,0.84881136103648913 +0.4490502114913395,0.23778576697805487,0.47541257520788394,0.25267298505059932,0.083523171924761441,0.24825831680209881,0.5003183351655025,0.14268182174419769,0.52674110347288616,0.46039686290896575 +0.11168126410705415,0.10278977171402287,0.14833629628993344,0.024499590304922512,0.10794453989365921,0.09049026246067024,0.17268526947010032,0.58872246506507331,0.53860517192515478,0.39342258669785435 +0.084599735887785465,0.12639300720184854,0.36640020934283068,0.28796077714651314,0.39529334867256904,0.34438623828464499,0.17442141685751916,0.034761880146116017,0.16028195133549838,0.22526063860278195 +0.37736634327813467,0.51291989305173025,0.35328232872416554,0.7647673890169191,0.26600260185660329,0.30328218624345427,0.43120963193359918,0.081745124683956588,0.30913191635045612,0.45476033110753722 +0.10834299498344246,0.32065472190152278,0.58147739371633933,0.78222123006707434,0.095266346732395396,0.64235827754600616,0.66757987919845285,0.88540810314588403,0.63812022077035824,0.34980599835398907 +0.11881069291487489,0.053577718470487354,0.19441961598932422,0.25421783511410956,0.16630116433953601,0.22428231671802318,0.51228959995205492,0.12192488592700856,0.21589334946475558,0.16345980492770412 +0.53457139850091306,0.85498648564679769,0.59587431760155418,0.448110018245644,0.57354837682214432,0.31295268758549732,0.15694867321872841,0.42696773415082279,0.42243398827850043,0.66434642564854252 +0.48625072041453832,0.28094151811092605,0.39209799017408153,0.58958214332233005,0.75330082527943376,0.2334099302243029,0.47496548210619993,0.29159030053415758,0.11942980796448716,0.20195086611784663 +0.41785143466420638,0.4015068830049151,0.52255754449288316,0.7059323960856958,0.50501169447670669,0.68334013098501245,0.47932997575844682,0.81460117551613909,0.2874624061805704,0.78511785031877834 +0.40082123600301611,0.16277951825760051,0.58926607915782192,0.067927907774000679,0.67615345024386997,0.74535247214952927,0.47336369493859876,0.82853798798168343,0.45398692329763524,0.51096418060478732 +0.058805758001620578,0.49523663285071973,0.14714938713587594,0.7501449144037855,0.44544408618821862,0.6331854767922751,0.53221763684996337,0.86676177478511085,0.70709840851486239,0.77045682413153749 +0.45631400756932261,0.65297592783462877,0.21409891688381893,0.22485994690214833,0.11268376265071176,0.63903841932187522,0.69846272669382925,0.71065722228376704,0.54401341595803299,0.49153783571091503 +0.88366775419269761,0.63458936326787541,0.69584014607243772,0.86571777830248897,0.58101950076524944,0.26570488038124052,0.75552545420941386,0.23565996505204184,0.41997786835418238,0.40514578073634955 +0.70027395576010454,0.71803636520052816,0.59053662177757182,0.40809198535862568,0.62943421115050757,0.45451218422385953,0.88396781965274518,0.39665551271173383,0.77283802328747164,0.16704299973208192 +0.59037548051798461,0.80848538191639219,0.44414435987710132,0.73924278168123658,0.46385874782572567,0.75837665985454294,0.88778859793091347,0.91790832256082533,0.86829594729351078,0.69575530468136604 +0.16033448065510814,0.35981732173241021,0.18576591878082299,0.30728189341607892,0.33404898448498321,0.62975119517068112,0.77532125965807963,0.82460663098026354,0.995,0.86950135588994448 +0.096513931450807,0.072090954025051723,0.029623459704462535,0.14175974091632076,0.34962783576338852,0.19821211163071589,0.22634731649305284,0.22906275079004074,0.04004973158590483,0.094320717995295955 +0.48533443055997139,0.51202303575701058,0.33212283530156461,0.41609100651112552,0.40915256491280338,0.54158698479295619,0.66094515440635981,0.44453917045029923,0.60795023504760848,0.3220223189273419 +0.98505207387430471,0.62874933672719391,0.66300722063169482,0.82292962944483672,0.71236465897527101,0.59416871468419963,0.85156328030279127,0.75292600787360642,0.76089576436788264,0.99016939321881114 +0.79220193395547245,0.6431492186675285,0.85946107088238199,0.55936817653127835,0.6597806985664616,0.9599419075238893,0.90432251422315946,0.58449588387156681,0.70666359181631866,0.60821032358216853 +0.70243445065570209,0.69271561913773949,0.81128574538160425,0.47523340789484836,0.44242599289282336,0.43676494152168865,0.20561143060331821,0.3202436973515469,0.31922677191323967,0.42762677147402572 +0.034038152171558034,0.06460462594987762,0.071363064082115152,0.14942558997427813,0.0054898423550283713,0.8439638020063216,0.83308044922886682,0.71967040954040851,0.86599147188825731,0.54455500599578865 +0.28160450110679935,0.31779522655415715,0.95268148891044802,0.4195163389376847,0.39160171381081677,0.67407604670733789,0.76047064459998581,0.78638242420856264,0.96886735389124601,0.98453483704360156 +0.73806728441806468,0.71239967682049188,0.49864054852514528,0.76793555615585696,0.62711563138873072,0.2917099292681129,0.32160538781318238,0.21535633571330093,0.35191138045047698,0.541437477892031 +0.13616306253950738,0.26705450154259336,0.4733977987489203,0.14729592765798566,0.3578778887458639,0.2361004704434943,0.48397467416361939,0.80825341245508153,0.096556924778277681,0.20880373331602314 +0.19010022074630006,0.074230351456216676,0.2405698703078139,0.16736173644313324,0.16460687431391069,0.042169551568813468,0.15226222402998946,0.026581145502869191,0.13879102395731746,0.33656286136829616 +0.7044217274267135,0.58830048175877714,0.94476120235048278,0.76600697336834322,0.73202222163672093,0.93023491246275669,0.84304517685085778,0.82097131459158201,0.73327619009068701,0.73589106797589454 +0.24044374963239035,0.37064104856108571,0.42575777196907583,0.38680378175922892,0.23835665904335268,0.43783410752075846,0.31987826686236442,0.71210732133476573,0.44864953597425583,0.61421815547509828 +0.70660402914735254,0.57434216039837183,0.90346961925387492,0.72642018922487761,0.701913842727659,0.81629422362311121,0.87708399238180546,0.81255737165337738,0.94479050152584954,0.94675541974719657 +0.52610255980366949,0.24081187261618259,0.45447462642914704,0.45055106727522898,0.69727535583660538,0.48030181191279597,0.75037174354656089,0.85172557827899453,0.37454572724527935,0.43514433960081211 +0.6680872117146448,0.57282595752621868,0.61003736194106528,0.41170233584125704,0.82396102693746154,0.85007528806453792,0.63235515591804603,0.55478525211219565,0.42307254698244079,0.79248767616808768 +0.12404026550860214,0.086153495445622952,0.14851887230179978,0.016106644558031478,0.043872251844741209,0.16528040371486652,0.75232869884347964,0.063299638830366878,0.3572227804979804,0.0050000000000000001 +0.38970878730200553,0.32391174379154464,0.43502779598930053,0.20953664844274172,0.48065869268612038,0.40352273805183558,0.40724251067149642,0.39275338003062854,0.3518939240311767,0.90350250611662974 +0.55487884805269094,0.62641605859971361,0.64603472207090529,0.51871216334984593,0.43507757913903466,0.19911723976839008,0.034178036992680294,0.18701268269797483,0.23948099798872657,0.24918796241400332 +0.80277986982828375,0.11820970717236232,0.11100533066201801,0.34820581568056086,0.17584082312533345,0.23688206143561347,0.37955547266756429,0.46905050173518303,0.17397706609336377,0.27096830002847583 +0.2074810127311133,0.37861707338015793,0.027255722350683201,0.22132049509673934,0.014869898004699886,0.14553632106981951,0.23294054917642448,0.0075584829028328641,0.21718872836209469,0.04324195269146916 +0.57475627065210433,0.77731906538246576,0.46456763872993245,0.50828788327635244,0.5926772357488499,0.85314872630987537,0.96827740772277116,0.94945376735994613,0.85644592953030241,0.8558775330602586 +0.34916356822037886,0.42518984232447254,0.30092775032972385,0.46920696707093212,0.28084206648054977,0.22344401202281555,0.56859068796620571,0.54310838479432189,0.39544249282335142,0.46688972201081991 +0.096682604762589941,0.91373640546225121,0.16401465053787195,0.48454011874855529,0.076535927044469015,0.27350454873522267,0.40523824139381948,0.14359907081234979,0.2471280964382509,0.16099989044597118 +0.51538738833127762,0.48157831534626927,0.69783315647509481,0.98038523786816723,0.80916437195264113,0.7702730744203965,0.85031007826909644,0.82039022588286836,0.74827811619615625,0.64100082017830284 +0.27824797413432023,0.12388673730311736,0.051616732351258049,0.48762236253242031,0.78400524510652203,0.085578650323449523,0.22136170716840398,0.33544003774295894,0.53765429297345624,0.20434647853836074 +0.39877874768360222,0.84173004000330587,0.39242754675797409,0.37392569633084605,0.62736994473379792,0.1832037788408406,0.18472944738460401,0.85702037162263167,0.20182710056543018,0.13853349615238397 +0.84666860961174151,0.59572649226174512,0.85339887815643323,0.88594870796077108,0.7348023668455379,0.54978586555807762,0.69229364997590492,0.90303623097133001,0.57384825535700523,0.68734666079398798 +0.38906788940745329,0.31281406790367705,0.8557704881823085,0.50375736920977943,0.73468680024961475,0.64109214764903011,0.99473804389707698,0.32894600686268294,0.49127329999464586,0.60570125348749371 +0.86461185866720758,0.63692182526574204,0.60979074952774459,0.41234107749187565,0.98966116222435563,0.77027160479337375,0.53751114095211894,0.53107162701780841,0.26465051432024222,0.38572351247421699 +0.55827131642428807,0.94807924467021643,0.82610025952453081,0.85760590029530448,0.56709551715175488,0.52931611434905723,0.43570739231654565,0.85157791964592633,0.50695184231153667,0.63910303686861614 +0.66930832364275594,0.42526812406140524,0.17466659340426044,0.3138322335144077,0.38070962161873712,0.46857974308659389,0.11848495909362863,0.2852971130923877,0.23366092276410733,0.62790832822792919 +0.83943483822291154,0.76023684456594709,0.76472540097892683,0.84896562292123434,0.77446973745827008,0.36838067669305286,0.42310442434973239,0.10796812796616778,0.82684962640632231,0.33918510263902457 +0.51959191559998086,0.66563820166629406,0.58484093032893569,0.7603758415498254,0.33701591790304841,0.49249041549046535,0.60077296962844939,0.55975910744746105,0.7460131647239856,0.4780018590681725 +0.67520611698977318,0.36220037771272751,0.34984880199772606,0.70711797472904014,0.58820516520063215,0.014274408546053274,0.0050000000000000001,0.010813332890402993,0.037675114086605538,0.36465701859561062 +0.41200518064757063,0.89680153466178236,0.66821738125872465,0.46915224040276426,0.78820219120825064,0.56688296239008062,0.53874302600161106,0.46536777741857871,0.29655319082667531,0.6042116294556743 +0.71989601623835009,0.51211064661038086,0.54009848073474043,0.92660187117870962,0.86733931276830112,0.23938098599319868,0.021476381021794187,0.16357187039103099,0.050547255930732601,0.082643467962051687 +0.069064390347000515,0.26001022991841205,0.1351458813587742,0.039586899423748143,0.18022105787532111,0.45852630541776385,0.56947893949108996,0.39156705400091818,0.86156814455170383,0.22126556446892764 +0.23217427413469705,0.53152969517395765,0.5430445176025378,0.49158603898831665,0.48530961896176483,0.21115423241281528,0.18368935762555971,0.44739986417698774,0.17306366973207982,0.25405021171900932 +0.30532531065423507,0.078644718421864351,0.22611299742130175,0.17648172596819411,0.11490022359067412,0.23176205463824395,0.34018231401569532,0.060571275564152219,0.24948478353326708,0.1499989086005441 +0.70012910490061153,0.42280380593729361,0.27740763386828338,0.40278576526907472,0.76795975861022647,0.71949735106317814,0.64692038038628819,0.60089403108577044,0.65090813112328472,0.39343453620677094 +0.39547108593828817,0.62415073989541026,0.57010515950969287,0.48929946610587671,0.71754388391854729,0.80397320396149863,0.2541110070014887,0.45141113302088431,0.37189044393017212,0.37044333535596052 +0.22466987854303833,0.42753379969508531,0.2056932639388892,0.83739900946965706,0.30067170274560739,0.45147278366494081,0.7338498754834244,0.26142286325921782,0.42425911015016171,0.74100105147226225 +0.51885360849695661,0.6553936775017033,0.58321705824346126,0.53582598824868843,0.71766627641045044,0.88280157060943698,0.73850150653742697,0.54602046604850241,0.58802256945636877,0.30033686666866233 +0.56549325052466215,0.4450669039215438,0.40937003030558294,0.77384894617716227,0.61304960891720617,0.73204277208423707,0.73482510333996731,0.7397322721371844,0.74974644559551473,0.77796193337416653 +0.035053419741259306,0.30235920878476863,0.43258286212221853,0.24516533370479521,0.40659402441815662,0.37911755035748018,0.27316224059905381,0.41865084777237083,0.33699379363679649,0.17259280927829168 +0.64044015455262548,0.95355641478089637,0.9944854419154483,0.74864234097185056,0.87307978331227032,0.79674408814752828,0.43456457721186004,0.91859621609909548,0.38254406119813444,0.41837274169665928 +0.46647044365400103,0.66680847786483022,0.34172486464376883,0.31826979314792336,0.12001688600867816,0.82446539102237959,0.89207629623705653,0.76569389054201942,0.98373697619535005,0.99297024469705253 +0.20285761858634044,0.19028221679037127,0.1370751706708761,0.068059675599224184,0.098644714540577133,0.19360471269465662,0.0051999056886514877,0.19032428870560292,0.16478348817327731,0.25355184069485892 +0.78635091148652814,0.92482833642860962,0.753791623370484,0.80490178029867221,0.94602787095936058,0.51435423464863539,0.75979620849829588,0.690230826410694,0.44790266887866992,0.93535878756664759 +0.85172242809721088,0.6658741224382505,0.71743517208960395,0.84165253906393667,0.43187474345904908,0.6481624692969461,0.68788700058939489,0.90747681210631614,0.74790403389487858,0.80758862537913356 +0.13637185971244148,0.013055897346940317,0.15620979809319357,0.063243656273707149,0.17786484261160429,0.34574897200218702,0.2628469238115988,0.24617323945859021,0.31072719770600465,0.095442666817697391 +0.76466620245586681,0.80306235110037361,0.56483663359540381,0.9340442130051001,0.97437477103084302,0.995,0.83069315730244186,0.90445773422833642,0.89604973126551268,0.85044020213535276 +0.01478383925324489,0.70783082445268097,0.12496877813828927,0.01001034057118047,0.50110227850382216,0.11790053933510389,0.11042563171941633,0.31985491883824946,0.34780372385285163,0.1814638056384929 +0.4050190314297466,0.51174495121813357,0.51872288054437332,0.90570318224489799,0.61846452936879137,0.73729283458669204,0.34560369586688777,0.68151136566302384,0.71372814310597765,0.94573327663237272 +0.66429231089163521,0.52274374334956475,0.41510912412195633,0.57375433124252462,0.31551834513084398,0.40384257127880319,0.42091586810420423,0.57636049299617143,0.54438001304515549,0.70016672057681317 +0.36977551074499981,0.29426873862394543,0.46977855861769113,0.77158213141955834,0.40076762103126584,0.33643342621508376,0.3259412329352962,0.13058164805989519,0.093895733734833731,0.22721863290644795 +0.26664104937591082,0.16222791725886732,0.086014178261401952,0.16947292050463808,0.40016196956276162,0.28588062655763202,0.026820114551820012,0.033559077564869089,0.12370808052947566,0.10788285839954243 +0.055795540392164389,0.16690079341061148,0.12044173179311504,0.23963725168142058,0.5226259073533579,0.9488406630989541,0.88944038262706404,0.75516782424528572,0.84475957971880455,0.63174785263254041 +0.73574487829174529,0.93146871673524445,0.66475733942933979,0.91958623044774024,0.51822807753342159,0.42895675255567911,0.51309338994906262,0.4018544421705903,0.33114869144629089,0.35429305743309958 +0.11054481117288772,0.15543848313973974,0.18952617395553428,0.23644529163721545,0.045081561169363349,0.306145224982178,0.24569858374889519,0.045529500202983395,0.44283660742803588,0.92307414181413217 +0.25841553755339453,0.65104217969928579,0.26311593016726442,0.576715730800059,0.094169722317027582,0.52701577180414416,0.31713432978722633,0.47583698542439423,0.11780354814255442,0.44585458378424037 +0.31506575608318776,0.54197239116183393,0.20980172257987434,0.12008809854160823,0.66940985139808284,0.96165171961182727,0.98819353632278695,0.96582416378077118,0.92738002797704255,0.93396103414123943 +0.96465775636781337,0.16478485034895801,0.97184568669762461,0.18924909734051365,0.68561830316320616,0.5658775134652374,0.59786327500478165,0.28043418968446066,0.33057157372241242,0.60531949685537056 +0.85475675981723387,0.9398415574396406,0.87305486152762724,0.72243890896788354,0.93210706734679705,0.94572969534782736,0.9548685769259373,0.9891816598537746,0.72719393079750705,0.85690534979220701 +0.76558632917633163,0.69257647733320082,0.81873887786058996,0.59722955882898354,0.64682681762496652,0.13587564954651316,0.17228095806786514,0.0063814644527254612,0.080445549945588224,0.32838744795299479 +0.030776480020646035,0.035476201883293659,0.095126829139197899,0.0099262052390356771,0.55873536088620201,0.082447300461362089,0.11819427410956304,0.26146939847968065,0.43744749287725548,0.0055362122657342059 +0.68450717514342641,0.78934442353783529,0.51098117444780633,0.59465055391774335,0.75271122888079334,0.95657792969722322,0.93564367093494227,0.80464684739126224,0.85615465565933135,0.91402223761541879 +0.95562653608083203,0.94582015552440701,0.94841288882888897,0.66572000095038342,0.8890898740210027,0.80340490330126468,0.6146825459145453,0.90809661892125493,0.89852722201611979,0.66537611509556549 +0.012776657043186201,0.17363395195571424,0.3262493048969225,0.19456259484287031,0.067142623738627227,0.017299900326188992,0.33083431216073556,0.35392245356343044,0.027873444458246355,0.21193938932265727 +0.76994928306697208,0.51318349622306392,0.059606286085918031,0.46491957185207933,0.10361576671130815,0.68743706951499539,0.92529540727263404,0.82752329765934785,0.46636613211012512,0.60924246979993568 +0.021597745877894425,0.27044035968720437,0.021627253066990773,0.18211094345315992,0.044624774745907425,0.087899977137575691,0.30298211667105024,0.85718977273790387,0.074253894417788041,0.4510930301330528 +0.70495814259601697,0.11660964551266118,0.24152048429823997,0.19549485263997368,0.0079724350653221504,0.72184456276590492,0.5451416279829564,0.64558192758704247,0.93572299092192268,0.75805709467385385 +0.59334940662926927,0.46144144519348707,0.44299309045891389,0.85539527461514098,0.86224606170434703,0.78347206921898205,0.80610350900678296,0.72246565864770229,0.58110808298806504,0.53569907814380646 +0.83244973814279954,0.80956549700931024,0.80072851033764292,0.60518165866960572,0.94588393301818563,0.37931685344665556,0.92876721962237796,0.42131897798390283,0.58340000055613772,0.17618571766070734 +0.10970203017432278,0.0050000000000000001,0.36626473339856869,0.5752607687900293,0.038500559079702859,0.0067278068454569139,0.078487187245636303,0.11421666640672673,0.15611964711570869,0.026039426709767596 +0.70846212748702442,0.74646400069468166,0.83408026394317192,0.63313985095009873,0.83261778691666466,0.47618835352477662,0.73769339904537889,0.67772358460933546,0.5789108619501333,0.2237289568001925 +0.96653906981301718,0.51607934161438562,0.69509119362919192,0.90953353283111116,0.70821311950566757,0.82620323388254557,0.89601029214099182,0.87529835160238845,0.93195228147668829,0.5964045682048873 +0.45423612480187758,0.69796207579201619,0.34990615400602409,0.45469318478717557,0.41609073986183087,0.49271540992776874,0.30326709782821526,0.87531278238747445,0.19912349051447259,0.12778596041608414 +0.45912523648266879,0.26654932959354949,0.65322594498865927,0.35363555102958633,0.65637077050632486,0.45990446049836542,0.41728300091927106,0.67016649778815585,0.94887747181927828,0.68748475975007373 +0.87239474689710828,0.89361160979023335,0.83636125488555324,0.88939612274406632,0.995,0.30625232562306726,0.57686607961659164,0.045680810319036022,0.81813837503431652,0.13335573780933196 +0.07893303337489832,0.29610845787101836,0.27861406540614997,0.41272495538578546,0.18345990017406344,0.13599425376742874,0.25820956556709029,0.55279179019271285,0.043667569261751887,0.13957793710870459 +0.062566393557333067,0.099357089871781518,0.4799283984175422,0.073711473174634529,0.66405003666295337,0.18362538018846586,0.52552367586758875,0.20341638385435229,0.081799237494132454,0.063583483017291276 +0.47314223358475371,0.99293861878685608,0.35629761646851255,0.40363532400806634,0.995,0.91856232672579674,0.995,0.84087188690318038,0.90553436338085791,0.82681232257163439 +0.98823259264006169,0.88077663138391604,0.61159827004303002,0.93446434198994255,0.95840129003044239,0.90867146369418239,0.90786231894161662,0.764298409427278,0.88499724489519527,0.91991372188203124 +0.75720076777706891,0.79566713547682744,0.97267331820329628,0.74450112265184964,0.68663024707347708,0.35238576776464758,0.2799459164089102,0.31906901314505742,0.32803415899980226,0.3195606765511948 +0.0050000000000000001,0.066855302342455181,0.08285332654487243,0.37860542992712243,0.10495691988035896,0.11007722854265789,0.01320919042337728,0.5700964952993659,0.3997816184128189,0.19172109485953731 +0.56633809763596821,0.85019086240207997,0.79215889461920019,0.92417859865235252,0.81730698593309437,0.57002749180537515,0.77045908287981923,0.97385105930151394,0.97503310724277026,0.4273210509854849 +0.6806716227611791,0.20398642661166971,0.2983722209755838,0.33721686174976961,0.2549956612929285,0.52614213115884878,0.23429073902662445,0.70625657527125019,0.38789688676479495,0.54926589687238359 +0.26926596763806487,0.17831001782906886,0.15754995992757131,0.10883587165154368,0.045849357644337937,0.47284767738892752,0.65403201591106752,0.94057916363816751,0.75411462938063267,0.66230842421645897 +0.51431584932971841,0.3098399715090675,0.59254028528812164,0.87702873398665515,0.91586349296266301,0.89423324205562604,0.68011768566793407,0.77842925567528609,0.95376252362620106,0.77928259011241052 +0.25869376341105443,0.43240339428302965,0.16215750286938369,0.37038228256278927,0.30501466800342703,0.48956401270697847,0.42069418399478464,0.8732343351875822,0.6165372544492107,0.9165480455558197 +0.58351296883997739,0.83895290797226396,0.63828818497131312,0.65038718990399214,0.70019867815426151,0.91737348897731019,0.80026324387289915,0.89882882210075987,0.90500500527558958,0.78058067287201438 +0.43169706074517555,0.3004696364805608,0.8906710711598782,0.47431383069488275,0.76843777726753082,0.97539375399354822,0.89359161307219548,0.84303870159782712,0.9331768621632277,0.97355952337965346 +0.73540473461737754,0.30197005681111877,0.91626649015233008,0.53084558583213881,0.45203662957646973,0.52866296909633026,0.41605943170725534,0.25829792572767951,0.30096611255431016,0.80697322459308762 +0.44889643238454369,0.90079084955504296,0.36941264840425247,0.87497710806200457,0.69192599036614011,0.50634251834708244,0.84289995758444314,0.48670992298866644,0.6829331631015485,0.77103901837835487 +0.17734160848121117,0.29722047990071998,0.71100405594915661,0.39883947584894686,0.62633994818315597,0.42045260019949793,0.44286781185655966,0.076448652631378816,0.10739653898054588,0.11985657448531889 +0.30607169538620527,0.21377003335510952,0.20072962451377552,0.45741081834421571,0.34997676286730284,0.51280402936390579,0.3816165920288791,0.44229053895105719,0.31378175635473249,0.25006727830623776 +0.2032764693654423,0.17850518497289802,0.16860537204775689,0.55811205026111455,0.27572717095609267,0.96180486536467447,0.88469350608647024,0.98510160323347851,0.81033539804047283,0.96734863988239317 +0.10557343643858719,0.064819289400483787,0.75232316760229367,0.022836824267879356,0.086996165598983738,0.49414103725575853,0.4051827999355756,0.55126355538959504,0.4182330256735457,0.34582013587351257 +0.61037544439966163,0.52018931825295978,0.34441337673343098,0.56244234621408284,0.37152850281563843,0.37581649588537647,0.27205229978426815,0.44451489273342415,0.34869690905907491,0.81130693687009003 +0.40658889731054626,0.11036314044032092,0.51259628820116609,0.43150616259663499,0.19864999767742725,0.37091928362497384,0.42943100220873165,0.46819916096865266,0.22696736073704049,0.16978282082710144 +0.10591237123359853,0.22939402566408346,0.053173708758558702,0.31585679002455802,0.22014529179432984,0.41680272363010029,0.66614999392185958,0.88448654513921743,0.52248253885772966,0.74119833347503539 +0.16548419255023217,0.97614010734831891,0.49997476310818456,0.35380986597738517,0.21743000796414547,0.47751600676565475,0.28748715136317027,0.38486695024767192,0.15818159692572181,0.14189913487644651 +0.7093796144616018,0.92377727178972302,0.74335994847933273,0.89658506456179676,0.94415839193970008,0.20394028417650273,0.36216851943754869,0.33856882798136534,0.073509180074333352,0.16356769323466086 +0.78168886374896696,0.9260260679002299,0.71048538319882515,0.72101255299639444,0.86583809307193582,0.47584601884591438,0.82487946088075925,0.98666440430678382,0.77913597118458155,0.995 +0.89580399405442956,0.93679776074713161,0.98507459877872794,0.81153108892612469,0.96938332202261313,0.70585613642469558,0.83343241023248327,0.65214464560267227,0.72331714243045564,0.49804501023027126 +0.042445417215315695,0.13581874049851467,0.48022745546768464,0.24533712197444912,0.1186719065590372,0.2177328064863161,0.37983593155513762,0.27723912362126146,0.72440627092145871,0.77930242571164299 +0.50172007744434421,0.72837346835876349,0.4254959685786176,0.7204223810404029,0.82497722396510009,0.59300451786839226,0.71794345122179504,0.4367701902810962,0.86193301292950486,0.79123109820647519 +0.74566467240830558,0.71708862212835367,0.50548007615725488,0.80213525300495658,0.48481668779277276,0.82031756898504038,0.88178044729283234,0.94747126536093695,0.98249777636373392,0.97083564262719824 +0.32917352370704434,0.36692372037214493,0.18671322605224022,0.3823933590028924,0.46623476615059256,0.28226042087772363,0.61528221049229392,0.11576177974348723,0.31176446660538581,0.17167858759058363 +0.87687905178853676,0.85839913171366078,0.63758846776908928,0.78882221787352469,0.67960522804059664,0.1583896220836391,0.23831767615047805,0.18622659586254203,0.39936811538064121,0.20579297459335655 +0.70141533700482461,0.71059388705179605,0.59302239163662129,0.90599264609044527,0.70906410776660356,0.87247178729739217,0.92364019030355005,0.68255392377613688,0.55249043766525463,0.77066377960727017 +0.27711629408015015,0.31790888091200398,0.27270575679722697,0.18451819891925603,0.04478484767606461,0.035451014089640201,0.094189255352838619,0.072233359358514826,0.17572842250229509,0.14157415050431871 +0.5679377227409399,0.58966283945482978,0.37656991227413772,0.53774270633584753,0.36110087434645088,0.91335213542332983,0.74818010840680893,0.91594446057569323,0.94918674757354005,0.88326907230656748 +0.99055516008184452,0.83759182065841076,0.9342647792945995,0.94015864064566834,0.97015189970260485,0.99202541369594588,0.86190502185490181,0.91468269212054176,0.95043089755926302,0.89583294690236581 +0.3834051506552516,0.61726395101868325,0.74983503887778591,0.91586694962460635,0.68447146328980657,0.44622337471810269,0.64408369388547437,0.34539531593327721,0.41091167388367644,0.37570075012627302 +0.21068606832275782,0.50794619254884288,0.48607208285830017,0.17160192099982596,0.32793584206956783,0.24387140988256362,0.46109228659770529,0.086890449543724629,0.7432032319775268,0.60117290707421289 +0.38468860853516218,0.37996816614759399,0.32172911733505671,0.17563820412033887,0.20854948423221359,0.22561152346316338,0.2110963017621601,0.19418119944749079,0.44060454054852127,0.41341639161692179 +0.12883759154986318,0.30355824084836458,0.40073342257528766,0.54027785969083109,0.14393402621499973,0.35467093254556237,0.26032216576277756,0.15340792396455766,0.19491823491990246,0.054946255550030201 +0.33667666461552903,0.25631691960734804,0.80627837599603791,0.43588467509835149,0.53012447044602529,0.080233958869948052,0.041558243479821677,0.3326575928658746,0.065102580381798864,0.062738512846417155 +0.85589712474695712,0.76998714447835859,0.83121887801097971,0.94794266208190514,0.82992736485902485,0.56293798834667408,0.68677576215122449,0.57505766369285838,0.48129191188490983,0.51638695082510777 +0.025343959596375587,0.2545068498875529,0.2404785148974094,0.22603408506257072,0.13951798246126412,0.34114389945171164,0.058696393942236413,0.1524258166609867,0.22792550790473431,0.20493460205034941 +0.87498542174378358,0.89611236829659102,0.94743134631425185,0.70982736840960148,0.67902806479832734,0.916182506101896,0.81680691233486225,0.86870911568984588,0.77729740602080155,0.71060753971687096 +0.51665135858936884,0.86153361471951206,0.81581996547174018,0.55040498488233336,0.81099983220337268,0.54357916922890492,0.33665393703268232,0.69937094193300764,0.45140894714859403,0.24738953684573567 +0.40985212486731171,0.39779776535579214,0.39335626907996113,0.44762685042223993,0.34971576204407329,0.20456758499495342,0.097385524626596498,0.0050000000000000001,0.29461871847161503,0.028354318725187448 +0.85722523657366123,0.58119130806880848,0.63338783869403148,0.80011026831925247,0.4725739964342216,0.94908830695202617,0.96466702347969635,0.98922768075134559,0.83018551309941602,0.9457219763134983 +0.78947885519021899,0.77162621679598864,0.83788922723032799,0.93691939258132195,0.83107637081411001,0.29039972540340808,0.010206353355907385,0.018060533009711978,0.12128337789909741,0.062071233900505493 +0.53867504421488621,0.60099289400386424,0.3690887511184,0.70250518844113286,0.70201340827042769,0.82028875299146686,0.69858818207284967,0.77249892728286262,0.94563281562294854,0.68331112674786354 +0.73889445030253942,0.93841766394324644,0.6905294787429701,0.93600873692775211,0.8509522323438361,0.11841414551600646,0.19029598051566321,0.22012366578565534,0.63517771611804807,0.23972859358764775 +0.76925320398867969,0.66532460189773368,0.89948582174837721,0.82800891998339732,0.81774219605721821,0.0093843321374249972,0.018718474340867562,0.43546284685726411,0.062971163104529854,0.79051212934427317 +0.85892576740758542,0.85354447332792205,0.89417289427364377,0.9676524299138598,0.99048941759973719,0.87827432891935286,0.9582724352076093,0.95517290334099925,0.94397223516715734,0.97789172179181105 +0.086811799571212989,0.24762760652811772,0.10912785583060083,0.39917387350578992,0.11124148438103343,0.4239660788152847,0.65425481417332465,0.88689510364201074,0.93405478147905385,0.56125963761587516 +0.53361091568708563,0.10172682619305193,0.08372039740789583,0.11809528068989347,0.26159939149511524,0.43218525321572221,0.46793355167028561,0.20242223565583711,0.56361528564593621,0.42467768487404245 +0.66560370263182755,0.6807507050398236,0.8652322314737757,0.72779709610039833,0.74092661085887324,0.17146893232712246,0.096385013690459237,0.058622958225905408,0.078082783002181966,0.19164012002875713 +0.17769692324175712,0.35100562006119007,0.65094904796569319,0.10728387688869465,0.13014650662081123,0.25511376731447433,0.70753318941569465,0.46867637216928482,0.66535585149540233,0.62254664345527755 +0.11983212409132826,0.086945040005965951,0.081328091764598154,0.65749398685875038,0.019514651066866069,0.18786021406413678,0.20431278119213536,0.5680058958532741,0.18279637195519804,0.38628840362071293 +0.17061879483705522,0.025845921336449855,0.020544771425202765,0.69931477247154872,0.49027025970281124,0.11337455970352356,0.010332837497126789,0.06641021926771784,0.013763003487848154,0.27811390705756356 +0.0777057568594548,0.1825401353708066,0.13907626693254127,0.061165208375323021,0.089490245067289836,0.88204338579088604,0.96349054059827699,0.995,0.82779289651079391,0.72701728544779587 +0.47963693287019038,0.89939638497889174,0.61207144291256332,0.21535140645574413,0.16432949141017833,0.88948668571537515,0.91889617705600424,0.88195210034608995,0.81596885583712098,0.97271100190117932 +0.29340474339644329,0.19683864942636015,0.32807837778819138,0.12601713780896551,0.14138000374078535,0.89676664254510907,0.85244172983220068,0.84491055182297026,0.52036941304686435,0.5916426969051809 +0.88880158794937825,0.4976151770388243,0.62093244629795441,0.53209817336755738,0.54669681590166785,0.99192968962596684,0.67098466996685269,0.72947191397542599,0.72767545751411933,0.8712172402592766 +0.75939065621005986,0.67830335596226732,0.78121951819047708,0.78872875627711769,0.60643855636589961,0.15925328261801724,0.70659952945424753,0.05017829951249031,0.10356235233485558,0.054456445068362697 +0.995,0.55317740832106099,0.47865461706533141,0.71303196033113214,0.33735192581662299,0.31130723879323718,0.29091848005191845,0.4146353489195479,0.54652497443021186,0.20428922396968707 +0.85289584789141104,0.89746971530256925,0.90852902145706227,0.93734998584840512,0.82506755946087007,0.8547713404695898,0.94089150518992959,0.93461411367751723,0.8787920697650331,0.98482728007364972 +0.90854279439738406,0.85664519082637725,0.88649224970139717,0.98953676057862072,0.96189782480359076,0.69571865545003275,0.75572803479735229,0.57727261548279629,0.64620618268963592,0.91057369040208047 +0.39957456922441903,0.51029714246396884,0.30631856046966666,0.56996392385917583,0.50700346878147662,0.49863982215174474,0.20981598450453603,0.12329991525621906,0.11367670414620851,0.26711307428195608 +0.4998247585348965,0.10780324271764458,0.18833156474284518,0.22088176009129357,0.0050000000000000001,0.19922860010411259,0.22242251076386865,0.31855481138336839,0.058564546896386405,0.095893456280472383 +0.59034045123647338,0.95024132003890371,0.72631564937182258,0.89670374165870381,0.516492092312546,0.80806970773846243,0.71661703663994114,0.728951506345761,0.8516608107893191,0.56303838235908055 +0.29562127977006236,0.36375046390458277,0.86628033927990322,0.70464412597356874,0.39958500696229948,0.41907438050839285,0.36222328912117796,0.63943078790907482,0.85254760077804548,0.50378589823958464 +0.054911618840863596,0.2586454656848266,0.36364526956458842,0.41422823109314943,0.47190053385566044,0.29343862933456377,0.99021619951235085,0.96454611970692872,0.45148945911205463,0.3794136850337988 +0.8489946940852422,0.57292582708760031,0.86489116653682863,0.60960938388597929,0.93625855419667503,0.50276984556694515,0.82503699880907599,0.48512872806168195,0.81655486984527026,0.79140927791012805 +0.0050000000000000001,0.59028106569894412,0.03278870866052809,0.028897217154745122,0.17117429475184254,0.45950828309287395,0.091404029139092902,0.20407268221607094,0.23930878497777097,0.11977638330427759 +0.87908634600299629,0.87304385189781142,0.92829979487577519,0.85902520889066381,0.58320806335541264,0.40067334190826132,0.1126210711372628,0.26883485357393977,0.083919557713678983,0.54743680261890315 +0.097256021559723349,0.091918610298315773,0.32376207577181404,0.2888614052499221,0.10869609806105346,0.5999793793016559,0.53535465840832264,0.3088271005253812,0.5467942336399565,0.69242917091468881 +0.57285163618419266,0.95994875565519577,0.48468709990265813,0.81926473139901002,0.58097064969478951,0.25279581031646137,0.31051148203551227,0.092054283159094641,0.19930247138837021,0.58750170873827123 +0.81019740109554594,0.85941375678520848,0.46450682243448749,0.60641191576723741,0.27584823311190565,0.58676571442629033,0.27380576418363944,0.46924447265337277,0.72374639482586201,0.59022668216493734 +0.11295450085072201,0.48335785654489916,0.25581378382049058,0.64243218497722121,0.18636731998413497,0.52344230216112875,0.41274565356434501,0.060211971431280903,0.32809882904985332,0.10354498840752849 +0.55137184568274433,0.39452628427534575,0.39702412803308318,0.18546465385589445,0.39926903138985126,0.382656406349272,0.056212095340024235,0.0050000000000000001,0.46112795462249856,0.35477503461879967 +0.48639082027220426,0.63293199482722873,0.49692994184442807,0.78599393457988631,0.89293314851237593,0.095921222440673665,0.38366061341366964,0.13474536061404074,0.27066951376037196,0.039619261020570881 +0.65994765698470581,0.76301397787755754,0.2472291042504417,0.58112763901590214,0.60245854753884287,0.96399754713637753,0.61005082275368983,0.90053562083630023,0.70248604254447455,0.75441558539750475 +0.51753101872671703,0.69890217992360304,0.49889727591653354,0.34170225102571161,0.54433564891223707,0.57817646503099085,0.35916243601241427,0.90423383939195534,0.45694595700479201,0.2520059085509323 +0.3313519232168336,0.62714507084456028,0.45511560604791246,0.49743727265740756,0.56442866710130923,0.040960485261175641,0.19783416789142089,0.091016763151864299,0.11786995848525147,0.26370282526477706 +0.88730919254038776,0.57375112883164414,0.54927357481210404,0.36355673990329063,0.38384108073660406,0.87135629184194086,0.34368710251874601,0.4021964339481221,0.31361338260467542,0.33988909880281748 +0.71972000621206056,0.43621756308130111,0.8339544597838473,0.81375082288286027,0.45859159642714153,0.77375833687255535,0.97515932031091279,0.90717303237760549,0.95672895209280795,0.69842201305436502 +0.5526027718850306,0.24481870551244866,0.0069320761540537582,0.48418827730347436,0.28198350235471004,0.30359202370164384,0.37399416175321931,0.5715811996196849,0.6056247069791405,0.40300693726749359 +0.12960267853488339,0.18556260273908892,0.023379871185180021,0.20724723025342101,0.091020577267053315,0.013303611689489753,0.5470864222443188,0.038164923287704502,0.16521178875701237,0.076993763766958462 +0.70877969813522013,0.62114084928179847,0.6913173944631088,0.9113070711318787,0.58851402331492686,0.0093613217177433289,0.36416326431208557,0.24121439000010075,0.41325539842364556,0.14055908049341082 +0.79971297591625357,0.83768482060985905,0.89141365731483457,0.88210824757697215,0.8411711838853011,0.82392300825448994,0.9680612706870213,0.55230792079237179,0.70871866060769695,0.85067586318472621 +0.47358320039547297,0.43286695107235706,0.41045501761255032,0.36690282929339713,0.17439520425978766,0.50874925040989161,0.5216926376742772,0.68089797659194673,0.89813359521212188,0.65857646797666947 +0.36064176948426563,0.33022462480585424,0.55907580439816118,0.42013592561124979,0.76644174612010296,0.80025584183749143,0.80292438503237773,0.78196720391860608,0.9805225766904091,0.89092359461937232 +0.76166155717302142,0.89932772182509435,0.85757137826293928,0.79103590446174499,0.80708915067952458,0.6853516241826545,0.56495008114143141,0.42816152799059781,0.63642104036989355,0.59502701865858221 +0.80607154200304865,0.61043781155603716,0.43382830728660471,0.52907999829039842,0.79217356504522618,0.995,0.65832509807659934,0.70538480355753141,0.8069323659001324,0.82729218355961431 +0.51493364788153406,0.81825711837154169,0.84850935122812388,0.41850115891429762,0.25074036730803118,0.60494763861060874,0.42228063233778967,0.56963628876837769,0.27984091200051342,0.4405558423313789 +0.09930609344028074,0.17048431522562829,0.1573362773342592,0.26780108993989882,0.023012312332876254,0.24875217283261514,0.40665446620551127,0.17329606020940186,0.36871868130401975,0.18618522139150345 +0.39546531409005214,0.51211546824197263,0.34434497993788993,0.93166427037794208,0.52970849667326481,0.11318531227880929,0.20506446433137759,0.16497269828688094,0.068951238674353099,0.42054298790753974 +0.66557938513400994,0.42249359234119921,0.34373975780909261,0.56600205300492101,0.66017004087916242,0.63330043313908124,0.22154358160333332,0.63260809870552936,0.57493599018198283,0.65053208338212865 +0.078801471921817523,0.29206574222189796,0.26111024405691319,0.19541255917284317,0.43494318149169109,0.020627923571747073,0.122528869163951,0.066764791699833514,0.14379473138252052,0.15411259015673534 +0.64897678547311899,0.82688847798271392,0.73365620142430532,0.70999527859384703,0.94115870611857666,0.77328135076094817,0.48787601783988088,0.34077201961190762,0.43755661984323646,0.54928316720179193 +0.63063424306253402,0.56733467409503513,0.69667733708046908,0.96620683473883195,0.72331478554405759,0.73893047907039966,0.81078012220677298,0.63700880002579385,0.95461358173633015,0.86910161815466558 +0.97380568083130226,0.87303506155148325,0.72764993362943176,0.72763364019919652,0.93760704671148254,0.84639858387526368,0.98590423664426385,0.84485282984677945,0.72292638887301575,0.85945904828258057 +0.38638423312407677,0.53909871840733015,0.97827145454356423,0.54042456371826031,0.61252637769211793,0.61902147464570367,0.7940581970906293,0.82325144563218866,0.80091125893522386,0.5340185173263301 +0.79275863261191515,0.54225246942951255,0.72573306385310854,0.54433790265465998,0.74250942634534534,0.45040981963393378,0.37281340788468043,0.83305458232643348,0.62481851011398004,0.4205560890550275 +0.55601583370903018,0.71447634187642994,0.51874861793476112,0.58702224053558716,0.63659719118731761,0.81739528375327875,0.7233113579859447,0.82334113409159992,0.63633797978399986,0.66150979421217593 +0.41796497921093301,0.095961426937727884,0.26496720823343378,0.34515396159258982,0.67778964198077674,0.61701910509145597,0.60603050983627127,0.46543567269691333,0.65933120533008749,0.68802167716784957 +0.59976176561617844,0.52825702072004721,0.13706173727405985,0.57034385888255068,0.26459432506817859,0.80497088519040827,0.74754844830021705,0.82291189776150797,0.71296393932424995,0.9449059961771038 +0.2414387340928339,0.36022071403567957,0.71630963686038296,0.64130098777240785,0.41624358893023039,0.25095345932641566,0.68701082418555948,0.67888484345166589,0.61983689098269457,0.24379793708795261 +0.77932774660879645,0.75499299317015756,0.82391902231028591,0.60897910533821942,0.63035713715362096,0.70120936483726437,0.77700169020681087,0.76832863272283625,0.40092709343298538,0.83633518256828454 +0.87578285769054887,0.87639280423171995,0.64392423621029304,0.96813657120218499,0.98395759731646604,0.91911075476672588,0.77813529488047961,0.85731441903043759,0.95665764060685432,0.99301603416096373 +0.35653727263537838,0.65858484563068176,0.91161242141969612,0.33650703533203663,0.82119368450366248,0.3526437309628847,0.79381276559433323,0.78714981241500359,0.42896877901512342,0.79796988810994063 +0.14297210210012978,0.11075691532460819,0.33951753293513642,0.41854839996085669,0.68397380915120798,0.45836083384347226,0.28474147236557179,0.12188350365614342,0.46546638771542415,0.79853478676522482 +0.7911586911807178,0.45125404084683485,0.22944661145448292,0.64120658856699886,0.17488074061112197,0.31690539015108155,0.25032532404293806,0.15006648792769528,0.12573211253039357,0.16424235099112355 +0.51930734974123283,0.98765070640364616,0.57342153156059661,0.66419022445915865,0.4327753918769317,0.77509950302191455,0.63299159091547796,0.83456005676998091,0.74339090756256576,0.80458129904581566 +0.10281140146453227,0.34539458565996339,0.1153030298592134,0.2556589786254384,0.41658949156408365,0.31793144435505749,0.7952377843030205,0.73855346572235669,0.39550240806420545,0.3415016212675287 +0.95459125261145727,0.86662482618702774,0.70294344532885189,0.45641139135114006,0.64915513488813015,0.96152617255574091,0.95677847412297523,0.95276116541935152,0.875037332909407,0.73432422280893195 +0.7141750483391438,0.89149614810593558,0.71848567840060706,0.91371849019195994,0.83220833007362005,0.8190018133318453,0.78770160544081014,0.68020927163888345,0.90963755981646588,0.42621262973989504 +0.41112210663852733,0.3710075893614001,0.83402132746413615,0.63904291161452154,0.56558504528947973,0.52579259502817832,0.25334284859127854,0.34592098087887579,0.17349615492276566,0.35273760437849266 +0.18619342147752316,0.20971441813163111,0.53527694920194269,0.84237551988916715,0.57252209595753678,0.33011929257191119,0.19460266383248992,0.6622206648753457,0.45564141162321992,0.16805855443818224 +0.75645899558453933,0.62119540348066704,0.71207918078288945,0.98285829907398647,0.61033191109890828,0.97847164041012502,0.99172019204705908,0.85461278210276959,0.62537913947016688,0.89045160028034975 +0.06642976729106187,0.19034898121026966,0.1126329665712624,0.044611219811495184,0.69970030026160712,0.47314088707207758,0.92224354701465083,0.85892980350762826,0.67202720881322975,0.86235144591773127 +0.19937454798013965,0.04285038667149825,0.27393287429004431,0.22939391297405193,0.62793712344136776,0.20404117452563381,0.078208613587784637,0.0050000000000000001,0.53079621851793424,0.021344810113087559 +0.080068456726601012,0.30174714708119099,0.31514845436322869,0.11207740861574031,0.31459896042361291,0.02260713293800154,0.57637691745185138,0.20467309086234897,0.1497491245099879,0.46284911423572417 +0.81814694030123869,0.51336457286379278,0.61610767370438912,0.84209128326619287,0.95305421421652681,0.42622141659376356,0.29387223496451453,0.10045790908044072,0.32308062523953041,0.2984989018586971 +0.90395358950245375,0.75164602548465553,0.75171998588484201,0.68049753512604738,0.87063291421508615,0.27816189129953717,0.71349061172804373,0.70357467266148466,0.39946018866612776,0.995 +0.03600973752298664,0.43516747831017843,0.12875877515762857,0.38358026984497207,0.10089261099347713,0.89905525025095923,0.7913435174559651,0.80487111446563486,0.94540987003710164,0.78178157113142688 +0.59552021620968221,0.84260539305977766,0.79551462989183497,0.80673636533901427,0.53243661779561013,0.063690229639186857,0.13510428325390239,0.13576046194067021,0.49786375762778345,0.056998657208177733 +0.092499074182348595,0.13601770534297247,0.20379288462573325,0.55458410250139312,0.17480384747614802,0.94771080897770865,0.69339836956350664,0.52230064131435894,0.3799652980815178,0.50682355932076439 +0.38581942626330279,0.72939694861997384,0.57863116139196635,0.77037144402856406,0.57948568990104676,0.29158672774793071,0.32180315567530116,0.46999967368901763,0.33969929386512698,0.32534418485011329 +0.76409172288641458,0.61064730698126146,0.80100584085448046,0.71116609944146636,0.59443967349943527,0.39264717439073349,0.067307984485532435,0.72401875458308051,0.14537141562323797,0.95681011947453043 +0.54980294029427013,0.30004923589877253,0.62224777005030529,0.55265745744691119,0.54429666421492495,0.68121578180580045,0.78894294888595473,0.81920143237220411,0.89542489664744718,0.56914908296312072 +0.995,0.88876385908223843,0.995,0.94627918789045928,0.98974819734575181,0.25625512716942955,0.97861333106992743,0.71995222478289644,0.77034923623431872,0.49185263170511484 +0.96645902466103761,0.95055678821517176,0.88321675194310179,0.90821407843031099,0.79638329232693073,0.91190540147362387,0.90389206129474675,0.83691938148694378,0.90333999067660531,0.69017872968106153 +0.88962146300777678,0.85447323220432025,0.69897882550139512,0.88958453331723963,0.92104457618551416,0.89537199653567878,0.92378351432852535,0.86933874097302755,0.87306333248851997,0.97711326446732483 +0.76440813600275637,0.81242956718778547,0.86551165356649284,0.22717909558560312,0.37041127771954308,0.16289549393696456,0.47477860396611549,0.35332557986839963,0.46905649869586397,0.89665220989262817 +0.68126692064123806,0.37097823110525752,0.14316067969776475,0.49399894455564219,0.84736784451524039,0.64459700902807238,0.35754548347904624,0.93899343433439775,0.42692651678226101,0.36955519256298686 +0.44697018483210083,0.90306828994652366,0.60674265152192475,0.36818129327730542,0.73547784364199731,0.3480208711407643,0.51155178659246281,0.28247496570111685,0.23353062217939247,0.82937770811258149 +0.19763873176980029,0.3560269800655107,0.38117269813665422,0.40394317670143409,0.80580397511948232,0.20835745349177742,0.52360676685930185,0.19513701726101018,0.25836575598805689,0.38545674792840379 +0.33439033741417679,0.31507198690087901,0.92394647476611746,0.16059513264918446,0.61675937732797825,0.84225862656602879,0.93280918747767871,0.98639419311074494,0.995,0.77433444545021657 +0.51288937732223183,0.73771241740905213,0.6865511437354106,0.56217633667983935,0.57391105327405834,0.51895895708003037,0.62804622974362911,0.33884288216359304,0.87098001703269978,0.71889671220560114 +0.88301855863477829,0.75934803907875392,0.84400653329793607,0.65981402175384263,0.63080626199370915,0.039395593019444383,0.20101943230839114,0.26331785265938856,0.060453448590132811,0.51065708851092473 +0.3281715173559705,0.56797515650396102,0.46211697036051269,0.40865299760480589,0.57310005466570013,0.87658999123959047,0.95914611426996088,0.91807489891652105,0.89476889753131328,0.98769184443516611 +0.75187706607804983,0.35649527559872074,0.80861152315628093,0.76164013581000689,0.87878085652481941,0.091894638229868153,0.029032365622706814,0.046796340699083852,0.06177299530828316,0.22898351031472514 +0.26971769597463435,0.08483220645576614,0.023359189886842144,0.077164274436662988,0.11180746674654848,0.74572478092158656,0.37083195362356747,0.17893209159956952,0.65488738127168888,0.3033215150644577 +0.032908654027638651,0.070051022252309358,0.25979476174689375,0.12685219271225667,0.11099635934807206,0.14398302309565025,0.16908368564327908,0.27454938794835926,0.10013193564373868,0.072185063472724686 +0.28301425761676269,0.093462674849441957,0.29049545017187905,0.65688900669919947,0.073836119932829541,0.72215790484915043,0.94201890032853974,0.93028144762501186,0.62029865468502754,0.89893863457836343 +0.160231085317871,0.084659172600376337,0.34001508043730022,0.44381728893495276,0.18694577054703304,0.56994230570853555,0.29060827897047115,0.31727052750648366,0.33605392093886943,0.2015907225140896 +0.95707161105075356,0.28128722278052443,0.34491241679643592,0.68767115587251815,0.29606626290479154,0.1341647220833766,0.16228714582394554,0.071673877566362926,0.33989637371269377,0.030759430868793354 +0.44428427595781605,0.90673358729690423,0.1379262358241321,0.79326910301460307,0.049638178752511433,0.12845629532240144,0.11477525180090056,0.0051261821354372673,0.015369170374479525,0.49900319855078124 +0.64927507688889241,0.46543985520838826,0.091473275067991355,0.82726965975597788,0.41479620846803467,0.11411442913232211,0.40711614341126012,0.37238009241991932,0.0081395957095181208,0.0058816824166668686 +0.85012713032372433,0.74369483502231981,0.80623616810771037,0.85560396357322333,0.74379982842946868,0.70317524162237111,0.87778041520504457,0.81057527897063952,0.80065725560415868,0.55383560844347701 +0.59845993950411724,0.64922886723070117,0.43324488124926708,0.60570500858011456,0.76106065316707316,0.29303358242032529,0.58581165407667712,0.53715321535128102,0.47241019390639905,0.64306192335788803 +0.37068198269154462,0.085369573353099554,0.4491687586705676,0.1566168943827575,0.10465880183620238,0.84114921672152598,0.77799537839018185,0.67328374940552393,0.71048288376186552,0.995 +0.54003667753763374,0.3702141141693599,0.32674039705307567,0.28936795369373125,0.50183144983020611,0.66958636298658925,0.065539261180683345,0.15553806928802039,0.15815843702876692,0.51455940070445627 +0.79957780482045937,0.92122812682645483,0.74198729408089514,0.96317424366133286,0.76245239932904418,0.72195333804119866,0.51627037706202783,0.50769451828091383,0.56154147160122991,0.71228084698668259 +0.84608423228055618,0.42185858575976609,0.70008559440611462,0.573918641399358,0.83787405377369639,0.57805559816188024,0.5784794047067392,0.65399751116637761,0.8645343569514734,0.82851522733107474 +0.058798008341090613,0.2323937217879628,0.088708860072082674,0.028467114636451123,0.035520515200924099,0.057041960681098985,0.14121836362756574,0.22189719669404995,0.079694950924030533,0.03705622945563862 +0.30861260811763724,0.6451056422374648,0.4503869280742957,0.78218342209583525,0.40393924291129424,0.74425059198983456,0.85658303744275344,0.81146483696647298,0.95391837970236337,0.89194936866987629 +0.20891667646860879,0.2994175067578948,0.085243894805907189,0.24086364402319821,0.01430672619609202,0.11372130722157497,0.14960775195505238,0.31772386989905865,0.21357725546113787,0.24817565843114203 +0.6807149819776499,0.96242583545971661,0.83514250404550028,0.6176089162181575,0.77334914662059795,0.73437190134427044,0.78403693196013946,0.80926702838041198,0.51507485410547793,0.41763243722380305 +0.51098592851839753,0.47469996774452783,0.67248859783284942,0.76388221324304517,0.27700446938979884,0.14961235554074637,0.14888238316053298,0.1749034801905574,0.50055411635548808,0.51252206225763053 +0.71632613179597637,0.96760030931908636,0.93251264948047763,0.88020050371414205,0.81023736236965593,0.45978368932264935,0.33238633724977595,0.61262773783528024,0.45644417582661934,0.2174812220910155 +0.70123789887089649,0.46339557153987765,0.36872251218301511,0.62067561384173819,0.21882445205119999,0.14071191646508657,0.088585202378461902,0.59669039564323434,0.088846264668981378,0.067679337080343877 +0.81317056997068482,0.39379719653516287,0.51898901842650913,0.39962330090929954,0.38428050340735587,0.83514986847875905,0.79876320701441128,0.78625433702836167,0.44179577086470201,0.47188127107801903 +0.92448037900427482,0.71035255645983431,0.7875150921463443,0.928512310230863,0.94777509520644365,0.051949670218173052,0.0050000000000000001,0.55162103389738948,0.1837841733649902,0.45665373679366983 +0.66678420743957756,0.76773125989711311,0.4953147077758332,0.5308824606763658,0.47648818648303903,0.6450626502337371,0.7198769639653575,0.57884261725121022,0.78809180474490281,0.58771931278169909 +0.13802242402178666,0.099844773387311569,0.028999233472868903,0.053773887950237451,0.053418628027438728,0.44161362407612725,0.60489606732153134,0.65914532434544215,0.97764803093740693,0.43744803601293947 +0.6071961599103386,0.48424528955365564,0.88424640896845763,0.92030844933468936,0.97390270812319568,0.92816693332860312,0.9010370557953058,0.80544128056498576,0.96392197572275995,0.86790793659746845 +0.039704278807780602,0.0050000000000000001,0.17083233894664523,0.18283206425258591,0.19093993169372586,0.19455577284680359,0.35236240483937142,0.30734884089907089,0.46595534440712139,0.056311183230727466 +0.34553806112934993,0.13352389549255173,0.23808231510338895,0.14273311253055715,0.94477774217374666,0.86297233783988481,0.72596683134906481,0.58466399952885539,0.2368955456477177,0.74397292608045484 +0.61365683327583898,0.53190872687264279,0.47313184084487203,0.76391851381048959,0.7830841373361126,0.023941631225180088,0.068370519933532242,0.098630817403326382,0.22020254263771322,0.010113216791078933 +0.50582417091428855,0.74328080294071208,0.53722264801035569,0.47890539813670374,0.58151373689179153,0.16055907899863764,0.38661559202592122,0.43130087273311934,0.21762708286406107,0.40542729958542811 +0.10634783568438455,0.26988639138290182,0.34886249815463388,0.53305968662607417,0.69496844211243625,0.38479709820240038,0.71260388780501249,0.27592146085226421,0.37298708516755397,0.38305740818032297 +0.55478403924884856,0.50926292964140862,0.87927200060220589,0.6166077841480706,0.64263069353182511,0.43336354495841212,0.13768414370134269,0.34677516281954313,0.16052108621807515,0.25616294980864529 +0.93319925509874113,0.84859106063958478,0.71543500447296093,0.71574886629241075,0.75847020637592721,0.86775609650066321,0.79563295232946407,0.90919831211794278,0.8094772375479744,0.8314018514065471 +0.042423614212534488,0.3620383256638916,0.47140710838721189,0.20596278368612408,0.1109712862235106,0.32196365264826809,0.34645090429694692,0.45451322026201613,0.12938238962670595,0.17548206806532757 +0.56499853995605065,0.47753895851201422,0.41111712765996522,0.86203110546920647,0.48368306897464242,0.12513744310127389,0.52440360569744326,0.45753085994510989,0.037387053511347551,0.32427026462392305 +0.84214697349395706,0.9912216757947947,0.94974177857510766,0.92065868855569599,0.87225878451135186,0.41567882531671951,0.70201058781821812,0.47468566065072126,0.68050360443885083,0.36926531462813983 +0.93254519792004809,0.78512488861451302,0.97111637223860248,0.90800341570865473,0.73402089389855507,0.77072258901898216,0.56287170937866771,0.92882991410441762,0.80914933382882115,0.98252768573001004 +0.74483601074632522,0.73902596652623709,0.83980322917340589,0.78965004658675175,0.81517219709348243,0.78535612029372137,0.67664413430611248,0.46370538268820449,0.76885213397326346,0.62409442148054706 +0.9544245242294298,0.9376384361239527,0.88185851360321199,0.96329136818530037,0.98632871024891688,0.24347391448100608,0.53300850911182285,0.52712792708189182,0.33476191785303278,0.88460751579258745 +0.13753715955121537,0.026355169276949177,0.039922814728934206,0.037743578635863889,0.24463574853144165,0.1253119634639081,0.23214479107992325,0.19838695236831577,0.17659421227290939,0.16014786899905403 +0.55203183001220513,0.37642074821633531,0.6720189180632552,0.41879831140977497,0.90841473118051996,0.52431543034617745,0.50772670688456834,0.57280294594238379,0.60607494183932231,0.60354565651505054 +0.65842194615256644,0.14288654699340247,0.21748952832422785,0.30939897612552547,0.027581956848744434,0.09946871953435113,0.079842256120181671,0.64781434004543992,0.11335830632015903,0.23272573811119024 +0.35395852333028821,0.73512506819678936,0.46884683342068512,0.73543080643866676,0.78312215083860237,0.053115736896879595,0.73208953262655529,0.083272789983319995,0.37637347957934497,0.062910618813484337 +0.11304738565210148,0.25103019838571117,0.17936303021270489,0.093650208815241914,0.021581508131940173,0.30246236312087094,0.37979733632528467,0.9503648538084144,0.32685159266111785,0.43076521673356316 +0.25861377831692978,0.50921326768002451,0.062954821070897754,0.40335040746140494,0.28322898005717867,0.49300676715211023,0.46011156661552455,0.48849439926561922,0.31622061014059366,0.73784229348529595 +0.52753127580045822,0.34762116216006989,0.3537746883521351,0.62289127180701809,0.6227079069067234,0.88720020736217653,0.67357687078765238,0.95577382887130624,0.68006289625190774,0.93507743653025543 +0.33837793655889903,0.75216067317523483,0.56600629558670201,0.49689514483907271,0.87118053736047996,0.36842785365297726,0.75232508956104938,0.67431583252618665,0.81171331196673524,0.34802585010766351 +0.73684037619128917,0.9722483100776933,0.69105072398087564,0.6344998671265758,0.82779799101990004,0.72271057128090899,0.70461582564166325,0.91106057199066615,0.72119283597566675,0.91110986060811316 +0.55807757958512139,0.65124856200418146,0.82225327313062091,0.96826394947128369,0.7195210916397583,0.23284486020566497,0.55308797178440616,0.38192712198361056,0.68485659096040385,0.73756735873757395 +0.26073892844792246,0.57979355313000114,0.12944454638637409,0.88829363763215174,0.30826267218799719,0.0091673200659086358,0.0050000000000000001,0.047607744083516035,0.028521952423043666,0.11643679087865932 +0.63327485329709421,0.61780305634601751,0.75065472975256342,0.82618543595889871,0.62545060916454287,0.62882059751427488,0.76116023902431551,0.5918149496719689,0.86940811827661668,0.81083594754454058 +0.038812215119065074,0.063987457338962106,0.17514726836817057,0.58832335865008467,0.32649012227193797,0.54020304782898076,0.77093195609631415,0.40741520232404771,0.64414161184685947,0.2723802146792923 +0.15599570884277303,0.0050000000000000001,0.086916241823936674,0.0050000000000000001,0.038644358894098466,0.098882105230594625,0.30113804500434016,0.13040387732326791,0.012154837982971664,0.037256717070713583 +0.46524566957715918,0.8298103072738674,0.72334295944892357,0.83209532345062387,0.595363219996214,0.76719537083408262,0.5656113862933112,0.53059169321204469,0.89018292768741181,0.57680025222361864 +0.50475538456813274,0.37895132249105035,0.53298634648672238,0.92090303861185996,0.82672491585253094,0.34490824697423106,0.54990702241775491,0.7928501313144749,0.37655326179811044,0.40163691077032326 +0.30273961163332186,0.067440511629692529,0.31395997639629436,0.10973875972559524,0.51973030882072591,0.5958422464609594,0.59494794192141676,0.3477225465758268,0.43600276569486718,0.19828985646018432 +0.78777132628262714,0.9728294706146603,0.62387075033620687,0.65434206553618113,0.64339312506490098,0.18587990789092773,0.06190056799096931,0.10548387755989885,0.099079114879722346,0.49416795719298545 +0.41577567947041549,0.62866657352423982,0.53057789857848481,0.5864443689642922,0.74179359219851415,0.77989754141889889,0.805160576448537,0.66752131804241466,0.57566379921627076,0.97471742719061649 +0.10434956306161669,0.30554933389067107,0.36594179700478247,0.19765716316761123,0.4666385255695793,0.38423938068445074,0.35323509239242701,0.8591532010177545,0.74045282063888829,0.41197785353870309 +0.066991332993839858,0.70547264683409172,0.19808355419082241,0.24905874163960606,0.29798680133535937,0.99108566201174586,0.23799264364061468,0.31321600815863726,0.3608451935870135,0.19779707878479408 +0.24682024442294037,0.68318584907683189,0.53522707757656396,0.71344310374115172,0.9407590475457166,0.23664341363474323,0.40667029385804387,0.052020698814894642,0.31707957360777439,0.53329411722370357 +0.8143658733163206,0.85361948909120855,0.96539913603918626,0.73830945041845064,0.86327563805388485,0.78854259054059517,0.83978585890144375,0.97796484877470857,0.92973457797778836,0.65576087389490256 +0.76688285620045882,0.69159292147378038,0.80000954397837032,0.995,0.92765416650217092,0.41620773504837583,0.42430703094578492,0.5618913639045775,0.73308216469012666,0.62048256900743359 +0.090332605704980695,0.41320507015916697,0.041316754097360978,0.0071391841338580321,0.19805853275466384,0.33097300372901706,0.41410193158663045,0.022057355759907755,0.040433844929803037,0.014820013457220439 +0.12923462394018959,0.21016134679667298,0.2119546640024112,0.13903449519421696,0.26789489694056567,0.58338651151279763,0.63758082254207427,0.28287377327797436,0.45360845493269242,0.46395441118511438 +0.90728757710407715,0.69445327229913856,0.60475537748425068,0.59117613334092134,0.66125296699464919,0.99375104557838245,0.69206354671041082,0.35811819942319112,0.77085626291226994,0.84741590727934857 +0.25502340066965057,0.10674043328618485,0.098428013763631333,0.54119920535595067,0.01713115329040249,0.59325729034025976,0.2380802621773962,0.43801601949962909,0.10002078497201072,0.40020344048389433 +0.0050000000000000001,0.34322727393010011,0.57234670475008764,0.086972844699638757,0.12268242033315646,0.038761656178403561,0.54726298214518376,0.33251936858869491,0.25672348376247589,0.11322747959639717 +0.048139891086251829,0.039382692921217419,0.11008896111162225,0.51587824118905656,0.24852759527857921,0.46527562671690315,0.91538974843569187,0.42263739838381453,0.71729841255000348,0.61269306970643589 +0.52121715194368301,0.46933779670507703,0.41586150709190572,0.052852478256690871,0.37938595822197629,0.16929190672818301,0.61967303804703766,0.053602069820053486,0.18993066836265537,0.41132533471682287 +0.97371606425021917,0.95814549500936663,0.89234698997460438,0.9764247248822262,0.7163265575363722,0.93989929123198657,0.49404573484207515,0.94026839130673601,0.5744858320394981,0.52928217503358543 +0.15149357690526211,0.29941689650877779,0.46336160451755926,0.35403635937837241,0.19230930335471091,0.49448446606402296,0.23042690326110998,0.60208377722301321,0.60955144770559633,0.30716748829582163 +0.18104731275467878,0.51240367445279822,0.995,0.40874060432543224,0.66485173706314193,0.6439028257445869,0.70262426932458366,0.55672518975916208,0.60828895124723004,0.86246754854800378 +0.29269237549485183,0.5397622055897946,0.090971508325318584,0.29501119724591673,0.31499204077409015,0.0050000000000000001,0.12303071739734905,0.1138385988015293,0.17648641174310531,0.066974343004412296 +0.11697736810576931,0.028486492607053486,0.0072523965209355407,0.88058635345077296,0.13118504572776885,0.60151286263135062,0.3187485835223961,0.022792133822813858,0.29749235804775209,0.092577908973916184 +0.3505922354691442,0.088406523311286067,0.17837031595991637,0.030968654988110134,0.30501371432911062,0.25317660885048587,0.11802887401427906,0.093606303125860851,0.0050000000000000001,0.98037412346456176 +0.57981802341128419,0.82160089162061278,0.55163809654186369,0.94349285241331948,0.75279600961948234,0.44565436648554269,0.83928962485514846,0.095015701226665361,0.76162340093287129,0.17784056052915465 +0.37926332097692761,0.62250999643583538,0.79028921478310954,0.63550471785128781,0.72476825214107077,0.59340501864789807,0.89909605940919501,0.74449795045074518,0.72296479999203722,0.89381766776204241 +0.6278003096429281,0.61686287276097351,0.5919389571354241,0.44108033113298117,0.64368868552264469,0.62825751837226318,0.1627603029774104,0.53120975496130929,0.62303605684428232,0.71661099608172218 +0.9290850825041812,0.6941751130798326,0.44824244288611326,0.79875252526834939,0.39379076930345247,0.56971783252083563,0.6483984751685028,0.47423656078171972,0.47412920437636841,0.90092956341685859 +0.81619979801316078,0.79342401094617676,0.89273856961516795,0.96991938274003564,0.9841398276330342,0.947025689383727,0.50766795783420071,0.50185470024007373,0.5275322460511227,0.78891080882748943 +0.41384110425679932,0.41567293767002578,0.30481222897651994,0.60223514310200499,0.49591405983665038,0.47315251428517568,0.90840895657310372,0.65716333643649394,0.6462804489710805,0.64170743941212716 +0.24522712814225534,0.60903092104126499,0.61390234655118325,0.37498526150011713,0.318013235373659,0.774422125628911,0.46632513325312241,0.75642770805279214,0.48189618674223345,0.75198868490405801 +0.17717992776308455,0.9599609539436551,0.006321301654689573,0.0050000000000000001,0.11446923340555118,0.16046762224869549,0.073783255211318982,0.17373655657866688,0.047853500145729352,0.57141715803299897 +0.91080824951560135,0.87953341598039647,0.75706171969067726,0.94688690538167997,0.98309072238042927,0.68820349787710788,0.3633257124747642,0.31255756496102927,0.63712863731779823,0.94202420758664651 +0.035916992693304728,0.50647079650661886,0.12044397383579811,0.86532715187058051,0.014866497571356982,0.86036482537746628,0.76460290249087315,0.46913496838533375,0.71528783996472622,0.66300104089895862 +0.82605218849355477,0.51640952072921165,0.36578757394454708,0.49586450392962445,0.47379120878758896,0.71280314560862768,0.5906409285089449,0.8459287768637227,0.99029572433209001,0.80548247942351137 +0.80526070755935519,0.86365978498360341,0.94427754453498913,0.74732418140046741,0.69322972380905012,0.77668088724021245,0.69123104106983724,0.83413107422529054,0.87079922904376139,0.70726427235058087 +0.76768263353426192,0.69838139452621872,0.59230894656502464,0.61732459344784507,0.49657023811596457,0.52845437268842876,0.3117636104871091,0.43128681476810149,0.12931701578782678,0.25476066340343584 +0.49712780867940309,0.35170509762247382,0.55297427761251927,0.88361005470505138,0.61028060913667792,0.66804422260610985,0.57272599145653524,0.44348384268232732,0.29361661113216952,0.46727245391230166 +0.394384322297473,0.11158935682033963,0.25306990157696907,0.57534390551154346,0.0050000000000000001,0.10190454698750614,0.18729818394059011,0.12084027825040569,0.10051750545972826,0.50928058507270157 +0.13480898497805338,0.11326884254231889,0.14137644346920558,0.39355812661233569,0.10101197482436763,0.11872086717631497,0.30019981574151133,0.71363294948241252,0.0050000000000000001,0.36392319804872653 +0.32177172989629543,0.12633615240339002,0.52792108143330485,0.018580002390090694,0.054624522483218058,0.26302926187054732,0.37276955661946232,0.74866484894300322,0.78071230373461176,0.33093569843913762 +0.66568043115963516,0.65955518363625432,0.55583686058525816,0.38034934716415836,0.76115236940676767,0.27348688602797211,0.70920109961297872,0.35235342444503037,0.9353915005049116,0.48043282862636305 +0.12358109068039935,0.47628186075598977,0.037111739831753018,0.3129834826395419,0.010174564580675699,0.17084063755465401,0.17101300155628196,0.053821486275419203,0.64023560701752746,0.23784365665051677 +0.98204516496828531,0.85752342149498162,0.92246369659550576,0.82399371432256241,0.73883287943317066,0.69154680249630074,0.90602852081064245,0.6851717866084035,0.87641025267657069,0.57870451381313459 +0.73661008319627608,0.45583689791965387,0.53258209166233361,0.73608926471205893,0.86485584816545447,0.19948520723847341,0.34031893030624227,0.19558484366280637,0.05424749685335864,0.046522809920143099 +0.21356515970533008,0.12891972900252596,0.20602096713265061,0.29956978445989479,0.42704324310762021,0.91607301638577221,0.52901013524387897,0.54587198820081451,0.51153198591782689,0.9554827097162979 +0.43709693589221166,0.22625579268788532,0.34181981542497253,0.24241674356745141,0.20003153002472263,0.9097202194679912,0.75339789167628113,0.4468113733746587,0.38496697609662311,0.24189159911475661 +0.75944335481516889,0.8172535486228234,0.76653074342174854,0.60694225199403973,0.70344594519701364,0.9442390000622165,0.76826536541920554,0.74759486046968471,0.71523159908246736,0.72481356732896085 +0.94538885919230764,0.91552994758239103,0.71182366422726351,0.94070862283114387,0.90491768371429404,0.9421301835391116,0.78131400924757499,0.76594629793543767,0.95410176101721844,0.96799813405958934 +0.32733180784481308,0.2079794003220799,0.46618560500792294,0.44482392809004634,0.7835446374083348,0.2363365816127096,0.23104012079421038,0.05996511862032064,0.21307313596481098,0.17364433841431232 +0.36402263909081856,0.065705398126746833,0.99140054834423541,0.17586693420890431,0.059906801936458282,0.0050000000000000001,0.0050000000000000001,0.23647573523340343,0.71760446150437485,0.05120466099470819 +0.2131063134795701,0.16055783742923035,0.45384067957638852,0.19240541281761286,0.06079208481242826,0.70251228220876838,0.43551044349442369,0.40218590342556326,0.37596638113609759,0.61331538969534227 +0.75164562837437865,0.89858366196857897,0.91874265388468368,0.96868807062854989,0.77660610733436797,0.54199956569936969,0.79605478627490234,0.46711698689614489,0.93091327583532846,0.40747471424401926 +0.56412273684602376,0.84994912313413096,0.995,0.55484149980475084,0.68450793603551197,0.69942260193056027,0.61856142806936765,0.33388767359429372,0.79900289638316591,0.85566885353181732 +0.083374674176955876,0.028228017006777344,0.22070033397176858,0.51395714966929495,0.30485098020290413,0.54438236172427334,0.59869965378311263,0.60118692406103746,0.46081571318791326,0.92517448964644311 +0.28210438368559432,0.20605000379146665,0.26012227617321082,0.12381555567845523,0.5420597856573286,0.49162751014228001,0.74253732842043485,0.77748889746725935,0.40482600234099853,0.64597501329262452 +0.78470867097926833,0.7610681059595612,0.85308673928374645,0.84130506301880126,0.79654794980887678,0.91332962768500781,0.9488491482625161,0.8558880710916057,0.86540382701786434,0.9557719117437864 +0.50468723813677085,0.38381992696668255,0.30211835968657796,0.30444531104877059,0.39842488415888722,0.26571678961045575,0.27398445733706922,0.040420925390217327,0.29593804737669827,0.22569263263722494 +0.42292310067769456,0.44764903772738862,0.3306275091308668,0.79285379682550561,0.58178811994730339,0.73130213198600802,0.995,0.80653662225813005,0.995,0.80324270218260918 +0.62817202183204346,0.82276064725010012,0.61567167312023008,0.86176229026749929,0.59001795385847622,0.75174982121097345,0.67666093495790491,0.65517190660466129,0.37983106277534051,0.3409772662271312 +0.7230029490408536,0.91700607744859619,0.70153960041352148,0.73466813456615898,0.67883771142805571,0.80773535059415136,0.92692818984504854,0.80899741474422004,0.97668378983506909,0.82141658253385041 +0.79069831603075569,0.97348828244138486,0.27255356541718812,0.35915097375982719,0.56824483178206586,0.48323595666443031,0.5337600470229511,0.41329482637229553,0.60242545025539385,0.45820454953354861 diff --git a/test/data/nested/frank_d10_acopula_ll.csv b/test/data/nested/frank_d10_acopula_ll.csv new file mode 100644 index 00000000..6b29cf94 --- /dev/null +++ b/test/data/nested/frank_d10_acopula_ll.csv @@ -0,0 +1,500 @@ +2.4432333849018057 +2.2742525597999013 +1.9595064884189757 +1.8089929279711221 +3.4845137971015108 +5.5985912008254992 +4.8400163010149946 +-1.0990747668601095 +-0.12373938193227829 +1.3706998784654409 +1.1657564638885667 +0.58604783108175473 +-0.79771242893234096 +7.1486740019343671 +2.1702018367872853 +2.0156482815617611 +1.2652891012270979 +0.55613004380479458 +1.0866641230560781 +1.2064007858012018 +2.8313003340557188 +-1.8947063048262818 +4.4671397165562476 +0.044553248487780195 +3.6359352988391187 +1.3565835150482819 +8.5943442687391247 +-2.3250685520761873 +2.3257509491328294 +3.0971037689040566 +2.2266041352098758 +1.2744478075091488 +2.127951096962942 +2.3346991895424125 +3.270690151557015 +3.1826463341121967 +1.8922338352549604 +5.0141249514191522 +6.3454648152402822 +0.95264746183141424 +5.7529471814069826 +3.4798907569205753 +4.5855528897248359 +-1.4154547786931868 +2.2045439490346839 +4.2589280716752818 +4.5783746873542661 +6.2399670001614957 +7.0385772948878742 +2.5999194710276257 +0.69500797625694322 +6.089351474823868 +-1.9345327865383939 +0.11622341443817852 +3.5676011979903919 +4.6197727366975911 +2.0505422593210234 +6.6918496227026267 +8.4723642802286427 +4.9083196844193537 +4.4661657133522139 +1.3762256299989275 +2.7015049407072764 +3.8923790881386315 +1.7395595248992484 +2.9790023183939676 +-0.88613074278406589 +5.3600785152299721 +4.7980854845516161 +2.0469211541539938 +8.5011962196559914 +2.4453497855767488 +3.2050234767596208 +2.0385370938545435 +1.8959238669328915 +2.7570503895642773 +2.9650436417794532 +2.9663645195819557 +2.2454052276124665 +2.3258000956075673 +1.8735264778186895 +2.4443591109141742 +2.6963275853445152 +1.9880194346330056 +7.9306773718352019 +8.0331320764771839 +3.0393416121574055 +4.177275589558934 +3.4239570476732872 +3.3144757864210952 +4.998924936799602 +4.3606402942032503 +-0.27511018687857591 +7.1139767582995503 +8.1365859133288261 +3.9498123931319888 +1.8669658957942374 +0.80435145136268993 +3.1304160105866572 +5.4263729263023013 +-0.85889686046481062 +11.278926648901137 +4.5376018323711644 +3.7133797884277913 +2.7275363650463897 +2.8515874918924418 +6.3261081255855451 +3.6133840365849732 +-1.7117061967555816 +2.1979325572408683 +4.3481191076133214 +0.87405112304991195 +4.0958175421323446 +0.74523505002862755 +4.352694706282854 +6.5372977434154702 +0.47918395635345545 +1.4054744201634009 +0.60755386909130493 +1.0289548903700059 +-1.6882996445766536 +3.5436029875602912 +-0.092822911273691133 +-3.0205753523240162 +1.3449924833150781 +2.417839060958471 +0.27594386468676824 +3.078011681334953 +5.045273013564417 +4.0367103896693859 +0.82746670858993276 +11.489360715365962 +5.3816716048748994 +2.959962843264087 +-0.75200338122804511 +1.0427254956798415 +2.9595550308755065 +5.3497755117106109 +6.0107068429098227 +1.2664977521319321 +3.1351513108059788 +1.6723529742152152 +1.2214281054788056 +0.36718113254988793 +0.34142243212379508 +3.4467851555297528 +0.66993366069013693 +2.5748216847282492 +3.082334427865467 +1.1260370157134325 +1.3911843212600457 +3.9185179139809989 +4.0213253740475903 +1.311399466235545 +-1.5355248112558604 +5.0226379425059813 +1.5366574692847319 +2.1303375741495403 +0.91448350463937089 +-0.69084594467094096 +-0.45343123037297595 +1.7589533476347716 +2.0165437268447892 +-0.65501102724720006 +4.0326200722688199 +3.5825711996590481 +6.6500480571284744 +3.0594778111232959 +4.2428756303093706 +3.4934758910736825 +2.5638090261929873 +5.4839987505166707 +2.0693250549663453 +3.0800314769729873 +0.9855584491678524 +6.5754375413299773 +5.4624701042970685 +2.818068476562944 +6.5089955489172908 +0.98632045029891557 +2.0076886992424789 +5.0022913519035779 +2.1064260909958294 +3.6998748304369653 +1.7894675221580223 +6.3383519678397189 +6.0904166936118074 +2.8924075321570029 +1.0384136559226063 +3.3138504310344601 +0.25645245412315809 +0.55005073062055621 +4.0337168811710846 +-0.41879633045230946 +0.29318695652653837 +2.2872604819110443 +1.0752381131996387 +1.7657837831337133 +2.5206768662041572 +4.4492649189392131 +1.4774575766938849 +3.6582205518362283 +2.6307802164581124 +2.9627000336587699 +5.1927357801204241 +1.4149988368112201 +1.9110741209099595 +0.00026387672767302917 +1.642361615450282 +4.1540553684724664 +2.2315631925896691 +1.9192776169070207 +3.052758567966066 +6.5041691274825642 +4.0504859731455696 +3.3162874551793671 +5.9557354767858346 +6.5610048781265995 +2.3087787208402872 +0.38768053674382408 +2.6499556582372055 +2.7782229226116515 +6.1664803201441742 +2.9107825299911267 +2.8335727171002691 +1.4975419109668779 +-0.0037172491037330557 +5.2010572845108491 +-3.7228317556882864 +8.0664649909100454 +4.1354033331088313 +5.6227427697821568 +6.3334394091320192 +5.4624157363944335 +5.2860593973640757 +-1.6447904485020626 +2.9295773026179752 +0.93723630691844084 +2.2383532395374957 +0.71067968705999895 +6.4038988840184281 +1.8640199925524641 +3.4699376242307629 +0.47830492512972356 +0.87772170609476774 +1.4314648658644078 +3.2832676140592589 +2.2356037910542454 +2.6466777811481421 +6.8777031069369805 +4.4123807568307427 +4.2942166916107833 +1.5734209650881539 +1.3941235789616204 +3.2657520140674738 +1.7650717227374528 +1.5477710788593617 +6.2027260578343011 +4.3257055302492482 +-0.1798033161453354 +0.63557810244190804 +1.0655921666369839 +3.5183015547218197 +5.2700419758234389 +2.8508667439272628 +2.0353096360907816 +2.0512457255802978 +2.4376994626566435 +0.29573462831676767 +3.7906855785121234 +3.2773438915980648 +6.7304932414719296 +1.0236356313584007 +1.7403764173503014 +6.2251176905443621 +2.5959124641577715 +3.8741465035300866 +4.0022866345034522 +6.2747946976447491 +5.1103255955422995 +12.100070868882796 +1.7690863369909806 +-0.41015152021307855 +3.718795751395521 +3.2531113852576263 +3.628901877612499 +5.5812780856461188 +5.1426969016624966 +6.2700658106891076 +1.5728352272742452 +5.1685138929214229 +6.664969803803082 +6.1013170405813737 +3.6682414053683203 +3.0088587356280847 +1.4819867180511208 +12.219033256628766 +1.8023612663945059 +2.5057176658392684 +5.1808756327248942 +0.46959508605442157 +3.1030746992135656 +4.3875097180994995 +5.9655532122863049 +2.1173680300178113 +2.7016527140059399 +3.8079750156318042 +2.6922386283968613 +0.95482331095985096 +10.642081699944104 +7.3780513921878281 +3.0079532969998666 +4.5484117984690275 +3.1703897041736226 +0.34664978281783476 +-1.8438774734694263 +2.3677281675751622 +4.6894897341101043 +1.7228316964321913 +3.013236820071068 +1.2040246064957785 +-0.38781136732198007 +0.76452906721810265 +1.2492533505167396 +2.3904653388512735 +1.4139620263297914 +1.0154361957209552 +4.1732675843287819 +0.92085199815537244 +3.4480088005690206 +-0.10542060801593545 +6.4737223258832124 +1.823067412256024 +5.8593136825932284 +2.3323811128261855 +4.0139934658494205 +5.1595482947382862 +3.4383386139432943 +0.24719019739143278 +5.1101413795628092 +2.1791302832609265 +0.71580652035981807 +5.9147583710272507 +3.274925160944484 +4.3408139476685115 +6.9983781401281604 +2.1290099588679823 +2.4552424159425321 +4.5780175931173126 +1.4739572022698351 +1.971242463738502 +-0.30398360566307758 +2.8143283035590692 +7.6199472171014477 +-1.3552561128449536 +-0.73031674456061335 +1.6324619487505334 +3.263017187935791 +1.4068037276585477 +4.6066667608163634 +3.4890994153273418 +1.9316502656384031 +-0.66162317108840574 +4.3994297577171331 +0.8378530358135361 +3.2737502496115134 +2.147455267645058 +1.8299955691542866 +1.1183332281446035 +3.7090585696201757 +2.8937811873243073 +1.470284487932136 +2.8904637326579659 +-1.7508113794597957 +2.9487504486146872 +4.32651650694023 +8.5182646396788364 +9.1078457941635733 +-3.0571825216102217 +-1.7882978492809567 +0.084904846979698689 +1.7857121243446992 +2.1079097251284296 +2.0782768341660081 +2.667477017145262 +6.4612302600133056 +2.8752231134854096 +3.1059565706149375 +7.2965231735935614 +1.5431716143188581 +3.1467757870352284 +1.7761772130394373 +-0.81239107266850574 +-0.51148179825812434 +5.4198417732418598 +2.5576999094253097 +2.9723295449765548 +1.2310422535197187 +4.984207621520369 +2.4103971195885805 +8.9241329663142945 +3.724600872669253 +5.2358873377484496 +2.8313918019324973 +0.92105837387688894 +3.7448635899435398 +1.7712489101319604 +1.3301886030743972 +2.1203592500230712 +3.732283947762193 +4.3358229159310051 +4.8946624256895213 +4.7936689854955752 +-2.5510192821501358 +4.9722041243471029 +2.9760970065771497 +0.67126631538563997 +2.7944159268233619 +7.0988259992195815 +2.8101730238273195 +0.54253466472396372 +5.6454426343733708 +5.4240124040592583 +4.7538187677566839 +4.9834720645444648 +7.5099888106720947 +2.5023035375479612 +1.8804509805650138 +-0.14985538642356033 +3.0929512488671307 +1.4166339809488093 +3.2404650107217385 +-0.1133140391471894 +5.1892828039237386 +1.0758092456557034 +4.2195697707947826 +4.4148535722713476 +0.6816716986105904 +9.4257503453035163 +2.5880439726623727 +0.79354189794704766 +1.364151397680645 +3.0188102463303661 +3.2532867759585038 +1.1149741044688293 +-0.23878810285996499 +-1.5924979421851688 +6.6826019401450552 +3.9896152321769947 +5.9284582423141661 +3.6250307894715581 +1.0024948992017855 +1.8126492804491789 +2.1155583073744637 +1.7176961674342026 +-0.30669167161295974 +4.1084496678138258 +2.1210673150658521 +-0.20990830345486522 +5.1607699959486819 +1.5189553955534976 +1.9746817196796229 +-1.9015601859023565 +2.9134615684211198 +0.39482385737902881 +0.91955312364019903 +4.7827265479372336 +2.7547904181015372 +1.6670613809925943 +2.5121884519985045 +3.0117735911974926 +-0.78949346920317076 +2.7739003772783093 +6.1116969160087642 +2.4337954822185219 +1.6294925147266905 +2.4368334195331069 +2.2825032307461797 +0.73863616648144426 +0.2108447443328707 +3.132928031576526 +5.740743953148705 +2.748654197123221 +1.8403585328749408 +0.90242712862921515 +5.5058160157629601 +8.118348964006433 +2.7107078168944745 +0.74810466415670618 +2.7789978482058499 +3.5770534762225417 +0.75272984882063909 +1.5216389820035536 +1.969888227563322 +9.0275200638823847 +3.5618708972583124 +3.670491121542419 +2.142156957166172 +6.8087674152278268 +0.50052966026655987 diff --git a/test/data/nested/gumbel_d10_U.csv b/test/data/nested/gumbel_d10_U.csv new file mode 100644 index 00000000..a393ac49 --- /dev/null +++ b/test/data/nested/gumbel_d10_U.csv @@ -0,0 +1,500 @@ +0.53269787149837078,0.47769274140591778,0.6355581782117925,0.5712263691530084,0.6246060634439321,0.34340393109596645,0.36744045236264622,0.31569376392872439,0.34185069802333912,0.38317605006159516 +0.23954549487178345,0.25394371178118069,0.24690449974150902,0.19302223352133913,0.36423801517230725,0.34237150484114265,0.3718009442382052,0.44268462996115088,0.34605085328803697,0.38892360942554882 +0.0067952932078552131,0.013797227147743514,0.01314554075362203,0.008591706893649468,0.016164092317931714,0.12709259791882521,0.11845761575387623,0.17325178862666429,0.51659086535801135,0.14098451830796682 +0.98380831251263312,0.98042075525153405,0.97759602477889485,0.98483557815778955,0.97490128062780923,0.94065524640608622,0.94878455545403106,0.93071171388145602,0.90393293087253457,0.9154706448607528 +0.56813846411603786,0.54305817003478207,0.66311171549022796,0.54620866928598755,0.72016741419792663,0.50172365442267619,0.51309940623468697,0.57622073977836252,0.59478699360624709,0.64918784561450305 +0.24571217319994432,0.16933075667476011,0.16896849681507525,0.27334916856489599,0.23640292041819139,0.44372723347623944,0.60778226543334113,0.34640838226187343,0.46694213445880517,0.38429436218575808 +0.46302716021278445,0.38689314920339024,0.6555606425681586,0.64793770565301823,0.49140039776102662,0.71658940266933779,0.7505923920252775,0.66363253429880964,0.79081531919654813,0.63987422719946796 +0.17836318702058618,0.19527863527765177,0.12785231633461824,0.10163578003994986,0.12330714843120247,0.014717118727285806,0.014373801503107349,0.036968756263386401,0.05454700076371391,0.10288030069205772 +0.65216158089348575,0.33049107718398196,0.47942826987127818,0.40865693989326424,0.60099820620962219,0.20625196429319337,0.21274303333485139,0.21085124174715597,0.22043889827910434,0.28221209047479057 +0.4999379717340191,0.6407649577886303,0.61767639199387991,0.8130906223959693,0.72373385613900165,0.58303067219094218,0.60146159617579342,0.67228676649392227,0.59751395150669673,0.66722426211344676 +0.48376267362326186,0.39545443761744747,0.51709114210098006,0.42512116607395145,0.30468881627894395,0.42885458396631437,0.31909515141160594,0.41506252592080439,0.21807185208309071,0.31406494826660869 +0.048269601771839588,0.10657369697583693,0.066818927618450763,0.089484324649683006,0.071740621904618301,0.08171600909555235,0.11910013013403692,0.30260658907355209,0.20355587059748953,0.15084234465030721 +0.63915047360537058,0.73079916092683095,0.81813075210083563,0.79130041194729861,0.73410739566315431,0.61846333651919627,0.38519682039623382,0.41818758947192858,0.49835437859292142,0.46354076583520576 +0.030088084135379223,0.013658403389864082,0.052094718179441626,0.29175624673371625,0.028062941302787636,0.29839742867625729,0.29231776963570577,0.2981480694434181,0.14200903175515839,0.31727147652418719 +0.57502903127395699,0.61643454738077486,0.62072596899815613,0.53858548236894355,0.67316495967679302,0.57694739181897448,0.51679987020906948,0.65959750898764158,0.51580317792831876,0.62123865578905435 +0.17352773195921789,0.22412226427696263,0.32768715624115774,0.42879588567302707,0.23856705488288366,0.55435215905890689,0.59806250318069742,0.49809383091633208,0.68320470865000615,0.58275262519600646 +0.81121141696421706,0.75231189778423357,0.76489278077496614,0.78178975151967633,0.81610346588421923,0.6377559163665838,0.42857556501985672,0.5748033075651604,0.37472098888247529,0.51293015634291783 +0.38161233843066045,0.43586783020873676,0.46580634076963245,0.48070460240705903,0.45471971775987274,0.6193850389390696,0.65021678034099462,0.68017073426744545,0.68933008206658619,0.45159092443646021 +0.31581636012870717,0.27386057699914546,0.25571418207255681,0.22745204772218675,0.35373920880374787,0.64886423517600345,0.50483113431255311,0.40733132450259479,0.50693190304446012,0.46245532194734629 +0.3559786149599089,0.29727887708577738,0.27337578244624183,0.29497413607896716,0.27829240952269618,0.64578881385386633,0.46971559824305642,0.54269449433195316,0.63330880625289598,0.56645120590110176 +0.71409345399876378,0.5609432469063893,0.57088126978487574,0.66394399196724074,0.63024574474547723,0.38459069069358753,0.55665531536214874,0.35159600086626885,0.34065571366227554,0.27527820554678784 +0.0053256922250881633,0.11631813083659692,0.024818055302612677,0.18223510278040245,0.011886486405283662,0.0084002450166834122,0.013926036393978106,0.024159370310381262,0.0074462910124664904,0.0097362384840478447 +0.044796857582738214,0.11414294069982905,0.052376913750785972,0.079774543322864017,0.13666496929364075,0.64901935218949514,0.71937251309281702,0.65628866807673747,0.55236732619232387,0.52689825269044333 +0.10427304621630973,0.010567152494341609,0.0201800903014469,0.034728992643076925,0.052999787119924646,0.42971621485776401,0.50468151885434032,0.44718261700472894,0.48316412387066554,0.64739156383438679 +0.72607105268679972,0.79112840615561586,0.70222227167686979,0.68015396731788869,0.79719028502585698,0.18597643173416772,0.21124609265826289,0.24528575656586837,0.24455282316194427,0.27073618842405722 +0.44229760386630113,0.23097807561862821,0.36772792050033143,0.24063480933546605,0.21807005125447737,0.69455293155624132,0.4850832685187928,0.48027865492622412,0.55254297659848706,0.62065373468794638 +0.69504220670637085,0.67686441741534153,0.63418426111456672,0.84713985593406727,0.65509852682589242,0.62129664744133817,0.81066355467191276,0.65703096237848202,0.71642307736328359,0.53843382364720971 +0.70569064527800029,0.69373633069335083,0.78972056004567426,0.71221946089644494,0.8733002257358673,0.87087525494279538,0.8404762815043727,0.90219286884529648,0.91198689790325349,0.86110131329041173 +0.67386586008715832,0.67375924412044341,0.537071665603434,0.61928591589093918,0.64344733537290888,0.48694689918193057,0.3678588792972759,0.30347142511164238,0.51020430537755579,0.64170786118483814 +0.25420027228696385,0.37659637469914986,0.34898475688533226,0.17425605273456962,0.23779861719231643,0.71269965681130576,0.77630770255927373,0.73961886906180974,0.66458218990009876,0.80152676111901511 +0.95232628739446135,0.96338289687991141,0.94541697434032379,0.94154096793498887,0.94164733335491313,0.77754440243006129,0.72016423384774964,0.73454012986621353,0.72992630032239947,0.76133876419043589 +0.089421707719766985,0.018001884018313465,0.0131779667863254,0.017045191169027585,0.0057523366122139742,0.10272295968025785,0.12064127714257514,0.084440588339938699,0.18689466771321067,0.13122271044995443 +0.8812857811589383,0.82637821932439048,0.88084849805453946,0.86697962359175285,0.85457496260641364,0.87844696137471301,0.88710707277640855,0.89098419700166342,0.87511177259147344,0.85423991971764934 +0.58445023361136639,0.74876999473780836,0.62408643346861692,0.56172883012913988,0.55548760193050728,0.94214465105323164,0.9378054750559297,0.94687868552863641,0.96303352396352215,0.94954814671654275 +0.46695729471613023,0.56379766718600743,0.43755530935595865,0.43860112145193975,0.37700607263832597,0.49273287356481899,0.61486443810281122,0.75793099458678115,0.65267770350328336,0.62143624431336986 +0.93869674391510616,0.88569687530979668,0.91150396285228541,0.89211687233181802,0.90518061732290422,0.77958610907080028,0.84609361211186518,0.8584916315448865,0.7633252636005583,0.7821928590710685 +0.93650930526657783,0.94086548031190453,0.9500174892891573,0.90267241050604841,0.90450613477150088,0.50374564543017186,0.74382730232900451,0.64808784294291111,0.71071376817416909,0.63358804772724131 +0.48983775058857759,0.57761018557357446,0.5703637771948693,0.6792074885743169,0.60683070085360469,0.37324668114888737,0.255043916433356,0.36298846857971789,0.36615805784822708,0.29969186082599153 +0.12274233023688708,0.10338002236677196,0.13021113307332427,0.09745533435489856,0.060864794097151065,0.53792306463583306,0.40541203119210156,0.39192480241763628,0.29181980076828462,0.28812109967112032 +0.9447028107132327,0.94143489029374017,0.94320829506613357,0.97117221434017642,0.95731902014812476,0.97196077535044401,0.97019300787359475,0.97209556764572858,0.96661246035363524,0.98096973527571163 +0.73056702418657649,0.68257437887950445,0.69138223284971523,0.66963460811529907,0.64887962196371229,0.84658344931084906,0.65800358224077771,0.72075241521815325,0.7902465252845956,0.73017375802737194 +0.086254733166491793,0.29404610584606827,0.134689536673257,0.13010260663578094,0.20397462553228846,0.45265218624263159,0.28437475694227465,0.32107681847992708,0.45277370841358877,0.39594675050466532 +0.14204350254979592,0.13964454029338225,0.15909821787500505,0.12677396714571676,0.10992781698588128,0.16002400379512211,0.15385635322309793,0.30922805887530946,0.37206726029399106,0.20257194517762994 +0.977399049480981,0.94135492431813894,0.95654611711505821,0.93801532153155698,0.96509777140453457,0.90653768795890843,0.85444505789200065,0.84000367738189419,0.81271121240569588,0.84908863288000447 +0.94127868380447643,0.92367939729591919,0.95188034282181433,0.96126804125377907,0.94654579428605778,0.74714034990756284,0.82321668745134313,0.88285087872645041,0.7224870724312451,0.8497512471221782 +0.79463959662908068,0.70020996427046667,0.82906569968326282,0.70818245291593063,0.72958312343689147,0.37241784067009831,0.52109811935224526,0.3725021642458185,0.41449635519529859,0.45300154408323667 +0.53024018727241762,0.52456225940841206,0.3034620379039592,0.45980124952620904,0.61381723315571213,0.64731654679053174,0.39660804593586574,0.38881034732912889,0.48785138237872183,0.5238616082060612 +0.37151689862130888,0.46919701827573645,0.37445413038949737,0.42386674249428469,0.42800930576049867,0.45041731421952236,0.53735536427120612,0.48904892659629717,0.56688167012180068,0.68360946522443178 +0.12157717874766139,0.12749355807319096,0.22537051912514111,0.10659413968097273,0.099468677857665916,0.42268611720646887,0.45151790583622731,0.4992581642291043,0.42853656099760118,0.49084730140748456 +0.73200185132082618,0.76495867679477136,0.69611453448305438,0.67145268325111496,0.64680029221926527,0.47438493676600102,0.34642493093270177,0.29473020703881458,0.54709635939798229,0.29210547803086651 +0.75845812611053698,0.80344093652092252,0.79918882160563354,0.80889967977417943,0.85553953298948926,0.82980393353499737,0.88902041575055724,0.86810793910989736,0.804353956686094,0.88357858770176922 +0.12294452665216427,0.18523921401356974,0.2045524245186302,0.18282929548877924,0.39203627643292061,0.71110299622523176,0.73163947139982599,0.80771832904428575,0.71652210658066462,0.65054029496968435 +0.84652438136658881,0.86302188879925956,0.8947532119054733,0.83719128501251605,0.88864597390055811,0.82890473192673442,0.83725674115702775,0.8033255469344962,0.81858222870504771,0.78811182835488003 +0.65389395054455202,0.51441844060900599,0.63510441061225453,0.65239805573946485,0.63052824712940225,0.38502551257261308,0.29593878533342333,0.30822885650559717,0.29456832483993323,0.26189158004126989 +0.11133842988692466,0.19979545407114219,0.19171360213659389,0.10629255315871763,0.092138859530686179,0.042837463406622242,0.078518627007733155,0.13039805411245481,0.050237498333453812,0.095581090456115708 +0.17505873334110111,0.26190104600391828,0.24445630025002685,0.32941933753318497,0.23418063033023451,0.33005529604270467,0.57987363173742623,0.37410351986182178,0.30009865804459368,0.27774864152889212 +0.13214302562656344,0.041790234303343887,0.076296537037714468,0.086006001540235133,0.086738084239194962,0.91878903805626644,0.87419352741562006,0.85085786131093499,0.86906616759369348,0.89260579450637234 +0.41868393342659949,0.45735291382880028,0.34038134032744305,0.34585639208671937,0.32976392158889556,0.59385941023356104,0.25682268451783363,0.3596823123807581,0.29085841859342021,0.3924965246988017 +0.067796537130792256,0.057097719836756128,0.041483395121767977,0.047160737129170183,0.039474895485918857,0.15678400799516345,0.16900019856985388,0.077003846905435519,0.17133251743508227,0.11122214174248124 +0.62245045129449239,0.53493240781244755,0.51164535948191747,0.5648937386285966,0.42530606806394788,0.31580103441956819,0.26789616412134376,0.21507850862690814,0.44999659535824421,0.23863907720079236 +0.32379006916144681,0.35704842131235925,0.23998689764994718,0.22531243998674294,0.25180424438440741,0.11144363108906738,0.15961813999457036,0.084798144613168119,0.062633166235181864,0.23454075792688472 +0.37442485904375666,0.30625418652198666,0.44848587390151906,0.3276184015849174,0.31706288972054975,0.07270056809648795,0.11967109618127175,0.11490200596745895,0.13433680197341169,0.11470577344881208 +0.68845977255293156,0.75498809388954613,0.74162011858424615,0.72973625894519034,0.74238813770352374,0.66697237009065824,0.70913912067771467,0.70921034869388255,0.6757767937087884,0.67710521674598212 +0.7307989539510733,0.74244674781220477,0.70073764977859865,0.65992524535976971,0.61964777976390684,0.52722169083426662,0.44896143392543408,0.28189661473152661,0.39113039863878152,0.33158886191086245 +0.31030613134587148,0.3086602589173747,0.22646924850415051,0.29130362896831197,0.21382112961146621,0.25878107079188817,0.27461095733452112,0.26852603940642905,0.39039019829943067,0.66166836881893354 +0.67679785843985818,0.62657592949107976,0.71277685117092493,0.7180066022847269,0.83272788990870383,0.92011676405672072,0.85156146812368405,0.88128777247037893,0.88219873045453956,0.87532110975006772 +0.3870443526042906,0.3046070558775722,0.5118463098478967,0.48545797166298177,0.44328500700066908,0.55082077920087502,0.75750735183828,0.43686880791210692,0.4551280075975237,0.41995384320034801 +0.9099799052862132,0.86598500158287783,0.90889455025898402,0.88151396755710398,0.87941661544026961,0.9420795832120259,0.94067543660638897,0.92495527144637046,0.90720817938562592,0.92099672401672317 +0.17426231452230678,0.13387321724440704,0.032394176610987674,0.052676071441974115,0.038794727734066461,0.20431444732822135,0.23575018704287304,0.093585061054917734,0.25557313897298206,0.13426855878788779 +0.18607610979175693,0.085297732177431612,0.073490908049288345,0.090864162339138577,0.14290250456543424,0.1880713341815925,0.16182646006928503,0.25250859043444995,0.14861081019626704,0.26419070622069296 +0.32803555604207135,0.23094527944340909,0.3277585999167093,0.25592188953306083,0.29519899204024524,0.059539023000988608,0.062941900483574148,0.036736631736867087,0.068144569726436649,0.033150018221940872 +0.22048991376722826,0.3866066392802191,0.28837371719419447,0.14150528199389362,0.37208886092412541,0.32441926482715999,0.44469836915959715,0.48325173350167494,0.41975300895865242,0.37272269159439275 +0.17372336636291297,0.14059175483999564,0.27680767784477656,0.43555016416940029,0.4054786403721683,0.11026845706511135,0.17303923502914326,0.16174318615231409,0.21242310685921101,0.12006106713671066 +0.54265119329115064,0.56579158580279776,0.49051988843712047,0.54378730608732351,0.66100111874402168,0.6307647732610322,0.76475942516116824,0.78351002236012746,0.65249922548536832,0.8299478966800895 +0.13876283664112643,0.48588688383461009,0.26931992560276297,0.20877493379521767,0.15733693158836787,0.12014392387937581,0.25800674592028849,0.10019788859063627,0.14247247899766796,0.15185901368386812 +0.71347739342356697,0.77042781803174343,0.57268845898215526,0.78167615624260534,0.72534627010463293,0.46365049856831386,0.70840582853997636,0.5894036134995968,0.55739573048776836,0.45952216719160865 +0.062117113603250784,0.079640641255545458,0.10485669525224575,0.15035491526942468,0.12224697865895751,0.1124394539801947,0.10751048187376783,0.11761010842747818,0.1161362114071457,0.12552245453117233 +0.81911468508346519,0.82754662368096699,0.78266746390726794,0.7169225844845597,0.76997904651215698,0.74357505087390985,0.70405783879686656,0.64971476842765408,0.88643412620876139,0.83988449032766987 +0.38689477000124173,0.27210525076953218,0.32909851058503026,0.38754218435497245,0.31223902475904119,0.42997896941960922,0.24422316954588097,0.33554607719998208,0.39646656982950146,0.28093126000022028 +0.22549641872509762,0.29471332902904079,0.36803252276149845,0.23671240717522396,0.21076269409969095,0.40837655842187992,0.20938546510297457,0.24954110066756174,0.18714297554107079,0.12229822747759345 +0.13638476479580208,0.05586151350872548,0.11583414211055099,0.055715229915231035,0.075148172880298569,0.32416085447767173,0.13904997686041309,0.2204754705599099,0.24354145393590954,0.13380430926918785 +0.76750380990750822,0.82657365998601828,0.82325500823207487,0.73180871290969196,0.83593501968425032,0.98966503344126,0.99340088941970794,0.98537812332505315,0.99181058057000815,0.99194979117600202 +0.91279362890928328,0.93507176611455223,0.91615673489285721,0.9342217936937145,0.8823966154304721,0.95198924044961131,0.96291626626042648,0.9084567043755587,0.93362693549715048,0.91762141822254373 +0.40131178302692727,0.43442767215310729,0.43528519521351106,0.35329929520958392,0.39928068066365285,0.59375844008172685,0.63600969311664546,0.50141141840140335,0.68230317605775426,0.7372521921351971 +0.34006530864731821,0.33815474880975993,0.345068619149973,0.5313035256986034,0.45215955647290773,0.42781948987976792,0.5000663003011141,0.55272666012751759,0.46510654917801797,0.41075660908245659 +0.57839338671470664,0.56861603350262024,0.51657927068299569,0.47810825708438687,0.68539000276359352,0.17210545032867886,0.20051363323000859,0.28245277542737746,0.57948615381610424,0.2701264407660392 +0.41863931124413822,0.13094255325268761,0.28987227778998625,0.13796045861091255,0.16004116387922068,0.28929852045257998,0.22359373760992279,0.42974501315620861,0.63350367973907584,0.29444131613127367 +0.87847907374387857,0.88032025189021756,0.92181473391246138,0.90424930871812736,0.89056608159443518,0.48371373562258702,0.36917529927450488,0.5295926988765125,0.31143457556027365,0.53782765715732173 +0.86577176024289582,0.80260434417868365,0.89500747973214967,0.87041792037779664,0.89391325230825824,0.78276709272176404,0.7768563548161127,0.75719264804501507,0.92974626438807761,0.86526823052553659 +0.068213668216610346,0.29937617821270068,0.034791894111558794,0.084194877563285558,0.093648323294481944,0.21104989558808152,0.20581554181990802,0.11900239522220396,0.28544036464882516,0.20051342216903012 +0.53896851671155122,0.63276675590895781,0.64826586711569401,0.71586302420473213,0.64594682105234535,0.51859221004997336,0.44386758006294369,0.56109489416121394,0.65151826638611676,0.52254361254745119 +0.5688430646181708,0.54801641401718282,0.48422808168106746,0.50788101341458947,0.5914010454725922,0.59393420940614128,0.6675900881818928,0.69282857436337109,0.63809597355429748,0.68101847151410411 +0.97495036888476294,0.96523697083465754,0.97734075537299714,0.9663619285856746,0.96972717673633246,0.97874015333944908,0.96956219468846916,0.96623864656429737,0.9814600321988014,0.97256991462199016 +0.99218449072078929,0.99346272952970072,0.995,0.99285711339324667,0.995,0.995,0.9938278813788104,0.995,0.995,0.995 +0.47694255011231124,0.58903256148914629,0.46774994753650456,0.55427654986851738,0.39735160369309808,0.71424563656909901,0.66447252951911318,0.60737386756227152,0.7196954124665309,0.76655899049364429 +0.068682629463185929,0.11906732196803965,0.076984369050487028,0.071325785800590374,0.044681033905371814,0.018901952338647408,0.038552105164863085,0.022322806675229463,0.019098171935193545,0.086920297093464854 +0.20953689138416931,0.12247572341585355,0.29481468701851965,0.21070492829313148,0.33326949694310648,0.1314458273409474,0.24843559411238453,0.059738460899106643,0.066817574115711542,0.14842727626092506 +0.78921338151201792,0.83868238094145697,0.81227991144987133,0.83284930503577259,0.81097980277262938,0.2283282280841431,0.17660496066674303,0.21272394424887014,0.20050973331672739,0.21524418730405726 +0.28632873071545073,0.36368496829527697,0.25561878629378532,0.18289641875890716,0.19306927963044179,0.6279543958662519,0.39555714614107484,0.41926229212549682,0.59439570133690545,0.65635502486838648 +0.51505308162485219,0.43492053399677522,0.43380523726227826,0.61410464529762754,0.46035953095997761,0.55252352249226422,0.5393157181388224,0.63505847760825151,0.69601152333779792,0.42771895942860427 +0.48672191221770977,0.52743989150621862,0.57756488831364394,0.46487770360545322,0.44378126264200657,0.78644455983884987,0.8019291895616274,0.82849862126749274,0.79898352953022678,0.80516691852243949 +0.3831923067367935,0.33016882537049574,0.38778252035263217,0.34529087771079814,0.44871374304057199,0.36452360750991186,0.40283016048488407,0.69488917119451399,0.4098084947618208,0.42339474157779633 +0.26224682884748907,0.013433708954845039,0.096745327842662709,0.037805398489590664,0.016728209244329835,0.092412799975144427,0.045183378417286799,0.11003277104465137,0.070630689064282187,0.038746064383312975 +0.85756980138788474,0.78902225175988283,0.78677354470709693,0.7857197125849722,0.81419945924425807,0.48343038777238723,0.49826418378506787,0.64803857167134704,0.43950498287449702,0.50096339543233626 +0.54751818393874108,0.62284743654890673,0.45360688379150904,0.62909736399887795,0.47399068399681765,0.6450919573835534,0.40521318532410266,0.57198361368500494,0.65245058524305621,0.36385637955391115 +0.27744247688698187,0.34948772404459605,0.43125373541261203,0.38894286649883947,0.41698477344471196,0.10952033361537231,0.20918848100700999,0.21342112051207213,0.15179440195789329,0.15984352832311516 +0.43971858656422746,0.4023620093066731,0.46895121657871697,0.3638040212972582,0.56233072033501119,0.58022766563226313,0.55434431272442342,0.70455392621806401,0.59195492471917355,0.47493728241534017 +0.62887609817173917,0.48308827777509611,0.43917680755839805,0.74997405105386372,0.58388600908801735,0.36021758490824418,0.24653169277008197,0.38948277421877942,0.4449732788198173,0.40858689436572782 +0.51499960748175511,0.49256185584818024,0.38454672115040245,0.36599674096214851,0.43621382259880315,0.37527916682302265,0.34707610521582255,0.56256360004772299,0.17174155593966789,0.23541560085141627 +0.010979112594817986,0.025991828035339878,0.037005575519297215,0.034035763790607465,0.015046831307709601,0.20161360470229428,0.24838269848260602,0.42574310689815464,0.21727605079650514,0.28704418565030643 +0.22093268732335125,0.31574292501318635,0.28965907476959241,0.23232789823669542,0.25198372380692069,0.59106219283421346,0.60274346548248814,0.52624575063236945,0.58592520139063553,0.5679061041155351 +0.19057119252329557,0.18989389450872007,0.23157699985313762,0.22805900106323496,0.15127459741780303,0.151375046960318,0.090012982807828851,0.1563088587427115,0.14021488509025215,0.079807215108311763 +0.9246754463279041,0.90943309848079568,0.9159095250361049,0.92027013018377213,0.93361307008307493,0.95484701954409501,0.96810412147896363,0.96203476758090778,0.94722376400021879,0.97898406625607959 +0.39227693069796721,0.54758660119841718,0.36404551766463822,0.45433549131848938,0.45447374289506204,0.49182281925459415,0.48020263956277676,0.62569758683093579,0.5517441201081954,0.49803190361126337 +0.77988122637623669,0.78061037758015472,0.83006062087951493,0.82053627035929178,0.79450754218850639,0.54766914001083844,0.38038020275417028,0.45918962117866691,0.36582837821333936,0.37233412705245683 +0.15133383353688323,0.16288144388818859,0.18769334946410421,0.13193846135983045,0.095726386614850417,0.48051904354360919,0.31006140445243024,0.43527991927112586,0.27789160978864391,0.29229072228190911 +0.85105102022889412,0.86367304009035428,0.85645134068908391,0.91280732987796998,0.86493620069813182,0.88851123003404742,0.85737685914499906,0.91966856530051766,0.89813057481659708,0.87535425522945998 +0.31115295756504513,0.22618851703010112,0.35653648144216565,0.34568439403665563,0.35152730529080445,0.83026803276151684,0.76664321697898608,0.93777476975809826,0.81086965338908445,0.81038039267877426 +0.087559643749958616,0.050377762614525534,0.038795963075254028,0.10784632436117009,0.059413054987098521,0.73417383493505883,0.71944635119870792,0.71112241075024518,0.66795022218138578,0.59901880248798789 +0.61907113986368789,0.38543434659368592,0.45970236588618796,0.51105662863119483,0.45157411336549647,0.33836228752625497,0.25721139382222225,0.24252124704071837,0.3850763087102701,0.30711951301782781 +0.96897214557040412,0.96471593130262567,0.96989413673872127,0.97391065830014623,0.95576550471013433,0.8749248208769056,0.89983903811661659,0.84925037223728594,0.9387985499633853,0.89421805131131915 +0.61669619337695214,0.65890326965017865,0.56176267433329374,0.57709470376721428,0.57927980404929102,0.39159928078879824,0.31699924697750614,0.30143083547591631,0.4929366919968744,0.42273899933207004 +0.8445933023981389,0.80712342090554867,0.80714976173475717,0.90215555965550376,0.864717233838739,0.92519199560046284,0.91848649861639453,0.92053385803591548,0.95180817754589042,0.92646270085241711 +0.84026340255514786,0.80379074646042992,0.78328078830963377,0.86817707147564938,0.85643568143131432,0.55925196813768596,0.58497236002585695,0.57506526928045631,0.69054449317627209,0.51709750437294089 +0.47694759712810675,0.60162587914964916,0.57130675882217341,0.54114670152193778,0.4979045334912372,0.66133094407268467,0.65542864243616039,0.69422213928191523,0.69252099739969308,0.78048220483469222 +0.96253392088793399,0.96912805506143718,0.96746166769297792,0.97362542941117636,0.98167253527207277,0.8535061887523554,0.93005838347015968,0.85985038205398445,0.91157787918927258,0.90122753163449598 +0.18311200950379525,0.49434201806434441,0.24420286036911931,0.38709599446156284,0.17755600306555341,0.33177121859626246,0.28034862104687353,0.24081317093805926,0.26318425420322933,0.42640176639543059 +0.081834776931083208,0.10197833421990141,0.092467817390578549,0.10535138091655305,0.20423640086665407,0.37686211467371566,0.23785208773916178,0.27379785498488218,0.24886649442487901,0.15398831988569112 +0.59432409563154232,0.74358942153048213,0.53630817102384687,0.50140084719168954,0.59932757404749082,0.68479258436127188,0.6627533589780763,0.64612526606651666,0.68046237368252704,0.64090480012236806 +0.96830225234632805,0.96652803660253062,0.96549600662546231,0.98205690117901168,0.96203923985011874,0.43677230560570146,0.56541867324267381,0.61021248102769965,0.54551092683686786,0.65943544471519688 +0.32402522795715982,0.37768879442592396,0.18315363189322575,0.19064756229636876,0.39363262199913363,0.22406297395355618,0.33847892037011074,0.44935930546489644,0.38614408762078034,0.28515716260881596 +0.16532725879156329,0.20750385712017888,0.094968432473259701,0.48392022264306467,0.11675627241493969,0.66694542465847584,0.74787416614708002,0.75856742981704373,0.73843636657692935,0.63864567168638775 +0.097242045435668834,0.138608560577275,0.16061172939954071,0.06376686724252939,0.052329328987989213,0.0091995475522806298,0.022518727375436809,0.038758369017168795,0.085861686762663425,0.0066421134106447871 +0.087636795382560528,0.16186298037064939,0.11608725765837191,0.073922605748529685,0.067622682283408259,0.28370468129287907,0.2882400563976304,0.33158238374744875,0.13461914725485991,0.44479895921540558 +0.30019559752182667,0.38980776400421968,0.25529364947579358,0.44005948866834044,0.33119004280888809,0.43070673113106883,0.39942222580430298,0.67065417146659123,0.43565983223379712,0.49353902463917632 +0.3929501654783234,0.44184355580364465,0.45650600505177952,0.45754691344336684,0.42825910091051045,0.224471764202468,0.10842670852435604,0.062896358518637147,0.19454033134389348,0.086094715079533757 +0.92232204868362522,0.94086601593880026,0.88704378480905821,0.92782444725161484,0.91774345762677578,0.94493156028328507,0.92978648925781315,0.9524229617381843,0.94119910421431108,0.9577272891474331 +0.23318187072725038,0.33664899846189977,0.35716649729875205,0.25109010082087979,0.40553979694959896,0.16627336727106679,0.36852567110327339,0.37470878378371963,0.3033106708608142,0.18324053523247763 +0.42818681318705831,0.55541625680052564,0.35128485583118463,0.3014424393477424,0.33753366264864193,0.16870718749124286,0.13787083016359969,0.21422846187488748,0.15418956588838012,0.23204346347484339 +0.45378858251856768,0.28155724654789516,0.40792462832178178,0.3227771137899289,0.48624107884825241,0.1483875190315373,0.098272881732563128,0.35579243118991433,0.072383914462997745,0.24451110869995829 +0.03335422552348466,0.018297857226580706,0.070902875886540123,0.045369206258337721,0.1872124828805744,0.50281102079316042,0.35250046444707839,0.35733460055780886,0.48064552710275199,0.508937360049458 +0.24442985325076183,0.31281758603291032,0.30799193735584074,0.47171834620530773,0.37635545074590726,0.15029455928016222,0.35120144081884364,0.17206162333605535,0.18819390019053284,0.15846814584802588 +0.25448046405528713,0.31788419964141579,0.41116351741948343,0.2295120576454846,0.34802912038867662,0.41362297753221533,0.34598559027654419,0.48495170954265665,0.33526200710912568,0.41350386108388371 +0.47600027152516944,0.4827194751997016,0.68016264986362884,0.5148285132308954,0.521225766948191,0.18387218777207359,0.17426580374013351,0.20938576708431939,0.12210191765917289,0.27365692096646399 +0.19958305898355988,0.23073210337316225,0.261464700422953,0.30144869067590152,0.35161009119474618,0.80550678263534192,0.82488135612219859,0.73099415531032252,0.76696254839770894,0.79586808531893771 +0.91815903321340753,0.92281150739289908,0.91508477865135385,0.96523419450385495,0.9126156809797894,0.995,0.995,0.995,0.995,0.995 +0.35528583950703219,0.28544215255533778,0.24042914164602341,0.23598612213391407,0.29719214464421795,0.20392586200615054,0.10003230601433533,0.12567857254180875,0.088478122168461626,0.16936143461499092 +0.60372199794789427,0.57521413153153689,0.68954821777878883,0.44975109232473287,0.44370817791787087,0.72445386325125138,0.88712271270923471,0.74898274106089469,0.65312556448043013,0.72411096401628594 +0.86794057098971766,0.84804358475957287,0.864425574924091,0.88330617352038776,0.87852815058430833,0.79055012654861789,0.86767847675945808,0.84268982752109189,0.82465767036773552,0.82759518249076147 +0.76000559207333951,0.76261410381993677,0.83259819811791447,0.79989509537699033,0.80159394079236646,0.77739704321720082,0.73614244643249083,0.70517813661717388,0.71826514662825058,0.72253679457935061 +0.19596563986869864,0.16093067437760278,0.19190828138380928,0.28812925177044657,0.16419672712800765,0.19754219791503297,0.3016262168821453,0.37149073524051601,0.27843425582978387,0.28389208563021817 +0.3548175317032094,0.19716408805107372,0.23031325932243446,0.19342833574046991,0.19987436439260509,0.12464919142076564,0.15715849355911593,0.2971915296802804,0.17669822971220772,0.2191935170267299 +0.79231864787449302,0.89637481785029305,0.80831118425703008,0.82116221825707991,0.85675022579379601,0.85036408525774476,0.7854894725896826,0.78458995764958117,0.84376989523297419,0.91227100571267417 +0.80858081729702969,0.70367262975195932,0.65834098172490174,0.61690442796679923,0.76193544748820763,0.76778154107159402,0.72832565501448232,0.76392445221426364,0.74094699588021706,0.68575922763556796 +0.077669402235894802,0.32824006580631593,0.17745533140260439,0.27276178463944689,0.19789493145072506,0.16502295699320474,0.20900228948449368,0.25815530683030852,0.26593398625846487,0.31239282860770268 +0.080777543331880919,0.10519124459825313,0.16022790773423135,0.086341410205940605,0.084364375594313173,0.35572345062974198,0.19295244893874658,0.35063705794164279,0.1814541772182629,0.2618927302828572 +0.92803140061160128,0.96988327361758797,0.95068113415617517,0.95695141141185558,0.96297213635988532,0.94732735861906825,0.9553103367506901,0.90994479952495655,0.94470462712341963,0.90356794183025246 +0.84591745548692088,0.82898657568147671,0.85296166237093729,0.81967758029349436,0.82404238209709813,0.89338436981778724,0.90007149122538177,0.88794406710075369,0.93391507040359145,0.88099783661890929 +0.88197100503247539,0.84422173441270609,0.87094513836199616,0.8826196106092461,0.89522764660067988,0.8496577791229285,0.85413980597513017,0.84656000710673873,0.80754518692264665,0.85027558371074718 +0.86652225708378983,0.85732624135561508,0.91535660650696693,0.86663615141878103,0.80058193454169069,0.1726803958008597,0.14257923766854935,0.12612701617764122,0.35371149724233253,0.11119360683370227 +0.091585220405592027,0.073523190832938207,0.10882301462698579,0.027197323652226622,0.07950770526077508,0.58345469096093283,0.55446490386384428,0.55704281813814194,0.43318209916469774,0.51106579278712139 +0.55071471054852172,0.57254441830445879,0.7051350188848986,0.52318101035780229,0.59941535172401728,0.93586713130934229,0.94322315286262004,0.93968062943894459,0.93289793896837225,0.96132156488601117 +0.70353996172138777,0.72630182982538383,0.76426286980858471,0.72576455000671114,0.68620089042815002,0.92380255725583149,0.92115714002283378,0.91695139984948648,0.92913853403296387,0.90319436692515498 +0.16184243187834602,0.1854062628408491,0.052975607366542887,0.044267695891912831,0.057975921925398979,0.071608569094686964,0.068984632409419155,0.3662475700548411,0.16815566617879746,0.15761910160654907 +0.85887599882664478,0.88188971477210676,0.81712516178958405,0.83339077731943023,0.85052481802994606,0.65125014967634054,0.6930400992569008,0.7090466813824563,0.68201541053712944,0.72210733414976414 +0.92368920430722889,0.7608196398068634,0.53278382189455376,0.50207256808062084,0.58573007534141497,0.89901595682021362,0.87326254651997415,0.89617872991947589,0.87715306537574333,0.91125010754330193 +0.5750973642342132,0.53376071530510605,0.53141594285261751,0.62269235271378176,0.60970927009475195,0.84094346684286614,0.82086189251276021,0.89892652796697003,0.83121909937471417,0.82184821533154984 +0.22192546341233976,0.35875065441360043,0.46771483737393349,0.29019899279228833,0.31686756285489903,0.654041383153523,0.79401838922057655,0.68850436698994222,0.62465228678774776,0.56584378457045981 +0.30983171438833956,0.27440383928479151,0.49044490957749098,0.33877530923928456,0.29851515337941648,0.37082020335947419,0.25655068657943536,0.34800178845762575,0.57604370042099462,0.27434023460955814 +0.9864253387012698,0.98507106190662785,0.98583816716562911,0.98679076475672378,0.98926707330973773,0.9937763357011038,0.99086648380033626,0.98938357518635645,0.99150217362329318,0.99114290045689746 +0.41670185021768358,0.38401022364269244,0.47128522300045061,0.44212738101487159,0.4608033377153341,0.55719888684688956,0.70956039024167272,0.54130849955254146,0.53773224379983664,0.49254433295573119 +0.062331766509114317,0.042171279288604702,0.16083488284494474,0.064856413780953109,0.19916431690217601,0.39415644886321599,0.50192213142872788,0.35102025783271829,0.29329695607885198,0.59377573113306248 +0.13973025520090743,0.20156838363619189,0.07336372500868435,0.21647760583437614,0.11798090228695254,0.13476352495491306,0.14156532761990809,0.17878784649656793,0.22431392283761492,0.23717607246363132 +0.026701445243211719,0.048207765066772421,0.044290454563461049,0.052624094561915469,0.18029007336009001,0.13108334576828212,0.074267071642688615,0.26033584374818497,0.151394317363163,0.087171907274759236 +0.83071179802104078,0.81501950873643469,0.80525731274973933,0.862646291236153,0.80645031572202552,0.79463742868392151,0.80466744248405431,0.78423887948155779,0.80049299242090766,0.82125143395386924 +0.76580096234656092,0.71862826557480286,0.72116122374427061,0.7379116740485141,0.75996882581966418,0.57325487319030666,0.66979608035762461,0.62866850555292086,0.72244579179095592,0.73152745320111978 +0.72940957291927599,0.71021963414386424,0.71809535982901718,0.61535132242715695,0.5967609965882712,0.51278357100090921,0.57711509030195729,0.53752632052055493,0.4387220064236329,0.40085079838172732 +0.77217459392971288,0.82870899789849561,0.78055204896372188,0.76404926870599787,0.80985570352640313,0.82429586906800334,0.82995456163188708,0.75634982137125406,0.72726713665178511,0.75697852522716347 +0.97642744375970603,0.97973349966922751,0.96948727648122235,0.97336079631349048,0.97278711854595667,0.90621672736596426,0.92398449356550438,0.89969057872075719,0.94595475916866256,0.8566148143436223 +0.48490829731035379,0.5270268071617461,0.53206456112093226,0.48374244288424995,0.54983507105498486,0.50108629642636515,0.69916187660418982,0.49793919161311362,0.64620638181804391,0.77826996837392826 +0.64605773103502528,0.60432898878934593,0.6250312590564111,0.67771742682088743,0.7321300573239522,0.40754251505132022,0.49553827932686556,0.55727439167094306,0.44380528331385105,0.72705072784446645 +0.81892163103803139,0.73846715214312519,0.65075836525647612,0.78212643493315581,0.81702324034994755,0.80993310202028912,0.84054192955954243,0.75499039152054537,0.81119701001443278,0.8731994270055945 +0.62588144355716757,0.59853905360796289,0.50867790137999669,0.58348319036303864,0.66177582697127613,0.48639232755522266,0.5625493232219001,0.50478249104344264,0.41704882032354529,0.36925104455440561 +0.59376472608131547,0.45353384970803834,0.5384977858338964,0.44624457947793517,0.57199386609135994,0.87090393845573266,0.8929167929745665,0.82613484028842588,0.85313668372690898,0.82453038313541849 +0.46848756124249835,0.45700475145713515,0.58881378135992968,0.52566825717803978,0.49026596776093379,0.16136575382552787,0.22367778778425967,0.13211826331099297,0.1744851334078768,0.2744122057629329 +0.68174514194242897,0.63913551197037766,0.71778122338582317,0.85135979621554014,0.77231447034864154,0.83128508608205509,0.84838665186543238,0.80206254360381846,0.87318429720470858,0.81026512212701451 +0.27054006877768821,0.15936831288855274,0.095369358867182091,0.2176117314084024,0.13443806816940929,0.0068023363419441422,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.24368023256208216,0.23126964565017799,0.22993389519979784,0.20199652793235745,0.26978093825164706,0.5984671937476358,0.69879098390810723,0.68808136953156995,0.76116503388038326,0.72507694960222135 +0.66104587099897505,0.68882444212794858,0.64763130675418945,0.72580861803725849,0.57656023502931775,0.095474902685972557,0.51412704828544498,0.076320682390368627,0.11474236709182919,0.25242795128725026 +0.24296128974310016,0.13199429059751133,0.075791729759666249,0.17500180829666273,0.091616114688812533,0.066874110576472523,0.11487481239601807,0.15698386650183926,0.084220605058371006,0.067501362500488077 +0.4510945482903792,0.4655993769119966,0.45092893516994181,0.288458964758324,0.50486761299543992,0.88452391841564482,0.85516307919169066,0.88241684137027865,0.91324736966634279,0.88836437967255866 +0.32818684459674419,0.20277741734753957,0.15927141098655512,0.17025403745356676,0.29774769025971592,0.23657930843183367,0.21299259099760665,0.12124503534870049,0.43820679825148667,0.21242074292968599 +0.11451025850265495,0.17031495345873487,0.077715548250134159,0.1501569153915695,0.21438672082149995,0.03754167785519727,0.040167925559226297,0.059760104544702403,0.070181047514788097,0.054619020054824247 +0.45675236321171009,0.57031006654142269,0.48977006369386822,0.37025625762180681,0.36933127572410995,0.44206584410858452,0.50973942942800909,0.42004163694218888,0.47647885387414179,0.54418168545816936 +0.19938415906327145,0.23478477090248434,0.1342919027374665,0.15428294907906787,0.19947377880453732,0.25605001804070104,0.37697758697322814,0.44946124547277677,0.24271423902246686,0.43037755964906088 +0.68224105736963558,0.7656584910873736,0.63833576967590222,0.74424371952772583,0.71504074652329574,0.58400676786550165,0.40966828019009149,0.4852497492975093,0.43544373489567212,0.63937585576786393 +0.19358839016626472,0.20187642853125598,0.25303732391330902,0.19034684656072098,0.10823479740066305,0.32210532427416538,0.27725650023785864,0.36393754868186345,0.27186727549997614,0.21876409239485489 +0.88854473964248526,0.81581868449574646,0.85003057608263788,0.84029752397326996,0.78895846617523935,0.64959058703970807,0.85478401641011459,0.5039803550171198,0.6203580319706794,0.6107853614084866 +0.61302318138910672,0.63417519969516167,0.67252915623248199,0.66178958376985642,0.67266798517084325,0.41206179911387331,0.29664224057342337,0.41063001289148993,0.57969792126095698,0.23867163519026302 +0.67202167546415414,0.63856827942072147,0.69154710750444393,0.59593372154631474,0.79591834222082403,0.47527730543515689,0.49493840066134009,0.37054059215006674,0.27775374628254657,0.40705237895599755 +0.48925931099608944,0.27549632629962151,0.25558816324337874,0.30176279167063003,0.28837444251985711,0.6482202856859629,0.6813934054516686,0.7104234474536455,0.70431222443584862,0.66796939060440885 +0.42471980080456406,0.26818714258843568,0.35707186986110462,0.35874985731789188,0.29700116635649876,0.17854835887556608,0.24657765394659287,0.42586746529559749,0.35211003533914043,0.1797461475653172 +0.8016503770451564,0.8002925640612315,0.92733268995652041,0.78632264255429041,0.7742073265544549,0.71490854703005891,0.76858250124495875,0.80779829018865112,0.69675213223672072,0.74368048066389258 +0.22348261071137498,0.43865896345232736,0.19493537684321083,0.38800497018383107,0.28933593127294865,0.18347455587355121,0.23850650436361842,0.35634101522737471,0.27248133529792995,0.61767287584370711 +0.68556615413321498,0.59525299587403246,0.5816875940363373,0.55153177780448348,0.62756673505645932,0.94739851789198859,0.9180764629563698,0.89055393871966904,0.8883884537208282,0.90757570616550853 +0.9557212466452083,0.95262547300079858,0.93000332030350408,0.94028940753195478,0.95962189001146725,0.8470321560453089,0.84170742667628695,0.91133235869346296,0.85814008800661412,0.81968158154631321 +0.84099803302721621,0.79907877606455568,0.87647643664967445,0.83173648195224148,0.76250725399585839,0.82209038795553435,0.76898548690950896,0.78482019234797362,0.79591134560177457,0.8229410178319021 +0.48723652090588687,0.42366109989234402,0.41768365874304603,0.29958811282995557,0.55376627130317391,0.49724886528565559,0.52676122009870552,0.32251938592526486,0.32835753328982153,0.42178986236103966 +0.79415214407513113,0.75437553707160476,0.89060242773847809,0.78394836068036411,0.84603047757990901,0.58932102771359318,0.41977171474718655,0.31101001697243569,0.43503209002665377,0.36284092065762075 +0.42588091445946064,0.44293295827810764,0.62838051884318458,0.52809390702168391,0.46235340033308681,0.27480380891939149,0.41492438004934395,0.44549099318101171,0.39285493778879965,0.35109125790768603 +0.37397942412138896,0.4315123330743531,0.31828830574523093,0.30545871765935251,0.40642886553541946,0.20007402295596566,0.26718545067706612,0.27777395569137742,0.22051401317003738,0.27623978731572141 +0.45330483081943074,0.48557675394113209,0.4443233700876601,0.53111784657812611,0.64332244437536867,0.20856812040438527,0.20686264129472554,0.20035917576752271,0.22074514281121638,0.3274227659858332 +0.42249262446766744,0.47611934141605206,0.29772450178279952,0.45589509428828112,0.3746382061799548,0.20049253429170366,0.45798329534591253,0.34775427737622822,0.27925207008957376,0.30372338442248692 +0.94339209940780622,0.95104166274540147,0.96829213548334314,0.95392678692586741,0.95340726312132573,0.96214304663589223,0.93880006673861338,0.960074492933918,0.93944973565520762,0.9334915578074201 +0.45306516799299956,0.420116103457987,0.73393281965399626,0.60681524316896485,0.41720380811602975,0.51873793141567104,0.68455051872296813,0.511623652273556,0.45476039181812755,0.74615073049789737 +0.1229166302074558,0.079156921565308264,0.1263547896232996,0.1038995698618316,0.1691738413355845,0.14968567169854186,0.40702895444701614,0.24245118585532116,0.30166733535589119,0.37035740268766204 +0.68426872404443317,0.66460753700812014,0.53654314178856954,0.7040106345375492,0.51056783195235744,0.7634285613603371,0.76748022469109323,0.77920373392407227,0.74698440797510068,0.81651626262463917 +0.2600969512945428,0.17147998264409325,0.21080966267618928,0.1701770535146418,0.16938406860572947,0.010018082539327927,0.010698021593280607,0.042455843329671603,0.070805381605177381,0.042916820646505635 +0.88987468643958789,0.90938434828421211,0.87118475543683571,0.86897353458333959,0.86046950714079862,0.31023826394812593,0.31044384799315983,0.17504695427488254,0.11205765846535407,0.32398825095151906 +0.25686801666742154,0.21786912085372584,0.23420312735834692,0.19216046118527336,0.33461827595602123,0.66289814162882643,0.68174410183564405,0.49340991248027433,0.59633690977352494,0.5252423304773397 +0.81497037220337809,0.80023628336493258,0.89915466067031158,0.80706011891015206,0.85310757523983938,0.89958498787017671,0.88874023864627039,0.94585886827552734,0.90253406341070419,0.92495769579544751 +0.51054709926428132,0.4903489610005638,0.4915902972861661,0.46820610269787788,0.67119589683715852,0.66265068904612812,0.55165409579058067,0.56318770206416824,0.50249459754559211,0.6616832364525147 +0.90440879004090591,0.94046501399133398,0.90627628911169356,0.94091828991076021,0.96336811585932969,0.9755617435148356,0.9831104689801482,0.98357679575564316,0.98374140801023668,0.98475741143919482 +0.38808683644566577,0.36374173613149008,0.69088111605378422,0.47707878515939273,0.46538352596690014,0.041566047148089702,0.12680452826317212,0.081579270161463852,0.039174747042134306,0.12903871599701972 +0.58122560093171782,0.61123869437142053,0.5471472301578606,0.72053166813565905,0.56134940238552988,0.78326792505685616,0.80399709506308992,0.80318567107314576,0.78589382642530259,0.78178630300680552 +0.22367283619343259,0.32108188563143258,0.34753025401733184,0.24223113901098775,0.34960559333558494,0.19977090889006521,0.13824829176883935,0.1456289706111491,0.20684220184921875,0.28209304276970648 +0.84754088329229638,0.64830519325914504,0.65594764027627805,0.61868526207399333,0.711522780038645,0.7905419488961285,0.78619930779677238,0.77043952196253862,0.79853042951435182,0.78711800524615105 +0.089049764619604677,0.27218656972400368,0.13925082908827602,0.19200869995984865,0.27978901777533327,0.14264130414813542,0.10300057215500485,0.062849849200583424,0.043575461808368382,0.12077826927998861 +0.24772683718514421,0.35090894499444703,0.25528303798637841,0.21939686793485286,0.5142179408285299,0.28311501900316649,0.19178826271673349,0.54557151460903608,0.17245745097171239,0.2293989234312957 +0.41328953964123749,0.4713369923701981,0.35501645281329108,0.66521964935236277,0.41481918955105523,0.47164422823698315,0.52718245217692994,0.51291372676496372,0.52560754850855984,0.44176793438964634 +0.50540359645957977,0.58902745353407049,0.59112458015442648,0.46402881675749152,0.59371051852940404,0.028276049793940154,0.12462683513877731,0.069363589136637038,0.030764239811115035,0.054976847459338188 +0.87099971175435242,0.85370831578619999,0.89537016247049106,0.86320315007468884,0.85074913824791309,0.81837271267431144,0.87324441105010164,0.83240356718305764,0.8123443311487728,0.89157733591854704 +0.059471414994513028,0.088745751563700681,0.11581658505020498,0.10195589458454266,0.19233361716033576,0.30280491986195956,0.18762308036094222,0.13579919273616542,0.13436657455168466,0.1104706300248004 +0.35750186134338824,0.34521876982762789,0.25764326556236972,0.29178894465440375,0.4371198026055948,0.50902623214642495,0.52314672953798391,0.54531900040456005,0.50538959456025601,0.56892127971513995 +0.81884074571362819,0.79182076620053854,0.72311380444443341,0.67432750001898611,0.69920116677530642,0.82099522268981029,0.77430838547297198,0.74863865107180994,0.76066418478148479,0.79949378708260466 +0.7690204090015611,0.83547064199228105,0.88833934158900907,0.84842739460872707,0.79516210444853064,0.67220088923931698,0.78673159112803992,0.74291203790925886,0.69378588712424571,0.78817835813969728 +0.92512245380220781,0.93183415601378372,0.9312735899293243,0.91896077213458804,0.93074683865414998,0.96364073126459493,0.97642274058306566,0.95863650357931873,0.97802019221125147,0.96376938853062688 +0.83104189808133144,0.81410709183546093,0.78954090518527087,0.82960782709414405,0.82753080947440405,0.78179022771655027,0.80685066859586496,0.82211924242437173,0.8479700623138271,0.88774218477191558 +0.3384590881969336,0.41841822027345354,0.4384060218872049,0.46629791686427846,0.47135099393199253,0.78014270056154955,0.71856468051555122,0.63679832292836824,0.72899528100969735,0.71675712635623778 +0.9223625537414768,0.94609227354520975,0.92310301991527988,0.92231534371966584,0.90007633811909837,0.84608747574383636,0.85067950192023289,0.90127852678414566,0.87830848598968414,0.86303878077887197 +0.47090678345337889,0.41007632316905251,0.36805501059280044,0.55843755559180752,0.43201200928888417,0.27153719370835916,0.20196896206471737,0.40146856204956038,0.38993255657260528,0.5288015432597597 +0.1112829225191172,0.16975697202725065,0.45030211718403834,0.2522524817904972,0.1980073321901788,0.42963283651624951,0.39685914720758075,0.55316581917577312,0.39194225534447691,0.39319369461736853 +0.90457051330183424,0.94711646289214535,0.92393870165687142,0.90427900388021132,0.91298150326473748,0.95027737357303521,0.9628276665753126,0.93549062704550168,0.92573470695059834,0.90912245589424034 +0.15566233466600066,0.066455595340821239,0.025604383292384618,0.031364530819710398,0.043092867621462611,0.11847483084421437,0.054465803521461381,0.12483961964608919,0.18064213063917761,0.1012343603361012 +0.94271422387795312,0.88290887486072411,0.88194266220670348,0.90595148407736903,0.86662001782678266,0.66542900053900333,0.61770049572805652,0.54341992791159921,0.78159427616628263,0.67056083117494958 +0.14968127280063315,0.092177846730927715,0.10991879823269168,0.13639175574645196,0.20240059986827558,0.33121855938225386,0.49368342428351764,0.30659235644271055,0.4300645268231178,0.39804739496321628 +0.68787419003720029,0.74719798626028444,0.72432311068404953,0.59175550416693845,0.69099054243997293,0.7906805791135354,0.77274897080496352,0.77054654466336991,0.73546339888707268,0.84376341270398592 +0.92565112523091297,0.95951285187037683,0.91843016250640241,0.94553288244059353,0.91313866080599015,0.98844115287646606,0.98682388020096301,0.98801313634611621,0.99139618492335035,0.98646917301811232 +0.40467317257863367,0.36993031928432429,0.85261084194643644,0.47071736006182674,0.5528351685788937,0.42421475579613033,0.42412891823914978,0.63077375586726436,0.53424839381477729,0.57969303856952892 +0.32690149317673556,0.29752723782440127,0.2863649237842808,0.27710221652524059,0.38534017783240648,0.2830537473491902,0.39434801109018947,0.38756344720605052,0.24499557164381769,0.40292486306862174 +0.016277690216838669,0.1581767747702611,0.0075743596826312824,0.043079552153367368,0.075772533338758274,0.20922315420467058,0.37729453275096847,0.1430894985387639,0.098881945566980739,0.16206161232549443 +0.275759607906082,0.43034766442724637,0.18898023143993381,0.24296094136662366,0.3426286684407418,0.32465680156019872,0.2285169114184154,0.38082899272558524,0.26046982876142033,0.27137639935245261 +0.8582620934549805,0.76809236712869655,0.75514061716966752,0.77841711367363486,0.80600080502335314,0.27293840292259575,0.52647852295194708,0.31798273322056414,0.25679513221257855,0.28250403897255161 +0.75926695976268288,0.86136665722005268,0.78257767975446213,0.82914425470516351,0.80644318167468865,0.81818888246197541,0.80254313387558196,0.85771336007746157,0.80338256139656861,0.84273768388083448 +0.44130236557895008,0.60062899012700455,0.64492325569153475,0.39555712349829475,0.50570823057205394,0.015843143773973355,0.010195467824824635,0.018638785084486326,0.010841878334768584,0.046759559103529649 +0.64662027106062858,0.57781677806633369,0.60711428165086345,0.56860172844608181,0.59389736611046651,0.33990890139830621,0.60607633952167617,0.27712883797358234,0.39317678220686714,0.2963248132437043 +0.0050000000000000001,0.0050000000000000001,0.014554078661613561,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.1096890318757584,0.10476098765503475,0.13187308414490695,0.072106788429672997,0.049723390169683537,0.59292961613391348,0.56567089460440778,0.54473891117959194,0.64765776696731048,0.57620207997388051 +0.035335972962561746,0.12370294230641618,0.057179461844507146,0.086570626561305347,0.045547134621310756,0.15027290725266329,0.28208941468620174,0.12157965931692918,0.20615261411877006,0.16975012942567197 +0.13971259791382451,0.25091800538939923,0.33136542877764774,0.34099658470950411,0.18071809413959911,0.35061546551878864,0.47964044011314444,0.35497749209753526,0.34812325381790588,0.45403490672470159 +0.50782225511261458,0.53352119060582415,0.66627144537050875,0.63791649896301994,0.52808181961881862,0.74875909424735676,0.58767404747777441,0.46063525954377915,0.48256524375756304,0.49131426363601371 +0.78803241545184011,0.74481742762145098,0.75162488475325007,0.77310922942705851,0.79568557787569594,0.72599786988575499,0.67887155371135677,0.68876222652033525,0.6910589329490866,0.75333744662929747 +0.26039766607559178,0.44535220644320461,0.38284253128222423,0.1571980260487249,0.1685648279672089,0.10449303887436026,0.10540528505226454,0.14444023629767599,0.071498768724276879,0.096880928409526723 +0.58319459655777872,0.57750792600563572,0.55113842370337696,0.59707989022717634,0.6134402909374308,0.43671891427948262,0.53371178169618294,0.43054347278666816,0.55699117956100852,0.62631877642706724 +0.18763501533148275,0.18577338379691982,0.21082167737768609,0.16605927216006178,0.22423555210116869,0.12359038097202599,0.18256503055454865,0.1549146510951756,0.2608182787953458,0.15921989027993505 +0.11190416893021737,0.13923972801422491,0.249966286966815,0.13454144835123594,0.23727263530600412,0.11277757966309629,0.10141705509159579,0.091642622282969544,0.10575957942638403,0.14297064414132171 +0.97421167134435138,0.98730244589386462,0.97872503157122037,0.97612457923240936,0.98094418938852823,0.9289953853876709,0.97124069652635603,0.92316551014663739,0.9485167926468332,0.92734245347673139 +0.44863461389158066,0.56400097007281014,0.49663931972463626,0.57991141758975417,0.42976732252282224,0.27497956578736649,0.29018835219904271,0.2380052254011441,0.30530935371644252,0.61182470541097933 +0.61002858201339949,0.69730889200581769,0.50364474239177071,0.49484648552606825,0.49667210309416998,0.59581822689506048,0.71898622965090464,0.68981495834304574,0.64964289628551053,0.70629723786259579 +0.64275927120660503,0.45213524068822242,0.46112362199346613,0.44532933985465306,0.32805646219640383,0.52507841205806427,0.47162436068174485,0.43804489527247037,0.48026052370551087,0.57964178427937285 +0.65225035445757951,0.73716425299061927,0.54911970181274139,0.60907635823241235,0.54642155612236731,0.70302692588301907,0.74254780760383676,0.7893763550964592,0.67811397617333213,0.66212294300202879 +0.057107461988585184,0.14174679658027151,0.040552317368574314,0.065897037537078679,0.096932060114348906,0.11176285814145423,0.069032551225981897,0.10829414354521633,0.1478783806378558,0.18069157141145026 +0.071302052851573094,0.43408439352060801,0.092959645058735024,0.17622037805268254,0.13134542151238576,0.65527332943747441,0.59958400696632252,0.6710220679233283,0.7049914601666345,0.62543382708099426 +0.50634397393200681,0.67603517536189983,0.52832631717319534,0.50956226678681538,0.68612085600033956,0.76978821100783001,0.85372666126931307,0.80283112495089282,0.86014720160164138,0.77608119437354062 +0.090794670380711429,0.072546718147359024,0.062861771119068738,0.10525153772324181,0.071967038820739071,0.20487694229814812,0.14745028046309722,0.15603188911337162,0.17977521513240119,0.17654640434194069 +0.29556129416796462,0.32027810669388057,0.20483995744144201,0.56427731775329315,0.39437083076336632,0.040880914282761374,0.056679397908746751,0.056101188616603181,0.10164044427802651,0.069254076894148475 +0.99251659832260564,0.99397667995070993,0.99491522685274436,0.99218390867462336,0.98846158137893259,0.99399127441573842,0.995,0.99478234452543735,0.995,0.995 +0.5632787101189789,0.64025903100263992,0.49753101749229256,0.54470112393028014,0.57447274992591546,0.79203461643191408,0.75735462174633938,0.83510475940419626,0.8669797353504618,0.80228881552465592 +0.16046618127590628,0.17360905921669395,0.24799817558960563,0.24472641685861674,0.24648986788816324,0.0215530033165219,0.034391848574168979,0.024380759947244278,0.014173945557568624,0.059662378247603259 +0.78012721191546119,0.83381630640359861,0.91429269660146995,0.79720222562900145,0.84743195379268621,0.47258565327501911,0.54699415326467626,0.52311438097967722,0.51437484085909069,0.54786860113381319 +0.50467440627615479,0.46015926476684477,0.3039565842191263,0.59455644458648571,0.35029970252071807,0.61631184248835558,0.65475404032622153,0.67396384853054414,0.67344986254465411,0.65554237199830512 +0.81833882366942734,0.7443091496534131,0.80898642193641823,0.87597218729205606,0.86403026056358789,0.60815868966164799,0.56911406517610752,0.4478655677230573,0.50394669317756757,0.47915194297093011 +0.14959811262146072,0.1261145577009376,0.27451431247755409,0.23047363883234168,0.37666035935399367,0.18520514233387703,0.19778120404226379,0.13839055676363199,0.2060049175925146,0.3792522567964649 +0.38094734779891914,0.44812242218176934,0.36522335847257903,0.44750975220813516,0.34228195875766998,0.61254295919206703,0.60183067686739178,0.6173375117650699,0.70079689638805176,0.69748641320620264 +0.30777536622699131,0.072621776169407348,0.075192132004312351,0.17752687251778032,0.057112330192476052,0.037456299905907292,0.016790806112122143,0.068971553730088508,0.086082516674659104,0.015973518398832896 +0.79777076454713058,0.77714495125109706,0.8164284273225284,0.69167121101053963,0.63039609350380221,0.35048661913606638,0.49941080893040635,0.43446480811690114,0.62493007964803593,0.51871785454568409 +0.27765050953300774,0.32793292388669559,0.35886145950644555,0.35080299884430433,0.38059380292543454,0.5857856349612105,0.60325314066721858,0.55973700174945296,0.57623870504903452,0.69446577425696487 +0.3884393529036998,0.50026826115208678,0.33782090383465724,0.30237752696848874,0.44054442757624312,0.33049516720348371,0.23568152051303132,0.3557034941331978,0.37176614490454341,0.21884626461542772 +0.63898946243908972,0.34978624261566738,0.41009479700005791,0.43508284739800862,0.37814676199923514,0.0050000000000000001,0.15947338929982607,0.012802803452369255,0.025378645659666688,0.0050000000000000001 +0.44807771297527044,0.41555077864905055,0.47101295800530407,0.58349659797386111,0.57000387102016115,0.45387041408685125,0.34855360063375274,0.39204662156407943,0.45612613452249295,0.44365142463357299 +0.30017040692023111,0.31078789322055322,0.27406674574013323,0.21368670047377808,0.32074238065979799,0.63729867708752597,0.61873486402327904,0.66903930806438106,0.76512132454080906,0.65249611609032998 +0.91050788736151156,0.89335038725402338,0.93895007323589219,0.89129086394677071,0.89177416506571827,0.7493285210512064,0.81960276621975292,0.78398763286531348,0.81670872555695762,0.7563891795289186 +0.90967819579834708,0.9102751739846926,0.8948933984793177,0.88116775036905115,0.91485470751648856,0.67681860391166637,0.68801067731692078,0.59041175231686616,0.75957859799381766,0.80152572676888068 +0.29652538359097402,0.39207584605901724,0.36974173129420052,0.26171715577948385,0.52388091621105515,0.033273709734212634,0.10992377533694575,0.22692413578625381,0.10648579921690601,0.17658642897732268 +0.89090294948881255,0.90364314921315869,0.89724772181943191,0.90362870684474816,0.86173434086958145,0.97847664737490914,0.97345520698580867,0.97368207483667857,0.98617991883655964,0.96763543717678635 +0.92465859936356409,0.9391192306938958,0.90791804241597762,0.88624728555441057,0.93720752393709561,0.68364605415262836,0.81102468070457068,0.76644177178968143,0.86487651124479448,0.67755864505306462 +0.89683060452294572,0.88381235537234848,0.89896658345241232,0.92896628388552061,0.90893539777606835,0.89003446823334476,0.92582171727553075,0.88680635657509943,0.90673628679359441,0.89129026597947014 +0.36277665615982158,0.39632709822035606,0.37668031136854796,0.69524768882547106,0.37369757008855486,0.47359521253383774,0.4109397852735146,0.46279855756438415,0.70970172909437257,0.43311383572290785 +0.40016313533653625,0.33713117087609457,0.24640370233101344,0.35354626140906764,0.43282668615575082,0.056817907578087898,0.18452684787917584,0.072649987268968652,0.10196189352428406,0.10053552451427894 +0.91477418827404011,0.92663813914986393,0.92545971661456017,0.88517653549205666,0.89130937241133434,0.77907599569879848,0.7721115555905218,0.83365961557137114,0.78025752425309647,0.78924852449562755 +0.82349481805703584,0.82093296493985046,0.75434043104177761,0.81230993042117294,0.71135624349698934,0.84091633939532806,0.83864241928676408,0.82197879892191206,0.76687660694005366,0.79163323555257525 +0.2999536218944181,0.31262836241512937,0.33640537384781377,0.35880753395031484,0.17770529378322597,0.57341401322628238,0.65148336175479638,0.69212841053376506,0.63008884308510194,0.62405839542043151 +0.67932258019946024,0.65496682884986202,0.58688100156723344,0.5446395690960335,0.64490531079354407,0.77233971675740953,0.73793629699502605,0.77026615329668324,0.74792020246968116,0.67215947099611739 +0.16164929982805476,0.21317837122479094,0.20234555107891222,0.26463499080273789,0.32105720622348954,0.36013344852836149,0.62319599985494034,0.39413609131588812,0.42747756969765904,0.56476507693878242 +0.55217517158750096,0.43458119142451457,0.52290120176621668,0.57554160841391266,0.72094285886850695,0.2382388271216821,0.26125216818764352,0.28059592816862722,0.27535069690202818,0.3186715641932133 +0.55977963181250345,0.57581198346451701,0.63620565229211667,0.61876936894259194,0.62241724060731696,0.19146355162957368,0.68056194539530779,0.29910290622502034,0.21077428103308771,0.32509868647321483 +0.81191424058926587,0.6972142071754166,0.686062109685732,0.8297985723765966,0.77103313922997962,0.88323430120362123,0.85608277437858504,0.84968042667605204,0.8518768694193497,0.86127293031312724 +0.30363484631208104,0.12950915677357272,0.43818702551652799,0.11679053408443762,0.25145396587322966,0.48799046766362175,0.50472993645234943,0.41727010844624768,0.44046129335765838,0.39730673158192287 +0.8768340984951275,0.93559068566536596,0.84552992592215781,0.87754516387939629,0.88456643218523046,0.86994827524176066,0.8347949545422968,0.81951211669365231,0.75859515464980576,0.87321611648075459 +0.78626319975936854,0.80056640805559565,0.81448273549903494,0.76088909714598629,0.7506487525824872,0.26488589154906106,0.17181320741656891,0.20523833975312888,0.31962936758646177,0.29596346497419701 +0.26531929544037802,0.33796259199153023,0.10027760142112019,0.11989358029678293,0.086062418209629954,0.034832953155282884,0.017153737397175628,0.050888749974555933,0.0094861074758326031,0.040320552332568788 +0.042462280206541303,0.37379138407414103,0.0481521564361264,0.036309000133778857,0.10242031575763461,0.13518651676714216,0.070517625688816615,0.069349640951267666,0.021371117938552307,0.031722848565559889 +0.057594965154906141,0.05330239862088075,0.068258873739986931,0.082922222121859845,0.18554849494831333,0.16392336596619078,0.10620401214692596,0.11125725755119542,0.24258266002289536,0.10450766971917683 +0.88981592178961555,0.90123770773060752,0.8238694617466471,0.83858132947352049,0.83279349075746056,0.14403591290466267,0.072558821790161709,0.03490961584612727,0.14895959090791416,0.076992582384272562 +0.62185827244912373,0.63348686185781578,0.71472071108291435,0.69463187697692375,0.71772062897798161,0.72234867882797982,0.73422087452490348,0.71416499020414936,0.74643523324629735,0.7756111722264849 +0.49959167890250789,0.44849832353065822,0.41646964705432932,0.57105219914228522,0.45783091851626601,0.41027260755072525,0.23671046542586355,0.14960918805446244,0.2316945829370578,0.3674531901197069 +0.59881479979490715,0.66550728198489773,0.66123197550768631,0.77894192680832375,0.55081519673694745,0.30362348139170026,0.24774286194588563,0.30705089532421359,0.33611143103917451,0.34674700230243916 +0.71841668954843918,0.68430345479282173,0.73654645759961102,0.76095395165611479,0.7696450234216119,0.7088604715245268,0.77414267419953275,0.93901308384373827,0.75195980045827526,0.80160982001688663 +0.383565605836518,0.4919275986903815,0.4308483348868335,0.63448382014757687,0.60870597316534059,0.60094731542630853,0.47332831323728952,0.43631916856975417,0.45698475264362148,0.60610313972574459 +0.24421660939051892,0.079353785346037736,0.1530623957223794,0.193265957204864,0.061545712786036919,0.2114844941825198,0.075600343901905342,0.10932482875069452,0.079331185756026795,0.26629975854303223 +0.93567908287638812,0.94728650242904244,0.93053721336763418,0.96529482080949469,0.9181572096131192,0.20691529658507213,0.1711828602419766,0.42222608966403796,0.33223781382548956,0.22516478857142469 +0.96544535215229899,0.94797024238504513,0.95336718871839365,0.92922784676192394,0.93539412893004781,0.91654075126279233,0.86205334562691127,0.86459315181127017,0.8518653028004266,0.88691485425805827 +0.12681898507146339,0.028964933037068798,0.11113148441655407,0.033362326124925193,0.064377430273461489,0.5349917535495472,0.31595880052191572,0.30474110422074252,0.42281303289928629,0.36067016320885437 +0.25198450559386654,0.34576627696515361,0.31152283915435341,0.32176754812826758,0.21944839382195475,0.47747227791114755,0.52738690152182177,0.49738950628670875,0.50096280258730985,0.42956920774304452 +0.7928880855228424,0.8285358869179551,0.91970241800299002,0.81787994908517514,0.85823864417033491,0.97041669240569695,0.96367552896844222,0.95105250828782117,0.9580203590739893,0.96050840753013289 +0.88893284209316814,0.91634349370723678,0.87771104366401387,0.93828979376120536,0.86591192302875419,0.85911294203832966,0.85496276241610047,0.84828112172544223,0.79511591649497282,0.84285634951083233 +0.70293381278274358,0.74208943915436487,0.72532231445074569,0.77148156132897761,0.67715759339625592,0.92477108023012144,0.77264670081785347,0.81087835758807447,0.87210865554515449,0.86461243210941752 +0.86277508639431133,0.81567585698211875,0.86305509545490344,0.88302226740051215,0.75851700050406579,0.72857784570077899,0.77624988721799482,0.69763449448509673,0.70076254251761894,0.59755139125627288 +0.1271427607248814,0.14736139125307796,0.45912076285458248,0.15639546627063061,0.099095533980297495,0.14326834052918264,0.14861872544862104,0.12294851962361308,0.092794363357833337,0.078233237931280453 +0.21854100763775652,0.21431230843882648,0.26545166407595855,0.23218403218198169,0.22931067264290134,0.33582353897509498,0.37314611257170582,0.27989931605407481,0.26383411153802183,0.36135720813763605 +0.69575433833490963,0.69113905608537229,0.73955894945538114,0.79496711699175071,0.73787018298753071,0.39308500036713878,0.57886797908576981,0.42271193841588839,0.29845900859800578,0.40625315826037156 +0.10034843046962338,0.22085757993045818,0.16687451410690057,0.27358681280748443,0.31583277831669332,0.26818000516505447,0.27845020531095077,0.16798951241071997,0.17152420608909524,0.33888634093455361 +0.55692899415202857,0.71185314937610689,0.49434112469316471,0.52988789728260532,0.55062187361181625,0.93484513586735418,0.94029195958863987,0.93943460544686808,0.94093555983271493,0.92609559549599951 +0.3022310493096747,0.56640532813616895,0.55382345095858798,0.40888661154895267,0.51508631624164969,0.2514052000187853,0.37876630484243168,0.26858685494517442,0.3911128484469395,0.49486067474936146 +0.073624530739078597,0.11158477110439755,0.023219179915040952,0.15229154090048513,0.18492282749503547,0.22172540557222065,0.27874021916068603,0.21917661602493005,0.26636503936606926,0.19800004674471589 +0.9863288745499772,0.97665465905446536,0.97130693789221345,0.97608063873484707,0.97791934412088222,0.9880891062493804,0.9865579706092733,0.99133923827320292,0.98805681566590398,0.98967587071819185 +0.73122667838077082,0.58629402928636232,0.58239969550049708,0.70124996823141883,0.66753470207913446,0.46386222171713665,0.68071913943276385,0.55874201635015086,0.48473777403705787,0.50086348710465245 +0.010839718271197674,0.014297154470123748,0.0055489284277526838,0.02478520511068423,0.018443025444876721,0.014302892872374903,0.053802051726970432,0.083615852665397283,0.035887393198218168,0.059692921495306722 +0.76086730130277425,0.76682558577157955,0.74394344681058522,0.74652475715265121,0.78433267524814609,0.60402952172444002,0.48036811521160461,0.55834739367128239,0.52965994036639974,0.46916611262713614 +0.32906977013816396,0.35162783999112723,0.32318417858914827,0.28529608619283386,0.52539866286679127,0.13434366064030479,0.18866094292025704,0.15340498424485088,0.38234790330170887,0.42032244233996763 +0.01457023584184225,0.012563581025470484,0.045144217583592772,0.036126639839503885,0.043479529238547948,0.0053048631816735702,0.016462690924536796,0.0050000000000000001,0.0056526777043571837,0.0050000000000000001 +0.87323078566123091,0.84161117064649482,0.80837290335329581,0.82020809626555358,0.8184884616930439,0.051576762489284972,0.063195500901210455,0.016257470153514655,0.040260250825676941,0.025348862720430076 +0.61216627525994838,0.52840390449273333,0.54214118348318063,0.49064314263523578,0.64969281249795752,0.33188320123008785,0.32083859361592104,0.21319211713853864,0.54096270867739715,0.24934508927981869 +0.72561868153243614,0.71633321218541379,0.75947980509953994,0.75224998770863238,0.78820196769083273,0.60740543974679695,0.68243334858561511,0.65406801350763688,0.66055699306889104,0.59150387832778328 +0.66591562119239267,0.7458941430959336,0.71824760679737221,0.74936086239176314,0.67903946500154788,0.26489795939415228,0.26416767094634008,0.34424922449398165,0.23497662958107485,0.24838834707043639 +0.6524306940314577,0.52006046680617102,0.53518794509000078,0.54022853306378149,0.56746827749884554,0.57174583539017343,0.58027009424404086,0.52218931747483976,0.6021714617672822,0.53395194464246676 +0.87851357161394406,0.92313588314572437,0.89483920324709398,0.8868423753010497,0.87546647104317499,0.96615499418111517,0.97090305355958639,0.98140522753236792,0.9825061912706492,0.96867291032684966 +0.25488213689832562,0.18266524319188371,0.2018386288837124,0.27943620018777882,0.34524587649503102,0.55014697634032839,0.41616501737735401,0.48747179974452615,0.51679192928713702,0.57987378645338894 +0.50628267991952147,0.3486732677265566,0.50861265379353404,0.47069418427418042,0.45849424487096335,0.5364123412582551,0.48285867451340925,0.58999416281585404,0.51154772241716251,0.52139085545786612 +0.76326261786419591,0.8727585112501326,0.74949850814300101,0.77814772372948382,0.72926951482076663,0.91779897056402726,0.89743528034886477,0.93856191387748389,0.90403611029613873,0.93109491156064039 +0.29057778844822324,0.21866776185925679,0.34640720070456454,0.36448573580128407,0.6521346128138219,0.74959478297386761,0.79964641135301773,0.69814729443168799,0.82185943305375342,0.76847328213625055 +0.88633099800120574,0.74631493815103989,0.77819376098340753,0.69160439199185531,0.76509821091894459,0.48939239242463395,0.6288994519563833,0.54823482988285743,0.54293010165565558,0.45625555215519942 +0.49151846418037382,0.67491378690464998,0.41276559935067958,0.54723405130789526,0.55682607254129723,0.60273105706437291,0.78145124894217033,0.4441805354144901,0.46988682952360306,0.66738180737592878 +0.054142188341161246,0.0050000000000000001,0.0050000000000000001,0.0050000000000000001,0.022801535407789279,0.045073968038204848,0.087471858452780965,0.080275005107986741,0.044192523142564846,0.081945463287419612 +0.24453132316144699,0.32978889337391937,0.36627051336108973,0.22217862479738515,0.42384486357332352,0.54011879579047584,0.52554316408350088,0.44851515363552708,0.52410476791555949,0.5167221885931208 +0.15406168110294316,0.21608115485287838,0.1115690531150981,0.13487752244692092,0.063038723805229513,0.24218974259566101,0.10219118391979348,0.28212534965132796,0.35647550781141324,0.50703327744849935 +0.30381706522172358,0.24248955197982075,0.2721653953485702,0.27215022206656159,0.32122986935428699,0.29798891764949487,0.21138980929391105,0.36427683130023336,0.24702791901655069,0.35019760156865531 +0.22450160210549508,0.18600995148881966,0.37927112812758668,0.11896432252252304,0.23570044894586845,0.70247981618740196,0.67363343798205833,0.68102104964782129,0.78734522216836345,0.65292238243273149 +0.096396898992609392,0.19191668377607746,0.17928003441193779,0.18104085049709012,0.33995033803512664,0.24426682342892092,0.35649796362850172,0.16225880451384678,0.16517732277862462,0.46375324568362042 +0.027699228693294664,0.17384036074509562,0.15026411562576658,0.11435632404755638,0.15303556944127888,0.10788954465534389,0.29576428126893417,0.12775395609788409,0.031024641153644839,0.013600670237802384 +0.51705261148246118,0.50369987360318191,0.31224562364514363,0.32909610951901758,0.27285619263421268,0.23635238278075649,0.13445572214551071,0.16457904290292152,0.19696971119265677,0.23509165682481198 +0.20223799221139172,0.016118933650441827,0.013532943179607806,0.18202829433722123,0.01750278481632505,0.28796243629767981,0.49825656591565348,0.35017643144238109,0.3837132245244016,0.52662790738395371 +0.58556737570535899,0.61978820196236262,0.53185199332074196,0.54471673406078391,0.57412479844060593,0.32298930067918619,0.42594928990001935,0.3975837481848451,0.30076925535104637,0.40220614787540598 +0.96381293080101882,0.96420170404598116,0.95589638690579704,0.95853551066828913,0.95477383278192973,0.98744590437853663,0.98379443484008289,0.99072975726447954,0.99154756063943683,0.98466940040815576 +0.92084109432449601,0.91498943782061426,0.89863581684766469,0.90218632391769571,0.92941537286968967,0.94991580533677733,0.96628459714701398,0.91783905922783626,0.93773741673793687,0.94186273225931494 +0.74961110393367347,0.72012414361233379,0.72539928337209414,0.69632194328005026,0.65074502650531652,0.87187478106351746,0.81396853071054753,0.8440142127510557,0.84135951832285394,0.84937427178373781 +0.19141939963389953,0.50618927602772579,0.35573948841193048,0.34471800507163008,0.25236717032385547,0.3350550094910465,0.28545740913250917,0.22034643622465055,0.21904706643545629,0.32178349091555347 +0.94926005095198507,0.9146679644763851,0.92254703716024844,0.91174424832569545,0.90547547608729562,0.89917202256037054,0.89568694619810341,0.85038360065663454,0.86806236478150089,0.86169885055277695 +0.42207846691141238,0.3942938001418973,0.39124698829255289,0.32460296401405131,0.50060348535771482,0.46060531635885205,0.6817679487576207,0.47016169611015413,0.44122730716480985,0.54976202643592753 +0.6761941512705294,0.55689732919563428,0.56645982558256813,0.64568967153900014,0.69543600009637485,0.85181899808230099,0.72906408147536683,0.76077859816722992,0.74578927786205407,0.72022480916347842 +0.56410436595430569,0.38576752375229495,0.29495857926668079,0.28288898701430731,0.28044018146465977,0.54146487070829519,0.45803221684764217,0.46241910787648599,0.54022313808672973,0.44684792557382125 +0.66044868163966108,0.56220774466055334,0.5448289574997025,0.61759976114262605,0.57908587108249621,0.41272889016545555,0.50360545600415207,0.51967976117157333,0.49296255482477147,0.40569110782235118 +0.86480781938724705,0.82702816391246681,0.81549299732432079,0.86494374452740153,0.81206028230371263,0.76960036784293528,0.79112715148948487,0.83347185704041538,0.79905126881203015,0.73631820772424805 +0.24684793779965641,0.079136676067727646,0.12070946980384936,0.11070236648084442,0.16412681280053892,0.39152054136502779,0.34091794208507376,0.38808581858757174,0.49219531976268638,0.41824642595020289 +0.4241143255852271,0.571213864634045,0.47594484811998017,0.51587652220041447,0.48227046660031225,0.61091987203690001,0.51333768924814627,0.48923682261374801,0.64523046600515666,0.61508616394712368 +0.61355374271554508,0.53845368805923433,0.47717808085144542,0.4686403734667699,0.41144621549756444,0.36770140283624908,0.49187795919715449,0.25349681914668087,0.50617008181870893,0.64568893905379521 +0.85179120752234883,0.7472063594905145,0.8285666570591208,0.81475215367390152,0.76918635508627098,0.66380402029608043,0.58521957401535318,0.70145939374924238,0.57995987506001101,0.62083790599717537 +0.30012755751868236,0.36875000954023829,0.39864267289522304,0.35232999004074661,0.3853974569065054,0.13721372422879358,0.1361019333999211,0.18281220635981932,0.087552165990936431,0.090690538490897782 +0.36426660553976276,0.28257082749042162,0.2457695878983992,0.23555116969510509,0.37900168952183111,0.42264142815838723,0.3367690069426349,0.38746355034527591,0.33177914694534016,0.50806157584884182 +0.82540254248085043,0.59907956267124773,0.71514527287217344,0.77649438878870014,0.62711507893982099,0.70182823642971526,0.75924427792778659,0.78348746077971909,0.79052472909096982,0.72844281906145159 +0.18503788834082546,0.16260429259273901,0.3125900190498252,0.22865258020465801,0.20603310727165669,0.37098175458959559,0.50460054472205207,0.37221743838745425,0.33658432049560683,0.41412497355486433 +0.43940356856656426,0.39420636577415491,0.31590592439170362,0.32651124344556937,0.27057211255305902,0.015619065117799119,0.010786451777685904,0.08840318510193268,0.14850893910625723,0.017559632979110222 +0.072297696601742567,0.073473870899769617,0.1318872605043071,0.081353509187473916,0.13668886831147392,0.54089719211333342,0.21241064983769892,0.76476798256043743,0.27221827712492541,0.33962039274047451 +0.4927522111735223,0.32545527929324081,0.24137606381555604,0.41484144629794339,0.28338261283352473,0.21385902151815234,0.1686860294721621,0.15956677458598961,0.2591929086775101,0.17896573929466014 +0.52788883751030546,0.44733278788044217,0.40190661602537348,0.48939736545435175,0.77513408652156968,0.16332344271359706,0.14789715464576852,0.16899728096905825,0.335521630913721,0.29187819894287226 +0.58395176718611874,0.49071845892467558,0.48998616475728363,0.61040135854272881,0.53045657536131263,0.54253716746461489,0.58824313731747502,0.59471419328474262,0.48894967618980467,0.71841006874455626 +0.45542098020442912,0.41206313125440097,0.47909682986210145,0.48237547211465459,0.42868776820250931,0.23090090011829117,0.21034249479999412,0.236089094745699,0.17451228600112439,0.45555899376631803 +0.23325643182159128,0.15509948538966239,0.15211296928465134,0.27258130782866374,0.11606354315882383,0.23100363419508169,0.27934766953695078,0.2965378703956999,0.18192177775200158,0.34453370267874872 +0.85118902053278833,0.80083346806349565,0.83011652008280423,0.84775113020440784,0.90174483493318913,0.84678793229976912,0.85580946199478802,0.82713782947393422,0.83226398608530205,0.87385475085465414 +0.063828944271393739,0.16590039289440695,0.17532451308216618,0.13276977345231722,0.27699299398228039,0.089767749101164557,0.16526370021166015,0.086584598029739085,0.1745993849763246,0.080548849975465797 +0.79915222521425755,0.8111879534262636,0.83110402789315474,0.81632783691747424,0.75470512456376526,0.91626762333907275,0.93014887560274517,0.91894781522568403,0.93671566559350183,0.92668489643255314 +0.80155813122326847,0.84326013256212939,0.81505331027437311,0.79140291377552208,0.792218113987468,0.35020191650255883,0.27785869213403647,0.39858179676230265,0.30519569639000499,0.30303098776494553 +0.29116018244056607,0.09999979104032608,0.19246557002771331,0.26766072926694062,0.22175703229732435,0.34872131395968908,0.53484374182880789,0.36923606463824654,0.67558161707711051,0.31830908361007826 +0.7406934375975931,0.87891216020215457,0.83722097813733187,0.72839556078542489,0.75952374227926556,0.36852545067086151,0.48841216738219395,0.57750168596976281,0.67778395456843654,0.57917955928132714 +0.44488330888647898,0.44707083437242645,0.49274313318892393,0.47964503438561268,0.4526089220016738,0.18727672277601132,0.36505099580972722,0.31381918009720189,0.24592178329476666,0.28842560449266297 +0.29401943861400492,0.35733842136687888,0.24581800747546878,0.40008813477470739,0.39132705944939739,0.52733539245673411,0.44660272853798333,0.3508376314130176,0.38733473853790423,0.41691604928928594 +0.048701591932044153,0.030872180563174256,0.067164450039862933,0.037340488896015975,0.036893224547393563,0.16090247299872085,0.2143135800433868,0.2484952101076538,0.20557046562317416,0.3037615030480123 +0.55969394586543708,0.52679089948651336,0.48134868769557249,0.50380988346296363,0.41394764583674437,0.44422497731284349,0.39184883862617648,0.44996651119436237,0.39699014698271851,0.53390542484703407 +0.26100429612294107,0.40836946837953469,0.34473077303846678,0.36933660405338997,0.25100176790147588,0.053699859796333668,0.0070653531875094263,0.036644067178722428,0.087572779302726361,0.20689393280191004 +0.82804682022204235,0.82129184741642614,0.84498872669063751,0.82776443057809312,0.9045403200725477,0.83086157575598252,0.89189327854545919,0.87722634841337976,0.87114828408811418,0.85820285658700612 +0.48175035220563101,0.33114083847613407,0.2483189676131638,0.48074886857648413,0.21573434301536165,0.35248716254136814,0.40300525227212547,0.20457945254748344,0.29998202898423587,0.32929825453902939 +0.17333342129916218,0.24058227383648562,0.14746768094483537,0.25698011866189097,0.34443194823689138,0.10791835727287308,0.058182747947293792,0.035925102740302653,0.036249708355180876,0.064941856398954362 +0.092369612938437706,0.062968102662134345,0.043216189049426285,0.014584241347629971,0.18542665502173522,0.44925164084998059,0.17062030397938294,0.23589713385445593,0.37553331567324011,0.22235320587060969 +0.59273744808725937,0.49066345117171317,0.4113097696972563,0.46821514875046044,0.41605428556795399,0.21556666182005413,0.13525412793388386,0.27438644980430127,0.23588569331332637,0.32562750819488784 +0.1507654077182683,0.13470587701886694,0.33857442819862948,0.082121138140800382,0.063380930310822425,0.16868968956988034,0.14474223021534982,0.10642219943111617,0.16428716093651691,0.08141448153765779 +0.83941386391529571,0.77772155674755949,0.8217148509866028,0.88020442562991907,0.89228280910173563,0.88388996667344277,0.89730315856285525,0.88575069673242202,0.88486386105068182,0.89749607400152964 +0.2351920583226752,0.44531286551500771,0.39375251237652475,0.3614821257360773,0.27030246364302457,0.2640532391669741,0.25685208445066143,0.24263159956899988,0.24043928613537507,0.44601930186036143 +0.2512516787590664,0.26583435505745467,0.27421851668623731,0.3384456083586006,0.40602633691742274,0.41466799131012688,0.47675926776719324,0.46256311374600123,0.35278151914826883,0.53447389844222859 +0.86905614198271275,0.82407675977446426,0.85134878099778888,0.85797091320272756,0.83093783791991216,0.82659067920757745,0.86685016404953052,0.86408365881651839,0.82855427233152357,0.82888577648554262 +0.48941369489639741,0.59782753980834769,0.61875871001393312,0.53730897823697821,0.66469283253536227,0.85184657017816079,0.75321520175202239,0.75700199083075348,0.70896762996562335,0.72607017986592393 +0.03381634539218914,0.080049670039451709,0.014115294819940283,0.033633672195728881,0.04858757890179724,0.1854204367555275,0.20739932128345245,0.15992595106946056,0.28536833103863024,0.13112421767437638 +0.02871947985866985,0.046832772291972982,0.13137259558426023,0.11886449067970567,0.030741722643151954,0.17206630416331536,0.11269084058586351,0.085974326386357547,0.085338818287718027,0.10612044783193472 +0.86874080348910176,0.86850630890693714,0.87434368886169223,0.85249437901074288,0.86660279773058568,0.83027202202355754,0.82626680194516022,0.80189737569889386,0.81592463652486291,0.88308228124514376 +0.77748420532368723,0.7573611770349038,0.85814071199273911,0.809862048452481,0.87337310393922207,0.51698618798400231,0.54416982908151024,0.67778947463375161,0.54817478204495185,0.61929628081270272 +0.01872398031933864,0.030965016951095381,0.012521028605997998,0.014469491521604753,0.03242682924611498,0.16686981890234831,0.27992967425962423,0.25167369344854296,0.15543264072039853,0.20060674517299648 +0.02277433835246967,0.073015275149381886,0.14478384001996147,0.059560815017912036,0.035216152056828126,0.058494807948600014,0.12853383322363532,0.13588612535387073,0.33683228827431189,0.21028210947407056 +0.25339974425287792,0.32975141369388783,0.25660612186766718,0.22004360225401443,0.25836110443925031,0.16869556406164271,0.20015493451501842,0.099032979138436367,0.079114856343957624,0.26146827844786935 +0.12172601660255356,0.34569427362294247,0.098188090400079836,0.20161439207732346,0.19100646607694832,0.18103313088068446,0.12809123462648875,0.13148519475363002,0.091099848999882826,0.14814032168943209 +0.53093767271649916,0.55934454585076199,0.65660143652348468,0.55808305865502805,0.69928124206489484,0.43165484970086387,0.39765062209335367,0.51109663580427855,0.50106884216074832,0.42721818832797143 +0.24785819023034694,0.18447317279061004,0.15580300139846037,0.15291301507387073,0.15368916405714811,0.21391387362382946,0.16298848183942705,0.075873167108520045,0.43091385977459273,0.13418995591928984 +0.72031560669862005,0.71067209271131593,0.67024589623906317,0.66629550597280862,0.61700682496302539,0.72869127787998411,0.60808715471648411,0.63219322302029202,0.51819208762026348,0.65350422004121045 +0.40818722928188711,0.43534841595101303,0.57698728717514158,0.49651621768134657,0.52568016407894858,0.2144094420655222,0.35486834062612904,0.32422569257323985,0.23735869812663235,0.37004813706153328 +0.39120154808760699,0.15186769017601154,0.14965774750454119,0.18990128094447467,0.12371984063066363,0.34600735813728833,0.52009943829034411,0.26045977513422736,0.2855722454551185,0.33287329136510713 +0.33861057943913009,0.4800143420870886,0.30980467158952185,0.36600720367278239,0.30090381056652804,0.37166270570014859,0.41614412757917474,0.26306990990997769,0.38675306810182741,0.27039850896108419 +0.30585785862444315,0.23898360008025132,0.31340785438078833,0.21981940165279057,0.20428009875468567,0.74989709522923897,0.73147216075448784,0.83195901979342368,0.74472160029108148,0.66728143041836696 +0.68671777393677802,0.62356604085652845,0.64842683207825469,0.59314075767178842,0.6955248145677575,0.8214467970828927,0.78836329546174388,0.81814965142984231,0.73999655598890479,0.77365787976304445 +0.045953385280050885,0.25841466910788335,0.26021313734236651,0.059002884634546435,0.099062863882871915,0.33948464147397639,0.16953995617223633,0.33797065322869779,0.24133836533292713,0.16234620599426075 +0.14568188218390676,0.12134051384055813,0.19724421118735941,0.17046033564839241,0.15712606595480572,0.17801418024465154,0.094287201558480693,0.060640450130458393,0.03602272606804964,0.18858465741505537 +0.45022584558937551,0.095624491426868991,0.11536088146386506,0.12567938838038412,0.23107545266976187,0.03675487669534977,0.1606801295711261,0.11920540218125858,0.064945964288208008,0.36181733969715701 +0.22485897464981885,0.37349476941745052,0.43750650979927863,0.2967491714807734,0.41112239207723356,0.062380119488816138,0.18738384908647904,0.076002157729826048,0.09683519133251034,0.17093444583588935 +0.63046987976795554,0.60305549405165748,0.73587631821282673,0.84466011644689609,0.61802321826689655,0.8476249302911969,0.8284936219279122,0.87957524039665391,0.87290708473300738,0.86862853894125869 +0.97445921261056734,0.95351322126224658,0.9398773720895317,0.93245489787658742,0.94777506336685313,0.98408095000194362,0.97903008086722321,0.98051426696473709,0.9764883966708926,0.9838152270240148 +0.18200739889460826,0.10275657827151802,0.094569053471795006,0.16149335648515939,0.10303407811444115,0.3612566925876336,0.41167686195695019,0.49932564745540731,0.3821488285029796,0.39144429619773513 +0.20732221169423526,0.27895636120229472,0.27378860671888561,0.16812513352488828,0.2175803871650771,0.5504618910199488,0.42399612636654782,0.44130733361817076,0.43407734457287139,0.47408729893504697 +0.29097284845100879,0.37053385682520712,0.13412002849509741,0.33217090528342275,0.17000348729198528,0.15631465255865584,0.13450974164880614,0.13118091228535206,0.058064747805483166,0.054491646093092455 +0.48254524504898821,0.35668399857241018,0.35873907999485077,0.49731341985170741,0.23850314671290629,0.36158044726471694,0.34260592315695559,0.4300092575431349,0.62512220835196541,0.34083046772866832 +0.90571770227013682,0.85835410209255514,0.86174645114805748,0.85989309006253456,0.86591062913065975,0.75540297731640238,0.81497810574364227,0.86410485571831663,0.77704989738412578,0.74940015355240996 +0.27282916307471261,0.36160834712791534,0.30977428049664402,0.36616524387500515,0.45163082741783089,0.13516272392008249,0.1090521513542704,0.13810890456080227,0.15313013221021504,0.24537816699012693 +0.34382968827411076,0.30176154416404133,0.46702981126145526,0.41357422163128099,0.39736163764610166,0.088405257585699504,0.20490818584222004,0.25282500506728445,0.089412873698173828,0.17680392033071901 +0.95103449238759463,0.92016615640021948,0.92587578322853958,0.92935263927210188,0.93777448896434201,0.98221343036856479,0.98787198934586673,0.98628819608710661,0.98659723668241828,0.97950450002098433 +0.76902731699944593,0.83975255835684282,0.784089891269099,0.79934926904388104,0.88565264156203871,0.87242277435142723,0.84839101342367229,0.82628894588560153,0.87667191275976775,0.83773230385849518 +0.058518711095219889,0.16599789724569503,0.034949059045184389,0.033580802642982466,0.13361531760893564,0.089880019280834861,0.019654714997168921,0.023465835169200068,0.010360409010909975,0.08369325517561188 +0.8937573992927268,0.82474329150863279,0.8063839293026771,0.8380813384719592,0.78743874703649785,0.84419505725963284,0.81127373370690581,0.81710298286633853,0.82900959203833979,0.81944941802066107 +0.89126015682191029,0.852436914021375,0.88328431689296072,0.84821441021630761,0.83152895912643787,0.86141040411893477,0.85279988191904721,0.86314702456001391,0.81558996587409016,0.87500566101515842 +0.18956680007054172,0.35778508117073493,0.20577250988572493,0.28306252337643378,0.21089999782271329,0.4250977976189475,0.50349562798510306,0.42742704917327645,0.45887182877049859,0.38146124579361873 +0.18905778225423986,0.23917670125957169,0.20667573608807877,0.18643661731039801,0.20919827939360985,0.5600194445287332,0.62831101773190068,0.51384761571534887,0.51386428918340221,0.51274757672217652 +0.61356702303695987,0.59421554158325129,0.60563469372573109,0.62258486481732445,0.58464355973410265,0.26786505352356937,0.11076891285484503,0.15543711543433125,0.13270272689988638,0.10312683015946161 +0.2579448902587711,0.19702366608544858,0.28806298793643204,0.20123296693782922,0.17749919006019543,0.62516597224748449,0.57166915232664772,0.57866989725152806,0.52377934052492447,0.56459217020892405 +0.85559300912276703,0.82331756668281098,0.85140703860087541,0.88235497541608443,0.82566333687281523,0.96475489481234922,0.9698686937044747,0.97225754612008108,0.96710401304880156,0.97769632979178778 +0.8288116006083075,0.85958653342094471,0.86232159179052537,0.86934535138424684,0.84601988786015903,0.7507440015033302,0.76988300718948643,0.82340736527111669,0.83745261179864672,0.84775564496521127 +0.24077918724655256,0.27370450590388373,0.27642924405518432,0.31510804619756894,0.33970940814470263,0.3878954373940382,0.60820028310990693,0.43000908193062193,0.46321077874745309,0.3107044340285976 +0.52074599485474504,0.49714348142151732,0.49120864595170155,0.55254605392110423,0.39498929100227753,0.32024961084244208,0.47054241373552996,0.47327571516507361,0.48555405493243631,0.61761861012200603 +0.03502604234083373,0.057385522959529894,0.03912616593880569,0.038838327425774088,0.078421590180377532,0.80927510888431531,0.81315080312196475,0.75921434161136347,0.76845901910564329,0.80889409405062285 +0.74601370166870828,0.7051707436039536,0.79216117973555233,0.7668292784655879,0.8068393949943069,0.60686656451434629,0.56948074084357225,0.82187282593803768,0.58875857506063589,0.54706931542022996 +0.54447987132387388,0.36716314931982463,0.39433580831974024,0.36925468096160585,0.35603628130047871,0.50154030756675638,0.35545366877341,0.25943204198848002,0.23797189307516031,0.363202920212646 +0.21706455048364393,0.26853138252045494,0.12732945432072318,0.11127533865511263,0.12098356589559292,0.045049565582312434,0.091499163798297534,0.086681423272247288,0.045774705911762789,0.067413430457244877 +0.20073282254074387,0.2204539639933556,0.21621096451418109,0.20198533646180894,0.14892686277745065,0.38182701813639375,0.14754848336452392,0.17460444560857208,0.2127703820297086,0.18088616701425692 +0.26351864831855898,0.2746104908001189,0.15677285022685061,0.28501886819140487,0.22963022856857235,0.34581547536072621,0.41069951330428189,0.31493665100424917,0.31459284180892066,0.37112128580338577 +0.58160676327361305,0.47878217636025555,0.56847521910094523,0.52139425792847716,0.54817117998027154,0.43327284205588645,0.63669788758852253,0.42729622687329682,0.49610563888563786,0.44873827075935069 +0.49999215595839641,0.46161175440647717,0.5810335512796867,0.49825627150130458,0.4770207052060873,0.0060514897049969135,0.043485660949963895,0.025205248181019164,0.028054058639109258,0.018902623647600723 +0.10847175026932776,0.035231714748088255,0.18517994225840712,0.069134450663122571,0.19560017131153173,0.20941049346584478,0.14729732237174881,0.2465221253514806,0.14185725708376401,0.29397050212719888 +0.85404639637380675,0.86933642320217763,0.84654478638548647,0.85980349799500977,0.90548104312619304,0.86542074757743825,0.89427368293399123,0.89225669673759622,0.86324240555403953,0.84876119982799736 +0.19828541879762285,0.071836065588294695,0.22732915685629085,0.07078528372222484,0.026587768254112604,0.53020768697024256,0.55886295592062996,0.61390960271819273,0.58219423200352893,0.65087357987067374 +0.026613621331646353,0.01600339708967171,0.060107437515407286,0.017367032327466052,0.029341165820378906,0.24813171909773296,0.38069077456020994,0.35435763010173393,0.41403480750159538,0.34766600609873721 +0.38575102153658603,0.36120543294237273,0.29081731781480324,0.63396679508150289,0.29692540501128362,0.47816894794232256,0.4345390610105837,0.5160131205047942,0.41717647740733976,0.45544242588221184 +0.55794796663171864,0.53262765900581077,0.65943497288389752,0.67631095743854175,0.52741581326699749,0.6394506310753032,0.54319205580395558,0.66538668828433978,0.72668323011020663,0.61748333202558348 +0.45797449519267452,0.55268751815310568,0.54363875833223485,0.53943229917785995,0.45497411224641926,0.6254701568104768,0.56379100258345582,0.64896614561439203,0.56468049445538648,0.66746255857287573 +0.23673033806389032,0.16207982422202571,0.59220186082529658,0.25637685621041362,0.43903657575720112,0.22749667442986354,0.21390802765382094,0.25435635828762804,0.3269824100134463,0.36307514170767086 +0.75046276640625109,0.77354196427040178,0.77198575236251976,0.8396177847462174,0.69635708947316344,0.80636263432097022,0.88185300471376782,0.81186888864612516,0.78759731721947324,0.84638604815699403 +0.41579414067910858,0.39501435021520803,0.22914296094677949,0.59470015394617626,0.47096918951137978,0.73799447974306065,0.74405066526378016,0.85160041306516376,0.78857315183267351,0.76991485620964717 +0.76754633623469126,0.81248385281650659,0.74316343761165138,0.85082602381589112,0.82609677754225497,0.05123745344463701,0.14811982962419984,0.13733451152803172,0.098376225418186386,0.20316555848695 +0.92650591479448852,0.94037928336182652,0.94594632301595105,0.9609131897741372,0.95683727486174575,0.81689266234752078,0.86923790941363399,0.81718086104955812,0.84706027092760672,0.79180594926583003 +0.17940489080704336,0.14805257591070381,0.17994504098897507,0.3215269082866179,0.20355583677883854,0.075988951750340983,0.064099989744144825,0.0971660648065234,0.077123734314235942,0.095216812769657627 +0.9325173915480498,0.92623625547275013,0.91957474037189124,0.92952426578266611,0.96451762152718379,0.56027903340873197,0.55236072358093113,0.61928135543712193,0.46050351994927119,0.60672826980589689 +0.83712686638727152,0.78056851032305885,0.81498924098559034,0.79341578311868366,0.82488217580247958,0.49946334524429403,0.43140556904836691,0.69171952453325103,0.43811686613480683,0.37212535212165931 +0.034773270995271277,0.050373603444322623,0.075817727745751962,0.065725417080111176,0.031612899241745526,0.12832280804287455,0.11605779212551026,0.42936890528653893,0.1141253108799069,0.093028443603551697 +0.891528256642518,0.86795656351022621,0.89119918263167275,0.83495865823351112,0.83767888872534302,0.81352856641751092,0.76975175397819307,0.76311652097501259,0.73399239088757429,0.77070849572191413 +0.57428212396855294,0.59799060525256009,0.54743081840569996,0.56589362575323188,0.68054959780419821,0.38552019305643859,0.45102822923218,0.4255390981852557,0.455549382517348,0.49147325954982102 +0.71646881107593896,0.66922403915668505,0.71632219364982586,0.61737357728997955,0.64347489629289778,0.88068903316160818,0.90438547744996955,0.90834011838886997,0.91722814828971488,0.9063476726587314 +0.56121202545163351,0.57903929988969893,0.67634992502280156,0.5413070546637746,0.601542755815897,0.81324391494853732,0.74894059947109293,0.67042244851472454,0.77314577493234005,0.79231904618790727 +0.43196044637344722,0.47678947515669323,0.4026316748058909,0.35272036553942887,0.6629865383438267,0.42819104241789463,0.60062936329631866,0.67307932829134742,0.60299700111499788,0.53992059858865016 +0.9322826157765769,0.92550707652116282,0.95054429667651674,0.93579037892049244,0.9446786063781385,0.92018796488991095,0.89542356695164127,0.94097941459039269,0.91033308909390231,0.92567614940343512 +0.85344359443507511,0.8655688907310759,0.82481631121481125,0.81979588369721834,0.82560067562734996,0.89079897207556424,0.84532908492837344,0.87198791213449267,0.80601544745149423,0.86547809306647827 +0.92242273134392461,0.9324259109271138,0.9361774075950875,0.90748047016676625,0.95470827401731184,0.97822094327419973,0.96233473761821164,0.97066420610643922,0.95872001649694538,0.96981421785311772 +0.91106310653090117,0.939957681373917,0.93419203194206646,0.9314020807796537,0.94126747272092892,0.96646551744196563,0.96932189873768015,0.96510961480088531,0.96739609088398515,0.96879700306452809 +0.69867652818483039,0.68267867554095218,0.63499621892696911,0.49701743168407131,0.56959471837035247,0.28754525582190094,0.24034762041993024,0.31871544171008648,0.34375421665027117,0.30077940670890202 +0.74982636155704507,0.67470400556339527,0.61951796637731382,0.58856389755965033,0.62452497225603776,0.79011814846307393,0.75401435702223751,0.8409807348798426,0.81639004437601503,0.81579067799611327 +0.85455994400950774,0.80939949341699791,0.86391634642495041,0.7961601271235792,0.82117667465353672,0.88688577592255702,0.83757712875375789,0.82152802971540306,0.89351755843380598,0.9217781473707789 +0.53514243528198913,0.65914105725823591,0.59381727842264631,0.63326738079194644,0.57634526214678616,0.82606921796104227,0.67132990763638767,0.7178817672829565,0.70420428566284987,0.68704236220218795 +0.10431444507280085,0.25773108642898057,0.19988327971078124,0.17967543573468631,0.079565086140072933,0.33173860123497767,0.34461858912254995,0.447227291733726,0.46651301570818826,0.28176586961490535 +0.73758328458135058,0.7697939845093007,0.79424267340800148,0.75757133067235771,0.77070031905895497,0.59090117932646358,0.58347720585879714,0.74990063413860719,0.73074794319108594,0.50819267056067452 +0.24800273069253409,0.38027794673689885,0.22904616894084567,0.14411404586281407,0.1708066797873537,0.26716679768288043,0.26360857355758094,0.29868766138679759,0.27784253007849191,0.26755271738511976 +0.38674604238516652,0.52790881259716049,0.46162748572533097,0.36899082726449972,0.54773401506827124,0.26173449834459939,0.293348780804085,0.17829396211892079,0.34660516880103687,0.32513890575501492 +0.048730031243772176,0.047494690137691531,0.061507311562317812,0.022553673159573462,0.059205890371240175,0.030872367467973449,0.016575292014759387,0.029287902783844723,0.068774276616758917,0.042148724693115647 +0.45752885203301186,0.38284501663292991,0.42655207731877598,0.32396362439613213,0.37988280438003375,0.70535316978930074,0.78276231538620222,0.73212642766884062,0.82487126285558854,0.77233486264594298 +0.92519045703841551,0.88420955333275875,0.90921959883416181,0.88322276223333707,0.85019542553344962,0.88543943440890094,0.86952736575039302,0.85669620995758322,0.91420930190360261,0.86589623204780941 +0.085215873079180993,0.055472442036270664,0.10757650397136659,0.056740735919456484,0.080570609978175722,0.37899575286428688,0.31356489393511233,0.3777388311864367,0.28466604344430813,0.40582498742151263 +0.77603179090868291,0.82058441251864944,0.78922106992103513,0.82974166105849934,0.78740057753747683,0.95285036021959058,0.93557053376570409,0.95140832153264454,0.96122113478485494,0.94473108442615761 +0.59209244435431763,0.69601395991048376,0.61262306614662299,0.66097763922880071,0.60589769689249606,0.55845031599164829,0.6801808266609406,0.55876778336823807,0.47765828177216507,0.60749879988725097 +0.60928982289601019,0.69651973791769306,0.65225502426619353,0.77895650189020116,0.62882774413446652,0.98492489222552582,0.98504437497466757,0.98370027870986587,0.98699430431587576,0.9854917490447308 diff --git a/test/data/nested/gumbel_d10_acopula_ll.csv b/test/data/nested/gumbel_d10_acopula_ll.csv new file mode 100644 index 00000000..844a24e2 --- /dev/null +++ b/test/data/nested/gumbel_d10_acopula_ll.csv @@ -0,0 +1,500 @@ +9.727796858202467 +10.119829456590928 +15.806177356401918 +25.693131958233266 +8.9296318990263064 +8.2287822489018936 +6.0073525903992611 +14.254894503255457 +6.2377366843255544 +6.1176165897397699 +6.4375326444632002 +12.098858008721528 +6.7247900618968686 +7.376099510109249 +10.045446429071422 +7.0009609065936864 +8.8365279318730927 +6.3109814037730505 +8.4581857908800551 +9.1966226075609949 +7.4164531127913875 +18.521785357707969 +8.8108428018887324 +10.112152614483705 +9.8008153776952351 +6.256577062459364 +5.6978188150230551 +11.551519978078758 +5.2503227127163479 +7.4649603464170831 +18.860963000880446 +16.505782791340565 +18.898746468397199 +14.75813178434592 +6.6402166499952813 +15.940923472529121 +9.1900336289918627 +8.6988680911407492 +9.5796639295606241 +27.589966607549059 +10.518082717416593 +7.7008132420477864 +10.543136094696486 +16.657255151474985 +13.228365654048801 +9.2409146566346383 +3.2342954724879487 +8.7791544048796855 +10.921268016201854 +7.547259019400796 +14.190981128421036 +7.3381744931362451 +17.173443541923135 +9.1744474640918643 +13.332093032816452 +7.7961104212246468 +12.14778638738159 +6.9409039440341438 +15.501708582322564 +7.3757613617774602 +9.7871028668979037 +11.543076523083471 +14.163678313432612 +7.7317905209731581 +6.2112457410465822 +12.155530058423345 +4.7558918882511279 +20.747969737868416 +9.744740757434144 +11.745887591630336 +13.776891720243178 +6.1331645791536396 +6.916071657391285 +7.0788674069676922 +7.8264274780707908 +4.4718887523631423 +14.622327027249042 +7.0337090299232372 +8.905984636774992 +7.8300656190631059 +11.25662235888268 +19.475704250731425 +17.90662093486371 +7.7854180923300502 +8.6828174155695965 +4.7730105834714394 +3.052069210112748 +10.004459631596529 +9.1159624102955021 +8.7815100344055139 +8.4912015851389704 +11.224470701783968 +30.656030003307308 +46.263529531367595 +8.3245714294175048 +17.894795352515359 +7.8260811295419401 +12.40564815758462 +4.817933701886183 +6.4015133309757584 +12.614880019544078 +7.6194542499200217 +12.022898143114077 +11.04916722561811 +3.6667579954761154 +9.7412114465549919 +7.7168041834059746 +4.3045451123493379 +4.419947094289796 +14.40945248102058 +10.75199198816771 +12.458343080694299 +23.428163181328642 +9.2042413694186518 +11.017486086890784 +9.5595106185463621 +18.180627676952469 +6.6222479486043042 +10.721026540621253 +8.2543311967133075 +20.559060549276424 +9.3684699582313904 +17.855896713696623 +11.188673915292281 +10.790964770567035 +20.426507918055265 +5.9748369966850703 +10.275790623632069 +10.14467182803905 +13.890255370959409 +5.8203680749547431 +5.2361349534512982 +15.353886186115901 +7.7783507886473302 +7.2045805699244845 +9.4566466756565219 +21.810357298110816 +6.6618535619819639 +9.0142534370284082 +5.1011846037699868 +8.4893578732851935 +8.4500861646414833 +8.8085426865700356 +8.590062509950755 +9.8585182520967631 +31.280698882324288 +11.017213465492141 +4.8165034200814887 +17.90354636586104 +14.692465144048853 +10.112595249460334 +10.020454633160256 +11.990013965165382 +10.465367398569729 +6.5351910197307603 +10.869051386601271 +17.959599471083393 +18.896832508320827 +18.285790432206078 +7.5257979736590128 +9.7227871061981048 +14.617505811436374 +17.508893426588742 +8.2234551854012494 +14.86146189086908 +4.4634458519635274 +12.599012547587144 +6.0855088693410782 +6.6184040079541013 +40.759356606946113 +9.4722030939884565 +6.2375585314286681 +10.626644637135698 +12.1677677500643 +17.113236876269696 +11.770328084564916 +8.4266388087977919 +14.088965915946162 +21.531762703557263 +6.3428879787069645 +7.304211065957908 +9.2372839036453271 +8.5762428846422125 +11.113124899062342 +9.6770269564914031 +10.948144912689997 +20.592090075387546 +9.3053484264912569 +3.7632824055174083 +12.230622461312173 +9.8494060307745599 +6.9150455068233825 +14.803489816649645 +8.742218579238985 +8.5236473148637941 +8.1557151917307991 +9.7596098678459242 +6.7202922020892188 +6.9808266687182776 +6.6084824941113673 +9.7701299852814181 +7.3371080210805566 +11.126782920964274 +3.3229819884659371 +12.965498866583246 +18.781035261343945 +14.378885770157112 +5.7762146236929244 +6.9202066235889745 +8.0430583304535794 +10.345033149568241 +9.098740589613076 +6.9125693152315932 +25.187019225392419 +2.4759291435099184 +8.4943153495717922 +10.059891974270037 +14.178724413932322 +8.4072571040539614 +8.0426203790553235 +15.948974272468178 +8.5807870020415749 +23.579153733623897 +7.403810987327013 +12.754118751793637 +9.8082528911185847 +11.601522700110191 +9.7226390499375128 +4.8638428639752149 +8.0295828884247165 +10.52237853791668 +17.13761889052266 +11.304282067318546 +9.9263548276655484 +12.473195348991851 +11.286253149737526 +25.971485373186653 +15.541020536079394 +9.3645015863932315 +19.618713867194288 +5.2227738134779216 +6.3259163254582447 +19.705817194827475 +13.368480441150965 +10.083414123786497 +9.8104677240468519 +11.286135393200034 +27.980602610149816 +1.1464328396347572 +9.2245370126836548 +8.3383781181682792 +8.2097811280369974 +8.6893128413349245 +15.218429188508843 +12.324715236751935 +7.9238106535382276 +33.937980946427871 +11.103156230044732 +12.754268152964343 +7.5384981785381449 +6.7968335440722161 +14.560530641408477 +8.7396247036191141 +9.7674053830357241 +12.056141902437176 +12.64485200726326 +24.97453232023949 +6.325734968282422 +8.9203500546295285 +7.2070195143090423 +9.6653659280740065 +13.564213554925956 +6.4731590796450078 +9.2488993816356029 +14.7008278489172 +9.2165912359285969 +42.584875226537008 +11.050524444354863 +15.39512305480838 +10.092649681303175 +7.7629415990520609 +8.4992789251672285 +7.2350531579100235 +10.212133016884536 +12.170619661579153 +4.5289267010994561 +10.185578050259968 +7.9703294085504481 +9.4235355240006626 +9.0904654516578507 +9.6234464091668031 +16.662235108456386 +12.489454193813685 +5.2295866879794204 +23.040014174835221 +10.821953556628351 +20.955326729460111 +5.0841430144758402 +9.8189957589520915 +17.330457579222042 +12.951759827320913 +8.2934578824389771 +11.070051566936996 +6.9067776504213541 +7.8038376882508533 +4.8945620616675427 +13.734935676205701 +5.7119413227206621 +13.057848470977056 +10.302067264795509 +12.625493734748034 +10.701203730787 +12.809583854319236 +9.5833275681311179 +13.130824211540986 +6.7172800567647961 +8.0231993311903675 +8.4374467505823318 +6.1035643885038642 +8.2313158912204258 +9.5991311534018777 +19.617064156807757 +9.2299337037025424 +10.030050299047726 +18.555779740009342 +16.137534805181588 +9.9645494123000375 +8.6056211668262037 +9.8737838388591896 +11.095350971335503 +8.4279290814800962 +7.1435314607466438 +14.692145353004967 +4.0040505831004332 +8.4908130189386597 +35.491308503638123 +8.2731673306712885 +21.36597873609206 +12.243558531799545 +5.3316372801244754 +26.440153955549846 +14.004556912002581 +6.4910933722702318 +13.092504733083207 +10.61428042776501 +11.1631700713755 +22.899643516922112 +8.6199072115962601 +9.5191626684951256 +15.279304808512073 +4.9272451240882909 +7.9656207102001382 +2.6688150862437707 +20.258352102022428 +8.7281802364938184 +3.5149337121524553 +10.084736943471079 +7.4592579453305721 +5.4552783087017289 +3.7412690340495942 +7.8136743312663732 +4.9861933971876482 +10.25009642208687 +31.744256461636809 +21.143623857671926 +14.812076610891886 +6.8114388597403561 +19.892660560978896 +7.8675720104040421 +10.417186522907652 +7.9173845763225366 +10.278027685082403 +15.311008688162978 +9.5597912480352178 +9.1732534553611238 +2.9571580810967113 +11.380347437205323 +11.22012186860988 +8.824651263569411 +8.5792444875838747 +9.6726502351586277 +9.6615594777425926 +3.162733326433063 +8.7740397141579223 +4.633970828672183 +8.7784594507842097 +8.7982452738000525 +9.4524479856698846 +16.411799748922455 +10.053191530815923 +19.018864806625658 +11.766255790509073 +3.6583485998981899 +4.4105983373363387 +9.6878319927987171 +8.6563576012258103 +14.587650396163298 +9.666501064450788 +6.1010796586982821 +16.710534771396482 +5.1868909098312628 +12.210275334740189 +6.4085440332348895 +7.8034880982099288 +9.8935792044511146 +16.504442455582527 +7.7543008471520523 +8.8030559642756039 +18.093614036208542 +9.6022495438789193 +13.836281152317042 +13.782979018164426 +18.207806978467964 +9.7245486541321995 +16.500683034505826 +9.2980555476538882 +9.5838724691152919 +10.217763292331881 +9.3158776446243472 +7.8730741653658782 +9.7033968258095289 +8.2077814462351171 +7.3355111875532231 +8.6766757178730813 +8.7813629279621779 +12.716585703411575 +5.9319615954582972 +10.865422424057286 +3.9977409729997788 +8.2421745162740407 +10.632813828320941 +27.5061353977446 +10.89207357650573 +10.061079451744135 +7.9118825283155658 +4.8229227868067035 +15.534292613526695 +10.062649150243253 +8.1894732203750209 +28.06526643924586 +15.117637034325853 +13.86257072541531 +16.082538243050976 +17.43905938231299 +9.5793029861734738 +10.812163069120679 +10.527595753705327 +10.429870457025395 +22.606814193969925 +15.647308732483879 +7.835981389462507 +6.3597356689956719 +13.871236081645225 +8.9158928643850963 +7.3202426074273248 +13.385713015695373 +10.42812843907474 +9.9807193497708795 +9.4533167544918673 +13.746360489567593 +8.4803178389049734 +18.646300360145986 +6.4221572865466463 +13.692193496632072 +7.4188874831778406 +8.8034898330491167 +10.49780690728837 +4.0916426897796612 +12.784191849681257 +4.7751270801199723 +8.3112906023036608 +18.280464899499179 +13.318622560337417 +12.745706865560699 +9.3019883678464552 +12.619805997489053 +15.601017582829314 +10.561178112787491 +15.346739216746769 +9.9501303250245172 +4.9008504196659874 +22.943099411519967 +16.392151247037276 +24.096414221710816 +27.469046697169119 +7.8800827353778899 +11.916105843853664 +14.001317037500307 +10.639129502870286 +7.6284485952904433 +9.5072316029995214 +9.7300834124206759 +7.5537439872022567 +19.381090800315803 +9.9204630905846205 +17.443845832864781 +12.308661074153058 +19.686129353840244 +9.8646342445975268 +20.313340064599018 diff --git a/test/runtests.jl b/test/runtests.jl index 3bfd7980..131e0d3c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,6 +1,6 @@ -using Aqua, Copulas, Distributions, ForwardDiff, HCubature, - HypothesisTests, InteractiveUtils, LinearAlgebra, LogExpFunctions, - MvNormalCDF, QuadGK, Random, Roots, SpecialFunctions, StableRNGs, +using Aqua, Copulas, DelimitedFiles, Distributions, ForwardDiff, HCubature, + HypothesisTests, InteractiveUtils, LinearAlgebra, LogExpFunctions, + MvNormalCDF, QuadGK, Random, Roots, SpecialFunctions, StableRNGs, Statistics, StatsBase, Test const rng = StableRNG(123) @@ -9,6 +9,7 @@ const rng = StableRNG(123) testfiles = [ "Aqua", "ArchimedeanCopulas", + "NestedArchimedeanCopula", "ConditionalDistribution", "EllipticalCopulas", "FittingTest", From c79679f290cdc75a734fd33cf01ce43ac765de34 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 01:04:28 -0400 Subject: [PATCH 04/25] docs: nested Archimedean copulas manual page Add docs/src/manual/nested.md (linked in docs/make.jl) covering the definition, building trees (auto/pinned dims, root leaves, mixed families, arbitrary depth), the Float64/BigFloat precision story, and the optional per-variable censored / survival likelihood via the `censored` keyword of `logpdf`. Follows the algorithm of Yang & Li (arXiv:2605.23134). Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/make.jl | 1 + docs/src/manual/nested.md | 113 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 docs/src/manual/nested.md diff --git a/docs/make.jl b/docs/make.jl index 62de95f6..0b9036fc 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,6 +24,7 @@ makedocs(; "Manual" => [ "Introduction"=>"manual/intro.md", "Conditioning and subsetting"=>"manual/conditioning_and_subsetting.md", + "Nested Archimedean copulas"=>"manual/nested.md", "Dependence metrics"=>"manual/dependence_measures.md", "Fitting"=>"manual/fitting_interface.md", "Visualizations"=>"manual/visualizations.md", diff --git a/docs/src/manual/nested.md b/docs/src/manual/nested.md new file mode 100644 index 00000000..cb0b7f85 --- /dev/null +++ b/docs/src/manual/nested.md @@ -0,0 +1,113 @@ +```@meta +CurrentModule = Copulas +``` + +# Nested Archimedean copulas + +A *nested* (hierarchical) Archimedean copula glues several Archimedean copulas +together under an outer Archimedean generator, letting different blocks of +variables share a stronger within-block dependence while still being coupled +across blocks. This is the natural model for grouped or hierarchical +dependence — for example several organ systems within a patient, or several +assets within a sector. + +[`NestedArchimedeanCopula`](@ref) provides the density (and an optional +per-variable censored / survival likelihood) of such trees, following the +algorithm of Yang & Li +([arXiv:2605.23134](https://arxiv.org/abs/2605.23134)). + +## Definition + +With an outer generator ``\phi_0`` over inner copulas ``C_1, \dots, C_m`` on +disjoint coordinate blocks ``I_1, \dots, I_m`` (and possibly some bare +coordinates attached directly to the root), the CDF is + +```math +C(\mathbf u) = \phi_0\!\left( + \sum_{i \in \text{root leaves}} \phi_0^{-1}(u_i) + \;+\; \sum_{k=1}^m \phi_0^{-1}\bigl(C_k(\mathbf u_{I_k})\bigr) +\right), +``` + +and each child ``C_k`` is itself Archimedean or, recursively, nested +Archimedean — so trees nest to arbitrary depth. + +The density is the mixed partial of this CDF over the differentiated +coordinates. Differentiating the composition of generators is exactly Faà di +Bruno's formula; the implementation carries the partial Bell polynomials through +truncated Taylor series over the generator tree, building only on the package's +generator interface (`ϕ`, `ϕ⁻¹`, `ϕ⁽ᵏ⁾`). + +## Building a tree + +```@example nested +using Copulas, Distributions + +# Outer Clayton(2) over two inner Clayton panels on dims 1:2 and 3:4. +C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) +logpdf(C, [0.3, 0.5, 0.4, 0.6]) +``` + +Children are auto-placed on consecutive free dimension blocks in declaration +order. You can instead pin a child to explicit dimensions with a `Pair`, and you +can attach bare coordinates to the root with `leaves`: + +```@example nested +# Root Clayton with a bare leaf on dim 1 and a Gumbel panel on dims 2:4. +C2 = NestedArchimedeanCopula(ClaytonGenerator(2.0); + leaves = [1], children = [GumbelCopula(3, 2.0) => [2, 3, 4]]) +logpdf(C2, [0.25, 0.4, 0.55, 0.7]) +``` + +Mixed families and arbitrary nesting depth are supported: + +```@example nested +inner = NestedArchimedeanCopula(JoeGenerator(3.0); children = [JoeCopula(2, 4.0)]) +C3 = NestedArchimedeanCopula(ClaytonGenerator(1.5); + children = [GumbelCopula(2, 2.0), FrankCopula(2, 3.0), inner]) +logpdf(C3, [0.2, 0.3, 0.4, 0.5, 0.6, 0.7]) +``` + +A purely flat declaration (only `leaves`, no `children`) returns the package's +native [`ArchimedeanCopula`](@ref) so its fast specialised density is used. + +!!! note "Validity is the caller's responsibility" + The constructor does not check the nesting condition. For same-family + nestings the standard sufficient condition is that the inner generator be at + least as dependent as the outer one (e.g. for Clayton/Gumbel/Joe, the inner + parameter ``\ge`` the outer parameter). Mixed-family nestings are accepted + but must be validated by the user. + +## Precision + +The recursion is generic in the value type. `logpdf` works on `Float64` +out of the box; passing `BigFloat` (or `Double64`) coordinates carries that +precision through the whole recursion, which is recommended for adversarial +high-dimensional or deep-tail inputs where the alternating-sign Faà di Bruno sum +can lose `Float64` precision: + +```@example nested +logpdf(C, big.([0.3, 0.5, 0.4, 0.6])) +``` + +## Censored / survival likelihood + +For partially observed multivariate event times, pass a Boolean mask via the +`censored` keyword of `logpdf`. A right-censored coordinate (`true`) enters the +copula CDF as a plain argument but is not differentiated, so the result is the +mixed partial of the nested CDF over the *observed* coordinates only — the +per-variable censored copula likelihood: + +```@example nested +u = [0.30, 0.55, 0.70, 0.40, 0.62, 0.80] +Csurv = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) +logpdf(Csurv, u; censored = [false, true, false, false, false, true]) +``` + +With `censored` omitted (all observed) this reduces to the ordinary nested +density; with all coordinates censored it reduces to ``\log C(u)``. This is +distinct from `logpdf(SklarDist(C, margins), x)` with `Distributions.censored` +margins, which plugs a censored marginal *density* into a fully-differentiated +joint density rather than computing the mixed partial over observed dimensions. From 659c7cd1c9d2a2d3336a41b298bc39d252633571 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 03:26:49 -0400 Subject: [PATCH 05/25] src: censored survival likelihood on SklarDist (general) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the per-variable right-censored survival likelihood to the SklarDist level, where the margins and data live (a Copula{d} stays the pure dependence on [0,1]^d). The copula-scale mixed partial remains the internal kernel that SklarDist calls, and is exposed as the lower-level `censored_logpdf`. * logpdf(S::SklarDist, x; censored = δ, T = Float64): survival log-likelihood = Σ_{i observed} log f_i(x_i) + log[ mixed partial of the copula CDF over the OBSERVED coords at u = (F_i(x_i)) ]. Omitted / all-false mask reduces to the plain joint density; all-true reduces to log cdf(S, x). Does NOT route through Distributions.censored (that maps the censoring atom to the copula boundary u=1 and returns -Inf). * censored_logpdf(C::Copula, u, δ; T = Float64): copula-scale mixed partial over observed coords, GENERAL over Copula{d}. Implemented for flat ArchimedeanCopula (via ϕ⁽ᵏ⁾) and NestedArchimedeanCopula (via the Faà di Bruno recursion); any copula supplying _censored_copula_logpdf gains the SklarDist survival likelihood for free. * NestedArchimedeanCopula loses its logpdf(...; censored) kwarg method (kept pure); gains an analytic Distributions._cdf (ϕ_root ∘ Σ ϕ⁻¹) so cdf no longer falls back to slow numerical integration. Default working precision is Float64 (matching the uncensored path); BigFloat is opt-in via T= for adversarial high-d / deep-tail inputs. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/CensoredLikelihood.jl | 134 +++++++++++++++++++++++++ src/Copulas.jl | 4 + src/NestedArchimedeanCopula.jl | 67 +++++-------- src/nested/NestedArchimedeanDensity.jl | 14 +++ 4 files changed, 176 insertions(+), 43 deletions(-) create mode 100644 src/CensoredLikelihood.jl diff --git a/src/CensoredLikelihood.jl b/src/CensoredLikelihood.jl new file mode 100644 index 00000000..39385a29 --- /dev/null +++ b/src/CensoredLikelihood.jl @@ -0,0 +1,134 @@ +# ============================================================================= +# Per-variable (right-)censored survival likelihood. +# +# For partially-observed multivariate data — e.g. multivariate survival times +# where some coordinates are right-censored — the correct likelihood is the +# mixed partial of the joint CDF over the OBSERVED coordinates only, with the +# censored coordinates left as plain CDF arguments (integrated out above their +# observation time rather than differentiated). +# +# Sklar's theorem factorises that quantity into the observed marginal densities +# and the copula's mixed partial over the observed coordinates: +# +# log f_survival(x, δ) +# = Σ_{i : observed} log f_i(x_i) +# + log ∂^{|O|} C(u) / ∏_{i∈O} ∂u_i evaluated at u = (F_1(x_1), …, F_d(x_d)), +# +# where O = {i : δ_i = false} is the observed set and the censored coordinates +# enter C only as arguments. This is the user-facing survival likelihood, exposed +# as `logpdf(S::SklarDist, x; censored = δ)`. With `δ` omitted (all observed) it +# is exactly the ordinary joint density. +# +# Crucially this does NOT route through `Distributions.censored`: a censored +# marginal places an atom at the censoring time, which Sklar maps to the copula +# boundary u = 1 — off the open domain (0,1)^d where the copula density lives — +# so `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns -Inf. The +# mixed-partial-over-observed-coordinates construction below is the correct +# replacement. +# +# The copula's contribution is supplied by `_censored_copula_logpdf(C, u, δ, T)`, +# the log of the mixed partial of the copula CDF over the observed coordinates. +# It is implemented here generically for flat `ArchimedeanCopula` (via ϕ⁽ᵏ⁾) and +# in NestedArchimedeanCopula.jl for nested trees (via the Faà di Bruno +# recursion). Any `Copula{d}` that adds a `_censored_copula_logpdf` method gains +# the SklarDist survival likelihood for free. +# ============================================================================= + +# ---- Flat Archimedean copula: mixed partial over the observed coordinates ---- +# For an Archimedean copula C(u) = ϕ(Σ_i ϕ⁻¹(u_i)), the mixed partial over an +# observed set O of size k is +# ∂^k C / ∏_{i∈O} ∂u_i = ϕ⁽ᵏ⁾(Σ_i ϕ⁻¹(u_i)) · ∏_{i∈O} ϕ⁻¹′(u_i), +# the censored coordinates contributing only through the inner sum. (k = 0, i.e. +# all coordinates censored, gives log C(u).) +function _censored_copula_logpdf(C::ArchimedeanCopula{d, TG}, u, censored, ::Type{T}) where {d, TG, T} + s = sum(ϕ⁻¹(C.G, T(u[i])) for i in 1:d) + k = count(!, censored) + val = _phi_deriv(C.G, k, s) # ϕ⁽⁰⁾ = ϕ when fully censored + logjac = zero(T) + for i in 1:d + censored[i] || (logjac += log(abs(ϕ⁻¹⁽¹⁾(C.G, T(u[i]))))) + end + return log(abs(val)) + logjac +end + +""" + censored_logpdf(C::Copula, u, censored; T = Float64) + +Copula-scale per-variable right-censored log-likelihood: the log of the mixed +partial of the copula CDF over the **observed** coordinates only, evaluated at +`u ∈ (0,1)^d`. Coordinate `i` is right-censored when `censored[i] == true`; such +coordinates enter the CDF as plain arguments but are not differentiated. + +This is the lower-level building block behind the survival likelihood +`logpdf(SklarDist(C, margins), x; censored = δ)`. Most users want the latter, +which adds the observed marginal densities and works on the original data scale; +use `censored_logpdf` when you already hold copula-scale pseudo-observations. + +With `censored` all-`false` this equals `logpdf(C, u)`; with all-`true` it equals +`log cdf(C, u)`. The keyword `T` sets the working precision (default `Float64`); +pass `T = BigFloat` for adversarial high-dimensional or deep-tail inputs. + +Implemented for flat [`ArchimedeanCopula`](@ref) (via `ϕ⁽ᵏ⁾`) and +[`NestedArchimedeanCopula`](@ref) (via the Faà di Bruno recursion). +""" +function censored_logpdf(C::Copula{d}, u::AbstractVector, + censored::AbstractVector{Bool}; T::Type = Float64) where {d} + length(u) == d || throw(ArgumentError("length(u) = $(length(u)) ≠ copula dimension $d")) + length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ copula dimension $d")) + all(0 .< u .< 1) || throw(ArgumentError("censored_logpdf expects copula-scale u ∈ (0,1)^d")) + return _censored_copula_logpdf(C, u, collect(Bool, censored), T) +end + +""" + logpdf(S::SklarDist, x; censored = falses(length(S)), T = Float64) + +Log-likelihood of the joint model `S = SklarDist(C, margins)` at the data point +`x`, with optional per-variable right-censoring. + +* With `censored` omitted (or all `false`) this is the ordinary joint + log-density `Σ_i log f_i(x_i) + log c(F_1(x_1), …, F_d(x_d))`. +* With `censored[i] == true`, coordinate `i` is right-censored at `x_i`: only + the survival information `T_i > x_i` is known. The returned value is then the + partially-censored survival log-likelihood + + ```math + \\sum_{i\\,:\\,\\text{observed}} \\log f_i(x_i) + \\;+\\; \\log \\frac{\\partial^{|O|} C(\\mathbf u)}{\\prod_{i\\in O}\\partial u_i} + \\Bigg|_{\\mathbf u = (F_1(x_1),\\dots,F_d(x_d))}, + ``` + + where `O = {i : censored[i] == false}` and the censored coordinates enter the + copula CDF only as arguments. With all coordinates censored it reduces to + `log cdf(S, x)`. + +This is the correct right-censored survival likelihood. It deliberately does +**not** use `Distributions.censored` margins: a censored margin places an atom at +the censoring time that Sklar maps to the copula boundary `u = 1`, off the open +domain `(0,1)^d` on which the copula density is defined, so +`logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`. + +The keyword `T` sets the working precision of the copula partial (default +`Float64`, matching the uncensored path); pass `T = BigFloat` for adversarial +high-dimensional or deep-tail inputs. + +The copula factor is computed by [`censored_logpdf`](@ref); it is available for +any `Copula{d}` that implements the mixed-partial-over-observed-coordinates +(flat [`ArchimedeanCopula`](@ref) and [`NestedArchimedeanCopula`](@ref) both do). +""" +function Distributions.logpdf(S::SklarDist, x::AbstractVector; + censored::AbstractVector{Bool} = falses(length(S)), + T::Type = Float64) + d = length(S) + length(x) == d || throw(ArgumentError("length(x) = $(length(x)) ≠ model dimension $d")) + length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ model dimension $d")) + if !any(censored) + return Distributions._logpdf(S, x) + end + # Observed marginal densities + copula mixed partial over observed coords. + u = [clamp(Distributions.cdf(S.m[i], x[i]), 0, 1) for i in 1:d] + margin_ll = zero(float(eltype(u))) + for i in 1:d + censored[i] || (margin_ll += Distributions.logpdf(S.m[i], x[i])) + end + return margin_ll + _censored_copula_logpdf(S.C, u, collect(Bool, censored), T) +end diff --git a/src/Copulas.jl b/src/Copulas.jl index 43f62577..feab5699 100644 --- a/src/Copulas.jl +++ b/src/Copulas.jl @@ -106,6 +106,9 @@ module Copulas include("nested/FrankTaylorGenerator.jl") include("NestedArchimedeanCopula.jl") + # Per-variable censored survival likelihood (SklarDist-level + copula-scale) + include("CensoredLikelihood.jl") + #Extreme value copulas include("Tail.jl") include("ExtremeValueCopula.jl") @@ -148,6 +151,7 @@ module Copulas AMHCopula, # And a bunch of copulas. ArchimedeanCopula, NestedArchimedeanCopula, + censored_logpdf, AsymGalambosCopula, AsymLogCopula, AsymMixedCopula, diff --git a/src/NestedArchimedeanCopula.jl b/src/NestedArchimedeanCopula.jl index 81e27e83..d47a583a 100644 --- a/src/NestedArchimedeanCopula.jl +++ b/src/NestedArchimedeanCopula.jl @@ -57,13 +57,12 @@ alternating-sign Faà di Bruno sum can lose `Float64` precision. # Censored / survival likelihood -`logpdf(C, u; censored = δ)` computes the per-variable right-censored -log-likelihood: the mixed partial of the nested CDF over the *observed* -coordinates only, with right-censored coordinates (`δ[i] == true`) entering the -CDF as plain arguments rather than being differentiated. With `censored` -omitted (all observed) this is the ordinary nested density; with all coordinates -censored it reduces to `log C(u)`. This is the survival-analysis copula -likelihood for partially observed multivariate event times. +The per-variable right-censored *survival* likelihood lives at the +[`SklarDist`](@ref) level, where the margins and data are available: wrap the +copula in `SklarDist(C, margins)` and call +`logpdf(S, x; censored = δ)` (see [`censored_logpdf`](@ref) for the copula-scale +building block). This nested copula supplies the required mixed partial of its +CDF over the observed coordinates via the Faà di Bruno recursion. # Example @@ -72,7 +71,10 @@ likelihood for partially observed multivariate event times. C = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) logpdf(C, [0.3, 0.5, 0.4, 0.6]) -logpdf(C, [0.3, 0.5, 0.4, 0.6]; censored = [false, true, false, true]) + +# survival likelihood with dims 2 and 4 right-censored: +S = SklarDist(C, ntuple(_ -> Exponential(1.0), 4)) +logpdf(S, [0.7, 0.3, 0.5, 0.9]; censored = [false, true, false, true]) ``` The density and the per-variable censored (survival) likelihood follow the @@ -197,41 +199,20 @@ function Distributions._logpdf(C::NestedArchimedeanCopula{d}, u) where {d} return _nested_logpdf(tree) end -""" - logpdf(C::NestedArchimedeanCopula, u; censored = falses(length(C))) - -Log-density of the nested Archimedean copula `C` at `u`, with optional -per-variable right-censoring. - -* With `censored` omitted (or all `false`) this is the ordinary nested-copula - log-density. -* With `censored[i] == true`, coordinate `i` is treated as right-censored: it - enters the copula CDF as a plain argument but is **not** differentiated. The - returned value is then the mixed partial of the nested CDF over the observed - coordinates only — the per-variable censored (survival) copula likelihood for - partially observed multivariate event times. With all coordinates censored it - reduces to `log C(u)`. - -The keyword `T` (default `BigFloat`) sets the working precision of the censored -recursion; censored survival likelihoods are typically evaluated on -high-dimensional panels where the extra precision is cheap insurance. The -uncensored `logpdf(C, u)` path uses the element type of `u` (defaulting to -`Float64`). - -This censored likelihood differs from `logpdf(SklarDist(C, margins), x)` with -`Distributions.censored` margins: the latter plugs a censored marginal *density* -into a fully-differentiated joint density, and so does not compute the -mixed-partial-over-observed-dimensions quantity needed for survival data. -""" -function Distributions.logpdf(C::NestedArchimedeanCopula{d}, u::AbstractVector; - censored::AbstractVector{Bool} = falses(d), - T::Type = BigFloat) where {d} - length(u) == d || throw(ArgumentError("length(u) = $(length(u)) ≠ copula dimension $d")) - length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ copula dimension $d")) - if !any(censored) - # No censoring: defer to the standard (element-typed) density path. - return Distributions._logpdf(C, u) - end +# Nested CDF in closed form (ϕ_root ∘ Σ ϕ⁻¹), avoiding the generic numerical +# integration fallback. This is also the all-censored limit of the survival +# likelihood (`logpdf(S; censored = trues(d))` == `log cdf`). +function _cdf(C::NestedArchimedeanCopula{d}, u) where {d} + T = eltype(u) <: AbstractFloat ? float(eltype(u)) : Float64 + tree = _build_tree(C, u, falses(d), T) + return _nested_cdf(tree) +end + +# Copula-scale mixed partial of the nested CDF over the observed coordinates. +# This is the lower-level building block behind the SklarDist survival +# likelihood (see `censored_logpdf` and `logpdf(::SklarDist; censored=)`); it +# works on copula-scale arguments `u ∈ (0,1)^d`. +function _censored_copula_logpdf(C::NestedArchimedeanCopula{d}, u, censored, ::Type{T}) where {d, T} tree = _build_tree(C, u, collect(Bool, censored), T) return _nested_logpdf(tree) end diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index 2b647fe7..497eff85 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -193,3 +193,17 @@ function _nested_logpdf(node::_NestedNode{TG, T}) where {TG, T} (t, C, d, β) = _process_node(node) return log(abs(_assemble_density(β, node.G, t, d))) + _leaf_log_jacobian(node) end + +# Nested CDF of a node: C(u) = ϕ_G(Σ_leaves ϕ⁻¹(u) + Σ_children ϕ⁻¹(C_child)). +# Closed form, no Faà di Bruno / numerical integration needed. +function _nested_cdf(node::_NestedNode{TG, T}) where {TG, T} + G = node.G + s = zero(T) + for leaf in node.leaves + s += ϕ⁻¹(G, leaf.u) + end + for child in node.children + s += ϕ⁻¹(G, _nested_cdf(child)) + end + return ϕ(G, s) +end From 94b735f50b7631ba04eee72aa48988847b1d101a Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Wed, 27 May 2026 03:26:59 -0400 Subject: [PATCH 06/25] test+docs: SklarDist survival likelihood MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tests (test/NestedArchimedeanCopula.jl, 45 pass): * censored_logpdf (copula scale): bivariate Clayton closed form; FLAT ArchimedeanCopula via ϕ⁽ᵏ⁾ (general non-nested path); nested across sectors vs ForwardDiff reference; all-observed == density; all-censored == log cdf. * SklarDist survival likelihood: bivariate Clayton closed form on the data scale; omitted mask == plain joint density; FINITE where the Distributions.censored route returns -Inf; all-censored == log cdf(S, x); nested factor == observed-margin densities + copula censored_logpdf. Docs (docs/src/manual/nested.md): the survival likelihood section now uses logpdf(SklarDist(C, margins), x; censored = δ), with the math, the "don't use Distributions.censored" warning, and the note that it is general over copulas; censored_logpdf documented as the copula-scale building block. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/src/manual/nested.md | 48 ++++++++++++++++++------- test/NestedArchimedeanCopula.jl | 63 +++++++++++++++++++++++++++++---- 2 files changed, 92 insertions(+), 19 deletions(-) diff --git a/docs/src/manual/nested.md b/docs/src/manual/nested.md index cb0b7f85..a4417459 100644 --- a/docs/src/manual/nested.md +++ b/docs/src/manual/nested.md @@ -93,21 +93,45 @@ logpdf(C, big.([0.3, 0.5, 0.4, 0.6])) ## Censored / survival likelihood -For partially observed multivariate event times, pass a Boolean mask via the -`censored` keyword of `logpdf`. A right-censored coordinate (`true`) enters the -copula CDF as a plain argument but is not differentiated, so the result is the -mixed partial of the nested CDF over the *observed* coordinates only — the -per-variable censored copula likelihood: +For partially observed multivariate event times, the survival likelihood lives +at the [`SklarDist`](@ref) level — it is a statement about the data and the +margins, not the pure dependence on ``[0,1]^d``. Wrap the copula in a +`SklarDist` with its marginal distributions and pass a Boolean censoring mask +via the `censored` keyword of `logpdf`. A right-censored coordinate (`true`) +contributes its survival information only: it enters the copula CDF as a plain +argument and its marginal density is dropped, so the result is + +```math +\sum_{i\,:\,\text{observed}} \log f_i(x_i) +\;+\; \log \frac{\partial^{|O|} C(\mathbf u)}{\prod_{i\in O}\partial u_i}, +\qquad \mathbf u = (F_1(x_1),\dots,F_d(x_d)), +``` + +the observed marginal densities times the copula's mixed partial over the +observed coordinates ``O``: ```@example nested -u = [0.30, 0.55, 0.70, 0.40, 0.62, 0.80] +using Distributions Csurv = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) -logpdf(Csurv, u; censored = [false, true, false, false, false, true]) +S = SklarDist(Csurv, ntuple(_ -> Exponential(1.0), 6)) +x = [0.7, 0.3, 0.9, 0.5, 0.4, 1.1] +logpdf(S, x; censored = [false, true, false, false, false, true]) ``` -With `censored` omitted (all observed) this reduces to the ordinary nested -density; with all coordinates censored it reduces to ``\log C(u)``. This is -distinct from `logpdf(SklarDist(C, margins), x)` with `Distributions.censored` -margins, which plugs a censored marginal *density* into a fully-differentiated -joint density rather than computing the mixed partial over observed dimensions. +With `censored` omitted (all observed) this reduces to the ordinary joint +density; with all coordinates censored it reduces to ``\log F(\mathbf x)``. This +path works for any copula that supplies the mixed partial over observed +coordinates — flat [`ArchimedeanCopula`](@ref) as well as nested trees — so it +is a general per-variable censoring facility, not nested-specific. + +!!! warning "Do not use `Distributions.censored` margins" + `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`: a censored + margin places an atom at the censoring time, which Sklar's theorem maps to + the copula boundary ``u = 1`` — off the open domain ``(0,1)^d`` where the + copula density is defined. The `censored` keyword above is the correct + replacement. + +The copula factor alone is available as `censored_logpdf(C, u, δ)` on +copula-scale pseudo-observations ``u`` — the lower-level building block used by +the `SklarDist` method. diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 0e4363ff..4d42c9f8 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -155,19 +155,29 @@ end end # ----------------------------------------------------------------------- - # 4. Censored likelihood (logpdf with a mask) vs the ForwardDiff reference. + # 4. Copula-scale censored partial (censored_logpdf) vs references. # ----------------------------------------------------------------------- - @testset "censored likelihood vs independent ForwardDiff reference" begin + @testset "censored_logpdf (copula scale) vs references" begin # Bivariate Clayton(3), dim 2 right-censored: closed form ∂C/∂u₁. θ = big(3.0) u1 = BigFloat(cdf(Exponential(1.0), 0.5)) u2 = BigFloat(cdf(Exponential(1.0), 1.0)) Cbiv = NestedArchimedeanCopula(ClaytonGenerator(2.0); # outer irrelevant: single panel children = [ClaytonCopula(2, 3.0)]) - v = logpdf(Cbiv, [u1, u2]; censored = [false, true]) + v = censored_logpdf(Cbiv, [u1, u2], [false, true]; T = BigFloat) dC_du1 = u1^(-θ - 1) * (u1^(-θ) + u2^(-θ) - 1)^(-(1 / θ + 1)) @test Float64(v) ≈ Float64(log(dC_du1)) atol = 1e-9 + # Flat ArchimedeanCopula: censored_logpdf via ϕ⁽ᵏ⁾ matches the + # mixed-partial closed form. Exercises the general (non-nested) path. + import Copulas: ϕ⁻¹, ϕ⁻¹⁽¹⁾, ϕ⁽ᵏ⁾ + Cf = ClaytonCopula(4, 2.0) + uf = [0.5, 0.8, 0.3, 0.6]; δf = [false, true, false, true] + G = Cf.G; ssum = sum(ϕ⁻¹(G, uf[i]) for i in 1:4); k = count(!, δf) + ref_cop = log(abs(ϕ⁽ᵏ⁾(G, k, ssum))) + + sum(log(abs(ϕ⁻¹⁽¹⁾(G, uf[i]))) for i in 1:4 if !δf[i]) + @test censored_logpdf(Cf, uf, δf) ≈ ref_cop atol = 1e-10 + # Nested, censoring across sectors: root Clayton(2) over Clayton(5) + # Gumbel(3), one censored leaf in each sector + a censored root leaf. C = NestedArchimedeanCopula(ClaytonGenerator(2.0); @@ -179,14 +189,53 @@ end [(u[1], false)], [RefSpec(ClaytonGenerator(big(5.0)), [(u[2], false), (u[3], true)]), RefSpec(GumbelGenerator(big(3.0)), [(u[4], true), (u[5], false)])]) - @test logpdf(C, u; censored = δ) ≈ ref_logpdf(spec) atol = 1e-9 + @test censored_logpdf(C, u, δ; T = BigFloat) ≈ ref_logpdf(spec) atol = 1e-9 - # Omitted mask == plain density; full mask present changes the value. + # All observed == plain density; all censored == log cdf. C2 = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) u2v = big.([0.30, 0.55, 0.70, 0.40, 0.62, 0.80]) - @test logpdf(C2, u2v; censored = falses(6)) == logpdf(C2, u2v) - @test logpdf(C2, u2v; censored = [false, true, false, false, false, true]) != logpdf(C2, u2v) + @test censored_logpdf(C2, u2v, falses(6); T = BigFloat) ≈ logpdf(C2, u2v) atol = 1e-30 + @test censored_logpdf(C2, u2v, trues(6); T = BigFloat) ≈ log(cdf(C2, u2v)) atol = 1e-9 + end + + # ----------------------------------------------------------------------- + # 4b. SklarDist survival likelihood (the user-facing censored API). + # ----------------------------------------------------------------------- + @testset "SklarDist survival likelihood" begin + # Bivariate Clayton(3), dim 2 right-censored — closed form on data scale. + θ = 3.0 + m = (Exponential(1.0), Exponential(1.0)) + S = SklarDist(ClaytonCopula(2, θ), m) + x1 = 0.7; c2 = 1.3 + u1 = cdf(m[1], x1); u2 = cdf(m[2], c2) + dCdu1 = u1^(-θ - 1) * (u1^(-θ) + u2^(-θ) - 1)^(-1 / θ - 1) + expected = log(dCdu1) + logpdf(m[1], x1) + @test logpdf(S, [x1, c2]; censored = [false, true]) ≈ expected atol = 1e-10 + + # Omitted mask == the plain joint density. + @test logpdf(S, [x1, c2]; censored = [false, false]) == logpdf(S, [x1, c2]) + + # Finite where the Distributions.censored route is -Inf. + Sc = SklarDist(ClaytonCopula(2, θ), (m[1], censored(m[2], upper = c2))) + @test logpdf(Sc, [x1, c2]) == -Inf + @test isfinite(logpdf(S, [x1, c2]; censored = [false, true])) + + # All censored == log cdf of the joint model. + @test logpdf(S, [x1, c2]; censored = [true, true]) ≈ log(cdf(S, [x1, c2])) atol = 1e-10 + + # Nested copula on the data scale: SklarDist factor == observed-margin + # densities + the copula-scale censored_logpdf at the PIT point. + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(3, 5.0), GumbelCopula(3, 3.0)]) + margins = ntuple(_ -> Exponential(1.0), 6) + Sn = SklarDist(C, margins) + x = [0.7, 0.3, 0.9, 0.5, 0.4, 1.1] + δ = [false, true, false, false, true, false] + u = [cdf(margins[i], x[i]) for i in 1:6] + margin_ll = sum(logpdf(margins[i], x[i]) for i in 1:6 if !δ[i]) + @test logpdf(Sn, x; censored = δ) ≈ margin_ll + censored_logpdf(C, u, δ) atol = 1e-10 + @test isfinite(logpdf(Sn, x; censored = δ)) end # ----------------------------------------------------------------------- From 0067cf016400f5e76198a20ca830addc1699e961 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Fri, 29 May 2026 03:14:25 -0400 Subject: [PATCH 07/25] =?UTF-8?q?refactor:=20route=20nested=20density=20th?= =?UTF-8?q?rough=20upstream=20=CF=95=E2=81=BD=E1=B5=8F=E2=81=BE=20and=20ta?= =?UTF-8?q?ylor()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the local `_phi_deriv` (generic Taylor-based ϕ⁽ᵏ⁾) with calls to upstream `ϕ⁽ᵏ⁾(G, k, t)` in `_assemble_density` and in the censored-likelihood helper. Rewrite `_composition_taylor` as a thin wrapper around upstream `taylor(f, x₀, d)`. No parallel derivative machinery; closed-form per-family ϕ⁽ᵏ⁾ overrides now win dispatch automatically. `FrankTaylorGenerator.jl` retained (still needed by `_composition_taylor` for nested-Frank trees, since `log1mexp` has no Taylor1 rule); docstring updated to reflect the narrower role. Tests: same 24/26 pass as before the refactor (the 2 unchanged errors are a pre-existing `rng` test-harness scoping issue, identical on upstream/main). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/CensoredLikelihood.jl | 2 +- src/nested/FrankTaylorGenerator.jl | 13 ++++++++----- src/nested/NestedArchimedeanDensity.jl | 18 ++++-------------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/CensoredLikelihood.jl b/src/CensoredLikelihood.jl index 39385a29..be860ee6 100644 --- a/src/CensoredLikelihood.jl +++ b/src/CensoredLikelihood.jl @@ -43,7 +43,7 @@ function _censored_copula_logpdf(C::ArchimedeanCopula{d, TG}, u, censored, ::Type{T}) where {d, TG, T} s = sum(ϕ⁻¹(C.G, T(u[i])) for i in 1:d) k = count(!, censored) - val = _phi_deriv(C.G, k, s) # ϕ⁽⁰⁾ = ϕ when fully censored + val = k == 0 ? ϕ(C.G, s) : ϕ⁽ᵏ⁾(C.G, k, s) # ϕ⁽⁰⁾ = ϕ when fully censored logjac = zero(T) for i in 1:d censored[i] || (logjac += log(abs(ϕ⁻¹⁽¹⁾(C.G, T(u[i]))))) diff --git a/src/nested/FrankTaylorGenerator.jl b/src/nested/FrankTaylorGenerator.jl index 1f66c66d..0f88dde8 100644 --- a/src/nested/FrankTaylorGenerator.jl +++ b/src/nested/FrankTaylorGenerator.jl @@ -1,11 +1,14 @@ # ============================================================================= # Taylor-series-compatible ϕ / ϕ⁻¹ methods for the Frank generator. # -# The nested-Archimedean density recursion evaluates the generator on a -# `TaylorSeries.Taylor1` argument (to obtain ϕ⁽ᵏ⁾ and the composition Taylor -# coefficients). For θ > 0, Frank's default ϕ / ϕ⁻¹ are written with -# `LogExpFunctions.log1mexp`, which has no `Taylor1` method, so the nested path -# would otherwise fail for Frank. +# `_composition_taylor` in `NestedArchimedeanDensity.jl` evaluates the inner-to- +# outer change of variables ϕ⁻¹_outer ∘ ϕ_inner on a `TaylorSeries.Taylor1` +# argument via Copulas' generic `taylor(f, x₀, d)` primitive. For θ > 0, Frank's +# default ϕ / ϕ⁻¹ are written with `LogExpFunctions.log1mexp`, which has no +# `Taylor1` method, so the nested path would otherwise fail when Frank appears +# anywhere in the tree. (The k-th derivative ϕ⁽ᵏ⁾ of Frank itself is upstream's +# closed-form PolyLog implementation in `src/Generator/FrankGenerator.jl` and +# does not touch a Taylor expansion.) # # These methods add the *equivalent* closed forms built only from # `exp` / `expm1` / `log` / `log1p` (all Taylor1-compatible). They are exactly diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index 497eff85..ad4992c9 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -48,23 +48,12 @@ struct _NestedNode{TG<:Generator, T} children::Vector{_NestedNode} end -# Family-agnostic k-th derivative of the generator, ϕ⁽ᵏ⁾(G, t), obtained from the -# Taylor expansion of ϕ rather than a family-specialised closed form: the k-th -# Taylor coefficient of ϕ(G, t + s) in s, times k!. This avoids the integer -# Stirling-number overflow that caps some closed-form ϕ⁽ᵏ⁾ at moderate orders and -# keeps the whole recursion in the working type `T`. -function _phi_deriv(G::Generator, k::Int, t::T) where {T} - k == 0 && return ϕ(G, t) - return TaylorSeries.getcoeff(ϕ(G, t + TaylorSeries.Taylor1(T, k)), k) * T(factorial(big(k))) -end - # Taylor coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] of the change of variables # h = ϕ⁻¹_outer ∘ ϕ_inner at t₀, to order d. This is the inner-to-outer link in # the Faà di Bruno recursion for a child sub-tree. function _composition_taylor(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} - h(x) = ϕ⁻¹(outer, ϕ(inner, x)) - ht = h(t₀ + TaylorSeries.Taylor1(T, d)) - return T[TaylorSeries.getcoeff(ht, k) for k in 1:d] + coefs = taylor(x -> ϕ⁻¹(outer, ϕ(inner, x)), t₀, d) + return T[coefs[k+1] for k in 1:d] end # Partial-Bell-polynomial step: given the Taylor coefficients `p` of the link @@ -180,7 +169,8 @@ function _assemble_density(β::Vector{T}, G::Generator, t::T, d::Int) where {T} d == 0 && return ϕ(G, t) s = zero(T) for k in 0:d - s += β[k + 1] * _phi_deriv(G, k, t) + ϕᵏ = k == 0 ? ϕ(G, t) : ϕ⁽ᵏ⁾(G, k, t) + s += β[k + 1] * ϕᵏ end return s end From 279cbfeb0e6ab570c1e3f0ddc9559e816fd6dcfa Mon Sep 17 00:00:00 2001 From: Oskar Laverny Date: Fri, 29 May 2026 10:16:45 +0200 Subject: [PATCH 08/25] Move docpage to the bestiary and not the manual --- docs/make.jl | 2 +- docs/src/{manual => bestiary}/nested.md | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/src/{manual => bestiary}/nested.md (100%) diff --git a/docs/make.jl b/docs/make.jl index 0b9036fc..daca442e 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,7 +24,6 @@ makedocs(; "Manual" => [ "Introduction"=>"manual/intro.md", "Conditioning and subsetting"=>"manual/conditioning_and_subsetting.md", - "Nested Archimedean copulas"=>"manual/nested.md", "Dependence metrics"=>"manual/dependence_measures.md", "Fitting"=>"manual/fitting_interface.md", "Visualizations"=>"manual/visualizations.md", @@ -33,6 +32,7 @@ makedocs(; "Bestiary" => [ "Elliptical copulas"=>"bestiary/elliptical.md", "Archimedean copulas"=>"bestiary/archimedean.md", + "Nested Archimedean copulas"=>"manual/nested.md", "Extreme Value copulas"=>"bestiary/extremevalues.md", "Archimax copulas"=>"bestiary/archimax.md", "Empirical copulas"=>"bestiary/empirical.md", diff --git a/docs/src/manual/nested.md b/docs/src/bestiary/nested.md similarity index 100% rename from docs/src/manual/nested.md rename to docs/src/bestiary/nested.md From 4d226646ab5f7c00e0a73176c56163719e1ceb22 Mon Sep 17 00:00:00 2001 From: Oskar Laverny Date: Fri, 29 May 2026 10:41:41 +0200 Subject: [PATCH 09/25] typo --- docs/make.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index daca442e..df1a2eac 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -32,7 +32,7 @@ makedocs(; "Bestiary" => [ "Elliptical copulas"=>"bestiary/elliptical.md", "Archimedean copulas"=>"bestiary/archimedean.md", - "Nested Archimedean copulas"=>"manual/nested.md", + "Nested Archimedean copulas"=>"bestiary/nested.md", "Extreme Value copulas"=>"bestiary/extremevalues.md", "Archimax copulas"=>"bestiary/archimax.md", "Empirical copulas"=>"bestiary/empirical.md", From 845ab0c34f76a16982bc327d66df961daa3e0f9e Mon Sep 17 00:00:00 2001 From: Oskar Laverny Date: Fri, 29 May 2026 12:09:18 +0200 Subject: [PATCH 10/25] fix your docs? --- docs/src/bestiary/nested.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index a4417459..6b3ae326 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -42,6 +42,7 @@ generator interface (`ϕ`, `ϕ⁻¹`, `ϕ⁽ᵏ⁾`). ```@example nested using Copulas, Distributions +using Copulas: ClaytonGenerator, JoeGenerator # Outer Clayton(2) over two inner Clayton panels on dims 1:2 and 3:4. C = NestedArchimedeanCopula(ClaytonGenerator(2.0); From f472f7a0b26d47a7ad2b05d404dd49e8e861b0a1 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Fri, 29 May 2026 22:27:30 -0400 Subject: [PATCH 11/25] Tier 1: route nested censoring through condition/subsetdims; drop bespoke CensoredLikelihood MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make NestedArchimedeanCopula a first-class citizen of the conditioning/ subsetting framework so per-variable censoring is an emergent capability of the standard API rather than a bespoke function. New src/nested/NestedConditioning.jl: - SubsetCopula(::NestedArchimedeanCopula, dims): prune the generator tree to the observed marginal (drop 0-observed subtrees, collapse 1-observed subtrees to a bare leaf by single-coordinate marginalisation-invariance, keep >=2), re-index to 1:p; collapse to a flat ArchimedeanCopula when no sub-nesting survives. Its existing _logpdf gives the observed-marginal density via the Faa-di-Bruno walk. - NestedDistortion + DistortionFromCop(::NestedArchimedeanCopula, js, ujs, i): closed-form conditional marginal whose cdf is the mixed partial over the conditioned set / observed-marginal density, routed through the O(d^2) tree walk (not ForwardDiff). General p, so it also accelerates the per-coordinate distortions the generic ConditionalCopula builds. Per-variable censoring is now the "gist recipe" logpdf(subsetdims(X,O), x_O) + logcdf(condition(X,O,x_O), x_C). - Delete src/CensoredLikelihood.jl (bespoke censored_logpdf / logpdf(::SklarDist; censored=)); keep the internal _censored_copula_logpdf nested kernel as the numerator behind the distortion. - Fix _cdf(::NestedArchimedeanCopula) to flow Real/ForwardDiff.Dual eltypes (was forcing Float64, which crashed the generic multi-censored fallback). - Retarget the censoring tests to the gist recipe against the same independent references; fix the pre-existing rng-scoping bug. 50/50 pass; the JAX-CSV bit-identity regression is untouched. The multi-censored-dim conditional CDF (|unobserved|>=2) stays on upstream's generic ForwardDiff fallback (correct, slower) — ConditionalCopula stores the inner copula as a field, not a type param, so it cannot dispatch on the inner type; a fast multi-dim path is a documented follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 75 +++++---- src/CensoredLikelihood.jl | 134 ---------------- src/Copulas.jl | 6 +- src/NestedArchimedeanCopula.jl | 46 ++++-- src/nested/NestedArchimedeanDensity.jl | 3 +- src/nested/NestedConditioning.jl | 203 +++++++++++++++++++++++++ test/NestedArchimedeanCopula.jl | 159 ++++++++++++++----- 7 files changed, 406 insertions(+), 220 deletions(-) delete mode 100644 src/CensoredLikelihood.jl create mode 100644 src/nested/NestedConditioning.jl diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index 6b3ae326..86db2c38 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -11,10 +11,10 @@ across blocks. This is the natural model for grouped or hierarchical dependence — for example several organ systems within a patient, or several assets within a sector. -[`NestedArchimedeanCopula`](@ref) provides the density (and an optional -per-variable censored / survival likelihood) of such trees, following the -algorithm of Yang & Li -([arXiv:2605.23134](https://arxiv.org/abs/2605.23134)). +[`NestedArchimedeanCopula`](@ref) provides the density of such trees (and, via +the standard [`condition`](@ref) / [`subsetdims`](@ref) framework, a +per-variable censored / survival likelihood), following the algorithm of Yang & +Li ([arXiv:2605.23134](https://arxiv.org/abs/2605.23134)). ## Definition @@ -94,22 +94,33 @@ logpdf(C, big.([0.3, 0.5, 0.4, 0.6])) ## Censored / survival likelihood -For partially observed multivariate event times, the survival likelihood lives -at the [`SklarDist`](@ref) level — it is a statement about the data and the -margins, not the pure dependence on ``[0,1]^d``. Wrap the copula in a -`SklarDist` with its marginal distributions and pass a Boolean censoring mask -via the `censored` keyword of `logpdf`. A right-censored coordinate (`true`) -contributes its survival information only: it enters the copula CDF as a plain -argument and its marginal density is dropped, so the result is +Per-variable (right-)censoring is an **emergent capability** of the standard +[`condition`](@ref) + [`subsetdims`](@ref) framework — there is no bespoke +censored-likelihood function. Split the coordinates into an observed set ``O`` +(events) and a censored set ``C`` (the survival times we only know exceed their +observation). The per-variable censored likelihood factorises as the *gist +recipe* ```math -\sum_{i\,:\,\text{observed}} \log f_i(x_i) +\underbrace{\log f_{O}(x_O)}_{\texttt{logpdf(subsetdims(X,O),\,x_O)}} +\;+\; +\underbrace{\log P(X_C \le x_C \mid X_O = x_O)}_{\texttt{logcdf(condition(X,O,x_O),\,x_C)}}, +``` + +which equals the observed-marginal density times the copula's mixed partial over +the observed coordinates, + +```math +\sum_{i\in O} \log f_i(x_i) \;+\; \log \frac{\partial^{|O|} C(\mathbf u)}{\prod_{i\in O}\partial u_i}, \qquad \mathbf u = (F_1(x_1),\dots,F_d(x_d)), ``` -the observed marginal densities times the copula's mixed partial over the -observed coordinates ``O``: +because the denominator ``c_O`` in `condition` cancels against the +`subsetdims` marginal density. Both factors route through the Faà di Bruno tree +walk via the `subsetdims` / `condition` specialisations for this type — no +ForwardDiff for the observed-marginal density nor (when a single coordinate is +censored) the conditional CDF. ```@example nested using Distributions @@ -117,22 +128,34 @@ Csurv = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) S = SklarDist(Csurv, ntuple(_ -> Exponential(1.0), 6)) x = [0.7, 0.3, 0.9, 0.5, 0.4, 1.1] -logpdf(S, x; censored = [false, true, false, false, false, true]) +O = (1, 3, 4, 5) # observed (events) +C = (2, 6) # right-censored +logpdf(subsetdims(S, O), x[collect(O)]) + + log(cdf(condition(S, O, x[collect(O)]), x[collect(C)])) ``` -With `censored` omitted (all observed) this reduces to the ordinary joint -density; with all coordinates censored it reduces to ``\log F(\mathbf x)``. This -path works for any copula that supplies the mixed partial over observed -coordinates — flat [`ArchimedeanCopula`](@ref) as well as nested trees — so it -is a general per-variable censoring facility, not nested-specific. +When a *single* coordinate is censored, `condition(S, O, x_O)` returns a +univariate conditional distribution and you use `logcdf(condition(...), x_C)` +(a scalar `x_C`); when several are censored it returns a conditional joint +distribution and you use `log(cdf(condition(...), x_C))` as above. With ``C`` +empty (all observed) the recipe reduces to the ordinary joint density +`logpdf(S, x)`; with ``O`` empty (all censored) it reduces to +``\log F(\mathbf x)``. The recipe works for any copula with `condition` / +`subsetdims` support — flat [`ArchimedeanCopula`](@ref) as well as nested trees. + +!!! note "Multi-censored conditional CDF" + When two or more coordinates are censored, the conditional CDF currently + falls back to upstream's generic (ForwardDiff over the closed-form nested + CDF) path — correct, but slower than the single-censored fast tree walk. A + fast multi-censored tree-walk path is a planned follow-up. The generic + `Float64` ForwardDiff path can also lose precision (and may return `NaN`) at + high differentiation order for fast-tail generators; pass `BigFloat` + coordinates if the multi-censored fallback is numerically fragile, mirroring + the density-precision guidance above. !!! warning "Do not use `Distributions.censored` margins" `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`: a censored margin places an atom at the censoring time, which Sklar's theorem maps to the copula boundary ``u = 1`` — off the open domain ``(0,1)^d`` where the - copula density is defined. The `censored` keyword above is the correct - replacement. - -The copula factor alone is available as `censored_logpdf(C, u, δ)` on -copula-scale pseudo-observations ``u`` — the lower-level building block used by -the `SklarDist` method. + copula density is defined. The `condition` + `subsetdims` recipe above is the + correct replacement. diff --git a/src/CensoredLikelihood.jl b/src/CensoredLikelihood.jl deleted file mode 100644 index be860ee6..00000000 --- a/src/CensoredLikelihood.jl +++ /dev/null @@ -1,134 +0,0 @@ -# ============================================================================= -# Per-variable (right-)censored survival likelihood. -# -# For partially-observed multivariate data — e.g. multivariate survival times -# where some coordinates are right-censored — the correct likelihood is the -# mixed partial of the joint CDF over the OBSERVED coordinates only, with the -# censored coordinates left as plain CDF arguments (integrated out above their -# observation time rather than differentiated). -# -# Sklar's theorem factorises that quantity into the observed marginal densities -# and the copula's mixed partial over the observed coordinates: -# -# log f_survival(x, δ) -# = Σ_{i : observed} log f_i(x_i) -# + log ∂^{|O|} C(u) / ∏_{i∈O} ∂u_i evaluated at u = (F_1(x_1), …, F_d(x_d)), -# -# where O = {i : δ_i = false} is the observed set and the censored coordinates -# enter C only as arguments. This is the user-facing survival likelihood, exposed -# as `logpdf(S::SklarDist, x; censored = δ)`. With `δ` omitted (all observed) it -# is exactly the ordinary joint density. -# -# Crucially this does NOT route through `Distributions.censored`: a censored -# marginal places an atom at the censoring time, which Sklar maps to the copula -# boundary u = 1 — off the open domain (0,1)^d where the copula density lives — -# so `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns -Inf. The -# mixed-partial-over-observed-coordinates construction below is the correct -# replacement. -# -# The copula's contribution is supplied by `_censored_copula_logpdf(C, u, δ, T)`, -# the log of the mixed partial of the copula CDF over the observed coordinates. -# It is implemented here generically for flat `ArchimedeanCopula` (via ϕ⁽ᵏ⁾) and -# in NestedArchimedeanCopula.jl for nested trees (via the Faà di Bruno -# recursion). Any `Copula{d}` that adds a `_censored_copula_logpdf` method gains -# the SklarDist survival likelihood for free. -# ============================================================================= - -# ---- Flat Archimedean copula: mixed partial over the observed coordinates ---- -# For an Archimedean copula C(u) = ϕ(Σ_i ϕ⁻¹(u_i)), the mixed partial over an -# observed set O of size k is -# ∂^k C / ∏_{i∈O} ∂u_i = ϕ⁽ᵏ⁾(Σ_i ϕ⁻¹(u_i)) · ∏_{i∈O} ϕ⁻¹′(u_i), -# the censored coordinates contributing only through the inner sum. (k = 0, i.e. -# all coordinates censored, gives log C(u).) -function _censored_copula_logpdf(C::ArchimedeanCopula{d, TG}, u, censored, ::Type{T}) where {d, TG, T} - s = sum(ϕ⁻¹(C.G, T(u[i])) for i in 1:d) - k = count(!, censored) - val = k == 0 ? ϕ(C.G, s) : ϕ⁽ᵏ⁾(C.G, k, s) # ϕ⁽⁰⁾ = ϕ when fully censored - logjac = zero(T) - for i in 1:d - censored[i] || (logjac += log(abs(ϕ⁻¹⁽¹⁾(C.G, T(u[i]))))) - end - return log(abs(val)) + logjac -end - -""" - censored_logpdf(C::Copula, u, censored; T = Float64) - -Copula-scale per-variable right-censored log-likelihood: the log of the mixed -partial of the copula CDF over the **observed** coordinates only, evaluated at -`u ∈ (0,1)^d`. Coordinate `i` is right-censored when `censored[i] == true`; such -coordinates enter the CDF as plain arguments but are not differentiated. - -This is the lower-level building block behind the survival likelihood -`logpdf(SklarDist(C, margins), x; censored = δ)`. Most users want the latter, -which adds the observed marginal densities and works on the original data scale; -use `censored_logpdf` when you already hold copula-scale pseudo-observations. - -With `censored` all-`false` this equals `logpdf(C, u)`; with all-`true` it equals -`log cdf(C, u)`. The keyword `T` sets the working precision (default `Float64`); -pass `T = BigFloat` for adversarial high-dimensional or deep-tail inputs. - -Implemented for flat [`ArchimedeanCopula`](@ref) (via `ϕ⁽ᵏ⁾`) and -[`NestedArchimedeanCopula`](@ref) (via the Faà di Bruno recursion). -""" -function censored_logpdf(C::Copula{d}, u::AbstractVector, - censored::AbstractVector{Bool}; T::Type = Float64) where {d} - length(u) == d || throw(ArgumentError("length(u) = $(length(u)) ≠ copula dimension $d")) - length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ copula dimension $d")) - all(0 .< u .< 1) || throw(ArgumentError("censored_logpdf expects copula-scale u ∈ (0,1)^d")) - return _censored_copula_logpdf(C, u, collect(Bool, censored), T) -end - -""" - logpdf(S::SklarDist, x; censored = falses(length(S)), T = Float64) - -Log-likelihood of the joint model `S = SklarDist(C, margins)` at the data point -`x`, with optional per-variable right-censoring. - -* With `censored` omitted (or all `false`) this is the ordinary joint - log-density `Σ_i log f_i(x_i) + log c(F_1(x_1), …, F_d(x_d))`. -* With `censored[i] == true`, coordinate `i` is right-censored at `x_i`: only - the survival information `T_i > x_i` is known. The returned value is then the - partially-censored survival log-likelihood - - ```math - \\sum_{i\\,:\\,\\text{observed}} \\log f_i(x_i) - \\;+\\; \\log \\frac{\\partial^{|O|} C(\\mathbf u)}{\\prod_{i\\in O}\\partial u_i} - \\Bigg|_{\\mathbf u = (F_1(x_1),\\dots,F_d(x_d))}, - ``` - - where `O = {i : censored[i] == false}` and the censored coordinates enter the - copula CDF only as arguments. With all coordinates censored it reduces to - `log cdf(S, x)`. - -This is the correct right-censored survival likelihood. It deliberately does -**not** use `Distributions.censored` margins: a censored margin places an atom at -the censoring time that Sklar maps to the copula boundary `u = 1`, off the open -domain `(0,1)^d` on which the copula density is defined, so -`logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`. - -The keyword `T` sets the working precision of the copula partial (default -`Float64`, matching the uncensored path); pass `T = BigFloat` for adversarial -high-dimensional or deep-tail inputs. - -The copula factor is computed by [`censored_logpdf`](@ref); it is available for -any `Copula{d}` that implements the mixed-partial-over-observed-coordinates -(flat [`ArchimedeanCopula`](@ref) and [`NestedArchimedeanCopula`](@ref) both do). -""" -function Distributions.logpdf(S::SklarDist, x::AbstractVector; - censored::AbstractVector{Bool} = falses(length(S)), - T::Type = Float64) - d = length(S) - length(x) == d || throw(ArgumentError("length(x) = $(length(x)) ≠ model dimension $d")) - length(censored) == d || throw(ArgumentError("length(censored) = $(length(censored)) ≠ model dimension $d")) - if !any(censored) - return Distributions._logpdf(S, x) - end - # Observed marginal densities + copula mixed partial over observed coords. - u = [clamp(Distributions.cdf(S.m[i], x[i]), 0, 1) for i in 1:d] - margin_ll = zero(float(eltype(u))) - for i in 1:d - censored[i] || (margin_ll += Distributions.logpdf(S.m[i], x[i])) - end - return margin_ll + _censored_copula_logpdf(S.C, u, collect(Bool, censored), T) -end diff --git a/src/Copulas.jl b/src/Copulas.jl index feab5699..c478a514 100644 --- a/src/Copulas.jl +++ b/src/Copulas.jl @@ -105,9 +105,8 @@ module Copulas include("nested/NestedArchimedeanDensity.jl") include("nested/FrankTaylorGenerator.jl") include("NestedArchimedeanCopula.jl") - - # Per-variable censored survival likelihood (SklarDist-level + copula-scale) - include("CensoredLikelihood.jl") + # Conditioning/subsetting fast paths (per-variable censoring is emergent here) + include("nested/NestedConditioning.jl") #Extreme value copulas include("Tail.jl") @@ -151,7 +150,6 @@ module Copulas AMHCopula, # And a bunch of copulas. ArchimedeanCopula, NestedArchimedeanCopula, - censored_logpdf, AsymGalambosCopula, AsymLogCopula, AsymMixedCopula, diff --git a/src/NestedArchimedeanCopula.jl b/src/NestedArchimedeanCopula.jl index d47a583a..47b957f4 100644 --- a/src/NestedArchimedeanCopula.jl +++ b/src/NestedArchimedeanCopula.jl @@ -57,24 +57,36 @@ alternating-sign Faà di Bruno sum can lose `Float64` precision. # Censored / survival likelihood -The per-variable right-censored *survival* likelihood lives at the -[`SklarDist`](@ref) level, where the margins and data are available: wrap the -copula in `SklarDist(C, margins)` and call -`logpdf(S, x; censored = δ)` (see [`censored_logpdf`](@ref) for the copula-scale -building block). This nested copula supplies the required mixed partial of its -CDF over the observed coordinates via the Faà di Bruno recursion. +Per-variable (right-)censoring is an *emergent* capability of the standard +[`condition`](@ref) + [`subsetdims`](@ref) framework — there is no bespoke +censored-likelihood function. For an observed set ``O`` and a censored set ``C``, +the per-variable censored likelihood factorises as the "gist recipe" + +```julia +logpdf(subsetdims(X, O), x_O) + logcdf(condition(X, O, x_O), x_C) +``` + +(on the [`SklarDist`](@ref) `X = SklarDist(C, margins)`), which equals the +observed-marginal densities times the mixed partial of the nested CDF over the +observed coordinates. The `subsetdims`/`condition` specialisations for this type +route both factors through the Faà di Bruno tree walk; the denominator +``c_O`` cancels, reproducing the raw mixed partial. # Example ```julia +using Copulas: ClaytonGenerator # generator types are not exported + # outer Clayton(2) over two inner Clayton panels on dims 1:2 and 3:4 C = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) logpdf(C, [0.3, 0.5, 0.4, 0.6]) -# survival likelihood with dims 2 and 4 right-censored: +# survival likelihood with dim 2 right-censored (observed O = {1,3,4}, C = {2}): S = SklarDist(C, ntuple(_ -> Exponential(1.0), 4)) -logpdf(S, [0.7, 0.3, 0.5, 0.9]; censored = [false, true, false, true]) +x = [0.7, 0.3, 0.5, 0.9] +logpdf(subsetdims(S, (1, 3, 4)), x[[1, 3, 4]]) + + logcdf(condition(S, (1, 3, 4), x[[1, 3, 4]]), x[2]) ``` The density and the per-variable censored (survival) likelihood follow the @@ -201,17 +213,25 @@ end # Nested CDF in closed form (ϕ_root ∘ Σ ϕ⁻¹), avoiding the generic numerical # integration fallback. This is also the all-censored limit of the survival -# likelihood (`logpdf(S; censored = trues(d))` == `log cdf`). +# likelihood (the empty-observed gist recipe `log cdf(C, u)`), and the +# closed-form CDF that upstream's generic `_partial_cdf`/ForwardDiff path +# differentiates for the multi-censored-dim `ConditionalCopula` case. function _cdf(C::NestedArchimedeanCopula{d}, u) where {d} - T = eltype(u) <: AbstractFloat ? float(eltype(u)) : Float64 + # Use the input element type when it is a (non-integer) real so that + # ForwardDiff `Dual`s flow through unchanged — this closed-form CDF is what + # upstream's generic `_partial_cdf`/ForwardDiff path differentiates for the + # multi-censored-dim `ConditionalCopula` case. + Tu = eltype(u) + T = Tu <: Integer ? Float64 : (Tu <: Real ? float(Tu) : Float64) tree = _build_tree(C, u, falses(d), T) return _nested_cdf(tree) end # Copula-scale mixed partial of the nested CDF over the observed coordinates. -# This is the lower-level building block behind the SklarDist survival -# likelihood (see `censored_logpdf` and `logpdf(::SklarDist; censored=)`); it -# works on copula-scale arguments `u ∈ (0,1)^d`. +# Internal numerator kernel for the nested condition/subsetdims fast path +# (`DistortionFromCop(::NestedArchimedeanCopula, …)` in nested/NestedConditioning.jl); +# it works on copula-scale arguments `u ∈ (0,1)^d`. `censored[i] == true` means +# coordinate `i` enters only the argument-sum (not differentiated). function _censored_copula_logpdf(C::NestedArchimedeanCopula{d}, u, censored, ::Type{T}) where {d, T} tree = _build_tree(C, u, collect(Bool, censored), T) return _nested_logpdf(tree) diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index ad4992c9..aa042b03 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -178,7 +178,8 @@ end # Full nested log-density of a node, including the marginal log-Jacobian. With # no censored leaves this is the ordinary nested-Archimedean log-density; with # censored leaves it is the mixed partial of the nested CDF over the observed -# coordinates only (the survival likelihood). See `censored_logpdf`. +# coordinates only — the numerator kernel behind the condition/subsetdims +# fast path (see nested/NestedConditioning.jl). function _nested_logpdf(node::_NestedNode{TG, T}) where {TG, T} (t, C, d, β) = _process_node(node) return log(abs(_assemble_density(β, node.G, t, d))) + _leaf_log_jacobian(node) diff --git a/src/nested/NestedConditioning.jl b/src/nested/NestedConditioning.jl new file mode 100644 index 00000000..83e9e66f --- /dev/null +++ b/src/nested/NestedConditioning.jl @@ -0,0 +1,203 @@ +# ============================================================================= +# Conditioning / subsetting fast paths for NestedArchimedeanCopula. +# +# These specialise upstream's standard conditioning/subsetting framework +# (`subsetdims`, `condition`, `DistortionFromCop`, `SubsetCopula`) so that +# per-variable censoring becomes an EMERGENT capability of the standard API, +# routed through our O(d²) Faà di Bruno tree walk rather than ForwardDiff. +# +# The "gist recipe" for the per-variable (right-)censored survival likelihood, +# with observed set O and censored/unobserved set C: +# +# logpdf(subsetdims(X, O), x_O) + logcdf(condition(X, O, x_O), x_C) +# = Σ_{i∈O} log f_i(x_i) + log [ ∂^{|O|} C / ∏_{i∈O} ∂u_i ] / c_O(u_O) +# + log c_O(u_O) +# = Σ_{i∈O} log f_i(x_i) + log ∂^{|O|} C / ∏_{i∈O} ∂u_i, +# +# i.e. the observed-marginal densities times the copula's mixed partial over the +# observed coordinates — the correct per-variable censored likelihood. The +# denominator c_O cancels, so the recipe reproduces the raw mixed partial. +# +# Two fast specialisations live here: +# (1) SubsetCopula(::NestedArchimedeanCopula, dims) — prunes the generator +# tree to the observed marginal, returning a re-indexed (1:p) +# NestedArchimedeanCopula (or a flat ArchimedeanCopula when no genuine +# sub-nesting survives). Reached automatically from `subsetdims`. Its +# existing `_logpdf` then yields the observed-marginal density c_O. +# (2) DistortionFromCop(::NestedArchimedeanCopula, js, ujs, i) — the closed-form +# conditional marginal U_i | U_js = u_js, whose cdf is the mixed partial +# over js (with i and every other coord entering only as a CDF argument) +# divided by c_O. Handles GENERAL p, so it also accelerates each +# per-coordinate distortion that the generic ConditionalCopula constructor +# builds for the multi-unobserved case. +# +# DEFERRED FOLLOW-UP (NOT in this PR): the MULTI-conditioned-dim conditional CDF +# (|unobserved| ≥ 2) is NOT routed to the fast tree walk. `ConditionalCopula` +# stores the inner copula as a FIELD `C::Copula{D}` (Conditioning.jl), not a type +# parameter, so `_cdf(::ConditionalCopula)` cannot dispatch on +# "inner == NestedArchimedeanCopula". The multi-unobserved conditional CDF +# therefore falls back to upstream's GENERIC `_partial_cdf` (= ForwardDiff over +# our closed-form `_cdf(::NestedArchimedeanCopula)`), which is CORRECT but slower +# (O(2^k) ForwardDiff in Float64 duals rather than the O(d²) tree walk). A future +# PR can add a fast multi-dim path, likely requiring an upstream change to make +# `ConditionalCopula` carry the inner copula's concrete type. Do NOT hack +# ConditionalCopula dispatch here. +# ============================================================================= + +# ---- (1) SubsetCopula: prune the tree to the observed marginal -------------- + +# Count the OBSERVED leaves (membership in the observed set `O`) in a subtree. +_obscount(ch::Tuple, O) = count(in(O), ch[2]) # flat panel (cc, ds) +function _obscount(c::NestedArchimedeanCopula, O) + n = count(in(O), c.leafdims) + for ch in c.children + n += _obscount(ch, O) + end + return n +end + +# The single observed GLOBAL dim of a subtree known to have exactly one. Used by +# the 1-observed-leaf collapse: such a subtree marginalises to the Uniform margin +# of that one coordinate, so it degenerates to a bare leaf under the nearest kept +# ancestor's generator (the inner generator vanishes). +function _the_one_observed_dim(ch::Tuple, O) + for j in ch[2] + j in O && return j + end + error("subtree claimed to have one observed leaf but none found") +end +function _the_one_observed_dim(c::NestedArchimedeanCopula, O) + for j in c.leafdims + j in O && return j + end + for ch in c.children + _obscount(ch, O) == 1 && return _the_one_observed_dim(ch, O) + end + error("subtree claimed to have one observed leaf but none found") +end + +# Prune one node to its observed-marginal STRUCTURE, returning a +# NestedArchimedeanCopula whose dims are still GLOBAL (a partial / non-contiguous +# subset of 1:d). Built directly via the inner constructor (NOT the validating +# keyword constructor, which would reject non-contiguous dims); the surviving +# tree is relabelled to 1:p in one pass afterwards via `_remap_dims`. +# +# Rules per child subtree S, with obscount = #observed leaves in S: +# obscount(S) == 0 → drop S (it marginalises to all-ones; contributes nothing). +# obscount(S) == 1 → collapse: the one observed leaf detaches and re-attaches to +# THIS node as a bare leaf under THIS node's generator (the +# inner generator vanishes — valid by single-coordinate +# marginalisation-invariance of Archimedean copulas). +# obscount(S) >= 2 → keep S, recursing. +function _prune_node(c::NestedArchimedeanCopula, O) + newleaf = Int[j for j in c.leafdims if j in O] + newkids = Any[] + for ch in c.children + if ch isa Tuple # flat panel (cc, ds) + cc, ds = ch + k = count(in(O), ds) + k == 0 && continue + if k == 1 + push!(newleaf, _the_one_observed_dim(ch, O)) # collapse to bare leaf + continue + end + push!(newkids, (cc, Int[j for j in ds if j in O])) # keep, drop unobserved + else # nested child + k = _obscount(ch, O) + k == 0 && continue + if k == 1 + push!(newleaf, _the_one_observed_dim(ch, O)) # cascade collapse + continue + end + pruned = _prune_node(ch, O) + if isempty(pruned.children) + # The pruned child has only bare leaves under its own generator; + # keep it as a flat panel (cc, ds) so its generator is preserved. + push!(newkids, (ArchimedeanCopula(length(pruned.leafdims), pruned.G), + copy(pruned.leafdims))) + else + push!(newkids, pruned) + end + end + end + surv = sort!(vcat(newleaf, [j for ch in newkids for j in _kid_dims(ch)])) + return NestedArchimedeanCopula{length(surv), typeof(c.G)}(c.G, newleaf, newkids, surv) +end + +# GLOBAL dims covered by a pruned child entry. +_kid_dims(ch::Tuple) = ch[2] +_kid_dims(ch::NestedArchimedeanCopula) = ch.dims + +function SubsetCopula(C::NestedArchimedeanCopula{d, TG}, dims::NTuple{p, Int}) where {d, TG, p} + # `subsetdims` already short-circuits p==1 (Uniform) and p==d (C unchanged), + # so here 2 <= p <= d-1. + O = Set{Int}(dims) + pruned = _prune_node(C, O) # NestedArchimedeanCopula on GLOBAL dims + # Genuinely-nested → flat collapse: every survivor lands directly under the + # root (no surviving children), so the observed marginal is a flat copula + # under the root generator. + isempty(pruned.children) && return ArchimedeanCopula(p, C.G) + # Relabel surviving GLOBAL dims to 1:p in increasing global-dim order. The + # remap Dict covers exactly the surviving dims (required by `_remap_dims`). + surv = pruned.dims + remap = Dict(surv[i] => i for i in eachindex(surv)) + return _remap_dims(pruned, remap) +end + +# ---- (2) DistortionFromCop: closed-form conditional marginal U_i | U_js ------ + +""" + NestedDistortion{TC,p} <: Distortion + +Closed-form conditional marginal `U_i | U_js = u_js` of a +[`NestedArchimedeanCopula`](@ref). Its `cdf(D, u_i)` is the mixed partial of the +nested CDF over the conditioned set `js` (with `i` and every other coordinate +entering only as CDF arguments), divided by the observed-marginal density +`c_O = pdf(subsetdims(C, js), u_js)`. This routes the numerator through our +O(d²) Faà di Bruno tree walk rather than ForwardDiff. Handles general `p`, so it +is reused for each per-coordinate distortion the generic `ConditionalCopula` +constructor builds in the multi-unobserved case. +""" +struct NestedDistortion{TC, p} <: Distortion + C::TC + i::Int + js::NTuple{p, Int} + ujs::NTuple{p, Float64} + logden::Float64 +end + +function DistortionFromCop(C::NestedArchimedeanCopula{D}, js::NTuple{p, Int}, + ujs::NTuple{p, Float64}, i::Int) where {D, p} + # den = c_O = pdf of the observed marginal. Identical to upstream's generic + # DistortionFromCop.den, so num/den stays consistent. For p==1 subsetdims + # returns Uniform() ⇒ den = 1; otherwise it is our pruned-tree multivariate + # pdf. Do NOT assert p==D-1: condition() builds DistortionFromCop for EVERY + # i∉js, so in the multi-unobserved case p < D-1. + den = p == 1 ? Distributions.pdf(subsetdims(C, js), ujs[1]) : + Distributions.pdf(subsetdims(C, js), collect(ujs)) + return NestedDistortion{typeof(C), p}(C, i, js, ujs, log(float(den))) +end + +function Distributions.logcdf(D::NestedDistortion, ui::Real) + # Boundary guards keep the generic Distortion.quantile bisection well-posed + # and logcdf monotone: P(U_i ≤ 0 | ·) = 0 ⇒ logcdf = -Inf; P(U_i ≤ 1 | ·) = 1 + # ⇒ logcdf = 0. + ui <= 0 && return -Inf + ui >= 1 && return 0.0 + d = length(D.C) + T = float(promote_type(typeof(ui), Float64)) + u = ones(T, d) + for k in 1:length(D.js) + u[D.js[k]] = T(D.ujs[k]) + end + u[D.i] = T(ui) + # Observed/differentiated = js only; dim i AND every other unobserved coord + # are censored (enter the argument-sum only, no differentiation). + cens = trues(d) + for j in D.js + cens[j] = false + end + return _censored_copula_logpdf(D.C, u, cens, T) - D.logden +end + +Distributions.cdf(D::NestedDistortion, ui::Real) = exp(Distributions.logcdf(D, ui)) diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 4d42c9f8..540b797d 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -1,5 +1,6 @@ # Tests for NestedArchimedeanCopula: the nested-Archimedean density and its -# optional per-variable censored (survival) likelihood (Yang & Li, arXiv:2605.23134). +# per-variable censoring as an EMERGENT capability of the standard +# condition + subsetdims framework (Yang & Li, arXiv:2605.23134). # # Coverage: # 1. Flat dispatch — a leaves-only declaration returns the native @@ -9,15 +10,32 @@ # ForwardDiff. This shares no code path with the Faà di Bruno recursion. # 3. Uncensored density vs an EXTERNAL reference (acopula log-likelihoods, # committed in test/data/nested/). -# 4. Censored likelihood vs the same independent ForwardDiff reference (mixed -# partial over the observed dims only), incl. the bivariate Clayton -# closed form; plus the omitted-mask == plain-density default. +# 4. Per-variable censoring via the gist recipe +# `logpdf(subsetdims(X,O),x_O) + logcdf_or_cdf(condition(X,O,x_O),x_C)`, +# checked against the SAME independent ForwardDiff references (mixed partial +# over the observed dims), incl. the bivariate Clayton closed form, plus a +# fast-path type probe (condition returns NestedDistortion) and the +# multi-unobserved generic ForwardDiff fallback. +# 4b. SklarDist survival likelihood via condition + subsetdims on the data scale, +# incl. the Distributions.censored == -Inf contrast. # 5. Heterogeneous (mixed-family) and arbitrary-depth nesting build & are finite. # 6. Constructor errors (bad tiling) and a fit/smoke usage of logpdf. -using Test, Copulas, Distributions, ForwardDiff, DelimitedFiles -import Copulas: Generator, ϕ, ϕ⁻¹ +using Test, Copulas, Distributions, ForwardDiff, DelimitedFiles, Random +import Copulas: Generator, ϕ, ϕ⁻¹, ϕ⁻¹⁽¹⁾, ϕ⁽ᵏ⁾ import Copulas: ClaytonGenerator, GumbelGenerator, FrankGenerator, JoeGenerator +import Copulas: NestedDistortion, subsetdims, condition + +# Seeded RNG, matching runtests' `StableRNG(123)` when StableRNGs is on the path +# (the package test environment); falls back to a seeded Xoshiro so this file +# also runs standalone via `--project=.`. The value is invariant either way: +# every draw feeds BOTH sides of each equality. +const _NEST_RNG = try + @eval import StableRNGs + StableRNGs.StableRNG(123) +catch + Random.Xoshiro(123) +end # --------------------------------------------------------------------------- # Independent reference: nested-Archimedean CDF assembled straight from the @@ -76,7 +94,40 @@ function ref_logpdf(s::RefSpec) return log(abs(mixed_partial(f, u, obs))) end +# Express per-variable censoring through the STANDARD condition + subsetdims API +# (the "gist recipe"). `δ[i] == true` ⇒ coordinate `i` is censored/unobserved. +# logL_O = logpdf(subsetdims(C,O), u_O) + logcdf_or_cdf(condition(C,O,u_O), u_C) +# with the degenerate masks handled explicitly (no observed ⇒ log cdf; no +# censored ⇒ plain logpdf). +logcdf_or_cdf(D, u::Real) = logcdf(D, u) +logcdf_or_cdf(S, u::AbstractVector) = log(cdf(S, u)) +function gist_censored(C, u, δ) + obs = Tuple(i for i in eachindex(δ) if !δ[i]) + cen = [i for i in eachindex(δ) if δ[i]] + isempty(cen) && return logpdf(C, u) + isempty(obs) && return log(cdf(C, u)) + u_obs = length(obs) == 1 ? u[obs[1]] : [u[i] for i in obs] + u_cen = length(cen) == 1 ? u[cen[1]] : [u[i] for i in cen] + return logpdf(subsetdims(C, obs), u_obs) + + logcdf_or_cdf(condition(C, obs, u_obs), u_cen) +end +# Data-scale analogue on a SklarDist (subsetdims + condition push-forwards). +function gist_sklar(S, x, δ) + obs = Tuple(i for i in eachindex(δ) if !δ[i]) + cen = [i for i in eachindex(δ) if δ[i]] + isempty(cen) && return logpdf(S, x) + isempty(obs) && return log(cdf(S, x)) + x_obs = length(obs) == 1 ? x[obs[1]] : [x[i] for i in obs] + x_cen = length(cen) == 1 ? x[cen[1]] : [x[i] for i in cen] + return logpdf(subsetdims(S, obs), x_obs) + + logcdf_or_cdf(condition(S, obs, x_obs), x_cen) +end + @testset "NestedArchimedeanCopula" begin + # Local seeded RNG so this file is self-contained standalone AND under + # runtests.jl (where a `const rng = StableRNG(123)` also exists); every draw + # feeds both sides of each equality, so the value is invariant. + rng = _NEST_RNG # ----------------------------------------------------------------------- # 1. Flat dispatch → native ArchimedeanCopula, bit-for-bit logpdf. @@ -155,55 +206,75 @@ end end # ----------------------------------------------------------------------- - # 4. Copula-scale censored partial (censored_logpdf) vs references. + # 4. Per-variable censoring via condition + subsetdims (gist recipe). + # Reproduces the SAME independent references the old bespoke API checked, + # now through the STANDARD API — proving the specialised condition / + # subsetdims path is equivalent (the denominator c_O cancels exactly). # ----------------------------------------------------------------------- - @testset "censored_logpdf (copula scale) vs references" begin - # Bivariate Clayton(3), dim 2 right-censored: closed form ∂C/∂u₁. - θ = big(3.0) - u1 = BigFloat(cdf(Exponential(1.0), 0.5)) - u2 = BigFloat(cdf(Exponential(1.0), 1.0)) + @testset "per-variable censoring via condition + subsetdims (gist recipe)" begin + # (a) Bivariate Clayton(3), dim 2 censored: gist == closed form ∂C/∂u₁. + θ = 3.0 + u1 = cdf(Exponential(1.0), 0.5) + u2 = cdf(Exponential(1.0), 1.0) Cbiv = NestedArchimedeanCopula(ClaytonGenerator(2.0); # outer irrelevant: single panel children = [ClaytonCopula(2, 3.0)]) - v = censored_logpdf(Cbiv, [u1, u2], [false, true]; T = BigFloat) dC_du1 = u1^(-θ - 1) * (u1^(-θ) + u2^(-θ) - 1)^(-(1 / θ + 1)) - @test Float64(v) ≈ Float64(log(dC_du1)) atol = 1e-9 + @test gist_censored(Cbiv, [u1, u2], [false, true]) ≈ log(dC_du1) atol = 1e-9 + # Explicit decomposition: subsetdims p==1 ⇒ Uniform (base term 0), so the + # whole value is logcdf(condition) ⇒ den cancels. + @test logpdf(subsetdims(Cbiv, (1,)), u1) + + logcdf(condition(Cbiv, (1,), u1), u2) ≈ log(dC_du1) atol = 1e-9 + @test logpdf(subsetdims(Cbiv, (1,)), u1) == 0.0 # Uniform marginal + # Fast-path probe: condition returns our specialised NestedDistortion. + @test condition(Cbiv, (1,), u1) isa NestedDistortion - # Flat ArchimedeanCopula: censored_logpdf via ϕ⁽ᵏ⁾ matches the - # mixed-partial closed form. Exercises the general (non-nested) path. - import Copulas: ϕ⁻¹, ϕ⁻¹⁽¹⁾, ϕ⁽ᵏ⁾ + # (b) Flat ArchimedeanCopula via the SAME gist recipe, against the + # ϕ⁽ᵏ⁾ + ϕ⁻¹′ closed form (upstream ArchimedeanDistortion / subsetdims). Cf = ClaytonCopula(4, 2.0) uf = [0.5, 0.8, 0.3, 0.6]; δf = [false, true, false, true] G = Cf.G; ssum = sum(ϕ⁻¹(G, uf[i]) for i in 1:4); k = count(!, δf) ref_cop = log(abs(ϕ⁽ᵏ⁾(G, k, ssum))) + sum(log(abs(ϕ⁻¹⁽¹⁾(G, uf[i]))) for i in 1:4 if !δf[i]) - @test censored_logpdf(Cf, uf, δf) ≈ ref_cop atol = 1e-10 + @test gist_censored(Cf, uf, δf) ≈ ref_cop atol = 1e-10 - # Nested, censoring across sectors: root Clayton(2) over Clayton(5) + - # Gumbel(3), one censored leaf in each sector + a censored root leaf. + # (c) Nested, multi-unobserved (2 censored): root Clayton(2)-leaf over + # Clayton(5) + Gumbel(3), one censored leaf in each sector + a + # censored root leaf. Exercises the generic ConditionalCopula + + # ForwardDiff fallback (|unobserved| ≥ 2). C = NestedArchimedeanCopula(ClaytonGenerator(2.0); leaves = [1], children = [ClaytonCopula(2, 5.0), GumbelCopula(2, 3.0)]) - u = big.([0.40, 0.30, 0.70, 0.55, 0.80]) + u = [0.40, 0.30, 0.70, 0.55, 0.80] δ = [false, false, true, true, false] spec = RefSpec(ClaytonGenerator(big(2.0)), - [(u[1], false)], - [RefSpec(ClaytonGenerator(big(5.0)), [(u[2], false), (u[3], true)]), - RefSpec(GumbelGenerator(big(3.0)), [(u[4], true), (u[5], false)])]) - @test censored_logpdf(C, u, δ; T = BigFloat) ≈ ref_logpdf(spec) atol = 1e-9 + [(big(u[1]), false)], + [RefSpec(ClaytonGenerator(big(5.0)), [(big(u[2]), false), (big(u[3]), true)]), + RefSpec(GumbelGenerator(big(3.0)), [(big(u[4]), true), (big(u[5]), false)])]) + @test gist_censored(C, u, δ) ≈ Float64(ref_logpdf(spec)) atol = 1e-7 + + # (c') Single-censored nested ⇒ the FAST NestedDistortion path. Observe + # all of {1,2,3,4}, censor only dim 5. + δ1 = [false, false, false, false, true] + spec1 = RefSpec(ClaytonGenerator(big(2.0)), + [(big(u[1]), false)], + [RefSpec(ClaytonGenerator(big(5.0)), [(big(u[2]), false), (big(u[3]), false)]), + RefSpec(GumbelGenerator(big(3.0)), [(big(u[4]), false), (big(u[5]), true)])]) + @test condition(C, (1, 2, 3, 4), [u[1], u[2], u[3], u[4]]) isa NestedDistortion + @test gist_censored(C, u, δ1) ≈ Float64(ref_logpdf(spec1)) atol = 1e-9 - # All observed == plain density; all censored == log cdf. + # (d) Degenerate masks: all observed == plain logpdf; all censored == log cdf. C2 = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(3, 5.0), ClaytonCopula(3, 6.0)]) u2v = big.([0.30, 0.55, 0.70, 0.40, 0.62, 0.80]) - @test censored_logpdf(C2, u2v, falses(6); T = BigFloat) ≈ logpdf(C2, u2v) atol = 1e-30 - @test censored_logpdf(C2, u2v, trues(6); T = BigFloat) ≈ log(cdf(C2, u2v)) atol = 1e-9 + @test gist_censored(C2, u2v, falses(6)) == logpdf(C2, u2v) + @test gist_censored(C2, u2v, trues(6)) ≈ log(cdf(C2, u2v)) atol = 1e-30 end # ----------------------------------------------------------------------- - # 4b. SklarDist survival likelihood (the user-facing censored API). + # 4b. SklarDist survival likelihood via condition + subsetdims (data scale). # ----------------------------------------------------------------------- - @testset "SklarDist survival likelihood" begin - # Bivariate Clayton(3), dim 2 right-censored — closed form on data scale. + @testset "SklarDist survival via condition + subsetdims" begin + # (a) Bivariate Clayton(3), dim 2 right-censored — closed form, data scale. θ = 3.0 m = (Exponential(1.0), Exponential(1.0)) S = SklarDist(ClaytonCopula(2, θ), m) @@ -211,21 +282,23 @@ end u1 = cdf(m[1], x1); u2 = cdf(m[2], c2) dCdu1 = u1^(-θ - 1) * (u1^(-θ) + u2^(-θ) - 1)^(-1 / θ - 1) expected = log(dCdu1) + logpdf(m[1], x1) - @test logpdf(S, [x1, c2]; censored = [false, true]) ≈ expected atol = 1e-10 + @test gist_sklar(S, [x1, c2], [false, true]) ≈ expected atol = 1e-10 - # Omitted mask == the plain joint density. - @test logpdf(S, [x1, c2]; censored = [false, false]) == logpdf(S, [x1, c2]) + # (b) Omitted mask == the plain joint density. + @test gist_sklar(S, [x1, c2], [false, false]) ≈ logpdf(S, [x1, c2]) atol = 1e-12 - # Finite where the Distributions.censored route is -Inf. + # (c) Finite where the Distributions.censored route is -Inf — the + # motivating contrast for the per-variable censoring facility. Sc = SklarDist(ClaytonCopula(2, θ), (m[1], censored(m[2], upper = c2))) @test logpdf(Sc, [x1, c2]) == -Inf - @test isfinite(logpdf(S, [x1, c2]; censored = [false, true])) + @test isfinite(gist_sklar(S, [x1, c2], [false, true])) - # All censored == log cdf of the joint model. - @test logpdf(S, [x1, c2]; censored = [true, true]) ≈ log(cdf(S, [x1, c2])) atol = 1e-10 + # (d) All censored == log cdf of the joint model. + @test gist_sklar(S, [x1, c2], [true, true]) ≈ log(cdf(S, [x1, c2])) atol = 1e-10 - # Nested copula on the data scale: SklarDist factor == observed-margin - # densities + the copula-scale censored_logpdf at the PIT point. + # (e) Nested copula on the data scale, multi-censored: the gist recipe is + # finite and matches the observed-marginal densities + the nested + # mixed partial at the PIT point (independent reference). C = NestedArchimedeanCopula(ClaytonGenerator(2.0); children = [ClaytonCopula(3, 5.0), GumbelCopula(3, 3.0)]) margins = ntuple(_ -> Exponential(1.0), 6) @@ -234,8 +307,10 @@ end δ = [false, true, false, false, true, false] u = [cdf(margins[i], x[i]) for i in 1:6] margin_ll = sum(logpdf(margins[i], x[i]) for i in 1:6 if !δ[i]) - @test logpdf(Sn, x; censored = δ) ≈ margin_ll + censored_logpdf(C, u, δ) atol = 1e-10 - @test isfinite(logpdf(Sn, x; censored = δ)) + # copula-scale mixed partial over the observed coords (independent ref via gist). + cop_ll = gist_censored(C, u, δ) + @test gist_sklar(Sn, x, δ) ≈ margin_ll + cop_ll atol = 1e-7 + @test isfinite(gist_sklar(Sn, x, δ)) end # ----------------------------------------------------------------------- From 477df1cd43a7a79fb0786c8a86a3e57cd3c574a9 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Sat, 30 May 2026 00:09:29 -0400 Subject: [PATCH 12/25] =?UTF-8?q?Route=20multi-censored=20nested=20conditi?= =?UTF-8?q?onal=20CDF=20through=20the=20Fa=C3=A0=20di=20Bruno=20walk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The single-censored conditional and the observed-marginal density already used our nested kernel, but the MULTI-censored-dim conditional CDF (|censored| >= 2) went through SklarDist(ConditionalCopula, …), whose _cdf calls the generic _partial_cdf — i.e. upstream's nested ForwardDiff over the closed-form CDF. That nests one ForwardDiff.derivative per observed coordinate: Dual-of-Dual type explosion at compile time, O(2^k) at run time, infeasible in high dimension. Add a _partial_cdf(C::NestedArchimedeanCopula, is, js, uᵢₛ, uⱼₛ) specialisation that returns exp(_censored_copula_logpdf(C, assembled_u, cens, T)), the order-|js| mixed partial via our polynomial Faà di Bruno tree walk. ConditionalCopula stores its inner copula in an abstract field but _cdf calls _partial_cdf(CC.C, …), which dispatches on the runtime type (concretely nested), so the override is selected without ConditionalCopula carrying the inner type. Net: the gist recipe routes through our algorithm for ANY number of censored coordinates — zero ForwardDiff. - Tests 50/50 -> 58/58: tighten the multi-censored gist tolerance and add a direct-kernel-equality + CDF-contract (monotone, [0,1]) testset. JAX-CSV bit-identity regression untouched and green; full ConditionalDistribution.jl suite green (non-nested conditioning/sampling unaffected). - Docs/comments updated: multi-censored now uses the tree walk for any censoring count; precision caveat (Float64 high-order fast-tail -> BigFloat) noted. Caveat (documented): end-to-end BigFloat *through* condition() is not yet enabled — upstream's ConditionalCopula/DistortionFromCop store Float64 fields; BigFloat reaches the kernel via direct calls or the single-censored path. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 25 +++++---- src/NestedArchimedeanCopula.jl | 19 ++++--- src/nested/NestedConditioning.jl | 57 +++++++++++++++---- test/NestedArchimedeanCopula.jl | 94 ++++++++++++++++++++++++++++++-- 4 files changed, 160 insertions(+), 35 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index 86db2c38..9e80e5ff 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -119,8 +119,8 @@ the observed coordinates, because the denominator ``c_O`` in `condition` cancels against the `subsetdims` marginal density. Both factors route through the Faà di Bruno tree walk via the `subsetdims` / `condition` specialisations for this type — no -ForwardDiff for the observed-marginal density nor (when a single coordinate is -censored) the conditional CDF. +ForwardDiff for the observed-marginal density nor for the conditional CDF (for +any number of censored coordinates). ```@example nested using Distributions @@ -144,14 +144,19 @@ empty (all observed) the recipe reduces to the ordinary joint density `subsetdims` support — flat [`ArchimedeanCopula`](@ref) as well as nested trees. !!! note "Multi-censored conditional CDF" - When two or more coordinates are censored, the conditional CDF currently - falls back to upstream's generic (ForwardDiff over the closed-form nested - CDF) path — correct, but slower than the single-censored fast tree walk. A - fast multi-censored tree-walk path is a planned follow-up. The generic - `Float64` ForwardDiff path can also lose precision (and may return `NaN`) at - high differentiation order for fast-tail generators; pass `BigFloat` - coordinates if the multi-censored fallback is numerically fragile, mirroring - the density-precision guidance above. + With two or more censored coordinates the conditional CDF is the mixed + partial of the nested CDF over the *observed* coordinates. The generic path + takes this by nesting one `ForwardDiff.derivative` per observed coordinate — + cost exponential in the number of observed dims, infeasible in high + dimension. A `_partial_cdf` specialisation routes it instead through the same + polynomial Faà di Bruno tree walk as the single-censored case (selected on the + conditional copula's concrete nested inner type), for any number of censored + coordinates. + + At high differentiation order for fast-tail generators the `Float64` sum can + lose precision; pass `BigFloat` coordinates to recover the exact value (as for + the density). End-to-end `BigFloat` through `condition()` is not yet enabled — + upstream stores the conditioning values as `Float64`. !!! warning "Do not use `Distributions.censored` margins" `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`: a censored diff --git a/src/NestedArchimedeanCopula.jl b/src/NestedArchimedeanCopula.jl index 47b957f4..22b42b51 100644 --- a/src/NestedArchimedeanCopula.jl +++ b/src/NestedArchimedeanCopula.jl @@ -212,15 +212,18 @@ function Distributions._logpdf(C::NestedArchimedeanCopula{d}, u) where {d} end # Nested CDF in closed form (ϕ_root ∘ Σ ϕ⁻¹), avoiding the generic numerical -# integration fallback. This is also the all-censored limit of the survival -# likelihood (the empty-observed gist recipe `log cdf(C, u)`), and the -# closed-form CDF that upstream's generic `_partial_cdf`/ForwardDiff path -# differentiates for the multi-censored-dim `ConditionalCopula` case. +# integration fallback. This is the joint CDF used by `rosenblatt` and is also +# the all-censored limit of the survival likelihood (the empty-observed gist +# recipe `log cdf(C, u)`). NOTE: the MULTI-censored-dim `ConditionalCopula` +# conditional CDF is NO LONGER obtained by ForwardDiff-differentiating this +# closed form — it is computed directly by our Faà di Bruno kernel via the +# `_partial_cdf(::NestedArchimedeanCopula, …)` override in +# nested/NestedConditioning.jl. The `eltype`-preserving `T` below still lets +# ForwardDiff `Dual`s flow through for any residual generic differentiation of +# the CDF (e.g. non-nested callers), but it is not the multi-censored path. function _cdf(C::NestedArchimedeanCopula{d}, u) where {d} - # Use the input element type when it is a (non-integer) real so that - # ForwardDiff `Dual`s flow through unchanged — this closed-form CDF is what - # upstream's generic `_partial_cdf`/ForwardDiff path differentiates for the - # multi-censored-dim `ConditionalCopula` case. + # Preserve the input element type when it is a (non-integer) real so that + # ForwardDiff `Dual`s flow through unchanged for any generic caller. Tu = eltype(u) T = Tu <: Integer ? Float64 : (Tu <: Real ? float(Tu) : Float64) tree = _build_tree(C, u, falses(d), T) diff --git a/src/nested/NestedConditioning.jl b/src/nested/NestedConditioning.jl index 83e9e66f..952caba4 100644 --- a/src/nested/NestedConditioning.jl +++ b/src/nested/NestedConditioning.jl @@ -31,17 +31,25 @@ # per-coordinate distortion that the generic ConditionalCopula constructor # builds for the multi-unobserved case. # -# DEFERRED FOLLOW-UP (NOT in this PR): the MULTI-conditioned-dim conditional CDF -# (|unobserved| ≥ 2) is NOT routed to the fast tree walk. `ConditionalCopula` -# stores the inner copula as a FIELD `C::Copula{D}` (Conditioning.jl), not a type -# parameter, so `_cdf(::ConditionalCopula)` cannot dispatch on -# "inner == NestedArchimedeanCopula". The multi-unobserved conditional CDF -# therefore falls back to upstream's GENERIC `_partial_cdf` (= ForwardDiff over -# our closed-form `_cdf(::NestedArchimedeanCopula)`), which is CORRECT but slower -# (O(2^k) ForwardDiff in Float64 duals rather than the O(d²) tree walk). A future -# PR can add a fast multi-dim path, likely requiring an upstream change to make -# `ConditionalCopula` carry the inner copula's concrete type. Do NOT hack -# ConditionalCopula dispatch here. +# MULTI-conditioned-dim conditional CDF (|unobserved| ≥ 2): now ALSO routed to the +# fast tree walk by the `_partial_cdf(C::NestedArchimedeanCopula, is, js, uᵢₛ, uⱼₛ)` +# specialisation at the bottom of this file (section (3)). `ConditionalCopula` +# stores its inner copula in the abstract FIELD `C::Copula{D}` (Conditioning.jl), +# but `_cdf(::ConditionalCopula)` calls `_partial_cdf(CC.C, …)`, which dispatches +# on the RUNTIME type of `CC.C` — concretely a `NestedArchimedeanCopula` — so our +# method is selected without `ConditionalCopula` needing to carry the inner type. +# The override assembles `u` (js→uⱼₛ, is→uᵢₛ, others→1) and returns +# `exp(_censored_copula_logpdf(C, u, cens, T))` with `cens[k] = !(k ∈ js)`. Thus +# BOTH `DistortionFromCop.cdf` (single-conditioned) and `ConditionalCopula._cdf` +# (multi-conditioned) compute the conditional CDF with our O(d²) Faà di Bruno +# walk — ZERO ForwardDiff for ANY number of censored dims. +# +# CAVEAT (forward-compat only): end-to-end BigFloat MULTI-censored *conditioning* +# via `condition()` is not yet enabled — upstream's `ConditionalCopula`/ +# `DistortionFromCop` `uⱼₛ`/`den` fields are Float64-typed, so the standard API +# delivers Float64 to the override. Threading `T` future-proofs it (and matches +# `_assemble`'s own promotion), but BigFloat currently flows only via direct +# kernel calls or the single-censored `NestedDistortion.logcdf` path. # ============================================================================= # ---- (1) SubsetCopula: prune the tree to the observed marginal -------------- @@ -201,3 +209,30 @@ function Distributions.logcdf(D::NestedDistortion, ui::Real) end Distributions.cdf(D::NestedDistortion, ui::Real) = exp(Distributions.logcdf(D, ui)) + +# ---- (3) Multi-conditioned-dim conditional CDF: route Site B through our kernel +# +# Override the generic `_partial_cdf(C, is, js, uᵢₛ, uⱼₛ)` (Conditioning.jl:31), +# the order-|js| mixed partial of `cdf(C, ·)` over the observed dims `js`. The +# generic body takes it by NESTING |js| `ForwardDiff.derivative` calls — Dual-of- +# Dual type explosion at compile time, O(2^|js|) at run time — so it is infeasible +# in high dimension (many observed coordinates). Our Faà di Bruno walk is +# polynomial and handles any order. `_cdf(::ConditionalCopula)` (Conditioning.jl:170) +# calls `_partial_cdf(CC.C, …)`; `CC.C` sits in an abstract field but dispatches on +# its RUNTIME type (concretely nested), so this method is selected without +# `ConditionalCopula` carrying the inner type — routing the multi-conditioned-dim +# (|unobserved| ≥ 2) conditional CDF through our walk, no ForwardDiff. +# +# Body: assemble `u` (js→uⱼₛ, is→uᵢₛ, others→1), differentiate exactly `js` +# (cens[k] = !(k∈js)), return exp(kernel). A CDF's mixed partial over a coordinate +# subset is a non-negative sub-density, so exp(log|·|) == the value. `T` is +# threaded for a future BigFloat upper layer; the standard API stores Float64. +function _partial_cdf(C::NestedArchimedeanCopula{D}, is, js, uᵢₛ, uⱼₛ) where {D} + T = float(promote_type(eltype(typeof(uᵢₛ)), eltype(typeof(uⱼₛ)))) + u = _assemble(D, is, js, uᵢₛ, uⱼₛ) # js→uⱼₛ, is→uᵢₛ, others→1 + cens = trues(D) + for j in js + cens[j] = false # differentiate ONLY the conditioned dims + end + return exp(_censored_copula_logpdf(C, u, cens, T)) +end diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 540b797d..dc28219e 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -24,7 +24,7 @@ using Test, Copulas, Distributions, ForwardDiff, DelimitedFiles, Random import Copulas: Generator, ϕ, ϕ⁻¹, ϕ⁻¹⁽¹⁾, ϕ⁽ᵏ⁾ import Copulas: ClaytonGenerator, GumbelGenerator, FrankGenerator, JoeGenerator -import Copulas: NestedDistortion, subsetdims, condition +import Copulas: NestedDistortion, subsetdims, condition, _censored_copula_logpdf # Seeded RNG, matching runtests' `StableRNG(123)` when StableRNGs is on the path # (the package test environment); falls back to a seeded Xoshiro so this file @@ -239,8 +239,12 @@ end # (c) Nested, multi-unobserved (2 censored): root Clayton(2)-leaf over # Clayton(5) + Gumbel(3), one censored leaf in each sector + a - # censored root leaf. Exercises the generic ConditionalCopula + - # ForwardDiff fallback (|unobserved| ≥ 2). + # censored root leaf. Multi-censored (|unobserved| = 2): now routed + # through our Faà di Bruno tree walk via the `_partial_cdf` override + # (no ForwardDiff). The RefSpec reference is an INDEPENDENT + # BigFloat-ForwardDiff CDF mixed partial that shares no code with our + # kernel, so matching it to 1e-10 (the old generic path was asserted + # only at the loose 1e-7) is evidence the multi-censored CDF is exact. C = NestedArchimedeanCopula(ClaytonGenerator(2.0); leaves = [1], children = [ClaytonCopula(2, 5.0), GumbelCopula(2, 3.0)]) @@ -250,7 +254,7 @@ end [(big(u[1]), false)], [RefSpec(ClaytonGenerator(big(5.0)), [(big(u[2]), false), (big(u[3]), true)]), RefSpec(GumbelGenerator(big(3.0)), [(big(u[4]), true), (big(u[5]), false)])]) - @test gist_censored(C, u, δ) ≈ Float64(ref_logpdf(spec)) atol = 1e-7 + @test gist_censored(C, u, δ) ≈ Float64(ref_logpdf(spec)) atol = 1e-10 # (c') Single-censored nested ⇒ the FAST NestedDistortion path. Observe # all of {1,2,3,4}, censor only dim 5. @@ -307,12 +311,90 @@ end δ = [false, true, false, false, true, false] u = [cdf(margins[i], x[i]) for i in 1:6] margin_ll = sum(logpdf(margins[i], x[i]) for i in 1:6 if !δ[i]) - # copula-scale mixed partial over the observed coords (independent ref via gist). + # copula-scale mixed partial over the observed coords (data-scale gist + # should equal margin densities + the copula-scale gist at the PIT point). cop_ll = gist_censored(C, u, δ) - @test gist_sklar(Sn, x, δ) ≈ margin_ll + cop_ll atol = 1e-7 + # Tightened 1e-7 → 1e-10: both sides route the multi-censored conditional + # CDF through our kernel now, so the data-scale/copula-scale split agrees + # to machine precision. (Self-consistency via gist_censored — NOT an + # independent reference; the independent proof is testset 4c below.) + @test gist_sklar(Sn, x, δ) ≈ margin_ll + cop_ll atol = 1e-10 @test isfinite(gist_sklar(Sn, x, δ)) end + # ----------------------------------------------------------------------- + # 4c. Multi-censored conditional CDF routes through OUR Faà di Bruno kernel + # (not ForwardDiff). The standard API (condition + subsetdims) now CALLS + # `_censored_copula_logpdf` for any number of censored dims, via the + # `_partial_cdf(::NestedArchimedeanCopula, …)` override. Fixed literals. + # ----------------------------------------------------------------------- + @testset "multi-censored conditional CDF routes through our kernel" begin + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + leaves = [1], + children = [ClaytonCopula(2, 5.0), GumbelCopula(2, 3.0)]) + u = [0.40, 0.30, 0.70, 0.55, 0.80] + δ = [false, false, true, true, false] # censor dims 3,4 (|unobserved| = 2) + + # (i) DIRECT-KERNEL EQUALITY. The gist via the standard API equals a DIRECT + # `_censored_copula_logpdf` call to machine precision — the load-bearing + # proof that `condition()`/`_cdf` now CALLS our kernel. (Pre-override the + # LHS was ForwardDiff over the closed-form CDF; it happened to agree on + # this benign case to ~1e-15 too, so the *independent BigFloat reference* + # is what proves exactness, while this equality proves the code PATH.) + api = gist_censored(C, u, δ) + kern = _censored_copula_logpdf(C, u, δ, Float64) + @test api ≈ kern atol = 1e-10 + # exactness witness against the BigFloat kernel (no Float64 roundoff in ref). + @test api ≈ Float64(_censored_copula_logpdf(C, big.(u), δ, BigFloat)) atol = 1e-9 + + # (ii) CDF CONTRACT on the real multi-censored ConditionalCopula. Build it + # via condition(); cdf must stay in [0,1] and be non-decreasing on a + # fixed interior increasing v-grid. Catches sign/assembly errors that a + # single-point equality misses. Interior grid + tolerance-relaxed + # monotone check avoid boundary/quantile flakiness. + obs = Tuple(i for i in 1:5 if !δ[i]) + CC = condition(C, obs, [u[i] for i in obs]) + vgrid = [[0.2, 0.2], [0.4, 0.3], [0.6, 0.55], [0.8, 0.85], [0.95, 0.97]] + vals = [cdf(CC, v) for v in vgrid] + @test all(0.0 .<= vals .<= 1.0) + @test all(vals[k + 1] >= vals[k] - 1e-12 for k in 1:length(vals) - 1) + + # (iii) BigFloat-ROUTABILITY + boundary robustness (the DEFENSIBLE adversarial + # win). Standard-API conditioning differentiates a closed-form CDF in + # Float64 (ForwardDiff); at high differentiation order for a fast-tail + # generator BOTH Float64 paths (ForwardDiff AND our Float64 kernel) lose + # precision and eventually NaN — so we do NOT claim the Float64 kernel + # beats Float64 ForwardDiff. The universal advantage is that the kernel + # computes the SAME quantity exactly in BigFloat, which the Float64-locked + # standard API cannot reach. Verify: (a) a moderately deep multi-censored + # point is finite and BigFloat-exact; (b) at a deeper point the Float64 + # ForwardDiff conditional CDF is non-finite (NaN) yet the BigFloat kernel + # is finite and matches. + Cj = NestedArchimedeanCopula(JoeGenerator(1.2); + children = [JoeCopula(4, 15.0), JoeCopula(4, 15.0)]) + δj = [false, false, false, false, false, false, false, true] # observe 7 (order 7) + # (a) moderate point: finite under the Float64 kernel AND BigFloat-exact. + um = fill(0.99, 8) + gm = gist_censored(Cj, um, δj) + @test isfinite(gm) + @test gm ≈ Float64(_censored_copula_logpdf(Cj, big.(um), δj, BigFloat)) atol = 1e-8 + # (b) deep tail: upstream's Float64 ForwardDiff conditional CDF NaNs, but the + # BigFloat kernel is exact. is/js are the override's upstream slot names: + # is = censored dim (8), js = observed dims (1..7). + ud = fill(0.999999, 8) + fd_f64 = Copulas._partial_cdf(Cj, (8,), (1, 2, 3, 4, 5, 6, 7), + (ud[8],), (ud[1], ud[2], ud[3], ud[4], ud[5], ud[6], ud[7])) + # NOTE: this `_partial_cdf` call goes through OUR override (Cj is nested), so + # in Float64 it now follows the kernel — which ALSO NaNs at this depth. The + # point being asserted is that the Float64 path (whichever) is non-finite here + # while BigFloat recovers the exact value, NOT that one Float64 path beats the + # other. + @test !isfinite(fd_f64) + big_log = _censored_copula_logpdf(Cj, big.(ud), + [false, false, false, false, false, false, false, true], BigFloat) + @test isfinite(big_log) + end + # ----------------------------------------------------------------------- # 5. Arbitrary-depth nesting builds, is finite, and matches the reference. # ----------------------------------------------------------------------- From 5d44745bf09bd34de6fff64469aa7502a5dd75da Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Sun, 31 May 2026 23:56:56 -0400 Subject: [PATCH 13/25] fix: subsetdims respects requested coordinate order for nested copulas SubsetCopula(::NestedArchimedeanCopula, dims) relabelled the pruned marginal by SORTED surviving dims, ignoring the requested order. For a non-exchangeable nested structure this returned the wrong marginal under a reordered subset (e.g. subsetdims(C, (3,1)) gave the (1,3) copula). Relabel by the requested `dims` order instead. (Regression test lands with the nested test-suite update.) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/nested/NestedConditioning.jl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/nested/NestedConditioning.jl b/src/nested/NestedConditioning.jl index 952caba4..5e54289f 100644 --- a/src/nested/NestedConditioning.jl +++ b/src/nested/NestedConditioning.jl @@ -137,18 +137,19 @@ _kid_dims(ch::Tuple) = ch[2] _kid_dims(ch::NestedArchimedeanCopula) = ch.dims function SubsetCopula(C::NestedArchimedeanCopula{d, TG}, dims::NTuple{p, Int}) where {d, TG, p} - # `subsetdims` already short-circuits p==1 (Uniform) and p==d (C unchanged), - # so here 2 <= p <= d-1. + # `subsetdims` short-circuits p==1 (Uniform) and the identity `dims==1:d`, and + # asserts `p < d` otherwise, so here 2 <= p <= d-1 and `dims` may be a + # reordering (permutation) of the kept coordinates. O = Set{Int}(dims) pruned = _prune_node(C, O) # NestedArchimedeanCopula on GLOBAL dims # Genuinely-nested → flat collapse: every survivor lands directly under the # root (no surviving children), so the observed marginal is a flat copula - # under the root generator. + # under the root generator (exchangeable, so the request order is immaterial). isempty(pruned.children) && return ArchimedeanCopula(p, C.G) - # Relabel surviving GLOBAL dims to 1:p in increasing global-dim order. The - # remap Dict covers exactly the surviving dims (required by `_remap_dims`). - surv = pruned.dims - remap = Dict(surv[i] => i for i in eachindex(surv)) + # Relabel each REQUESTED global dim to its position in `dims`, preserving the + # requested order (`dims` may be a permutation of the surviving dims). All + # requested dims survive, so this Dict covers exactly the surviving dims. + remap = Dict(dims[i] => i for i in eachindex(dims)) return _remap_dims(pruned, remap) end From 8eb6f420b59fc77a81422ee0e6cd1a592cf7b747 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Sun, 31 May 2026 23:56:56 -0400 Subject: [PATCH 14/25] =?UTF-8?q?refactor:=20move=20Frank=20Taylor1=20?= =?UTF-8?q?=CF=95/=CF=95=E2=81=BB=C2=B9=20into=20the=20Frank=20generator?= =?UTF-8?q?=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relocate the Taylor1-specialised ϕ/ϕ⁻¹ methods for FrankGenerator (needed by the direct edge-composition path because Frank's θ>0 scalar forms use log1mexp, which has no Taylor1 method) from the standalone src/nested/FrankTaylorGenerator.jl into src/Generator/FrankGenerator.jl, and drop the now-unused include. No behaviour change. (A future TaylorSeries⊕LogExpFunctions extension giving log1mexp(::Taylor1) would retire these; the implicit edge-composition method already avoids them.) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/Copulas.jl | 1 - src/Generator/FrankGenerator.jl | 11 ++++++++++ src/nested/FrankTaylorGenerator.jl | 33 ------------------------------ 3 files changed, 11 insertions(+), 34 deletions(-) delete mode 100644 src/nested/FrankTaylorGenerator.jl diff --git a/src/Copulas.jl b/src/Copulas.jl index c478a514..d451f5b9 100644 --- a/src/Copulas.jl +++ b/src/Copulas.jl @@ -103,7 +103,6 @@ module Copulas # Nested (hierarchical) Archimedean copulas include("nested/NestedArchimedeanDensity.jl") - include("nested/FrankTaylorGenerator.jl") include("NestedArchimedeanCopula.jl") # Conditioning/subsetting fast paths (per-variable censoring is emergent here) include("nested/NestedConditioning.jl") diff --git a/src/Generator/FrankGenerator.jl b/src/Generator/FrankGenerator.jl index b8050c94..df770c07 100644 --- a/src/Generator/FrankGenerator.jl +++ b/src/Generator/FrankGenerator.jl @@ -55,6 +55,17 @@ function ϕ⁽ᵏ⁾(G::FrankGenerator, k::Int, t) return (-1)^k * (1 / G.θ) * PolyLog.reli(-(k - 1), -expm1(-G.θ) * exp(-t)) end ϕ⁻¹(G::FrankGenerator, t) = G.θ > 0 ? LogExpFunctions.log1mexp(-G.θ) - LogExpFunctions.log1mexp(-t*G.θ) : -log(expm1(-t*G.θ)/expm1(-G.θ)) + +# Taylor1-compatible ϕ / ϕ⁻¹: the θ>0 scalar forms above use `log1mexp`, which has +# no `TaylorSeries.Taylor1` method, so the nested direct edge composition (a jet +# over ϕ⁻¹_outer ∘ ϕ_inner) would fail when Frank appears in the tree. These add +# the equivalent θ≠0 closed forms built only from `expm1`/`log1p` (all Taylor1- +# compatible) — exactly the θ<0 branch forms, on a Taylor1 argument; the scalar +# path is untouched. (A future TaylorSeries⊕LogExpFunctions extension giving +# `log1mexp(::Taylor1)` would make these unnecessary; the implicit edge-composition +# method already avoids them, using only the closed-form ϕ⁽ᵏ⁾.) +ϕ(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} = -log1p(exp(-t) * expm1(-T(G.θ))) / T(G.θ) +ϕ⁻¹(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} = -log(expm1(-T(G.θ) * t) / expm1(-T(G.θ))) 𝒲₋₁(G::FrankGenerator, d::Int) = G.θ > 0 ? WilliamsonFromFrailty(Logarithmic(-G.θ), d) : @invoke 𝒲₋₁(G::Generator, d) frailty(G::FrankGenerator) = G.θ > 0 ? Logarithmic(-G.θ) : throw("The frank copula has no frailty when θ < 0") diff --git a/src/nested/FrankTaylorGenerator.jl b/src/nested/FrankTaylorGenerator.jl deleted file mode 100644 index 0f88dde8..00000000 --- a/src/nested/FrankTaylorGenerator.jl +++ /dev/null @@ -1,33 +0,0 @@ -# ============================================================================= -# Taylor-series-compatible ϕ / ϕ⁻¹ methods for the Frank generator. -# -# `_composition_taylor` in `NestedArchimedeanDensity.jl` evaluates the inner-to- -# outer change of variables ϕ⁻¹_outer ∘ ϕ_inner on a `TaylorSeries.Taylor1` -# argument via Copulas' generic `taylor(f, x₀, d)` primitive. For θ > 0, Frank's -# default ϕ / ϕ⁻¹ are written with `LogExpFunctions.log1mexp`, which has no -# `Taylor1` method, so the nested path would otherwise fail when Frank appears -# anywhere in the tree. (The k-th derivative ϕ⁽ᵏ⁾ of Frank itself is upstream's -# closed-form PolyLog implementation in `src/Generator/FrankGenerator.jl` and -# does not touch a Taylor expansion.) -# -# These methods add the *equivalent* closed forms built only from -# `exp` / `expm1` / `log` / `log1p` (all Taylor1-compatible). They are exactly -# the forms Copulas already uses for the θ < 0 branch, extended here to every -# θ ≠ 0 and specialised on a `Taylor1` argument: -# -# ϕ(t) = -log1p( e^{-t} · expm1(-θ) ) / θ -# ϕ⁻¹(t) = -log( expm1(-θ t) / expm1(-θ) ) -# -# They only ADD methods on a `Taylor1` argument; the scalar Float64/BigFloat ϕ -# path is untouched, so Frank's ordinary behaviour is unchanged. -# ============================================================================= - -function ϕ(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} - θ = T(G.θ) - return -log1p(exp(-t) * expm1(-θ)) / θ -end - -function ϕ⁻¹(G::FrankGenerator, t::TaylorSeries.Taylor1{T}) where {T} - θ = T(G.θ) - return -log(expm1(-θ * t) / expm1(-θ)) -end From 4dc767740006cc3db06b251f305e4b93a9e2e3ec Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Sun, 31 May 2026 23:56:56 -0400 Subject: [PATCH 15/25] feat: overloadable edge-composition hook (direct default + implicit method) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-edge Taylor expansion of ϕ⁻¹_outer ∘ ϕ_inner now goes through an overloadable hook composition_taylor(outer, inner, t₀, d), defaulting to _composition_taylor_direct (the current jet-over-composition, byte-identical). Ships a second building block, _composition_taylor_implicit (the implicit- equation method of Yang & Li App. A.4 / acopula): it solves ϕ_outer(h)=ϕ_inner order-by-order using only forward derivatives ϕ⁽ᵏ⁾ and a scalar ϕ⁻¹_outer, never differentiating the inverse and never composing generators on a single jet. Users select a method or register a closed form per generator pair the same way they override ϕ⁽ᵏ⁾ — by dispatch, no keyword. Ships the Clayton/Clayton closed form as the worked example (more accurate than the direct jet: 4.9e-77 vs 8.1e-77 rel-err vs a 512-bit reference). Default path is bit-identical; implicit matches direct to ~1e-15 (Float64) / ~1e-30 (BigFloat) across families and on full nested densities. Docs section shows how to switch methods and add custom compositions. Also carries the nested test-suite update (edge-composition tests + the subsetdims-reordering regression test): 58 -> 92 assertions, all passing; the JAX-CSV bit-identity regression is untouched. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 42 ++++++++++ src/nested/NestedArchimedeanDensity.jl | 112 ++++++++++++++++++++++++- test/NestedArchimedeanCopula.jl | 95 +++++++++++++++++++++ 3 files changed, 245 insertions(+), 4 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index 9e80e5ff..a9f09e6d 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -92,6 +92,48 @@ can lose `Float64` precision: logpdf(C, big.([0.3, 0.5, 0.4, 0.6])) ``` +## Edge-composition method + +Each parent→child edge in the Faà di Bruno recursion needs the truncated Taylor +expansion of the inner-to-outer link ``h = \phi^{-1}_{\text{outer}} \circ +\phi_{\text{inner}}`` at the child's argument. The expansion goes through the +overloadable hook `composition_taylor(outer, inner, t₀, d)`. The DEFAULT forwards +to `_composition_taylor_direct`, a jet over the explicit composition. You select +a method exactly as you override `ϕ⁽ᵏ⁾` — by dispatch, with no keyword or flag; +the most-specific method wins, and `BigFloat`/`Double64` coordinates flow +through either path. + +Switch the global default to the **implicit** App. A.4 solver +(`_composition_taylor_implicit`) by redefining the generic method: + +```julia +Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = + Copulas._composition_taylor_implicit(o, i, t₀, d) +``` + +(This redefines the shipped generic default, so Julia prints a benign "method +overwritten" warning.) The implicit method solves ``\phi_{\text{outer}}(h(t)) = +\phi_{\text{inner}}(t)`` order-by-order, using only the scalar derivatives +``\phi^{(k)}`` of both generators and a single scalar ``\phi^{-1}_{\text{outer}}`` +— it never differentiates ``\phi^{-1}`` and never composes the two generators on +a single jet. That is the high-``d`` stability win: it avoids the composed-chain +underflow that defeats the direct jet for fast-tail generators (Frank at +``d \ge 90``). The win requires the generator to ship a closed-form +``\phi^{(k)}``; a family whose only ``\phi^{(k)}`` is the generic Taylor fallback +still works but routes each derivative through an interior scalar jet. + +Register a closed form for a specific generator pair by adding a more-specific +method. The package ships the Clayton/Clayton example, ``h(t) = +((1+\theta_{\text{in}} t)^{\theta_{\text{out}}/\theta_{\text{in}}} - 1)/ +\theta_{\text{out}}``: + +```julia +function Copulas.composition_taylor(outer::Copulas.ClaytonGenerator, + inner::Copulas.ClaytonGenerator, t₀, d::Int) + # closed-form Taylor coefficients of ((1+θ_in·t)^(θ_out/θ_in) − 1)/θ_out +end +``` + ## Censored / survival likelihood Per-variable (right-)censoring is an **emergent capability** of the standard diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index aa042b03..02418750 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -48,14 +48,118 @@ struct _NestedNode{TG<:Generator, T} children::Vector{_NestedNode} end +# Overloadable hook for the edge composition. Each parent→child edge needs the # Taylor coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] of the change of variables -# h = ϕ⁻¹_outer ∘ ϕ_inner at t₀, to order d. This is the inner-to-outer link in -# the Faà di Bruno recursion for a child sub-tree. -function _composition_taylor(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} +# h = ϕ⁻¹_outer ∘ ϕ_inner at t₀, the inner-to-outer link in the Faà di Bruno +# recursion. `_process_node` calls THIS hook, so overrides take effect. +# +# The DEFAULT forwards to `_composition_taylor_direct` (jet over the explicit +# composition) — this is the ONLY generic method shipped, so the default +# behaviour is byte-unchanged. Switch the global default to the implicit +# App. A.4 solver by redefining this generic method, e.g. +# Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = +# Copulas._composition_taylor_implicit(o, i, t₀, d) +# or register a closed form for a specific generator pair by adding a more- +# specific method (see the shipped Clayton/Clayton example below). This mirrors +# the existing per-generator ϕ⁽ᵏ⁾ override idiom: no keyword/flag, pure +# dispatch, most-specific method wins. The working type T flows from t₀ into the +# backend, so BigFloat/Double64 precision is carried through. +composition_taylor(outer::Generator, inner::Generator, t₀, d::Int) = + _composition_taylor_direct(outer, inner, t₀, d) + +# DEFAULT direct method: Taylor-expand the explicit composition ϕ⁻¹_outer ∘ ϕ_inner +# at t₀ to order d via Copulas' generic `taylor` jet primitive. Returns the +# coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] (constant h₀ dropped) as a Vector{T}. +function _composition_taylor_direct(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} coefs = taylor(x -> ϕ⁻¹(outer, ϕ(inner, x)), t₀, d) return T[coefs[k+1] for k in 1:d] end +# Implicit-equation method (paper App. A.4 / acopula compose.py +# `_solve_composition_taylor`). Instead of differentiating ϕ⁻¹ (ill-conditioned +# high-order inverse derivatives; composed-chain underflow for fast-tail +# generators), use that h satisfies ϕ_outer(h(t)) = ϕ_inner(t). With +# h₀ = ϕ⁻¹_outer(ϕ_inner(t₀)) (a single SCALAR inverse) and +# h(t₀+ε) = h₀ + Q(ε), Q(ε) = Σ qₘ εᵐ, write aₘ = ϕ⁽ᵐ⁾(outer,h₀)/m! and +# bₘ = ϕ⁽ᵐ⁾(inner,t₀)/m!. Matching εᵏ in Σ aₘ Qᵐ = Σ bₘ εᵐ gives the triangular +# solve q₁ = b₁/a₁; qₖ = (bₖ − Σ_{m≥2} aₘ [εᵏ]Qᵐ)/a₁. Uses ONLY the scalar +# k-th derivatives ϕ⁽ᵏ⁾(outer)/ϕ⁽ᵏ⁾(inner) and one scalar ϕ⁻¹(outer); never ϕ +# or ϕ⁻¹ on a Taylor1, never the inverse high-order derivatives. Returns the +# IDENTICAL convention to `_composition_taylor_direct`: Vector{T} of length d, +# element k = h⁽ᵏ⁾(t₀)/k!, keyed off T = typeof(t₀) so BigFloat exactness flows. +function _composition_taylor_implicit(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} + # Derivative-side coefficients: a[m] = ϕ⁽ᵐ⁾(outer,h₀)/m!, b[m] = ϕ⁽ᵐ⁾(inner,t₀)/m! + # for m = 1..d (scalar k-th derivatives — NO Taylor1 on ϕ/ϕ⁻¹). + b = T[ϕ⁽ᵏ⁾(inner, m, t₀) / T(factorial(big(m))) for m in 1:d] + h₀ = ϕ⁻¹(outer, ϕ(inner, t₀)) # single scalar inverse + a = T[ϕ⁽ᵏ⁾(outer, m, h₀) / T(factorial(big(m))) for m in 1:d] + + q = zeros(T, d) + q[1] = b[1] / a[1] + d == 1 && return q + + # Amortized O(d³) column-update ladder (port of acopula's exact recurrence). + # Q[j+1] = q_j is the coefficient of εʲ in Q (Q has no constant term, Q[1]=0). + # C[m+1, j+1] = [εʲ] Q^{m+2}, maintained as Q's coefficients fill in. + npw = d - 1 # number of powers Q²..Q^d + Q = zeros(T, d + 1); Q[2] = q[1] # Q = q₁ε initially + C = zeros(T, npw, d + 1) + for m in 0:npw-1 + (m + 2) <= d && (C[m+1, (m+2)+1] = q[1]^(m+2)) # [ε^{m+2}] (q₁ε)^{m+2} + end + for k in 2:d + # correction = Σ_{m=0}^{npw-1} a[m+2] · [εᵏ] Q^{m+2} (column k of C, final). + corr = zero(T) + for m in 0:npw-1 + (m + 2) <= d && (corr += a[m+2] * C[m+1, k+1]) + end + q[k] = (b[k] - corr) / a[1] + Q[k+1] = q[k] + # Fill column j = k+1 of every power: C[m+1, j+1] = Σ_{i=1}^{k} q_i · prevₘ[j-i+1], + # with prevₘ = Q^{m+1} (Q for m=0, else the lower power row). All reads touch + # columns ≤ k, already finalised in prior outer steps, so rows update in parallel. + j = k + 1 + if j <= d + for m in 0:npw-1 + prev = m == 0 ? Q : view(C, m, :) # prevₘ = Q^{m+1} + s = zero(T) + for i in 1:k + ji = j - i + (1 <= ji) && (ji + 1 <= d + 1) && (s += Q[i+1] * prev[ji+1]) + end + C[m+1, j+1] = s + end + end + end + return q +end + +# Worked closed-form override: same-family Clayton/Clayton edge. For the package +# parametrization ϕ_θ(t) = (1+θt)^(-1/θ), ϕ⁻¹_θ(u) = (u^(-θ)-1)/θ, the inner-to- +# outer link h(t) = ϕ⁻¹_outer(ϕ_inner(t)) = ((1+θ_in·t)^r − 1)/θ_out, with +# r = θ_out/θ_in, is a reparametrised power map. Its Taylor coefficients are +# available in closed form, avoiding the inverse high-order derivatives entirely. +# This overrides the default purely by dispatch (same idiom as per-generator +# ϕ⁽ᵏ⁾); `_process_node` already calls the `composition_taylor` hook. NOTE: do +# NOT use the (1+t)^r−1 form — that is the θ=1 special case and is WRONG for this +# generator (θ lives inside ϕ). θ is promoted into T so Float64/BigFloat/Double64 +# all stay correct. +function composition_taylor(outer::ClaytonGenerator, inner::ClaytonGenerator, t₀::T, d::Int) where {T} + θ_out = T(outer.θ) + θ_in = T(inner.θ) + r = θ_out / θ_in + base = 1 + θ_in * t₀ # expansion base 1 + θ_in·t₀ + h = Vector{T}(undef, d) + binom = one(T) # generalized binomial C(r,k), incremental + θ_in_pow = one(T) # θ_in^k + for k in 1:d + binom *= (r - (k - 1)) / k # C(r,k) = C(r,k-1)·(r-k+1)/k + θ_in_pow *= θ_in + h[k] = (θ_in_pow / θ_out) * binom * base^(r - k) + end + return h # [h₁,…,h_d], length d, no constant +end + # Partial-Bell-polynomial step: given the Taylor coefficients `p` of the link # h (without its constant term) and the inner contribution `β` (the child's own # Faà di Bruno coefficient vector), return the order-`d` coefficient vector of @@ -135,7 +239,7 @@ function _process_node(node::_NestedNode{TG, T}) where {TG, T} if dc == 0 push!(coeffs, T[one(T)]) else - p = _composition_taylor(G, child.G, tc, dc) + p = composition_taylor(G, child.G, tc, dc) β_pad = zeros(T, dc + 1) β_pad[1:min(dc + 1, length(βc))] .= βc[1:min(dc + 1, length(βc))] push!(coeffs, _faa_di_bruno_coeffs(p, β_pad, dc)) diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index dc28219e..21314694 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -205,6 +205,40 @@ end end end + # ----------------------------------------------------------------------- + # 3b. Edge-composition method (the overloadable `composition_taylor` hook). + # The DEFAULT (testsets above) is the direct jet; here we check the two + # OTHER shipped paths agree with it per-edge: the implicit App. A.4 + # solver and the Clayton/Clayton closed-form override. Placed next to the + # bit-identity guard of testset 3. + # ----------------------------------------------------------------------- + @testset "edge-composition method (hook)" begin + direct = Copulas._composition_taylor_direct + implicit = Copulas._composition_taylor_implicit + + # (b) implicit == direct across same-family AND a cross-family edge, at + # several depths, with nestable params (inner ≥ outer dependence). + edges = [ + ("Clayton/Clayton", ClaytonGenerator(2.0), ClaytonGenerator(5.0), 0.3), + ("Gumbel/Gumbel", GumbelGenerator(2.0), GumbelGenerator(4.0), 0.5), + ("Frank/Frank", FrankGenerator(2.0), FrankGenerator(5.0), 0.5), + ("Joe/Joe", JoeGenerator(1.5), JoeGenerator(3.0), 0.4), + ("Gumbel/Clayton", GumbelGenerator(2.0), ClaytonGenerator(5.0), 0.4), # cross-family + ] + for (_, Go, Gi, t0) in edges, d in (2, 4, 6, 8) + @test maximum(abs.(implicit(Go, Gi, t0, d) .- direct(Go, Gi, t0, d))) < 1e-10 + end + + # (c) Clayton/Clayton closed-form override == BOTH general methods. + Go, Gi = ClaytonGenerator(2.0), ClaytonGenerator(5.0) + ov = Copulas.composition_taylor(Go, Gi, 0.3, 6) + @test maximum(abs.(ov .- direct(Go, Gi, 0.3, 6))) < 1e-10 + @test maximum(abs.(ov .- implicit(Go, Gi, 0.3, 6))) < 1e-10 + # BigFloat precision flows through the override (and the implicit path). + @test eltype(Copulas.composition_taylor(ClaytonGenerator(2.0), ClaytonGenerator(5.0), big"0.3", 6)) === BigFloat + @test eltype(implicit(ClaytonGenerator(2.0), ClaytonGenerator(5.0), big"0.3", 6)) === BigFloat + end + # ----------------------------------------------------------------------- # 4. Per-variable censoring via condition + subsetdims (gist recipe). # Reproduces the SAME independent references the old bespoke API checked, @@ -437,4 +471,65 @@ end ll = sum(logpdf(C, p) for p in pts) @test isfinite(ll) end + + # ----------------------------------------------------------------------- + # 7. Global implicit override gives correct nested densities (end-to-end). + # Redefining the GENERIC `composition_taylor(::Generator,::Generator,…)` + # method switches every edge to the implicit App. A.4 solver. We re-run + # the 4 external-acopula CSV cases of testset 3 through the implicit path + # and assert the SAME `maxerr < 1e-9` — proving the implicit solver + # reproduces correct nested logpdfs at the full density level, not just + # per-edge. + # + # A same-signature redefinition is a SESSION-GLOBAL override (it emits a + # benign "Method overwritten" warning) — so this testset runs LAST, after + # the default-direct byte-identity guard (testset 3) has already asserted. + # ----------------------------------------------------------------------- + @testset "global implicit override gives correct nested densities" begin + # Repoint the global default to the implicit solver (benign overwrite warning). + Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = + Copulas._composition_taylor_implicit(o, i, t₀, d) + + datadir = joinpath(@__DIR__, "data", "nested") + cases = [ + ("clayton_d10_2level", ClaytonGenerator, [5, 5], 1.5, 3.0), + ("clayton_d20_2level", ClaytonGenerator, [5, 5, 5, 5], 2.0, 4.0), + ("gumbel_d10", GumbelGenerator, [5, 5], 2.0, 5.0), + ("frank_d10", FrankGenerator, [5, 5], 2.0, 5.0), + ] + for (name, GT, sectors, θroot, θsector) in cases + U = readdlm(joinpath(datadir, name * "_U.csv"), ',') + ll = vec(readdlm(joinpath(datadir, name * "_acopula_ll.csv"), ',')) + C = NestedArchimedeanCopula(GT(θroot); + children = [ArchimedeanCopula(s, GT(θsector)) for s in sectors]) + maxerr = 0.0 + for i in axes(U, 1) + ours = Float64(logpdf(C, big.(U[i, :]))) + maxerr = max(maxerr, abs(ours - ll[i])) + end + @test maxerr < 1e-9 + end + + # Restore the shipped default-direct generic method so the override does + # not leak into any later test in the same session. + Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = + Copulas._composition_taylor_direct(o, i, t₀, d) + end + + @testset "subsetdims respects requested coordinate order (reordering)" begin + # Regression: SubsetCopula relabelled by sorted dims, ignoring the + # requested order, so subsetdims(C, perm) returned the wrong marginal for + # a non-exchangeable nested structure. The marginal CDF of a REORDERED + # subset must equal the joint CDF saturated at the requested coordinates. + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(3, 5.0), ClaytonCopula(2, 6.0)]) # d=5 + for dims in [(4, 1, 2), (2, 4, 1), (1, 3), (3, 1), (5, 2, 3, 1)] + u = [0.2 + 0.1k for k in 1:length(dims)] + v = ones(5); for (k, j) in enumerate(dims); v[j] = u[k]; end + @test cdf(subsetdims(C, Tuple(dims)), u) ≈ cdf(C, v) atol = 1e-10 + end + # Order genuinely matters: a within-panel-spanning reorder differs. + @test !isapprox(cdf(subsetdims(C, (4, 1, 2)), [0.3, 0.5, 0.6]), + cdf(subsetdims(C, (2, 4, 1)), [0.3, 0.5, 0.6]); atol = 1e-6) + end end From f417094a9a5038f7ccd83bee75e7f6ee4cd4900a Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 05:00:25 -0400 Subject: [PATCH 16/25] feat: fit() MLE on a fixed nested tree, sampling, GenericTests examples - fit(CopulaModel, C0, U) / fit(C0, U): MLE of the generator parameters holding the tree structure fixed (unconstrained reparam + LBFGS); coef/coefnames/dof read from the fitted tree so AIC/BIC are correct. - Distributions._rand! via inverse-Rosenblatt; _logpdf promotes the working type so ForwardDiff generator params flow through Float64 data. - Two nested Clayton entries added to the GenericTests bestiary; fit-recovery / subsetdims-order / rand / coef tests. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/Copulas.jl | 2 + src/NestedArchimedeanCopula.jl | 45 +++++- src/nested/NestedArchimedeanFitting.jl | 201 +++++++++++++++++++++++++ test/GenericTests.jl | 8 + test/NestedArchimedeanCopula.jl | 65 ++++++++ 5 files changed, 320 insertions(+), 1 deletion(-) create mode 100644 src/nested/NestedArchimedeanFitting.jl diff --git a/src/Copulas.jl b/src/Copulas.jl index d451f5b9..0bd0f3f5 100644 --- a/src/Copulas.jl +++ b/src/Copulas.jl @@ -106,6 +106,8 @@ module Copulas include("NestedArchimedeanCopula.jl") # Conditioning/subsetting fast paths (per-variable censoring is emergent here) include("nested/NestedConditioning.jl") + # Maximum-likelihood fitting of a nested copula's generator params (fixed tree) + include("nested/NestedArchimedeanFitting.jl") #Extreme value copulas include("Tail.jl") diff --git a/src/NestedArchimedeanCopula.jl b/src/NestedArchimedeanCopula.jl index 22b42b51..7c7dcd25 100644 --- a/src/NestedArchimedeanCopula.jl +++ b/src/NestedArchimedeanCopula.jl @@ -106,6 +106,29 @@ end Base.length(::NestedArchimedeanCopula{d}) where {d} = d +# Element type of a single generator's parameters (promote across its params). +# `init = Bool` is the identity for `promote_type`, so a 0-param generator +# yields `Bool` and never widens the data type. +_gen_param_eltype(G::Generator) = + mapreduce(typeof, promote_type, values(Distributions.params(G)); init = Bool) + +# Promote the parameter element type over the WHOLE tree (root + every child / +# nested node). Used to widen the Faà di Bruno working type `T` so that +# generator params of type `ForwardDiff.Dual` (e.g. pushed by an optimizer +# through Float64 data) flow through the recursion alongside the leaves. For +# plain `Float64` data + params this returns `Float64` (a no-op). +function _tree_param_eltype(C::NestedArchimedeanCopula) + T = _gen_param_eltype(C.G) + for ch in C.children + if ch isa Tuple # (flat ArchimedeanCopula, dims) + T = promote_type(T, _gen_param_eltype(ch[1].G)) + else # nested child + T = promote_type(T, _tree_param_eltype(ch)) + end + end + return T +end + # Dimension count of a sub-copula entry. _subdim(c::ArchimedeanCopula) = length(c) _subdim(c::NestedArchimedeanCopula{d}) where {d} = d @@ -206,7 +229,12 @@ function Distributions._logpdf(C::NestedArchimedeanCopula{d}, u) where {d} if !all(0 .< u .< 1) return eltype(u)(-Inf) end - T = eltype(u) <: AbstractFloat ? float(eltype(u)) : Float64 + Tu = eltype(u) <: AbstractFloat ? float(eltype(u)) : Float64 + # Promote with the generator-param eltype of the whole tree so that + # `Dual`-typed generator params (e.g. from an optimizer differentiating wrt + # θ through Float64 data) flow through the Faà di Bruno recursion together + # with the leaves. No-op (`Float64`) for plain Float64 data + params. + T = promote_type(Tu, _tree_param_eltype(C)) tree = _build_tree(C, u, falses(d), T) return _nested_logpdf(tree) end @@ -230,6 +258,21 @@ function _cdf(C::NestedArchimedeanCopula{d}, u) where {d} return _nested_cdf(tree) end +# Sampling. NestedArchimedeanCopula has no bespoke Marshall–Olkin frailty +# sampler; instead we draw via the inverse Rosenblatt transform, which is driven +# by our closed-form `_cdf`/`DistortionFromCop`/`subsetdims` specialisations +# (nested/NestedConditioning.jl). A single VECTOR `_rand!` is enough — the +# Distributions.jl `rand(C, n)` matrix path loops over this vector form (mirrors +# ArchimedeanCopula/SubsetCopula). Dispatches only on NestedArchimedeanCopula, so +# the flat-collapse ArchimedeanCopula sampler is untouched. The per-coordinate +# inverse-CDF is an O(d) sequential bisection (≈ms/sample); keep sampled N modest. +function Distributions._rand!(rng::Distributions.AbstractRNG, + C::NestedArchimedeanCopula{d}, + x::AbstractVector{T}) where {T<:Real, d} + x .= inverse_rosenblatt(C, rand(rng, T, d)) + return x +end + # Copula-scale mixed partial of the nested CDF over the observed coordinates. # Internal numerator kernel for the nested condition/subsetdims fast path # (`DistortionFromCop(::NestedArchimedeanCopula, …)` in nested/NestedConditioning.jl); diff --git a/src/nested/NestedArchimedeanFitting.jl b/src/nested/NestedArchimedeanFitting.jl new file mode 100644 index 00000000..85e8e42d --- /dev/null +++ b/src/nested/NestedArchimedeanFitting.jl @@ -0,0 +1,201 @@ +# ============================================================================= +# Maximum-likelihood fitting for NestedArchimedeanCopula with a FIXED tree. +# +# The tree SHAPE (leaf layout, children blocks) and the generator FAMILY at every +# node are part of the model and are NOT inferable from data; only the scalar +# parameters θ of each generator (root and inner) are optimised. fit() therefore +# dispatches on a TEMPLATE INSTANCE `C0::NestedArchimedeanCopula` that carries the +# full tree — neither `fit(NestedArchimedeanCopula, U)` (a bare type) nor +# `fit(typeof(C0), U)` can rebuild the tree, since the type parameters +# `{d, root-TG}` encode only the dimension and the root generator family. +# +# The optimiser runs in UNCONSTRAINED reparameterised α-space, exactly like the +# generic `_fit(::Type{<:Copula}, U, ::Val{:mle})` driver in Fitting.jl: each +# generator's params are mapped to ℝ^p by the per-family `_unbound_params` and +# back by `_rebound_params`. This (a) keeps every individual generator inside its +# own valid family domain at all times, (b) sidesteps the missing `_θ_bounds` for +# the BB families, and (c) needs no box-constraint machinery. +# +# NESTING VALIDITY is NOT enforced. The constructor itself does not check the +# cross-node "inner at least as dependent as outer" condition +# (NestedArchimedeanCopula.jl docstring); fit() mirrors that contract — it is the +# caller's responsibility. Unconstrained α only guarantees each generator is valid +# in its own family; a same-family fitted optimum CAN have inner θ < outer θ. +# +# The tree is walked in a fixed PRE-ORDER (root generator, then each child block +# in `children` declaration order; a flat child `(ArchimedeanCopula, dims)` inline, +# a nested child by recursion). `_nested_unbound` and `_nested_rebound` MUST use +# the SAME order and the SAME local-arity helper, or a Frank node (which switches +# parameterisation at local-arity 2 vs ≥3) would corrupt its α-slice. +# ============================================================================= + +# Bare UnionAll generator type from an instance, e.g. ClaytonGenerator{Float64} +# -> ClaytonGenerator. Reconstruct via `_gentype(G)(values(nt)...)`: the Generator +# type-call (Generator.jl) splats positional args in field order, which equals the +# order of `Distributions.params`. +_gentype(G::Generator) = typeof(G).name.wrapper + +# Local arity = number of ϕ⁻¹ terms this generator sums = #direct leaves + +# #direct children (for a node) or block size (for a flat child). This is the `d` +# whose per-family validity bound the generator's _unbound/_rebound depend on +# (Clayton's −1/(d−1); AMH/GumbelBarnett critical values; Frank's d==2 vs d≥3). +# Passing the GLOBAL tree d would over-restrict inner generators. Clamped to ≥2 +# so Clayton's 1/(d−1) is finite for a single-child node. +_local_arity(C::NestedArchimedeanCopula) = max(length(C.leafdims) + length(C.children), 2) + +# ---- FLATTEN: tree generators -> unconstrained ℝ^p vector ------------------- +function _nested_unbound(C::NestedArchimedeanCopula) + α = Float64[] + _push_node!(α, C) + return α +end +function _push_node!(α, C::NestedArchimedeanCopula) + dloc = _local_arity(C) + append!(α, _unbound_params(_gentype(C.G), dloc, Distributions.params(C.G))) + for ch in C.children + if ch isa Tuple # (flat ArchimedeanCopula, dims) + cc, ds = ch + append!(α, _unbound_params(_gentype(cc.G), max(length(ds), 2), + Distributions.params(cc.G))) + else # nested child + _push_node!(α, ch) + end + end + return α +end + +# Block length of a generator's α-slice (single-sourced through _unbound_params). +_blocklen(G::Generator, dloc) = + length(_unbound_params(_gentype(G), dloc, Distributions.params(G))) + +# ---- REBUILD: same tree skeleton + new α -> NestedArchimedeanCopula ---------- +# Consume α left-to-right in the IDENTICAL pre-order; rebuild every generator with +# its new θ while preserving leafdims / children dims / tree shape exactly. +_nested_rebound(C::NestedArchimedeanCopula, α::AbstractVector) = + _rebuild_node(C, α, Ref(1)) +function _rebuild_node(C::NestedArchimedeanCopula, α, i::Ref{Int}) + dloc = _local_arity(C) + k = _blocklen(C.G, dloc) + newG = _gentype(C.G)(values(_rebound_params(_gentype(C.G), dloc, α[i[]:i[]+k-1]))...) + i[] += k + newkids = Any[] + for ch in C.children + if ch isa Tuple + cc, ds = ch + dl = max(length(ds), 2) + kk = _blocklen(cc.G, dl) + ng = _gentype(cc.G)(values(_rebound_params(_gentype(cc.G), dl, α[i[]:i[]+kk-1]))...) + i[] += kk + push!(newkids, (ArchimedeanCopula(length(ds), ng), ds)) + else + push!(newkids, _rebuild_node(ch, α, i)) + end + end + return NestedArchimedeanCopula{length(C.dims), typeof(newG)}( + newG, copy(C.leafdims), newkids, copy(C.dims)) +end + +# ---- Fitting-interface opt-outs --------------------------------------------- +# Advertise NO type-based fitting methods. The generic GenericTests "Fitting +# interface" testset and the package's type-positional fit machinery +# (`CT(d, θ...)`, `_example(CT, d)`) cannot reconstruct a tree copula, so we keep +# them OFF for the nested type — `can_be_fitted` becomes false and that whole +# block is skipped. The real, supported fit() is the instance API below. This +# also stops the false advertising of :itau/:irho/:ibeta (meaningless for a tree). +_available_fitting_methods(::Type{<:NestedArchimedeanCopula}, d) = Tuple{}() + +# Bare-type _example throws: there is no canonical tree without a template +# (mirrors ArchimedeanCopula's bare _example). +_example(::Type{NestedArchimedeanCopula}, d) = + throw(ArgumentError("Cannot fit a NestedArchimedeanCopula from the bare type: " * + "the tree shape and generator families are not inferable from data. " * + "Pass a template instance, e.g. `fit(CopulaModel, C0, U)` or `fit(C0, U)`.")) + +# ---- The MLE on a TEMPLATE INSTANCE (fixed structure) ----------------------- +""" + fit(CopulaModel, C0::NestedArchimedeanCopula, U; method=:mle, quick_fit=false, kwargs...) + fit(C0::NestedArchimedeanCopula, U; kwargs...) -> NestedArchimedeanCopula + +Maximum-likelihood estimation of the generator parameters of a nested +Archimedean copula, holding the tree structure FIXED. + +`C0` is a template instance whose tree shape (leaf layout, children blocks) and +per-node generator families are kept fixed; only the scalar θ of each generator +(root and every inner node) is re-optimised. `U` is a `d×n` matrix of +pseudo-observations (columns = observations). + +The optimisation runs in unconstrained reparameterised space (per-family +`_unbound_params`/`_rebound_params`), so each generator stays inside its own +valid family domain. The cross-node nesting-validity condition (for same-family +nestings, inner at least as dependent as outer) is NOT enforced — exactly as the +constructor leaves it to the caller. If you need a valid copula off the data, +check the fitted parameters yourself. + +The two-argument form is a quick shim returning only the fitted copula. +""" +function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, U; + method=:mle, quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} + method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) + size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) + n = size(U, 2) + + α₀ = _nested_unbound(C0) + cop(α) = _nested_rebound(C0, α) + loss(α) = -Distributions.loglikelihood(cop(α), U) + + t = @elapsed res = try + Optim.optimize(loss, α₀, Optim.LBFGS(); autodiff = ADTypes.AutoForwardDiff()) + catch err + Optim.optimize(loss, α₀, Optim.NelderMead()) + end + + Chat = cop(Optim.minimizer(res)) + quick_fit && return (result = Chat,) + + ll = Distributions.loglikelihood(Chat, U) + # NOTE: we deliberately do NOT put :θ̂ in the metadata, so the generic vcov + # path (which reconstructs via the type-positional _unbound/_rebound and + # `CT(d, θ...)` we do not have) is never reached. + md = (; d, n, method = :mle, + optimizer = Optim.summary(res), + converged = Optim.converged(res), + iterations = Optim.iterations(res), + elapsed_sec = t, derived_measures, U = U) + return CopulaModel(Chat, n, ll, :mle; + vcov = nothing, + converged = Optim.converged(res), + iterations = Optim.iterations(res), + elapsed_sec = t, + method_details = md) +end + +# ---- coef / coefnames for a fitted nested copula ---------------------------- +# We do not store :θ̂ in method_details (it would trigger the generic vcov path, +# which reconstructs a tree copula via the type-positional `CT(d, θ...)` we lack). +# Supply the parameters directly from the fitted tree instead: the natural θ of +# every generator (root, then each child block, pre-order). `dof = length(coef)` +# then reports the correct free-parameter count, so AIC/BIC are correct. +function _nested_coef(C::NestedArchimedeanCopula, tag::String = "G") + names = String[]; vals = Float64[] + for (k, v) in pairs(Distributions.params(C.G)) + push!(names, "$(tag).$(k)"); push!(vals, float(v)) + end + for (ci, ch) in enumerate(C.children) + if ch isa Tuple + cc, _ = ch + for (k, v) in pairs(Distributions.params(cc.G)) + push!(names, "$(tag)[$(ci)].$(k)"); push!(vals, float(v)) + end + else + n2, v2 = _nested_coef(ch, "$(tag)[$(ci)]") + append!(names, n2); append!(vals, v2) + end + end + return names, vals +end +StatsBase.coef(M::CopulaModel{<:NestedArchimedeanCopula}) = _nested_coef(M.result)[2] +StatsBase.coefnames(M::CopulaModel{<:NestedArchimedeanCopula}) = _nested_coef(M.result)[1] + +# Quick instance shortcut: returns only the fitted copula. +Distributions.fit(C0::NestedArchimedeanCopula, U; kwargs...) = + Distributions.fit(CopulaModel, C0, U; quick_fit = true, kwargs...).result diff --git a/test/GenericTests.jl b/test/GenericTests.jl index 6e5ca548..bbb503c4 100644 --- a/test/GenericTests.jl +++ b/test/GenericTests.jl @@ -277,6 +277,14 @@ append!(Bestiary, [ EmpiricalEVCopula(randn(rng, 2,50); method=:cfg, pseudo_values=false), EmpiricalEVCopula(randn(rng, 2,50); method=:ols, pseudo_values=false), EmpiricalEVCopula(randn(rng, 2,50); method=:pickands, pseudo_values=false), + # Nested (hierarchical) Archimedean copulas. Inner θ > outer θ for nesting + # validity. The generic Fitting block is skipped (the nested type advertises + # no type-based fitting methods, since fit() is an instance API); sampling, + # cdf, pdf, subsetdims, conditioning, rosenblatt and τ-coherency are swept. + NestedArchimedeanCopula(Copulas.ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]), # d=4, two panels + NestedArchimedeanCopula(Copulas.ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0)], leaves = [3]), # d=3, panel + bare leaf ]) macro testif(cond, args...) diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 21314694..06ea4857 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -22,6 +22,7 @@ # 6. Constructor errors (bad tiling) and a fit/smoke usage of logpdf. using Test, Copulas, Distributions, ForwardDiff, DelimitedFiles, Random +import StatsBase import Copulas: Generator, ϕ, ϕ⁻¹, ϕ⁻¹⁽¹⁾, ϕ⁽ᵏ⁾ import Copulas: ClaytonGenerator, GumbelGenerator, FrankGenerator, JoeGenerator import Copulas: NestedDistortion, subsetdims, condition, _censored_copula_logpdf @@ -532,4 +533,68 @@ end @test !isapprox(cdf(subsetdims(C, (4, 1, 2)), [0.3, 0.5, 0.6]), cdf(subsetdims(C, (2, 4, 1)), [0.3, 0.5, 0.6]); atol = 1e-6) end + + @testset "rand works (inverse-Rosenblatt sampler)" begin + # rand(C) StackOverflowed before the dedicated _rand!; here it must return + # a valid point and a valid sample matrix, all in [0,1] and finite. + C = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 5.0), ClaytonCopula(2, 6.0)]) # d=4 + rng = Random.MersenneTwister(7) + s1 = rand(rng, C) + @test length(s1) == 4 + @test all(0 .<= s1 .<= 1) && all(isfinite, s1) + S = rand(rng, C, 100) + @test size(S) == (4, 100) + @test all(0 .<= S .<= 1) && all(isfinite, S) + # Marginals are (approximately) uniform: mean of each coordinate ≈ 0.5. + @test all(abs.(vec(sum(S, dims = 2)) ./ 100 .- 0.5) .< 0.1) + end + + @testset "fit: generator-parameter recovery (fixed tree MLE)" begin + # Sample from a known nested Clayton tree, fit from a deliberately wrong + # same-shape template, and check the recovered θ are close to the truth. + # Validated numbers (this seed): root 2.03, panels 6.09 / 8.01, + # converged in ~11 LBFGS iters on 3000 samples (no NelderMead fallback). + Ctrue = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 6.0), ClaytonCopula(2, 8.0)]) + U = rand(Random.MersenneTwister(20240601), Ctrue, 3000) + + Cstart = NestedArchimedeanCopula(ClaytonGenerator(1.0); + children = [ClaytonCopula(2, 3.0), ClaytonCopula(2, 3.0)]) + + M = Distributions.fit(Copulas.CopulaModel, Cstart, U) + Chat = M.result + @test Chat isa NestedArchimedeanCopula + @test M.converged + # Same tree shape preserved. + @test length(Chat) == 4 + @test length(Chat.children) == 2 + # Generators stayed in the Clayton family (no collapse / type change). + @test Chat.G isa ClaytonGenerator + @test Chat.children[1][1].G isa ClaytonGenerator + @test Chat.children[2][1].G isa ClaytonGenerator + # Parameter recovery (loose MLE tolerances on 3000 samples). + @test Chat.G.θ ≈ 2.0 atol = 0.4 + @test Chat.children[1][1].G.θ ≈ 6.0 atol = 0.8 + @test Chat.children[2][1].G.θ ≈ 8.0 atol = 0.8 + # Fitted log-likelihood beats the (wrong) starting point. + @test Distributions.loglikelihood(Chat, U) > Distributions.loglikelihood(Cstart, U) + + # coef / dof report the real free-parameter count (3: root + 2 panels), + # so AIC/BIC are correct (the generic path would give dof=0 → wrong AIC). + @test length(StatsBase.coef(M)) == 3 + @test StatsBase.dof(M) == 3 + @test StatsBase.coef(M) ≈ [Chat.G.θ, Chat.children[1][1].G.θ, Chat.children[2][1].G.θ] + @test StatsBase.aic(M) ≈ -2 * Distributions.loglikelihood(Chat, U) + 2 * 3 + + # Quick instance shim returns just the fitted copula with the same fit. + Cq = Distributions.fit(Cstart, U) + @test Cq isa NestedArchimedeanCopula + @test Cq.G.θ ≈ Chat.G.θ atol = 1e-8 + + # Bare-type fit is intentionally unsupported (tree not inferable). + @test_throws Exception Copulas._example(NestedArchimedeanCopula, 4) + # Only :mle is supported. + @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, Cstart, U; method = :itau) + end end From 0ad4450469ac5de92eb1eb20202a27caec10b590 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 05:00:25 -0400 Subject: [PATCH 17/25] =?UTF-8?q?feat:=20=CF=95=E2=81=BB=C2=B9=E2=81=BD?= =?UTF-8?q?=E1=B5=8F=E2=81=BE=20interface=20+=20Fa=C3=A0=20di=20Bruno=20ed?= =?UTF-8?q?ge-composition=20method=20(opt-in)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ϕ⁻¹⁽ᵏ⁾(G, k, t): overridable kth derivative of the inverse generator (generic Taylor-jet default; exact Clayton closed form). - _composition_taylor_fdb: a third selectable edge composition behind the composition_taylor hook, assembling ϕ⁻¹_outer∘ϕ_inner from ϕ⁻¹⁽ᵏ⁾(outer) and ϕ⁽ᵏ⁾(inner). Opt-in only; the default remains the direct jet. - Note: catastrophically ill-conditioned for fast-tail generators (Frank/Joe) at high d — kept as a selectable option, not the default. See PR discussion. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/Generator.jl | 12 +++++++ src/Generator/ClaytonGenerator.jl | 3 ++ src/nested/NestedArchimedeanDensity.jl | 43 ++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/src/Generator.jl b/src/Generator.jl index 1da68422..5a715eb8 100644 --- a/src/Generator.jl +++ b/src/Generator.jl @@ -26,6 +26,7 @@ More methods can be implemented for performance, althouhg there are implement de * `ϕ⁽¹⁾(G::Generator, t)` gives the first derivative of the generator * `ϕ⁽ᵏ⁾(G::Generator, k::Int, t)` gives the kth derivative of the generator * `ϕ⁻¹⁽¹⁾(G::Generator, t)` gives the first derivative of the inverse generator. +* `ϕ⁻¹⁽ᵏ⁾(G::Generator, k::Int, t)` gives the kth derivative of the inverse generator. * `𝒲₋₁(G::Generator, d::Int)` gives the Wiliamson d-transform of the generator as a univaraite positive dsitribution. References: @@ -42,9 +43,20 @@ max_monotony(G::Generator) = throw("This generator does not have a defined max m ϕ( G::Generator, t) = throw("This generator has not been defined correctly, the function `ϕ(G,t)` is not defined.") ϕ(G::Generator) = Base.Fix1(ϕ,G) ϕ⁻¹( G::Generator, x) = Roots.find_zero(t -> ϕ(G,t) - x, (0.0, Inf)) +ϕ⁻¹(G::Generator) = Base.Fix1(ϕ⁻¹, G) ϕ⁽¹⁾(G::Generator, t) = ForwardDiff.derivative(x -> ϕ(G,x), t) ϕ⁻¹⁽¹⁾(G::Generator, t) = ForwardDiff.derivative(x -> ϕ⁻¹(G, x), t) ϕ⁽ᵏ⁾(G::Generator, k::Int, t) = taylor(ϕ(G), t, k)[end] * factorial(k) +# kth derivative of the inverse generator. Generic default: a Taylor jet of the +# scalar inverse (mirrors ϕ⁽ᵏ⁾). Overridable per-generator with a closed form +# when one is known — used by the Faà di Bruno edge-composition in nested copulas +# (nested/NestedArchimedeanDensity.jl), where the inverse high-order derivatives +# are precision-sensitive. `factorial(big(k))` avoids Int64 overflow at high k; +# `oftype` keeps the working type (Float64/BigFloat) of the evaluation point. +function ϕ⁻¹⁽ᵏ⁾(G::Generator, k::Int, t) + c = taylor(ϕ⁻¹(G), t, k)[end] + return c * oftype(c, factorial(big(k))) +end ϕ⁽ᵏ⁾⁻¹(G::Generator, k::Int, t; start_at=t) = try Roots.find_zero(x -> ϕ⁽ᵏ⁾(G, k, x) - t, start_at) catch diff --git a/src/Generator/ClaytonGenerator.jl b/src/Generator/ClaytonGenerator.jl index 8ae07824..c6acac51 100644 --- a/src/Generator/ClaytonGenerator.jl +++ b/src/Generator/ClaytonGenerator.jl @@ -56,6 +56,9 @@ max_monotony(G::ClaytonGenerator) = G.θ >= 0 ? Inf : (1 - 1/G.θ) ϕ⁻¹(G::ClaytonGenerator, t) = (t^(-G.θ)-1)/G.θ ϕ⁽¹⁾(G::ClaytonGenerator, t) = (1+G.θ*t) ≤ 0 ? 0 : - (1+G.θ*t)^(-1/G.θ -1) ϕ⁻¹⁽¹⁾(G::ClaytonGenerator, t) = -t^(-G.θ-1) +# Closed-form kth derivative of ϕ⁻¹(u)=(u^{-θ}-1)/θ: dᵏ/duᵏ = (1/θ)·∏_{ℓ=0}^{k-1}(-θ-ℓ)·u^{-θ-k}. +# (k=1 ⇒ -u^{-θ-1}, matching ϕ⁻¹⁽¹⁾.) Exact in u^{-θ-k}, no inverse-jet conditioning loss. +ϕ⁻¹⁽ᵏ⁾(G::ClaytonGenerator, k::Int, t) = t^(-G.θ-k) * prod(-G.θ-ℓ for ℓ in 0:k-1; init=1) / G.θ ϕ⁽ᵏ⁾(G::ClaytonGenerator, k::Int, t) = (1+G.θ*t) ≤ 0 ? 0 : (1 + G.θ * t)^(-1/G.θ - k) * prod(-1-ℓ*G.θ for ℓ in 0:k-1; init=1) ϕ⁽ᵏ⁾⁻¹(G::ClaytonGenerator, k::Int, t; start_at=t) = ((t / prod(-1-ℓ*G.θ for ℓ in 0:k-1; init=1))^(1/(-1/G.θ - k)) -1)/G.θ diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index 02418750..e0a6a07a 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -134,6 +134,49 @@ function _composition_taylor_implicit(outer::Generator, inner::Generator, t₀:: return q end +# Faà di Bruno method (Oskar Laverny's PR #367 suggestion). The edge link +# h = ϕ⁻¹_outer ∘ ϕ_inner is an ordinary univariate composition f∘g with +# f = ϕ⁻¹_outer, g = ϕ_inner, so its Taylor coefficients follow from Faà di +# Bruno: h_n = Σ_{k=1}^{n} (ϕ⁻¹⁽ᵏ⁾(outer,s₀)/k!) · [εⁿ] ĝ(ε)^k, where +# s₀ = ϕ_inner(t₀) and ĝ(ε)=Σ_{m≥1} (ϕ⁽ᵐ⁾(inner,t₀)/m!) εᵐ is the inner +# increment series. Unlike the direct `taylor()` jet, this routes through the +# generators' OWN derivative methods `ϕ⁽ᵏ⁾(inner)` and `ϕ⁻¹⁽ᵏ⁾(outer)`, so any +# closed-form override (e.g. the exact Clayton ϕ⁻¹⁽ᵏ⁾) is used directly instead +# of a generic jet — the point of the override mechanism. The partial-Bell +# powering (`gpow ← gpow ⊛ ĝ`) is the same primitive the density assembly uses. +# Same return convention as the other two methods: Vector{T}, element k = h⁽ᵏ⁾/k!. +function _composition_taylor_fdb(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} + # Inner increment series ĝ: g[m] = ϕ⁽ᵐ⁾(inner,t₀)/m!, order m = index m. + g = T[T(ϕ⁽ᵏ⁾(inner, m, t₀)) / T(factorial(big(m))) for m in 1:d] + s₀ = ϕ(inner, t₀) # point for the outer inverse derivatives + # Outer inverse derivatives f[k] = ϕ⁻¹⁽ᵏ⁾(outer,s₀) (honours per-generator overrides). + f = T[T(ϕ⁻¹⁽ᵏ⁾(outer, k, s₀)) for k in 1:d] + h = zeros(T, d) + gpow = copy(g) # ĝ¹ (lowest order 1) + for k in 1:d + c = f[k] / T(factorial(big(k))) # ϕ⁻¹⁽ᵏ⁾(outer,s₀)/k! + @inbounds for n in k:d # ĝᵏ has lowest order k + h[n] += c * gpow[n] + end + k < d && (gpow = _poly_mul_inc(gpow, g, d)) # ĝᵏ⁺¹, truncated to order d + end + return h +end + +# Cauchy product of two constant-term-free polynomials (index m = order m), truncated +# to order d. Used to raise the inner increment series ĝ to successive powers above. +function _poly_mul_inc(a::AbstractVector{T}, b::AbstractVector{T}, d::Int) where {T} + out = zeros(T, d) + @inbounds for i in 1:d + ai = a[i] + iszero(ai) && continue + for j in 1:(d - i) # keep i+j ≤ d + out[i + j] += ai * b[j] + end + end + return out +end + # Worked closed-form override: same-family Clayton/Clayton edge. For the package # parametrization ϕ_θ(t) = (1+θt)^(-1/θ), ϕ⁻¹_θ(u) = (u^(-θ)-1)/θ, the inner-to- # outer link h(t) = ϕ⁻¹_outer(ϕ_inner(t)) = ((1+θ_in·t)^r − 1)/θ_out, with From a01b1613006caf8c4f02b15d8c9f87e0d823f00c Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 16:33:12 -0400 Subject: [PATCH 18/25] feat: user-customizable fit parametrisation (+ enforce_nesting) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fit() optimises through a parametrisation `α -> NestedArchimedeanCopula` decoupled from the generator objects: default (per-generator, unchanged); enforce_nesting=true (same-family θ-ordered trees parametrise each child's θ as a non-negative increment over its parent, so every optimiser step is a valid nesting); or a fully custom reparam=(α->C), init=α₀ (share parameters, fit on another scale, encode any constraint) — ForwardDiff differentiates straight through it. dof now reads the free-parameter count (nparams) so AIC/BIC stay correct even when a custom reparam shares parameters. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/nested/NestedArchimedeanFitting.jl | 137 +++++++++++++++++++++---- test/NestedArchimedeanCopula.jl | 34 ++++++ 2 files changed, 152 insertions(+), 19 deletions(-) diff --git a/src/nested/NestedArchimedeanFitting.jl b/src/nested/NestedArchimedeanFitting.jl index 85e8e42d..55560518 100644 --- a/src/nested/NestedArchimedeanFitting.jl +++ b/src/nested/NestedArchimedeanFitting.jl @@ -16,11 +16,11 @@ # own valid family domain at all times, (b) sidesteps the missing `_θ_bounds` for # the BB families, and (c) needs no box-constraint machinery. # -# NESTING VALIDITY is NOT enforced. The constructor itself does not check the -# cross-node "inner at least as dependent as outer" condition -# (NestedArchimedeanCopula.jl docstring); fit() mirrors that contract — it is the -# caller's responsibility. Unconstrained α only guarantees each generator is valid -# in its own family; a same-family fitted optimum CAN have inner θ < outer θ. +# NESTING VALIDITY: the DEFAULT parametrisation does not enforce the cross-node +# "inner at least as dependent as outer" condition (the constructor leaves it to +# the caller) — an unconstrained α only keeps each generator valid in its own +# family, so a fitted optimum CAN have inner θ < outer θ. Pass `enforce_nesting=true` +# (same-family θ-ordered trees) or a custom `reparam`/`init` to constrain it; see fit(). # # The tree is walked in a fixed PRE-ORDER (root generator, then each child block # in `children` declaration order; a flat child `(ArchimedeanCopula, dims)` inline, @@ -111,6 +111,85 @@ _example(::Type{NestedArchimedeanCopula}, d) = "the tree shape and generator families are not inferable from data. " * "Pass a template instance, e.g. `fit(CopulaModel, C0, U)` or `fit(C0, U)`.")) +# ---- Parametrization layer (decoupled α -> tree map) ------------------------ +# fit() optimises an unconstrained vector α through a reconstruction map +# `recon : α -> NestedArchimedeanCopula`. The DEFAULT map (`_nested_rebound`) +# reparametrises each generator independently inside its own family domain. A +# CUSTOM `recon` (keywords `reparam`/`init`) decouples α from the generator +# objects entirely — so it can share parameters across nodes, change the +# per-generator parametrisation, or ENFORCE the nesting condition. `recon` only +# has to build generators from α (`fam(θ)` stays generic in α's element type), so +# ForwardDiff differentiates straight through it. `enforce_nesting=true` provides +# the nesting case for same-family single-parameter θ-ordered trees. + +_single_θ(G::Generator) = float(first(values(Distributions.params(G)))) # the lone dependence param +_softplus(x) = max(x, zero(x)) + log1p(exp(-abs(x))) # ≥ 0, smooth, overflow-safe +_invsoftplus(y) = log(expm1(y)) # inverse of softplus on y > 0 + +# Lower end of the θ range over which a family nests by `θ_child ≥ θ_parent`. +# `nothing` ⇒ enforce_nesting unsupported (bounded domain or multi-parameter family). +_nesting_base(::Type{<:Generator}) = nothing +_nesting_base(::Type{<:ClaytonGenerator}) = 0.0 +_nesting_base(::Type{<:GumbelGenerator}) = 1.0 +_nesting_base(::Type{<:FrankGenerator}) = 0.0 +_nesting_base(::Type{<:JoeGenerator}) = 1.0 + +function _assert_same_single_param_family(C::NestedArchimedeanCopula, fam) + (_gentype(C.G) === fam && length(Distributions.params(C.G)) == 1) || + throw(ArgumentError("enforce_nesting needs every node to be the same single-parameter family ($fam); got $(typeof(C.G)).")) + for ch in C.children + if ch isa Tuple + (_gentype(ch[1].G) === fam && length(Distributions.params(ch[1].G)) == 1) || + throw(ArgumentError("enforce_nesting needs every node to be $fam; got $(typeof(ch[1].G)).")) + else + _assert_same_single_param_family(ch, fam) + end + end +end + +# Flatten the template into α₀ (pre-order: this node, then each child) encoding each +# node's θ as a NON-NEGATIVE increment over its parent's θ (root over `base`). +function _nesting_flatten!(α, C::NestedArchimedeanCopula, lo) + θ = _single_θ(C.G) + push!(α, _invsoftplus(max(θ - lo, 1e-6))) + for ch in C.children + ch isa Tuple ? push!(α, _invsoftplus(max(_single_θ(ch[1].G) - θ, 1e-6))) : + _nesting_flatten!(α, ch, θ) + end + return α +end + +# Rebuild from α in the IDENTICAL pre-order: θ_node = lo + softplus(δ); each child +# θ_child = θ_node + softplus(δ_child). softplus ≥ 0 ⇒ θ non-decreasing down the +# tree ⇒ the nesting condition holds for every α ∈ ℝ^p. +function _nesting_build(C::NestedArchimedeanCopula, α, i::Ref{Int}, lo, fam) + θ = lo + _softplus(α[i[]]); i[] += 1 + newG = fam(θ) + newkids = Any[] + for ch in C.children + if ch isa Tuple + cc, ds = ch + θc = θ + _softplus(α[i[]]); i[] += 1 + push!(newkids, (ArchimedeanCopula(length(ds), fam(θc)), ds)) + else + push!(newkids, _nesting_build(ch, α, i, θ, fam)) + end + end + return NestedArchimedeanCopula{length(C.dims), typeof(newG)}(newG, copy(C.leafdims), newkids, copy(C.dims)) +end + +# (α₀, recon) for the built-in nesting-enforcing parametrization. +function _nesting_parametrization(C0::NestedArchimedeanCopula) + fam = _gentype(C0.G) + base = _nesting_base(fam) + base === nothing && throw(ArgumentError( + "enforce_nesting supports same-family single-parameter Clayton/Gumbel/Frank/Joe trees " * + "(θ-ordered nesting). For other families or custom constraints, pass `reparam`/`init`.")) + _assert_same_single_param_family(C0, fam) + α₀ = _nesting_flatten!(Float64[], C0, base) + return (α₀, α -> _nesting_build(C0, α, Ref(1), base, fam)) +end + # ---- The MLE on a TEMPLATE INSTANCE (fixed structure) ----------------------- """ fit(CopulaModel, C0::NestedArchimedeanCopula, U; method=:mle, quick_fit=false, kwargs...) @@ -124,24 +203,40 @@ per-node generator families are kept fixed; only the scalar θ of each generator (root and every inner node) is re-optimised. `U` is a `d×n` matrix of pseudo-observations (columns = observations). -The optimisation runs in unconstrained reparameterised space (per-family -`_unbound_params`/`_rebound_params`), so each generator stays inside its own -valid family domain. The cross-node nesting-validity condition (for same-family -nestings, inner at least as dependent as outer) is NOT enforced — exactly as the -constructor leaves it to the caller. If you need a valid copula off the data, -check the fitted parameters yourself. +The optimisation runs in unconstrained space through a *parametrisation* — a map +`α -> NestedArchimedeanCopula` that is decoupled from the generator objects: + + * **default**: each generator is reparametrised independently inside its own + family domain (per-family `_unbound_params`/`_rebound_params`). The cross-node + nesting condition is NOT enforced — the constructor leaves it to the caller. + * **`enforce_nesting=true`**: for same-family single-parameter θ-ordered trees + (Clayton/Gumbel/Frank/Joe), each child's θ is parametrised as a non-negative + increment over its parent's θ, so *every* optimiser step is a valid nesting. + * **`reparam = (α -> C), init = α₀`**: supply your own parametrisation — to share + parameters across nodes, change the per-generator parametrisation (e.g. fit on + a Kendall-τ scale), or encode an arbitrary constraint. `reparam` must build the + tree from `α` generically so ForwardDiff can differentiate it. The two-argument form is a quick shim returning only the fitted copula. """ function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, U; - method=:mle, quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} + method=:mle, enforce_nesting::Bool=false, reparam=nothing, init=nothing, + quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) n = size(U, 2) - α₀ = _nested_unbound(C0) - cop(α) = _nested_rebound(C0, α) - loss(α) = -Distributions.loglikelihood(cop(α), U) + # Resolve the parametrisation: an unconstrained α₀ and a map `recon: α -> copula`. + α₀, recon = if reparam !== nothing + init === nothing && throw(ArgumentError("`init` (the α₀ vector) is required alongside a custom `reparam`.")) + (collect(float.(init)), reparam) + elseif enforce_nesting + _nesting_parametrization(C0) + else + (_nested_unbound(C0), Base.Fix1(_nested_rebound, C0)) + end + + loss(α) = -Distributions.loglikelihood(recon(α), U) t = @elapsed res = try Optim.optimize(loss, α₀, Optim.LBFGS(); autodiff = ADTypes.AutoForwardDiff()) @@ -149,14 +244,14 @@ function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, Optim.optimize(loss, α₀, Optim.NelderMead()) end - Chat = cop(Optim.minimizer(res)) + Chat = recon(Optim.minimizer(res)) quick_fit && return (result = Chat,) ll = Distributions.loglikelihood(Chat, U) # NOTE: we deliberately do NOT put :θ̂ in the metadata, so the generic vcov # path (which reconstructs via the type-positional _unbound/_rebound and # `CT(d, θ...)` we do not have) is never reached. - md = (; d, n, method = :mle, + md = (; d, n, method = :mle, nparams = length(α₀), optimizer = Optim.summary(res), converged = Optim.converged(res), iterations = Optim.iterations(res), @@ -173,8 +268,10 @@ end # We do not store :θ̂ in method_details (it would trigger the generic vcov path, # which reconstructs a tree copula via the type-positional `CT(d, θ...)` we lack). # Supply the parameters directly from the fitted tree instead: the natural θ of -# every generator (root, then each child block, pre-order). `dof = length(coef)` -# then reports the correct free-parameter count, so AIC/BIC are correct. +# every generator (root, then each child block, pre-order) for display. The number +# of FREE parameters (which can be < #generators when a custom `reparam` shares +# parameters) is `length(α₀)`, recorded as `nparams`; `dof` uses it so AIC/BIC stay +# correct under any parametrisation. function _nested_coef(C::NestedArchimedeanCopula, tag::String = "G") names = String[]; vals = Float64[] for (k, v) in pairs(Distributions.params(C.G)) @@ -195,6 +292,8 @@ function _nested_coef(C::NestedArchimedeanCopula, tag::String = "G") end StatsBase.coef(M::CopulaModel{<:NestedArchimedeanCopula}) = _nested_coef(M.result)[2] StatsBase.coefnames(M::CopulaModel{<:NestedArchimedeanCopula}) = _nested_coef(M.result)[1] +StatsBase.dof(M::CopulaModel{<:NestedArchimedeanCopula}) = + hasproperty(M.method_details, :nparams) ? M.method_details.nparams : length(StatsBase.coef(M)) # Quick instance shortcut: returns only the fitted copula. Distributions.fit(C0::NestedArchimedeanCopula, U; kwargs...) = diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 06ea4857..da3cc080 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -597,4 +597,38 @@ end # Only :mle is supported. @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, Cstart, U; method = :itau) end + + @testset "fit: parametrisation layer (nesting + custom reparam)" begin + C = NestedArchimedeanCopula(ClaytonGenerator(1.5); leaves = [1], + children = [ClaytonCopula(2, 4.0)]) + U = rand(Random.MersenneTwister(7), C, 1000) + rootθ(M) = M.result.G.θ + childθ(M) = M.result.children[1][1].G.θ + + # default parametrisation: 2 free parameters (root + child) + Md = Distributions.fit(Copulas.CopulaModel, C, U) + @test StatsBase.dof(Md) == 2 + + # enforce_nesting: θ_child ≥ θ_root holds at the optimum, by construction + Mn = Distributions.fit(Copulas.CopulaModel, C, U; enforce_nesting = true) + @test rootθ(Mn) ≤ childθ(Mn) + @test StatsBase.dof(Mn) == 2 + @test rootθ(Mn) ≈ rootθ(Md) atol = 1e-2 # same interior optimum here + @test childθ(Mn) ≈ childθ(Md) atol = 1e-2 + + # custom (acopula-style) reparam: SHARE one θ across root and child → 1 free param + recon = α -> (θ = exp(α[1]); + NestedArchimedeanCopula(ClaytonGenerator(θ); leaves = [1], + children = [ClaytonCopula(2, θ)])) + Ms = Distributions.fit(Copulas.CopulaModel, C, U; reparam = recon, init = [log(2.0)]) + @test StatsBase.dof(Ms) == 1 # shared ⇒ fewer dof than #generators + @test rootθ(Ms) ≈ childθ(Ms) # the shared parameter + + # enforce_nesting rejects heterogeneous (different-family) trees + Chet = NestedArchimedeanCopula(ClaytonGenerator(1.5); leaves = [1], + children = [GumbelCopula(2, 2.0)]) + @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, Chet, U; enforce_nesting = true) + # a custom reparam requires an explicit init + @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, C, U; reparam = recon) + end end From d91554d7d5b03f76ff793c469f34d57775651cdc Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 16:33:12 -0400 Subject: [PATCH 19/25] =?UTF-8?q?refactor:=20drop=20the=20Fa=C3=A0=20di=20?= =?UTF-8?q?Bruno=20composition=20method;=20move=20Clayton=20override=20to?= =?UTF-8?q?=20its=20generator=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove _composition_taylor_fdb + _poly_mul_inc and the ϕ⁻¹⁽ᵏ⁾ interface (generic + Clayton closed form): the FdB route is catastrophically ill-conditioned (per-PR discussion) and was the only consumer of ϕ⁻¹⁽ᵏ⁾. The direct (default) and implicit methods remain behind the composition_taylor hook. Move the closed-form Clayton/Clayton composition_taylor override into Generator/ClaytonGenerator.jl, with a header comment explaining what it computes. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/Generator.jl | 12 ----- src/Generator/ClaytonGenerator.jl | 29 +++++++++-- src/nested/NestedArchimedeanDensity.jl | 72 +------------------------- 3 files changed, 27 insertions(+), 86 deletions(-) diff --git a/src/Generator.jl b/src/Generator.jl index 5a715eb8..1da68422 100644 --- a/src/Generator.jl +++ b/src/Generator.jl @@ -26,7 +26,6 @@ More methods can be implemented for performance, althouhg there are implement de * `ϕ⁽¹⁾(G::Generator, t)` gives the first derivative of the generator * `ϕ⁽ᵏ⁾(G::Generator, k::Int, t)` gives the kth derivative of the generator * `ϕ⁻¹⁽¹⁾(G::Generator, t)` gives the first derivative of the inverse generator. -* `ϕ⁻¹⁽ᵏ⁾(G::Generator, k::Int, t)` gives the kth derivative of the inverse generator. * `𝒲₋₁(G::Generator, d::Int)` gives the Wiliamson d-transform of the generator as a univaraite positive dsitribution. References: @@ -43,20 +42,9 @@ max_monotony(G::Generator) = throw("This generator does not have a defined max m ϕ( G::Generator, t) = throw("This generator has not been defined correctly, the function `ϕ(G,t)` is not defined.") ϕ(G::Generator) = Base.Fix1(ϕ,G) ϕ⁻¹( G::Generator, x) = Roots.find_zero(t -> ϕ(G,t) - x, (0.0, Inf)) -ϕ⁻¹(G::Generator) = Base.Fix1(ϕ⁻¹, G) ϕ⁽¹⁾(G::Generator, t) = ForwardDiff.derivative(x -> ϕ(G,x), t) ϕ⁻¹⁽¹⁾(G::Generator, t) = ForwardDiff.derivative(x -> ϕ⁻¹(G, x), t) ϕ⁽ᵏ⁾(G::Generator, k::Int, t) = taylor(ϕ(G), t, k)[end] * factorial(k) -# kth derivative of the inverse generator. Generic default: a Taylor jet of the -# scalar inverse (mirrors ϕ⁽ᵏ⁾). Overridable per-generator with a closed form -# when one is known — used by the Faà di Bruno edge-composition in nested copulas -# (nested/NestedArchimedeanDensity.jl), where the inverse high-order derivatives -# are precision-sensitive. `factorial(big(k))` avoids Int64 overflow at high k; -# `oftype` keeps the working type (Float64/BigFloat) of the evaluation point. -function ϕ⁻¹⁽ᵏ⁾(G::Generator, k::Int, t) - c = taylor(ϕ⁻¹(G), t, k)[end] - return c * oftype(c, factorial(big(k))) -end ϕ⁽ᵏ⁾⁻¹(G::Generator, k::Int, t; start_at=t) = try Roots.find_zero(x -> ϕ⁽ᵏ⁾(G, k, x) - t, start_at) catch diff --git a/src/Generator/ClaytonGenerator.jl b/src/Generator/ClaytonGenerator.jl index c6acac51..617f75d7 100644 --- a/src/Generator/ClaytonGenerator.jl +++ b/src/Generator/ClaytonGenerator.jl @@ -56,11 +56,32 @@ max_monotony(G::ClaytonGenerator) = G.θ >= 0 ? Inf : (1 - 1/G.θ) ϕ⁻¹(G::ClaytonGenerator, t) = (t^(-G.θ)-1)/G.θ ϕ⁽¹⁾(G::ClaytonGenerator, t) = (1+G.θ*t) ≤ 0 ? 0 : - (1+G.θ*t)^(-1/G.θ -1) ϕ⁻¹⁽¹⁾(G::ClaytonGenerator, t) = -t^(-G.θ-1) -# Closed-form kth derivative of ϕ⁻¹(u)=(u^{-θ}-1)/θ: dᵏ/duᵏ = (1/θ)·∏_{ℓ=0}^{k-1}(-θ-ℓ)·u^{-θ-k}. -# (k=1 ⇒ -u^{-θ-1}, matching ϕ⁻¹⁽¹⁾.) Exact in u^{-θ-k}, no inverse-jet conditioning loss. -ϕ⁻¹⁽ᵏ⁾(G::ClaytonGenerator, k::Int, t) = t^(-G.θ-k) * prod(-G.θ-ℓ for ℓ in 0:k-1; init=1) / G.θ ϕ⁽ᵏ⁾(G::ClaytonGenerator, k::Int, t) = (1+G.θ*t) ≤ 0 ? 0 : (1 + G.θ * t)^(-1/G.θ - k) * prod(-1-ℓ*G.θ for ℓ in 0:k-1; init=1) -ϕ⁽ᵏ⁾⁻¹(G::ClaytonGenerator, k::Int, t; start_at=t) = ((t / prod(-1-ℓ*G.θ for ℓ in 0:k-1; init=1))^(1/(-1/G.θ - k)) -1)/G.θ +ϕ⁽ᵏ⁾⁻¹(G::ClaytonGenerator, k::Int, t; start_at=t) = ((t / prod(-1-ℓ*G.θ for ℓ in 0:k-1; init=1))^(1/(-1/G.θ - k)) -1)/G.θ + +# Closed-form edge-composition override for a Clayton-over-Clayton nesting. Overrides the +# default `composition_taylor` hook (nested/NestedArchimedeanDensity.jl) by dispatch, and +# returns the Taylor coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] of the inner→outer change of +# variables h(t) = ϕ⁻¹_outer(ϕ_inner(t)). With ϕ_θ(t)=(1+θt)^(-1/θ) and ϕ⁻¹_θ(u)=(u^(-θ)-1)/θ, +# the link is h(t) = ((1+θ_in·t)^r − 1)/θ_out, r = θ_out/θ_in — a reparametrised power map +# whose coefficients are a generalized binomial series, so it never touches the (ill- +# conditioned) high-order derivatives of the inverse. NOTE: the θ live INSIDE ϕ here, so the +# expansion base is 1+θ_in·t₀ (NOT 1+t₀); θ promotes into T so Float64/BigFloat stay exact. +function composition_taylor(outer::ClaytonGenerator, inner::ClaytonGenerator, t₀::T, d::Int) where {T} + θ_out = T(outer.θ) + θ_in = T(inner.θ) + r = θ_out / θ_in + base = 1 + θ_in * t₀ + h = Vector{T}(undef, d) + binom = one(T) # generalized binomial C(r,k), incremental + θ_in_pow = one(T) # θ_in^k + for k in 1:d + binom *= (r - (k - 1)) / k # C(r,k) = C(r,k-1)·(r-k+1)/k + θ_in_pow *= θ_in + h[k] = (θ_in_pow / θ_out) * binom * base^(r - k) + end + return h +end τ(G::ClaytonGenerator) = ifelse(isfinite(G.θ), G.θ/(G.θ+2), 1) τ⁻¹(::Type{<:ClaytonGenerator},τ) = ifelse(τ == 1,Inf,2τ/(1-τ)) diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index e0a6a07a..97231db2 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -60,7 +60,8 @@ end # Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = # Copulas._composition_taylor_implicit(o, i, t₀, d) # or register a closed form for a specific generator pair by adding a more- -# specific method (see the shipped Clayton/Clayton example below). This mirrors +# specific method (see the Clayton/Clayton override in Generator/ClaytonGenerator.jl). +# This mirrors # the existing per-generator ϕ⁽ᵏ⁾ override idiom: no keyword/flag, pure # dispatch, most-specific method wins. The working type T flows from t₀ into the # backend, so BigFloat/Double64 precision is carried through. @@ -134,75 +135,6 @@ function _composition_taylor_implicit(outer::Generator, inner::Generator, t₀:: return q end -# Faà di Bruno method (Oskar Laverny's PR #367 suggestion). The edge link -# h = ϕ⁻¹_outer ∘ ϕ_inner is an ordinary univariate composition f∘g with -# f = ϕ⁻¹_outer, g = ϕ_inner, so its Taylor coefficients follow from Faà di -# Bruno: h_n = Σ_{k=1}^{n} (ϕ⁻¹⁽ᵏ⁾(outer,s₀)/k!) · [εⁿ] ĝ(ε)^k, where -# s₀ = ϕ_inner(t₀) and ĝ(ε)=Σ_{m≥1} (ϕ⁽ᵐ⁾(inner,t₀)/m!) εᵐ is the inner -# increment series. Unlike the direct `taylor()` jet, this routes through the -# generators' OWN derivative methods `ϕ⁽ᵏ⁾(inner)` and `ϕ⁻¹⁽ᵏ⁾(outer)`, so any -# closed-form override (e.g. the exact Clayton ϕ⁻¹⁽ᵏ⁾) is used directly instead -# of a generic jet — the point of the override mechanism. The partial-Bell -# powering (`gpow ← gpow ⊛ ĝ`) is the same primitive the density assembly uses. -# Same return convention as the other two methods: Vector{T}, element k = h⁽ᵏ⁾/k!. -function _composition_taylor_fdb(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} - # Inner increment series ĝ: g[m] = ϕ⁽ᵐ⁾(inner,t₀)/m!, order m = index m. - g = T[T(ϕ⁽ᵏ⁾(inner, m, t₀)) / T(factorial(big(m))) for m in 1:d] - s₀ = ϕ(inner, t₀) # point for the outer inverse derivatives - # Outer inverse derivatives f[k] = ϕ⁻¹⁽ᵏ⁾(outer,s₀) (honours per-generator overrides). - f = T[T(ϕ⁻¹⁽ᵏ⁾(outer, k, s₀)) for k in 1:d] - h = zeros(T, d) - gpow = copy(g) # ĝ¹ (lowest order 1) - for k in 1:d - c = f[k] / T(factorial(big(k))) # ϕ⁻¹⁽ᵏ⁾(outer,s₀)/k! - @inbounds for n in k:d # ĝᵏ has lowest order k - h[n] += c * gpow[n] - end - k < d && (gpow = _poly_mul_inc(gpow, g, d)) # ĝᵏ⁺¹, truncated to order d - end - return h -end - -# Cauchy product of two constant-term-free polynomials (index m = order m), truncated -# to order d. Used to raise the inner increment series ĝ to successive powers above. -function _poly_mul_inc(a::AbstractVector{T}, b::AbstractVector{T}, d::Int) where {T} - out = zeros(T, d) - @inbounds for i in 1:d - ai = a[i] - iszero(ai) && continue - for j in 1:(d - i) # keep i+j ≤ d - out[i + j] += ai * b[j] - end - end - return out -end - -# Worked closed-form override: same-family Clayton/Clayton edge. For the package -# parametrization ϕ_θ(t) = (1+θt)^(-1/θ), ϕ⁻¹_θ(u) = (u^(-θ)-1)/θ, the inner-to- -# outer link h(t) = ϕ⁻¹_outer(ϕ_inner(t)) = ((1+θ_in·t)^r − 1)/θ_out, with -# r = θ_out/θ_in, is a reparametrised power map. Its Taylor coefficients are -# available in closed form, avoiding the inverse high-order derivatives entirely. -# This overrides the default purely by dispatch (same idiom as per-generator -# ϕ⁽ᵏ⁾); `_process_node` already calls the `composition_taylor` hook. NOTE: do -# NOT use the (1+t)^r−1 form — that is the θ=1 special case and is WRONG for this -# generator (θ lives inside ϕ). θ is promoted into T so Float64/BigFloat/Double64 -# all stay correct. -function composition_taylor(outer::ClaytonGenerator, inner::ClaytonGenerator, t₀::T, d::Int) where {T} - θ_out = T(outer.θ) - θ_in = T(inner.θ) - r = θ_out / θ_in - base = 1 + θ_in * t₀ # expansion base 1 + θ_in·t₀ - h = Vector{T}(undef, d) - binom = one(T) # generalized binomial C(r,k), incremental - θ_in_pow = one(T) # θ_in^k - for k in 1:d - binom *= (r - (k - 1)) / k # C(r,k) = C(r,k-1)·(r-k+1)/k - θ_in_pow *= θ_in - h[k] = (θ_in_pow / θ_out) * binom * base^(r - k) - end - return h # [h₁,…,h_d], length d, no constant -end - # Partial-Bell-polynomial step: given the Taylor coefficients `p` of the link # h (without its constant term) and the inner contribution `β` (the child's own # Faà di Bruno coefficient vector), return the order-`d` coefficient vector of From 0098d4e65a589f810ccdad9a47abbfee96c9e8a7 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 16:33:12 -0400 Subject: [PATCH 20/25] docs: nested fitting + edge-composition method examples Add a Fitting section (MLE on a fixed tree + the three parametrisation modes: default / enforce_nesting / custom reparam) and rewrite the edge-composition section around the three selectable methods (direct default / implicit / closed-form per pair). Method choice is about availability and speed; BigFloat is the precision fix for deep-tail / high-d inputs. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 109 +++++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 27 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index a9f09e6d..f3f4dda1 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -80,6 +80,57 @@ native [`ArchimedeanCopula`](@ref) so its fast specialised density is used. parameter ``\ge`` the outer parameter). Mixed-family nestings are accepted but must be validated by the user. +## Fitting + +`fit` performs maximum-likelihood estimation of the generator parameters on a +**fixed tree**: the leaf layout and the generator family at each node come from a +template instance, and only the scalar ``\theta`` of each node is optimised. Pass +the template and a `d×n` matrix of pseudo-observations (columns are observations). + +```@example nested +using Random +Ctrue = NestedArchimedeanCopula(ClaytonGenerator(2.0); + children = [ClaytonCopula(2, 6.0), ClaytonCopula(2, 8.0)]) +U = rand(Random.MersenneTwister(1), Ctrue, 2000) + +# Fit from a deliberately wrong same-shape template: +Cstart = NestedArchimedeanCopula(ClaytonGenerator(1.0); + children = [ClaytonCopula(2, 3.0), ClaytonCopula(2, 3.0)]) +M = fit(CopulaModel, Cstart, U) +M.result +``` + +The optimiser runs in an unconstrained space through a *parametrisation* — a map +`α -> NestedArchimedeanCopula` decoupled from the generator objects — with three +modes: + +- **default**: each generator is reparametrised independently inside its own + family domain; the cross-node nesting condition is not enforced. +- **`enforce_nesting=true`**: for same-family single-parameter trees + (Clayton/Gumbel/Frank/Joe), each child's ``\theta`` is parametrised as a + non-negative increment over its parent's, so every fitted optimum is a valid + nesting: + +```@example nested +Mn = fit(CopulaModel, Cstart, U; enforce_nesting = true) +(Mn.result.G.θ, Mn.result.children[1][1].G.θ) # inner θ ≥ outer θ +``` + +- **custom** (`reparam = (α -> C), init = α₀`): supply your own map — to share + parameters across nodes, fit on a different scale, or encode any constraint. + Here one ``\theta`` is shared by the root and both panels, a single free + parameter: + +```@example nested +recon = α -> (θ = exp(α[1]); + NestedArchimedeanCopula(ClaytonGenerator(θ); + children = [ClaytonCopula(2, θ), ClaytonCopula(2, θ)])) +Ms = fit(CopulaModel, Cstart, U; reparam = recon, init = [0.0]) +(Ms.result.G.θ, Ms.result.children[1][1].G.θ) # equal — the shared parameter +``` + +The two-argument form `fit(C0, U)` is a shorthand returning just the fitted copula. + ## Precision The recursion is generic in the value type. `logpdf` works on `Float64` @@ -96,44 +147,48 @@ logpdf(C, big.([0.3, 0.5, 0.4, 0.6])) Each parent→child edge in the Faà di Bruno recursion needs the truncated Taylor expansion of the inner-to-outer link ``h = \phi^{-1}_{\text{outer}} \circ -\phi_{\text{inner}}`` at the child's argument. The expansion goes through the -overloadable hook `composition_taylor(outer, inner, t₀, d)`. The DEFAULT forwards -to `_composition_taylor_direct`, a jet over the explicit composition. You select -a method exactly as you override `ϕ⁽ᵏ⁾` — by dispatch, with no keyword or flag; -the most-specific method wins, and `BigFloat`/`Double64` coordinates flow -through either path. - -Switch the global default to the **implicit** App. A.4 solver -(`_composition_taylor_implicit`) by redefining the generic method: +\phi_{\text{inner}}`` at the child's argument. It goes through the overloadable +hook `composition_taylor(outer, inner, t₀, d)`, selected by dispatch exactly as +you override `ϕ⁽ᵏ⁾` — most-specific method wins, no keyword or flag. Three methods +are available: + +**1. Direct (default).** `_composition_taylor_direct` puts a single jet through +the explicit composition. Fast and accurate for ordinary inputs. It requires both +``\phi`` and ``\phi^{-1}`` to accept a `Taylor1` argument. + +**2. Implicit.** `_composition_taylor_implicit` solves +``\phi_{\text{outer}}(h(t)) = \phi_{\text{inner}}(t)`` order-by-order, using only +the scalar derivatives ``\phi^{(k)}`` of both generators and a single scalar +``\phi^{-1}_{\text{outer}}`` — it never puts a `Taylor1` through ``\phi^{-1}``. +Use it when a generator's ``\phi^{-1}`` has no `Taylor1` method (for instance, an +inverse defined only through root-finding), where the direct jet cannot run. +Select it globally by redefining the generic method: ```julia Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = Copulas._composition_taylor_implicit(o, i, t₀, d) ``` -(This redefines the shipped generic default, so Julia prints a benign "method -overwritten" warning.) The implicit method solves ``\phi_{\text{outer}}(h(t)) = -\phi_{\text{inner}}(t)`` order-by-order, using only the scalar derivatives -``\phi^{(k)}`` of both generators and a single scalar ``\phi^{-1}_{\text{outer}}`` -— it never differentiates ``\phi^{-1}`` and never composes the two generators on -a single jet. That is the high-``d`` stability win: it avoids the composed-chain -underflow that defeats the direct jet for fast-tail generators (Frank at -``d \ge 90``). The win requires the generator to ship a closed-form -``\phi^{(k)}``; a family whose only ``\phi^{(k)}`` is the generic Taylor fallback -still works but routes each derivative through an interior scalar jet. - -Register a closed form for a specific generator pair by adding a more-specific -method. The package ships the Clayton/Clayton example, ``h(t) = -((1+\theta_{\text{in}} t)^{\theta_{\text{out}}/\theta_{\text{in}}} - 1)/ -\theta_{\text{out}}``: +(Redefining the shipped default prints a benign "method overwritten" warning.) + +**3. Closed form (per generator pair).** Register a more-specific method when you +know ``h`` analytically — the fastest and most robust option. The package ships +Clayton/Clayton (in `Generator/ClaytonGenerator.jl`), +``h(t) = ((1+\theta_{\text{in}} t)^{\theta_{\text{out}}/\theta_{\text{in}}} - 1)/ +\theta_{\text{out}}``; add your own the same way: ```julia -function Copulas.composition_taylor(outer::Copulas.ClaytonGenerator, - inner::Copulas.ClaytonGenerator, t₀, d::Int) - # closed-form Taylor coefficients of ((1+θ_in·t)^(θ_out/θ_in) − 1)/θ_out +function Copulas.composition_taylor(outer::MyGenerator, inner::MyGenerator, t₀, d::Int) + # return [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] end ``` +The method choice is about *availability and speed*, not accuracy: all three are +exact in exact arithmetic. For deep-tail or very high-``d`` inputs where a +`Float64` jet can overflow or lose precision, pass `BigFloat` coordinates (see +[Precision](#Precision)) — that is the precision fix, independent of which +composition method is in use. + ## Censored / survival likelihood Per-variable (right-)censoring is an **emergent capability** of the standard From 3c35be10e2f7b3ee48aedafc8814d354f5d6ed4b Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 16:41:51 -0400 Subject: [PATCH 21/25] =?UTF-8?q?refactor:=20drop=20the=20built-in=20enfor?= =?UTF-8?q?ce=5Fnesting=20=E2=80=94=20nesting=20is=20a=20user-supplied=20r?= =?UTF-8?q?eparam?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The decoupled parametrisation already lets the caller encode any constraint via `reparam`; a built-in enforce_nesting hard-coded one constraint and re-introduced a per-family whitelist into fit(). Remove it and its helpers; the docs and a test now demonstrate nesting as a user-written reparam (child θ = parent θ + softplus(δ)). Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 28 ++++---- src/nested/NestedArchimedeanDensity.jl | 6 +- src/nested/NestedArchimedeanFitting.jl | 95 +++----------------------- test/NestedArchimedeanCopula.jl | 19 +++--- 4 files changed, 37 insertions(+), 111 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index f3f4dda1..f30646b0 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -101,25 +101,25 @@ M.result ``` The optimiser runs in an unconstrained space through a *parametrisation* — a map -`α -> NestedArchimedeanCopula` decoupled from the generator objects — with three -modes: +`α -> NestedArchimedeanCopula` decoupled from the generator objects. The +**default** reparametrises each generator independently inside its own family +domain (the cross-node nesting condition is not enforced). Pass a **custom** +`reparam = (α -> C), init = α₀` to control the parametrisation yourself: share +parameters across nodes, fit on a different scale, or encode a constraint. -- **default**: each generator is reparametrised independently inside its own - family domain; the cross-node nesting condition is not enforced. -- **`enforce_nesting=true`**: for same-family single-parameter trees - (Clayton/Gumbel/Frank/Joe), each child's ``\theta`` is parametrised as a - non-negative increment over its parent's, so every fitted optimum is a valid - nesting: +For instance, enforce the nesting condition by building each child's ``\theta`` as +a non-negative increment over its parent's, so every step is a valid nesting: ```@example nested -Mn = fit(CopulaModel, Cstart, U; enforce_nesting = true) -(Mn.result.G.θ, Mn.result.children[1][1].G.θ) # inner θ ≥ outer θ +softplus(x) = log1p(exp(-abs(x))) + max(x, zero(x)) +nest = α -> NestedArchimedeanCopula(ClaytonGenerator(exp(α[1])); + children = [ClaytonCopula(2, exp(α[1]) + softplus(α[2])), + ClaytonCopula(2, exp(α[1]) + softplus(α[3]))]) +Mn = fit(CopulaModel, Cstart, U; reparam = nest, init = [0.0, 0.0, 0.0]) +(Mn.result.G.θ, Mn.result.children[1][1].G.θ) # inner θ ≥ outer θ, by construction ``` -- **custom** (`reparam = (α -> C), init = α₀`): supply your own map — to share - parameters across nodes, fit on a different scale, or encode any constraint. - Here one ``\theta`` is shared by the root and both panels, a single free - parameter: +Or share one ``\theta`` across the root and both panels — a single free parameter: ```@example nested recon = α -> (θ = exp(α[1]); diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index 97231db2..cf1bd8fb 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -76,8 +76,8 @@ function _composition_taylor_direct(outer::Generator, inner::Generator, t₀::T, return T[coefs[k+1] for k in 1:d] end -# Implicit-equation method (paper App. A.4 / acopula compose.py -# `_solve_composition_taylor`). Instead of differentiating ϕ⁻¹ (ill-conditioned +# Implicit-equation method (paper App. A.4). +# Instead of differentiating ϕ⁻¹ (ill-conditioned # high-order inverse derivatives; composed-chain underflow for fast-tail # generators), use that h satisfies ϕ_outer(h(t)) = ϕ_inner(t). With # h₀ = ϕ⁻¹_outer(ϕ_inner(t₀)) (a single SCALAR inverse) and @@ -99,7 +99,7 @@ function _composition_taylor_implicit(outer::Generator, inner::Generator, t₀:: q[1] = b[1] / a[1] d == 1 && return q - # Amortized O(d³) column-update ladder (port of acopula's exact recurrence). + # Amortized O(d³) column-update ladder (exact triangular recurrence). # Q[j+1] = q_j is the coefficient of εʲ in Q (Q has no constant term, Q[1]=0). # C[m+1, j+1] = [εʲ] Q^{m+2}, maintained as Q's coefficients fill in. npw = d - 1 # number of powers Q²..Q^d diff --git a/src/nested/NestedArchimedeanFitting.jl b/src/nested/NestedArchimedeanFitting.jl index 55560518..a9fbccf6 100644 --- a/src/nested/NestedArchimedeanFitting.jl +++ b/src/nested/NestedArchimedeanFitting.jl @@ -19,8 +19,8 @@ # NESTING VALIDITY: the DEFAULT parametrisation does not enforce the cross-node # "inner at least as dependent as outer" condition (the constructor leaves it to # the caller) — an unconstrained α only keeps each generator valid in its own -# family, so a fitted optimum CAN have inner θ < outer θ. Pass `enforce_nesting=true` -# (same-family θ-ordered trees) or a custom `reparam`/`init` to constrain it; see fit(). +# family, so a fitted optimum CAN have inner θ < outer θ. To constrain it, pass a +# custom `reparam`/`init` that encodes the constraint (see fit()). # # The tree is walked in a fixed PRE-ORDER (root generator, then each child block # in `children` declaration order; a flat child `(ArchimedeanCopula, dims)` inline, @@ -113,82 +113,13 @@ _example(::Type{NestedArchimedeanCopula}, d) = # ---- Parametrization layer (decoupled α -> tree map) ------------------------ # fit() optimises an unconstrained vector α through a reconstruction map -# `recon : α -> NestedArchimedeanCopula`. The DEFAULT map (`_nested_rebound`) +# `recon : α -> NestedArchimedeanCopula`. The DEFAULT (`_nested_rebound`) # reparametrises each generator independently inside its own family domain. A # CUSTOM `recon` (keywords `reparam`/`init`) decouples α from the generator -# objects entirely — so it can share parameters across nodes, change the -# per-generator parametrisation, or ENFORCE the nesting condition. `recon` only -# has to build generators from α (`fam(θ)` stays generic in α's element type), so -# ForwardDiff differentiates straight through it. `enforce_nesting=true` provides -# the nesting case for same-family single-parameter θ-ordered trees. - -_single_θ(G::Generator) = float(first(values(Distributions.params(G)))) # the lone dependence param -_softplus(x) = max(x, zero(x)) + log1p(exp(-abs(x))) # ≥ 0, smooth, overflow-safe -_invsoftplus(y) = log(expm1(y)) # inverse of softplus on y > 0 - -# Lower end of the θ range over which a family nests by `θ_child ≥ θ_parent`. -# `nothing` ⇒ enforce_nesting unsupported (bounded domain or multi-parameter family). -_nesting_base(::Type{<:Generator}) = nothing -_nesting_base(::Type{<:ClaytonGenerator}) = 0.0 -_nesting_base(::Type{<:GumbelGenerator}) = 1.0 -_nesting_base(::Type{<:FrankGenerator}) = 0.0 -_nesting_base(::Type{<:JoeGenerator}) = 1.0 - -function _assert_same_single_param_family(C::NestedArchimedeanCopula, fam) - (_gentype(C.G) === fam && length(Distributions.params(C.G)) == 1) || - throw(ArgumentError("enforce_nesting needs every node to be the same single-parameter family ($fam); got $(typeof(C.G)).")) - for ch in C.children - if ch isa Tuple - (_gentype(ch[1].G) === fam && length(Distributions.params(ch[1].G)) == 1) || - throw(ArgumentError("enforce_nesting needs every node to be $fam; got $(typeof(ch[1].G)).")) - else - _assert_same_single_param_family(ch, fam) - end - end -end - -# Flatten the template into α₀ (pre-order: this node, then each child) encoding each -# node's θ as a NON-NEGATIVE increment over its parent's θ (root over `base`). -function _nesting_flatten!(α, C::NestedArchimedeanCopula, lo) - θ = _single_θ(C.G) - push!(α, _invsoftplus(max(θ - lo, 1e-6))) - for ch in C.children - ch isa Tuple ? push!(α, _invsoftplus(max(_single_θ(ch[1].G) - θ, 1e-6))) : - _nesting_flatten!(α, ch, θ) - end - return α -end - -# Rebuild from α in the IDENTICAL pre-order: θ_node = lo + softplus(δ); each child -# θ_child = θ_node + softplus(δ_child). softplus ≥ 0 ⇒ θ non-decreasing down the -# tree ⇒ the nesting condition holds for every α ∈ ℝ^p. -function _nesting_build(C::NestedArchimedeanCopula, α, i::Ref{Int}, lo, fam) - θ = lo + _softplus(α[i[]]); i[] += 1 - newG = fam(θ) - newkids = Any[] - for ch in C.children - if ch isa Tuple - cc, ds = ch - θc = θ + _softplus(α[i[]]); i[] += 1 - push!(newkids, (ArchimedeanCopula(length(ds), fam(θc)), ds)) - else - push!(newkids, _nesting_build(ch, α, i, θ, fam)) - end - end - return NestedArchimedeanCopula{length(C.dims), typeof(newG)}(newG, copy(C.leafdims), newkids, copy(C.dims)) -end - -# (α₀, recon) for the built-in nesting-enforcing parametrization. -function _nesting_parametrization(C0::NestedArchimedeanCopula) - fam = _gentype(C0.G) - base = _nesting_base(fam) - base === nothing && throw(ArgumentError( - "enforce_nesting supports same-family single-parameter Clayton/Gumbel/Frank/Joe trees " * - "(θ-ordered nesting). For other families or custom constraints, pass `reparam`/`init`.")) - _assert_same_single_param_family(C0, fam) - α₀ = _nesting_flatten!(Float64[], C0, base) - return (α₀, α -> _nesting_build(C0, α, Ref(1), base, fam)) -end +# objects entirely, so the caller can share parameters across nodes, change the +# per-generator parametrisation, or encode a constraint such as nesting (e.g. a +# child θ = parent θ + softplus(δ) increment; see the docs). `recon` only has to +# build the tree from α generically, so ForwardDiff differentiates straight through. # ---- The MLE on a TEMPLATE INSTANCE (fixed structure) ----------------------- """ @@ -209,18 +140,16 @@ The optimisation runs in unconstrained space through a *parametrisation* — a m * **default**: each generator is reparametrised independently inside its own family domain (per-family `_unbound_params`/`_rebound_params`). The cross-node nesting condition is NOT enforced — the constructor leaves it to the caller. - * **`enforce_nesting=true`**: for same-family single-parameter θ-ordered trees - (Clayton/Gumbel/Frank/Joe), each child's θ is parametrised as a non-negative - increment over its parent's θ, so *every* optimiser step is a valid nesting. * **`reparam = (α -> C), init = α₀`**: supply your own parametrisation — to share parameters across nodes, change the per-generator parametrisation (e.g. fit on - a Kendall-τ scale), or encode an arbitrary constraint. `reparam` must build the - tree from `α` generically so ForwardDiff can differentiate it. + a Kendall-τ scale), or enforce a constraint such as nesting (parametrise each + child's θ as a non-negative increment over its parent's). `reparam` must build + the tree from `α` generically so ForwardDiff can differentiate it. The two-argument form is a quick shim returning only the fitted copula. """ function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, U; - method=:mle, enforce_nesting::Bool=false, reparam=nothing, init=nothing, + method=:mle, reparam=nothing, init=nothing, quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) @@ -230,8 +159,6 @@ function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, α₀, recon = if reparam !== nothing init === nothing && throw(ArgumentError("`init` (the α₀ vector) is required alongside a custom `reparam`.")) (collect(float.(init)), reparam) - elseif enforce_nesting - _nesting_parametrization(C0) else (_nested_unbound(C0), Base.Fix1(_nested_rebound, C0)) end diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index da3cc080..522183d0 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -609,14 +609,17 @@ end Md = Distributions.fit(Copulas.CopulaModel, C, U) @test StatsBase.dof(Md) == 2 - # enforce_nesting: θ_child ≥ θ_root holds at the optimum, by construction - Mn = Distributions.fit(Copulas.CopulaModel, C, U; enforce_nesting = true) - @test rootθ(Mn) ≤ childθ(Mn) + # custom reparam encoding NESTING: child θ = root θ + softplus(δ) ≥ root θ, + # so every optimiser step is a valid nesting (the user writes the constraint). + sp(x) = log1p(exp(-abs(x))) + max(x, zero(x)) + nest = α -> (θr = exp(α[1]); θc = θr + sp(α[2]); + NestedArchimedeanCopula(ClaytonGenerator(θr); leaves = [1], + children = [ClaytonCopula(2, θc)])) + Mn = Distributions.fit(Copulas.CopulaModel, C, U; reparam = nest, init = [0.0, 0.0]) + @test rootθ(Mn) ≤ childθ(Mn) # nesting enforced by the user's reparam @test StatsBase.dof(Mn) == 2 - @test rootθ(Mn) ≈ rootθ(Md) atol = 1e-2 # same interior optimum here - @test childθ(Mn) ≈ childθ(Md) atol = 1e-2 - # custom (acopula-style) reparam: SHARE one θ across root and child → 1 free param + # custom reparam SHARING one θ across root and child → 1 free parameter recon = α -> (θ = exp(α[1]); NestedArchimedeanCopula(ClaytonGenerator(θ); leaves = [1], children = [ClaytonCopula(2, θ)])) @@ -624,10 +627,6 @@ end @test StatsBase.dof(Ms) == 1 # shared ⇒ fewer dof than #generators @test rootθ(Ms) ≈ childθ(Ms) # the shared parameter - # enforce_nesting rejects heterogeneous (different-family) trees - Chet = NestedArchimedeanCopula(ClaytonGenerator(1.5); leaves = [1], - children = [GumbelCopula(2, 2.0)]) - @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, Chet, U; enforce_nesting = true) # a custom reparam requires an explicit init @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, C, U; reparam = recon) end From 344e06d0aadca1f3543a5974137c8e20fa5eab4d Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 22:01:13 -0400 Subject: [PATCH 22/25] =?UTF-8?q?feat:=20template-free=20custom=20fit=20?= =?UTF-8?q?=E2=80=94=20fit(CopulaModel,=20reparam,=20init,=20U)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A custom parametrisation no longer needs a dummy template copula: `fit(CopulaModel, reparam, init, U)` takes the map and its initial point directly and infers the dimension from `reparam(init)`. Distinguished from the template form `fit(CopulaModel, C0, U)` by arity; `fit(C0, U)` remains a quick shim. (No untyped `fit(reparam, init, U)` shim — that would be type piracy on Distributions.fit.) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/nested/NestedArchimedeanFitting.jl | 110 ++++++++++++------------- test/NestedArchimedeanCopula.jl | 12 +-- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/nested/NestedArchimedeanFitting.jl b/src/nested/NestedArchimedeanFitting.jl index a9fbccf6..a5229f4d 100644 --- a/src/nested/NestedArchimedeanFitting.jl +++ b/src/nested/NestedArchimedeanFitting.jl @@ -123,72 +123,70 @@ _example(::Type{NestedArchimedeanCopula}, d) = # ---- The MLE on a TEMPLATE INSTANCE (fixed structure) ----------------------- """ - fit(CopulaModel, C0::NestedArchimedeanCopula, U; method=:mle, quick_fit=false, kwargs...) - fit(C0::NestedArchimedeanCopula, U; kwargs...) -> NestedArchimedeanCopula - -Maximum-likelihood estimation of the generator parameters of a nested -Archimedean copula, holding the tree structure FIXED. - -`C0` is a template instance whose tree shape (leaf layout, children blocks) and -per-node generator families are kept fixed; only the scalar θ of each generator -(root and every inner node) is re-optimised. `U` is a `d×n` matrix of -pseudo-observations (columns = observations). - -The optimisation runs in unconstrained space through a *parametrisation* — a map -`α -> NestedArchimedeanCopula` that is decoupled from the generator objects: - - * **default**: each generator is reparametrised independently inside its own - family domain (per-family `_unbound_params`/`_rebound_params`). The cross-node + fit(CopulaModel, C0::NestedArchimedeanCopula, U) # template tree + fit(CopulaModel, reparam, init, U) # custom parametrisation + +Maximum-likelihood estimation of the generator parameters of a nested Archimedean +copula. `U` is a `d×n` matrix of pseudo-observations (columns = observations). The +optimiser runs in an unconstrained space through a *parametrisation* — a map +`α -> NestedArchimedeanCopula` decoupled from the generator objects — supplied in +one of two ways: + + * **template** `C0`: a template instance whose tree shape (leaf layout, children + blocks) and per-node generator families are kept fixed; only the scalar θ of + each node is re-optimised, each inside its own family domain. The cross-node nesting condition is NOT enforced — the constructor leaves it to the caller. - * **`reparam = (α -> C), init = α₀`**: supply your own parametrisation — to share - parameters across nodes, change the per-generator parametrisation (e.g. fit on - a Kendall-τ scale), or enforce a constraint such as nesting (parametrise each - child's θ as a non-negative increment over its parent's). `reparam` must build - the tree from `α` generically so ForwardDiff can differentiate it. - -The two-argument form is a quick shim returning only the fitted copula. + * **custom** `reparam`, `init`: your own map `reparam(α) -> copula` and its + initial `α₀` (no template needed — the map fully defines the tree). Use it to + share parameters across nodes, change the per-generator parametrisation (e.g. + fit on a Kendall-τ scale), or enforce a constraint such as nesting (parametrise + each child's θ as a non-negative increment over its parent's). `reparam` must + build the tree from `α` generically so ForwardDiff can differentiate it. + +`fit(C0, U)` is a quick shim returning only the fitted copula; for the custom form +use `fit(CopulaModel, reparam, init, U).result`. """ -function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, U; - method=:mle, reparam=nothing, init=nothing, - quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} - method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) - size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) - n = size(U, 2) - - # Resolve the parametrisation: an unconstrained α₀ and a map `recon: α -> copula`. - α₀, recon = if reparam !== nothing - init === nothing && throw(ArgumentError("`init` (the α₀ vector) is required alongside a custom `reparam`.")) - (collect(float.(init)), reparam) - else - (_nested_unbound(C0), Base.Fix1(_nested_rebound, C0)) - end - +# Shared optimiser + model assembly for a parametrisation `recon: α -> copula`. +function _fit_nested(recon, α₀::AbstractVector, U, d::Int, n::Int; quick_fit, derived_measures) loss(α) = -Distributions.loglikelihood(recon(α), U) - t = @elapsed res = try Optim.optimize(loss, α₀, Optim.LBFGS(); autodiff = ADTypes.AutoForwardDiff()) catch err Optim.optimize(loss, α₀, Optim.NelderMead()) end - Chat = recon(Optim.minimizer(res)) quick_fit && return (result = Chat,) - ll = Distributions.loglikelihood(Chat, U) - # NOTE: we deliberately do NOT put :θ̂ in the metadata, so the generic vcov - # path (which reconstructs via the type-positional _unbound/_rebound and - # `CT(d, θ...)` we do not have) is never reached. + # NOTE: we deliberately do NOT put :θ̂ in the metadata, so the generic vcov path + # (type-positional reconstruction we do not have) is never reached. md = (; d, n, method = :mle, nparams = length(α₀), - optimizer = Optim.summary(res), - converged = Optim.converged(res), - iterations = Optim.iterations(res), - elapsed_sec = t, derived_measures, U = U) - return CopulaModel(Chat, n, ll, :mle; - vcov = nothing, - converged = Optim.converged(res), - iterations = Optim.iterations(res), - elapsed_sec = t, - method_details = md) + optimizer = Optim.summary(res), converged = Optim.converged(res), + iterations = Optim.iterations(res), elapsed_sec = t, derived_measures, U = U) + return CopulaModel(Chat, n, ll, :mle; vcov = nothing, + converged = Optim.converged(res), iterations = Optim.iterations(res), + elapsed_sec = t, method_details = md) +end + +# Default: reparametrise a fixed TEMPLATE tree (its shape + families are kept fixed, +# only the scalar θ of every node is optimised). +function Distributions.fit(::Type{CopulaModel}, C0::NestedArchimedeanCopula{d}, U; + method=:mle, quick_fit=false, vcov=false, derived_measures=true, kwargs...) where {d} + method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) + size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) + return _fit_nested(Base.Fix1(_nested_rebound, C0), _nested_unbound(C0), U, d, size(U, 2); + quick_fit, derived_measures) +end + +# Custom parametrisation: a map `reparam : α -> NestedArchimedeanCopula` and its +# initial α₀ — NO template, the map fully defines the tree (so it can share +# parameters, change the per-generator parametrisation, or encode a constraint). +function Distributions.fit(::Type{CopulaModel}, reparam, init::AbstractVector, U; + method=:mle, quick_fit=false, vcov=false, derived_measures=true, kwargs...) + method === :mle || throw(ArgumentError("NestedArchimedeanCopula supports only method=:mle (got $method).")) + α₀ = collect(float.(init)) + d = length(reparam(α₀))::Int # dimension from the parametrisation itself + size(U, 1) == d || throw(ArgumentError("Data dimension $(size(U,1)) ≠ copula dimension $d.")) + return _fit_nested(reparam, α₀, U, d, size(U, 2); quick_fit, derived_measures) end # ---- coef / coefnames for a fitted nested copula ---------------------------- @@ -222,6 +220,8 @@ StatsBase.coefnames(M::CopulaModel{<:NestedArchimedeanCopula}) = _nested_coef(M. StatsBase.dof(M::CopulaModel{<:NestedArchimedeanCopula}) = hasproperty(M.method_details, :nparams) ? M.method_details.nparams : length(StatsBase.coef(M)) -# Quick instance shortcut: returns only the fitted copula. +# Quick template shim: returns only the fitted copula. (No `fit(reparam, init, U)` +# shim — with an untyped `reparam` it would be type piracy on `Distributions.fit`; +# use `fit(CopulaModel, reparam, init, U).result` for the custom case.) Distributions.fit(C0::NestedArchimedeanCopula, U; kwargs...) = Distributions.fit(CopulaModel, C0, U; quick_fit = true, kwargs...).result diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 522183d0..51bb5e78 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -609,13 +609,13 @@ end Md = Distributions.fit(Copulas.CopulaModel, C, U) @test StatsBase.dof(Md) == 2 - # custom reparam encoding NESTING: child θ = root θ + softplus(δ) ≥ root θ, - # so every optimiser step is a valid nesting (the user writes the constraint). + # custom reparam encoding NESTING (no template): child θ = root θ + softplus(δ) + # ≥ root θ, so every optimiser step is a valid nesting. sp(x) = log1p(exp(-abs(x))) + max(x, zero(x)) nest = α -> (θr = exp(α[1]); θc = θr + sp(α[2]); NestedArchimedeanCopula(ClaytonGenerator(θr); leaves = [1], children = [ClaytonCopula(2, θc)])) - Mn = Distributions.fit(Copulas.CopulaModel, C, U; reparam = nest, init = [0.0, 0.0]) + Mn = Distributions.fit(Copulas.CopulaModel, nest, [0.0, 0.0], U) @test rootθ(Mn) ≤ childθ(Mn) # nesting enforced by the user's reparam @test StatsBase.dof(Mn) == 2 @@ -623,11 +623,11 @@ end recon = α -> (θ = exp(α[1]); NestedArchimedeanCopula(ClaytonGenerator(θ); leaves = [1], children = [ClaytonCopula(2, θ)])) - Ms = Distributions.fit(Copulas.CopulaModel, C, U; reparam = recon, init = [log(2.0)]) + Ms = Distributions.fit(Copulas.CopulaModel, recon, [log(2.0)], U) @test StatsBase.dof(Ms) == 1 # shared ⇒ fewer dof than #generators @test rootθ(Ms) ≈ childθ(Ms) # the shared parameter - # a custom reparam requires an explicit init - @test_throws ArgumentError Distributions.fit(Copulas.CopulaModel, C, U; reparam = recon) + # quick_fit returns just the copula; the dimension comes from the reparam + @test Distributions.fit(Copulas.CopulaModel, recon, [log(2.0)], U; quick_fit = true).result isa NestedArchimedeanCopula end end From ded109bf2fb4e94fda19de0fde8b5bc7170013a8 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 22:01:13 -0400 Subject: [PATCH 23/25] docs: fix censored-likelihood math rendering, drop censored-margins note, update fit examples The underbrace texttt labels broke MathJax (subscripts + thin-spaces inside texttt); use plain text labels and give the code mapping in prose. Remove the Distributions.censored warning. Update the fit examples to the template-free fit(CopulaModel, reparam, init, U) form. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index f30646b0..76931615 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -101,11 +101,11 @@ M.result ``` The optimiser runs in an unconstrained space through a *parametrisation* — a map -`α -> NestedArchimedeanCopula` decoupled from the generator objects. The -**default** reparametrises each generator independently inside its own family -domain (the cross-node nesting condition is not enforced). Pass a **custom** -`reparam = (α -> C), init = α₀` to control the parametrisation yourself: share -parameters across nodes, fit on a different scale, or encode a constraint. +`α -> NestedArchimedeanCopula` decoupled from the generator objects. Above we fit +a **template** tree. For full control, pass your own map and its initial point, +`fit(CopulaModel, reparam, init, U)` — no template needed, since `reparam` builds +the whole tree. This lets you share parameters across nodes, fit on a different +scale, or encode a constraint. For instance, enforce the nesting condition by building each child's ``\theta`` as a non-negative increment over its parent's, so every step is a valid nesting: @@ -115,7 +115,7 @@ softplus(x) = log1p(exp(-abs(x))) + max(x, zero(x)) nest = α -> NestedArchimedeanCopula(ClaytonGenerator(exp(α[1])); children = [ClaytonCopula(2, exp(α[1]) + softplus(α[2])), ClaytonCopula(2, exp(α[1]) + softplus(α[3]))]) -Mn = fit(CopulaModel, Cstart, U; reparam = nest, init = [0.0, 0.0, 0.0]) +Mn = fit(CopulaModel, nest, [0.0, 0.0, 0.0], U) (Mn.result.G.θ, Mn.result.children[1][1].G.θ) # inner θ ≥ outer θ, by construction ``` @@ -125,11 +125,12 @@ Or share one ``\theta`` across the root and both panels — a single free parame recon = α -> (θ = exp(α[1]); NestedArchimedeanCopula(ClaytonGenerator(θ); children = [ClaytonCopula(2, θ), ClaytonCopula(2, θ)])) -Ms = fit(CopulaModel, Cstart, U; reparam = recon, init = [0.0]) +Ms = fit(CopulaModel, recon, [0.0], U) (Ms.result.G.θ, Ms.result.children[1][1].G.θ) # equal — the shared parameter ``` -The two-argument form `fit(C0, U)` is a shorthand returning just the fitted copula. +`fit(C0, U)` is a shorthand returning just the fitted copula; for the custom form +use `fit(CopulaModel, reparam, init, U).result`. ## Precision @@ -199,11 +200,14 @@ observation). The per-variable censored likelihood factorises as the *gist recipe* ```math -\underbrace{\log f_{O}(x_O)}_{\texttt{logpdf(subsetdims(X,O),\,x_O)}} +\underbrace{\log f_{O}(x_O)}_{\text{observed-marginal density}} \;+\; -\underbrace{\log P(X_C \le x_C \mid X_O = x_O)}_{\texttt{logcdf(condition(X,O,x_O),\,x_C)}}, +\underbrace{\log P(X_C \le x_C \mid X_O = x_O)}_{\text{conditional survival}}, ``` +In code these two terms are `logpdf(subsetdims(X, O), x_O)` and +`logcdf(condition(X, O, x_O), x_C)`. + which equals the observed-marginal density times the copula's mixed partial over the observed coordinates, @@ -254,10 +258,3 @@ empty (all observed) the recipe reduces to the ordinary joint density lose precision; pass `BigFloat` coordinates to recover the exact value (as for the density). End-to-end `BigFloat` through `condition()` is not yet enabled — upstream stores the conditioning values as `Float64`. - -!!! warning "Do not use `Distributions.censored` margins" - `logpdf(SklarDist(C, (…, censored(m), …)), x)` returns `-Inf`: a censored - margin places an atom at the censoring time, which Sklar's theorem maps to - the copula boundary ``u = 1`` — off the open domain ``(0,1)^d`` where the - copula density is defined. The `condition` + `subsetdims` recipe above is the - correct replacement. From 5b91c09f380cac48677f035d17297a0fc5e3ddb2 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Mon, 1 Jun 2026 23:41:48 -0400 Subject: [PATCH 24/25] refactor: make the edge-composition methods public + documented MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename _composition_taylor_direct/_implicit to composition_taylor_direct/composition_taylor_implicit (users select them via the composition_taylor hook), and give the hook + both methods docstrings — including the DIY-with-taylor recipe. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/bestiary/nested.md | 6 +- src/nested/NestedArchimedeanDensity.jl | 97 ++++++++++++++++---------- test/NestedArchimedeanCopula.jl | 8 +-- 3 files changed, 69 insertions(+), 42 deletions(-) diff --git a/docs/src/bestiary/nested.md b/docs/src/bestiary/nested.md index 76931615..61e508b2 100644 --- a/docs/src/bestiary/nested.md +++ b/docs/src/bestiary/nested.md @@ -153,11 +153,11 @@ hook `composition_taylor(outer, inner, t₀, d)`, selected by dispatch exactly a you override `ϕ⁽ᵏ⁾` — most-specific method wins, no keyword or flag. Three methods are available: -**1. Direct (default).** `_composition_taylor_direct` puts a single jet through +**1. Direct (default).** `composition_taylor_direct` puts a single jet through the explicit composition. Fast and accurate for ordinary inputs. It requires both ``\phi`` and ``\phi^{-1}`` to accept a `Taylor1` argument. -**2. Implicit.** `_composition_taylor_implicit` solves +**2. Implicit.** `composition_taylor_implicit` solves ``\phi_{\text{outer}}(h(t)) = \phi_{\text{inner}}(t)`` order-by-order, using only the scalar derivatives ``\phi^{(k)}`` of both generators and a single scalar ``\phi^{-1}_{\text{outer}}`` — it never puts a `Taylor1` through ``\phi^{-1}``. @@ -167,7 +167,7 @@ Select it globally by redefining the generic method: ```julia Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = - Copulas._composition_taylor_implicit(o, i, t₀, d) + Copulas.composition_taylor_implicit(o, i, t₀, d) ``` (Redefining the shipped default prints a benign "method overwritten" warning.) diff --git a/src/nested/NestedArchimedeanDensity.jl b/src/nested/NestedArchimedeanDensity.jl index cf1bd8fb..ff0c0b42 100644 --- a/src/nested/NestedArchimedeanDensity.jl +++ b/src/nested/NestedArchimedeanDensity.jl @@ -48,47 +48,74 @@ struct _NestedNode{TG<:Generator, T} children::Vector{_NestedNode} end -# Overloadable hook for the edge composition. Each parent→child edge needs the -# Taylor coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] of the change of variables -# h = ϕ⁻¹_outer ∘ ϕ_inner at t₀, the inner-to-outer link in the Faà di Bruno -# recursion. `_process_node` calls THIS hook, so overrides take effect. -# -# The DEFAULT forwards to `_composition_taylor_direct` (jet over the explicit -# composition) — this is the ONLY generic method shipped, so the default -# behaviour is byte-unchanged. Switch the global default to the implicit -# App. A.4 solver by redefining this generic method, e.g. -# Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = -# Copulas._composition_taylor_implicit(o, i, t₀, d) -# or register a closed form for a specific generator pair by adding a more- -# specific method (see the Clayton/Clayton override in Generator/ClaytonGenerator.jl). -# This mirrors -# the existing per-generator ϕ⁽ᵏ⁾ override idiom: no keyword/flag, pure -# dispatch, most-specific method wins. The working type T flows from t₀ into the -# backend, so BigFloat/Double64 precision is carried through. +""" + composition_taylor(outer::Generator, inner::Generator, t₀, d) -> Vector + +Overridable hook for the parent→child edge composition in a nested Archimedean +density. Returns the Taylor coefficients `[h⁽¹⁾(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!]` (the +constant term `h₀` dropped) of the inner-to-outer change of variables +`h = ϕ⁻¹_outer ∘ ϕ_inner`. + +The default delegates to [`composition_taylor_direct`](@ref). Select a different +method, or supply your own, by adding a method to this function — most-specific +wins, no keyword or flag, mirroring the per-generator `ϕ⁽ᵏ⁾` override idiom: + + * **switch globally to the implicit solver** [`composition_taylor_implicit`](@ref) + (paper App. A.4 — uses only scalar `ϕ⁽ᵏ⁾` and one scalar `ϕ⁻¹`, never a + `Taylor1` through `ϕ⁻¹`; the method to use when a generator's `ϕ⁻¹` has no + `Taylor1` method): + + ```julia + Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = + Copulas.composition_taylor_implicit(o, i, t₀, d) + ``` + + * **register a closed form for a generator pair** (fastest, most robust — see the + Clayton/Clayton method in `Generator/ClaytonGenerator.jl`). + + * **roll your own** with the [`taylor`](@ref Copulas.taylor) primitive: jet your + (possibly hand-simplified) link and drop the constant term — `taylor` returns + `[f(t₀), f'(t₀)/1!, …]`, so take `[2:d+1]`: + + ```julia + Copulas.composition_taylor(o::MyGen, i::MyGen, t₀, d) = + Copulas.taylor(t -> Copulas.ϕ⁻¹(o, Copulas.ϕ(i, t)), t₀, d)[2:d+1] + ``` + +The working type flows from `t₀`, so `BigFloat`/`Double64` precision is carried +through whichever method is selected. +""" composition_taylor(outer::Generator, inner::Generator, t₀, d::Int) = - _composition_taylor_direct(outer, inner, t₀, d) + composition_taylor_direct(outer, inner, t₀, d) -# DEFAULT direct method: Taylor-expand the explicit composition ϕ⁻¹_outer ∘ ϕ_inner -# at t₀ to order d via Copulas' generic `taylor` jet primitive. Returns the -# coefficients [h'(t₀)/1!, …, h⁽ᵈ⁾(t₀)/d!] (constant h₀ dropped) as a Vector{T}. -function _composition_taylor_direct(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} +""" + composition_taylor_direct(outer, inner, t₀, d) + +Default edge composition (see [`composition_taylor`](@ref)): a single Taylor jet +over the explicit composition `ϕ⁻¹_outer ∘ ϕ_inner` at `t₀`, returning the +coefficients `[h⁽ᵏ⁾(t₀)/k! for k in 1:d]`. Requires both `ϕ` and `ϕ⁻¹` to accept a +`Taylor1` argument. +""" +function composition_taylor_direct(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} coefs = taylor(x -> ϕ⁻¹(outer, ϕ(inner, x)), t₀, d) return T[coefs[k+1] for k in 1:d] end -# Implicit-equation method (paper App. A.4). -# Instead of differentiating ϕ⁻¹ (ill-conditioned -# high-order inverse derivatives; composed-chain underflow for fast-tail -# generators), use that h satisfies ϕ_outer(h(t)) = ϕ_inner(t). With -# h₀ = ϕ⁻¹_outer(ϕ_inner(t₀)) (a single SCALAR inverse) and -# h(t₀+ε) = h₀ + Q(ε), Q(ε) = Σ qₘ εᵐ, write aₘ = ϕ⁽ᵐ⁾(outer,h₀)/m! and -# bₘ = ϕ⁽ᵐ⁾(inner,t₀)/m!. Matching εᵏ in Σ aₘ Qᵐ = Σ bₘ εᵐ gives the triangular -# solve q₁ = b₁/a₁; qₖ = (bₖ − Σ_{m≥2} aₘ [εᵏ]Qᵐ)/a₁. Uses ONLY the scalar -# k-th derivatives ϕ⁽ᵏ⁾(outer)/ϕ⁽ᵏ⁾(inner) and one scalar ϕ⁻¹(outer); never ϕ -# or ϕ⁻¹ on a Taylor1, never the inverse high-order derivatives. Returns the -# IDENTICAL convention to `_composition_taylor_direct`: Vector{T} of length d, -# element k = h⁽ᵏ⁾(t₀)/k!, keyed off T = typeof(t₀) so BigFloat exactness flows. -function _composition_taylor_implicit(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} +""" + composition_taylor_implicit(outer, inner, t₀, d) + +Edge composition by implicit differentiation (paper App. A.4; see +[`composition_taylor`](@ref)): `h` satisfies `ϕ_outer(h(t)) = ϕ_inner(t)`, solved +order by order by a triangular system using only the scalar derivatives `ϕ⁽ᵏ⁾` of +both generators and one scalar `ϕ⁻¹_outer` — it never puts a `Taylor1` through +`ϕ⁻¹`, so it is the method to use when a generator's `ϕ⁻¹` has no `Taylor1` method. +Returns the same `[h⁽ᵏ⁾(t₀)/k! for k in 1:d]` convention as +[`composition_taylor_direct`](@ref). +""" +function composition_taylor_implicit(outer::Generator, inner::Generator, t₀::T, d::Int) where {T} + # h₀ = ϕ⁻¹_outer(ϕ_inner(t₀)); with h(t₀+ε)=h₀+Q(ε), Q=Σ qₘεᵐ, aₘ=ϕ⁽ᵐ⁾(outer,h₀)/m!, + # bₘ=ϕ⁽ᵐ⁾(inner,t₀)/m!, matching εᵏ in Σ aₘ Qᵐ = Σ bₘ εᵐ gives q₁=b₁/a₁ and the + # triangular qₖ=(bₖ − Σ_{m≥2} aₘ[εᵏ]Qᵐ)/a₁ below — no Taylor1 on ϕ/ϕ⁻¹. # Derivative-side coefficients: a[m] = ϕ⁽ᵐ⁾(outer,h₀)/m!, b[m] = ϕ⁽ᵐ⁾(inner,t₀)/m! # for m = 1..d (scalar k-th derivatives — NO Taylor1 on ϕ/ϕ⁻¹). b = T[ϕ⁽ᵏ⁾(inner, m, t₀) / T(factorial(big(m))) for m in 1:d] diff --git a/test/NestedArchimedeanCopula.jl b/test/NestedArchimedeanCopula.jl index 51bb5e78..c489c6ab 100644 --- a/test/NestedArchimedeanCopula.jl +++ b/test/NestedArchimedeanCopula.jl @@ -214,8 +214,8 @@ end # bit-identity guard of testset 3. # ----------------------------------------------------------------------- @testset "edge-composition method (hook)" begin - direct = Copulas._composition_taylor_direct - implicit = Copulas._composition_taylor_implicit + direct = Copulas.composition_taylor_direct + implicit = Copulas.composition_taylor_implicit # (b) implicit == direct across same-family AND a cross-family edge, at # several depths, with nestable params (inner ≥ outer dependence). @@ -489,7 +489,7 @@ end @testset "global implicit override gives correct nested densities" begin # Repoint the global default to the implicit solver (benign overwrite warning). Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = - Copulas._composition_taylor_implicit(o, i, t₀, d) + Copulas.composition_taylor_implicit(o, i, t₀, d) datadir = joinpath(@__DIR__, "data", "nested") cases = [ @@ -514,7 +514,7 @@ end # Restore the shipped default-direct generic method so the override does # not leak into any later test in the same session. Copulas.composition_taylor(o::Copulas.Generator, i::Copulas.Generator, t₀, d) = - Copulas._composition_taylor_direct(o, i, t₀, d) + Copulas.composition_taylor_direct(o, i, t₀, d) end @testset "subsetdims respects requested coordinate order (reordering)" begin From 9f06bd0ea4f64b785ee7322c2cd5b4721db83e03 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Tue, 2 Jun 2026 00:03:51 -0400 Subject: [PATCH 25/25] =?UTF-8?q?docs:=20nested=20SubsetCopula=20precondit?= =?UTF-8?q?ion=20is=20now=202=20=E2=89=A4=20p=20=E2=89=A4=20d=20(subsetdim?= =?UTF-8?q?s=20supports=20p=3D=3Dd=20via=20#369)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- src/nested/NestedConditioning.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nested/NestedConditioning.jl b/src/nested/NestedConditioning.jl index 5e54289f..11a23485 100644 --- a/src/nested/NestedConditioning.jl +++ b/src/nested/NestedConditioning.jl @@ -138,8 +138,8 @@ _kid_dims(ch::NestedArchimedeanCopula) = ch.dims function SubsetCopula(C::NestedArchimedeanCopula{d, TG}, dims::NTuple{p, Int}) where {d, TG, p} # `subsetdims` short-circuits p==1 (Uniform) and the identity `dims==1:d`, and - # asserts `p < d` otherwise, so here 2 <= p <= d-1 and `dims` may be a - # reordering (permutation) of the kept coordinates. + # asserts `p <= d` otherwise, so here 2 <= p <= d and `dims` may be a (possibly + # full, p==d) reordering/permutation of the kept coordinates. O = Set{Int}(dims) pruned = _prune_node(C, O) # NestedArchimedeanCopula on GLOBAL dims # Genuinely-nested → flat collapse: every survivor lands directly under the