46 Commits

Author SHA1 Message Date
ton c51dfc549c Merge pull request 'up version' (#10) from v0.5.0-add_llmutils into v0.5.0
Reviewed-on: #10
2026-07-15 04:22:51 +00:00
ton f0ad6a3e48 up version 2026-07-15 11:22:24 +07:00
ton c829bf65f6 Merge pull request 'v0.5.0-add_llmutils' (#8) from v0.5.0-add_llmutils into v0.5.0
Reviewed-on: #8
2026-07-15 04:20:13 +00:00
ton b09efc9068 update 2026-07-15 11:16:30 +07:00
ton 6fb2d5f82b update 2026-07-15 08:29:21 +07:00
ton 55cc0f78c9 update 2026-07-15 07:49:21 +07:00
ton 73ec3bbb04 update 2026-07-15 07:19:01 +07:00
ton 1ad46c6e18 update 2026-07-15 07:11:09 +07:00
ton 95954249ce update 2026-07-14 18:13:31 +07:00
ton a15630619a update 2026-07-14 13:00:39 +07:00
ton f28405f3f1 update 2026-07-13 21:23:21 +07:00
ton d658d9a25b update 2026-07-13 21:22:38 +07:00
ton edad442242 update 2026-07-13 21:06:09 +07:00
ton c56fc7366c update 2026-07-13 10:24:29 +07:00
ton c4eeb99aba update 2026-07-12 10:48:01 +07:00
ton bd5022c8bc update compat 2026-07-05 17:37:41 +07:00
ton db84b1c398 update 2026-07-05 07:05:11 +07:00
ton f8f8410259 fix clean json 2026-07-04 09:09:56 +07:00
ton 956adf0b93 update 2026-07-03 20:54:16 +07:00
ton 0f2a33bcdd update 2026-07-03 20:30:24 +07:00
ton b8f84846bb update 2026-07-03 18:33:45 +07:00
ton adf6264061 fix dictify 2026-07-03 18:32:41 +07:00
ton 08f19f17a2 fix clean json response 2026-07-03 12:24:40 +07:00
ton 8a4e882dc1 add new func() 2026-06-30 22:02:17 +07:00
ton fb7942a965 add new function 2026-06-30 21:02:25 +07:00
ton e54454b099 update 2026-06-27 17:16:21 +07:00
ton dac98ab38c update 2026-06-27 17:15:36 +07:00
ton 1e8149aa6f update 2026-06-27 17:09:27 +07:00
ton 8f12c29a78 update 2026-06-27 16:53:55 +07:00
ton e3d09e6ebd update docs 2026-06-27 16:00:31 +07:00
ton f33f4f0790 up version 2026-06-24 12:55:40 +07:00
ton fcf2044dd9 Merge pull request 'update' (#7) from v0.4.0-dictify_key into main
Reviewed-on: #7
2026-06-24 05:33:31 +00:00
ton 05d8cb9c02 update 2026-06-24 12:29:01 +07:00
ton 13de2f90ff update 2026-06-07 17:22:24 +07:00
ton 22fe810f63 update 2026-06-07 17:20:52 +07:00
ton abdf6cf3b8 Merge pull request 'update' (#6) from add_generateupdateSQL into main
Reviewed-on: #6
2026-06-07 09:32:41 +00:00
ton f2ba243df0 update 2026-06-07 16:27:08 +07:00
ton bb2851332a Merge pull request 'update' (#5) from add_generateupdateSQL into main
Reviewed-on: #5
2026-06-07 09:20:55 +00:00
ton 00225f3a06 update 2026-06-07 16:16:52 +07:00
ton 7cb0bd077f Merge pull request 'update' (#4) from add_generateupdateSQL into main
Reviewed-on: #4
2026-06-07 09:04:33 +00:00
ton 0ba2aa310e update 2026-06-07 15:32:49 +07:00
ton 1916668c6e Merge pull request 'add_generateupdateSQL' (#3) from add_generateupdateSQL into main
Reviewed-on: #3
2026-06-07 06:57:28 +00:00
ton 919800da42 add generateUpdateSQL 2026-06-07 13:56:07 +07:00
ton 947580a2ec update 2026-06-07 13:46:04 +07:00
ton 688b9a22b6 add generateUpdateSQL 2026-06-07 13:43:47 +07:00
ton 76ce0fc54f Merge pull request 'usability' (#2) from usability into main
Reviewed-on: #2
2026-05-29 04:17:51 +00:00
8 changed files with 2008 additions and 728 deletions
+452 -93
View File
@@ -1,8 +1,32 @@
# This file is machine-generated - editing it directly is not advised # This file is machine-generated - editing it directly is not advised
julia_version = "1.12.5" julia_version = "1.12.6"
manifest_format = "2.0" manifest_format = "2.0"
project_hash = "d50b7edf21ea6bb3104189be326e8a78a00fd426" project_hash = "a1c572efdd97cec1f432040f02784b67635102aa"
[[deps.Accessors]]
deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"]
git-tree-sha1 = "7063ad1083578215c7c4bf410368150abe8d5524"
uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
version = "0.1.45"
[deps.Accessors.extensions]
AxisKeysExt = "AxisKeys"
IntervalSetsExt = "IntervalSets"
LinearAlgebraExt = "LinearAlgebra"
StaticArraysExt = "StaticArrays"
StructArraysExt = "StructArrays"
TestExt = "Test"
UnitfulExt = "Unitful"
[deps.Accessors.weakdeps]
AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5"
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
[[deps.AliasTables]] [[deps.AliasTables]]
deps = ["PtrArrays", "Random"] deps = ["PtrArrays", "Random"]
@@ -10,6 +34,22 @@ git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff"
uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8"
version = "1.1.3" version = "1.1.3"
[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
version = "1.1.2"
[[deps.ArnoldiMethod]]
deps = ["LinearAlgebra", "Random", "StaticArrays"]
git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6"
uuid = "ec485272-7323-5ecc-a04f-4719b315124d"
version = "0.4.0"
[[deps.ArrowTypes]]
deps = ["Sockets", "UUIDs"]
git-tree-sha1 = "404265cd8128a2515a81d5eae16de90fdef05101"
uuid = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
version = "2.3.0"
[[deps.Artifacts]] [[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
version = "1.11.0" version = "1.11.0"
@@ -23,6 +63,15 @@ git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643"
uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d"
version = "1.2.2" version = "1.2.2"
[[deps.CEnum]]
git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc"
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
version = "0.5.0"
[[deps.CRC32c]]
uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc"
version = "1.11.0"
[[deps.CSV]] [[deps.CSV]]
deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"]
git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d"
@@ -30,10 +79,10 @@ uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
version = "0.10.16" version = "0.10.16"
[[deps.CodeTracking]] [[deps.CodeTracking]]
deps = ["InteractiveUtils", "UUIDs"] deps = ["InteractiveUtils", "REPL", "UUIDs"]
git-tree-sha1 = "b7231a755812695b8046e8471ddc34c8268cbad5" git-tree-sha1 = "cfb7a2e89e245a9d5016b70323db412b3a7438d5"
uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2"
version = "3.0.0" version = "3.0.2"
[[deps.CodecBase]] [[deps.CodecBase]]
deps = ["TranscodingStreams"] deps = ["TranscodingStreams"]
@@ -47,6 +96,11 @@ git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193" uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.8" version = "0.7.8"
[[deps.CommonSolve]]
git-tree-sha1 = "eeaad7cef88554c2fa56b5a3f71cfd5cb708c662"
uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2"
version = "0.2.11"
[[deps.Compat]] [[deps.Compat]]
deps = ["TOML", "UUIDs"] deps = ["TOML", "UUIDs"]
git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad"
@@ -67,11 +121,40 @@ deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.3.0+1" version = "1.3.0+1"
[[deps.CompositionsBase]]
git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
version = "0.1.2"
weakdeps = ["InverseFunctions"]
[deps.CompositionsBase.extensions]
CompositionsBaseInverseFunctionsExt = "InverseFunctions"
[[deps.ConstructionBase]]
git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb"
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
version = "1.6.0"
[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.Crayons]] [[deps.Crayons]]
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
version = "4.1.1" version = "4.1.1"
[[deps.DBInterface]]
git-tree-sha1 = "a444404b3f94deaa43ca2a58e18153a82695282b"
uuid = "a10d1c49-ce27-4219-8d33-6db1a4562965"
version = "2.6.1"
[[deps.DataAPI]] [[deps.DataAPI]]
git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
@@ -79,15 +162,15 @@ version = "1.16.0"
[[deps.DataFrames]] [[deps.DataFrames]]
deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" git-tree-sha1 = "5fab31e2e01e70ad66e3e24c968c264d1cf166d6"
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
version = "1.8.1" version = "1.8.2"
[[deps.DataStructures]] [[deps.DataStructures]]
deps = ["OrderedCollections"] deps = ["OrderedCollections"]
git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" git-tree-sha1 = "6fb53a69613a0b2b68a0d12671717d307ab8b24e"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.19.3" version = "0.19.5"
[[deps.DataValueInterfaces]] [[deps.DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
@@ -99,20 +182,46 @@ deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
version = "1.11.0" version = "1.11.0"
[[deps.Decimals]]
git-tree-sha1 = "e98abef36d02a0ec385d68cd7dadbce9b28cbd88"
uuid = "abce61dc-4473-55a0-ba07-351d65e31d42"
version = "0.4.1"
[[deps.Distances]]
deps = ["LinearAlgebra", "Statistics", "StatsAPI"]
git-tree-sha1 = "c7e3a542b999843086e2f29dac96a618c105be1d"
uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
version = "0.10.12"
[deps.Distances.extensions]
DistancesChainRulesCoreExt = "ChainRulesCore"
DistancesSparseArraysExt = "SparseArrays"
[deps.Distances.weakdeps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
[[deps.Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
version = "1.11.0"
[[deps.Distributions]] [[deps.Distributions]]
deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "Roots", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"]
git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" git-tree-sha1 = "cd3c5ac74cd3923c8945c6a81518c46abd0e73a3"
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
version = "0.25.123" version = "0.25.129"
[deps.Distributions.extensions] [deps.Distributions.extensions]
DistributionsChainRulesCoreExt = "ChainRulesCore" DistributionsChainRulesCoreExt = "ChainRulesCore"
DistributionsDensityInterfaceExt = "DensityInterface" DistributionsDensityInterfaceExt = "DensityInterface"
DistributionsSparseConnectivityTracerExt = "SparseConnectivityTracer"
DistributionsTestExt = "Test" DistributionsTestExt = "Test"
[deps.Distributions.weakdeps] [deps.Distributions.weakdeps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[deps.DocStringExtensions]] [[deps.DocStringExtensions]]
@@ -120,20 +229,32 @@ git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.9.5" version = "0.9.5"
[[deps.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.7.0"
[[deps.EnumX]]
git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c"
uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
version = "1.0.7"
[[deps.ExprTools]]
git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec"
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
version = "0.1.10"
[[deps.FilePathsBase]] [[deps.FilePathsBase]]
deps = ["Compat", "Dates"] deps = ["Compat", "Dates"]
git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2"
uuid = "48062228-2e41-5def-b9a4-89aafe57970f" uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
version = "0.9.24" version = "0.9.24"
weakdeps = ["Mmap", "Test"]
[deps.FilePathsBase.extensions] [deps.FilePathsBase.extensions]
FilePathsBaseMmapExt = "Mmap" FilePathsBaseMmapExt = "Mmap"
FilePathsBaseTestExt = "Test" FilePathsBaseTestExt = "Test"
[deps.FilePathsBase.weakdeps]
Mmap = "a63ad114-7e13-5084-954f-fe012c677804"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[deps.FileWatching]] [[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
version = "1.11.0" version = "1.11.0"
@@ -143,6 +264,7 @@ deps = ["LinearAlgebra"]
git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3"
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
version = "1.16.0" version = "1.16.0"
weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"]
[deps.FillArrays.extensions] [deps.FillArrays.extensions]
FillArraysPDMatsExt = "PDMats" FillArraysPDMatsExt = "PDMats"
@@ -150,22 +272,40 @@ version = "1.16.0"
FillArraysStaticArraysExt = "StaticArrays" FillArraysStaticArraysExt = "StaticArrays"
FillArraysStatisticsExt = "Statistics" FillArraysStatisticsExt = "Statistics"
[deps.FillArrays.weakdeps]
PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
[[deps.Future]] [[deps.Future]]
deps = ["Random"] deps = ["Random"]
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
version = "1.11.0" version = "1.11.0"
[[deps.Gamma]]
git-tree-sha1 = "86f86b6168a016ed88e4ae4e64577b98c3b59e8e"
uuid = "a0844989-3bd2-4988-8bea-c9407ab0941b"
version = "1.1.0"
[[deps.GeneralUtils]] [[deps.GeneralUtils]]
deps = ["CSV", "DataFrames", "DataStructures", "Dates", "Distributions", "JSON", "NATS", "PrettyPrinting", "Random", "SHA", "UUIDs"] deps = ["CSV", "DataFrames", "DataStructures", "Dates", "Distributions", "Graphs", "HTTP", "JSON", "LibPQ", "NATS", "PrettyPrinting", "Random", "Revise", "SHA", "StringDistances", "UUIDs"]
path = "." path = "."
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe" uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
version = "0.3.1" version = "0.4.10"
[[deps.Graphs]]
deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", "SimpleTraits", "SparseArrays", "Statistics"]
git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3"
uuid = "86223c79-3864-5bf0-83f7-82e725a168b6"
version = "1.14.0"
[deps.Graphs.extensions]
GraphsSharedArraysExt = "SharedArrays"
[deps.Graphs.weakdeps]
Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b"
SharedArrays = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
[[deps.HTTP]]
deps = ["Base64", "CodecZlib", "Dates", "EnumX", "PrecompileTools", "Random", "Reseau", "SHA", "URIs", "UUIDs", "Zlib_jll"]
git-tree-sha1 = "c2c808326222b6dc4bec295a83b55f79aeec98e0"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "2.5.5"
[[deps.HashArrayMappedTries]] [[deps.HashArrayMappedTries]]
git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae"
@@ -173,29 +313,59 @@ uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74"
version = "0.2.0" version = "0.2.0"
[[deps.HypergeometricFunctions]] [[deps.HypergeometricFunctions]]
deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] deps = ["Gamma", "LinearAlgebra"]
git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" git-tree-sha1 = "18d7deab5fb0440dc6a7b6993c5c27b25420de10"
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
version = "0.3.28" version = "0.3.29"
[[deps.ICU_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "b3d8be712fbf9237935bde0ce9b5a736ae38fc34"
uuid = "a51ab1cf-af8e-5615-a023-bc2c838bba6b"
version = "76.2.0+0"
[[deps.Infinity]]
deps = ["Dates", "Random", "Requires"]
git-tree-sha1 = "cf8234411cbeb98676c173f930951ea29dca3b23"
uuid = "a303e19e-6eb4-11e9-3b09-cd9505f79100"
version = "0.2.4"
[[deps.Inflate]]
git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d"
uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
version = "0.1.5"
[[deps.InlineStrings]] [[deps.InlineStrings]]
git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d"
uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
version = "1.4.5" version = "1.4.5"
weakdeps = ["ArrowTypes", "Parsers"]
[deps.InlineStrings.extensions] [deps.InlineStrings.extensions]
ArrowTypesExt = "ArrowTypes" ArrowTypesExt = "ArrowTypes"
ParsersExt = "Parsers" ParsersExt = "Parsers"
[deps.InlineStrings.weakdeps]
ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
[[deps.InteractiveUtils]] [[deps.InteractiveUtils]]
deps = ["Markdown"] deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
version = "1.11.0" version = "1.11.0"
[[deps.Intervals]]
deps = ["ArrowTypes", "Dates", "Printf", "RecipesBase", "Serialization", "TimeZones"]
git-tree-sha1 = "d6fe00b123e32ddd17231b35d69a6394e696fd5a"
uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5"
version = "1.11.0"
[[deps.InverseFunctions]]
git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.17"
weakdeps = ["Dates", "Test"]
[deps.InverseFunctions.extensions]
InverseFunctionsDatesExt = "Dates"
InverseFunctionsTestExt = "Test"
[[deps.InvertedIndices]] [[deps.InvertedIndices]]
git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe"
uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
@@ -206,6 +376,11 @@ git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758"
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
version = "0.2.6" version = "0.2.6"
[[deps.IterTools]]
git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023"
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
version = "1.10.0"
[[deps.IteratorInterfaceExtensions]] [[deps.IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d" uuid = "82899510-4779-5014-852e-03e436cf321d"
@@ -213,50 +388,67 @@ version = "1.0.0"
[[deps.JLLWrappers]] [[deps.JLLWrappers]]
deps = ["Artifacts", "Preferences"] deps = ["Artifacts", "Preferences"]
git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" git-tree-sha1 = "7204148362dafe5fe6a273f855b8ccbe4df8173e"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.7.1" version = "1.8.0"
[[deps.JSON]] [[deps.JSON]]
deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"]
git-tree-sha1 = "b3ad4a0255688dcb895a52fafbaae3023b588a90" git-tree-sha1 = "c89d196f5ffb64bfbf80985b699ea913b0d2c211"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "1.4.0" version = "1.6.1"
weakdeps = ["ArrowTypes"]
[deps.JSON.extensions] [deps.JSON.extensions]
JSONArrowExt = ["ArrowTypes"] JSONArrowExt = ["ArrowTypes"]
[deps.JSON.weakdeps]
ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
[[deps.JSON3]] [[deps.JSON3]]
deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"]
git-tree-sha1 = "411eccfe8aba0814ffa0fdf4860913ed09c34975" git-tree-sha1 = "411eccfe8aba0814ffa0fdf4860913ed09c34975"
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
version = "1.14.3" version = "1.14.3"
weakdeps = ["ArrowTypes"]
[deps.JSON3.extensions] [deps.JSON3.extensions]
JSON3ArrowExt = ["ArrowTypes"] JSON3ArrowExt = ["ArrowTypes"]
[deps.JSON3.weakdeps]
ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
[[deps.JuliaInterpreter]] [[deps.JuliaInterpreter]]
deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"]
git-tree-sha1 = "80580012d4ed5a3e8b18c7cd86cebe4b816d17a6" git-tree-sha1 = "58927c485919bf17ea308d9d82156de1adf4b006"
uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a"
version = "0.10.9" version = "0.10.12"
[[deps.JuliaSyntaxHighlighting]] [[deps.JuliaSyntaxHighlighting]]
deps = ["StyledStrings"] deps = ["StyledStrings"]
uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011"
version = "1.12.0" version = "1.12.0"
[[deps.Kerberos_krb5_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "0f2899fdadaab4b8f57db558ba21bdb4fb52f1f0"
uuid = "b39eb1a6-c29a-53d7-8c32-632cd16f18da"
version = "1.21.3+0"
[[deps.LaTeXStrings]] [[deps.LaTeXStrings]]
git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.4.0" version = "1.4.0"
[[deps.LayerDicts]]
git-tree-sha1 = "6087ad3521d6278ebe5c27ae55e7bbb15ca312cb"
uuid = "6f188dcb-512c-564b-bc01-e0f76e72f166"
version = "1.0.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", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
version = "8.15.0+0"
[[deps.LibGit2]] [[deps.LibGit2]]
deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
@@ -267,6 +459,18 @@ deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"]
uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
version = "1.9.0+0" version = "1.9.0+0"
[[deps.LibPQ]]
deps = ["CEnum", "DBInterface", "Dates", "Decimals", "DocStringExtensions", "FileWatching", "Infinity", "Intervals", "IterTools", "LayerDicts", "LibPQ_jll", "Libdl", "Memento", "OffsetArrays", "SQLStrings", "Tables", "TimeZones", "UTCDateTimes"]
git-tree-sha1 = "3d227cd13cbf1e9a54d7748dab33e078da6f9168"
uuid = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
version = "1.18.0"
[[deps.LibPQ_jll]]
deps = ["Artifacts", "ICU_jll", "JLLWrappers", "Kerberos_krb5_jll", "Libdl", "OpenSSL_jll", "Zstd_jll"]
git-tree-sha1 = "c692057e05ba6da348bc45d5dab8c7a2c88da518"
uuid = "08be9ffa-1c94-5ee5-a977-46a84ec9b350"
version = "16.14.0+0"
[[deps.LibSSH2_jll]] [[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "OpenSSL_jll"] deps = ["Artifacts", "Libdl", "OpenSSL_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
@@ -283,9 +487,9 @@ version = "1.12.0"
[[deps.LogExpFunctions]] [[deps.LogExpFunctions]]
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" git-tree-sha1 = "bba2d9aa057d8f126415de240573e86a8f39d2a1"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.3.29" version = "1.0.1"
[deps.LogExpFunctions.extensions] [deps.LogExpFunctions.extensions]
LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
@@ -303,9 +507,14 @@ version = "1.11.0"
[[deps.LoweredCodeUtils]] [[deps.LoweredCodeUtils]]
deps = ["CodeTracking", "Compiler", "JuliaInterpreter"] deps = ["CodeTracking", "Compiler", "JuliaInterpreter"]
git-tree-sha1 = "65ae3db6ab0e5b1b5f217043c558d9d1d33cc88d" git-tree-sha1 = "3733419e9a71156b389f3e331672d2e95436783f"
uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b"
version = "3.5.0" version = "3.6.2"
[[deps.MacroTools]]
git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.16"
[[deps.Markdown]] [[deps.Markdown]]
deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"]
@@ -314,9 +523,9 @@ version = "1.11.0"
[[deps.MbedTLS]] [[deps.MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"]
git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" git-tree-sha1 = "8785729fa736197687541f7053f6d8ab7fc44f92"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d" uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.1.9" version = "1.1.10"
[[deps.MbedTLS_jll]] [[deps.MbedTLS_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"] deps = ["Artifacts", "JLLWrappers", "Libdl"]
@@ -324,6 +533,12 @@ git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8"
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.28.1010+0" version = "2.28.1010+0"
[[deps.Memento]]
deps = ["Dates", "Distributed", "Requires", "Serialization", "Sockets", "Test", "UUIDs"]
git-tree-sha1 = "e03a25cb3b6569623f8246d3d8b3faa7ce86f4ad"
uuid = "f28f55f0-a522-5efc-85c2-fe41dfb9b2d9"
version = "1.5.0"
[[deps.Missings]] [[deps.Missings]]
deps = ["DataAPI"] deps = ["DataAPI"]
git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
@@ -334,15 +549,21 @@ version = "1.2.0"
uuid = "a63ad114-7e13-5084-954f-fe012c677804" uuid = "a63ad114-7e13-5084-954f-fe012c677804"
version = "1.11.0" version = "1.11.0"
[[deps.Mocking]]
deps = ["Compat", "ExprTools"]
git-tree-sha1 = "2c140d60d7cb82badf06d8783800d0bcd1a7daa2"
uuid = "78c3b35d-d492-501b-9361-3d52fe80e533"
version = "0.8.1"
[[deps.MozillaCACerts_jll]] [[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159" uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
version = "2025.11.4" version = "2025.11.4"
[[deps.NATS]] [[deps.NATS]]
deps = ["Base64", "BufferedStreams", "CodecBase", "Dates", "DocStringExtensions", "JSON3", "MbedTLS", "NanoDates", "Random", "ScopedValues", "Sockets", "Sodium", "StructTypes", "URIs"] deps = ["Base64", "BufferedStreams", "CodecBase", "Dates", "DocStringExtensions", "JSON3", "MbedTLS", "NanoDates", "Random", "ScopedValues", "Sockets", "Sodium", "StructTypes", "URIs"]
git-tree-sha1 = "d9d9a189fb9155a460e6b5e8966bf6a66737abf8" git-tree-sha1 = "a1cdf34ba90ee5cd2658e487d3277ffafee712ce"
uuid = "55e73f9c-eeeb-467f-b4cc-a633fde63d2a" uuid = "55e73f9c-eeeb-467f-b4cc-a633fde63d2a"
version = "0.1.0" version = "0.1.1"
[[deps.NanoDates]] [[deps.NanoDates]]
deps = ["Dates", "Parsers"] deps = ["Dates", "Parsers"]
@@ -354,6 +575,17 @@ version = "1.0.3"
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.3.0" version = "1.3.0"
[[deps.OffsetArrays]]
git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151"
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
version = "1.17.0"
[deps.OffsetArrays.extensions]
OffsetArraysAdaptExt = "Adapt"
[deps.OffsetArrays.weakdeps]
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
[[deps.OpenBLAS_jll]] [[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
@@ -376,15 +608,15 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.6+0" version = "0.5.6+0"
[[deps.OrderedCollections]] [[deps.OrderedCollections]]
git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" git-tree-sha1 = "94ba93778373a53bfd5a0caaf7d809c445292ff4"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.8.1" version = "1.8.2"
[[deps.PDMats]] [[deps.PDMats]]
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" git-tree-sha1 = "26766d4b5f1a410c218a19b85a672c6edb693c65"
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
version = "0.11.37" version = "0.11.40"
weakdeps = ["StatsBase"] weakdeps = ["StatsBase"]
[deps.PDMats.extensions] [deps.PDMats.extensions]
@@ -392,9 +624,9 @@ weakdeps = ["StatsBase"]
[[deps.Parsers]] [[deps.Parsers]]
deps = ["Dates", "PrecompileTools", "UUIDs"] deps = ["Dates", "PrecompileTools", "UUIDs"]
git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810" git-tree-sha1 = "32a4e09c5f29402573d673901778a0e03b0807b9"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.8.3" version = "2.8.6"
[[deps.PooledArrays]] [[deps.PooledArrays]]
deps = ["DataAPI", "Future"] deps = ["DataAPI", "Future"]
@@ -404,15 +636,15 @@ version = "1.4.3"
[[deps.PrecompileTools]] [[deps.PrecompileTools]]
deps = ["Preferences"] deps = ["Preferences"]
git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" git-tree-sha1 = "edbeefc7a4889f528644251bdb5fc9ab5348bc2c"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.3.3" version = "1.3.4"
[[deps.Preferences]] [[deps.Preferences]]
deps = ["TOML"] deps = ["TOML"]
git-tree-sha1 = "522f093a29b31a93e34eaea17ba055d850edea28" git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4"
uuid = "21216c6a-2e73-6563-6e65-726566657250" uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.5.1" version = "1.5.2"
[[deps.PrettyPrinting]] [[deps.PrettyPrinting]]
git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e"
@@ -421,15 +653,17 @@ version = "0.4.2"
[[deps.PrettyTables]] [[deps.PrettyTables]]
deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"]
git-tree-sha1 = "211530a7dc76ab59087f4d4d1fc3f086fbe87594" git-tree-sha1 = "ebf455bb866ee6737030e3d3816bb6a0683c4325"
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
version = "3.2.3" version = "3.4.0"
[deps.PrettyTables.extensions] [deps.PrettyTables.extensions]
PrettyTablesExcelExt = "XLSX"
PrettyTablesTypstryExt = "Typstry" PrettyTablesTypstryExt = "Typstry"
[deps.PrettyTables.weakdeps] [deps.PrettyTables.weakdeps]
Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e"
XLSX = "fdbf4ff8-1666-58a4-91e7-1b58723a45e0"
[[deps.Printf]] [[deps.Printf]]
deps = ["Unicode"] deps = ["Unicode"]
@@ -437,15 +671,15 @@ uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
version = "1.11.0" version = "1.11.0"
[[deps.PtrArrays]] [[deps.PtrArrays]]
git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe"
uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d"
version = "1.3.0" version = "1.4.0"
[[deps.QuadGK]] [[deps.QuadGK]]
deps = ["DataStructures", "LinearAlgebra"] deps = ["DataStructures", "LinearAlgebra"]
git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e"
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
version = "2.11.2" version = "2.11.3"
[deps.QuadGK.extensions] [deps.QuadGK.extensions]
QuadGKEnzymeExt = "Enzyme" QuadGKEnzymeExt = "Enzyme"
@@ -463,23 +697,39 @@ deps = ["SHA"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
version = "1.11.0" version = "1.11.0"
[[deps.RecipesBase]]
deps = ["PrecompileTools"]
git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff"
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
version = "1.3.4"
[[deps.Reexport]] [[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69" uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2" version = "1.2.2"
[[deps.Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.3.1"
[[deps.Reseau]]
deps = ["NetworkOptions", "OpenSSL_jll", "PrecompileTools", "Random", "SHA"]
git-tree-sha1 = "0eab6d95ed40c2ef3992255c1c71e4f9748932b5"
uuid = "802f3686-a58f-41ce-bb0c-3c43c75bba36"
version = "1.3.1"
[[deps.Revise]] [[deps.Revise]]
deps = ["CodeTracking", "FileWatching", "InteractiveUtils", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Preferences", "REPL", "UUIDs"] deps = ["CRC32c", "CodeTracking", "FileWatching", "InteractiveUtils", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Preferences", "REPL", "UUIDs"]
git-tree-sha1 = "14d1bfb0a30317edc77e11094607ace3c800f193" git-tree-sha1 = "27e3ee13fc8739a59b380d6163d6a82f52c03bd7"
uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe"
version = "3.13.2" version = "3.15.1"
weakdeps = ["Distributed"]
[deps.Revise.extensions] [deps.Revise.extensions]
DistributedExt = "Distributed" DistributedExt = "Distributed"
[deps.Revise.weakdeps]
Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b"
[[deps.Rmath]] [[deps.Rmath]]
deps = ["Random", "Rmath_jll"] deps = ["Random", "Rmath_jll"]
git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b"
@@ -492,26 +742,65 @@ git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8"
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
version = "0.5.1+0" version = "0.5.1+0"
[[deps.Roots]]
deps = ["Accessors", "CommonSolve", "Printf"]
git-tree-sha1 = "125cbd31a56de53169c3eed9c17180bc6c245f83"
uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665"
version = "3.0.4"
[deps.Roots.extensions]
RootsChainRulesCoreExt = "ChainRulesCore"
RootsForwardDiffExt = "ForwardDiff"
RootsIntervalRootFindingExt = "IntervalRootFinding"
RootsSymPyExt = "SymPy"
RootsSymPyPythonCallExt = "SymPyPythonCall"
RootsUnitfulExt = "Unitful"
[deps.Roots.weakdeps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807"
SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6"
SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
[[deps.SHA]] [[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0" version = "0.7.0"
[[deps.SQLStrings]]
git-tree-sha1 = "55de0530689832b1d3d43491ee6b67bd54d3323c"
uuid = "af517c2e-c243-48fa-aab8-efac3db270f5"
version = "0.1.0"
[[deps.ScopedValues]] [[deps.ScopedValues]]
deps = ["HashArrayMappedTries", "Logging"] deps = ["HashArrayMappedTries", "Logging"]
git-tree-sha1 = "c3b2323466378a2ba15bea4b2f73b081e022f473" git-tree-sha1 = "67a144433c4ce877ee6d1ada69a124d6b1ecf7be"
uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" uuid = "7e506255-f358-4e82-b7e4-beb19740aa63"
version = "1.5.0" version = "1.6.2"
[[deps.Scratch]]
deps = ["Dates"]
git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.3.0"
[[deps.SentinelArrays]] [[deps.SentinelArrays]]
deps = ["Dates", "Random"] deps = ["Dates", "Random"]
git-tree-sha1 = "ebe7e59b37c400f694f52b58c93d26201387da70" git-tree-sha1 = "084c47c7c5ce5cfecefa0a98dff69eb3646b5a80"
uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
version = "1.4.9" version = "1.4.10"
[[deps.Serialization]] [[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
version = "1.11.0" version = "1.11.0"
[[deps.SimpleTraits]]
deps = ["InteractiveUtils", "MacroTools"]
git-tree-sha1 = "7ddb0b49c109481b046972c0e4ab02b2127d6a75"
uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
version = "0.9.6"
[[deps.Sockets]] [[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc" uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
version = "1.11.0" version = "1.11.0"
@@ -524,9 +813,9 @@ version = "1.1.2"
[[deps.SortingAlgorithms]] [[deps.SortingAlgorithms]]
deps = ["DataStructures"] deps = ["DataStructures"]
git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" git-tree-sha1 = "13cd91cc9be159e3f4d95b857fa2aa383b53772a"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.2.2" version = "1.2.3"
[[deps.SparseArrays]] [[deps.SparseArrays]]
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
@@ -535,9 +824,9 @@ version = "1.12.0"
[[deps.SpecialFunctions]] [[deps.SpecialFunctions]]
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
git-tree-sha1 = "5acc6a41b3082920f79ca3c759acbcecf18a8d78" git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b" uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "2.7.1" version = "2.8.0"
[deps.SpecialFunctions.extensions] [deps.SpecialFunctions.extensions]
SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
@@ -545,6 +834,25 @@ version = "2.7.1"
[deps.SpecialFunctions.weakdeps] [deps.SpecialFunctions.weakdeps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
[[deps.StaticArrays]]
deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"]
git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "1.9.18"
[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 = "6ab403037779dae8c514bad259f32a447262455a"
uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
version = "1.4.4"
[[deps.Statistics]] [[deps.Statistics]]
deps = ["LinearAlgebra"] deps = ["LinearAlgebra"]
git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0"
@@ -563,15 +871,15 @@ version = "1.8.0"
[[deps.StatsBase]] [[deps.StatsBase]]
deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" git-tree-sha1 = "e4d7a1a0edc20af42689ea6f4f3587a2175d50ee"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.34.10" version = "0.34.12"
[[deps.StatsFuns]] [[deps.StatsFuns]]
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" git-tree-sha1 = "770240df9a3b8888065046948f7a09b4e0f997d5"
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
version = "1.5.2" version = "2.2.0"
[deps.StatsFuns.extensions] [deps.StatsFuns.extensions]
StatsFunsChainRulesCoreExt = "ChainRulesCore" StatsFunsChainRulesCoreExt = "ChainRulesCore"
@@ -581,11 +889,17 @@ version = "1.5.2"
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
[[deps.StringDistances]]
deps = ["Distances", "StatsAPI"]
git-tree-sha1 = "cd83a04baf746e3b43b83c61b7de77ab0409b80a"
uuid = "88034a9c-02f8-509d-84a9-84ec65e18404"
version = "1.0.0"
[[deps.StringManipulation]] [[deps.StringManipulation]]
deps = ["PrecompileTools"] deps = ["PrecompileTools"]
git-tree-sha1 = "a3c1536470bf8c5e02096ad4853606d7c8f62721" git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5"
uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
version = "0.4.2" version = "0.4.4"
[[deps.StructTypes]] [[deps.StructTypes]]
deps = ["Dates", "UUIDs"] deps = ["Dates", "UUIDs"]
@@ -595,16 +909,18 @@ version = "1.11.0"
[[deps.StructUtils]] [[deps.StructUtils]]
deps = ["Dates", "UUIDs"] deps = ["Dates", "UUIDs"]
git-tree-sha1 = "28145feabf717c5d65c1d5e09747ee7b1ff3ed13" git-tree-sha1 = "82bee338d650aa515f31866c460cb7e3bcef90b8"
uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42"
version = "2.6.3" version = "2.8.2"
[deps.StructUtils.extensions] [deps.StructUtils.extensions]
StructUtilsMeasurementsExt = ["Measurements"] StructUtilsMeasurementsExt = ["Measurements"]
StructUtilsStaticArraysCoreExt = ["StaticArraysCore"]
StructUtilsTablesExt = ["Tables"] StructUtilsTablesExt = ["Tables"]
[deps.StructUtils.weakdeps] [deps.StructUtils.weakdeps]
Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
[[deps.StyledStrings]] [[deps.StyledStrings]]
@@ -625,6 +941,12 @@ deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.3" version = "1.0.3"
[[deps.TZJData]]
deps = ["Artifacts"]
git-tree-sha1 = "72df96b3a595b7aab1e101eb07d2a435963a97e2"
uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7"
version = "1.5.0+2025b"
[[deps.TableTraits]] [[deps.TableTraits]]
deps = ["IteratorInterfaceExtensions"] deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
@@ -633,9 +955,24 @@ version = "1.0.1"
[[deps.Tables]] [[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"]
git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" git-tree-sha1 = "0f38a06c83f0007bbab3cf911262841c9a0f07e0"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.12.1" version = "1.13.0"
[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
version = "1.11.0"
[[deps.TimeZones]]
deps = ["Artifacts", "Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"]
git-tree-sha1 = "d422301b2a1e294e3e4214061e44f338cafe18a2"
uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
version = "1.22.2"
weakdeps = ["RecipesBase"]
[deps.TimeZones.extensions]
TimeZonesRecipesBaseExt = "RecipesBase"
[[deps.TranscodingStreams]] [[deps.TranscodingStreams]]
git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742"
@@ -647,6 +984,12 @@ git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.6.1" version = "1.6.1"
[[deps.UTCDateTimes]]
deps = ["Dates", "TimeZones"]
git-tree-sha1 = "4af3552bf0cf4a071bf3d14bd20023ea70f31b62"
uuid = "0f7cfa37-7abf-4834-b969-a8aa512401c2"
version = "1.6.1"
[[deps.UUIDs]] [[deps.UUIDs]]
deps = ["Random", "SHA"] deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
@@ -658,9 +1001,9 @@ version = "1.11.0"
[[deps.WeakRefStrings]] [[deps.WeakRefStrings]]
deps = ["DataAPI", "InlineStrings", "Parsers"] deps = ["DataAPI", "InlineStrings", "Parsers"]
git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" git-tree-sha1 = "0716e01c3b40413de5dedbc9c5c69f27cddfddfc"
uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
version = "1.4.2" version = "1.4.3"
[[deps.WorkerUtilities]] [[deps.WorkerUtilities]]
git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7"
@@ -672,6 +1015,12 @@ deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a" uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
version = "1.3.1+2" version = "1.3.1+2"
[[deps.Zstd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308"
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
version = "1.5.7+1"
[[deps.libblastrampoline_jll]] [[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl"] deps = ["Artifacts", "Libdl"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
@@ -682,3 +1031,13 @@ deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "011b0a7331b41c25524b64dc42afc9683ee89026" git-tree-sha1 = "011b0a7331b41c25524b64dc42afc9683ee89026"
uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8" uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8"
version = "1.0.21+0" version = "1.0.21+0"
[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
version = "1.64.0+1"
[[deps.p7zip_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
version = "17.7.0+0"
+10 -2
View File
@@ -1,6 +1,6 @@
name = "GeneralUtils" name = "GeneralUtils"
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe" uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
version = "0.3.2" version = "0.5.0"
authors = ["tonaerospace <tonaerospace.etc@gmail.com>"] authors = ["tonaerospace <tonaerospace.etc@gmail.com>"]
[deps] [deps]
@@ -9,15 +9,23 @@ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
LibPQ = "194296ae-ab2e-5f79-8cd4-7183a0a5a0d1"
NATS = "55e73f9c-eeeb-467f-b4cc-a633fde63d2a" NATS = "55e73f9c-eeeb-467f-b4cc-a633fde63d2a"
PrettyPrinting = "54e16d92-306c-5ea0-a30b-337be88ac337" PrettyPrinting = "54e16d92-306c-5ea0-a30b-337be88ac337"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce"
StringDistances = "88034a9c-02f8-509d-84a9-84ec65e18404"
UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
[compat] [compat]
JSON = "1.3.0" Graphs = "1.14.0"
HTTP = "2.5.0 - 2.9.9"
JSON = "1.3.0 - 1.9.9"
LibPQ = "1.18.0"
NATS = "0.1.0" NATS = "0.1.0"
Revise = "3.13.2" Revise = "3.13.2"
StringDistances = "1.0.0"
BIN
View File
Binary file not shown.
View File
+43 -1
View File
@@ -121,7 +121,8 @@ function generateInsertSQL(table_name::String, columnToInsert::Vector{Symbol}, d
for (key, value) in data for (key, value) in data
if key columnToInsert if key columnToInsert
push!(columns, string(key)) push!(columns, string(key))
push!(values, "'$value'") #[] number should not wrapped in '' value_str = isa(value, AbstractString) ? "'$value'" : "$value"
push!(values, value_str)
end end
end end
@@ -131,6 +132,22 @@ function generateInsertSQL(table_name::String, columnToInsert::Vector{Symbol}, d
return "INSERT INTO $table_name ($columns_str) VALUES ($values_str);" return "INSERT INTO $table_name ($columns_str) VALUES ($values_str);"
end end
function generateInsertSQL(table_name::String, data::AbstractDict{String, Any})
columns = String[]
values = String[]
for (key, value) in data
push!(columns, string(key))
value_str = isa(value, AbstractString) ? "'$value'" : "$value"
push!(values, value_str)
end
columns_str = join(columns, ", ")
values_str = join(values, ", ")
return "INSERT INTO $table_name ($columns_str) VALUES ($values_str);"
end
# ---------------------------------------------- 100 --------------------------------------------- # # ---------------------------------------------- 100 --------------------------------------------- #
@@ -185,5 +202,30 @@ function generateUpdateSQL(table_name::String, pk_column::String, pk_value,
return "UPDATE $table_name SET $set_clause WHERE $pk_column = $pk_val_str;" return "UPDATE $table_name SET $set_clause WHERE $pk_column = $pk_val_str;"
end end
function generateUpdateSQL(table_name::String, pk_dict::AbstractDict{String, Any},
data::AbstractDict{String, Any})
# Build SET clause
set_parts = String[]
for (key, value) in data
if key keys(pk_dict)
value_str = isa(value, AbstractString) ? "'$value'" : "$value"
push!(set_parts, "$(string(key)) = $value_str")
end
end
set_clause = join(set_parts, ", ")
# Build WHERE clause for composite keys
where_parts = String[]
for (col, val) in pk_dict
val_str = isa(val, AbstractString) ? "'$val'" : "$val"
push!(where_parts, "$(string(col)) = $val_str")
end
where_clause = join(where_parts, " AND ")
return "UPDATE $table_name SET $set_clause WHERE $where_clause;"
end
end # module end # module
+463 -206
View File
@@ -5,7 +5,7 @@ export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue,
replaceLessThan, replaceBetween, cartesianAssign!, sumAlongDim3, matMul3Dto3DmanyTo1batch, replaceLessThan, replaceBetween, cartesianAssign!, sumAlongDim3, matMul3Dto3DmanyTo1batch,
matMul_3Dto4D_batchwise, isNotEqual, linearToCartesian, vectorMax, findMax, matMul_3Dto4D_batchwise, isNotEqual, linearToCartesian, vectorMax, findMax,
multiply_last, multiplyRandomElements, replaceElements, replaceElements!, isBetween, multiply_last, multiplyRandomElements, replaceElements, replaceElements!, isBetween,
isLess, allTrue, getStringBetweenCharacters, JSON3read_stringKey, mkDictPath!, isLess, allTrue, getStringBetweenCharacters, mkDictPath!, dict_to_string_html,
getDictPath, detectKeywordVariation, textToDict, dictify, ordereddictify getDictPath, detectKeywordVariation, textToDict, dictify, ordereddictify
using JSON, DataStructures, Distributions, Random, Dates, UUIDs, DataFrames, CSV using JSON, DataStructures, Distributions, Random, Dates, UUIDs, DataFrames, CSV
@@ -150,14 +150,31 @@ end
# ---------------------------------------------- 100 --------------------------------------------- # # ---------------------------------------------- 100 --------------------------------------------- #
""" read_textfile_by_index(folder_path::String, read_file_number::Integer=1) """ Reads the x-th text file from a folder, where files are listed by the OS
without explicit sorting. Returns the file number, filename, and content.
with multiple text file in a folder, # Arguments
this function read x_th text file in a folder (filename is sorted by OS) - `folder_path::String`
Path to the folder containing text files.
- `read_file_number::Integer=1`
Which file to read (1-based index). Defaults to the first file.
# Example # Return
utils.read_textfile_by_index(cleaned_data_path, 2) - A tuple of `(file_number::Integer, filename::String, content)` where:
read 2nd txt file in a folder - `file_number` is the index of the file that was read
- `filename` is the actual filename string
- `content` is a vector of lines from the file (or `nothing` if error)
# Notes
- Errors if `folder_path` is not a valid directory.
- Errors if `read_file_number` exceeds the number of files in the folder.
# Examples
```jldoctest
julia> using GeneralUtils
julia> result = read_textfile_by_index("/path/to/folder", 2)
(2, "sample.txt", ["line1", "line2", ...])
```
""" """
function read_textfile_by_index(folder_path::String, read_file_number::Integer=1) function read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
if isdir(folder_path) if isdir(folder_path)
@@ -186,40 +203,39 @@ function read_textfile_by_index(folder_path::String, read_file_number::Integer=1
end end
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary. """ Recursively convert dictionary-like variable (e.g. JSON.Object) into an OrderedDict.
# What it does The function walks any nested structure composed of `AbstractDict` (e.g., `JSON.Object`,
- Walks any nested structure composed of `AbstractDict` (e.g., `JSON.Object`, `Dict`, `OrderedDict`) and `AbstractArray` and produces a new tree where
`Dict`, `OrderedDict`) and `AbstractArray` and produces a new tree where every dictionary-like node is an `OrderedDict` and every array-like node is a `Vector{Any}`.
every dictionary-like node is a plain `Dict` and every array-like node is a Scalar values (numbers, strings, booleans, `nothing`, etc.) are returned unchanged.
`Vector{Any}`. Scalar values (numbers, strings, booleans, `nothing`, etc.) Does **not** mutate the input; it always allocates new containers.
are returned unchanged.
- Does **not** mutate the input; it always allocates new containers.
# Arguments # Arguments
- `x` - `x`
Any Julia value. If `x` is an `AbstractDict` it will be converted to a `Dict`; Any Julia value. If `x` is an `AbstractDict` it will be converted to an `OrderedDict`;
if it is an `AbstractArray` its elements will be processed recursively. if it is an `AbstractArray` its elements will be processed recursively.
# Keyword Arguments # Keyword Arguments
- `stringkey::Bool=false` - `keytype::Type=Any`
If `true`, every dictionary key is converted to `String` via `string(k)`. The key type for the output OrderedDict. Use `String` for `OrderedDict{String,Any}`,
If `false`, original key objects are preserved (useful when keys are already `Symbol` for `OrderedDict{Symbol,Any}`, or `Any` to preserve original key types.
`String`, `Symbol`, or other types you want to keep). - `sort_order::Union{Nothing, Vector}=nothing`
Vector of keys specifying the desired order. Keys are arranged in the specified order
first, followed by any remaining keys.
# Return # Return
- A newly allocated nested structure composed of `Dict{Any,Any}` and - A newly allocated nested structure composed of `OrderedDict{keytype,Any}` and `Vector{Any}`
`Vector{Any}` that mirrors the input shape but uses plain Julia containers. that mirrors the input shape but uses ordered Julia containers.
# Notes # Notes
- The function treats any `AbstractDict` as a mapping source, so it works with - The function treats any `AbstractDict` as a mapping source, so it works with
`JSON.Object`, `Dict`, `OrderedDict`, etc. `JSON.Object`, `Dict`, `OrderedDict`, etc.
- Arrays are returned as `Vector{Any}` with their elements processed - Arrays are returned as `Vector{Any}` with their elements processed recursively.
recursively.
# Examples # Examples
```jldoctest ```jldoctest
julia> using JSON julia> using JSON, DataStructures
julia> d = Dict( julia> d = Dict(
"a" => 4, "a" => 4,
"b" => 6, "b" => 6,
@@ -234,92 +250,105 @@ julia> d = Dict(
) )
) )
julia jsonstring = JSON.json(d) julia> jsonstring = JSON.json(d)
julia> A1 = JSON.parse(jsonstring) # A1 type is JSON.Object julia> A1 = JSON.parse(jsonstring) # A1 type is JSON.Object
julia> A2 = dictify(A1) julia> A2 = dictify(A1; keytype=String)
Dict{Any,Any} with 3 entries: OrderedDict{String,Any} with 3 entries:
"a" => 4 "a" => 4
"b" => 6 "b" => 6
"c" => Dict("d"=>7, "e"=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7]))) "c" => OrderedDict("d"=>7, "e"=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7])))
julia> A3 = dictify(A1; stringkey=false) # preserves original key objects julia> A3 = dictify(A1; keytype=Symbol)
julia> B1 = dictify(d; stringkey=true) # convert all keys in to string OrderedDict{Symbol,Any} with 3 entries:
Dict{Any, Any} with 3 entries: :a => 4
"c" => Dict{Any, Any}("e"=>Dict{Any, Any}("f"=>"hey", "g"=>Dict{Any, Any}("world"=>Any[1, "2", 3, Dict{Any, Any}("dd"=>4.7)])), "d"=>7) :b => 6
"b" => 6 :c => OrderedDict(:d=>7, :e=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7])))
"a" => 4
julia> B1 = dictify(d; keytype=String)
OrderedDict{String, Any} with 3 entries:
```
**With sort_order:**
```jldoctest
julia> d = Dict("a"=>1, "b"=>2, "c"=>3)
julia> dictify(d; sort_order=["c", "a"])
OrderedDict{String,Int} with 3 entries:
"c" => 3
"a" => 1
"b" => 2
``` ```
""" """
function dictify(x; stringkey::Bool=false) function dictify(x::T; keytype::Type=Any, sort_order::Union{Nothing, Vector}=nothing
# Dict-like objects )::OrderedDict where {T<:AbstractDict}
if x isa AbstractDict # Dict-like objects
# choose output key type container (String keys when requested) out = OrderedDict{keytype, Any}()
out = Dict{Any,Any}()
for (k,v) in x # 1. Process and normalize all keys from the input dictionary
newk = stringkey ? string(k) : k processed_dict = OrderedDict{keytype, Any}()
out[newk] = dictify(v; stringkey=stringkey) for (k, v) in x
end if keytype === String
return out newk = string(k)
# Arrays / vectors: map elements recursively and return a Vector{Any} elseif keytype === Symbol
elseif x isa AbstractArray newk = Symbol(string(k))
return [dictify(element; stringkey=stringkey) for element in x] else
# everything else: return as-is (primitives, numbers, strings, etc.) newk = k
else end
return x processed_dict[newk] = dictify(v; keytype=keytype, sort_order=sort_order)
end end
# 2. If a sort order is specified, apply it
if !isnothing(sort_order)
# Normalize the sort_order elements to match the requested keytype
normalized_order = map(sort_order) do tk
if keytype === String
return string(tk)
elseif keytype === Symbol
return Symbol(string(tk))
else
return tk
end
end
# First, insert keys that match the requested order
for target_key in normalized_order
if haskey(processed_dict, target_key)
out[target_key] = processed_dict[target_key]
end
end
# Then, append any remaining keys that weren't in the sort_order
for (k, v) in processed_dict
if !haskey(out, k)
out[k] = v
end
end
else
# If no sort order is given, just use the processed dict
out = processed_dict
end
return out
end end
function dictify(x::T; keytype::Type=Any, sort_order::Union{Nothing, Vector}=nothing
) where {T<:AbstractArray}
return [dictify(element; keytype=keytype, sort_order=sort_order) for element in x]
# ---------------------------------------------- 100 --------------------------------------------- #
""" Array_to_JSON_str(data::AbstractArray)
encode Array to JSON String
# Example
a = [1.23 4.7889; 9987.1 -123.07; -0.0027 -6.75]
jsonStr = Array_to_JSON_str(a)
jsonStr = "{\"Array\":[[1.23,9987.1,-0.0027],[4.7889,-123.07,-6.75]],\"size\":[3,2]}"
"""
function Array_to_JSON_str(data::AbstractArray)
d = Dict("Array"=> data, "size"=>size(data))
jsonStr = JSON.json(d)
return jsonStr
end end
# ---------------------------------------------- 100 --------------------------------------------- # function dictify(x; keytype::Type=Any, sort_order::Union{Nothing, Vector}=nothing
)
""" JSON_str_to_Array(json_str::String) return x
decode JSON String to Array
# Example
jsonStr = "{\"Array\":[[1.23,9987.1,-0.0027],[4.7889,-123.07,-6.75]],\"size\":[3,2]}"
a = JSON_str_to_Array(jsonStr)
"""
function JSON_str_to_Array(jsonStr::String)
jsonObj = JSON.parse(jsonStr)
a = Array(jsonObj.Array)
array = hcat(a...)
return array
end end
# ---------------------------------------------- 100 --------------------------------------------- # # ---------------------------------------------- 100 --------------------------------------------- #
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary. """ Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary.
The function walks any nested structure composed of AbstractDict (e.g., JSON.Object,
# What it does Dict, OrderedDict) and AbstractArray and produces a new tree where
- Walks any nested structure composed of AbstractDict (e.g., JSON.Object, every dictionary-like node is an OrderedDict{Any,Any} and every array-like
Dict, OrderedDict) and AbstractArray and produces a new tree where node is a Vector{Any}. Scalar values (numbers, strings, booleans,
every dictionary-like node is an OrderedDict{Any,Any} and every array-like nothing, etc.) are returned unchanged.
node is a Vector{Any}. Scalar values (numbers, strings, booleans, Does **not** mutate the input; it always allocates new containers.
nothing, etc.) are returned unchanged.
- Does **not** mutate the input; it always allocates new containers.
# Arguments # Arguments
- `x` - `x`
@@ -328,13 +357,11 @@ end
processed recursively. processed recursively.
# Keyword Arguments # Keyword Arguments
- `stringkey::Bool=false` - `keytype::Type=Any`
If `true`, every dictionary key is converted to `String` via `string(k)`. The key type for the output Dict. Use `String` for `OrderedDict{String,Any}`, `Symbol` for `OrderedDict{Symbol,Any}`, or `Any` to preserve original key types.
If `false`, original key objects are preserved (useful when keys are already
`String`, `Symbol`, or other types you want to keep).
# Return # Return
- A newly allocated nested structure composed of `OrderedDict{Any,Any}` and - A newly allocated nested structure composed of `OrderedDict{keytype,Any}` and
`Vector{Any}` that mirrors the input shape but uses ordered Julia containers. `Vector{Any}` that mirrors the input shape but uses ordered Julia containers.
# Notes # Notes
@@ -361,41 +388,52 @@ julia> d = Dict(
julia jsonstring = JSON.json(d) julia jsonstring = JSON.json(d)
julia> A1 = JSON.parse(jsonstring) # A1 type is JSON.Object julia> A1 = JSON.parse(jsonstring) # A1 type is JSON.Object
julia> A2 = OrderedDict(A1) julia> A2 = ordereddictify(A1; keytype=String)
Dict{Any,Any} with 3 entries: OrderedDict{String,Any} with 3 entries:
"a" => 4 "a" => 4
"b" => 6 "b" => 6
"c" => Dict("d"=>7, "e"=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7]))) "c" => OrderedDict("d"=>7, "e"=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7])))
julia> A3 = OrderedDict(A1; stringkey=false) # preserves original key objects julia> A3 = ordereddictify(A1; keytype=Symbol)
julia> B1 = OrderedDict(d; stringkey=true) # convert all keys in to string OrderedDict{Symbol,Any} with 3 entries:
Dict{Any, Any} with 3 entries: :a => 4
"c" => Dict{Any, Any}("e"=>Dict{Any, Any}("f"=>"hey", "g"=>Dict{Any, Any}("world"=>Any[1, "2", 3, Dict{Any, Any}("dd"=>4.7)])), "d"=>7) :b => 6
:c => OrderedDict(:d=>7, :e=>Dict("f"=>"hey", "g"=>Dict("world"=>[1, "2", 3, 4.7])))
julia> B1 = ordereddictify(d; keytype=String)
OrderedDict{String, Any} with 3 entries:
"c" => OrderedDict{String, Any}("e"=>OrderedDict{String, Any}("f"=>"hey", "g"=>OrderedDict{String, Any}("world"=>Any[1, "2", 3, OrderedDict{String, Any}("dd"=>4.7)])), "d"=>7)
"b" => 6 "b" => 6
"a" => 4 "a" => 4
``` ```
Ref. https://github.com/andyferris/Dictionaries.jl Ref. https://github.com/andyferris/Dictionaries.jl
""" """
function ordereddictify(x; stringkey::Bool=false) function ordereddictify(x; keytype::Type=Any)
# Dict-like objects # Dict-like objects
if x isa AbstractDict if x isa AbstractDict
# choose output key type container (String keys when requested) # choose output key type container
out = OrderedDict{Any,Any}() out = OrderedDict{keytype,Any}()
for (k,v) in x for (k,v) in x
newk = stringkey ? string(k) : k if keytype === String
out[newk] = ordereddictify(v; stringkey=stringkey) newk = string(k)
elseif keytype === Symbol
newk = Symbol(string(k))
else
newk = k
end
out[newk] = ordereddictify(v; keytype=keytype)
end end
return out return out
# Arrays / vectors: map elements recursively and return a Vector{Any} # Arrays / vectors: map elements recursively and return a Vector{Any}
elseif x isa AbstractArray elseif x isa AbstractArray
return [ordereddictify(element; stringkey=stringkey) for element in x] return [ordereddictify(element; keytype=keytype) for element in x]
# everything else: return as-is (primitives, numbers, strings, etc.) # everything else: return as-is (primitives, numbers, strings, etc.)
else else
return x return x
end end
end end
#------------------------------------------------------------------------------------------------100 #----------------------------------------------100---------------------------------------------
""" """
print time of cpu executtion at the line inwhich this macro is used print time of cpu executtion at the line inwhich this macro is used
@@ -477,6 +515,32 @@ function randomChoiceOnTarget(target::AbstractVector, choiceList::AbstractVector
return randomChoiceOnTarget.(target, 1, (choiceList,), (probability,)) return randomChoiceOnTarget.(target, 1, (choiceList,), (probability,))
end end
""" Compute the linearly weighted average of an array.
The function assigns weights proportional to position indices (1, 2, 3, ...) to array
elements and returns the weighted average.
# Arguments
- `a::Array`
Array of numeric values. Elements must support multiplication with numbers
and summation.
# Return
- The linearly weighted average as a floating-point number.
# Formula
For an array `a` with `n` elements, computes:
```
sum(i * a[i]) / sum(a) for i = 1 to n
```
# Examples
```jldoctest
julia> using GeneralUtils
julia> a = [10, 20, 30]
julia> linearly_weighted_avg(a)
23.333333333333332
```
"""
function linearly_weighted_avg(a::Array) function linearly_weighted_avg(a::Array)
total = 0.0 total = 0.0
for (i, v) in enumerate(a) for (i, v) in enumerate(a)
@@ -487,10 +551,34 @@ function linearly_weighted_avg(a::Array)
end end
""" Convert String that is holded inside a variable to Symbol """ Convert a variable's value (String) into a Symbol.
# Example The function takes a variable containing a String value and converts it to a Symbol
x = "hello" # x is a variable holding String "hello" \n using Julia's expression interpolation mechanism.
y = variable_to_symbol(x) # y holds :hello
# Arguments
- `variable`
Any variable whose value is a String. The function uses `string(variable)`
internally to obtain the value.
# Return
- A `Symbol` constructed from the string value of the input variable.
# Notes
- This function uses variable interpolation to capture the variable's
value as a Symbol. It works with any variable type that can be converted
to String.
# Examples
```jldoctest
julia> using GeneralUtils
julia> x = "hello"
julia> variable_str_to_symbol(x)
:hello
julia> y = "world_test"
julia> variable_str_to_symbol(y)
:world_test
```
""" """
function variable_str_to_symbol(variable) function variable_str_to_symbol(variable)
semi = :($variable) semi = :($variable)
@@ -534,6 +622,43 @@ function fieldname_useable_type(somestruct, fieldname::Symbol;
end end
""" Draw unique elements from a list without replacement.
The function randomly selects a specified number of distinct elements from a collection,
optionally excluding certain elements from consideration. Uses in-place
shuffling for efficiency.
# Arguments
- `drawOptions::Array`
Collection of elements to draw from.
- `draw_number::Integer`
Number of unique elements to draw.
# Keyword Arguments
- `exclude_list::Union{AbstractArray,Nothing}=nothing`
Elements to exclude from the drawing pool. If `nothing`, no elements are
excluded.
# Return
- An array of `draw_number` unique elements drawn from `drawOptions`, excluding
any elements in `exclude_list`.
# Notes
- The function copies `drawOptions` and shuffles in-place, then pops elements
sequentially to ensure uniqueness.
- Errors if `draw_number` exceeds the number of available elements after
exclusion.
# Examples
```jldoctest
julia> using GeneralUtils
julia> options = [1, 2, 3, 4, 5]
julia> randomNoRepeat(options, 3)
[3, 1, 5]
julia> randomNoRepeat(options, 2; exclude_list=[1, 5])
[4, 2]
```
"""
function randomNoRepeat(drawOptions::Array, draw_number::Integer; function randomNoRepeat(drawOptions::Array, draw_number::Integer;
exclude_list::Union{AbstractArray,Nothing}=nothing) exclude_list::Union{AbstractArray,Nothing}=nothing)
draw_option = copy(drawOptions) draw_option = copy(drawOptions)
@@ -700,22 +825,46 @@ function selectRange(d::Dict{Symbol, <:AbstractVector}, range)
return newDict return newDict
end end
""" Assign value to a given Dict by array of keys """ Recursively traverses a nested dictionary structure using a vector of keys
and assigns a value to the final key. Creates intermediate dictionaries
if they don't exist.
# Example # Arguments
d = Dict( - `dict::Dict`
:a1=> Dict(:c=> 5), The root dictionary to traverse and modify.
:a2=> Dict( - `accessArray::Array{Symbol}`
:k=> 10, A vector of symbols representing the key path to traverse.
:b=> Dict( - `valueToAssign`
:s=> "target", The value to assign at the final key in the path.
)
)
)
index = [:a2, :b, :s] \n
assignDict!(d, [:a2, :b, :s], "wow")
return 1 if no target key in a given dict. # Return
- `0` on success (value assigned)
- `1` if the path cannot be traversed (missing intermediate keys)
# Notes
- The function walks through each key in `accessArray` except the last one,
expecting intermediate keys to already exist in the dictionary.
- If any intermediate key is missing, the function returns `1` without
modifying the dictionary.
- The final key in `accessArray` receives the `valueToAssign`.
# Examples
```jldoctest
julia> using GeneralUtils
julia> d = Dict(
:a1=> Dict(:c=> 5),
:a2=> Dict(
:k=> 10,
:b=> Dict(
:s=> "target",
)
)
)
julia> assignDict!(d, [:a2, :b, :s], "wow")
0
julia> d[:a2][:b][:s]
"wow"
```
""" """
function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign) function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
wd = nothing wd = nothing
@@ -736,9 +885,39 @@ function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
end end
end end
""" convert hour(0-23), minute(0-59) into julia time object """ Converts hour (0-23) and minute (0-59) into a Julia `Time` object using
# Example 12-hour format with AM/PM indicator.
time
# Arguments
- `h::Integer`
Hour in 24-hour format (0 to 23).
- `m::Integer`
Minute (0 to 59).
# Return
- A `Time` object representing the time in 12-hour format with AM/PM.
# Notes
- Hours 0 and 12 are special cases: 0 becomes 12 AM, 12 becomes 12 PM.
- Hours 1-11 remain the same with "am" suffix.
- Hours 13-23 are converted to 1-11 with "pm" suffix.
- Minutes less than 10 are zero-padded.
# Examples
```jldoctest
julia> using GeneralUtils
julia> iTime(0, 30)
12:30 AM
julia> iTime(9, 15)
9:15 AM
julia> iTime(12, 0)
12:00 PM
julia> iTime(14, 5)
2:05 PM
```
""" """
function iTime(h::Integer, m::Integer) function iTime(h::Integer, m::Integer)
if h == 0 if h == 0
@@ -782,19 +961,37 @@ function limitvalue(v::Number, lowerbound::Pair, upperbound::Pair)
end end
""" Assign matrix b to matrix a according to matrix b's CartesianIndex. """ Assigns elements from matrix `b` to matrix `a` using the Cartesian indices
of `b`. Elements are copied in the order they appear when iterating over `b`,
and placed into `a` at the corresponding Cartesian positions of `b`.
Arguments:\n # Arguments
a : target matrix. - `a`
b : source matrix. Target matrix where values from `b` will be assigned.
- `b`
Source matrix whose Cartesian indices determine where values are placed in `a`.
Return:\n # Return
Resulting matrix a. - `nothing`
Example:\n # Notes
```jldoctest - The function iterates through `b` in column-major order (Julia's default),
julia> not done yet retrieving each element's Cartesian index and assigning it to the same
``` position in `a`.
- Matrix `a` must have sufficient size to accommodate all Cartesian indices
from `b`; otherwise, an `BoundsError` may occur.
# Examples
```jldoctest
julia> using GeneralUtils
julia> a = zeros(4, 4);
julia> b = [1 2; 3 4];
julia> cartesianAssign!(a, b);
julia> a[1:2, 1:2]
2×2 Matrix{Float64}:
1.0 3.0
2.0 4.0
```
""" """
function cartesianAssign!(a, b) function cartesianAssign!(a, b)
for (i, v) in enumerate(b) for (i, v) in enumerate(b)
@@ -1149,7 +1346,6 @@ julia> text = "{\"ask\": {\"text\": \"Could you please tell me about the special
julia> GeneralUtils.getStringBetweenCharacters(text, '{', '}', endCharLocation="end") julia> GeneralUtils.getStringBetweenCharacters(text, '{', '}', endCharLocation="end")
"{\"ask\": {\"text\": \"Could you please tell me about the special event?\"\n}}" "{\"ask\": {\"text\": \"Could you please tell me about the special event?\"\n}}"
``` ```
# Signature
""" """
function getStringBetweenCharacters(text::T, startChar::Char, endChar::Char; function getStringBetweenCharacters(text::T, startChar::Char, endChar::Char;
endCharLocation::String="next", includeChar::Bool=true)::String where {T<:AbstractString} endCharLocation::String="next", includeChar::Bool=true)::String where {T<:AbstractString}
@@ -1181,59 +1377,40 @@ function getStringBetweenCharacters(text::T, startChar::Char, endChar::Char;
end end
""" Recursively creates nested dictionary paths if they do not exist and assigns
""" Read JSON string and return a dictionary with string key. (JSON3 defaults to symbol key) a value to the final key. Similar to `mkpath()` but for dictionaries.
This function solve the problem of reading JSON with string key.
Arguments:
jsonString::String
Return:
a dictionary with string key
Example:
```jldoctest
julia> jsonString = {\"wine type\": \"Red\", \"intensity level\": \"medium-bodied\"}
julia> JSON3read_stringKey(jsonString)
Dict{String, Any} with 2 entries:
"intensity level" => "medium-bodied"
"wine type" => "Red"
```
"""
function JSON3read_stringKey(jsonString::AbstractString)
jsonobj = JSON3.read(jsonString)
newDict = OrderedDict{String,Any}()
for (k,v) in jsonobj
newDict[string(k)] = v
end
return newDict
end
""" Create nested dict path if it does not already exist. The same concept as Julia's mkpath()
# Arguments # Arguments
- `dict::Dict` - `dict::Union{Dict{Symbol, Any}, Dict{String, Any}}`
target dict The target dictionary to traverse and modify. Must use consistent key types
- `addkeys::Union{Vector{String}, Vector{Symbol}}` (either all `String` or all `Symbol`).
keys to be added to dict - `addkeys::Union{Vector{String}, Vector{Symbol}}`
- `value` A vector of keys representing the path to traverse. Intermediate dictionaries
value to be added to dict at final key in keypath are created if they don't exist.
- `value`
The value to assign at the final key in the path.
# Return # Return
- dict with added keypath - The assigned `value`.
# Example # Notes
- The function ensures key type consistency: the type of keys being added must
match the type of existing keys in the dictionary.
- Intermediate dictionaries are automatically created with the appropriate key
type when they don't exist.
- The function walks through each key in `addkeys` except the last one,
creating intermediate dictionaries as needed, and assigns `value` to the final
key.
# Examples
```jldoctest ```jldoctest
julia> using Revise
julia> using GeneralUtils julia> using GeneralUtils
julia> d = Dict{String, Any}("a" => Dict{String, Any}("b" => 10)) julia> d = Dict("a" => Dict("b" => 10))
julia> GeneralUtils.mkDictPath!(d, ["a", "v", "x", "y", "z"], 42) julia> mkDictPath!(d, ["a", "v", "x", "y", "z"], 42)
Dict{String, Any} with 1 entry: 42
"path" => Dict{Any, Any}("to"=>Dict{Any, Any}("nested"=>Dict{Any, Any}("value"=>42))) julia> d["a"]["v"]["x"]["y"]["z"]
42
``` ```
# Signature
""" """
function mkDictPath!(dict::Union{Dict{Symbol, Any}, Dict{String, Any}}, function mkDictPath!(dict::Union{Dict{Symbol, Any}, Dict{String, Any}},
addkeys::Union{Vector{String}, Vector{Symbol}}, value) addkeys::Union{Vector{String}, Vector{Symbol}}, value)
@@ -1257,27 +1434,33 @@ function mkDictPath!(dict::Union{Dict{Symbol, Any}, Dict{String, Any}},
end end
""" Get nested dict value using a vector of keys """ Retrieves a value from a nested dictionary by traversing a vector of keys.
Creates intermediate dictionaries if they don't exist.
# Arguments # Arguments
- `dict::Dict` - `dict::Dict`
target dict The root dictionary to traverse.
- `keys::Vector` - `keys::Vector`
keys vector A vector of keys representing the path to traverse. Each key in the vector
is used to access the next level of nesting.
# Return # Return
- dict with added keypath - The value at the final key in the path.
# Example # Notes
- Errors with `ArgumentError` if any intermediate key is missing from the
dictionary path.
- The function walks through each key in `keys` except the last one,
expecting intermediate keys to exist in the dictionary.
- The final key in `keys` is used to retrieve the value.
# Examples
```jldoctest ```jldoctest
julia> using Revise
julia> using GeneralUtils julia> using GeneralUtils
julia> d = Dict{Symbol, Any}(:a => Dict{Symbol, Any}(:b => 10)) julia> d = Dict(:a => Dict(:b => 10))
julia> GeneralUtils.getDictPath(d, [:a, :b]) julia> getDictPath(d, [:a, :b])
10 10
``` ```
# Signature
""" """
function getDictPath(dict::Dict, keys::Vector) function getDictPath(dict::Dict, keys::Vector)
current_dict = dict current_dict = dict
@@ -1429,8 +1612,6 @@ OrderedCollections.OrderedDict{Any, Any}(:thought => "what to do",
:plan => "wake up and going out", :plan => "wake up and going out",
:action => "1. wake up 2. eat 3. sleep") :action => "1. wake up 2. eat 3. sleep")
``` ```
# Signature
""" """
function textToDict(text::String, detectKeywords::Vector{String}; function textToDict(text::String, detectKeywords::Vector{String};
dictKey::Union{Vector{String}, Nothing}=nothing, dictKey::Union{Vector{String}, Nothing}=nothing,
@@ -1491,6 +1672,82 @@ function textToDict(text::String, detectKeywords::Vector{String};
return od2 return od2
end end
""" Recursively convert dictionary into an HTML string representation.
The function walks a nested `AbstractDict` structure and produces a well-formed HTML string
where each dictionary key becomes an HTML tag. Nested dictionaries become
nested tags, and scalar values (numbers, strings, etc.) become the text
content of leaf tags.
# Arguments
- `d::AbstractDict`
The dictionary to convert. Keys must be strings or symbols that form valid
HTML tag names.
# Keyword Arguments
- `indent_level::Integer=1`
Initial indentation level for the output. Each recursive level increases
indentation by one.
- `indent_str::String=" "`
String used for each indentation level.
# Return
- A single HTML string representing the dictionary structure, with proper
opening and closing tags and appropriate indentation.
# Notes
- Keys are sorted alphabetically for deterministic output.
- Works recursively: dictionary values produce nested tags; non-dictionary
values are placed as text between opening/closing tags.
# Examples
```jldoctest
julia> d = Dict(
"html" => Dict(
"head" => Dict("title" => "Test"),
"body" => Dict(
"h1" => "Hello",
"p" => "World"
)
)
);
julia> println(dict_to_string_html(d))
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Hello</h1>
<p>World</p>
</body>
</html>
```
"""
function dict_to_string_html(d::AbstractDict; indent_level=1, indent_str=" ")
lines = String[]
padding = indent_str ^ indent_level
for k in keys(d)
v = d[k]
if v isa AbstractDict
# Open tag, recurse for children, then close tag
push!(lines, "$padding<$k>")
ind_level = indent_level + 1
push!(lines, dict_to_string_html(v; indent_level=ind_level, indent_str=indent_str))
push!(lines, "$padding</$k>")
else
# Leaf node: put key and value on a single line
push!(lines, "$padding<$k>$v</$k>")
end
end
return join(lines, "\n")
end
+894 -335
View File
File diff suppressed because it is too large Load Diff
+140 -85
View File
@@ -5,7 +5,7 @@ export timedifference, showstracktrace, findHighestIndexKey, uuid4snakecase, rep
dataframeToCSV, dfToVectorDict, disintegrate_vectorDict, getDataFrameValue, dfRowtoString, dataframeToCSV, dfToVectorDict, disintegrate_vectorDict, getDataFrameValue, dfRowtoString,
dfToString, dataframe_to_json_list, dictToString, dictToString_noKey, issomething, dfToString, dataframe_to_json_list, dictToString, dictToString_noKey, issomething,
dictToString_numbering, extract_triple_backtick_text, dictToString_numbering, extract_triple_backtick_text,
countGivenWords, remove_french_accents, countGivenWords, remove_french_accents, removestring,
extractTextBetweenCharacter, extractTextBetweenString, extractTextBetweenCharacter, extractTextBetweenString,
convertCamelSnakeKebabCase, fitrange, recentElementsIndex, nonRecentElementsIndex convertCamelSnakeKebabCase, fitrange, recentElementsIndex, nonRecentElementsIndex
@@ -13,31 +13,34 @@ using JSON, DataStructures, Distributions, Random, Dates, UUIDs, DataFrames
# ---------------------------------------------- 100 --------------------------------------------- # # ---------------------------------------------- 100 --------------------------------------------- #
""" Compute time different between start time and stop time in a given unit. """ Computes the time difference between two `DateTime` values and returns the
Unit can be "milliseconds", "seconds", "minutes", "hours". result in a specified unit: milliseconds, seconds, minutes, or hours.
# Arguments # Arguments
- `starttime::DateTime` - `starttime::DateTime`
start time The starting `DateTime` value.
- `stoptime::DateTime` - `stoptime::DateTime`
stop time The ending `DateTime` value.
- `unit::String` - `unit::String`
unit of time difference The unit for the result. Must be one of: `"milliseconds"`, `"seconds"`,
`"minutes"`, `"hours"`.
# Return # Return
- time difference in given unit - `Integer`: The time difference converted to the specified unit.
# Example # Notes
- The function computes `stoptime - starttime` and converts the result to the
requested unit using integer division.
- Errors with `ArgumentError` if an invalid unit is specified.
# Examples
```jldoctest ```jldoctest
julia> using Revise
julia> using GeneralUtils, Dates julia> using GeneralUtils, Dates
julia> a = Dates.now() julia> a = Dates.now()
julia> b = a + Dates.Day(5) # add 5 days julia> b = a + Dates.Day(5)
julia> GeneralUtils.timedifference(a, b, "hours") julia> timedifference(a, b, "hours")
120 120
``` ```
# Signature
""" """
function timedifference(starttime::DateTime, stoptime::DateTime, unit::String)::Integer function timedifference(starttime::DateTime, stoptime::DateTime, unit::String)::Integer
diff = stoptime - starttime diff = stoptime - starttime
@@ -184,21 +187,27 @@ end
""" Get uuid4 with snake case """ Generates a UUID4 (version 4) identifier and converts it to snake case by
replacing hyphens with underscores.
# Arguments
- This function takes no arguments.
# Return # Return
- `uuid4::String` - `String`: A UUID4 string with underscores instead of hyphens (e.g.,
uuid4 with snake case `"0f6e4f_568c_4df4_8c79_1d7a58072f4a"`).
# Example # Notes
- Uses the `uuid4()` function from the UUIDs standard library to generate a
random UUID.
- The underscore character replaces all hyphens in the UUID string.
# Examples
```jldoctest ```jldoctest
julia> using Revise
julia> using GeneralUtils julia> using GeneralUtils
julia> GeneralUtils.uuid4snakecase() julia> uuid4snakecase()
"0f6e4f_568c_4df4_8c79_1d7a58072f4a" "0f6e4f_568c_4df4_8c79_1d7a58072f4a"
``` ```
# Signature
""" """
function uuid4snakecase()::String function uuid4snakecase()::String
_id = string(uuid4()) _id = string(uuid4())
@@ -207,32 +216,37 @@ function uuid4snakecase()::String
end end
""" Replace a dictionary key with the new key """ Replaces keys in a dictionary according to a mapping, returning a new
dictionary with updated keys while preserving the original values.
# Arguments # Arguments
- `d::Dict` - `d::Dict`
The input dictionary that you want to modify The input dictionary to modify.
- `replacementMap::Dict` - `replacementMap::Dict`
A dictionary that maps old keys to new keys A dictionary mapping old keys to new keys. Keys not present in this map are
left unchanged.
# Return # Return
- `newDict::Dict` - `Dict`: A new dictionary with replaced keys. Values are preserved from the
new dictionary with the replaced keys original dictionary.
# Example # Notes
- The function creates a new dictionary rather than modifying the input in
place.
- Keys not found in `replacementMap` are copied to the result with their
original keys unchanged.
# Examples
```jldoctest ```jldoctest
julia> using Revise
julia> using GeneralUtils julia> using GeneralUtils
julia> d = Dict(:a => 1, :b => 2, :c => 3) julia> d = Dict(:a => 1, :b => 2, :c => 3)
julia> replacement_map = Dict(:a => :x, :b => :y) julia> replacement_map = Dict(:a => :x, :b => :y)
julia> new_dict = GeneralUtils.replaceDictKeys(d, replacement_map) julia> replaceDictKeys(d, replacement_map)
Dict{Any, Any} with 3 entries: Dict{Any, Any} with 3 entries:
:y => 2 :y => 2
:c => 3 :c => 3
:x => 1 :x => 1
``` ```
# Signature
""" """
function replaceDictKeys(d::Dict, replacementMap::Dict)::Dict function replaceDictKeys(d::Dict, replacementMap::Dict)::Dict
newDict = Dict() newDict = Dict()
@@ -294,36 +308,43 @@ end
""" Execute a function with timer. """ Executes a function with a timeout mechanism. If the function does not
complete within the specified time, it is interrupted and a timeout message
is returned.
# Arguments # Arguments
- `f::Function` - `f::Function`
a function to run The function to execute.
- `timeoutwindow::Integer`` - `timeoutwindow::Integer`
timeout in seconds The timeout duration in seconds.
# Keyword Argument # Keyword Arguments
- `fargs` - `fargs`
arguments for the function Arguments to pass to the function `f`. If `nothing`, the function is called
- `timeoutmsg::String` without arguments.
time out message - `timeoutmsg::String`
The message to return if the function times out. Defaults to `"task timed out"`.
# Return # Return
- task result otherwise timeout message - The result of the function if it completes within the timeout, otherwise the
`timeoutmsg` string.
# Example # Notes
```jldoctest - Uses Julia's `@task`, `schedule`, and `Timer` to implement non-blocking
execution with interruption via `Base.throwto`.
- Errors with `InterruptException` if the function exceeds the timeout.
# Examples
```jldoctest
julia> function testfunc(x) julia> function testfunc(x)
sleep(x) sleep(x)
return "task done" return "task done"
end end
julia> result = timeout(testfunc, 10; fargs=20) julia> result = timeout(testfunc, 10; fargs=20)
"task timed out" "task timed out"
julia> result = timeout(testfunc, 20; fargs=10) julia> result = timeout(testfunc, 20; fargs=10)
"task done" "task done"
``` ```
# Signature
""" """
function timeout(f::Function, timeoutwindow::Integer; fargs=nothing, timeoutmsg="task timed out") function timeout(f::Function, timeoutwindow::Integer; fargs=nothing, timeoutmsg="task timed out")
tsk = @task f(fargs) tsk = @task f(fargs)
@@ -340,23 +361,26 @@ end
""" Convert a dataframe into CSV. """ Converts a DataFrame to a CSV string representation using the CSV.jl package.
# Arguments # Arguments
- `df::DataFrame` - `df::DataFrame`
A connection object to Postgres database The DataFrame to convert to CSV format.
# Return # Return
- `result::String` - `String`: The DataFrame contents as a CSV-formatted string.
# Example # Notes
- Uses `CSV.write` with an `IOBuffer` to capture the output as a string.
- The returned string contains the full CSV representation including headers.
# Examples
```jldoctest ```jldoctest
julia> using DataFrames, GeneralUtils julia> using DataFrames, GeneralUtils
julia> df = DataFrame(A=1:3, B=5:7, fixed=1) julia> df = DataFrame(A=1:3, B=5:7, fixed=1)
julia> result = GeneralUtils.dataframeToCSV(df) julia> dataframeToCSV(df)
"1,5,1\n2,6,1\n3,7,1\n"
``` ```
# Signature
""" """
function dataframeToCSV(df::DataFrame) function dataframeToCSV(df::DataFrame)
# Create an IOBuffer to capture the output # Create an IOBuffer to capture the output
@@ -426,8 +450,6 @@ end
3 => [Dict("a"=>7), Dict("a"=>8), Dict("a"=>9)] 3 => [Dict("a"=>7), Dict("a"=>8), Dict("a"=>9)]
4 => [Dict("a"=>10)] 4 => [Dict("a"=>10)]
``` ```
# Signature
""" """
function disintegrate_vectorDict(data::Vector, partsize::Integer function disintegrate_vectorDict(data::Vector, partsize::Integer
) )
@@ -473,8 +495,6 @@ end
julia> getDataFrameValue(df[1, :], :name) julia> getDataFrameValue(df[1, :], :name)
"Alice" "Alice"
``` ```
# Signature
""" """
getDataFrameValue(row::DataFrameRow, key::Symbol) = row.:($key) getDataFrameValue(row::DataFrameRow, key::Symbol) = row.:($key)
@@ -543,8 +563,6 @@ end
julia> dfToString(df) julia> dfToString(df)
"1) name: Alice, age: 25\n2) name: Bob, age: 30" "1) name: Alice, age: 25\n2) name: Bob, age: 30"
``` ```
# Signature
""" """
function dfToString(df::DataFrame) function dfToString(df::DataFrame)
dfstr = "" dfstr = ""
@@ -583,8 +601,6 @@ end
"{\"name\":\"Alice\",\"age\":25}" "{\"name\":\"Alice\",\"age\":25}"
"{\"name\":\"Bob\",\"age\":30}" "{\"name\":\"Bob\",\"age\":30}"
``` ```
# Signature
""" """
function dataframe_to_json_list(df::DataFrame)::Vector{String} function dataframe_to_json_list(df::DataFrame)::Vector{String}
json_list = [] json_list = []
@@ -618,8 +634,6 @@ end
julia> dict_to_string(od) julia> dict_to_string(od)
"1) name: Alice, 2) age: 25" "1) name: Alice, 2) age: 25"
``` ```
# Signature
""" """
function dictToString(od::T) where {T<:AbstractDict} function dictToString(od::T) where {T<:AbstractDict}
items = [] items = []
@@ -733,27 +747,39 @@ end
""" """ Remove French accents from the given text.
remove_french_accents(text::String) -> String
Remove French accents from the given text. The function replaces accented French characters with their non-accented
counterparts using a dictionary mapping. Supported accented characters
include: à, â, ä, á, é, è, ê, ë, î, ï, í, ñ, ô, ö, ò, ó, ù, û, ü, ÿ, ç,
and their uppercase variants. The apostrophe character `` is removed
completely.
# Arguments # Arguments
- `text::String` The input string containing French accents. - `text::AbstractString`
The input string containing French accented characters.
# Returns # Return
- `String` The input string with all French accents removed. - `AbstractString`: A new string with all French accents replaced by their
non-accented equivalents.
# Notes
- The function creates a character list and replaces each accented character
according to an internal dictionary mapping.
- Does **not** mutate the input; it allocates a new string.
# Examples # Examples
```jldoctest ```jldoctest
julia> remove_french_accents("Café") julia> using GeneralUtils
"Cafe" julia> remove_french_accents("Café")
"Cafe"
julia> remove_french_accents("L'été est beau.") julia> remove_french_accents("L'été est beau.")
"L'ete est beau." "L'ete est beau."
```
# Signature julia> remove_french_accents("Noël, naïve, François")
"Noel, naive, Francois"
```
""" """
function remove_french_accents(text::AbstractString)::AbstractString function remove_french_accents(text::AbstractString)::AbstractString
textcharlist = [i for i in text] textcharlist = [i for i in text]
@@ -1113,9 +1139,38 @@ function nonRecentElementsIndex(vectorlength::Integer, n::Integer)
return 1:(vectorlength-n) return 1:(vectorlength-n)
end end
""" Remove specified substrings from text.
Removes all occurrences of each string in `removelist` from the input text
by repeatedly replacing them with empty strings until none remain.
# Arguments
- `text::String`
The input string to modify.
- `removelist::Vector{String}`
A vector of substrings to remove from the text.
# Return
- `String`: The text with all specified substrings removed.
# Examples
```jldoctest
julia> using GeneralUtils
julia> removestring("hello world", ["l", " "])
"heoword"
julia> removestring("foo bar baz", ["bar", " "])
"foobaz"
```
"""
function removestring(text::String, removelist::Vector{String})::String
for i in removelist
while occursin(i, text)
text = replace(text, i => "")
end
end
return string(text)
end