From bbbdd398c82f73ecb054917aece0e39c6fd422af Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Sun, 18 Feb 2024 04:58:58 +0000 Subject: [PATCH] build based on 00cc547 --- dev/api/index.html | 6 +- dev/examples/conditions/index.html | 41716 +++++++++++++------------- dev/examples/diff_sort/index.html | 198 +- dev/examples/model_G.pt | Bin 97728 -> 97728 bytes dev/examples/monoci_mlp/index.html | 366 +- dev/examples/monofit/index.html | 5006 ++-- dev/examples/monofit_mlp/index.html | 382 +- dev/examples/ph/index.html | 2490 +- dev/index.html | 2 +- dev/search/index.html | 2 +- 10 files changed, 25083 insertions(+), 25085 deletions(-) diff --git a/dev/api/index.html b/dev/api/index.html index 738f3db..591ce3a 100644 --- a/dev/api/index.html +++ b/dev/api/index.html @@ -1,7 +1,7 @@ -API · MonotoneSplines.jl

API

MonotoneSplines.SplType

A Spl object.

Fields

  • H: an RObject generated by splines::bs()
  • β: the coefficients for the B-spline.
source
MonotoneSplines.build_modelMethod
build_model(x::AbstractVector{T}; <keyword arguments>)

Construct design matrix and other internal variables for smoothing spline.

Arguments

  • all_knots = false: whether to use all knots. If false, use the same rule as in R's smooth.spline.
  • prop_nknots = 1.0: a proportion for using fewer knots. Suppose the number of knots is nknots, then the final number of knots is prop_nknots * nknots. Currently, it is only effective when all_knots = false.
  • ε = 6.06e-6: a small number added to the diagonal of matrix Ω to ensure it is positive definite.

Returns

  • B-spline design matrix B at x for cubic splines
  • L: cholesky decomposition of Ω = LL'
  • J: number of basis functions, which does not change for cubic splines, so it is only intended for smoothing splines

the above four are shared with the method for cubic splines, but for smoothing splines, it also returns

  • mx, rx, idx, idx0: only for smoothing splines
source
MonotoneSplines.build_modelMethod
build_model(x::AbstractVector{T}, J::Int; <keyword arguments>)

Construct design matrix and other internal variables for cubic spline with J basis functions.

Returns

  • B: B-spline design matrix B at x for cubic splines
  • rB: raw RObject of B
source
MonotoneSplines.check_CIMethod
check_CI(; <keyword arguments>)

Conduct repeated experiments to check the overlap of confidence bands (default, check_acc = false) or accuracy of fitting curves (check_acc = true) between MLP generator and OPT solution.

Arguments

  • n = 100: sample size
  • σ = 0.1: noise level
  • f::Function = exp: the truth curve
  • seed = 1234: random seed for the simulated data
  • check_acc = false: check overlap of confidence bands (default: false) or accuracy of fitting curves (true)
  • nepoch0 = 5: number of epoch in the first step to fit the curve
  • nepoch = 50: number of epoch in the second step to obtain the confidence band
  • niter_per_epoch = 100: number of iterations in each epoch
  • η0 = 1e-4: learning rate in step 1
  • η = 1e-4: learning rate in step 2 (NOTE: lr did not make much difference, unify these two)
  • K0 = 32: Monte Carlo size for averaging λ in step 2
  • K = 32: Monte Carlo size for averaging λ in step 1 and for averaging y in step 2. (NOTE: unify these two Monte Carlo size)
  • nB = 2000: number of bootstrap replications
  • nrep = 5: number of repeated experiments
  • fig = true: whether to plot
  • figfolder = ~: folder for saving the figures if fig = true
  • λs = exp.(range(-8, -2, length = 10)): region of continuous λ
  • nhidden = 1000: number of hidden layers
  • depth = 2: depth of MLP
  • demo = false: whether to save internal results for demo purpose
  • model_file = nothing: if not nothing, load the model from the file.
  • gpu_id = 0: specify the id of GPU, -1 for CPU.
  • prop_nknots = 0.2: proportion of number of knots in B-spline basis.
  • backend = "flux": train MLP generator with Flux or PyTorch
source
MonotoneSplines.ci_mono_ss_mlpMethod
ci_mono_ss_mlp(x::AbstractVector{T}, y::AbstractVector{T}, λs::AbstractVector{T}; )

Fit data x, y at each λs with confidence bands.

Arguments

  • prop_nknots = 0.2: proportion of number of knots
  • backend = "flux": flux or pytorch
  • model_file: path for saving trained model
  • nepoch0 = 3: number of epoch in training step 1
  • nepoch = 3: number of epoch in training step 2
  • niter_per_epoch = 100: number of iterations in each epoch
  • M = 10: Monte Carlo size
  • nhidden = 100: number of hidden units
  • disable_progressbar = false: set true if generating documentation
  • device = :cpu: train using :cpu or :gpu
  • sort_in_nn = true: (only for backend = "flux") whether put sort in MLP
  • eval_in_batch = false: (only for backend = "flux") Currently, Flux does not support sort in batch mode. A workaround with customized Zygote.batch_sort needs further verifications.
source
MonotoneSplines.coverage_probMethod
coverage_prob(CIs::AbstractMatrix, y0::AbstractVector)

Calculate coverage probability given n x 2 CI matrix CIs and true vector y0 of size n.

source
MonotoneSplines.cv_mono_ssMethod
cv_mono_ss(x::AbstractVector{T}, y::AbstractVector{T}, λs::AbstractVector{T})

Cross-validation for monotone fitting with smoothing spline on y ~ x among parameters λs.

source
MonotoneSplines.div_into_foldsMethod
div_into_folds(N::Int; K = 10, seed = 1234)

Equally divide 1:N into K folds with random seed seed. If seed is negative, it is a non-random division, where the i-th fold would be the i-th equidistant range.

source
MonotoneSplines.eval_penaltyMethod
eval_penalty(model::Spl{T}, x::AbstractVector{T})

Evaluate the penalty matrix by R's fda::eval.penalty. To make sure the corresponding design matrix contructed by fda::eval.basis is the same as model.H, it asserts the norm difference should be smaller than sqrt(eps()).

source
MonotoneSplines.fitFunction
fit(X, y, paras, method)

paras is either the number of basis functions, or the sequence of interior knots. Return a Spl object.

n = 100
+API · MonotoneSplines.jl

API

MonotoneSplines.SplType

A Spl object.

Fields

  • H: an RObject generated by splines::bs()
  • β: the coefficients for the B-spline.
source
MonotoneSplines.build_modelMethod
build_model(x::AbstractVector{T}; <keyword arguments>)

Construct design matrix and other internal variables for smoothing spline.

Arguments

  • all_knots = false: whether to use all knots. If false, use the same rule as in R's smooth.spline.
  • prop_nknots = 1.0: a proportion for using fewer knots. Suppose the number of knots is nknots, then the final number of knots is prop_nknots * nknots. Currently, it is only effective when all_knots = false.
  • ε = 6.06e-6: a small number added to the diagonal of matrix Ω to ensure it is positive definite.

Returns

  • B-spline design matrix B at x for cubic splines
  • L: cholesky decomposition of Ω = LL'
  • J: number of basis functions, which does not change for cubic splines, so it is only intended for smoothing splines

the above four are shared with the method for cubic splines, but for smoothing splines, it also returns

  • mx, rx, idx, idx0: only for smoothing splines
source
MonotoneSplines.build_modelMethod
build_model(x::AbstractVector{T}, J::Int; <keyword arguments>)

Construct design matrix and other internal variables for cubic spline with J basis functions.

Returns

  • B: B-spline design matrix B at x for cubic splines
  • rB: raw RObject of B
source
MonotoneSplines.check_CIMethod
check_CI(; <keyword arguments>)

Conduct repeated experiments to check the overlap of confidence bands (default, check_acc = false) or accuracy of fitting curves (check_acc = true) between MLP generator and OPT solution.

Arguments

  • n = 100: sample size
  • σ = 0.1: noise level
  • f::Function = exp: the truth curve
  • seed = 1234: random seed for the simulated data
  • check_acc = false: check overlap of confidence bands (default: false) or accuracy of fitting curves (true)
  • nepoch0 = 5: number of epoch in the first step to fit the curve
  • nepoch = 50: number of epoch in the second step to obtain the confidence band
  • niter_per_epoch = 100: number of iterations in each epoch
  • η0 = 1e-4: learning rate in step 1
  • η = 1e-4: learning rate in step 2 (NOTE: lr did not make much difference, unify these two)
  • K0 = 32: Monte Carlo size for averaging λ in step 2
  • K = 32: Monte Carlo size for averaging λ in step 1 and for averaging y in step 2. (NOTE: unify these two Monte Carlo size)
  • nB = 2000: number of bootstrap replications
  • nrep = 5: number of repeated experiments
  • fig = true: whether to plot
  • figfolder = ~: folder for saving the figures if fig = true
  • λs = exp.(range(-8, -2, length = 10)): region of continuous λ
  • nhidden = 1000: number of hidden layers
  • depth = 2: depth of MLP
  • demo = false: whether to save internal results for demo purpose
  • model_file = nothing: if not nothing, load the model from the file.
  • gpu_id = 0: specify the id of GPU, -1 for CPU.
  • prop_nknots = 0.2: proportion of number of knots in B-spline basis.
  • backend = "flux": train MLP generator with Flux or PyTorch
source
MonotoneSplines.ci_mono_ss_mlpMethod
ci_mono_ss_mlp(x::AbstractVector{T}, y::AbstractVector{T}, λs::AbstractVector{T}; )

Fit data x, y at each λs with confidence bands.

Arguments

  • prop_nknots = 0.2: proportion of number of knots
  • backend = "flux": flux or pytorch
  • model_file: path for saving trained model
  • nepoch0 = 3: number of epoch in training step 1
  • nepoch = 3: number of epoch in training step 2
  • niter_per_epoch = 100: number of iterations in each epoch
  • M = 10: Monte Carlo size
  • nhidden = 100: number of hidden units
  • disable_progressbar = false: set true if generating documentation
  • device = :cpu: train using :cpu or :gpu
  • sort_in_nn = true: (only for backend = "flux") whether put sort in MLP
  • eval_in_batch = false: (only for backend = "flux") Currently, Flux does not support sort in batch mode. A workaround with customized Zygote.batch_sort needs further verifications.
source
MonotoneSplines.coverage_probMethod
coverage_prob(CIs::AbstractMatrix, y0::AbstractVector)

Calculate coverage probability given n x 2 CI matrix CIs and true vector y0 of size n.

source
MonotoneSplines.cv_mono_ssMethod
cv_mono_ss(x::AbstractVector{T}, y::AbstractVector{T}, λs::AbstractVector{T})

Cross-validation for monotone fitting with smoothing spline on y ~ x among parameters λs.

source
MonotoneSplines.div_into_foldsMethod
div_into_folds(N::Int; K = 10, seed = 1234)

Equally divide 1:N into K folds with random seed seed. If seed is negative, it is a non-random division, where the i-th fold would be the i-th equidistant range.

source
MonotoneSplines.eval_penaltyMethod
eval_penalty(model::Spl{T}, x::AbstractVector{T})

Evaluate the penalty matrix by R's fda::eval.penalty. To make sure the corresponding design matrix contructed by fda::eval.basis is the same as model.H, it asserts the norm difference should be smaller than sqrt(eps()).

source
MonotoneSplines.fitFunction
fit(X, y, paras, method)

paras is either the number of basis functions, or the sequence of interior knots. Return a Spl object.

n = 100
 x = rand(n) * 2 .- 1
 y = x .^3 + randn(n) * 0.01
-res = fit(x, y, 10, "monotone")
source
MonotoneSplines.gen_dataMethod
gen_data(n, σ, f::Union{Function, String}; xmin = -1, xmax = 1, k = 10)

Generate n data points (xi, yi) from curve f with noise level σ, i.e., yi = f(xi) + N(0, σ^2).

It returns four vectors, x, y, x0, y0, where

  • x, y: pair points of length n.
  • x0, y0: true curve without noise, represented by k*n points.
source
MonotoneSplines.jaccard_indexMethod
jaccard_index(a::AbstractVector, b::AbstractVector)

Calculate Jaccard Index for two confidence intervals a and b

jaccard_index(a::AbstractMatrix, b::AbstractMatrix)

Calculate Jaccard Index for two confidence intervals a[i, :] and b[i, :]

source
MonotoneSplines.load_modelMethod
load_model(n::Int, J::Int, nhidden::Int, model_file::String; dim_lam = 8, gpu_id = 3)

Load trained model from model_file.

source
MonotoneSplines.mono_csFunction
mono_cs(x::AbstractVector, y::AbstractVector, J::Int = 4; increasing::Bool = true)

Monotone splines with cubic splines.

source
MonotoneSplines.mono_ssFunction
mono_ss(x::AbstractVector, y::AbstractVector, λ = 1.0; prop_nknots = 1.0)

Monotone splines with smoothing splines, return a MonotoneSS object.

source
MonotoneSplines.mono_ssFunction
mono_ss(B::AbstractMatrix, y::AbstractVector, L::AbstractMatrix, J::Int, λ::AbstractFloat)

Monotone Fitting with Smoothing Splines given design matrix B and cholesky-decomposed matrix L.

Returns

  • βhat: estimated coefficient
  • yhat: fitted values
  • (optional) B and L
source
MonotoneSplines.mono_ss_mlpMethod
mono_ss_mlp(x::AbstractVector, y::AbstractVector; λl, λu)

Fit monotone smoothing spline by training a MLP generator.

Arguments

  • prop_nknots = 0.2: proportion of number of knots
  • backend = flux: use flux or pytorch
  • device = :cpu: use :cpu or :gpu
  • nhidden = 100: number of hidden units
  • disable_progressbar = false: disable progressbar (useful in Documenter.jl)
source
MonotoneSplines.py_train_G_lambdaMethod
py_train_G_lambda(y::AbstractVector, B::AbstractMatrix, L::AbstractMatrix; <keyword arguments>)

Wrapper for training MLP generator using PyTorch.

Arguments

  • η0, η: learning rate
  • K0, K: Monte Carlo size
  • nepoch0, nepoch: number of epoch
  • nhidden, depth: size of MLP
  • λl, λu: range of λ
  • use_torchsort = false: torch.sort (default: false) or torchsort.soft_sort (true)
  • sort_reg_strength = 0.1: tuning parameter when use_torchsort = true.
  • model_file: path for saving trained model
  • gpu_id = 0: use specified GPU
  • niter_per_epoch = 100: number of iterations in each epoch
  • disable_tqdm = false: set true when generating documentation
source
MonotoneSplines.smooth_splineMethod
smooth_spline(x::AbstractVector, y::AbstractVector, xnew::AbstractVector)

Perform smoothing spline on (x, y), and make predictions on xnew.

Returns: yhat, ynewhat,....

source
MonotoneSplines.train_GyλMethod
train_Gyλ(rawy::AbstractVector, rawB::AbstractMatrix, rawL::AbstractMatrix, model_file::String)

Train MLP generator G(y, λ) for λ ∈ [λl, λu] and y ~ N(f, σ²)

source
MonotoneSplines.train_GλMethod
train_Gλ(rawy::AbstractVector, rawB::AbstractMatrix, rawL::AbstractMatrix; λl, λu)

Train MLP generator G(λ) for λ ∈ [λl, λu].

source
RCall.rcopyMethod
rcopy(s::Spl)

Convert RObject s.H as a Julia matrix, and s.β keeps the same.

source
StatsAPI.predictMethod
predict(model::Spl{T}, xs::AbstractVector{T})
+res = fit(x, y, 10, "monotone")
source
MonotoneSplines.gen_dataMethod
gen_data(n, σ, f::Union{Function, String}; xmin = -1, xmax = 1, k = 10)

Generate n data points (xi, yi) from curve f with noise level σ, i.e., yi = f(xi) + N(0, σ^2).

It returns four vectors, x, y, x0, y0, where

  • x, y: pair points of length n.
  • x0, y0: true curve without noise, represented by k*n points.
source
MonotoneSplines.jaccard_indexMethod
jaccard_index(a::AbstractVector, b::AbstractVector)

Calculate Jaccard Index for two confidence intervals a and b

jaccard_index(a::AbstractMatrix, b::AbstractMatrix)

Calculate Jaccard Index for two confidence intervals a[i, :] and b[i, :]

source
MonotoneSplines.load_modelMethod
load_model(n::Int, J::Int, nhidden::Int, model_file::String; dim_lam = 8, gpu_id = 3)

Load trained model from model_file.

source
MonotoneSplines.mono_csFunction
mono_cs(x::AbstractVector, y::AbstractVector, J::Int = 4; increasing::Bool = true)

Monotone splines with cubic splines.

source
MonotoneSplines.mono_ssFunction
mono_ss(x::AbstractVector, y::AbstractVector, λ = 1.0; prop_nknots = 1.0)

Monotone splines with smoothing splines, return a MonotoneSS object.

source
MonotoneSplines.mono_ssFunction
mono_ss(B::AbstractMatrix, y::AbstractVector, L::AbstractMatrix, J::Int, λ::AbstractFloat)

Monotone Fitting with Smoothing Splines given design matrix B and cholesky-decomposed matrix L.

Returns

  • βhat: estimated coefficient
  • yhat: fitted values
  • (optional) B and L
source
MonotoneSplines.mono_ss_mlpMethod
mono_ss_mlp(x::AbstractVector, y::AbstractVector; λl, λu)

Fit monotone smoothing spline by training a MLP generator.

Arguments

  • prop_nknots = 0.2: proportion of number of knots
  • backend = flux: use flux or pytorch
  • device = :cpu: use :cpu or :gpu
  • nhidden = 100: number of hidden units
  • disable_progressbar = false: disable progressbar (useful in Documenter.jl)
source
MonotoneSplines.py_train_G_lambdaMethod
py_train_G_lambda(y::AbstractVector, B::AbstractMatrix, L::AbstractMatrix; <keyword arguments>)

Wrapper for training MLP generator using PyTorch.

Arguments

  • η0, η: learning rate
  • K0, K: Monte Carlo size
  • nepoch0, nepoch: number of epoch
  • nhidden, depth: size of MLP
  • λl, λu: range of λ
  • use_torchsort = false: torch.sort (default: false) or torchsort.soft_sort (true)
  • sort_reg_strength = 0.1: tuning parameter when use_torchsort = true.
  • model_file: path for saving trained model
  • gpu_id = 0: use specified GPU
  • niter_per_epoch = 100: number of iterations in each epoch
  • disable_tqdm = false: set true when generating documentation
source
MonotoneSplines.smooth_splineMethod
smooth_spline(x::AbstractVector, y::AbstractVector, xnew::AbstractVector)

Perform smoothing spline on (x, y), and make predictions on xnew.

Returns: yhat, ynewhat,....

source
MonotoneSplines.train_GyλMethod
train_Gyλ(rawy::AbstractVector, rawB::AbstractMatrix, rawL::AbstractMatrix, model_file::String)

Train MLP generator G(y, λ) for λ ∈ [λl, λu] and y ~ N(f, σ²)

source
MonotoneSplines.train_GλMethod
train_Gλ(rawy::AbstractVector, rawB::AbstractMatrix, rawL::AbstractMatrix; λl, λu)

Train MLP generator G(λ) for λ ∈ [λl, λu].

source
RCall.rcopyMethod
rcopy(s::Spl)

Convert RObject s.H as a Julia matrix, and s.β keeps the same.

source
StatsAPI.predictMethod
predict(model::Spl{T}, xs::AbstractVector{T})
 predict(X::Vector{Float64}, y::Vector{Float64}, J::Int, Xnew::AbstractVector{Float64}, ynew::AbstractVector{Float64}
-predict(X::Vector{Float64}, y::Vector{Float64}, J::Int, Xnew::Vector{Float64}, ynew::Vector{Float64}, σ::Vector{Float64}

Make prediction based on fitted Spl on new points xs. If Xnew is provided, then also returns the prediction error ‖yhat - ynew‖_2^2.

source
+predict(X::Vector{Float64}, y::Vector{Float64}, J::Int, Xnew::Vector{Float64}, ynew::Vector{Float64}, σ::Vector{Float64}

Make prediction based on fitted Spl on new points xs. If Xnew is provided, then also returns the prediction error ‖yhat - ynew‖_2^2.

source
diff --git a/dev/examples/conditions/index.html b/dev/examples/conditions/index.html index f87ea10..33fe4e5 100644 --- a/dev/examples/conditions/index.html +++ b/dev/examples/conditions/index.html @@ -60,20872 +60,20872 @@ end
plot_intervals (generic function with 1 method)

reproduce the figure in the paper

plot_intervals()
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/diff_sort/index.html b/dev/examples/diff_sort/index.html index 71ad74a..685cff3 100644 --- a/dev/examples/diff_sort/index.html +++ b/dev/examples/diff_sort/index.html @@ -15,10 +15,10 @@ use_torchsort=true, sort_reg_strength=1.0, disable_progressbar = true); @time Ghat4, loss4 = mono_ss_mlp(x, y, λl = λl, λu = λu, device = :cpu, prop_nknots = 0.2, backend = "pytorch", - use_torchsort=false, sort_reg_strength=1.0, disable_progressbar = true);
  8.256786 seconds (19.08 M allocations: 1.023 GiB, 5.06% gc time, 79.10% compilation time: 5% of which was recompilation)
-  0.453283 seconds (1.91 k allocations: 68.078 KiB)
-  0.454391 seconds (1.91 k allocations: 68.078 KiB)
-  0.401884 seconds (1.92 k allocations: 69.328 KiB)

Evaluate the fitted curve,

λ = λl
+                                    use_torchsort=false, sort_reg_strength=1.0, disable_progressbar = true);
  7.781853 seconds (19.38 M allocations: 1.041 GiB, 3.59% gc time, 76.54% compilation time: 4% of which was recompilation)
+  0.474219 seconds (1.94 k allocations: 69.328 KiB)
+  0.471298 seconds (1.94 k allocations: 69.328 KiB)
+  0.420955 seconds (1.94 k allocations: 70.578 KiB)

Evaluate the fitted curve,

λ = λl
 yhat1 = Ghat1(y, λ)
 yhat2 = Ghat2(y, λ)
 yhat3 = Ghat3(y, λ)
@@ -29,126 +29,126 @@
 plot!(x, yhat4, label = "no")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

And the traing loss is

plot(loss1[1:100], label = "1e-4", xlab = "iter", ylab = "loss")
 plot!(loss2[1:100], label = "1e-1")
 plot!(loss3[1:100], label = "1")
 plot!(loss4[1:100], label = "no")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/model_G.pt b/dev/examples/model_G.pt index 159a5eac314c145fc7a29ef188d134ea389f39d0..cad158c9e416162f5002c541e8cbcdf54dd827bd 100644 GIT binary patch literal 97728 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 z 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

@ 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

0.01:0.09:0.1

Run the optimization toolbox to fit the monotone spline, and conduct (parametric) bootstrap to obtain the confidence band of the fitted curve.

@time RES0 = [ci_mono_ss(x, y, λ, prop_nknots = 0.2) for λ in λs]
 Yhat0 = hcat([RES0[i][1] for i=1:2]...)
 YCIs0 = [RES0[i][2] for i = 1:2]
2-element Vector{LinearAlgebra.Adjoint{Float64, Matrix{Float64}}}:
- [0.17550133381777902 0.3561331547960619; 0.22691771847055056 0.38791522735467926; … ; 2.272412076137895 2.435187713899899; 2.4782545426362135 2.682879045715268]
- [-0.03637363524958645 0.22031271625165838; 0.048160750845113114 0.29085815145127897; … ; 2.09153852288662 2.334946940092237; 2.23676312068496 2.5138153336583]

Estimate the confidence band with the Flux backend

@time Yhat, YCIs, LOSS = ci_mono_ss_mlp(x, y, λs, prop_nknots = 0.2, device = :cpu, backend = "flux", nepoch0 = 5, nepoch = 5, disable_progressbar = true);
┌ Warning: Layer with Float32 parameters got Float64 input.
+ [0.17858290436268556 0.3540184674400672; 0.2308478035883113 0.3867083077647926; … ; 2.2746707007432705 2.44111602923719; 2.483094463213197 2.6858812986042784]
+ [-0.030958049671792942 0.22735188418026964; 0.05033624873038706 0.29366626648300687; … ; 2.098645447180695 2.334031554437537; 2.2488866258423057 2.5136065052986813]

Estimate the confidence band with the Flux backend

@time Yhat, YCIs, LOSS = ci_mono_ss_mlp(x, y, λs, prop_nknots = 0.2, device = :cpu, backend = "flux", nepoch0 = 5, nepoch = 5, disable_progressbar = true);
┌ Warning: Layer with Float32 parameters got Float64 input.
 │   The input will be converted, but any earlier layers may be very slow.
 │   layer = Dense(28 => 100, gelu)  # 2_900 parameters
 │   summary(x) = "28-element Vector{Float64}"
@@ -19,62 +19,60 @@
 │   layer = Dense(28 => 100, gelu)  # 2_900 parameters
 │   summary(x) = "28-element Vector{Float64}"
 └ @ Flux ~/.julia/packages/Flux/n3cOc/src/layers/stateless.jl:60
- 22.668316 seconds (74.96 M allocations: 26.869 GiB, 8.81% gc time)

Alternatively, we can also estimate it with the PyTorch backend

@time Yhat2, YCIs2, LOSS2 = ci_mono_ss_mlp(x, y, λs, prop_nknots = 0.2, device = :cpu, backend = "pytorch", nepoch0 = 5, nepoch = 5, disable_progressbar = true);
  1.891592 seconds (397.15 k allocations: 27.987 MiB, 8.92% compilation time)

plot the traceplot of training loss

plot(log.(LOSS), label = "MLP generator (Flux)")
+ 23.311207 seconds (75.55 M allocations: 26.887 GiB, 8.05% gc time)

Alternatively, we can also estimate it with the PyTorch backend

@time Yhat2, YCIs2, LOSS2 = ci_mono_ss_mlp(x, y, λs, prop_nknots = 0.2, device = :cpu, backend = "pytorch", nepoch0 = 5, nepoch = 5, disable_progressbar = true);
  1.956923 seconds (398.86 k allocations: 28.107 MiB, 9.00% compilation time)

plot the traceplot of training loss

plot(log.(LOSS), label = "MLP generator (Flux)")
 plot!(log.(LOSS2), label = "MLP generator (PyTorch)")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Calculate the jaccard index OPT solution vs MLP generator (Flux)

[MonotoneSplines.jaccard_index(YCIs[i], YCIs0[i]) for i = 1:2]
2-element Vector{Float64}:
- 0.7565022593343843
- 0.8498920339670173

OPT solution vs MLP generator (PyTorch)

[MonotoneSplines.jaccard_index(YCIs2[i], YCIs0[i]) for i = 1:2]
2-element Vector{Float64}:
- 0.7613000652539665
- 0.8196980821837483
Note

For simple demonstration, the training might not be sufficient, so the Jaccard index might not be good enough. For a better performance, please train it with a larger nepoch and nepoch0.

Plot the fitted curves and their confidence bands.

OPT solution vs MLP generator (Flux)

scatter(x, y, label = "")
+ 0.46654970338047674
+ 0.5292903256026571

OPT solution vs MLP generator (PyTorch)

[MonotoneSplines.jaccard_index(YCIs2[i], YCIs0[i]) for i = 1:2]
2-element Vector{Float64}:
+ 0.6712830919662872
+ 0.7983503521824987
Note

For simple demonstration, the training might not be sufficient, so the Jaccard index might not be good enough. For a better performance, please train it with a larger nepoch and nepoch0.

Plot the fitted curves and their confidence bands.

OPT solution vs MLP generator (Flux)

scatter(x, y, label = "")
 plot!(x0, y0, label = "truth", legend = :topleft, ls = :dot)
 plot!(x, Yhat0[:, 1], label = "OPT solution")
 plot!(x, Yhat0[:, 2], label = "OPT solution")
@@ -86,87 +84,87 @@
 plot!(x, YCIs[2][:, 1], fillrange = YCIs[2][:, 2], linealpha = 0, label = "", fillalpha = 0.5)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

OPT solution vs MLP generator (PyTorch)

scatter(x, y, label = "")
 plot!(x0, y0, label = "truth", legend = :topleft, ls = :dot)
 plot!(x, Yhat0[:, 1], label = "OPT solution")
@@ -179,85 +177,85 @@
 plot!(x, YCIs2[2][:, 1], fillrange = YCIs2[2][:, 2], linealpha = 0, label = "", fillalpha = 0.5)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/monofit/index.html b/dev/examples/monofit/index.html index 7ee54a8..02e1335 100644 --- a/dev/examples/monofit/index.html +++ b/dev/examples/monofit/index.html @@ -11,150 +11,150 @@ λs = exp.(range(-10, -4, length = 100));

Perform cross-validation for monotone fitting with smoothing splines,

@time errs, B, L, J = MonotoneSplines.cv_mono_ss(x, y, λs)
([0.03836494968310219, 0.038356054988443196, 0.038346860326416564, 0.03833810480828669, 0.03833030336201492, 0.0383181815212615, 0.038306086526776, 0.03829277370690645, 0.03827569988291665, 0.03825256780043086  …  0.041377653962167346, 0.04164026736341345, 0.041913261668632816, 0.04219672525984907, 0.042490701739591435, 0.04279519591471907, 0.04311015485047943, 0.04343543081198881, 0.0437708461692481, 0.04411615119567598], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [3722.3861277938377 0.0 … 0.0 0.0; -5484.443813834549 2256.9009327110152 … 0.0 0.0; … ; 0.0 0.0 … 5.503905144035493 0.0; 0.0 0.0 … -5.4879608135793845 0.011543876496072695], 64)

Then plot the CV curve

scatter(log.(λs), errs, title = "seed = $seed")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Then we can choose λ which minimized the CV error.

idx = argmin(errs)
 λopt = λs[idx]
0.0008846636600765526

Fit with λopt

βhat, yhat = MonotoneSplines.mono_ss(B, y, L, J, λopt);

Alternatively,

res = MonotoneSplines.mono_ss(x, y, λopt);
 yhat = res.fitted
@@ -182,251 +182,251 @@
 scatter!(x, yhat)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

We can also compare it with smooth.spline,

spl = R"smooth.spline($x, $y)"
RCall.RObject{RCall.VecSxp}
 Call:
 smooth.spline(x = `#JL`$x, y = `#JL`$y)
@@ -439,352 +439,352 @@
 scatter!(x, yhat_ss)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

For ease of demonstrating other examples, we wrap up the above procedures as a function

function demo_mono_ss(x, y, λs)
     errs, B, L, J = MonotoneSplines.cv_mono_ss(x, y, λs)
     fig1 = plot(log.(λs), errs, xlab = "λ", ylab = "CV error", legend=false)
@@ -809,375 +809,375 @@
 demo_mono_ss(x, y, λs)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

σ = 2.0

σ = 2.0
 Random.seed!(seed)
 x, y, x0, y0 = MonotoneSplines.gen_data(n, σ, z->1/(1-0.42log(z)), xmin = 0, xmax = 10)
@@ -1187,381 +1187,381 @@ 

σ = 2.0

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

σ = 0.5

σ = 0.5
 Random.seed!(seed)
 x, y, x0, y0 = MonotoneSplines.gen_data(n, σ, z->1/(1-0.42log(z)), xmin = 0, xmax = 10)
@@ -1571,379 +1571,379 @@ 

σ = 0.5

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Logistic Curve

λs = exp.(range(-10, 0, length = 100));

σ = 0.2

σ = 0.2
 Random.seed!(seed)
 x, y, x0, y0 = MonotoneSplines.gen_data(n, σ, z->exp(z)/(1+exp(z)), xmin = -5, xmax = 5)
@@ -1953,387 +1953,387 @@ 

Lo demo_mono_ss(x, y, λs)

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

σ = 1.0

σ = 1.0
 Random.seed!(seed)
 x, y, x0, y0 = MonotoneSplines.gen_data(n, σ, z->exp(z)/(1+exp(z)), xmin = -5, xmax = 5)
@@ -2343,381 +2343,381 @@ 

σ = 1.0

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/monofit_mlp/index.html b/dev/examples/monofit_mlp/index.html index 9fd61ec..a3dfaf4 100644 --- a/dev/examples/monofit_mlp/index.html +++ b/dev/examples/monofit_mlp/index.html @@ -20,55 +20,55 @@ │ layer = Dense(28 => 100, gelu) # 2_900 parameters │ summary(x) = "28-element Vector{Float64}" └ @ Flux ~/.julia/packages/Flux/n3cOc/src/layers/stateless.jl:60 - 2.232311 seconds (7.39 M allocations: 2.580 GiB, 8.70% gc time)

we also support the well-known PyTorch backend with the help of PyCall.jl,

@time Ghat2, loss2 = mono_ss_mlp(x, y, λl = λ, λu = λ, device = :cpu, backend = "pytorch", disable_progressbar = true);
  0.431089 seconds (36.92 k allocations: 2.254 MiB, 4.60% compilation time)
Note

Showing the progressbar is quite useful in practice, but here in the documenter environment, it cannot display properly, so currently I simply disable it via disable_progressbar = true.

plot the log training loss

plot(log.(loss), label = "Flux")
+  2.258574 seconds (7.45 M allocations: 2.582 GiB, 8.46% gc time)

we also support the well-known PyTorch backend with the help of PyCall.jl,

@time Ghat2, loss2 = mono_ss_mlp(x, y, λl = λ, λu = λ, device = :cpu, backend = "pytorch", disable_progressbar = true);
  0.456176 seconds (39.88 k allocations: 2.470 MiB, 3.64% compilation time)
Note

Showing the progressbar is quite useful in practice, but here in the documenter environment, it cannot display properly, so currently I simply disable it via disable_progressbar = true.

plot the log training loss

plot(log.(loss), label = "Flux")
 plot!(log.(loss2), label = "Pytorch")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

The fitting can be obtained via evaluating at $λ$,

yhat = Ghat(y, λ);
 yhat2 = Ghat2(y, λ);
┌ Warning: Layer with Float32 parameters got Float64 input.
 │   The input will be converted, but any earlier layers may be very slow.
@@ -81,75 +81,75 @@
 plot!(x, yhat2, label = "MLP generator (Pytorch)", ls = :dash, lw = 2)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

The fitting curves obtained from optimization solution and MLP generator overlap quite well.

continus $λ$

Here we train a generator $G(\lambda), \lambda\in [\lambda_l, \lambda_u]$,

λl = 1e-2
 λu = 1e-1
 @time Ghat, loss = mono_ss_mlp(x, y, λl = λl, λu = λu, prop_nknots = 0.2, device = :cpu);
┌ Warning: Layer with Float32 parameters got Float64 input.
@@ -157,52 +157,52 @@
 │   layer = Dense(28 => 100, gelu)  # 2_900 parameters
 │   summary(x) = "28-element Vector{Float64}"
 └ @ Flux ~/.julia/packages/Flux/n3cOc/src/layers/stateless.jl:60
-  2.294526 seconds (7.41 M allocations: 2.581 GiB, 8.39% gc time, 0.43% compilation time)

Plot the training losses along with the iterations.

plot(loss)
+ 2.244706 seconds (7.46 M allocations: 2.583 GiB, 8.82% gc time, 0.42% compilation time)

Plot the training losses along with the iterations.

plot(loss)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

Evaluate the generator at $\lambda_l$, $\lambda_u$ and their middle $\lambda_m$

λm = (λl + λu) / 2
 yhat_l = Ghat(y, λl)
 yhat_u = Ghat(y, λu)
@@ -233,79 +233,79 @@
 plot!(x, yhat_u, label = "MLP generator (λ = $λu)", ls = :dash, lw = 2)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/ph/index.html b/dev/examples/ph/index.html index 1cfa034..c63c94d 100644 --- a/dev/examples/ph/index.html +++ b/dev/examples/ph/index.html @@ -8,298 +8,298 @@ x0 = range(minimum(x), maximum(x), length=500)
-9.14043389977092:0.018317502805152146:0.0

Then we can check how the data looks like

scatter(x, y, label = "")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Monotone Cubic Splines

Perform the monotone cubic splines with different number of basis functions $J=4, 10$

fit_mcs4 = mono_cs(x, y, 4, increasing = false)
 plot!(x0, predict(fit_mcs4, x0), label = "J = 4", legend = :bottomleft)
@@ -308,1025 +308,1025 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Monotone Smoothing Splines

Perform smoothing splines

yhat_ss, yhatnew_ss, _, λ = MonotoneSplines.smooth_spline(x, y, x0);

use the same $\lambda$,

fit_mss = mono_ss(x, y, λ, increasing  = false)
MonotoneSplines.MonotoneSS(-9.14043389977092, 9.14043389977092, [0.0, 1.454834583480431e-5, 0.040255767815961296, 0.040275046566675785, 0.053120406912553514, 0.07158510316354796, 0.07160151251650909, 0.08108010267692153, 0.08880327201348134, 0.08881246768312859  …  0.7735049160513184, 0.7735584982043695, 0.7900313672860578, 0.8038873718450078, 0.8041381144717783, 0.8438188519580327, 0.8519292828788234, 0.8646148315616505, 0.9417901105035358, 1.0], [0.6734819458337752 0.32650221063496454 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.9991961711349227 … 0.0 0.0], [0.9999999999999999 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 1.0], [-206209.0105682694 206209.0105682694 … 0.0 0.0; 0.0 0.0 … -51.53763434273872 51.53763434273872], [6.242667422805045e7 0.0 … 0.0 0.0; -6.24492310139133e7 428.8793536648739 … 0.0 0.0; … ; 0.0 0.0 … 71.43886038880825 0.0; 0.0 0.0 … -70.05267748833886 0.011036672741150104], [-0.00010540172462759652, -0.00010545870572024371, -0.00024925570697206567, -0.0003172203651837067, -0.0003179371183418965, -0.00031810004755924455, -0.0007954049885768426, -0.0007954689356193098, -0.0007955053849623059, -0.0007955411056740728  …  -0.4730285521501108, -0.5926980987393097, -0.5926980988779484, -0.5926980993447567, -1.0019660275247402, -1.0019660276423883, -1.001966028018416, -1.3849584959992833, -1.3849584970545323, -1.3849584977221743], [-0.00010542260825206995, -0.0003981393749492754, -0.0007955739445121291, -0.0018508856543992124, -0.002793771958923699, -0.002981867803659064, -0.005703884110722602, -0.006235107369037761, -0.006235107375595559, -0.00570701833081863  …  -0.005702326746152812, -0.006235107359301814, -0.006235107367597545, -0.005705108724269978, -0.002981868441137281, -0.0027937789477241034, -0.001850908765655973, -0.0007955763502580652, -0.00039833929655984357, -0.00010557430491573791])

then plot it

plot!(x0, yhatnew_ss, ls = :dot, label = "Smoothing Spline (λ = $(round(λ, sigdigits = 3)))")
 plot!(x0, predict(fit_mss, x0), ls = :solid, label = "Monotone Smoothing Spline (λ = $(round(λ, sigdigits = 3)))")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Monotone smoothing splines with cross-validation

Alternatively, we can find the optimal tuning parameter $\lambda$ by cross-validation,

λs = exp.(-10:0.2:1)
 errs, B, L, J = cv_mono_ss(x, y, λs, increasing = false)
 λopt = λs[argmin(errs)]
4.5399929762484854e-5

Fit with the optimal tuning parameter

fit_mss2 = mono_ss(x, y, λopt, increasing = false)
 plot!(x0, predict(fit_mss2, x0), label = "Monotone Smoothing Spline (λ = $(round(λopt, sigdigits = 3)))")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

where the cross-validation error curve is as follows,

scatter(log.(λs), errs, label = "")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/dev/index.html b/dev/index.html index 32ad81c..771c778 100644 --- a/dev/index.html +++ b/dev/index.html @@ -2,4 +2,4 @@ Home · MonotoneSplines.jl

MonotoneSplines.jl Documentation

Wang, L., Fan, X., Li, H., & Liu, J. S. (2023). Monotone Cubic B-Splines (arXiv:2307.01748). arXiv. https://doi.org/10.48550/arXiv.2307.01748

MonotoneSplines.jl is a Julia package for monotone splines, which impose a monotonicity constraint on the smoothing splines.

\[\underset{\color{red}{f\textbf{ is monotonic}}}{\arg\min} \sum_{i=1}^n\left\{y_i-f(x_i)\right\}^2 + \lambda \int \left\{f''(t)\right\}^2dt\,,\]

where $f$ is formed with B-spline basis $f(x) = \sum_{j=1}^J\gamma_j B_j(x)$. A sufficient condition for $f$ to be monotonic is $\gamma_1,\ldots,\gamma_J$ is monotonic. With matrix notation ${\mathbf y} = [y_1,\ldots, y_n], {\mathbf B}_{ij} = B_j(x_i), {\boldsymbol\Omega}_{ij} = \int B_i''(s)B_j''(s)ds$, the problem can be rewritten as

\[\begin{aligned} \underset{\gamma}{\arg\min} & \Vert {\mathbf y} - {\mathbf B} \gamma\Vert_2^2 + \lambda \gamma^T\boldsymbol\Omega\gamma\\ \text{subject to } & \alpha \gamma_1 \le \alpha \gamma_2\le \cdots \le \alpha\gamma_J\,, -\end{aligned}\]

where $\alpha=1$ implies non-decreasing and $\alpha=-1$ indicates non-increasing.

The package provides two algorithms (frameworks) for fitting the monotone splines.

  • Convert the problem into a classical convex second-order cone optimization problem. There are many mature existing optimization toolboxes can be used, such as ECOS.jl.
  • Approximate the solution with an Multi-Layer Perceptrons (MLP) generator, using the powerful representation ability of neural network.

Particularly, the second approach can achieve good approximations and it can save much time by avoiding repeating to run the optimization problems of the first approach when we conduct bootstrap to estimate the confidence band.

We do not reinvent the wheel. Instead, we fully take advantage of the existing widely-used implementations in other programming languages with the help of the flexible integration feature of Julia. For example, the package adopts the calculation of B-splines from R's splines package via RCall.jl, and provides the PyTorch deep learning backend via PyCall.jl as an alternative to the pure-Julia deep learning framework Flux.jl.

+\end{aligned}\]

where $\alpha=1$ implies non-decreasing and $\alpha=-1$ indicates non-increasing.

The package provides two algorithms (frameworks) for fitting the monotone splines.

  • Convert the problem into a classical convex second-order cone optimization problem. There are many mature existing optimization toolboxes can be used, such as ECOS.jl.
  • Approximate the solution with an Multi-Layer Perceptrons (MLP) generator, using the powerful representation ability of neural network.

Particularly, the second approach can achieve good approximations and it can save much time by avoiding repeating to run the optimization problems of the first approach when we conduct bootstrap to estimate the confidence band.

We do not reinvent the wheel. Instead, we fully take advantage of the existing widely-used implementations in other programming languages with the help of the flexible integration feature of Julia. For example, the package adopts the calculation of B-splines from R's splines package via RCall.jl, and provides the PyTorch deep learning backend via PyCall.jl as an alternative to the pure-Julia deep learning framework Flux.jl.

diff --git a/dev/search/index.html b/dev/search/index.html index be3e892..a6f5206 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · MonotoneSplines.jl

Loading search...

    +Search · MonotoneSplines.jl

    Loading search...