From 959dde66d802b92a6b543b0b69abded1a8716f31 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 14:55:06 -0300 Subject: [PATCH 01/18] [WIP] Add 'Interpolate' transform --- Project.toml | 2 + src/GeoStatsTransforms.jl | 5 ++ src/interpolate.jl | 132 ++++++++++++++++++++++++++++++++++++++ src/utils.jl | 16 +++++ 4 files changed, 155 insertions(+) create mode 100644 src/interpolate.jl diff --git a/Project.toml b/Project.toml index d39fe17..aee55ef 100644 --- a/Project.toml +++ b/Project.toml @@ -9,6 +9,7 @@ CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" Clustering = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +GeoStatsModels = "ad987403-13c5-47b5-afee-0a48f6ac4f12" GeoTables = "e502b557-6362-48c1-8219-d30d308dcdb0" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Meshes = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" @@ -25,6 +26,7 @@ CategoricalArrays = "0.10" Clustering = "0.15" Combinatorics = "1.0" Distances = "0.10" +GeoStatsModels = "0.1" GeoTables = "1.6" Meshes = "0.35" ScientificTypes = "3.0" diff --git a/src/GeoStatsTransforms.jl b/src/GeoStatsTransforms.jl index e0d9990..d5d65b3 100644 --- a/src/GeoStatsTransforms.jl +++ b/src/GeoStatsTransforms.jl @@ -6,6 +6,7 @@ module GeoStatsTransforms using Meshes using GeoTables +using GeoStatsModels using Tables using TableDistances @@ -20,6 +21,7 @@ using SparseArrays using LinearAlgebra using Statistics +import GeoStatsModels: GeoStatsModel, fit, predict import TableTransforms: ColSpec, Col, AllSpec, NoneSpec import TableTransforms: colspec, choose import TableTransforms: divide, attach @@ -39,8 +41,11 @@ include("rasterize.jl") include("potrace.jl") include("detrend.jl") +include("interpolate.jl") + export # transforms + Interpolate, UniqueCoords, Rasterize, Potrace, diff --git a/src/interpolate.jl b/src/interpolate.jl new file mode 100644 index 0000000..b50777f --- /dev/null +++ b/src/interpolate.jl @@ -0,0 +1,132 @@ +# ------------------------------------------------------------------ +# Licensed under the MIT License. See LICENSE in the project root. +# ------------------------------------------------------------------ + +""" + Interpolate( + domain, + vars₁ => model₁, ..., varsₙ => modelₙ; + minneighbors=nothing, + maxneighbors=nothing, + neighborhood=nothing, + distance=Euclidean(), + path=LinearPath() + ) + +TODO +""" +struct Interpolate{D<:Domain,N,M,P} <: TableTransform + domain::D + colspecs::Vector{ColSpec} + models::Vector{GeoStatsModel} + minneighbors::Union{Int,Nothing} + maxneighbors::Union{Int,Nothing} + neighborhood::N + distance::M + path::P +end + +Interpolate( + domain::Domain, + colspecs, + models; + minneighbors=nothing, + maxneighbors=nothing, + neighborhood=nothing, + distance=Euclidean(), + path=LinearPath() +) = Interpolate( + domain, + collect(ColSpec, colspecs), + collect(GeoStatsModel, models), + minneighbors, + maxneighbors, + neighborhood, + distance, + path +) + +Interpolate(domain::Domain, pairs::Pair{<:Any,<:GeoStatsModel}...; kwargs...) = + Interpolate(domain, colspec.(first.(pairs)), last.(pairs); kwargs...) + +isrevertible(::Type{<:Interpolate}) = false + +function apply(transform::Interpolate, geotable::AbstractGeoTable) + dom = domain(geotable) + tab = values(geotable) + cols = Tables.columns(tab) + vars = Tables.columnnames(cols) + + idom = transform.domain + colspecs = transform.colspecs + models = transform.models + minneighbors = transform.minneighbors + maxneighbors = transform.maxneighbors + neighborhood = transform.neighborhood + distance = transform.distance + path = transform.path + + nelms = nrow(geotable) + nmin = isnothing(minneighbors) ? 1 : minneighbors + nmax = isnothing(maxneighbors) ? nelms : maxneighbors + + if nmax > nelms || nmax < 1 + @warn "Invalid maximum number of neighbors. Adjusting to $nelms..." + nmax = nelms + end + + if nmin > nmax || nmin < 1 + @warn "Invalid minimum number of neighbors. Adjusting to 1..." + nmin = 1 + end + + searcher = searcher_ui(dom, nmax, distance, neighborhood) + + # preprocess variable models + varmodels = mapreduce(vcat, colspecs, models) do colspec, model + svars = choose(colspec, vars) + svars .=> model + end + + # pre-allocate memory for neighbors + neighbors = Vector{Int}(undef, nmax) + + # prediction order + inds = traverse(idom, path) + + # predict variable values + function pred(var, model) + map(inds) do ind + # centroid of estimation + center = centroid(idom, ind) + + # find neighbors with data + nneigh = search!(neighbors, center, searcher) + + # skip if there are too few neighbors + if nneigh < nmin + missing + else + # final set of neighbors + ninds = view(neighbors, 1:nneigh) + + # view neighborhood with data + samples = view(geotable, ninds) + + # fit model to data + fmodel = fit(model, samples) + + # save prediction + predict(fmodel, var, idom[ind]) + end + end + end + + pairs = (var => pred(var, model) for (var, model) in varmodels) + newtab = (; pairs...) |> Tables.materializer(tab) + + # new spatial data + newgeotable = georef(newtab, idom) + + newgeotable, nothing +end diff --git a/src/utils.jl b/src/utils.jl index 93cc23a..41edea8 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -11,3 +11,19 @@ function _first(x) vs = skipmissing(x) isempty(vs) ? missing : first(vs) end + +""" + searcher_ui(domain, maxneighbors, distance, neighborhood) + +Return the appropriate search method over the `domain` based on +end-user inputs such as `maxneighbors`, `distance` and `neighborhood`. +""" +function searcher_ui(domain, maxneighbors, distance, neighborhood) + if isnothing(neighborhood) + # nearest neighbor search with a metric + KNearestSearch(domain, maxneighbors; metric=distance) + else + # neighbor search with ball neighborhood + KBallSearch(domain, maxneighbors, neighborhood) + end +end From 2e0daf6af1c3fe000b06a45f9b36a0f2b9a897fa Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 15:29:23 -0300 Subject: [PATCH 02/18] Apply suggestions --- src/interpolate.jl | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index b50777f..5788aa4 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -6,8 +6,8 @@ Interpolate( domain, vars₁ => model₁, ..., varsₙ => modelₙ; - minneighbors=nothing, - maxneighbors=nothing, + minneighbors=1, + maxneighbors=10, neighborhood=nothing, distance=Euclidean(), path=LinearPath() @@ -19,8 +19,8 @@ struct Interpolate{D<:Domain,N,M,P} <: TableTransform domain::D colspecs::Vector{ColSpec} models::Vector{GeoStatsModel} - minneighbors::Union{Int,Nothing} - maxneighbors::Union{Int,Nothing} + minneighbors::Int + maxneighbors::Int neighborhood::N distance::M path::P @@ -30,8 +30,8 @@ Interpolate( domain::Domain, colspecs, models; - minneighbors=nothing, - maxneighbors=nothing, + minneighbors=1, + maxneighbors=10, neighborhood=nothing, distance=Euclidean(), path=LinearPath() @@ -65,22 +65,19 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) neighborhood = transform.neighborhood distance = transform.distance path = transform.path - - nelms = nrow(geotable) - nmin = isnothing(minneighbors) ? 1 : minneighbors - nmax = isnothing(maxneighbors) ? nelms : maxneighbors - - if nmax > nelms || nmax < 1 - @warn "Invalid maximum number of neighbors. Adjusting to $nelms..." - nmax = nelms + + nobs = nrow(geotable) + if maxneighbors > nobs || maxneighbors < 1 + @warn "Invalid maximum number of neighbors. Adjusting to $nobs..." + maxneighbors = nobs end - if nmin > nmax || nmin < 1 + if minneighbors > maxneighbors || minneighbors < 1 @warn "Invalid minimum number of neighbors. Adjusting to 1..." - nmin = 1 + minneighbors = 1 end - searcher = searcher_ui(dom, nmax, distance, neighborhood) + searcher = searcher_ui(dom, maxneighbors, distance, neighborhood) # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model @@ -89,7 +86,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) end # pre-allocate memory for neighbors - neighbors = Vector{Int}(undef, nmax) + neighbors = Vector{Int}(undef, maxneighbors) # prediction order inds = traverse(idom, path) @@ -104,7 +101,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) nneigh = search!(neighbors, center, searcher) # skip if there are too few neighbors - if nneigh < nmin + if nneigh < minneighbors missing else # final set of neighbors From d21aaa88084ee22a6612f92ee79fd7f5fec17ef6 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 15:31:12 -0300 Subject: [PATCH 03/18] Apply suggestions --- src/interpolate.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 5788aa4..508d4a1 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -122,7 +122,6 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) pairs = (var => pred(var, model) for (var, model) in varmodels) newtab = (; pairs...) |> Tables.materializer(tab) - # new spatial data newgeotable = georef(newtab, idom) newgeotable, nothing From ed5c2632fe20a308b21c8635e9eeb53635869f4d Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 16:30:58 -0300 Subject: [PATCH 04/18] Add default estimator --- src/interpolate.jl | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 508d4a1..4751b60 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -14,6 +14,27 @@ ) TODO + +## Global Parameters + +* `minneighbors` - Minimum number of neighbors (default to `1`) +* `maxneighbors` - Maximum number of neighbors (default to `10`) +* `neighborhood` - Search neighborhood (default to `nothing`) +* `distance` - A distance defined in Distances.jl (default to `Euclidean()`) +* `exponent` - Exponent of the distances (default to `1`) +* `path` - The path algorithm used to iterate over the domain (default to `LinearPath()`) + +The `maxneighbors` option can be used to perform inverse distance weighting +with a subset of measurements per prediction location. If `maxneighbors` +is not provided, then all measurements are used. + +Two `neighborhood` search methods are available: + +* If a `neighborhood` is provided, local prediction is performed + by sliding the `neighborhood` in the domain. + +* If a `neighborhood` is not provided, the prediction is performed + using `maxneighbors` nearest neighbors according to `distance`. """ struct Interpolate{D<:Domain,N,M,P} <: TableTransform domain::D @@ -46,6 +67,9 @@ Interpolate( path ) +Interpolate(domain::Domain; distance=Euclidean(), kwargs...) = + Interpolate(domain, [AllSpec()], [IDW(1, distance)]; distance, kwargs...) + Interpolate(domain::Domain, pairs::Pair{<:Any,<:GeoStatsModel}...; kwargs...) = Interpolate(domain, colspec.(first.(pairs)), last.(pairs); kwargs...) @@ -65,7 +89,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) neighborhood = transform.neighborhood distance = transform.distance path = transform.path - + nobs = nrow(geotable) if maxneighbors > nobs || maxneighbors < 1 @warn "Invalid maximum number of neighbors. Adjusting to $nobs..." @@ -82,7 +106,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model svars = choose(colspec, vars) - svars .=> model + svars .=> Ref(model) end # pre-allocate memory for neighbors @@ -96,23 +120,23 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) map(inds) do ind # centroid of estimation center = centroid(idom, ind) - + # find neighbors with data nneigh = search!(neighbors, center, searcher) - + # skip if there are too few neighbors if nneigh < minneighbors missing else # final set of neighbors ninds = view(neighbors, 1:nneigh) - + # view neighborhood with data samples = view(geotable, ninds) - + # fit model to data fmodel = fit(model, samples) - + # save prediction predict(fmodel, var, idom[ind]) end From 2c9e8fcb5e4725db4ea32499c1c4dc6cfdec0249 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 17:19:31 -0300 Subject: [PATCH 05/18] Apply suggestions --- src/GeoStatsTransforms.jl | 2 +- src/interpolate.jl | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/GeoStatsTransforms.jl b/src/GeoStatsTransforms.jl index d5d65b3..2c0ce32 100644 --- a/src/GeoStatsTransforms.jl +++ b/src/GeoStatsTransforms.jl @@ -21,7 +21,7 @@ using SparseArrays using LinearAlgebra using Statistics -import GeoStatsModels: GeoStatsModel, fit, predict +import GeoStatsModels: GeoStatsModel, fit, predict, predictprob import TableTransforms: ColSpec, Col, AllSpec, NoneSpec import TableTransforms: colspec, choose import TableTransforms: divide, attach diff --git a/src/interpolate.jl b/src/interpolate.jl index 4751b60..973fe63 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -11,6 +11,8 @@ neighborhood=nothing, distance=Euclidean(), path=LinearPath() + point=true, + prob=false ) TODO @@ -45,6 +47,8 @@ struct Interpolate{D<:Domain,N,M,P} <: TableTransform neighborhood::N distance::M path::P + point::Bool + prob::Bool end Interpolate( @@ -55,7 +59,9 @@ Interpolate( maxneighbors=10, neighborhood=nothing, distance=Euclidean(), - path=LinearPath() + path=LinearPath(), + point=true, + prob=false ) = Interpolate( domain, collect(ColSpec, colspecs), @@ -64,7 +70,9 @@ Interpolate( maxneighbors, neighborhood, distance, - path + path, + point, + prob ) Interpolate(domain::Domain; distance=Euclidean(), kwargs...) = @@ -89,6 +97,8 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) neighborhood = transform.neighborhood distance = transform.distance path = transform.path + point = transform.point + prob = transform.prob nobs = nrow(geotable) if maxneighbors > nobs || maxneighbors < 1 @@ -101,7 +111,8 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) minneighbors = 1 end - searcher = searcher_ui(dom, maxneighbors, distance, neighborhood) + vdom = point ? PointSet(centroid(dom, i) for i in 1:nobs) : dom + searcher = searcher_ui(vdom, maxneighbors, distance, neighborhood) # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model @@ -138,7 +149,12 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) fmodel = fit(model, samples) # save prediction - predict(fmodel, var, idom[ind]) + geom = point ? center : dom[ind] + if prob + predictprpb(fmodel, var, geom) + else + predict(fmodel, var, geom) + end end end end From b7ec023b8259fda1bc69193db9888d4002f2bf04 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 17:39:05 -0300 Subject: [PATCH 06/18] Add tests --- test/Manifest.toml | 191 +++++++++++++++++++++++++++++++++++++++++++- test/Project.toml | 2 + test/interpolate.jl | 45 +++++++++++ test/runtests.jl | 3 + 4 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 test/interpolate.jl diff --git a/test/Manifest.toml b/test/Manifest.toml index 5f58462..5b9b2c6 100644 --- a/test/Manifest.toml +++ b/test/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.9.3" +julia_version = "1.9.2" manifest_format = "2.0" -project_hash = "b42ec61971d5030262a4f3d3fc22cfea26ccfce7" +project_hash = "19b23df802bd9b009955c74d6502c263307a8478" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -42,6 +42,28 @@ version = "2.3.0" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.1" +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.11" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" @@ -147,6 +169,17 @@ git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.12.10" +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + [[deps.Compat]] deps = ["UUIDs"] git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" @@ -214,6 +247,46 @@ git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" version = "0.1.2" +[[deps.DensityRatioEstimation]] +deps = ["LinearAlgebra", "Parameters", "Random", "Statistics", "StatsBase"] +git-tree-sha1 = "f62c41b0e7363161e3ba81bbfde0d667f9b01710" +uuid = "ab46fb84-d57c-11e9-2f65-6f72e4a7229f" +version = "1.2.0" + + [deps.DensityRatioEstimation.extensions] + DensityRatioEstimationChainRulesCoreExt = "ChainRulesCore" + DensityRatioEstimationConvexExt = ["Convex", "ECOS"] + DensityRatioEstimationGPUArraysExt = "GPUArrays" + DensityRatioEstimationJuMPExt = ["JuMP", "Ipopt"] + DensityRatioEstimationOptimExt = "Optim" + + [deps.DensityRatioEstimation.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Convex = "f65535da-76fb-5f13-bab9-19810c17039a" + ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" + Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" + JuMP = "4076af6c-e467-56ae-b986-b466b2749572" + Optim = "429524aa-4258-5aef-a3af-852621145aeb" + +[[deps.Dictionaries]] +deps = ["Indexing", "Random", "Serialization"] +git-tree-sha1 = "e82c3c97b5b4ec111f3c1b55228cebc7510525a2" +uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" +version = "0.3.25" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + [[deps.Distances]] deps = ["LinearAlgebra", "Statistics", "StatsAPI"] git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" @@ -279,16 +352,56 @@ weakdeps = ["SparseArrays", "Statistics"] FillArraysSparseArraysExt = "SparseArrays" FillArraysStatisticsExt = "Statistics" +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.21.1" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + [[deps.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +[[deps.GeoStatsBase]] +deps = ["Combinatorics", "DensityRatioEstimation", "Distances", "Distributed", "Distributions", "GeoTables", "LinearAlgebra", "LossFunctions", "MLJModelInterface", "Meshes", "Optim", "ProgressMeter", "Random", "Rotations", "ScientificTypes", "Statistics", "StatsBase", "TableTransforms", "Tables", "Transducers", "TypedTables"] +git-tree-sha1 = "d55f955011798b21c2a33d80239425364386432b" +uuid = "323cb8eb-fbf6-51c0-afd0-f8fba70507b2" +version = "0.35.3" + +[[deps.GeoStatsModels]] +deps = ["Combinatorics", "Distances", "Distributions", "GeoTables", "LinearAlgebra", "Meshes", "Statistics", "Tables", "Unitful", "Variography"] +git-tree-sha1 = "96f2efb706d25de2eace78505aaed93d889183c5" +repo-rev = "main" +repo-url = "https://github.com/JuliaEarth/GeoStatsModels.jl" +uuid = "ad987403-13c5-47b5-afee-0a48f6ac4f12" +version = "0.1.0" + [[deps.GeoTables]] deps = ["DataAPI", "Meshes", "PrettyTables", "Random", "ScientificTypes", "Tables", "Unitful"] git-tree-sha1 = "8d332f0bcd61b1fa134e32820300298f950d02b4" @@ -337,6 +450,11 @@ git-tree-sha1 = "3d09a9f60edf77f8a4d99f9e015e8fbf9989605d" uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" version = "3.1.7+0" +[[deps.Indexing]] +git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" +uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" +version = "1.1.1" + [[deps.IndirectArrays]] git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" @@ -431,6 +549,12 @@ version = "1.10.2+0" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] +git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.2.0" + [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -454,6 +578,22 @@ version = "0.3.26" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +[[deps.LossFunctions]] +deps = ["Markdown", "Requires", "Statistics"] +git-tree-sha1 = "df9da07efb9b05ca7ef701acec891ee8f73c99e2" +uuid = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" +version = "0.11.1" +weakdeps = ["CategoricalArrays"] + + [deps.LossFunctions.extensions] + LossFunctionsCategoricalArraysExt = "CategoricalArrays" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "03ae109be87f460fe3c96b8a0dbbf9c7bf840bd5" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.9.2" + [[deps.MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" @@ -511,6 +651,12 @@ version = "0.3.4" uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2022.10.11" +[[deps.NLSolversBase]] +deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] +git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "7.8.3" + [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" @@ -572,6 +718,12 @@ git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" +[[deps.Optim]] +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "963b004d15216f8129f6c0f7d187efa136570be0" +uuid = "429524aa-4258-5aef-a3af-852621145aeb" +version = "1.7.7" + [[deps.OrderedCollections]] git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" @@ -595,6 +747,12 @@ git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" version = "0.5.12" +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" @@ -606,6 +764,12 @@ git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" version = "0.3.3" +[[deps.PositiveFactorizations]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" +uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" +version = "0.2.4" + [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" @@ -761,6 +925,12 @@ version = "2.3.1" [deps.SpecialFunctions.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +[[deps.SplitApplyCombine]] +deps = ["Dictionaries", "Indexing"] +git-tree-sha1 = "48f393b0231516850e39f6c756970e7ca8b77045" +uuid = "03a91e81-4c3e-53e1-a0a4-9c0c8f19dd66" +version = "1.2.2" + [[deps.SplittablesBase]] deps = ["Setfield", "Test"] git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" @@ -910,10 +1080,21 @@ git-tree-sha1 = "53e92e907bd67eef12e319ca932a7dd036428bfc" uuid = "28dd2a49-a57a-4bfb-84ca-1a49db9b96b8" version = "1.2.1" +[[deps.TypedTables]] +deps = ["Adapt", "Dictionaries", "Indexing", "SplitApplyCombine", "Tables", "Unicode"] +git-tree-sha1 = "d911ae4e642cf7d56b1165d29ef0a96ba3444ca9" +uuid = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" +version = "1.4.3" + [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" @@ -931,6 +1112,12 @@ version = "1.17.0" ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" +[[deps.Variography]] +deps = ["Bessels", "Distances", "GeoStatsBase", "GeoTables", "InteractiveUtils", "LinearAlgebra", "Meshes", "NearestNeighbors", "Optim", "Printf", "Random", "Setfield", "Tables", "Transducers", "Unitful"] +git-tree-sha1 = "b62ad1095e9d31827da23474f497ee54e1c47a22" +uuid = "04a0146e-e6df-5636-8d7f-62fa9eb0b20c" +version = "0.18.2" + [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" diff --git a/test/Project.toml b/test/Project.toml index 834bc5a..e4984e2 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -2,6 +2,7 @@ CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" CoDa = "5900dafe-f573-5c72-b367-76665857777b" FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +GeoStatsModels = "ad987403-13c5-47b5-afee-0a48f6ac4f12" GeoTables = "e502b557-6362-48c1-8219-d30d308dcdb0" ImageIO = "82e4d734-157c-48bb-816b-45c225c6df19" Meshes = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" @@ -11,3 +12,4 @@ Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" TableTransforms = "0d432bfd-3ee1-4ac1-886a-39f05cc69a3e" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +Variography = "04a0146e-e6df-5636-8d7f-62fa9eb0b20c" diff --git a/test/interpolate.jl b/test/interpolate.jl new file mode 100644 index 0000000..c66828e --- /dev/null +++ b/test/interpolate.jl @@ -0,0 +1,45 @@ +@testset "Interpolate" begin + @test !isrevertible(Interpolate(CartesianGrid(2, 2))) + + pset = PointSet(rand(Point2, 3)) + gtb = georef((a=[1, 2, 3], b=[4, 5, 6]), pset) + variogram = GaussianVariogram(range=35.0, nugget=0.0) + ngtb = gtb |> Interpolate(pset, [:a, :b] => Kriging(variogram)) + @test ngtb.a == gtb.a + @test ngtb.b == gtb.b + @test ngtb.geometry == pset + + # -------------------- + # 2D PROBLEM (GLOBAL) + # -------------------- + + gtb2D = georef((; z=[1.0, 0.0, 1.0]), [(25.0, 25.0), (50.0, 75.0), (75.0, 50.0)]) + grid2D = CartesianGrid((100, 100), (0.5, 0.5), (1.0, 1.0)) + linds = LinearIndices(size(grid2D)) + + Random.seed!(2021) + ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram)) + @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) + @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) + @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) + + # --------------------- + # 2D PROBLEM (NEAREST) + # --------------------- + + Random.seed!(2021) + ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram), maxneighbors=3) + @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) + @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) + @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) + + # ------------------- + # 2D PROBLEM (LOCAL) + # ------------------- + + Random.seed!(2021) + ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram), maxneighbors=3, neighborhood=MetricBall(100.0)) + @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) + @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) + @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) +end diff --git a/test/runtests.jl b/test/runtests.jl index 88c67b9..1efb628 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,6 +2,8 @@ using GeoStatsTransforms using Meshes using GeoTables using Tables +using GeoStatsModels +using Variography using TableTransforms using ScientificTypes using CategoricalArrays @@ -17,6 +19,7 @@ datadir = joinpath(@__DIR__, "data") testfiles = [ "feature.jl", "geometric.jl", + "interpolate.jl", "uniquecoords.jl", "clustering.jl", "rasterize.jl", From c885be5a47cd5ca85d24b35fc4edd82f4dcbe2df Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 17:47:54 -0300 Subject: [PATCH 07/18] Update tests --- test/Manifest.toml | 2 +- test/interpolate.jl | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/Manifest.toml b/test/Manifest.toml index 5b9b2c6..0c2bebf 100644 --- a/test/Manifest.toml +++ b/test/Manifest.toml @@ -396,7 +396,7 @@ version = "0.35.3" [[deps.GeoStatsModels]] deps = ["Combinatorics", "Distances", "Distributions", "GeoTables", "LinearAlgebra", "Meshes", "Statistics", "Tables", "Unitful", "Variography"] -git-tree-sha1 = "96f2efb706d25de2eace78505aaed93d889183c5" +git-tree-sha1 = "cf8ddfe637feb50c909cbfd309a33f2f6fac4054" repo-rev = "main" repo-url = "https://github.com/JuliaEarth/GeoStatsModels.jl" uuid = "ad987403-13c5-47b5-afee-0a48f6ac4f12" diff --git a/test/interpolate.jl b/test/interpolate.jl index c66828e..e80c55f 100644 --- a/test/interpolate.jl +++ b/test/interpolate.jl @@ -13,12 +13,12 @@ # 2D PROBLEM (GLOBAL) # -------------------- - gtb2D = georef((; z=[1.0, 0.0, 1.0]), [(25.0, 25.0), (50.0, 75.0), (75.0, 50.0)]) - grid2D = CartesianGrid((100, 100), (0.5, 0.5), (1.0, 1.0)) - linds = LinearIndices(size(grid2D)) + gtb = georef((; z=[1.0, 0.0, 1.0]), [(25.0, 25.0), (50.0, 75.0), (75.0, 50.0)]) + grid = CartesianGrid((100, 100), (0.5, 0.5), (1.0, 1.0)) + linds = LinearIndices(size(grid)) Random.seed!(2021) - ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram)) + ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram)) @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) @@ -28,7 +28,7 @@ # --------------------- Random.seed!(2021) - ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram), maxneighbors=3) + ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram), maxneighbors=3) @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) @@ -38,7 +38,7 @@ # ------------------- Random.seed!(2021) - ngtb = gtb2D |> Interpolate(grid2D, :z => Kriging(variogram), maxneighbors=3, neighborhood=MetricBall(100.0)) + ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram), maxneighbors=3, neighborhood=MetricBall(100.0)) @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) From bf4e169d4aa560ddaca722e16055ea31176d633e Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 17:51:01 -0300 Subject: [PATCH 08/18] Remove Manifest.toml --- .gitignore | 2 +- test/Manifest.toml | 1151 -------------------------------------------- 2 files changed, 1 insertion(+), 1152 deletions(-) delete mode 100644 test/Manifest.toml diff --git a/.gitignore b/.gitignore index 0f84bed..d0841a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ *.jl.*.cov *.jl.cov *.jl.mem -/Manifest.toml +Manifest.toml diff --git a/test/Manifest.toml b/test/Manifest.toml deleted file mode 100644 index 0c2bebf..0000000 --- a/test/Manifest.toml +++ /dev/null @@ -1,1151 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.9.2" -manifest_format = "2.0" -project_hash = "19b23df802bd9b009955c74d6502c263307a8478" - -[[deps.AbstractFFTs]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.5.0" - - [deps.AbstractFFTs.extensions] - AbstractFFTsChainRulesCoreExt = "ChainRulesCore" - AbstractFFTsTestExt = "Test" - - [deps.AbstractFFTs.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.AbstractTrees]] -git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.4.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.6.2" -weakdeps = ["StaticArrays"] - - [deps.Adapt.extensions] - AdaptStaticArraysExt = "StaticArrays" - -[[deps.ArgCheck]] -git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" -uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" -version = "2.3.0" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.4.11" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.AxisArrays]] -deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] -git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" -uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" -version = "0.4.7" - -[[deps.BangBang]] -deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] -git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed" -uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" -version = "0.3.39" - - [deps.BangBang.extensions] - BangBangChainRulesCoreExt = "ChainRulesCore" - BangBangDataFramesExt = "DataFrames" - BangBangStaticArraysExt = "StaticArrays" - BangBangStructArraysExt = "StructArrays" - BangBangTypedTablesExt = "TypedTables" - - [deps.BangBang.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.Baselet]] -git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" -uuid = "9718e550-a3fa-408a-8086-8db961cd8217" -version = "0.1.1" - -[[deps.Bessels]] -git-tree-sha1 = "4435559dc39793d53a9e3d278e185e920b4619ef" -uuid = "0e736298-9ec6-45e8-9647-e4fc86a2fe38" -version = "0.2.8" - -[[deps.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" - -[[deps.Calculus]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" -uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" -version = "0.5.1" - -[[deps.CategoricalArrays]] -deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] -git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" -uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" -version = "0.10.8" - - [deps.CategoricalArrays.extensions] - CategoricalArraysJSONExt = "JSON" - CategoricalArraysRecipesBaseExt = "RecipesBase" - CategoricalArraysSentinelArraysExt = "SentinelArrays" - CategoricalArraysStructTypesExt = "StructTypes" - - [deps.CategoricalArrays.weakdeps] - JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" - RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" - SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" - StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" - -[[deps.CircularArrays]] -deps = ["OffsetArrays"] -git-tree-sha1 = "61bc114e595167090b4cbcb7305ddeacd4274f16" -uuid = "7a955b69-7140-5f4e-a0ed-f168c5e2e749" -version = "1.3.2" - -[[deps.CoDa]] -deps = ["AxisArrays", "Distances", "Distributions", "FillArrays", "LinearAlgebra", "Printf", "Random", "ScientificTypes", "StaticArrays", "Statistics", "StatsBase", "TableTransforms", "Tables"] -git-tree-sha1 = "022f60f3f2b1ee81d3568afd833999d18eb41d4e" -uuid = "5900dafe-f573-5c72-b367-76665857777b" -version = "1.0.8" - -[[deps.ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.4" - -[[deps.ColorVectorSpace]] -deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] -git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" -uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.10.0" -weakdeps = ["SpecialFunctions"] - - [deps.ColorVectorSpace.extensions] - SpecialFunctionsExt = "SpecialFunctions" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.10" - -[[deps.Combinatorics]] -git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.2" - -[[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" - -[[deps.Compat]] -deps = ["UUIDs"] -git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.9.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.0.5+0" - -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - - [deps.CompositionsBase.weakdeps] - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.4" -weakdeps = ["IntervalSets", "StaticArrays"] - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseStaticArraysExt = "StaticArrays" - -[[deps.Crayons]] -git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" -uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" -version = "4.1.1" - -[[deps.DataAPI]] -git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.15.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.15" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DefineSingletons]] -git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" -uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" -version = "0.1.2" - -[[deps.DensityRatioEstimation]] -deps = ["LinearAlgebra", "Parameters", "Random", "Statistics", "StatsBase"] -git-tree-sha1 = "f62c41b0e7363161e3ba81bbfde0d667f9b01710" -uuid = "ab46fb84-d57c-11e9-2f65-6f72e4a7229f" -version = "1.2.0" - - [deps.DensityRatioEstimation.extensions] - DensityRatioEstimationChainRulesCoreExt = "ChainRulesCore" - DensityRatioEstimationConvexExt = ["Convex", "ECOS"] - DensityRatioEstimationGPUArraysExt = "GPUArrays" - DensityRatioEstimationJuMPExt = ["JuMP", "Ipopt"] - DensityRatioEstimationOptimExt = "Optim" - - [deps.DensityRatioEstimation.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Convex = "f65535da-76fb-5f13-bab9-19810c17039a" - ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" - GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" - Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" - JuMP = "4076af6c-e467-56ae-b986-b466b2749572" - Optim = "429524aa-4258-5aef-a3af-852621145aeb" - -[[deps.Dictionaries]] -deps = ["Indexing", "Random", "Serialization"] -git-tree-sha1 = "e82c3c97b5b4ec111f3c1b55228cebc7510525a2" -uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" -version = "0.3.25" - -[[deps.DiffResults]] -deps = ["StaticArraysCore"] -git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" -uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" -version = "1.1.0" - -[[deps.DiffRules]] -deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" -uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.15.1" - -[[deps.Distances]] -deps = ["LinearAlgebra", "Statistics", "StatsAPI"] -git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" -uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" -version = "0.10.9" -weakdeps = ["SparseArrays"] - - [deps.Distances.extensions] - DistancesSparseArraysExt = "SparseArrays" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.Distributions]] -deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "938fe2981db009f531b6332e31c58e9584a2f9bd" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.100" - - [deps.Distributions.extensions] - DistributionsChainRulesCoreExt = "ChainRulesCore" - DistributionsDensityInterfaceExt = "DensityInterface" - - [deps.Distributions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.3" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.DualNumbers]] -deps = ["Calculus", "NaNMath", "SpecialFunctions"] -git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" -uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" -version = "0.6.8" - -[[deps.FileIO]] -deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" -uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.1" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FillArrays]] -deps = ["LinearAlgebra", "Random"] -git-tree-sha1 = "a20eaa3ad64254c61eeb5f230d9306e937405434" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.6.1" -weakdeps = ["SparseArrays", "Statistics"] - - [deps.FillArrays.extensions] - FillArraysSparseArraysExt = "SparseArrays" - FillArraysStatisticsExt = "Statistics" - -[[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] -git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" -uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.21.1" - - [deps.FiniteDiff.extensions] - FiniteDiffBandedMatricesExt = "BandedMatrices" - FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" - FiniteDiffStaticArraysExt = "StaticArrays" - - [deps.FiniteDiff.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.4" - -[[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" -uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.36" -weakdeps = ["StaticArrays"] - - [deps.ForwardDiff.extensions] - ForwardDiffStaticArraysExt = "StaticArrays" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - -[[deps.GeoStatsBase]] -deps = ["Combinatorics", "DensityRatioEstimation", "Distances", "Distributed", "Distributions", "GeoTables", "LinearAlgebra", "LossFunctions", "MLJModelInterface", "Meshes", "Optim", "ProgressMeter", "Random", "Rotations", "ScientificTypes", "Statistics", "StatsBase", "TableTransforms", "Tables", "Transducers", "TypedTables"] -git-tree-sha1 = "d55f955011798b21c2a33d80239425364386432b" -uuid = "323cb8eb-fbf6-51c0-afd0-f8fba70507b2" -version = "0.35.3" - -[[deps.GeoStatsModels]] -deps = ["Combinatorics", "Distances", "Distributions", "GeoTables", "LinearAlgebra", "Meshes", "Statistics", "Tables", "Unitful", "Variography"] -git-tree-sha1 = "cf8ddfe637feb50c909cbfd309a33f2f6fac4054" -repo-rev = "main" -repo-url = "https://github.com/JuliaEarth/GeoStatsModels.jl" -uuid = "ad987403-13c5-47b5-afee-0a48f6ac4f12" -version = "0.1.0" - -[[deps.GeoTables]] -deps = ["DataAPI", "Meshes", "PrettyTables", "Random", "ScientificTypes", "Tables", "Unitful"] -git-tree-sha1 = "8d332f0bcd61b1fa134e32820300298f950d02b4" -uuid = "e502b557-6362-48c1-8219-d30d308dcdb0" -version = "1.6.9" - -[[deps.HypergeometricFunctions]] -deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" -uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.23" - -[[deps.ImageAxes]] -deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] -git-tree-sha1 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8" -uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" -version = "0.6.11" - -[[deps.ImageBase]] -deps = ["ImageCore", "Reexport"] -git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" -uuid = "c817782e-172a-44cc-b673-b171935fbb9e" -version = "0.1.7" - -[[deps.ImageCore]] -deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] -git-tree-sha1 = "fc5d1d3443a124fde6e92d0260cd9e064eba69f8" -uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" -version = "0.10.1" - -[[deps.ImageIO]] -deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"] -git-tree-sha1 = "bca20b2f5d00c4fbc192c3212da8fa79f4688009" -uuid = "82e4d734-157c-48bb-816b-45c225c6df19" -version = "0.6.7" - -[[deps.ImageMetadata]] -deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] -git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7" -uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" -version = "0.9.9" - -[[deps.Imath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3d09a9f60edf77f8a4d99f9e015e8fbf9989605d" -uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" -version = "3.1.7+0" - -[[deps.Indexing]] -git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" -uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" -version = "1.1.1" - -[[deps.IndirectArrays]] -git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" -uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" -version = "1.0.0" - -[[deps.Inflate]] -git-tree-sha1 = "5cd07aab533df5170988219191dfad0519391428" -uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.3" - -[[deps.InitialValues]] -git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" -uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" -version = "0.3.1" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.IntervalSets]] -deps = ["Dates", "Random"] -git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" -uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.7" -weakdeps = ["Statistics"] - - [deps.IntervalSets.extensions] - IntervalSetsStatisticsExt = "Statistics" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.2" - -[[deps.IterTools]] -git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.8.0" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" - -[[deps.JpegTurbo]] -deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] -git-tree-sha1 = "327713faef2a3e5c80f96bf38d1fa26f7a6ae29e" -uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" -version = "0.1.3" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "2.1.91+0" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.0" - -[[deps.LazyModules]] -git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" -uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" -version = "0.3.1" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.3" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "7.84.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[deps.LineSearches]] -deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" -uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.2.0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.26" - - [deps.LogExpFunctions.extensions] - LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" - LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" - LogExpFunctionsInverseFunctionsExt = "InverseFunctions" - - [deps.LogExpFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.LossFunctions]] -deps = ["Markdown", "Requires", "Statistics"] -git-tree-sha1 = "df9da07efb9b05ca7ef701acec891ee8f73c99e2" -uuid = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" -version = "0.11.1" -weakdeps = ["CategoricalArrays"] - - [deps.LossFunctions.extensions] - LossFunctionsCategoricalArraysExt = "CategoricalArrays" - -[[deps.MLJModelInterface]] -deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] -git-tree-sha1 = "03ae109be87f460fe3c96b8a0dbbf9c7bf840bd5" -uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" -version = "1.9.2" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.11" - -[[deps.MappedArrays]] -git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" -uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" -version = "0.4.2" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+0" - -[[deps.Meshes]] -deps = ["Bessels", "CircularArrays", "Distances", "LinearAlgebra", "NearestNeighbors", "Random", "Rotations", "SparseArrays", "StaticArrays", "StatsBase", "TransformsBase"] -git-tree-sha1 = "dbba85bb1484b5d72d519e7801a6c5f511b5f7af" -uuid = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" -version = "0.35.7" - - [deps.Meshes.extensions] - MeshesMakieExt = "Makie" - - [deps.Meshes.weakdeps] - Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" - -[[deps.MicroCollections]] -deps = ["BangBang", "InitialValues", "Setfield"] -git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" -uuid = "128add7d-3638-4c79-886c-908ea0c25c34" -version = "0.1.4" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.1.0" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MosaicViews]] -deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] -git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" -uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" -version = "0.3.4" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.10.11" - -[[deps.NLSolversBase]] -deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" -uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.8.3" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" - -[[deps.NearestNeighbors]] -deps = ["Distances", "StaticArrays"] -git-tree-sha1 = "2c3726ceb3388917602169bed973dbc97f1b51a8" -uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" -version = "0.4.13" - -[[deps.NelderMead]] -git-tree-sha1 = "25abc2f9b1c752e69229f37909461befa7c1f85d" -uuid = "2f6b4ddb-b4ff-44c0-b59b-2ab99302f970" -version = "0.4.0" - -[[deps.Netpbm]] -deps = ["FileIO", "ImageCore", "ImageMetadata"] -git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" -uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" -version = "1.1.1" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OffsetArrays]] -deps = ["Adapt"] -git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" -uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.12.10" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.21+4" - -[[deps.OpenEXR]] -deps = ["Colors", "FileIO", "OpenEXR_jll"] -git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633" -uuid = "52e1d378-f018-4a11-a4be-720524705ac7" -version = "0.3.2" - -[[deps.OpenEXR_jll]] -deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "a4ca623df1ae99d09bc9868b008262d0c0ac1e4f" -uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" -version = "3.1.4+0" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.Optim]] -deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "963b004d15216f8129f6c0f7d187efa136570be0" -uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.7.7" - -[[deps.OrderedCollections]] -git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.2" - -[[deps.PDMats]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.17" - -[[deps.PNGFiles]] -deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] -git-tree-sha1 = "9b02b27ac477cad98114584ff964e3052f656a0f" -uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" -version = "0.4.0" - -[[deps.PaddedViews]] -deps = ["OffsetArrays"] -git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" -uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" -version = "0.5.12" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.9.2" - -[[deps.PkgVersion]] -deps = ["Pkg"] -git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" -uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" -version = "0.3.3" - -[[deps.PositiveFactorizations]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" -uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" -version = "0.2.4" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.0" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.0" - -[[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "ee094908d720185ddbdc58dbe0c1cbe35453ec7a" -uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.2.7" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.ProgressMeter]] -deps = ["Distributed", "Printf"] -git-tree-sha1 = "00099623ffee15972c16111bcf84c58a0051257c" -uuid = "92933f4c-e287-5a05-a399-4b506db050ca" -version = "1.9.0" - -[[deps.QOI]] -deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] -git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce" -uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" -version = "1.0.0" - -[[deps.QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.8.2" - -[[deps.Quaternions]] -deps = ["LinearAlgebra", "Random", "RealDot"] -git-tree-sha1 = "da095158bdc8eaccb7890f9884048555ab771019" -uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" -version = "0.7.4" - -[[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Random]] -deps = ["SHA", "Serialization"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[deps.RangeArrays]] -git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" -uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" -version = "0.3.2" - -[[deps.RealDot]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" -uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" -version = "0.1.0" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Rmath]] -deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.7.1" - -[[deps.Rmath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" -uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" -version = "0.4.0+0" - -[[deps.Rotations]] -deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] -git-tree-sha1 = "54ccb4dbab4b1f69beb255a2c0ca5f65a9c82f08" -uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" -version = "1.5.1" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.ScientificTypes]] -deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] -git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" -uuid = "321657f4-b219-11e9-178b-2701a2544e81" -version = "3.0.2" - -[[deps.ScientificTypesBase]] -git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" -uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" -version = "3.0.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] -git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "1.1.1" - -[[deps.SimpleTraits]] -deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" -uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" - -[[deps.Sixel]] -deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] -git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" -uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" -version = "0.1.3" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.1.1" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.3.1" - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.SplitApplyCombine]] -deps = ["Dictionaries", "Indexing"] -git-tree-sha1 = "48f393b0231516850e39f6c756970e7ca8b77045" -uuid = "03a91e81-4c3e-53e1-a0a4-9c0c8f19dd66" -version = "1.2.2" - -[[deps.SplittablesBase]] -deps = ["Setfield", "Test"] -git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" -uuid = "171d559e-b47b-412a-8079-5efa626c420e" -version = "0.1.15" - -[[deps.StackViews]] -deps = ["OffsetArrays"] -git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" -uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" -version = "0.1.1" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore"] -git-tree-sha1 = "51621cca8651d9e334a659443a74ce50a3b6dfab" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.6.3" -weakdeps = ["Statistics"] - - [deps.StaticArrays.extensions] - StaticArraysStatisticsExt = "Statistics" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.2" - -[[deps.StatisticalTraits]] -deps = ["ScientificTypesBase"] -git-tree-sha1 = "30b9236691858e13f167ce829490a68e1a597782" -uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" -version = "3.2.0" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.9.0" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.0" - -[[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.0" - -[[deps.StatsFuns]] -deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.3.0" - - [deps.StatsFuns.extensions] - StatsFunsChainRulesCoreExt = "ChainRulesCore" - StatsFunsInverseFunctionsExt = "InverseFunctions" - - [deps.StatsFuns.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.StringManipulation]] -deps = ["PrecompileTools"] -git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" -uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.3.4" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+6" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.1" - -[[deps.TableTransforms]] -deps = ["AbstractTrees", "CategoricalArrays", "Distributions", "LinearAlgebra", "NelderMead", "PrettyTables", "Random", "ScientificTypes", "Statistics", "StatsBase", "Tables", "Transducers", "TransformsBase"] -git-tree-sha1 = "29f636ee42a9d2ad663ce3c45b7ffbdb95cd6875" -uuid = "0d432bfd-3ee1-4ac1-886a-39f05cc69a3e" -version = "1.15.0" - -[[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] -git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.10.1" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.TensorCore]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" -uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" -version = "0.1.1" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TiffImages]] -deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"] -git-tree-sha1 = "8621f5c499a8aa4aa970b1ae381aae0ef1576966" -uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" -version = "0.6.4" - -[[deps.Transducers]] -deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "53bd5978b182fa7c57577bdb452c35e5b4fb73a5" -uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.78" - - [deps.Transducers.extensions] - TransducersBlockArraysExt = "BlockArrays" - TransducersDataFramesExt = "DataFrames" - TransducersLazyArraysExt = "LazyArrays" - TransducersOnlineStatsBaseExt = "OnlineStatsBase" - TransducersReferenceablesExt = "Referenceables" - - [deps.Transducers.weakdeps] - BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" - DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" - LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" - OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" - Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" - -[[deps.TransformsBase]] -deps = ["AbstractTrees"] -git-tree-sha1 = "53e92e907bd67eef12e319ca932a7dd036428bfc" -uuid = "28dd2a49-a57a-4bfb-84ca-1a49db9b96b8" -version = "1.2.1" - -[[deps.TypedTables]] -deps = ["Adapt", "Dictionaries", "Indexing", "SplitApplyCombine", "Tables", "Unicode"] -git-tree-sha1 = "d911ae4e642cf7d56b1165d29ef0a96ba3444ca9" -uuid = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" -version = "1.4.3" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.Unitful]] -deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "a72d22c7e13fe2de562feda8645aa134712a87ee" -uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.17.0" - - [deps.Unitful.extensions] - ConstructionBaseUnitfulExt = "ConstructionBase" - InverseFunctionsUnitfulExt = "InverseFunctions" - - [deps.Unitful.weakdeps] - ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.Variography]] -deps = ["Bessels", "Distances", "GeoStatsBase", "GeoTables", "InteractiveUtils", "LinearAlgebra", "Meshes", "NearestNeighbors", "Optim", "Printf", "Random", "Setfield", "Tables", "Transducers", "Unitful"] -git-tree-sha1 = "b62ad1095e9d31827da23474f497ee54e1c47a22" -uuid = "04a0146e-e6df-5636-8d7f-62fa9eb0b20c" -version = "0.18.2" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+0" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.38+0" - -[[deps.libsixel_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "libpng_jll"] -git-tree-sha1 = "d4f63314c8aa1e48cd22aa0c17ed76cd1ae48c3c" -uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" -version = "1.10.3+0" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.48.0+0" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" From bd1e2791af2a634e8d446df6727509ecc2255756 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 17:59:03 -0300 Subject: [PATCH 09/18] Update tests --- test/interpolate.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/interpolate.jl b/test/interpolate.jl index e80c55f..1b28c51 100644 --- a/test/interpolate.jl +++ b/test/interpolate.jl @@ -3,19 +3,19 @@ pset = PointSet(rand(Point2, 3)) gtb = georef((a=[1, 2, 3], b=[4, 5, 6]), pset) - variogram = GaussianVariogram(range=35.0, nugget=0.0) - ngtb = gtb |> Interpolate(pset, [:a, :b] => Kriging(variogram)) + ngtb = gtb |> Interpolate(pset) @test ngtb.a == gtb.a @test ngtb.b == gtb.b @test ngtb.geometry == pset - + # -------------------- # 2D PROBLEM (GLOBAL) # -------------------- - + gtb = georef((; z=[1.0, 0.0, 1.0]), [(25.0, 25.0), (50.0, 75.0), (75.0, 50.0)]) grid = CartesianGrid((100, 100), (0.5, 0.5), (1.0, 1.0)) linds = LinearIndices(size(grid)) + variogram = GaussianVariogram(range=35.0, nugget=0.0) Random.seed!(2021) ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram)) From c28f4b71687a64dcae4d3d5c2ee3787479d66cdc Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:04:51 -0300 Subject: [PATCH 10/18] Apply suggestions --- src/GeoStatsTransforms.jl | 2 +- src/interpolate.jl | 9 ++++----- test/interpolate.jl | 14 +------------- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/GeoStatsTransforms.jl b/src/GeoStatsTransforms.jl index 2c0ce32..5674dad 100644 --- a/src/GeoStatsTransforms.jl +++ b/src/GeoStatsTransforms.jl @@ -21,7 +21,7 @@ using SparseArrays using LinearAlgebra using Statistics -import GeoStatsModels: GeoStatsModel, fit, predict, predictprob +using GeoStatsModels: GeoStatsModel, fit, predict, predictprob import TableTransforms: ColSpec, Col, AllSpec, NoneSpec import TableTransforms: colspec, choose import TableTransforms: divide, attach diff --git a/src/interpolate.jl b/src/interpolate.jl index 973fe63..0921e59 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -23,12 +23,11 @@ TODO * `maxneighbors` - Maximum number of neighbors (default to `10`) * `neighborhood` - Search neighborhood (default to `nothing`) * `distance` - A distance defined in Distances.jl (default to `Euclidean()`) -* `exponent` - Exponent of the distances (default to `1`) * `path` - The path algorithm used to iterate over the domain (default to `LinearPath()`) -The `maxneighbors` option can be used to perform inverse distance weighting -with a subset of measurements per prediction location. If `maxneighbors` -is not provided, then all measurements are used. +The `maxneighbors` option can be used to perform interpolation +with a subset of measurements per prediction location. +If `maxneighbors` is not provided, then all measurements are used. Two `neighborhood` search methods are available: @@ -151,7 +150,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) # save prediction geom = point ? center : dom[ind] if prob - predictprpb(fmodel, var, geom) + predictprob(fmodel, var, geom) else predict(fmodel, var, geom) end diff --git a/test/interpolate.jl b/test/interpolate.jl index 1b28c51..6be9268 100644 --- a/test/interpolate.jl +++ b/test/interpolate.jl @@ -7,11 +7,7 @@ @test ngtb.a == gtb.a @test ngtb.b == gtb.b @test ngtb.geometry == pset - - # -------------------- - # 2D PROBLEM (GLOBAL) - # -------------------- - + gtb = georef((; z=[1.0, 0.0, 1.0]), [(25.0, 25.0), (50.0, 75.0), (75.0, 50.0)]) grid = CartesianGrid((100, 100), (0.5, 0.5), (1.0, 1.0)) linds = LinearIndices(size(grid)) @@ -23,20 +19,12 @@ @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) - # --------------------- - # 2D PROBLEM (NEAREST) - # --------------------- - Random.seed!(2021) ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram), maxneighbors=3) @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) @test isapprox(ngtb.z[linds[50, 75]], 0.0, atol=1e-3) @test isapprox(ngtb.z[linds[75, 50]], 1.0, atol=1e-3) - # ------------------- - # 2D PROBLEM (LOCAL) - # ------------------- - Random.seed!(2021) ngtb = gtb |> Interpolate(grid, :z => Kriging(variogram), maxneighbors=3, neighborhood=MetricBall(100.0)) @test isapprox(ngtb.z[linds[25, 25]], 1.0, atol=1e-3) From 5cfc7d40eaf842ee79ad2c4714b45739fc94b8c0 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:07:20 -0300 Subject: [PATCH 11/18] Apply suggestions --- src/GeoStatsTransforms.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/GeoStatsTransforms.jl b/src/GeoStatsTransforms.jl index 5674dad..06f019d 100644 --- a/src/GeoStatsTransforms.jl +++ b/src/GeoStatsTransforms.jl @@ -35,14 +35,13 @@ include("traits.jl") include("feature.jl") include("geometric.jl") +include("interpolate.jl") include("uniquecoords.jl") include("clustering.jl") include("rasterize.jl") include("potrace.jl") include("detrend.jl") -include("interpolate.jl") - export # transforms Interpolate, From 68c9b28ae88a5f858ca6ffeb80ae19ee23c04ef1 Mon Sep 17 00:00:00 2001 From: Elias Carvalho <73039601+eliascarv@users.noreply.github.com> Date: Mon, 18 Sep 2023 18:07:55 -0300 Subject: [PATCH 12/18] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlio Hoffimann --- src/interpolate.jl | 7 +++++-- test/runtests.jl | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 0921e59..eb1ac9e 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -15,15 +15,18 @@ prob=false ) -TODO +Interpolate geospatial data on given `domain` using geostatistical models +`model₁`, ..., `modelₙ` for variables `vars₁`, ..., `varsₙ`. -## Global Parameters +## Parameters * `minneighbors` - Minimum number of neighbors (default to `1`) * `maxneighbors` - Maximum number of neighbors (default to `10`) * `neighborhood` - Search neighborhood (default to `nothing`) * `distance` - A distance defined in Distances.jl (default to `Euclidean()`) * `path` - The path algorithm used to iterate over the domain (default to `LinearPath()`) +* `point` - Perform interpolation on point support (default to `true`) +* `prob` - Perform probabilistic interpolation (default to `false`) The `maxneighbors` option can be used to perform interpolation with a subset of measurements per prediction location. diff --git a/test/runtests.jl b/test/runtests.jl index 1efb628..a9d0aa2 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,8 +2,8 @@ using GeoStatsTransforms using Meshes using GeoTables using Tables -using GeoStatsModels using Variography +using GeoStatsModels using TableTransforms using ScientificTypes using CategoricalArrays From b931fb2687703cb97e8f6f5437bcc4842555fd15 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:10:43 -0300 Subject: [PATCH 13/18] Update code --- src/GeoStatsTransforms.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/GeoStatsTransforms.jl b/src/GeoStatsTransforms.jl index 06f019d..0465ff7 100644 --- a/src/GeoStatsTransforms.jl +++ b/src/GeoStatsTransforms.jl @@ -22,8 +22,9 @@ using LinearAlgebra using Statistics using GeoStatsModels: GeoStatsModel, fit, predict, predictprob -import TableTransforms: ColSpec, Col, AllSpec, NoneSpec -import TableTransforms: colspec, choose +using TableTransforms: ColSpec, Col, AllSpec, NoneSpec +using TableTransforms: colspec, choose + import TableTransforms: divide, attach import TableTransforms: applymeta, revertmeta import TableTransforms: apply, revert, reapply From 6c9540691859d4e48eb63795ca32327ca72e5d89 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:13:24 -0300 Subject: [PATCH 14/18] Update code style --- src/interpolate.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index eb1ac9e..7b578f7 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -119,7 +119,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model svars = choose(colspec, vars) - svars .=> Ref(model) + [var => model for var in svars] end # pre-allocate memory for neighbors From 49b92692da7607c6b7db4f8cd637e80dc9330891 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:23:29 -0300 Subject: [PATCH 15/18] Apply suggestions --- src/interpolate.jl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 7b578f7..d17aff5 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -113,15 +113,18 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) minneighbors = 1 end - vdom = point ? PointSet(centroid(dom, i) for i in 1:nobs) : dom - searcher = searcher_ui(vdom, maxneighbors, distance, neighborhood) - # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model svars = choose(colspec, vars) [var => model for var in svars] end + pset = PointSet(centroid(dom, i) for i in 1:nobs) + data = point ? georef(values(geotable), pset) : geotable + + # determine bounded search method + searcher = searcher_ui(pset, maxneighbors, distance, neighborhood) + # pre-allocate memory for neighbors neighbors = Vector{Int}(undef, maxneighbors) @@ -145,7 +148,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) ninds = view(neighbors, 1:nneigh) # view neighborhood with data - samples = view(geotable, ninds) + samples = view(data, ninds) # fit model to data fmodel = fit(model, samples) From 2faf5cd38480e60081853d906efafda59a2539bf Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:25:06 -0300 Subject: [PATCH 16/18] Apply suggestions --- src/interpolate.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index d17aff5..4b45410 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -113,15 +113,15 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) minneighbors = 1 end + pset = PointSet(centroid(dom, i) for i in 1:nobs) + data = point ? georef(values(geotable), pset) : geotable + # preprocess variable models varmodels = mapreduce(vcat, colspecs, models) do colspec, model svars = choose(colspec, vars) [var => model for var in svars] end - pset = PointSet(centroid(dom, i) for i in 1:nobs) - data = point ? georef(values(geotable), pset) : geotable - # determine bounded search method searcher = searcher_ui(pset, maxneighbors, distance, neighborhood) From 3cf310823521b36ee78117bfc2608ff53d14f48f Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 18 Sep 2023 18:28:05 -0300 Subject: [PATCH 17/18] Apply suggestions --- src/interpolate.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 4b45410..78a01fc 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -102,7 +102,7 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) point = transform.point prob = transform.prob - nobs = nrow(geotable) + nobs = nelements(dom) if maxneighbors > nobs || maxneighbors < 1 @warn "Invalid maximum number of neighbors. Adjusting to $nobs..." maxneighbors = nobs From ff40725196e2fe56687b158d13e3f7669bd9236b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Hoffimann?= Date: Tue, 19 Sep 2023 08:32:41 -0300 Subject: [PATCH 18/18] Refactor Interpolate --- src/interpolate.jl | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/interpolate.jl b/src/interpolate.jl index 78a01fc..9e094f8 100644 --- a/src/interpolate.jl +++ b/src/interpolate.jl @@ -3,22 +3,12 @@ # ------------------------------------------------------------------ """ - Interpolate( - domain, - vars₁ => model₁, ..., varsₙ => modelₙ; - minneighbors=1, - maxneighbors=10, - neighborhood=nothing, - distance=Euclidean(), - path=LinearPath() - point=true, - prob=false - ) + Interpolate(domain, vars₁ => model₁, ..., varsₙ => modelₙ; [options]) Interpolate geospatial data on given `domain` using geostatistical models `model₁`, ..., `modelₙ` for variables `vars₁`, ..., `varsₙ`. -## Parameters +## Options * `minneighbors` - Minimum number of neighbors (default to `1`) * `maxneighbors` - Maximum number of neighbors (default to `10`) @@ -155,11 +145,8 @@ function apply(transform::Interpolate, geotable::AbstractGeoTable) # save prediction geom = point ? center : dom[ind] - if prob - predictprob(fmodel, var, geom) - else - predict(fmodel, var, geom) - end + pfun = prob ? predictprob : predict + pfun(fmodel, var, geom) end end end