From 92e5570eba84a96895af9551ee106b07e5d3e3a0 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 17:11:43 +0100 Subject: [PATCH 1/6] Refactor HelperFunctions into a package --- Project.toml | 2 +- docs/Project.toml | 3 + docs/src/softwarecomparisonc.png | Bin 162977 -> 117313 bytes test/HelperFunctions/Manifest.toml | 890 ++++++++++++++++++ test/HelperFunctions/Project.toml | 38 + .../src/HelperFunctions.jl} | 0 test/Project.toml | 5 + test/runtests.jl | 39 +- test/triangulation/check_args.jl | 8 +- 9 files changed, 963 insertions(+), 22 deletions(-) create mode 100644 test/HelperFunctions/Manifest.toml create mode 100644 test/HelperFunctions/Project.toml rename test/{helper_functions.jl => HelperFunctions/src/HelperFunctions.jl} (100%) diff --git a/Project.toml b/Project.toml index 1d6340334..ec8eb0f58 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "DelaunayTriangulation" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" authors = ["Daniel VandenHeuvel "] -version = "1.6.4" +version = "1.6.5" [deps] AdaptivePredicates = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" diff --git a/docs/Project.toml b/docs/Project.toml index 2b3a5fcf2..10db242cf 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -34,3 +34,6 @@ SimpleGraphs = "0.8" StableRNGs = "1.0" StatsBase = "0.34" Test = "1.11" + +[sources] +DelaunayTriangulation = { path = ".." } diff --git a/docs/src/softwarecomparisonc.png b/docs/src/softwarecomparisonc.png index 79d1d3316e92e4f6ab1d70f07134bd53ae5464cc..bb7bdcab5d8b66cc6a446f7798000408d57ae9ce 100644 GIT binary patch literal 117313 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 literal 162977 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

B-DY}=tJ5PzuhjE8{RZWerN$lxbi_Wd%( z2blb)N-4$LkwZ6Sn3qn`jjERHq2ec}#f?z&8M%vie)lTyU~73&6=;i6P{dCHXgui# zs)W#5Yz)rX ztEJw;7RRgwpo@^{@8|DK+AG z0%2Wlu|MC%3bbKZu*6zQ0eUcZm&U-;wTVlfYQx?}Ro7cOl&qDCudo+}^jdEu{Mai@ zC<0funXQQ+2KNWqp_lX+u$;+=^E!ObevQhsq(bM0BD)Pyu+6FFhB451<<-bh?eDFP z6sQ=ov2OP_YUsMPx;-#8I*JSwbkMzDNpPjppn}x63u-VYqwg^Z;!s-4-SAIlC0XgM zf^m8?WGtnTcaUzEKg*zlA!))Mi7fK?;1t^CXTRosju%yZc7wVV@2SVm?VA9Na9*$3 zf(6fLnVoM_y#uG$RiN*33r1=C$;lsFjc2tyz+ZlHd7bS&-NKC9xs@2kXcKrJA##2v>yX2@(L8QV()<0LNCM%)(b82fP*dKr5IQL@ z!ROxpHaTwfE#L|{Jl36i@LPRJ2zQ%v7GaR`xoF^R{rE{(yksW0jsA-xCAsAI!>e*Q z=K9*lKqMEN@X7B90jj9Myw$c+C%9|aR>aoX&6O76K%Cpl_0T&ppyxhx?KY6EGW;E? zIQxw%f|Z@r0{<$N^24GZjos)WCfk$F`i$(Vh>TvmUv~!u2Pl<-)waxpufYcz){@pr z`4cWfA;kTJ$J2*MkxPFe4oCaHHrhKWgDrGUG=+O-Wa{=p=bTC_Ry

YqA>0SAZ0VuBV@mhPUL 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 BxRC$= diff --git a/test/HelperFunctions/Manifest.toml b/test/HelperFunctions/Manifest.toml new file mode 100644 index 000000000..3db57cc0d --- /dev/null +++ b/test/HelperFunctions/Manifest.toml @@ -0,0 +1,890 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.11.5" +manifest_format = "2.0" +project_hash = "5951027419f98f0d99b59d4ccd552e6bc866af1a" + +[[deps.ADTypes]] +git-tree-sha1 = "e2478490447631aedba0823d4d7a80b2cc8cdb32" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "1.14.0" + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" + ADTypesEnzymeCoreExt = "EnzymeCore" + + [deps.ADTypes.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.AbstractLattices]] +git-tree-sha1 = "763b6f3f6bfabd72c7e262cbb5ddfd43fd5c6398" +uuid = "398f06c4-4d28-53ec-89ca-5b2656b7603d" +version = "0.3.1" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "f7817e2e585aa6d924fd714df1e2a84be7896c60" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.3.0" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AdaptivePredicates]] +git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" +uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" +version = "1.2.0" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "9606d7832795cbef89e06a550475be300364a8aa" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.19.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + 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" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.CRlibm]] +deps = ["CRlibm_jll"] +git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e" +uuid = "96374032-68de-5a5b-8d9e-752f78720389" +version = "1.0.2" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" + +[[deps.Combinatorics]] +git-tree-sha1 = "8010b6bb3388abe68d95743dcbea77650bb2eddf" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.3" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.1" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.16.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.ConstructionBase]] +git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.8" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.22" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" + +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] +path = "../.." +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.5" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[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.DifferentiationInterface]] +deps = ["ADTypes", "LinearAlgebra"] +git-tree-sha1 = "c8d85ecfcbaef899308706bebdd8b00107f3fb43" +uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +version = "0.6.54" + + [deps.DifferentiationInterface.extensions] + DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" + DifferentiationInterfaceDiffractorExt = "Diffractor" + DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] + DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" + DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" + DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" + DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] + DifferentiationInterfaceGPUArraysCoreExt = "GPUArraysCore" + DifferentiationInterfaceGTPSAExt = "GTPSA" + DifferentiationInterfaceMooncakeExt = "Mooncake" + DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] + DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] + DifferentiationInterfaceSparseArraysExt = "SparseArrays" + DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" + DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" + DifferentiationInterfaceStaticArraysExt = "StaticArrays" + DifferentiationInterfaceSymbolicsExt = "Symbolics" + DifferentiationInterfaceTrackerExt = "Tracker" + DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] + + [deps.DifferentiationInterface.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" + Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "3e6d038b77f22791b8e3472b7c633acea1ecac06" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.120" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "e7b7e6f178525d17c720ab9c081e4ef04429f860" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.4" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.ElasticArrays]] +deps = ["Adapt"] +git-tree-sha1 = "75e5697f521c9ab89816d3abeea806dfc5afb967" +uuid = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" +version = "1.2.12" + +[[deps.EnumX]] +git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.5" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.8" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.13.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] +git-tree-sha1 = "f089ab1f834470c525562030c8cfde4025d5e915" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.27.0" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffSparseArraysExt = "SparseArrays" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "910febccb28d493032495b7009dce7d7f7aee554" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "1.0.1" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.28" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "b8ffb903da9f7b8cf695a8bead8e01814aa24b30" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.2" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Random", "RoundingEmulator"] +git-tree-sha1 = "694c52705f8b23dc5b39eeac629dc3059a168a40" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "0.22.35" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + IntervalArithmeticSparseArraysExt = "SparseArrays" + + [deps.IntervalArithmetic.weakdeps] + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.4" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.6.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.7.2+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + +[[deps.LightXML]] +deps = ["Libdl", "XML2_jll"] +git-tree-sha1 = "3a994404d3f6709610701c7dabfc03fed87a81f8" +uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" +version = "0.9.1" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] +git-tree-sha1 = "e4c3be53733db1051cc15ecf573b1042b3a712a1" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.3.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.11.0" + +[[deps.LinearAlgebraX]] +deps = ["LinearAlgebra", "Mods", "Primes", "SimplePolynomials"] +git-tree-sha1 = "054fe197a75adcf517933f0c807051d79881f3f3" +uuid = "9b3f67b0-2d00-526e-9884-9e4938f8fb88" +version = "0.2.10" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" + + [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" +version = "1.11.0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.6+0" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" + +[[deps.Mods]] +git-tree-sha1 = "0a3c164857cfc4defe0ac09e6b0123d61320abb1" +uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" +version = "2.2.6" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.12.12" + +[[deps.Multisets]] +git-tree-sha1 = "8ef67bad0a3def6d77aebf1d3645119e7c8e5a54" +uuid = "3b2b4ff1-bcff-5658-a3ee-dbcf1ce5ac09" +version = "0.4.5" + +[[deps.NLSolversBase]] +deps = ["ADTypes", "DifferentiationInterface", "Distributed", "FiniteDiff", "ForwardDiff"] +git-tree-sha1 = "b14c7be6046e7d48e9063a0053f95ee0fc954176" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "7.9.1" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.1.3" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OpenBLASConsistentFPCSR_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "567515ca155d0020a45b05175449b499c63e7015" +uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" +version = "0.3.29+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.27+1" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.5+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.Optim]] +deps = ["Compat", "EnumX", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "31b3b1b8e83ef9f1d50d74f1dd5f19a37a304a1f" +uuid = "429524aa-4258-5aef-a3af-852621145aeb" +version = "1.12.0" + + [deps.Optim.extensions] + OptimMOIExt = "MathOptInterface" + + [deps.Optim.weakdeps] + MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + +[[deps.OrderedCollections]] +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f07c06228a1c670ae4c87d1276b92c7c597fdda0" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.35" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Permutations]] +deps = ["Combinatorics", "LinearAlgebra", "Random"] +git-tree-sha1 = "b1f03a4943c62552a12c7f95965b76c3f91cf5b7" +uuid = "2ae35dd2-176d-5d53-8349-f30d82d94d4f" +version = "0.4.23" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.11.0" + + [deps.Pkg.extensions] + REPLExt = "REPL" + + [deps.Pkg.weakdeps] + REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Polynomials]] +deps = ["LinearAlgebra", "OrderedCollections", "RecipesBase", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "555c272d20fc80a2658587fb9bbda60067b93b7c" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "4.0.19" + + [deps.Polynomials.extensions] + PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsFFTWExt = "FFTW" + PolynomialsMakieCoreExt = "MakieCore" + PolynomialsMutableArithmeticsExt = "MutableArithmetics" + + [deps.Polynomials.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" + MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" + +[[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 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.3.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.2" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.RingLists]] +deps = ["Random"] +git-tree-sha1 = "70d8d52c6d4238cace6ae1a7dd2c0c4d43acdf0b" +uuid = "286e9d63-9694-5540-9e3c-4e6708fa07b2" +version = "0.2.9" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.8.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.2" + +[[deps.SimpleGraphs]] +deps = ["AbstractLattices", "Combinatorics", "DataStructures", "IterTools", "LightXML", "LinearAlgebra", "LinearAlgebraX", "Optim", "Primes", "Random", "RingLists", "SimplePartitions", "SimplePolynomials", "SimpleRandom", "SparseArrays", "Statistics"] +git-tree-sha1 = "f65caa24a622f985cc341de81d3f9744435d0d0f" +uuid = "55797a34-41de-5266-9ec1-32ac4eb504d3" +version = "0.8.6" + +[[deps.SimplePartitions]] +deps = ["AbstractLattices", "DataStructures", "Permutations"] +git-tree-sha1 = "76cdce94e07849d1172ccb8f3a60a0bbbebe58b3" +uuid = "ec83eff0-a5b5-5643-ae32-5cbf6eedec9d" +version = "0.3.3" + +[[deps.SimplePolynomials]] +deps = ["Mods", "Multisets", "Polynomials", "Primes"] +git-tree-sha1 = "77b2c5e731f7e50bbd088ccc2810232e06c1afa3" +uuid = "cc47b68c-3164-5771-a705-2bc0097375a0" +version = "0.2.18" + +[[deps.SimpleRandom]] +deps = ["Distributions", "LinearAlgebra", "Random"] +git-tree-sha1 = "bb4f42b25b87f124478207a82f5b02dfafdb3e63" +uuid = "a6525b86-64cd-54fa-8f65-62fc48bdc0e8" +version = "0.3.2" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.11.0" + +[[deps.SpatialIndexing]] +git-tree-sha1 = "84efe17c77e1f2156a7a0d8a7c163c1e1c7bdaed" +uuid = "d4ead438-fe20-5cc5-a293-4fd39a41b74c" +version = "0.1.6" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.5.1" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "95af145932c2ed859b63329952ce8d633719f091" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.3" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "0feb6b9031bd5c51f9072393eb5ab3efd31bf9e4" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.13" + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + + [deps.StaticArrays.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "b81c5035922cc89c2d9523afc6c54be512411466" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.5" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "8e45cecc66f3b42633b8ce14d431e8e57a3e242e" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.5.0" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.7.0+0" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "b8b243e47228b4a3877f1dd6aee0c5d56db7fcf4" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.6+1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.11.0+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.59.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" diff --git a/test/HelperFunctions/Project.toml b/test/HelperFunctions/Project.toml new file mode 100644 index 000000000..1afe6dd96 --- /dev/null +++ b/test/HelperFunctions/Project.toml @@ -0,0 +1,38 @@ +name = "HelperFunctions" +uuid = "b09acb3e-6af7-4d5d-85ff-dca8b45bb116" +authors = ["Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com>"] +version = "0.1.0" + +[deps] +DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +DelaunayTriangulation = "927a84f5-c5f4-47a5-9785-b46e178433df" +DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" +Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +ElasticArrays = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" +InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +SimpleGraphs = "55797a34-41de-5266-9ec1-32ac4eb504d3" +SpatialIndexing = "d4ead438-fe20-5cc5-a293-4fd39a41b74c" +StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[sources] +DelaunayTriangulation = {path = "../.."} + +[compat] +DataStructures = "0.18.22" +DelimitedFiles = "1.9.1" +Distributions = "0.25.120" +ElasticArrays = "1.2.12" +InteractiveUtils = "1.11.0" +LinearAlgebra = "1.11.0" +OrderedCollections = "1.8.1" +Random = "1.11.0" +SimpleGraphs = "0.8.6" +SpatialIndexing = "0.1.6" +StableRNGs = "1.0.3" +StaticArrays = "1.9.13" +Test = "1.11.0" diff --git a/test/helper_functions.jl b/test/HelperFunctions/src/HelperFunctions.jl similarity index 100% rename from test/helper_functions.jl rename to test/HelperFunctions/src/HelperFunctions.jl diff --git a/test/Project.toml b/test/Project.toml index cbe42aef0..1888d6e0f 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -17,6 +17,7 @@ ExactPredicates = "429591f6-91af-11e9-00e2-59fbe8cec110" FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +HelperFunctions = "b09acb3e-6af7-4d5d-85ff-dca8b45bb116" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" @@ -35,5 +36,9 @@ StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" StructEquality = "6ec83bb0-ed9f-11e9-3b4c-2b04cb4e219c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +[sources] +DelaunayTriangulation = {path = ".."} +HelperFunctions = {path = "HelperFunctions"} + [compat] Aqua = "0.8.7" diff --git a/test/runtests.jl b/test/runtests.jl index 96fcc941c..0218549fe 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -5,9 +5,8 @@ using Test using Random const ALL_TEST_SCRIPTS = Set{String}() -const NON_TEST_SCRIPTS = Set{String}(["helper_functions.jl", "runtests.jl"]) -include("helper_functions.jl") -using .HelperFunctions +const NON_TEST_SCRIPTS = Set{String}(["runtests.jl"]) +using HelperFunctions ct() = Dates.format(now(), "HH:MM:SS") function safe_include(filename; name=filename, push=true, verbose=true) # Workaround for not being able to interpolate into SafeTestset test names @@ -22,13 +21,13 @@ function safe_include(filename; name=filename, push=true, verbose=true) # Workar end end -@testset verbose = true "DelaunayTriangulation.jl" begin - @testset verbose = true "Aqua" begin +@testset verbose = false "DelaunayTriangulation.jl" begin + @testset verbose = false "Aqua" begin Aqua.test_all(DelaunayTriangulation; ambiguities=false, project_extras=false, unbound_args=false) # don't care about julia < 1.2 Aqua.test_ambiguities(DelaunayTriangulation) # don't pick up Base and Core... end - @testset verbose = true "Triangulation" begin + @testset verbose = false "Triangulation" begin safe_include("triangulation/rectangle.jl") safe_include("triangulation/bowyer_watson.jl") safe_include("triangulation/triangulate.jl") @@ -38,14 +37,14 @@ end safe_include("triangulation/weighted.jl") end - @testset verbose = true "Interfaces" begin + @testset verbose = false "Interfaces" begin safe_include("interfaces/triangles.jl") safe_include("interfaces/edges.jl") safe_include("interfaces/points.jl") safe_include("interfaces/boundary_nodes.jl") end - @testset verbose = true "Data Structures" begin + @testset verbose = false "Data Structures" begin safe_include("data_structures/adjacent.jl") safe_include("data_structures/adjacent2vertex.jl") safe_include("data_structures/graph.jl") @@ -63,20 +62,20 @@ end safe_include("data_structures/polygon_hierarchy.jl", verbose=false) end - @testset verbose = true "Predicates" begin + @testset verbose = false "Predicates" begin safe_include("predicates/certificate.jl") safe_include("predicates/boundaries_and_ghosts.jl") safe_include("predicates/general.jl") safe_include("predicates/index_and_ghost_handling.jl") end - @testset verbose = true "Utilities" begin + @testset verbose = false "Utilities" begin safe_include("utils.jl") safe_include("geo_utils.jl") safe_include("helper_function_tests.jl") end - @testset verbose = true "Point Location" begin + @testset verbose = false "Point Location" begin safe_include("point_location/brute_force.jl") safe_include("point_location/select_initial_point.jl") safe_include("point_location/select_initial_triangle_interior_node.jl") @@ -86,7 +85,7 @@ end safe_include("point_location/find_polygon.jl") end - @testset verbose = true "Operations" begin + @testset verbose = false "Operations" begin safe_include("operations/add_triangle.jl") safe_include("operations/delete_triangle.jl") safe_include("operations/add_ghost_triangles.jl") @@ -101,27 +100,27 @@ end safe_include("operations/delete_holes.jl") end - @testset verbose = true "Constrained Triangulation" begin + @testset verbose = false "Constrained Triangulation" begin safe_include("constrained_triangulation/segment_location.jl") safe_include("constrained_triangulation/segment_insertion.jl") end - @testset verbose = true "Refinement" begin + @testset verbose = false "Refinement" begin safe_include("refinement/refine.jl") safe_include("refinement/curve_bounded.jl") end - @testset verbose = true "Voronoi" begin + @testset verbose = false "Voronoi" begin safe_include("voronoi/voronoi.jl") safe_include("voronoi/power.jl") end - @testset verbose = true "Makie" begin + @testset verbose = false "Makie" begin safe_include("makie/makie.jl") end - @testset verbose = true "Run the documentation examples" begin - @testset verbose = true "Check that the applications in the docs run" begin + @testset verbose = false "Run the documentation examples" begin + @testset verbose = false "Check that the applications in the docs run" begin app_dir = joinpath(dirname(dirname(pathof(DelaunayTriangulation))), "docs", "src", "literate_applications") app_files = readdir(app_dir) for file in app_files @@ -131,7 +130,7 @@ end isfile(mp4_path) && rm(mp4_path) end - @testset verbose = true "Test the tutorials" begin + @testset verbose = false "Test the tutorials" begin tut_dir = joinpath(dirname(dirname(pathof(DelaunayTriangulation))), "docs", "src", "literate_tutorials") tut_files = readdir(tut_dir) for file in tut_files @@ -139,7 +138,7 @@ end end end - @testset verbose = true "Test the readme example" begin + @testset verbose = false "Test the readme example" begin safe_include("readme_example.jl") end end diff --git a/test/triangulation/check_args.jl b/test/triangulation/check_args.jl index abd53ae4d..3f7aa1554 100644 --- a/test/triangulation/check_args.jl +++ b/test/triangulation/check_args.jl @@ -604,4 +604,10 @@ end @test !DT.WARN_ON_DUPES[] DT.toggle_warn_on_dupes!() @test DT.WARN_ON_DUPES[] -end \ No newline at end of file +end + +# Issue #220: `Duplicate points not correctly handled when present in boundary_nodes` +p1 = [(118.57716599999999, 28.538463999999994), (118.814236, 27.962729999999993), (119.435126, 27.759529999999994), (120.044726, 27.962729999999993), (120.30437599999999, 28.538463999999994), (120.044726, 29.114197999999995), (119.435126, 29.317397999999994), (118.814236, 29.114197999999995), (118.57716599999999, 28.538463999999994), (118.57716599999999, 28.538463999999994)] +boundary_points = [[p1]] +boundary_nodes, points = convert_boundary_points_to_indices(boundary_points) +tri6 = triangulate(points; boundary_nodes) \ No newline at end of file From 9fd9345ff3b4835ec8500d876edeb95d2f53f673 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 19:42:27 +0100 Subject: [PATCH 2/6] Fix references to duplicate points in boundary nodes and segments --- NEWS.md | 5 + src/algorithms/triangulation/check_args.jl | 97 +++++++-- src/algorithms/triangulation/main.jl | 13 +- .../mesh_refinement/boundary_enricher.jl | 17 +- src/geometric_primitives/boundary_nodes.jl | 22 ++ test/interfaces/boundary_nodes.jl | 49 ++++- test/triangulation/check_args.jl | 196 ++++++++++-------- 7 files changed, 285 insertions(+), 114 deletions(-) diff --git a/NEWS.md b/NEWS.md index 0cdffce66..7dbc55560 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,10 @@ # Changelog +## 1.6.5 +- (Internal) A function `set_boundary_node!` has been added for setting a specific boundary node to another inside the provided `boundary_nodes`. +- (Internal) The `HelperFunctions` module in the tests has been reworked into its own package inside `test/HelperFunctions`. +- (Fix) Currently when checking for duplicate points, any extra points get skipped. However we did not correctly make sure those point's vertices inside `segments` or `boundary_nodes` were replaced with the first instance of the duplicate. This has been fixed. + ## 1.6.4 - An error is no longer thrown for inputs with duplicate points. Instead, a warning is thrown and any duplicates are merged into the `skip_points` keyword argument. With this, `DuplicatePointsError` has been removed. To silence the new warning, use `DelaunayTriangulation.toggle_warn_on_dupes!()`. diff --git a/src/algorithms/triangulation/check_args.jl b/src/algorithms/triangulation/check_args.jl index 5831cab04..8078a6f28 100644 --- a/src/algorithms/triangulation/check_args.jl +++ b/src/algorithms/triangulation/check_args.jl @@ -1,5 +1,5 @@ """ - check_args(points, boundary_nodes, hierarchy::PolygonHierarchy, boundary_curves = (); skip_points = Set{Int}()) -> Bool + check_args(points, boundary_nodes, segments, hierarchy::PolygonHierarchy, boundary_curves = (); skip_points = Set{Int}()) -> Bool Check that the arguments `points` and `boundary_nodes` to [`triangulate`](@ref), and a constructed [`PolygonHierarchy`](@ref) given by `hierarchy`, are valid. In particular, the function checks: @@ -18,17 +18,24 @@ If `boundary_nodes` are provided, meaning [`has_boundary_nodes`](@ref), then the so that e.g. the exterior boundary curves are all counter-clockwise (relative to just themselves), the next exterior-most curves inside those exteriors are all clockwise (again, relative to just themselves), and so on. +The arguments `boundary_nodes` and `segments` are also used when checking for duplicate points. Any duplicate points that are also referenced in `boundary_nodes` +and `segments` are updated so the vertex refers to the first instance of the duplicate point. This is done in-place, so that the original `boundary_nodes` and `segments` are modified. + +!!! danger "Mutation" + + If indeed duplicate points are found, the function modifies the `boundary_nodes` and `segments` in-place. This means that the original + `boundary_nodes` and `segments` are modified, and the original points are not modified. The indices of the duplicates are merged into `skip_points` in-place. + !!! danger "Intersecting boundaries" Another requirement for [`triangulate`](@ref) is that none of the boundaries intersect in their interior, which also prohibits interior self-intersections. This is NOT checked. Similarly, segments should not intersect in their interior, which is not checked. """ -function check_args(points, boundary_nodes, hierarchy, boundary_curves = (); skip_points = Set{Int}()) +function check_args(points, boundary_nodes, segments, hierarchy, boundary_curves=(); skip_points=Set{Int}()) check_dimension(points) - has_unique_points!(skip_points, points) + has_unique_points!(skip_points, points, boundary_nodes, segments) has_enough_points(points) - has_bnd = has_boundary_nodes(boundary_nodes) - if has_bnd + if has_boundary_nodes(boundary_nodes) has_consistent_connections(boundary_nodes) has_consistent_orientations(hierarchy, boundary_nodes, is_curve_bounded(boundary_curves)) end @@ -38,7 +45,7 @@ end struct InsufficientPointsError{P} <: Exception points::P end -struct InconsistentConnectionError{I, J} <: Exception +struct InconsistentConnectionError{I,J} <: Exception curve_index::I segment_index₁::I segment_index₂::I @@ -81,8 +88,8 @@ function Base.showerror(io::IO, err::InconsistentOrientationError) # by a combination of multiple AbstractParametricCurves and possibly a PiecewiseLinear part. Thus, the above advice # might not be wrong. str2 = "\nIf this curve is defined by an AbstractParametricCurve, you may instead need to reverse the order of the control points defining" * - " the sections of the curve; the `positive` keyword may also be of interest for CircularArcs and EllipticalArcs. Alternatively, for individual" * - " AbstractParametricCurves, note that `reverse` can be used to reverse the orientation of the curve directly instead of the control points." + " the sections of the curve; the `positive` keyword may also be of interest for CircularArcs and EllipticalArcs. Alternatively, for individual" * + " AbstractParametricCurves, note that `reverse` can be used to reverse the orientation of the curve directly instead of the control points." str *= str2 end sign = err.should_be_positive ? "positive" : "negative" @@ -92,28 +99,82 @@ function Base.showerror(io::IO, err::InconsistentOrientationError) end function check_dimension(points) - valid = is_planar(points) - if !valid - @warn "The provided points are not in the plane. All but the first two coordinates of each point will be ignored." maxlog=1 + valid = is_planar(points) + if !valid + @warn "The provided points are not in the plane. All but the first two coordinates of each point will be ignored." maxlog = 1 end return valid end -function has_unique_points!(skip_points, points) +function has_unique_points!(skip_points, points, boundary_nodes, segments) all_unique = points_are_unique(points) - if !all_unique + if !all_unique dup_seen = find_duplicate_points(points) if WARN_ON_DUPES[] io = IOBuffer() - println(io, "There were duplicate points. Only one of each duplicate will be used, and all other duplicates will be skipped. The indices of the duplicates are:") + println(io, "There were duplicate points. Only one of each duplicate will be used (the first vertex encountered in the order that follows), and all other duplicates will be skipped. The indices of the duplicates are:") end - for (p, ivec) in dup_seen - for j in 2:lastindex(ivec) + for (p, ivec) in dup_seen + # Skip all but the first duplicate point for each point. + for j in (firstindex(ivec)+1):lastindex(ivec) push!(skip_points, ivec[j]) end if WARN_ON_DUPES[] println(io, " ", p, " at indices ", ivec) end + # We need to be careful about the duplicate points in the boundary nodes and segments. + # https://github.com/JuliaGeometry/DelaunayTriangulation.jl/issues/220 + ref = first(ivec) + if !(isnothing(segments) || num_edges(segments) == 0) + # We can't delete the segments while iterating, so we need to build a list + E = edge_type(segments) + segment_map = Dict{E,E}() + for e in each_edge(segments) + u, v = edge_vertices(e) + if u ∈ ivec + segment_map[e] = construct_edge(E, ref, v) + elseif v ∈ ivec + segment_map[e] = construct_edge(E, u, ref) + end + end + for (e, new_e) in segment_map + delete_edge!(segments, e) + add_edge!(segments, new_e) + end + end + if has_boundary_nodes(boundary_nodes) + if has_multiple_curves(boundary_nodes) + for k in 1:num_curves(boundary_nodes) + curve = get_boundary_nodes(boundary_nodes, k) + for j in 1:num_sections(curve) + segment = get_boundary_nodes(curve, j) + for i in 1:(num_boundary_edges(segment)+1) + v = get_boundary_nodes(segment, i) + if v ∈ ivec + set_boundary_node!(boundary_nodes, ((k, j), i), ref) + end + end + end + end + elseif has_multiple_sections(boundary_nodes) + for j in 1:num_sections(boundary_nodes) + segment = get_boundary_nodes(boundary_nodes, j) + for i in 1:(num_boundary_edges(segment)+1) + v = get_boundary_nodes(segment, i) + if v ∈ ivec + set_boundary_node!(boundary_nodes, (j, i), ref) + end + end + end + else + for i in 1:(num_boundary_edges(boundary_nodes)+1) + v = get_boundary_nodes(boundary_nodes, i) + if v ∈ ivec + set_boundary_node!(boundary_nodes, (boundary_nodes, i), ref) + end + end + end + end end if WARN_ON_DUPES[] println(io, "To suppress this warning, call `DelaunayTriangulation.toggle_warn_on_dupes!()`.") @@ -125,7 +186,7 @@ function has_unique_points!(skip_points, points) return true end -function has_enough_points(points) +function has_enough_points(points) has_enough = num_points(points) ≥ 3 !has_enough && throw(InsufficientPointsError(points)) return true @@ -171,7 +232,7 @@ function has_consistent_connections_multiple_curves(boundary_nodes) end return true end -function has_consistent_connections_multiple_sections(boundary_nodes, curve_index = 0) +function has_consistent_connections_multiple_sections(boundary_nodes, curve_index=0) ns = num_sections(boundary_nodes) segmentⱼ₋₁ = get_boundary_nodes(boundary_nodes, 1) nn = num_boundary_edges(segmentⱼ₋₁) + 1 diff --git a/src/algorithms/triangulation/main.jl b/src/algorithms/triangulation/main.jl index be2dbc9d6..721d69b17 100644 --- a/src/algorithms/triangulation/main.jl +++ b/src/algorithms/triangulation/main.jl @@ -86,9 +86,10 @@ Here are some warnings to consider for some of the arguments. !!! warning "Mutation" - The `segments` may get mutated in two ways: (1) Segments may get rotated so that `(i, j)` becomes `(j, i)`. (2) If there are + The `segments` may get mutated in three ways: (1) Segments may get rotated so that `(i, j)` becomes `(j, i)`. (2) If there are segments that are collinear with other segments, then they may get split into chain of non-overlapping connecting segments (also see below). For - curve-bounded domains, segments are also split so that no subsegment's diametral circle contains any other point. + curve-bounded domains, segments are also split so that no subsegment's diametral circle contains any other point. (3) If there are + duplicate points in `points` that are also referenced in `segments`, then the duplicated vertex will be changed to the first occurrence of the vertex in `points`. !!! warning "Intersecting segments" @@ -99,6 +100,10 @@ Here are some warnings to consider for some of the arguments. - `boundary_nodes` +!!! warning "Mutation" + + If duplicate points are found, and they are also referenced in `boundary_nodes`, then the duplicated vertex will be changed to the first occurrence of the vertex in `points`. + !!! warning "Points outside of boundary curves" While for standard domains with piecewise linear boundaries (or no boundaries) it is fine for points to be @@ -151,9 +156,9 @@ function triangulate( if isnothing(full_polygon_hierarchy) full_polygon_hierarchy = construct_polygon_hierarchy(points, boundary_nodes; IntegerType) end - skip_points_set = Set{IntegerType}(skip_points) + skip_points_set = Set{IntegerType}(skip_points) n = length(skip_points_set) - check_arguments && check_args(points, boundary_nodes, full_polygon_hierarchy, boundary_curves; skip_points = skip_points_set) + check_arguments && check_args(points, boundary_nodes, segments, full_polygon_hierarchy, boundary_curves; skip_points = skip_points_set) if length(skip_points_set) > n setdiff!(insertion_order, skip_points_set) end diff --git a/src/data_structures/mesh_refinement/boundary_enricher.jl b/src/data_structures/mesh_refinement/boundary_enricher.jl index 1b45ab05d..6c4579a18 100644 --- a/src/data_structures/mesh_refinement/boundary_enricher.jl +++ b/src/data_structures/mesh_refinement/boundary_enricher.jl @@ -388,13 +388,13 @@ end Base.copy(enricher::BoundaryEnricher) = enrcopy(enricher) enrcopy(::Nothing; kwargs...) = nothing -function enrcopy(enricher::BoundaryEnricher; - points = copy(get_points(enricher)), - boundary_nodes = copy(get_boundary_nodes(enricher)), - segments = copy(get_segments(enricher)), - boundary_curves = _plcopy.(get_boundary_curves(enricher); points), - polygon_hierarchy = copy(get_polygon_hierarchy(enricher)), - boundary_edge_map = copy(get_boundary_edge_map(enricher))) +function enrcopy(enricher::BoundaryEnricher; + points=copy(get_points(enricher)), + boundary_nodes=copy(get_boundary_nodes(enricher)), + segments=copy(get_segments(enricher)), + boundary_curves=_plcopy.(get_boundary_curves(enricher); points), + polygon_hierarchy=copy(get_polygon_hierarchy(enricher)), + boundary_edge_map=copy(get_boundary_edge_map(enricher))) parent_map = copy(get_parent_map(enricher)) curve_index_map = copy(get_curve_index_map(enricher)) spatial_tree = copy(get_spatial_tree(enricher)) @@ -454,7 +454,8 @@ function check_args(enricher::BoundaryEnricher) boundary_nodes = get_boundary_nodes(enricher) hierarchy = get_polygon_hierarchy(enricher) boundary_curves = get_boundary_curves(enricher) - return check_args(points, boundary_nodes, hierarchy, boundary_curves) + segments = get_segments(enricher) + return check_args(points, boundary_nodes, segments, hierarchy, boundary_curves) end """ diff --git a/src/geometric_primitives/boundary_nodes.jl b/src/geometric_primitives/boundary_nodes.jl index 76b2a5558..c80d17880 100644 --- a/src/geometric_primitives/boundary_nodes.jl +++ b/src/geometric_primitives/boundary_nodes.jl @@ -759,3 +759,25 @@ end @inline function _get_skeleton_contiguous(boundary_nodes, ::Type{I}) where {I} return I[] end + +""" + set_boundary_node!(boundary_nodes, pos, node) + +Given a set of `boundary_nodes`, sets the boundary node at position `pos` to `node`. +Here, `pos[1]` is such that `get_boundary_nodes(boundary_nodes, pos[1])` +is the section that the node will be set onto, and `pos[2]` gives the position +of the array to set `node` into. In particular, + + set_boundary_node!(boundary_nodes, pos, node) + +is the same as + + get_boundary_nodes(boundary_nodes, pos[1])[pos[2]] = node + +assuming `setindex!` is defined for the type of `boundary_nodes`. +""" +function set_boundary_node!(boundary_nodes, pos, node) + nodes = get_boundary_nodes(boundary_nodes, pos[1]) + nodes[pos[2]] = node + return boundary_nodes +end \ No newline at end of file diff --git a/test/interfaces/boundary_nodes.jl b/test/interfaces/boundary_nodes.jl index cd1f61d43..acfb252bc 100644 --- a/test/interfaces/boundary_nodes.jl +++ b/test/interfaces/boundary_nodes.jl @@ -66,7 +66,7 @@ end map3 = DT.construct_ghost_vertex_map(bn3) idx = DT.𝒢 @test map1 == - Dict( + Dict( idx => (1, 1), idx - 1 => (1, 2), idx - 2 => (1, 3), idx - 3 => (1, 4), idx - 4 => (2, 1), idx - 5 => (2, 2), idx - 6 => (3, 1), idx - 7 => (3, 2), @@ -157,7 +157,7 @@ end end cbn = copy(bn) _bn_map = DT._bemcopy(bn_map; boundary_nodes=cbn) - @test bn_map == _bn_map + @test bn_map == _bn_map _bn = first.(values(_bn_map)) @test all(x -> x === cbn, _bn) @test all(x -> !(x === bn), _bn) @@ -185,7 +185,7 @@ end @test _bn_map == bn_map && !(bn_map === _bn_map) bn = Int[] bn_map = DT.construct_boundary_edge_map(bn) - @test bn_map == Dict{Tuple{Int32, Int32}, Tuple{Vector{Int}, Int}}() + @test bn_map == Dict{Tuple{Int32,Int32},Tuple{Vector{Int},Int}}() end @testset "insert_boundary_node!" begin @@ -243,3 +243,46 @@ end [[13, 14, 16, 17], [17, 18, 20], [20]], ] end + +@testset "set_boundary_node!" begin + # Single curve + bn = [1, 2, 3, 4, 5, 6, 7, 1] + DT.set_boundary_node!(bn, (bn, 5), 17) + DT.set_boundary_node!(bn, (bn, 1), 13) + @test bn == [13, 2, 3, 4, 17, 6, 7, 1] + + # Multiple sections + bn = [[1, 2, 3, 4], [4, 5, 6, 7, 8], [8, 9, 10, 1]] + DT.set_boundary_node!(bn, (1, 2), 22) + DT.set_boundary_node!(bn, (1, 4), 33) + DT.set_boundary_node!(bn, (2, 4), 44) + DT.set_boundary_node!(bn, (3, 1), 55) + @test bn == [[1, 22, 3, 33], [4, 5, 6, 44, 8], [55, 9, 10, 1]] + + # Multiple curves + bn = [ + [[1, 2, 3, 4, 5], [5, 6, 7], [7, 8], [8, 9, 10, 1]], + [[13, 14, 15, 16, 17], [17, 18, 19, 20], [20, 13]], + ] + DT.set_boundary_node!(bn, ((1, 1), 1), 99) + DT.set_boundary_node!(bn, ((1, 2), 3), 88) + DT.set_boundary_node!(bn, ((1, 3), 2), 77) + DT.set_boundary_node!(bn, ((1, 4), 3), 66) + DT.set_boundary_node!(bn, ((2, 1), 3), 55) + DT.set_boundary_node!(bn, ((2, 2), 3), 44) + DT.set_boundary_node!(bn, ((2, 3), 2), 33) + @test bn == [ + [[99, 2, 3, 4, 5], [5, 6, 88], [7, 77], [8, 9, 66, 1]], + [[13, 14, 55, 16, 17], [17, 18, 44, 20], [20, 33]], + ] + + # Invalid index should throw + @test_throws MethodError DT.set_boundary_node!([1, 2, 3], (1, 10), 99) + @test_throws BoundsError DT.set_boundary_node!([1, 2, 3], ([1, 2, 3], 4), 99) + + # Aliasing check + bn = [[10, 20], [30, 40]] + s = get_boundary_nodes(bn, 1) + DT.set_boundary_node!(bn, (1, 2), 999) + @test s[2] == 999 # test that the reference s is updated too +end diff --git a/test/triangulation/check_args.jl b/test/triangulation/check_args.jl index 3f7aa1554..f5842208e 100644 --- a/test/triangulation/check_args.jl +++ b/test/triangulation/check_args.jl @@ -5,49 +5,47 @@ _test_throws(e1, e2=e1) = @static VERSION ≥ v"1.9" ? e1 : e2 @testset "check_dimension" begin points = rand(2, 50) - boundary_nodes = nothing hierarchy = DT.construct_polygon_hierarchy(points) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, nothing, nothing, hierarchy) points = rand(3, 50) - boundary_nodes = nothing hierarchy = DT.construct_polygon_hierarchy(points) - @test_logs (:warn, "The provided points are not in the plane. All but the first two coordinates of each point will be ignored.") DT.check_args(points, boundary_nodes, hierarchy) + @test_logs (:warn, "The provided points are not in the plane. All but the first two coordinates of each point will be ignored.") DT.check_args(points, nothing, nothing, hierarchy) end @testset "A simple case" begin points = rand(2, 50) boundary_nodes = nothing hierarchy = DT.construct_polygon_hierarchy(points) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, nothing, nothing, hierarchy) end @testset "Not enough points" begin points = rand(2, 2) - boundary_nodes = nothing hierarchy = DT.construct_polygon_hierarchy(points) - @test_throws _test_throws(DT.InsufficientPointsError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InsufficientPointsError: The provided point set has 2 points, but triangulations require at least three points.", DT.InsufficientPointsError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InsufficientPointsError) DT.check_args(points, nothing, nothing, hierarchy) + @test_throws _test_throws("InsufficientPointsError: The provided point set has 2 points, but triangulations require at least three points.", DT.InsufficientPointsError) DT.check_args(points, nothing, nothing, hierarchy) @test_throws _test_throws(DT.InsufficientPointsError) triangulate(points, predicates=rt()) end @testset "Duplicate points" begin points = [(1.0, 1.0), (2.0, 2.0), (5.5, 17.3), (1.0, 1.0), (0.0, 0.5), (1.7, 5.5), (2.0, 2.0), (2.0, 2.0), (25.5, 17.3), (5.5, 17.3)] boundary_nodes = nothing + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points) skip_points = Int[] @test_logs ( :warn, - "There were duplicate points. Only one of each duplicate will be used, and all other duplicates will be skipped. The indices of the duplicates are:\n (1.0, 1.0) at indices [1, 4]\n (2.0, 2.0) at indices [2, 7, 8]\n (5.5, 17.3) at indices [3, 10]\nTo suppress this warning, call `DelaunayTriangulation.toggle_warn_on_dupes!()`.\n") DT.check_args(points, boundary_nodes, hierarchy; skip_points) + "There were duplicate points. Only one of each duplicate will be used (the first vertex encountered in the order that follows), and all other duplicates will be skipped. The indices of the duplicates are:\n (1.0, 1.0) at indices [1, 4]\n (2.0, 2.0) at indices [2, 7, 8]\n (5.5, 17.3) at indices [3, 10]\nTo suppress this warning, call `DelaunayTriangulation.toggle_warn_on_dupes!()`.\n") DT.check_args(points, boundary_nodes, segments, hierarchy; skip_points) @test skip_points == [4, 7, 8, 10] skip_points = [13, 15] - DT.check_args(points, boundary_nodes, hierarchy; skip_points) + DT.check_args(points, boundary_nodes, segments, hierarchy; skip_points) @test skip_points == [13, 15, 4, 7, 8, 10] @test_logs ( :warn, - "There were duplicate points. Only one of each duplicate will be used, and all other duplicates will be skipped. The indices of the duplicates are:\n (1.0, 1.0) at indices [1, 4]\n (2.0, 2.0) at indices [2, 7, 8]\n (5.5, 17.3) at indices [3, 10]\nTo suppress this warning, call `DelaunayTriangulation.toggle_warn_on_dupes!()`.\n") triangulate(points, predicates=rt()) + "There were duplicate points. Only one of each duplicate will be used (the first vertex encountered in the order that follows), and all other duplicates will be skipped. The indices of the duplicates are:\n (1.0, 1.0) at indices [1, 4]\n (2.0, 2.0) at indices [2, 7, 8]\n (5.5, 17.3) at indices [3, 10]\nTo suppress this warning, call `DelaunayTriangulation.toggle_warn_on_dupes!()`.\n") triangulate(points, predicates=rt()) DT.toggle_warn_on_dupes!() - @test_nowarn DT.check_args(points, boundary_nodes, hierarchy) + @test_nowarn DT.check_args(points, boundary_nodes, segments, hierarchy) @test_nowarn triangulate(points; predicates=rt()) points = [(1.0, 1.0), (2.0, 2.0), (5.5, 17.3), (1.0, 1.0), (0.0, 0.5), (1.7, 5.5), (2.0, 2.0), (2.0, 2.0), (25.5, 17.3), (5.5, 17.3)] tri = triangulate(points; predicates=rt()) @@ -56,7 +54,7 @@ end @test !DT.has_vertex(tri, 8) @test !DT.has_vertex(tri, 10) @test DT.validate_triangulation(tri) - tri = triangulate(points; predicates=rt(), skip_points = (1,)) + tri = triangulate(points; predicates=rt(), skip_points=(1,)) @test !DT.has_vertex(tri, 1) @test !DT.has_vertex(tri, 4) @test !DT.has_vertex(tri, 7) @@ -68,92 +66,96 @@ end @testset "Orientation and connectivity of a single boundary curve" begin points = [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)] boundary_nodes = [1, 2, 3, 4, 1] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[5] = 3 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 3 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 3 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [4, 3, 2, 1, 4] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(curve).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(curve).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[1, 2, 3, 4, 1]] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[1][1] = 2 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 1 but starts at vertex 2.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 1 but starts at vertex 2.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[4, 3, 2, 1, 4]] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[[1, 2, 3, 4, 1]]] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[1][1][end] = 2 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 2 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary ends in vertex 2 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[[4, 3, 2, 1, 4]]] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) end @testset "Orientation and connectivity of a sectioned boundary curve" begin points = [(0.0, 0.0), (0.5, 0.0), (1.0, 0.0), (1.0, 1.0), (0.5, 1.0), (0.0, 1.0), (0.0, 0.5), (0.0, 0.25)] boundary_nodes = [[1, 2, 3], [3, 4], [4, 5, 6], [6, 7, 8, 1]] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[1][3] = 5 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 1 ends at vertex 5 but the next segment, segment 2, starts at vertex 3.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 1 ends at vertex 5 but the next segment, segment 2, starts at vertex 3.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes[1][3] = 3 boundary_nodes[4][4] = 2 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 4 ends at vertex 2 but the next segment, segment 1, starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 4 ends at vertex 2 but the next segment, segment 1, starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes[4][4] = 1 boundary_nodes[1][1] = 8 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 4 ends at vertex 1 but the next segment, segment 1, starts at vertex 8.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 4 ends at vertex 1 but the next segment, segment 1, starts at vertex 8.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) points = [(0.0, 0.0), (0.5, 0.0), (1.0, 0.0), (1.0, 1.0), (0.5, 1.0), (0.0, 1.0), (0.0, 0.5), (0.0, 0.25)] boundary_nodes = [[1, 8, 7, 6], [6, 5, 4], [4, 3], [3, 2, 1]] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) points = [(0.0, 0.0), (1.0, 0.0), (0.0, 1.0)] boundary_nodes = [[1, 2], [2, 3, 1]] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[1][2] = 3 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 1 ends at vertex 3 but the next segment, segment 2, starts at vertex 2.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 1 ends at vertex 3 but the next segment, segment 2, starts at vertex 2.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes[1][2] = 2 boundary_nodes[2][3] = 5 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 2 ends at vertex 5 but the next segment, segment 1, starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 2 ends at vertex 5 but the next segment, segment 1, starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[2][3] = 1 boundary_nodes[1][1] = 3 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: Segment 2 ends at vertex 1 but the next segment, segment 1, starts at vertex 3.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: Segment 2 ends at vertex 1 but the next segment, segment 1, starts at vertex 3.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) end @@ -163,33 +165,35 @@ end (0.3, 0.3), (0.7, 0.3), (0.7, 0.7), (0.3, 0.7), ] boundary_nodes = [[[1, 2, 3, 4, 5, 6, 7, 1]], [[11, 10, 9, 8, 11]]] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + @test DT.check_args(points, boundary_nodes, segments, hierarchy) boundary_nodes[1][1][end] = 8 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 1 ends in vertex 8 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 1 ends in vertex 8 but starts at vertex 1.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes[1][1][end] = 1 boundary_nodes[1][1][1] = 4 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 1 ends in vertex 1 but starts at vertex 4.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 1 ends in vertex 1 but starts at vertex 4.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes[1][1][1] = 1 boundary_nodes[2][1][end] = 5 - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 2 ends in vertex 5 but starts at vertex 11.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentConnectionError: The boundary curve with index 2 ends in vertex 5 but starts at vertex 11.", DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[[1, 7, 6, 5, 4, 3, 2, 1]], [[11, 10, 9, 8, 11]]] + segments = nothing hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) boundary_nodes = [[[1, 2, 3, 4, 5, 6, 7, 1]], [[11, 8, 9, 10, 11]]] hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 2 should be negative, but it is positive. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 2 should be negative, but it is positive. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, segments, predicates=rt()) end @testset "Orientation and connectivity of a disjoint boundary" begin @@ -352,14 +356,15 @@ end curves = [J_curve, U_curve, L_curve, I_curve, A_curve_outline, A_curve_hole, dot_1, dot_2, dot_3, dot_4] boundary_nodes, points = convert_boundary_points_to_indices(curves) hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) dot_1 = [[Z1, J2, I2, H2], [H2, G2, F2, E2, D2, C2, B2, A2, Z1]] curves = [J_curve, U_curve, L_curve, I_curve, A_curve_outline, A_curve_hole, dot_1, dot_2, dot_3, dot_4] boundary_nodes, points = convert_boundary_points_to_indices(curves) hierarchy = DT.construct_polygon_hierarchy(points, boundary_nodes) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 7 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy) + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 7 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentOrientationError) triangulate(points; boundary_nodes, predicates=rt()) end @@ -369,7 +374,8 @@ end enricher_I = DT.BoundaryEnricher(points_I, curve_I) points, boundary_nodes = get_points(enricher_I), get_boundary_nodes(enricher_I) hierarchy = DT.get_polygon_hierarchy(enricher_I) - @test DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_I)) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_I)) @test DT.check_args(enricher_I) curve_II = [[1, 2, 3, 4, 5], [5, 6, 7, 8, 9], [9, 10, 11, 1]] @@ -381,7 +387,8 @@ end enricher_II = DT.BoundaryEnricher(points_II, curve_II) points, boundary_nodes = get_points(enricher_II), get_boundary_nodes(enricher_II) hierarchy = DT.get_polygon_hierarchy(enricher_II) - @test DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_II)) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_II)) @test DT.check_args(enricher_II) curve_III = [[[1, 2, 3, 4, 5], [5, 6, 7, 8, 9], [9, 10, 11, 1]], [[15, 14, 13, 12], [12, 15]]] @@ -394,7 +401,8 @@ end enricher_III = DT.BoundaryEnricher(points_III, curve_III) points, boundary_nodes = get_points(enricher_III), get_boundary_nodes(enricher_III) hierarchy = DT.get_polygon_hierarchy(enricher_III) - @test DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_III)) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_III)) @test DT.check_args(enricher_III) curve_IV = [CircularArc((1.0, 0.0), (1.0, 0.0), (0.0, 0.0))] @@ -402,16 +410,18 @@ end enricher_IV = DT.BoundaryEnricher(points_IV, curve_IV) points, boundary_nodes = get_points(enricher_IV), get_boundary_nodes(enricher_IV) hierarchy = DT.get_polygon_hierarchy(enricher_IV) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_IV) curve_IV = [CircularArc((1.0, 0.0), (1.0, 0.0), (0.0, 0.0), positive=false)] points_IV = NTuple{2,Float64}[] enricher_IV = DT.BoundaryEnricher(points_IV, curve_IV) points, boundary_nodes = get_points(enricher_IV), get_boundary_nodes(enricher_IV) hierarchy = DT.get_polygon_hierarchy(enricher_IV) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_IV)) + segments = nothing + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_IV)) str = "If this curve is defined by an AbstractParametricCurve, you may instead need to reverse the order of the control points defining the sections of the curve; the `positive` keyword may also be of interest for CircularArcs and EllipticalArcs." - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(curve).\n$str", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_IV)) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(curve).\n$str", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_IV)) @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(enricher_IV) @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 1 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(curve).\n$str", DT.InconsistentOrientationError) DT.triangulate(NTuple{2,Float64}[]; boundary_nodes=[CircularArc((1.0, 0.0), (1.0, 0.0), (0.0, 0.0), positive=false)], predicates=rt()) @@ -420,7 +430,8 @@ end enricher_V = DT.BoundaryEnricher(points_V, curve_V) points, boundary_nodes = get_points(enricher_V), get_boundary_nodes(enricher_V) hierarchy = DT.get_polygon_hierarchy(enricher_V) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_V) curve_VI = [ @@ -432,7 +443,8 @@ end enricher_VI = DT.BoundaryEnricher(points_VI, curve_VI) points, boundary_nodes = get_points(enricher_VI), get_boundary_nodes(enricher_VI) hierarchy = DT.get_polygon_hierarchy(enricher_VI) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_VI) curve_VII = [ @@ -443,7 +455,8 @@ end enricher_VII = DT.BoundaryEnricher(points_VII, curve_VII) points, boundary_nodes = get_points(enricher_VII), get_boundary_nodes(enricher_VII) hierarchy = DT.get_polygon_hierarchy(enricher_VII) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_VII) curve_VIII = [ @@ -459,7 +472,8 @@ end enricher_VIII = DT.BoundaryEnricher(points_VIII, curve_VIII) points, boundary_nodes = get_points(enricher_VIII), get_boundary_nodes(enricher_VIII) hierarchy = DT.get_polygon_hierarchy(enricher_VIII) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_VIII) curve_IX = @@ -475,7 +489,8 @@ end enricher_IX = DT.BoundaryEnricher(points_IX, curve_IX) points, boundary_nodes = get_points(enricher_IX), get_boundary_nodes(enricher_IX) hierarchy = DT.get_polygon_hierarchy(enricher_IX) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_IX) curve_X = [ @@ -492,7 +507,8 @@ end enricher_X = DT.BoundaryEnricher(points_X, curve_X) points, boundary_nodes = get_points(enricher_X), get_boundary_nodes(enricher_X) hierarchy = DT.get_polygon_hierarchy(enricher_X) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_X) curve_XI = [ @@ -519,7 +535,8 @@ end enricher_XI = DT.BoundaryEnricher(points_XI, curve_XI) points, boundary_nodes = get_points(enricher_XI), get_boundary_nodes(enricher_XI) hierarchy = DT.get_polygon_hierarchy(enricher_XI) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_XI) curve_XI = [ [ @@ -545,7 +562,8 @@ end enricher_XI = DT.BoundaryEnricher(points_XI, curve_XI) points, boundary_nodes = get_points(enricher_XI), get_boundary_nodes(enricher_XI) hierarchy = DT.get_polygon_hierarchy(enricher_XI) - @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(points, boundary_nodes, segments, hierarchy) @test_throws _test_throws(DT.InconsistentConnectionError) DT.check_args(enricher_XI) curve_XI = [ [ @@ -573,8 +591,9 @@ end enricher_XI = DT.BoundaryEnricher(points_XI, curve_XI) points, boundary_nodes = get_points(enricher_XI), get_boundary_nodes(enricher_XI) hierarchy = DT.get_polygon_hierarchy(enricher_XI) - @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_XI)) - @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 4 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).\n$str", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, hierarchy, DT.get_boundary_curves(enricher_XI)) + segments = nothing + @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_XI)) + @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 4 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).\n$str", DT.InconsistentOrientationError) DT.check_args(points, boundary_nodes, segments, hierarchy, DT.get_boundary_curves(enricher_XI)) @test_throws _test_throws(DT.InconsistentOrientationError) DT.check_args(enricher_XI) @test_throws _test_throws("InconsistentOrientationError: The orientation of the boundary curve with index 4 should be positive, but it is negative. You may be able to fix this by passing the curve as reverse(reverse.(curve)).\n$str", DT.InconsistentOrientationError) triangulate(_points_XI; boundary_nodes=_curve_XI, predicates=rt()) @@ -594,7 +613,8 @@ end enricher_XII = DT.BoundaryEnricher(points_XII, curve_XII) points, boundary_nodes = get_points(enricher_XII), get_boundary_nodes(enricher_XII) hierarchy = DT.get_polygon_hierarchy(enricher_XII) - @test DT.check_args(points, boundary_nodes, hierarchy) + segments = nothing + @test DT.check_args(points, boundary_nodes, segments, hierarchy) @test DT.check_args(enricher_XII) end @@ -606,8 +626,22 @@ end @test DT.WARN_ON_DUPES[] end -# Issue #220: `Duplicate points not correctly handled when present in boundary_nodes` -p1 = [(118.57716599999999, 28.538463999999994), (118.814236, 27.962729999999993), (119.435126, 27.759529999999994), (120.044726, 27.962729999999993), (120.30437599999999, 28.538463999999994), (120.044726, 29.114197999999995), (119.435126, 29.317397999999994), (118.814236, 29.114197999999995), (118.57716599999999, 28.538463999999994), (118.57716599999999, 28.538463999999994)] -boundary_points = [[p1]] -boundary_nodes, points = convert_boundary_points_to_indices(boundary_points) -tri6 = triangulate(points; boundary_nodes) \ No newline at end of file +@testset "Duplicate points appearing in boundary nodes / segments" begin + points = [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)] + hierarchy = DT.construct_polygon_hierarchy(points) + boundary_nodes = [1, 2, 3, 4, 5] + segments = nothing + DT.check_args(points, boundary_nodes, segments, hierarchy) + @test boundary_nodes == [1, 2, 3, 4, 1] + boundary_nodes = [[1, 2], [2, 3], [3, 4], [4, 5]] + DT.check_args(points, boundary_nodes, segments, hierarchy) + @test boundary_nodes == [[1, 2], [2, 3], [3, 4], [4, 1]] + boundary_nodes = [[[1, 2, 3, 4, 5]]] + DT.check_args(points, boundary_nodes, segments, hierarchy) + @test boundary_nodes == [[[1, 2, 3, 4, 1]]] + boundary_nodes = [[1, 2, 3, 4, 5]] + segments = Set(((1, 2), (4, 5))) + DT.check_args(points, boundary_nodes, segments, hierarchy) + @test boundary_nodes == [[1, 2, 3, 4, 1]] + @test segments == Set(((1, 2), (4, 1))) +end \ No newline at end of file From 123c7ba91668c0a9c96ed83e9c41361c11a36126 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 19:45:03 +0100 Subject: [PATCH 3/6] PR number --- NEWS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 7dbc55560..e67ff91b0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,9 +1,9 @@ # Changelog ## 1.6.5 -- (Internal) A function `set_boundary_node!` has been added for setting a specific boundary node to another inside the provided `boundary_nodes`. -- (Internal) The `HelperFunctions` module in the tests has been reworked into its own package inside `test/HelperFunctions`. -- (Fix) Currently when checking for duplicate points, any extra points get skipped. However we did not correctly make sure those point's vertices inside `segments` or `boundary_nodes` were replaced with the first instance of the duplicate. This has been fixed. +- (Internal) A function `set_boundary_node!` has been added for setting a specific boundary node to another inside the provided `boundary_nodes`. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). +- (Internal) The `HelperFunctions` module in the tests has been reworked into its own package inside `test/HelperFunctions`. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). +- (Fix) Currently when checking for duplicate points, any extra points get skipped. However we did not correctly make sure those point's vertices inside `segments` or `boundary_nodes` were replaced with the first instance of the duplicate. This has been fixed. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). ## 1.6.4 From 61fd0c7061a7e9bc4abc0934889856fb354a23f8 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 20:23:50 +0100 Subject: [PATCH 4/6] rm manifest --- .gitignore | 1 + test/HelperFunctions/Manifest.toml | 890 ----------------------------- test/HelperFunctions/Project.toml | 17 +- 3 files changed, 2 insertions(+), 906 deletions(-) delete mode 100644 test/HelperFunctions/Manifest.toml diff --git a/.gitignore b/.gitignore index 97a3235e0..53db85423 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ LocalPreferences.toml docs/src/applications/cell_simulation.mp4 varying_weight_power.mp4 varying_weight.mp4 +test/HelperFunctions/Manifest.toml \ No newline at end of file diff --git a/test/HelperFunctions/Manifest.toml b/test/HelperFunctions/Manifest.toml deleted file mode 100644 index 3db57cc0d..000000000 --- a/test/HelperFunctions/Manifest.toml +++ /dev/null @@ -1,890 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.11.5" -manifest_format = "2.0" -project_hash = "5951027419f98f0d99b59d4ccd552e6bc866af1a" - -[[deps.ADTypes]] -git-tree-sha1 = "e2478490447631aedba0823d4d7a80b2cc8cdb32" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.14.0" - - [deps.ADTypes.extensions] - ADTypesChainRulesCoreExt = "ChainRulesCore" - ADTypesConstructionBaseExt = "ConstructionBase" - ADTypesEnzymeCoreExt = "EnzymeCore" - - [deps.ADTypes.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - -[[deps.AbstractLattices]] -git-tree-sha1 = "763b6f3f6bfabd72c7e262cbb5ddfd43fd5c6398" -uuid = "398f06c4-4d28-53ec-89ca-5b2656b7603d" -version = "0.3.1" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "f7817e2e585aa6d924fd714df1e2a84be7896c60" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.3.0" -weakdeps = ["SparseArrays", "StaticArrays"] - - [deps.Adapt.extensions] - AdaptSparseArraysExt = "SparseArrays" - AdaptStaticArraysExt = "StaticArrays" - -[[deps.AdaptivePredicates]] -git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" -uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" -version = "1.2.0" - -[[deps.AliasTables]] -deps = ["PtrArrays", "Random"] -git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" -uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" -version = "1.1.3" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.2" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "9606d7832795cbef89e06a550475be300364a8aa" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.19.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" - ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceSparseArraysExt = "SparseArrays" - 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" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" -version = "1.11.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -version = "1.11.0" - -[[deps.CRlibm]] -deps = ["CRlibm_jll"] -git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e" -uuid = "96374032-68de-5a5b-8d9e-752f78720389" -version = "1.0.2" - -[[deps.CRlibm_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" -uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" -version = "1.0.1+0" - -[[deps.Combinatorics]] -git-tree-sha1 = "8010b6bb3388abe68d95743dcbea77650bb2eddf" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.3" - -[[deps.CommonSubexpressions]] -deps = ["MacroTools"] -git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.1" - -[[deps.Compat]] -deps = ["TOML", "UUIDs"] -git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.16.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" - -[[deps.ConstructionBase]] -git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.8" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseLinearAlgebraExt = "LinearAlgebra" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.DataAPI]] -git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.16.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.22" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" - -[[deps.DelaunayTriangulation]] -deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] -path = "../.." -uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" -version = "1.6.5" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" -version = "1.9.1" - -[[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.DifferentiationInterface]] -deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "c8d85ecfcbaef899308706bebdd8b00107f3fb43" -uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.6.54" - - [deps.DifferentiationInterface.extensions] - DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" - DifferentiationInterfaceDiffractorExt = "Diffractor" - DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] - DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" - DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" - DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" - DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] - DifferentiationInterfaceGPUArraysCoreExt = "GPUArraysCore" - DifferentiationInterfaceGTPSAExt = "GTPSA" - DifferentiationInterfaceMooncakeExt = "Mooncake" - DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] - DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] - DifferentiationInterfaceSparseArraysExt = "SparseArrays" - DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" - DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" - DifferentiationInterfaceStaticArraysExt = "StaticArrays" - DifferentiationInterfaceSymbolicsExt = "Symbolics" - DifferentiationInterfaceTrackerExt = "Tracker" - DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] - - [deps.DifferentiationInterface.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" - Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" - FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" - FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" - Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" - PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" - SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -version = "1.11.0" - -[[deps.Distributions]] -deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "3e6d038b77f22791b8e3472b7c633acea1ecac06" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.120" - - [deps.Distributions.extensions] - DistributionsChainRulesCoreExt = "ChainRulesCore" - DistributionsDensityInterfaceExt = "DensityInterface" - DistributionsTestExt = "Test" - - [deps.Distributions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.DocStringExtensions]] -git-tree-sha1 = "e7b7e6f178525d17c720ab9c081e4ef04429f860" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.4" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.ElasticArrays]] -deps = ["Adapt"] -git-tree-sha1 = "75e5697f521c9ab89816d3abeea806dfc5afb967" -uuid = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" -version = "1.2.12" - -[[deps.EnumX]] -git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" -uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" -version = "1.0.5" - -[[deps.ExactPredicates]] -deps = ["IntervalArithmetic", "Random", "StaticArrays"] -git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" -uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" -version = "2.2.8" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -version = "1.11.0" - -[[deps.FillArrays]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" -weakdeps = ["PDMats", "SparseArrays", "Statistics"] - - [deps.FillArrays.extensions] - FillArraysPDMatsExt = "PDMats" - FillArraysSparseArraysExt = "SparseArrays" - FillArraysStatisticsExt = "Statistics" - -[[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "f089ab1f834470c525562030c8cfde4025d5e915" -uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.27.0" - - [deps.FiniteDiff.extensions] - FiniteDiffBandedMatricesExt = "BandedMatrices" - FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" - FiniteDiffSparseArraysExt = "SparseArrays" - FiniteDiffStaticArraysExt = "StaticArrays" - - [deps.FiniteDiff.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "910febccb28d493032495b7009dce7d7f7aee554" -uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.0.1" -weakdeps = ["StaticArrays"] - - [deps.ForwardDiff.extensions] - ForwardDiffStaticArraysExt = "StaticArrays" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -version = "1.11.0" - -[[deps.HypergeometricFunctions]] -deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" -uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.28" - -[[deps.IntegerMathUtils]] -git-tree-sha1 = "b8ffb903da9f7b8cf695a8bead8e01814aa24b30" -uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.2" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -version = "1.11.0" - -[[deps.IntervalArithmetic]] -deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Random", "RoundingEmulator"] -git-tree-sha1 = "694c52705f8b23dc5b39eeac629dc3059a168a40" -uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.22.35" - - [deps.IntervalArithmetic.extensions] - IntervalArithmeticDiffRulesExt = "DiffRules" - IntervalArithmeticForwardDiffExt = "ForwardDiff" - IntervalArithmeticIntervalSetsExt = "IntervalSets" - IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" - IntervalArithmeticRecipesBaseExt = "RecipesBase" - IntervalArithmeticSparseArraysExt = "SparseArrays" - - [deps.IntervalArithmetic.weakdeps] - DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.4" - -[[deps.IterTools]] -git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.10.0" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.0" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" -version = "1.11.0" - -[[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] -uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -version = "1.11.0" - -[[deps.Libiconv_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.18.0+0" - -[[deps.LightXML]] -deps = ["Libdl", "XML2_jll"] -git-tree-sha1 = "3a994404d3f6709610701c7dabfc03fed87a81f8" -uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" -version = "0.9.1" - -[[deps.LineSearches]] -deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "e4c3be53733db1051cc15ecf573b1042b3a712a1" -uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.3.0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" - -[[deps.LinearAlgebraX]] -deps = ["LinearAlgebra", "Mods", "Primes", "SimplePolynomials"] -git-tree-sha1 = "054fe197a75adcf517933f0c807051d79881f3f3" -uuid = "9b3f67b0-2d00-526e-9884-9e4938f8fb88" -version = "0.2.10" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.29" - - [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" -version = "1.11.0" - -[[deps.MacroTools]] -git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.16" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -version = "1.11.0" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.2.0" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" -version = "1.11.0" - -[[deps.Mods]] -git-tree-sha1 = "0a3c164857cfc4defe0ac09e6b0123d61320abb1" -uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" -version = "2.2.6" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" - -[[deps.Multisets]] -git-tree-sha1 = "8ef67bad0a3def6d77aebf1d3645119e7c8e5a54" -uuid = "3b2b4ff1-bcff-5658-a3ee-dbcf1ce5ac09" -version = "0.4.5" - -[[deps.NLSolversBase]] -deps = ["ADTypes", "DifferentiationInterface", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "b14c7be6046e7d48e9063a0053f95ee0fc954176" -uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.9.1" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.1.3" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OpenBLASConsistentFPCSR_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "567515ca155d0020a45b05175449b499c63e7015" -uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" -version = "0.3.29+0" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.5+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.6+0" - -[[deps.Optim]] -deps = ["Compat", "EnumX", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "31b3b1b8e83ef9f1d50d74f1dd5f19a37a304a1f" -uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.12.0" - - [deps.Optim.extensions] - OptimMOIExt = "MathOptInterface" - - [deps.Optim.weakdeps] - MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" - -[[deps.OrderedCollections]] -git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.8.1" - -[[deps.PDMats]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "f07c06228a1c670ae4c87d1276b92c7c597fdda0" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.35" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" - -[[deps.Permutations]] -deps = ["Combinatorics", "LinearAlgebra", "Random"] -git-tree-sha1 = "b1f03a4943c62552a12c7f95965b76c3f91cf5b7" -uuid = "2ae35dd2-176d-5d53-8349-f30d82d94d4f" -version = "0.4.23" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" - - [deps.Pkg.extensions] - REPLExt = "REPL" - - [deps.Pkg.weakdeps] - REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Polynomials]] -deps = ["LinearAlgebra", "OrderedCollections", "RecipesBase", "Requires", "Setfield", "SparseArrays"] -git-tree-sha1 = "555c272d20fc80a2658587fb9bbda60067b93b7c" -uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "4.0.19" - - [deps.Polynomials.extensions] - PolynomialsChainRulesCoreExt = "ChainRulesCore" - PolynomialsFFTWExt = "FFTW" - PolynomialsMakieCoreExt = "MakieCore" - PolynomialsMutableArithmeticsExt = "MutableArithmetics" - - [deps.Polynomials.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" - MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" - MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" - -[[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 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" - -[[deps.Primes]] -deps = ["IntegerMathUtils"] -git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" -uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" -version = "0.5.7" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" - -[[deps.PtrArrays]] -git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" -uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" -version = "1.3.0" - -[[deps.QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.11.2" - - [deps.QuadGK.extensions] - QuadGKEnzymeExt = "Enzyme" - - [deps.QuadGK.weakdeps] - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -version = "1.11.0" - -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.1" - -[[deps.RingLists]] -deps = ["Random"] -git-tree-sha1 = "70d8d52c6d4238cace6ae1a7dd2c0c4d43acdf0b" -uuid = "286e9d63-9694-5540-9e3c-4e6708fa07b2" -version = "0.2.9" - -[[deps.Rmath]] -deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.8.0" - -[[deps.Rmath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" -uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" -version = "0.5.1+0" - -[[deps.RoundingEmulator]] -git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" -uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" -version = "0.2.1" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -version = "1.11.0" - -[[deps.Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] -git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "1.1.2" - -[[deps.SimpleGraphs]] -deps = ["AbstractLattices", "Combinatorics", "DataStructures", "IterTools", "LightXML", "LinearAlgebra", "LinearAlgebraX", "Optim", "Primes", "Random", "RingLists", "SimplePartitions", "SimplePolynomials", "SimpleRandom", "SparseArrays", "Statistics"] -git-tree-sha1 = "f65caa24a622f985cc341de81d3f9744435d0d0f" -uuid = "55797a34-41de-5266-9ec1-32ac4eb504d3" -version = "0.8.6" - -[[deps.SimplePartitions]] -deps = ["AbstractLattices", "DataStructures", "Permutations"] -git-tree-sha1 = "76cdce94e07849d1172ccb8f3a60a0bbbebe58b3" -uuid = "ec83eff0-a5b5-5643-ae32-5cbf6eedec9d" -version = "0.3.3" - -[[deps.SimplePolynomials]] -deps = ["Mods", "Multisets", "Polynomials", "Primes"] -git-tree-sha1 = "77b2c5e731f7e50bbd088ccc2810232e06c1afa3" -uuid = "cc47b68c-3164-5771-a705-2bc0097375a0" -version = "0.2.18" - -[[deps.SimpleRandom]] -deps = ["Distributions", "LinearAlgebra", "Random"] -git-tree-sha1 = "bb4f42b25b87f124478207a82f5b02dfafdb3e63" -uuid = "a6525b86-64cd-54fa-8f65-62fc48bdc0e8" -version = "0.3.2" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -version = "1.11.0" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.1" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" - -[[deps.SpatialIndexing]] -git-tree-sha1 = "84efe17c77e1f2156a7a0d8a7c163c1e1c7bdaed" -uuid = "d4ead438-fe20-5cc5-a293-4fd39a41b74c" -version = "0.1.6" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.5.1" - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.StableRNGs]] -deps = ["Random"] -git-tree-sha1 = "95af145932c2ed859b63329952ce8d633719f091" -uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" -version = "1.0.3" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "0feb6b9031bd5c51f9072393eb5ab3efd31bf9e4" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.13" - - [deps.StaticArrays.extensions] - StaticArraysChainRulesCoreExt = "ChainRulesCore" - StaticArraysStatisticsExt = "Statistics" - - [deps.StaticArrays.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" - -[[deps.Statistics]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.11.1" -weakdeps = ["SparseArrays"] - - [deps.Statistics.extensions] - SparseArraysExt = ["SparseArrays"] - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.0" - -[[deps.StatsBase]] -deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "b81c5035922cc89c2d9523afc6c54be512411466" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.5" - -[[deps.StatsFuns]] -deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "8e45cecc66f3b42633b8ce14d431e8e57a3e242e" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.5.0" - - [deps.StatsFuns.extensions] - StatsFunsChainRulesCoreExt = "ChainRulesCore" - StatsFunsInverseFunctionsExt = "InverseFunctions" - - [deps.StatsFuns.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -version = "1.11.0" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -version = "1.11.0" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "b8b243e47228b4a3877f1dd6aee0c5d56db7fcf4" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.6+1" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" diff --git a/test/HelperFunctions/Project.toml b/test/HelperFunctions/Project.toml index 1afe6dd96..0e87e91e8 100644 --- a/test/HelperFunctions/Project.toml +++ b/test/HelperFunctions/Project.toml @@ -20,19 +20,4 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] -DelaunayTriangulation = {path = "../.."} - -[compat] -DataStructures = "0.18.22" -DelimitedFiles = "1.9.1" -Distributions = "0.25.120" -ElasticArrays = "1.2.12" -InteractiveUtils = "1.11.0" -LinearAlgebra = "1.11.0" -OrderedCollections = "1.8.1" -Random = "1.11.0" -SimpleGraphs = "0.8.6" -SpatialIndexing = "0.1.6" -StableRNGs = "1.0.3" -StaticArrays = "1.9.13" -Test = "1.11.0" +DelaunayTriangulation = {path = "../.."} \ No newline at end of file From 0560d635a5d32704dd9600e3905ba9c1cb23c42e Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 20:36:50 +0100 Subject: [PATCH 5/6] Try again --- test/HelperFunctions/Project.toml | 5 +---- test/Project.toml | 5 ----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/test/HelperFunctions/Project.toml b/test/HelperFunctions/Project.toml index 0e87e91e8..698ffbbfc 100644 --- a/test/HelperFunctions/Project.toml +++ b/test/HelperFunctions/Project.toml @@ -17,7 +17,4 @@ SimpleGraphs = "55797a34-41de-5266-9ec1-32ac4eb504d3" SpatialIndexing = "d4ead438-fe20-5cc5-a293-4fd39a41b74c" StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[sources] -DelaunayTriangulation = {path = "../.."} \ No newline at end of file +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" \ No newline at end of file diff --git a/test/Project.toml b/test/Project.toml index 1888d6e0f..6c4fa586a 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -6,7 +6,6 @@ CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" -DelaunayTriangulation = "927a84f5-c5f4-47a5-9785-b46e178433df" DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" @@ -36,9 +35,5 @@ StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" StructEquality = "6ec83bb0-ed9f-11e9-3b4c-2b04cb4e219c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -[sources] -DelaunayTriangulation = {path = ".."} -HelperFunctions = {path = "HelperFunctions"} - [compat] Aqua = "0.8.7" From 9f1d4e665586735f4955eb0d6e843d63f427b415 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 23 May 2025 20:46:24 +0100 Subject: [PATCH 6/6] Put back into its own file --- .gitignore | 1 - NEWS.md | 1 - test/HelperFunctions/Project.toml | 20 ------------------- test/Project.toml | 5 ++++- ...HelperFunctions.jl => helper_functions.jl} | 1 + test/runtests.jl | 5 +++-- 6 files changed, 8 insertions(+), 25 deletions(-) delete mode 100644 test/HelperFunctions/Project.toml rename test/{HelperFunctions/src/HelperFunctions.jl => helper_functions.jl} (99%) diff --git a/.gitignore b/.gitignore index 53db85423..97a3235e0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,3 @@ LocalPreferences.toml docs/src/applications/cell_simulation.mp4 varying_weight_power.mp4 varying_weight.mp4 -test/HelperFunctions/Manifest.toml \ No newline at end of file diff --git a/NEWS.md b/NEWS.md index e67ff91b0..ce374e7bd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,6 @@ ## 1.6.5 - (Internal) A function `set_boundary_node!` has been added for setting a specific boundary node to another inside the provided `boundary_nodes`. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). -- (Internal) The `HelperFunctions` module in the tests has been reworked into its own package inside `test/HelperFunctions`. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). - (Fix) Currently when checking for duplicate points, any extra points get skipped. However we did not correctly make sure those point's vertices inside `segments` or `boundary_nodes` were replaced with the first instance of the duplicate. This has been fixed. See [#224](https://github.com/JuliaGeometry/DelaunayTriangulation.jl/pull/224). ## 1.6.4 diff --git a/test/HelperFunctions/Project.toml b/test/HelperFunctions/Project.toml deleted file mode 100644 index 698ffbbfc..000000000 --- a/test/HelperFunctions/Project.toml +++ /dev/null @@ -1,20 +0,0 @@ -name = "HelperFunctions" -uuid = "b09acb3e-6af7-4d5d-85ff-dca8b45bb116" -authors = ["Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com>"] -version = "0.1.0" - -[deps] -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -DelaunayTriangulation = "927a84f5-c5f4-47a5-9785-b46e178433df" -DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" -Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -ElasticArrays = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" -InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -SimpleGraphs = "55797a34-41de-5266-9ec1-32ac4eb504d3" -SpatialIndexing = "d4ead438-fe20-5cc5-a293-4fd39a41b74c" -StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" -StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" \ No newline at end of file diff --git a/test/Project.toml b/test/Project.toml index 6c4fa586a..1c2d80d8b 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -6,6 +6,7 @@ CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" +DelaunayTriangulation = "927a84f5-c5f4-47a5-9785-b46e178433df" DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" @@ -16,7 +17,6 @@ ExactPredicates = "429591f6-91af-11e9-00e2-59fbe8cec110" FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -HelperFunctions = "b09acb3e-6af7-4d5d-85ff-dca8b45bb116" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" @@ -37,3 +37,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] Aqua = "0.8.7" + +[sources] +DelaunayTriangulation = {path = ".."} \ No newline at end of file diff --git a/test/HelperFunctions/src/HelperFunctions.jl b/test/helper_functions.jl similarity index 99% rename from test/HelperFunctions/src/HelperFunctions.jl rename to test/helper_functions.jl index abbe9994a..8bd18a401 100644 --- a/test/HelperFunctions/src/HelperFunctions.jl +++ b/test/helper_functions.jl @@ -10,6 +10,7 @@ using OrderedCollections using Distributions using InteractiveUtils using Test + using DelaunayTriangulation import SpatialIndexing as SI getxy((0.0, 0.0)) # avoid shadow diff --git a/test/runtests.jl b/test/runtests.jl index 0218549fe..be0bce873 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -5,8 +5,9 @@ using Test using Random const ALL_TEST_SCRIPTS = Set{String}() -const NON_TEST_SCRIPTS = Set{String}(["runtests.jl"]) -using HelperFunctions +const NON_TEST_SCRIPTS = Set{String}(["helper_functions.jl", "runtests.jl"]) +include("helper_functions.jl") +using .HelperFunctions ct() = Dates.format(now(), "HH:MM:SS") function safe_include(filename; name=filename, push=true, verbose=true) # Workaround for not being able to interpolate into SafeTestset test names