Compare commits
38 Commits
v0.2.1-dev
...
92c5930e9a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92c5930e9a | ||
|
|
5b4c1c1471 | ||
|
|
fc3edd7b8f | ||
|
|
93aa0ee1ac | ||
|
|
42378714a0 | ||
|
|
759f022c98 | ||
|
|
5af4d481f2 | ||
|
|
221bb5beb7 | ||
|
|
5a89e86120 | ||
|
|
e351a92680 | ||
|
|
83cd0cfea3 | ||
|
|
9e29f611df | ||
|
|
d8ea4b70a9 | ||
|
|
150ddac2c0 | ||
|
|
5108ad1f6b | ||
|
|
14766ae171 | ||
|
|
ccd91a7b6f | ||
|
|
a894ad85ba | ||
|
|
1da05f5cae | ||
|
|
562f528c01 | ||
|
|
840b0e6205 | ||
| cb4d01c612 | |||
| e6344f1a92 | |||
|
|
3082c261c7 | ||
| abf1966b95 | |||
| d163105d93 | |||
| 092215c3be | |||
| d521bafd43 | |||
| 491eb8fd31 | |||
| a35cb48bef | |||
| 512fa4fd9d | |||
| 25385c0798 | |||
| fa33531d5f | |||
|
|
ce1af8b382 | ||
|
|
e8bee5c9db | ||
|
|
8ce9aece1a | ||
|
|
8b6d73f65e | ||
|
|
6fb1c6dbff |
@@ -1,6 +1,6 @@
|
||||
# This file is machine-generated - editing it directly is not advised
|
||||
|
||||
julia_version = "1.11.2"
|
||||
julia_version = "1.11.4"
|
||||
manifest_format = "2.0"
|
||||
project_hash = "75c6a269a13b222c106479d2177b05facfa23f74"
|
||||
|
||||
@@ -310,7 +310,7 @@ version = "0.3.27+1"
|
||||
[[deps.OpenLibm_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
|
||||
version = "0.8.1+2"
|
||||
version = "0.8.1+4"
|
||||
|
||||
[[deps.OpenSpecFun_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name = "GeneralUtils"
|
||||
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
|
||||
authors = ["tonaerospace <tonaerospace.etc@gmail.com>"]
|
||||
version = "0.2.1"
|
||||
version = "0.3.0"
|
||||
|
||||
[deps]
|
||||
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
|
||||
|
||||
@@ -1,911 +0,0 @@
|
||||
# This file is machine-generated - editing it directly is not advised
|
||||
|
||||
julia_version = "1.9.1"
|
||||
manifest_format = "2.0"
|
||||
project_hash = "91349a0eb57aed703e8465e44731cca768229f09"
|
||||
|
||||
[[deps.AbstractFFTs]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "8bc0aaec0ca548eb6cf5f0d7d16351650c1ee956"
|
||||
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
|
||||
version = "1.3.2"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.AbstractFFTs.extensions]
|
||||
AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.Adapt]]
|
||||
deps = ["LinearAlgebra", "Requires"]
|
||||
git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24"
|
||||
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
|
||||
version = "3.6.2"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.Adapt.extensions]
|
||||
AdaptStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.ArgCheck]]
|
||||
git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4"
|
||||
uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
|
||||
version = "2.3.0"
|
||||
|
||||
[[deps.ArgTools]]
|
||||
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.Artifacts]]
|
||||
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
|
||||
|
||||
[[deps.Atomix]]
|
||||
deps = ["UnsafeAtomics"]
|
||||
git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be"
|
||||
uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.BFloat16s]]
|
||||
deps = ["LinearAlgebra", "Printf", "Random", "Test"]
|
||||
git-tree-sha1 = "dbf84058d0a8cbbadee18d25cf606934b22d7c66"
|
||||
uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.BangBang]]
|
||||
deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"]
|
||||
git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed"
|
||||
uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66"
|
||||
version = "0.3.39"
|
||||
|
||||
[deps.BangBang.extensions]
|
||||
BangBangChainRulesCoreExt = "ChainRulesCore"
|
||||
BangBangDataFramesExt = "DataFrames"
|
||||
BangBangStaticArraysExt = "StaticArrays"
|
||||
BangBangStructArraysExt = "StructArrays"
|
||||
BangBangTypedTablesExt = "TypedTables"
|
||||
|
||||
[deps.BangBang.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9"
|
||||
|
||||
[[deps.Base64]]
|
||||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||
|
||||
[[deps.Baselet]]
|
||||
git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e"
|
||||
uuid = "9718e550-a3fa-408a-8086-8db961cd8217"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.CEnum]]
|
||||
git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
|
||||
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.CUDA]]
|
||||
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "442d989978ed3ff4e174c928ee879dc09d1ef693"
|
||||
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
version = "4.3.2"
|
||||
|
||||
[[deps.CUDA_Driver_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "498f45593f6ddc0adff64a9310bb6710e851781b"
|
||||
uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc"
|
||||
version = "0.5.0+1"
|
||||
|
||||
[[deps.CUDA_Runtime_Discovery]]
|
||||
deps = ["Libdl"]
|
||||
git-tree-sha1 = "bcc4a23cbbd99c8535a5318455dcf0f2546ec536"
|
||||
uuid = "1af6417a-86b4-443c-805f-a4643ffb695f"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.CUDA_Runtime_jll]]
|
||||
deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "5248d9c45712e51e27ba9b30eebec65658c6ce29"
|
||||
uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2"
|
||||
version = "0.6.0+0"
|
||||
|
||||
[[deps.CUDNN_jll]]
|
||||
deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "2918fbffb50e3b7a0b9127617587afa76d4276e8"
|
||||
uuid = "62b44479-cb7b-5706-934f-f13b2eb2e645"
|
||||
version = "8.8.1+0"
|
||||
|
||||
[[deps.Calculus]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
|
||||
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
|
||||
version = "0.5.1"
|
||||
|
||||
[[deps.ChainRules]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"]
|
||||
git-tree-sha1 = "1cdf290d4feec68824bfb84f4bfc9f3aba185647"
|
||||
uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2"
|
||||
version = "1.51.1"
|
||||
|
||||
[[deps.ChainRulesCore]]
|
||||
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
|
||||
git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644"
|
||||
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
version = "1.16.0"
|
||||
|
||||
[[deps.CommonSubexpressions]]
|
||||
deps = ["MacroTools", "Test"]
|
||||
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
|
||||
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
|
||||
version = "0.3.0"
|
||||
|
||||
[[deps.Compat]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957"
|
||||
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
||||
version = "4.6.1"
|
||||
weakdeps = ["Dates", "LinearAlgebra"]
|
||||
|
||||
[deps.Compat.extensions]
|
||||
CompatLinearAlgebraExt = "LinearAlgebra"
|
||||
|
||||
[[deps.CompilerSupportLibraries_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
|
||||
version = "1.0.2+0"
|
||||
|
||||
[[deps.CompositionsBase]]
|
||||
git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
|
||||
uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
|
||||
version = "0.1.2"
|
||||
|
||||
[deps.CompositionsBase.extensions]
|
||||
CompositionsBaseInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.CompositionsBase.weakdeps]
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.ConstructionBase]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c"
|
||||
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
|
||||
version = "1.5.2"
|
||||
|
||||
[deps.ConstructionBase.extensions]
|
||||
ConstructionBaseIntervalSetsExt = "IntervalSets"
|
||||
ConstructionBaseStaticArraysExt = "StaticArrays"
|
||||
|
||||
[deps.ConstructionBase.weakdeps]
|
||||
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
|
||||
[[deps.ContextVariablesX]]
|
||||
deps = ["Compat", "Logging", "UUIDs"]
|
||||
git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc"
|
||||
uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5"
|
||||
version = "0.1.3"
|
||||
|
||||
[[deps.DataAPI]]
|
||||
git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630"
|
||||
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
||||
version = "1.14.0"
|
||||
|
||||
[[deps.DataStructures]]
|
||||
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
||||
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
|
||||
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
version = "0.18.13"
|
||||
|
||||
[[deps.DataValueInterfaces]]
|
||||
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
|
||||
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Dates]]
|
||||
deps = ["Printf"]
|
||||
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||
|
||||
[[deps.DefineSingletons]]
|
||||
git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c"
|
||||
uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.DelimitedFiles]]
|
||||
deps = ["Mmap"]
|
||||
git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae"
|
||||
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
|
||||
version = "1.9.1"
|
||||
|
||||
[[deps.DiffResults]]
|
||||
deps = ["StaticArraysCore"]
|
||||
git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621"
|
||||
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.DiffRules]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272"
|
||||
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
|
||||
version = "1.15.1"
|
||||
|
||||
[[deps.Distributed]]
|
||||
deps = ["Random", "Serialization", "Sockets"]
|
||||
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
|
||||
|
||||
[[deps.Distributions]]
|
||||
deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"]
|
||||
git-tree-sha1 = "eead66061583b6807652281c0fbf291d7a9dc497"
|
||||
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
version = "0.25.90"
|
||||
|
||||
[deps.Distributions.extensions]
|
||||
DistributionsChainRulesCoreExt = "ChainRulesCore"
|
||||
DistributionsDensityInterfaceExt = "DensityInterface"
|
||||
|
||||
[deps.Distributions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
|
||||
|
||||
[[deps.DocStringExtensions]]
|
||||
deps = ["LibGit2"]
|
||||
git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
|
||||
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
||||
version = "0.9.3"
|
||||
|
||||
[[deps.Downloads]]
|
||||
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
|
||||
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.DualNumbers]]
|
||||
deps = ["Calculus", "NaNMath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
|
||||
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
|
||||
version = "0.6.8"
|
||||
|
||||
[[deps.ExprTools]]
|
||||
git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00"
|
||||
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
|
||||
version = "0.1.9"
|
||||
|
||||
[[deps.FLoops]]
|
||||
deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"]
|
||||
git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576"
|
||||
uuid = "cc61a311-1640-44b5-9fba-1b764f453329"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.FLoopsBase]]
|
||||
deps = ["ContextVariablesX"]
|
||||
git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7"
|
||||
uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.FileWatching]]
|
||||
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
||||
|
||||
[[deps.FillArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
|
||||
git-tree-sha1 = "fc86b4fd3eff76c3ce4f5e96e2fdfa6282722885"
|
||||
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Flux]]
|
||||
deps = ["Adapt", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote", "cuDNN"]
|
||||
git-tree-sha1 = "3e2c3704c2173ab4b1935362384ca878b53d4c34"
|
||||
uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
version = "0.13.17"
|
||||
|
||||
[deps.Flux.extensions]
|
||||
AMDGPUExt = "AMDGPU"
|
||||
FluxMetalExt = "Metal"
|
||||
|
||||
[deps.Flux.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
|
||||
|
||||
[[deps.ForwardDiff]]
|
||||
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d"
|
||||
uuid = "f6369f11-7733-5829-9624-2563aa707210"
|
||||
version = "0.10.35"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.ForwardDiff.extensions]
|
||||
ForwardDiffStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.Functors]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "478f8c3145bb91d82c2cf20433e8c1b30df454cc"
|
||||
uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
|
||||
version = "0.4.4"
|
||||
|
||||
[[deps.Future]]
|
||||
deps = ["Random"]
|
||||
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
|
||||
|
||||
[[deps.GPUArrays]]
|
||||
deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"]
|
||||
git-tree-sha1 = "2e57b4a4f9cc15e85a24d603256fe08e527f48d1"
|
||||
uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7"
|
||||
version = "8.8.1"
|
||||
|
||||
[[deps.GPUArraysCore]]
|
||||
deps = ["Adapt"]
|
||||
git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0"
|
||||
uuid = "46192b85-c4d5-4398-a991-12ede77f4527"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.GPUCompiler]]
|
||||
deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"]
|
||||
git-tree-sha1 = "cb090aea21c6ca78d59672a7e7d13bd56d09de64"
|
||||
uuid = "61eb1bfa-7361-4325-ad38-22787b887f55"
|
||||
version = "0.20.3"
|
||||
|
||||
[[deps.HypergeometricFunctions]]
|
||||
deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
|
||||
git-tree-sha1 = "84204eae2dd237500835990bcade263e27674a93"
|
||||
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
|
||||
version = "0.3.16"
|
||||
|
||||
[[deps.IRTools]]
|
||||
deps = ["InteractiveUtils", "MacroTools", "Test"]
|
||||
git-tree-sha1 = "eac00994ce3229a464c2847e956d77a2c64ad3a5"
|
||||
uuid = "7869d1d1-7146-5819-86e3-90919afe41df"
|
||||
version = "0.4.10"
|
||||
|
||||
[[deps.InitialValues]]
|
||||
git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3"
|
||||
uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c"
|
||||
version = "0.3.1"
|
||||
|
||||
[[deps.InteractiveUtils]]
|
||||
deps = ["Markdown"]
|
||||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||||
|
||||
[[deps.IrrationalConstants]]
|
||||
git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
|
||||
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.IteratorInterfaceExtensions]]
|
||||
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
|
||||
uuid = "82899510-4779-5014-852e-03e436cf321d"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.JLLWrappers]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
|
||||
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
|
||||
version = "1.4.1"
|
||||
|
||||
[[deps.JSON3]]
|
||||
deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"]
|
||||
git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683"
|
||||
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
version = "1.12.0"
|
||||
|
||||
[[deps.JuliaVariables]]
|
||||
deps = ["MLStyle", "NameResolution"]
|
||||
git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70"
|
||||
uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.KernelAbstractions]]
|
||||
deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "b48617c5d764908b5fac493cd907cf33cc11eec1"
|
||||
uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
|
||||
version = "0.9.6"
|
||||
|
||||
[[deps.LLVM]]
|
||||
deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"]
|
||||
git-tree-sha1 = "5007c1421563108110bbd57f63d8ad4565808818"
|
||||
uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
|
||||
version = "5.2.0"
|
||||
|
||||
[[deps.LLVMExtra_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "1222116d7313cdefecf3d45a2bc1a89c4e7c9217"
|
||||
uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
|
||||
version = "0.0.22+0"
|
||||
|
||||
[[deps.LazyArtifacts]]
|
||||
deps = ["Artifacts", "Pkg"]
|
||||
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
|
||||
|
||||
[[deps.LibCURL]]
|
||||
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
||||
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
||||
version = "0.6.3"
|
||||
|
||||
[[deps.LibCURL_jll]]
|
||||
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
|
||||
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
|
||||
version = "7.84.0+0"
|
||||
|
||||
[[deps.LibGit2]]
|
||||
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||
|
||||
[[deps.LibSSH2_jll]]
|
||||
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
|
||||
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
|
||||
version = "1.10.2+0"
|
||||
|
||||
[[deps.Libdl]]
|
||||
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
|
||||
|
||||
[[deps.LinearAlgebra]]
|
||||
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
|
||||
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||||
|
||||
[[deps.LogExpFunctions]]
|
||||
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
|
||||
git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b"
|
||||
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
|
||||
version = "0.3.23"
|
||||
|
||||
[deps.LogExpFunctions.extensions]
|
||||
LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
|
||||
LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.LogExpFunctions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.Logging]]
|
||||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||
|
||||
[[deps.MLStyle]]
|
||||
git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8"
|
||||
uuid = "d8e11817-5142-5d16-987a-aa16d5891078"
|
||||
version = "0.4.17"
|
||||
|
||||
[[deps.MLUtils]]
|
||||
deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"]
|
||||
git-tree-sha1 = "3504cdb8c2bc05bde4d4b09a81b01df88fcbbba0"
|
||||
uuid = "f1d291b0-491e-4a28-83b9-f70985020b54"
|
||||
version = "0.4.3"
|
||||
|
||||
[[deps.MacroTools]]
|
||||
deps = ["Markdown", "Random"]
|
||||
git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
|
||||
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
|
||||
version = "0.5.10"
|
||||
|
||||
[[deps.Markdown]]
|
||||
deps = ["Base64"]
|
||||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||||
|
||||
[[deps.MbedTLS_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
|
||||
version = "2.28.2+0"
|
||||
|
||||
[[deps.MicroCollections]]
|
||||
deps = ["BangBang", "InitialValues", "Setfield"]
|
||||
git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e"
|
||||
uuid = "128add7d-3638-4c79-886c-908ea0c25c34"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.Missings]]
|
||||
deps = ["DataAPI"]
|
||||
git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272"
|
||||
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.Mmap]]
|
||||
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
||||
|
||||
[[deps.MozillaCACerts_jll]]
|
||||
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
|
||||
version = "2022.10.11"
|
||||
|
||||
[[deps.NNlib]]
|
||||
deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"]
|
||||
git-tree-sha1 = "72240e3f5ca031937bd536182cb2c031da5f46dd"
|
||||
uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
|
||||
version = "0.8.21"
|
||||
|
||||
[deps.NNlib.extensions]
|
||||
NNlibAMDGPUExt = "AMDGPU"
|
||||
|
||||
[deps.NNlib.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
|
||||
[[deps.NNlibCUDA]]
|
||||
deps = ["Adapt", "CUDA", "LinearAlgebra", "NNlib", "Random", "Statistics", "cuDNN"]
|
||||
git-tree-sha1 = "f94a9684394ff0d325cc12b06da7032d8be01aaf"
|
||||
uuid = "a00861dc-f156-4864-bf3c-e6376f28a68d"
|
||||
version = "0.2.7"
|
||||
|
||||
[[deps.NaNMath]]
|
||||
deps = ["OpenLibm_jll"]
|
||||
git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
|
||||
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
|
||||
version = "1.0.2"
|
||||
|
||||
[[deps.NameResolution]]
|
||||
deps = ["PrettyPrint"]
|
||||
git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e"
|
||||
uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.NetworkOptions]]
|
||||
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.OneHotArrays]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"]
|
||||
git-tree-sha1 = "5e4029759e8699ec12ebdf8721e51a659443403c"
|
||||
uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.OpenBLAS_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
||||
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
|
||||
version = "0.3.21+4"
|
||||
|
||||
[[deps.OpenLibm_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
|
||||
version = "0.8.1+0"
|
||||
|
||||
[[deps.OpenSpecFun_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
|
||||
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
|
||||
version = "0.5.5+0"
|
||||
|
||||
[[deps.Optimisers]]
|
||||
deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"]
|
||||
git-tree-sha1 = "6a01f65dd8583dee82eecc2a19b0ff21521aa749"
|
||||
uuid = "3bd65402-5787-11e9-1adc-39752487f4e2"
|
||||
version = "0.2.18"
|
||||
|
||||
[[deps.OrderedCollections]]
|
||||
git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282"
|
||||
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.PDMats]]
|
||||
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
|
||||
git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1"
|
||||
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
|
||||
version = "0.11.17"
|
||||
|
||||
[[deps.Parsers]]
|
||||
deps = ["Dates", "SnoopPrecompile"]
|
||||
git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf"
|
||||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||||
version = "2.5.8"
|
||||
|
||||
[[deps.Pkg]]
|
||||
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
||||
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
|
||||
version = "1.9.0"
|
||||
|
||||
[[deps.PrecompileTools]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81"
|
||||
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
|
||||
version = "1.1.2"
|
||||
|
||||
[[deps.Preferences]]
|
||||
deps = ["TOML"]
|
||||
git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1"
|
||||
uuid = "21216c6a-2e73-6563-6e65-726566657250"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.PrettyPrint]]
|
||||
git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4"
|
||||
uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98"
|
||||
version = "0.2.0"
|
||||
|
||||
[[deps.Printf]]
|
||||
deps = ["Unicode"]
|
||||
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||||
|
||||
[[deps.ProgressLogging]]
|
||||
deps = ["Logging", "SHA", "UUIDs"]
|
||||
git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539"
|
||||
uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.QuadGK]]
|
||||
deps = ["DataStructures", "LinearAlgebra"]
|
||||
git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee"
|
||||
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
|
||||
version = "2.8.2"
|
||||
|
||||
[[deps.REPL]]
|
||||
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
||||
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||||
|
||||
[[deps.Random]]
|
||||
deps = ["SHA", "Serialization"]
|
||||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||
|
||||
[[deps.Random123]]
|
||||
deps = ["Random", "RandomNumbers"]
|
||||
git-tree-sha1 = "552f30e847641591ba3f39fd1bed559b9deb0ef3"
|
||||
uuid = "74087812-796a-5b5d-8853-05524746bad3"
|
||||
version = "1.6.1"
|
||||
|
||||
[[deps.RandomNumbers]]
|
||||
deps = ["Random", "Requires"]
|
||||
git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111"
|
||||
uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
|
||||
version = "1.5.3"
|
||||
|
||||
[[deps.RealDot]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9"
|
||||
uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.Reexport]]
|
||||
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
|
||||
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
||||
version = "1.2.2"
|
||||
|
||||
[[deps.Requires]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
||||
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
|
||||
version = "1.3.0"
|
||||
|
||||
[[deps.Rmath]]
|
||||
deps = ["Random", "Rmath_jll"]
|
||||
git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b"
|
||||
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
|
||||
version = "0.7.1"
|
||||
|
||||
[[deps.Rmath_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da"
|
||||
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
|
||||
version = "0.4.0+0"
|
||||
|
||||
[[deps.SHA]]
|
||||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||||
version = "0.7.0"
|
||||
|
||||
[[deps.Scratch]]
|
||||
deps = ["Dates"]
|
||||
git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a"
|
||||
uuid = "6c6a2e73-6563-6170-7368-637461726353"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.Serialization]]
|
||||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||||
|
||||
[[deps.Setfield]]
|
||||
deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"]
|
||||
git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac"
|
||||
uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.ShowCases]]
|
||||
git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5"
|
||||
uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.SimpleTraits]]
|
||||
deps = ["InteractiveUtils", "MacroTools"]
|
||||
git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231"
|
||||
uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
|
||||
version = "0.9.4"
|
||||
|
||||
[[deps.SnoopPrecompile]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c"
|
||||
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.Sockets]]
|
||||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||||
|
||||
[[deps.SortingAlgorithms]]
|
||||
deps = ["DataStructures"]
|
||||
git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00"
|
||||
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.SparseArrays]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
|
||||
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
|
||||
|
||||
[[deps.SpecialFunctions]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
|
||||
git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880"
|
||||
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
|
||||
version = "2.2.0"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.SpecialFunctions.extensions]
|
||||
SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.SplittablesBase]]
|
||||
deps = ["Setfield", "Test"]
|
||||
git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5"
|
||||
uuid = "171d559e-b47b-412a-8079-5efa626c420e"
|
||||
version = "0.1.15"
|
||||
|
||||
[[deps.StaticArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"]
|
||||
git-tree-sha1 = "832afbae2a45b4ae7e831f86965469a24d1d8a83"
|
||||
uuid = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
version = "1.5.26"
|
||||
|
||||
[[deps.StaticArraysCore]]
|
||||
git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a"
|
||||
uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.Statistics]]
|
||||
deps = ["LinearAlgebra", "SparseArrays"]
|
||||
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||||
version = "1.9.0"
|
||||
|
||||
[[deps.StatsAPI]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7"
|
||||
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.StatsBase]]
|
||||
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
|
||||
git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4"
|
||||
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
||||
version = "0.34.0"
|
||||
|
||||
[[deps.StatsFuns]]
|
||||
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a"
|
||||
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
|
||||
version = "1.3.0"
|
||||
|
||||
[deps.StatsFuns.extensions]
|
||||
StatsFunsChainRulesCoreExt = "ChainRulesCore"
|
||||
StatsFunsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.StatsFuns.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.StructArrays]]
|
||||
deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"]
|
||||
git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389"
|
||||
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
version = "0.6.15"
|
||||
|
||||
[[deps.StructTypes]]
|
||||
deps = ["Dates", "UUIDs"]
|
||||
git-tree-sha1 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70"
|
||||
uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.SuiteSparse]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
|
||||
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
|
||||
|
||||
[[deps.SuiteSparse_jll]]
|
||||
deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"]
|
||||
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
|
||||
version = "5.10.1+6"
|
||||
|
||||
[[deps.TOML]]
|
||||
deps = ["Dates"]
|
||||
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.TableTraits]]
|
||||
deps = ["IteratorInterfaceExtensions"]
|
||||
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
|
||||
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
|
||||
version = "1.0.1"
|
||||
|
||||
[[deps.Tables]]
|
||||
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
|
||||
git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec"
|
||||
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
|
||||
version = "1.10.1"
|
||||
|
||||
[[deps.Tar]]
|
||||
deps = ["ArgTools", "SHA"]
|
||||
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.Test]]
|
||||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||
|
||||
[[deps.TimerOutputs]]
|
||||
deps = ["ExprTools", "Printf"]
|
||||
git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7"
|
||||
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
|
||||
version = "0.5.23"
|
||||
|
||||
[[deps.Transducers]]
|
||||
deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
|
||||
git-tree-sha1 = "a66fb81baec325cf6ccafa243af573b031e87b00"
|
||||
uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999"
|
||||
version = "0.4.77"
|
||||
|
||||
[deps.Transducers.extensions]
|
||||
TransducersBlockArraysExt = "BlockArrays"
|
||||
TransducersDataFramesExt = "DataFrames"
|
||||
TransducersLazyArraysExt = "LazyArrays"
|
||||
TransducersOnlineStatsBaseExt = "OnlineStatsBase"
|
||||
TransducersReferenceablesExt = "Referenceables"
|
||||
|
||||
[deps.Transducers.weakdeps]
|
||||
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
|
||||
OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338"
|
||||
Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
|
||||
|
||||
[[deps.UUIDs]]
|
||||
deps = ["Random", "SHA"]
|
||||
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
||||
|
||||
[[deps.Unicode]]
|
||||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
||||
|
||||
[[deps.UnsafeAtomics]]
|
||||
git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278"
|
||||
uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.UnsafeAtomicsLLVM]]
|
||||
deps = ["LLVM", "UnsafeAtomics"]
|
||||
git-tree-sha1 = "ea37e6066bf194ab78f4e747f5245261f17a7175"
|
||||
uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.Zlib_jll]]
|
||||
deps = ["Libdl"]
|
||||
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
|
||||
version = "1.2.13+0"
|
||||
|
||||
[[deps.Zygote]]
|
||||
deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"]
|
||||
git-tree-sha1 = "5be3ddb88fc992a7d8ea96c3f10a49a7e98ebc7b"
|
||||
uuid = "e88e6eb3-aa80-5325-afca-941959d7151f"
|
||||
version = "0.6.62"
|
||||
|
||||
[deps.Zygote.extensions]
|
||||
ZygoteColorsExt = "Colors"
|
||||
ZygoteDistancesExt = "Distances"
|
||||
ZygoteTrackerExt = "Tracker"
|
||||
|
||||
[deps.Zygote.weakdeps]
|
||||
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
|
||||
Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
|
||||
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
|
||||
|
||||
[[deps.ZygoteRules]]
|
||||
deps = ["ChainRulesCore", "MacroTools"]
|
||||
git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d"
|
||||
uuid = "700de1a5-db45-46bc-99cf-38207098b444"
|
||||
version = "0.2.3"
|
||||
|
||||
[[deps.cuDNN]]
|
||||
deps = ["CEnum", "CUDA", "CUDNN_jll"]
|
||||
git-tree-sha1 = "f65490d187861d6222cb38bcbbff3fd949a7ec3e"
|
||||
uuid = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd"
|
||||
version = "1.0.4"
|
||||
|
||||
[[deps.libblastrampoline_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
||||
version = "5.8.0+0"
|
||||
|
||||
[[deps.nghttp2_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
|
||||
version = "1.48.0+0"
|
||||
|
||||
[[deps.p7zip_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
|
||||
version = "17.4.0+0"
|
||||
@@ -1,11 +0,0 @@
|
||||
name = "GeneralUtils"
|
||||
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
|
||||
authors = ["tonaerospace <tonaerospace.etc@gmail.com>"]
|
||||
version = "0.1.0"
|
||||
|
||||
[deps]
|
||||
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
@@ -1,81 +0,0 @@
|
||||
module GeneralUtils
|
||||
|
||||
|
||||
export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue
|
||||
|
||||
|
||||
include("interface.jl")
|
||||
using .interface
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" version 0.0.1
|
||||
Todo:
|
||||
- []
|
||||
|
||||
Change from version:
|
||||
-
|
||||
|
||||
All features
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # generalUtils
|
||||
@@ -1,813 +0,0 @@
|
||||
module interface
|
||||
|
||||
|
||||
export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue, replaceMoreThan,
|
||||
replaceLessThan, cartesianAssign!, sumAlongDim3, matMul_3Dto3D_manyTo1batch,
|
||||
matMul_3Dto4D_batchwise
|
||||
|
||||
using JSON3, DataStructures, Distributions, Flux, CUDA
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
noNegative!(a::AbstractVector) = replace!(x -> x < 0 ? 0 : x, a)
|
||||
findNotZero(x::AbstractVector) = findall( (!iszero).(x) )
|
||||
replaceMoreThan(i, target) = i > target ? target : i
|
||||
replaceLessThan(i, target) = i < target ? target : i
|
||||
precision(x::Array{<:Array}) = ( std(mean.(x)) / mean(mean.(x)) ) * 100
|
||||
precision(x::Array) = std(x) / mean(x) * 100
|
||||
replaceAt!(x::AbstractVector, ind::Number, value::Number) = x[ind] = value
|
||||
notZero(x::AbstractVector) = (!iszero).(x)
|
||||
Zero(x::AbstractVector) = iszero.(x)
|
||||
isNan(x::AbstractVector) = isnan.(x)
|
||||
isInf(x::Number) = abs(x) === Inf
|
||||
isInf(x::AbstractVector) = isinf.(x)
|
||||
isLess(x::AbstractVector, target::Number) = isless.(x, target)
|
||||
isMore(x::Number, target::Number) = x > target
|
||||
isMore(x::AbstractVector, target::Number) = isMore.(x, target)
|
||||
absolute(x::AbstractVector) = abs.(x)
|
||||
vecEleMul(x::AbstractVector, y::AbstractVector) = x .* y
|
||||
vecEleMul(x::Number, y::AbstractVector) = x .* y
|
||||
expDecay(initialValue::Number, decayFactor::Number, timePass::Number) =
|
||||
initialValue * (1 - decayFactor)^timePass
|
||||
mul!(x::AbstractVector, y::AbstractVector) = x .*= y
|
||||
mul(x::AbstractVector, y::AbstractVector) = x .* y
|
||||
|
||||
ReLu(x::Number) = max(0, x)
|
||||
|
||||
updateVector!(x::AbstractVector, target::Number) = x .= target
|
||||
updateVector!(x::AbstractVector, target::AbstractArray) = x .= target
|
||||
|
||||
function selectAdd!(x::AbstractVector, ind::AbstractVector, value::AbstractVector)
|
||||
@. x = x + (ind * value)
|
||||
end
|
||||
|
||||
|
||||
""" findIndex(input::String, target::Char)
|
||||
|
||||
Find target index inside a collection.
|
||||
Return 1) Bool array of matched target
|
||||
2) CartesianIndex of every matched target
|
||||
"""
|
||||
function findIndex(input::String, target::Char)
|
||||
match_position = []
|
||||
for i in input
|
||||
if i == target
|
||||
append!(match_position, 1)
|
||||
else
|
||||
append!(match_position, 0)
|
||||
end
|
||||
end
|
||||
match_index = findall(isequal.(match_position, 1))
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(input::Array, target::Number)
|
||||
match_position = isequal.(input, target)
|
||||
match_index = findall(match_position)
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
# function findIndex(input::Array, target::Array)
|
||||
# match_position = isone.(zeros(length(input)))
|
||||
# for i in target
|
||||
# match_position = match_position + isequal.(input, i)
|
||||
# end
|
||||
|
||||
# match_position = replaceMoreThan.(match_position, 1)
|
||||
# match_index = findall(isone.(match_position)) # Findall donot work with Int64 vector [1, 0, 0, 1].
|
||||
# # It only works with BitVector. isone() converts Int64 vector [1, 0, 0, 1] into
|
||||
# # BitVector [1, 0, 0, 1]
|
||||
|
||||
# return match_position, match_index
|
||||
# end
|
||||
|
||||
function findIndex(input::Array, target::Symbol)
|
||||
match_position = isequal.(input, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::Array{String}, target::String)
|
||||
match_position = isequal.(collection, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::Array{String}, target::Array{String})
|
||||
match_position = nothing
|
||||
match_index = nothing
|
||||
|
||||
for i in target
|
||||
match_pos = isequal.(collection, i)
|
||||
match_ind = findall(match_pos)
|
||||
|
||||
if match_position === nothing
|
||||
match_position = match_pos
|
||||
|
||||
else
|
||||
match_position = hcat(match_position, match_pos)
|
||||
end
|
||||
|
||||
if match_index === nothing
|
||||
match_index = match_ind
|
||||
else
|
||||
match_index = hcat(match_index, match_ind)
|
||||
end
|
||||
end
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::OrderedDict, target::Symbol)
|
||||
collection_keys = keys(collection)
|
||||
collection_keys_array = [i for i in collection_keys]
|
||||
match_position = isequal.(collection_keys_array, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findMax(collection::AbstractVector)
|
||||
maxValue, maxIndex = findmax(collection)
|
||||
matchPosition = isequal.(collection, maxValue)
|
||||
return maxValue, maxIndex, matchPosition
|
||||
end
|
||||
|
||||
|
||||
|
||||
""" read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
|
||||
|
||||
with multiple text file in a folder,
|
||||
this function read x_th text file in a folder (filename is sorted by OS)
|
||||
|
||||
# Example
|
||||
utils.read_textfile_by_index(cleaned_data_path, 2)
|
||||
read 2nd txt file in a folder
|
||||
"""
|
||||
function read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
|
||||
if isdir(folder_path)
|
||||
filenumber = length(readdir(folder_path))
|
||||
|
||||
if read_file_number > filenumber
|
||||
error("you specified read_file_number = $read_file_number which is out
|
||||
of range, the cleaned data folder has only $filenumber files")
|
||||
return nothing, nothing, nothing
|
||||
else
|
||||
content = 0
|
||||
# open each file in the directory and read
|
||||
filename = readdir(folder_path, join=true, sort=false)[read_file_number]
|
||||
f = open(filename)
|
||||
content = readlines(f)
|
||||
# content = read(f)
|
||||
close(f)
|
||||
end
|
||||
|
||||
return read_file_number, filename, content
|
||||
else
|
||||
error("ERROR no file or folder at $folder_path")
|
||||
return nothing, nothing, nothing
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" Array_to_JSON3_str(data::AbstractArray)
|
||||
|
||||
encode Array to JSON3 String
|
||||
|
||||
# Example
|
||||
|
||||
a = [1.23 4.7889; 9987.1 -123.07; -0.0027 -6.75]
|
||||
json3_str = Array_to_JSON3_str(a)
|
||||
|
||||
json3_str = {"Array":[1.23,9987.1,-0.0027,4.7889,-123.07,-6.75],"size":[3,2]}
|
||||
"""
|
||||
function Array_to_JSON3_str(data::AbstractArray)
|
||||
d = Dict("Array"=> data, "size"=>size(data))
|
||||
json3_str = JSON3.write(d)
|
||||
return json3_str
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" JSON3_str_to_Array(json3_str::String)
|
||||
|
||||
decode JSON3 String to Array
|
||||
|
||||
# Example
|
||||
|
||||
json3_str = {"Array":[1.23,9987.1,-0.0027,4.7889,-123.07,-6.75],"size":[3,2]}
|
||||
a = JSON3_str_to_Array(json3_str)
|
||||
|
||||
a = [1.23 4.7889; 9987.1 -123.07; -0.0027 -6.75]
|
||||
"""
|
||||
function JSON3_str_to_Array(json3_str::String)
|
||||
d = JSON3.read(json3_str)
|
||||
array = reshape(Array(d.Array), (d.size[1], d.size[2]))
|
||||
return array
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" Convert JSON3.read object to OrderedDict
|
||||
|
||||
# Example
|
||||
dict = dictionary(["a"=>4, "b"=>6])
|
||||
OrDict = OrderedDict(dict)
|
||||
jsonString = JSON3.write(OrDict) # use jsonString to exchange. One can save it to file or send it thru pub/sub
|
||||
jsonObject = JSON3.read(jsonString)
|
||||
OrDict2 = JSON3read_to_OrDict(jsonObject) # example here
|
||||
Adict2 = dictionary(OrDict2)
|
||||
|
||||
Andyferris's github https://github.com/andyferris/Dictionaries.jl
|
||||
"""
|
||||
function JSON3read_to_OrDict(x)
|
||||
dict = OrderedDict()
|
||||
for (k, v) in x
|
||||
k = string(k)
|
||||
dict[k] = v
|
||||
end
|
||||
return dict
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
"""
|
||||
print time of cpu executtion at the line inwhich this macro is used
|
||||
"""
|
||||
macro timeline(expr)
|
||||
quote
|
||||
print("line ", $(__source__.line), ": ")
|
||||
@time $(esc(expr))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
batchindex(batch_counter::Number, batch_size::Number; offset=0) =
|
||||
(offset + (batch_counter-1) * batch_size + 1) : offset + (batch_counter * batch_size)
|
||||
|
||||
function flip_true_false(x::Bool)
|
||||
if x == true
|
||||
x = false
|
||||
elseif x == false
|
||||
x = true
|
||||
else
|
||||
error("undefined condition line $(@__LINE__)")
|
||||
end
|
||||
|
||||
return x
|
||||
end
|
||||
|
||||
function flip_true_false(x::Int)
|
||||
if x == 1
|
||||
x = 0
|
||||
elseif x == 0
|
||||
x = 1
|
||||
else
|
||||
throw("not define input of type $(typeof(x)) yet")
|
||||
end
|
||||
|
||||
return x
|
||||
end
|
||||
|
||||
"""
|
||||
Return drawed index
|
||||
# Example
|
||||
drawed_index = randomWithProb([0.5, 0.2, 0.3])
|
||||
|
||||
"""
|
||||
randomWithProb(probability::AbstractVector) = rand(Distributions.Categorical(probability)) # return drawed index
|
||||
|
||||
"""
|
||||
Draw from choices according to its probability.
|
||||
Probability range is 0.0 to 1.0 and all probability must summed up to 1
|
||||
(may get probability from NNlib's softmax function)
|
||||
|
||||
# Example
|
||||
|
||||
draw = draw_choices([true, false, nothing], [0.5, 0.2, 0.3])
|
||||
"""
|
||||
function randomChoiceWithProb(choices::Array, probability::Array)
|
||||
if length(choices) != length(probability)
|
||||
error("random is not possible, choices array length != probability array length")
|
||||
elseif sum(probability) != 1.0
|
||||
error("probability does not sum to 1.0")
|
||||
end
|
||||
|
||||
return choices[randomWithProb(probability)]
|
||||
end
|
||||
|
||||
function randomChoiceOnTarget(target::Number, targetMatch::Number, choices::AbstractVector,
|
||||
probability::AbstractVector)
|
||||
if length(choices) != length(probability)
|
||||
throw("random is not possible, choices array length != probability array length")
|
||||
end
|
||||
return target == targetMatch ? randomChoiceWithProb(choices, probability) : target
|
||||
# dist = Distributions.Categorical(probability)
|
||||
# draw_result = choices[rand(dist)]
|
||||
end
|
||||
|
||||
function randomChoiceOnTarget(target::AbstractVector, choiceList::AbstractVector,
|
||||
probability::AbstractVector)
|
||||
return randomChoiceOnTarget.(target, 1, (choiceList,), (probability,))
|
||||
end
|
||||
|
||||
function linearly_weighted_avg(a::Array)
|
||||
total = 0.0
|
||||
for (i, v) in enumerate(a)
|
||||
total = total + (i * v)
|
||||
end
|
||||
|
||||
return total / sum(a)
|
||||
end
|
||||
|
||||
|
||||
""" Convert String that is holded inside a variable to Symbol
|
||||
# Example
|
||||
x = "hello" # x is a variable holding String "hello" \n
|
||||
y = variable_to_symbol(x) # y holds :hello
|
||||
"""
|
||||
function variable_str_to_symbol(variable)
|
||||
semi = :($variable)
|
||||
symbol = Symbol(semi)
|
||||
|
||||
return symbol
|
||||
end
|
||||
|
||||
|
||||
""" get useable type of specified fieldname inside a composite struct
|
||||
|
||||
# Example
|
||||
julia> @Base.kwdef mutable struct some_struct
|
||||
a::Union{Bool, Nothing} = nothing
|
||||
b::Union{Float64, Nothing} = nothing
|
||||
c::Union{Int64, AbstractFloat} = 3.5
|
||||
d::Union{String, Nothing} = nothing
|
||||
end
|
||||
|
||||
julia> a = some_struct()
|
||||
julia> fieldname_useable_type(some_struct, :c) =result=> [Int64, Float64]
|
||||
"""
|
||||
function fieldname_useable_type(somestruct, fieldname::Symbol;
|
||||
test_types=[2.0, 2, true, :h, "str", 'c', missing, nothing])::Vector{DataType}
|
||||
new_instance = somestruct()
|
||||
useable_type = []
|
||||
|
||||
for i in test_types
|
||||
try
|
||||
new_instance.:($fieldname) = i
|
||||
type = typeof(new_instance.:($fieldname))
|
||||
if type ∉ useable_type
|
||||
push!(useable_type, type)
|
||||
end
|
||||
catch
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return useable_type
|
||||
end
|
||||
|
||||
|
||||
function randomNoRepeat(drawOptions::Array, draw_number::Integer;
|
||||
exclude_list::Union{AbstractArray,Nothing}=nothing)
|
||||
draw_option = copy(drawOptions)
|
||||
draw_option = isnothing(exclude_list) ? draw_option :
|
||||
filter!(x -> x ∉ exclude_list, draw_option)
|
||||
shuffle!(draw_option)
|
||||
drawed_items = []
|
||||
while length(drawed_items) < draw_number
|
||||
push!(drawed_items, pop!(draw_option))
|
||||
end
|
||||
return drawed_items
|
||||
end
|
||||
|
||||
""" using cron to schedule backup job by
|
||||
1. sudo nano /etc/crontab <<< this is a system-wide cron file
|
||||
2. to execute julia file @ 2.00am everyday add the following line at the buttom of the file
|
||||
0 2 * * * root julia-1.7 /home/syncthing_backup_script.jl
|
||||
|
||||
Requirements using Dates
|
||||
"""
|
||||
function folderBackup(sourceFolderAbsolutePath::String, # absolute path to folder to be backuped
|
||||
backupFolderAbsolutePath::String; # absolute path to folder used to store backup file
|
||||
totalBackupFiles::Integer=7, # total backup file, the oldest will be deleted
|
||||
containerName::Union{Array{String}, Nothing}=nothing) # container using source_folder
|
||||
|
||||
sep = (Sys.iswindows() ? "\\" : '/')
|
||||
|
||||
if sourceFolderAbsolutePath[end] == sep
|
||||
sourceFolderAbsolutePath = sourceFolderAbsolutePath[1:end-1]
|
||||
end
|
||||
if backupFolderAbsolutePath[end] != sl
|
||||
backupFolderAbsolutePath = backupFolderAbsolutePath * sep
|
||||
end
|
||||
|
||||
if isdir(backupFolderAbsolutePath)
|
||||
else
|
||||
mkpath(backupFolderAbsolutePath)
|
||||
end
|
||||
|
||||
# stop running docker container service
|
||||
if containerName !== nothing
|
||||
println("stop running services")
|
||||
for i in containerName
|
||||
try run(`docker stop $i`) catch; end
|
||||
sleep(10) # wait for services to stop
|
||||
end
|
||||
end
|
||||
|
||||
# do backup
|
||||
println("doing backup now")
|
||||
timestamp = string(Dates.now())
|
||||
name = split(sourceFolderAbsolutePath, sep)[end] * "--"
|
||||
filename = name * timestamp * ".zip" # resulting compressed filename
|
||||
run(`chmod -R a+rwx $sourceFolderAbsolutePath`)
|
||||
# zip -r [destination+filename] [source folder to be zipped]
|
||||
run(`zip -r $(backupFolderAbsolutePath * filename) $sourceFolderAbsolutePath`)
|
||||
|
||||
# check if total backup file is more than user specified, if yes, delete the oldest backup
|
||||
backupFiles = readdir(backupFolderAbsolutePath)
|
||||
|
||||
while length(backupFiles) > totalBackupFiles
|
||||
run(`rm $(backupFolderAbsolutePath * backupFiles[1])`)
|
||||
backupFiles = readdir(backupFolderAbsolutePath)
|
||||
end
|
||||
|
||||
# start docker services
|
||||
if containerName !== nothing
|
||||
println("start services")
|
||||
for i in containerName
|
||||
try run(`docker start $i`) catch; end
|
||||
sleep(10) # wait for services to stop
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lowerclip!(data::AbstractVector, lowerbound::Number)
|
||||
replace!(x -> x < lowerbound ? lowerbound : x, data)
|
||||
end
|
||||
|
||||
function upperclip!(data::AbstractVector, upperbound::Number)
|
||||
replace!(x -> x > upperbound ? upperbound : x, data)
|
||||
end
|
||||
|
||||
function normalise(x::AbstractArray, mu, std)
|
||||
ϵ = oftype(x[1], 1e-5)
|
||||
μ = mu
|
||||
# σ = std(x, dims=dims, mean=μ, corrected=false) # use this when Zygote#478 gets merged
|
||||
σ = std
|
||||
return (x .- μ) ./ (σ .+ ϵ)
|
||||
end
|
||||
|
||||
function minMaxScaler(x::AbstractVector)
|
||||
min = findmin(x)[1]
|
||||
max = findmax(x)[1]
|
||||
|
||||
scaler(a::Number, min::Number, max::Number) = (a-min) / (max-min)
|
||||
return scaler.(x, min, max)
|
||||
end
|
||||
|
||||
""" a = [-1e200, -1e-200, 1e200, 1e-200] \n
|
||||
result = vtclamp.(a, 1e-6, 1e6, -1e6, -1e-6)
|
||||
"""
|
||||
function customclamp(x::Number, poslo::Number, poshi::Number,
|
||||
neglo::Number, neghi::Number)
|
||||
signx = sign(x)
|
||||
if signx == -1
|
||||
if neghi < x < 0
|
||||
return neghi
|
||||
elseif x < neglo
|
||||
return neglo
|
||||
else
|
||||
return x
|
||||
end
|
||||
elseif signx == +1
|
||||
if poshi < x
|
||||
return poshi
|
||||
elseif 0 < x < poslo
|
||||
return poslo
|
||||
else
|
||||
return x
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function unitVec(x::AbstractVector)
|
||||
y = √(sum(x.^2))
|
||||
return x./y
|
||||
end
|
||||
|
||||
function replaceAt!(x::AbstractVector, ind::AbstractVector, value::Number)
|
||||
for i in ind
|
||||
x[i] = value
|
||||
end
|
||||
end
|
||||
|
||||
function signbitVec(x::AbstractVector)
|
||||
sign = signbit.(x) * 1
|
||||
signVec = replace(s -> s == 0 ? -1 : s, sign)
|
||||
return signVec
|
||||
end
|
||||
|
||||
function deleteall!(x::AbstractVector)
|
||||
for i in 1:length(x)
|
||||
deleteat!(x, 1)
|
||||
end
|
||||
end
|
||||
|
||||
""" Select specific range of vectors in a dict, return a new dict
|
||||
# Example
|
||||
dict = Dict(:a => [1:5...],
|
||||
:b => [6:10...])
|
||||
|
||||
call -> selectRange(dict, 1:3)
|
||||
return -> Dict{Any, Any} with 2 entries:
|
||||
:a => [1, 2, 3]
|
||||
:b => [6, 7, 8]
|
||||
"""
|
||||
function selectRange(d::Dict{Symbol, <:AbstractVector}, range)
|
||||
newDict = Dict{Symbol, AbstractVector}()
|
||||
for (k, v) in d
|
||||
newDict[k] = v[range]
|
||||
end
|
||||
|
||||
return newDict
|
||||
end
|
||||
|
||||
""" Assign value to a given Dict by array of keys
|
||||
|
||||
# Example
|
||||
d = Dict(
|
||||
:a1=> Dict(:c=> 5),
|
||||
:a2=> Dict(
|
||||
:k=> 10,
|
||||
:b=> Dict(
|
||||
:s=> "target",
|
||||
)
|
||||
)
|
||||
)
|
||||
index = [:a2, :b, :s] \n
|
||||
assignDict!(d, [:a2, :b, :s], "wow")
|
||||
|
||||
return 1 if no target key in a given dict.
|
||||
"""
|
||||
function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
|
||||
wd = nothing
|
||||
for i in accessArray
|
||||
println(i)
|
||||
if i != accessArray[end]
|
||||
if wd === nothing && haskey(dict, i)
|
||||
wd = Ref(dict[i])
|
||||
elseif wd.x !== nothing && haskey(wd.x, i)
|
||||
wd = Ref(wd.x[i])
|
||||
else
|
||||
return 1 # error, no target key in a given dict.
|
||||
end
|
||||
else
|
||||
wd.x[i] = valueToAssign
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
""" convert hour(0-23), minute(0-59) into julia time object
|
||||
# Example
|
||||
time
|
||||
"""
|
||||
function iTime(h::Integer, m::Integer)
|
||||
if h == 0
|
||||
h = 12
|
||||
ampm = "am"
|
||||
elseif 1 <= h <= 11
|
||||
ampm = "am"
|
||||
elseif h == 12
|
||||
ampm = "pm"
|
||||
elseif 13 <= h <= 23
|
||||
h = h - 12
|
||||
ampm = "pm"
|
||||
else
|
||||
error("hour out of range")
|
||||
end
|
||||
|
||||
m = m < 10 ? "0$m" : m
|
||||
t = "$h:$m$ampm"
|
||||
|
||||
return Time(t, "HH:MMp")
|
||||
end
|
||||
|
||||
""" replace a number according to the limit
|
||||
if value is lower than lowerbound return lowerbound replacement value
|
||||
if value is more than upperbound return upperbound replacement value
|
||||
|
||||
# Example
|
||||
limitvalue(4, (-5 => 0), (5 => 5))
|
||||
"""
|
||||
function limitvalue(v::Number, lowerbound::Pair, upperbound::Pair)
|
||||
lwLimit, lwReplace = lowerbound
|
||||
upLimit, upReplace = upperbound
|
||||
|
||||
if v < lwLimit
|
||||
v = lwReplace
|
||||
elseif v > upLimit
|
||||
v = upReplace
|
||||
else
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
""" ELEMENT-wise multiply of each slice of 3D input matrix ,a, to all slice of 3D another matrix ,b, and
|
||||
concatenate at the 4th dimension.
|
||||
|
||||
Example
|
||||
julia> input = rand(32, 32, 128) # batch at 3rd dim
|
||||
julia> weight = rand(32, 32, 1024)
|
||||
julia> r = matMul_3Dto3D_manyTo1batch(input, weight);
|
||||
julia> size(r)
|
||||
(32, 32, 1024, 128)
|
||||
"""
|
||||
function matMul_3Dto3D_manyTo1batch(a::Array, b::Array; resultStorage::Union{Array, Nothing}=nothing)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if resultStorage === nothing
|
||||
resultStorage = similar(a, eltype(b), bsize[1], bsize[2], bsize[3], asize[3])
|
||||
end
|
||||
|
||||
c = [slice .* b for slice in eachslice(a, dims=3)]
|
||||
resultStorage .= cat(c..., dims=4)
|
||||
|
||||
return resultStorage
|
||||
end
|
||||
""" GPU version of batchMatEleMul
|
||||
|
||||
Example
|
||||
julia> using Flux, CUDA
|
||||
julia> device = Flux.CUDA.functional() ? gpu : cpu
|
||||
julia> if device == gpu CUDA.device!(0) end
|
||||
julia> input = rand(32, 32, 128) |> gpu # 128-batches
|
||||
julia> weight = rand(32, 32, 1024) |> gpu # 1-batch
|
||||
julia> r = batchMatEleMul_gpu(input, weight);
|
||||
julia> size(r)
|
||||
(32, 32, 1024, 128)
|
||||
"""
|
||||
function matMul_3Dto3D_manyTo1batch(a::CuArray, b::CuArray;
|
||||
resultStorage::Union{CuArray, Nothing}=nothing, threads=128)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if resultStorage === nothing
|
||||
resultStorage = similar(a, eltype(b), bsize[1], bsize[2], bsize[3], asize[3]) |> gpu
|
||||
end
|
||||
CUDA.@sync begin
|
||||
@cuda threads=threads matMul_3Dto3D_manyTo1batch_gpu!(a, b, resultStorage)
|
||||
end
|
||||
return resultStorage
|
||||
end
|
||||
function matMul_3Dto3D_manyTo1batch_gpu!(a::CuArray, b::CuArray, resultStorage::CuArray)
|
||||
_, _, _, p = size(resultStorage)
|
||||
|
||||
index = threadIdx().x # this example only requires linear indexing, so just use `x`
|
||||
stride = blockDim().x
|
||||
for i in index:stride:p
|
||||
view(resultStorage, :, :, :, i) .= view(a, :, :, i) .* b
|
||||
end
|
||||
return nothing
|
||||
end
|
||||
|
||||
""" ELEMENT-wise multiply of each slice of 3D input matrix ,a, to all batch of another 4D matrix ,b, and
|
||||
concatenate at the 4th dimension.
|
||||
|
||||
Example
|
||||
julia>
|
||||
julia> a = rand(2,2,3) # 3-batches
|
||||
julia> b = rand(2,2,4,3) # 3-batches
|
||||
julia> r = GeneralUtils.matMul_3Dto4D_batchwise(a, b);
|
||||
julia> size(r)
|
||||
(2, 2, 4, 3)
|
||||
"""
|
||||
function matMul_3Dto4D_batchwise(a::Array, b::Array; resultStorage::Union{Array, Nothing}=nothing)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if asize[end] != bsize[end]
|
||||
error("batch number of a and b must be equal")
|
||||
end
|
||||
if resultStorage === nothing
|
||||
resultStorage = zeros(bsize[1], bsize[2], bsize[3], asize[3])
|
||||
end
|
||||
for i in 1:asize[3]
|
||||
view(resultStorage, :, :, :, i) .= a[:, :, i] .* b[:, :, :, i]
|
||||
end
|
||||
return resultStorage
|
||||
end
|
||||
|
||||
#TODO
|
||||
function matMul_4Dto4D_batchwise(a::Array, b::Array;
|
||||
resultStorage::Union{Array, Nothing}=nothing)
|
||||
error("this function is under constrution")
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if asize[end] != bsize[end]
|
||||
error("batch number of a and b must be equal")
|
||||
end
|
||||
if resultStorage === nothing
|
||||
resultStorage = zeros(bsize[1], bsize[2], bsize[3], asize[3])
|
||||
end
|
||||
end
|
||||
|
||||
""" assign matrix b to matrix a according to matrix b's CartesianIndex
|
||||
"""
|
||||
cartesianAssign!(a::CuArray, b::CuArray) = @cuda cartesianAssign!(a, b)
|
||||
|
||||
function cartesianAssign!(a, b)
|
||||
for (i, v) in enumerate(b)
|
||||
a[CartesianIndices(b)[i].I...] = v
|
||||
end
|
||||
return nothing
|
||||
end
|
||||
|
||||
function sumAlongDim3(a::Array)
|
||||
totalDim = length(size(a))
|
||||
|
||||
if totalDim == 3
|
||||
d1, d2, d3 = size(a)
|
||||
r = zeros(1, 1, d3)
|
||||
for i in 1:d3
|
||||
view(r, 1, 1, i) .= sum(a[:, :, i])
|
||||
end
|
||||
elseif totalDim == 4
|
||||
d1, d2, d3, d4 = size(a)
|
||||
r = zeros(1, 1, d3, d4)
|
||||
for j in 1:d4
|
||||
for i in 1:d3
|
||||
view(r, 1, 1, i, j) .= sum(a[:, :, i, j])
|
||||
end
|
||||
end
|
||||
else
|
||||
error("this condition is not define yet")
|
||||
end
|
||||
|
||||
return r
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # module
|
||||
@@ -1,911 +0,0 @@
|
||||
# This file is machine-generated - editing it directly is not advised
|
||||
|
||||
julia_version = "1.9.1"
|
||||
manifest_format = "2.0"
|
||||
project_hash = "91349a0eb57aed703e8465e44731cca768229f09"
|
||||
|
||||
[[deps.AbstractFFTs]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "8bc0aaec0ca548eb6cf5f0d7d16351650c1ee956"
|
||||
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
|
||||
version = "1.3.2"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.AbstractFFTs.extensions]
|
||||
AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.Adapt]]
|
||||
deps = ["LinearAlgebra", "Requires"]
|
||||
git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24"
|
||||
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
|
||||
version = "3.6.2"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.Adapt.extensions]
|
||||
AdaptStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.ArgCheck]]
|
||||
git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4"
|
||||
uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
|
||||
version = "2.3.0"
|
||||
|
||||
[[deps.ArgTools]]
|
||||
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.Artifacts]]
|
||||
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
|
||||
|
||||
[[deps.Atomix]]
|
||||
deps = ["UnsafeAtomics"]
|
||||
git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be"
|
||||
uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.BFloat16s]]
|
||||
deps = ["LinearAlgebra", "Printf", "Random", "Test"]
|
||||
git-tree-sha1 = "dbf84058d0a8cbbadee18d25cf606934b22d7c66"
|
||||
uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.BangBang]]
|
||||
deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"]
|
||||
git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed"
|
||||
uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66"
|
||||
version = "0.3.39"
|
||||
|
||||
[deps.BangBang.extensions]
|
||||
BangBangChainRulesCoreExt = "ChainRulesCore"
|
||||
BangBangDataFramesExt = "DataFrames"
|
||||
BangBangStaticArraysExt = "StaticArrays"
|
||||
BangBangStructArraysExt = "StructArrays"
|
||||
BangBangTypedTablesExt = "TypedTables"
|
||||
|
||||
[deps.BangBang.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9"
|
||||
|
||||
[[deps.Base64]]
|
||||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||
|
||||
[[deps.Baselet]]
|
||||
git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e"
|
||||
uuid = "9718e550-a3fa-408a-8086-8db961cd8217"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.CEnum]]
|
||||
git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
|
||||
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.CUDA]]
|
||||
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "442d989978ed3ff4e174c928ee879dc09d1ef693"
|
||||
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
version = "4.3.2"
|
||||
|
||||
[[deps.CUDA_Driver_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "498f45593f6ddc0adff64a9310bb6710e851781b"
|
||||
uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc"
|
||||
version = "0.5.0+1"
|
||||
|
||||
[[deps.CUDA_Runtime_Discovery]]
|
||||
deps = ["Libdl"]
|
||||
git-tree-sha1 = "bcc4a23cbbd99c8535a5318455dcf0f2546ec536"
|
||||
uuid = "1af6417a-86b4-443c-805f-a4643ffb695f"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.CUDA_Runtime_jll]]
|
||||
deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "5248d9c45712e51e27ba9b30eebec65658c6ce29"
|
||||
uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2"
|
||||
version = "0.6.0+0"
|
||||
|
||||
[[deps.CUDNN_jll]]
|
||||
deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "2918fbffb50e3b7a0b9127617587afa76d4276e8"
|
||||
uuid = "62b44479-cb7b-5706-934f-f13b2eb2e645"
|
||||
version = "8.8.1+0"
|
||||
|
||||
[[deps.Calculus]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
|
||||
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
|
||||
version = "0.5.1"
|
||||
|
||||
[[deps.ChainRules]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"]
|
||||
git-tree-sha1 = "1cdf290d4feec68824bfb84f4bfc9f3aba185647"
|
||||
uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2"
|
||||
version = "1.51.1"
|
||||
|
||||
[[deps.ChainRulesCore]]
|
||||
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
|
||||
git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644"
|
||||
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
version = "1.16.0"
|
||||
|
||||
[[deps.CommonSubexpressions]]
|
||||
deps = ["MacroTools", "Test"]
|
||||
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
|
||||
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
|
||||
version = "0.3.0"
|
||||
|
||||
[[deps.Compat]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957"
|
||||
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
||||
version = "4.6.1"
|
||||
weakdeps = ["Dates", "LinearAlgebra"]
|
||||
|
||||
[deps.Compat.extensions]
|
||||
CompatLinearAlgebraExt = "LinearAlgebra"
|
||||
|
||||
[[deps.CompilerSupportLibraries_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
|
||||
version = "1.0.2+0"
|
||||
|
||||
[[deps.CompositionsBase]]
|
||||
git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
|
||||
uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
|
||||
version = "0.1.2"
|
||||
|
||||
[deps.CompositionsBase.extensions]
|
||||
CompositionsBaseInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.CompositionsBase.weakdeps]
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.ConstructionBase]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c"
|
||||
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
|
||||
version = "1.5.2"
|
||||
|
||||
[deps.ConstructionBase.extensions]
|
||||
ConstructionBaseIntervalSetsExt = "IntervalSets"
|
||||
ConstructionBaseStaticArraysExt = "StaticArrays"
|
||||
|
||||
[deps.ConstructionBase.weakdeps]
|
||||
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
|
||||
[[deps.ContextVariablesX]]
|
||||
deps = ["Compat", "Logging", "UUIDs"]
|
||||
git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc"
|
||||
uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5"
|
||||
version = "0.1.3"
|
||||
|
||||
[[deps.DataAPI]]
|
||||
git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630"
|
||||
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
||||
version = "1.14.0"
|
||||
|
||||
[[deps.DataStructures]]
|
||||
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
||||
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
|
||||
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
version = "0.18.13"
|
||||
|
||||
[[deps.DataValueInterfaces]]
|
||||
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
|
||||
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Dates]]
|
||||
deps = ["Printf"]
|
||||
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||
|
||||
[[deps.DefineSingletons]]
|
||||
git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c"
|
||||
uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.DelimitedFiles]]
|
||||
deps = ["Mmap"]
|
||||
git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae"
|
||||
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
|
||||
version = "1.9.1"
|
||||
|
||||
[[deps.DiffResults]]
|
||||
deps = ["StaticArraysCore"]
|
||||
git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621"
|
||||
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.DiffRules]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272"
|
||||
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
|
||||
version = "1.15.1"
|
||||
|
||||
[[deps.Distributed]]
|
||||
deps = ["Random", "Serialization", "Sockets"]
|
||||
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
|
||||
|
||||
[[deps.Distributions]]
|
||||
deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"]
|
||||
git-tree-sha1 = "eead66061583b6807652281c0fbf291d7a9dc497"
|
||||
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
version = "0.25.90"
|
||||
|
||||
[deps.Distributions.extensions]
|
||||
DistributionsChainRulesCoreExt = "ChainRulesCore"
|
||||
DistributionsDensityInterfaceExt = "DensityInterface"
|
||||
|
||||
[deps.Distributions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
|
||||
|
||||
[[deps.DocStringExtensions]]
|
||||
deps = ["LibGit2"]
|
||||
git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
|
||||
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
||||
version = "0.9.3"
|
||||
|
||||
[[deps.Downloads]]
|
||||
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
|
||||
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.DualNumbers]]
|
||||
deps = ["Calculus", "NaNMath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
|
||||
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
|
||||
version = "0.6.8"
|
||||
|
||||
[[deps.ExprTools]]
|
||||
git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00"
|
||||
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
|
||||
version = "0.1.9"
|
||||
|
||||
[[deps.FLoops]]
|
||||
deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"]
|
||||
git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576"
|
||||
uuid = "cc61a311-1640-44b5-9fba-1b764f453329"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.FLoopsBase]]
|
||||
deps = ["ContextVariablesX"]
|
||||
git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7"
|
||||
uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.FileWatching]]
|
||||
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
||||
|
||||
[[deps.FillArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
|
||||
git-tree-sha1 = "fc86b4fd3eff76c3ce4f5e96e2fdfa6282722885"
|
||||
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Flux]]
|
||||
deps = ["Adapt", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote", "cuDNN"]
|
||||
git-tree-sha1 = "3e2c3704c2173ab4b1935362384ca878b53d4c34"
|
||||
uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
version = "0.13.17"
|
||||
|
||||
[deps.Flux.extensions]
|
||||
AMDGPUExt = "AMDGPU"
|
||||
FluxMetalExt = "Metal"
|
||||
|
||||
[deps.Flux.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
|
||||
|
||||
[[deps.ForwardDiff]]
|
||||
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d"
|
||||
uuid = "f6369f11-7733-5829-9624-2563aa707210"
|
||||
version = "0.10.35"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.ForwardDiff.extensions]
|
||||
ForwardDiffStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.Functors]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "478f8c3145bb91d82c2cf20433e8c1b30df454cc"
|
||||
uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
|
||||
version = "0.4.4"
|
||||
|
||||
[[deps.Future]]
|
||||
deps = ["Random"]
|
||||
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
|
||||
|
||||
[[deps.GPUArrays]]
|
||||
deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"]
|
||||
git-tree-sha1 = "2e57b4a4f9cc15e85a24d603256fe08e527f48d1"
|
||||
uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7"
|
||||
version = "8.8.1"
|
||||
|
||||
[[deps.GPUArraysCore]]
|
||||
deps = ["Adapt"]
|
||||
git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0"
|
||||
uuid = "46192b85-c4d5-4398-a991-12ede77f4527"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.GPUCompiler]]
|
||||
deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"]
|
||||
git-tree-sha1 = "cb090aea21c6ca78d59672a7e7d13bd56d09de64"
|
||||
uuid = "61eb1bfa-7361-4325-ad38-22787b887f55"
|
||||
version = "0.20.3"
|
||||
|
||||
[[deps.HypergeometricFunctions]]
|
||||
deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
|
||||
git-tree-sha1 = "84204eae2dd237500835990bcade263e27674a93"
|
||||
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
|
||||
version = "0.3.16"
|
||||
|
||||
[[deps.IRTools]]
|
||||
deps = ["InteractiveUtils", "MacroTools", "Test"]
|
||||
git-tree-sha1 = "eac00994ce3229a464c2847e956d77a2c64ad3a5"
|
||||
uuid = "7869d1d1-7146-5819-86e3-90919afe41df"
|
||||
version = "0.4.10"
|
||||
|
||||
[[deps.InitialValues]]
|
||||
git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3"
|
||||
uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c"
|
||||
version = "0.3.1"
|
||||
|
||||
[[deps.InteractiveUtils]]
|
||||
deps = ["Markdown"]
|
||||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||||
|
||||
[[deps.IrrationalConstants]]
|
||||
git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
|
||||
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.IteratorInterfaceExtensions]]
|
||||
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
|
||||
uuid = "82899510-4779-5014-852e-03e436cf321d"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.JLLWrappers]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
|
||||
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
|
||||
version = "1.4.1"
|
||||
|
||||
[[deps.JSON3]]
|
||||
deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"]
|
||||
git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683"
|
||||
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
version = "1.12.0"
|
||||
|
||||
[[deps.JuliaVariables]]
|
||||
deps = ["MLStyle", "NameResolution"]
|
||||
git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70"
|
||||
uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.KernelAbstractions]]
|
||||
deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "b48617c5d764908b5fac493cd907cf33cc11eec1"
|
||||
uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
|
||||
version = "0.9.6"
|
||||
|
||||
[[deps.LLVM]]
|
||||
deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"]
|
||||
git-tree-sha1 = "5007c1421563108110bbd57f63d8ad4565808818"
|
||||
uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
|
||||
version = "5.2.0"
|
||||
|
||||
[[deps.LLVMExtra_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "1222116d7313cdefecf3d45a2bc1a89c4e7c9217"
|
||||
uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
|
||||
version = "0.0.22+0"
|
||||
|
||||
[[deps.LazyArtifacts]]
|
||||
deps = ["Artifacts", "Pkg"]
|
||||
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
|
||||
|
||||
[[deps.LibCURL]]
|
||||
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
||||
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
||||
version = "0.6.3"
|
||||
|
||||
[[deps.LibCURL_jll]]
|
||||
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
|
||||
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
|
||||
version = "7.84.0+0"
|
||||
|
||||
[[deps.LibGit2]]
|
||||
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||
|
||||
[[deps.LibSSH2_jll]]
|
||||
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
|
||||
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
|
||||
version = "1.10.2+0"
|
||||
|
||||
[[deps.Libdl]]
|
||||
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
|
||||
|
||||
[[deps.LinearAlgebra]]
|
||||
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
|
||||
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||||
|
||||
[[deps.LogExpFunctions]]
|
||||
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
|
||||
git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b"
|
||||
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
|
||||
version = "0.3.23"
|
||||
|
||||
[deps.LogExpFunctions.extensions]
|
||||
LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
|
||||
LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.LogExpFunctions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.Logging]]
|
||||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||
|
||||
[[deps.MLStyle]]
|
||||
git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8"
|
||||
uuid = "d8e11817-5142-5d16-987a-aa16d5891078"
|
||||
version = "0.4.17"
|
||||
|
||||
[[deps.MLUtils]]
|
||||
deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"]
|
||||
git-tree-sha1 = "3504cdb8c2bc05bde4d4b09a81b01df88fcbbba0"
|
||||
uuid = "f1d291b0-491e-4a28-83b9-f70985020b54"
|
||||
version = "0.4.3"
|
||||
|
||||
[[deps.MacroTools]]
|
||||
deps = ["Markdown", "Random"]
|
||||
git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
|
||||
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
|
||||
version = "0.5.10"
|
||||
|
||||
[[deps.Markdown]]
|
||||
deps = ["Base64"]
|
||||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||||
|
||||
[[deps.MbedTLS_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
|
||||
version = "2.28.2+0"
|
||||
|
||||
[[deps.MicroCollections]]
|
||||
deps = ["BangBang", "InitialValues", "Setfield"]
|
||||
git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e"
|
||||
uuid = "128add7d-3638-4c79-886c-908ea0c25c34"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.Missings]]
|
||||
deps = ["DataAPI"]
|
||||
git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272"
|
||||
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.Mmap]]
|
||||
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
||||
|
||||
[[deps.MozillaCACerts_jll]]
|
||||
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
|
||||
version = "2022.10.11"
|
||||
|
||||
[[deps.NNlib]]
|
||||
deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"]
|
||||
git-tree-sha1 = "72240e3f5ca031937bd536182cb2c031da5f46dd"
|
||||
uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
|
||||
version = "0.8.21"
|
||||
|
||||
[deps.NNlib.extensions]
|
||||
NNlibAMDGPUExt = "AMDGPU"
|
||||
|
||||
[deps.NNlib.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
|
||||
[[deps.NNlibCUDA]]
|
||||
deps = ["Adapt", "CUDA", "LinearAlgebra", "NNlib", "Random", "Statistics", "cuDNN"]
|
||||
git-tree-sha1 = "f94a9684394ff0d325cc12b06da7032d8be01aaf"
|
||||
uuid = "a00861dc-f156-4864-bf3c-e6376f28a68d"
|
||||
version = "0.2.7"
|
||||
|
||||
[[deps.NaNMath]]
|
||||
deps = ["OpenLibm_jll"]
|
||||
git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
|
||||
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
|
||||
version = "1.0.2"
|
||||
|
||||
[[deps.NameResolution]]
|
||||
deps = ["PrettyPrint"]
|
||||
git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e"
|
||||
uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.NetworkOptions]]
|
||||
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.OneHotArrays]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"]
|
||||
git-tree-sha1 = "5e4029759e8699ec12ebdf8721e51a659443403c"
|
||||
uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.OpenBLAS_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
||||
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
|
||||
version = "0.3.21+4"
|
||||
|
||||
[[deps.OpenLibm_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
|
||||
version = "0.8.1+0"
|
||||
|
||||
[[deps.OpenSpecFun_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
|
||||
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
|
||||
version = "0.5.5+0"
|
||||
|
||||
[[deps.Optimisers]]
|
||||
deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"]
|
||||
git-tree-sha1 = "6a01f65dd8583dee82eecc2a19b0ff21521aa749"
|
||||
uuid = "3bd65402-5787-11e9-1adc-39752487f4e2"
|
||||
version = "0.2.18"
|
||||
|
||||
[[deps.OrderedCollections]]
|
||||
git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282"
|
||||
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.PDMats]]
|
||||
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
|
||||
git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1"
|
||||
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
|
||||
version = "0.11.17"
|
||||
|
||||
[[deps.Parsers]]
|
||||
deps = ["Dates", "SnoopPrecompile"]
|
||||
git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf"
|
||||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||||
version = "2.5.8"
|
||||
|
||||
[[deps.Pkg]]
|
||||
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
||||
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
|
||||
version = "1.9.0"
|
||||
|
||||
[[deps.PrecompileTools]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81"
|
||||
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
|
||||
version = "1.1.2"
|
||||
|
||||
[[deps.Preferences]]
|
||||
deps = ["TOML"]
|
||||
git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1"
|
||||
uuid = "21216c6a-2e73-6563-6e65-726566657250"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.PrettyPrint]]
|
||||
git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4"
|
||||
uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98"
|
||||
version = "0.2.0"
|
||||
|
||||
[[deps.Printf]]
|
||||
deps = ["Unicode"]
|
||||
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||||
|
||||
[[deps.ProgressLogging]]
|
||||
deps = ["Logging", "SHA", "UUIDs"]
|
||||
git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539"
|
||||
uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.QuadGK]]
|
||||
deps = ["DataStructures", "LinearAlgebra"]
|
||||
git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee"
|
||||
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
|
||||
version = "2.8.2"
|
||||
|
||||
[[deps.REPL]]
|
||||
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
||||
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||||
|
||||
[[deps.Random]]
|
||||
deps = ["SHA", "Serialization"]
|
||||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||
|
||||
[[deps.Random123]]
|
||||
deps = ["Random", "RandomNumbers"]
|
||||
git-tree-sha1 = "552f30e847641591ba3f39fd1bed559b9deb0ef3"
|
||||
uuid = "74087812-796a-5b5d-8853-05524746bad3"
|
||||
version = "1.6.1"
|
||||
|
||||
[[deps.RandomNumbers]]
|
||||
deps = ["Random", "Requires"]
|
||||
git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111"
|
||||
uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
|
||||
version = "1.5.3"
|
||||
|
||||
[[deps.RealDot]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9"
|
||||
uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.Reexport]]
|
||||
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
|
||||
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
||||
version = "1.2.2"
|
||||
|
||||
[[deps.Requires]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
||||
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
|
||||
version = "1.3.0"
|
||||
|
||||
[[deps.Rmath]]
|
||||
deps = ["Random", "Rmath_jll"]
|
||||
git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b"
|
||||
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
|
||||
version = "0.7.1"
|
||||
|
||||
[[deps.Rmath_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da"
|
||||
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
|
||||
version = "0.4.0+0"
|
||||
|
||||
[[deps.SHA]]
|
||||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||||
version = "0.7.0"
|
||||
|
||||
[[deps.Scratch]]
|
||||
deps = ["Dates"]
|
||||
git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a"
|
||||
uuid = "6c6a2e73-6563-6170-7368-637461726353"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.Serialization]]
|
||||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||||
|
||||
[[deps.Setfield]]
|
||||
deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"]
|
||||
git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac"
|
||||
uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.ShowCases]]
|
||||
git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5"
|
||||
uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.SimpleTraits]]
|
||||
deps = ["InteractiveUtils", "MacroTools"]
|
||||
git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231"
|
||||
uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
|
||||
version = "0.9.4"
|
||||
|
||||
[[deps.SnoopPrecompile]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c"
|
||||
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.Sockets]]
|
||||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||||
|
||||
[[deps.SortingAlgorithms]]
|
||||
deps = ["DataStructures"]
|
||||
git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00"
|
||||
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.SparseArrays]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
|
||||
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
|
||||
|
||||
[[deps.SpecialFunctions]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
|
||||
git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880"
|
||||
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
|
||||
version = "2.2.0"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.SpecialFunctions.extensions]
|
||||
SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.SplittablesBase]]
|
||||
deps = ["Setfield", "Test"]
|
||||
git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5"
|
||||
uuid = "171d559e-b47b-412a-8079-5efa626c420e"
|
||||
version = "0.1.15"
|
||||
|
||||
[[deps.StaticArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"]
|
||||
git-tree-sha1 = "832afbae2a45b4ae7e831f86965469a24d1d8a83"
|
||||
uuid = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
version = "1.5.26"
|
||||
|
||||
[[deps.StaticArraysCore]]
|
||||
git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a"
|
||||
uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.Statistics]]
|
||||
deps = ["LinearAlgebra", "SparseArrays"]
|
||||
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||||
version = "1.9.0"
|
||||
|
||||
[[deps.StatsAPI]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7"
|
||||
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.StatsBase]]
|
||||
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
|
||||
git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4"
|
||||
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
||||
version = "0.34.0"
|
||||
|
||||
[[deps.StatsFuns]]
|
||||
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a"
|
||||
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
|
||||
version = "1.3.0"
|
||||
|
||||
[deps.StatsFuns.extensions]
|
||||
StatsFunsChainRulesCoreExt = "ChainRulesCore"
|
||||
StatsFunsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.StatsFuns.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.StructArrays]]
|
||||
deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"]
|
||||
git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389"
|
||||
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
version = "0.6.15"
|
||||
|
||||
[[deps.StructTypes]]
|
||||
deps = ["Dates", "UUIDs"]
|
||||
git-tree-sha1 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70"
|
||||
uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.SuiteSparse]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
|
||||
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
|
||||
|
||||
[[deps.SuiteSparse_jll]]
|
||||
deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"]
|
||||
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
|
||||
version = "5.10.1+6"
|
||||
|
||||
[[deps.TOML]]
|
||||
deps = ["Dates"]
|
||||
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.TableTraits]]
|
||||
deps = ["IteratorInterfaceExtensions"]
|
||||
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
|
||||
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
|
||||
version = "1.0.1"
|
||||
|
||||
[[deps.Tables]]
|
||||
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
|
||||
git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec"
|
||||
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
|
||||
version = "1.10.1"
|
||||
|
||||
[[deps.Tar]]
|
||||
deps = ["ArgTools", "SHA"]
|
||||
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.Test]]
|
||||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||
|
||||
[[deps.TimerOutputs]]
|
||||
deps = ["ExprTools", "Printf"]
|
||||
git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7"
|
||||
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
|
||||
version = "0.5.23"
|
||||
|
||||
[[deps.Transducers]]
|
||||
deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
|
||||
git-tree-sha1 = "a66fb81baec325cf6ccafa243af573b031e87b00"
|
||||
uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999"
|
||||
version = "0.4.77"
|
||||
|
||||
[deps.Transducers.extensions]
|
||||
TransducersBlockArraysExt = "BlockArrays"
|
||||
TransducersDataFramesExt = "DataFrames"
|
||||
TransducersLazyArraysExt = "LazyArrays"
|
||||
TransducersOnlineStatsBaseExt = "OnlineStatsBase"
|
||||
TransducersReferenceablesExt = "Referenceables"
|
||||
|
||||
[deps.Transducers.weakdeps]
|
||||
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
|
||||
OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338"
|
||||
Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
|
||||
|
||||
[[deps.UUIDs]]
|
||||
deps = ["Random", "SHA"]
|
||||
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
||||
|
||||
[[deps.Unicode]]
|
||||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
||||
|
||||
[[deps.UnsafeAtomics]]
|
||||
git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278"
|
||||
uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.UnsafeAtomicsLLVM]]
|
||||
deps = ["LLVM", "UnsafeAtomics"]
|
||||
git-tree-sha1 = "ea37e6066bf194ab78f4e747f5245261f17a7175"
|
||||
uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.Zlib_jll]]
|
||||
deps = ["Libdl"]
|
||||
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
|
||||
version = "1.2.13+0"
|
||||
|
||||
[[deps.Zygote]]
|
||||
deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"]
|
||||
git-tree-sha1 = "5be3ddb88fc992a7d8ea96c3f10a49a7e98ebc7b"
|
||||
uuid = "e88e6eb3-aa80-5325-afca-941959d7151f"
|
||||
version = "0.6.62"
|
||||
|
||||
[deps.Zygote.extensions]
|
||||
ZygoteColorsExt = "Colors"
|
||||
ZygoteDistancesExt = "Distances"
|
||||
ZygoteTrackerExt = "Tracker"
|
||||
|
||||
[deps.Zygote.weakdeps]
|
||||
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
|
||||
Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
|
||||
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
|
||||
|
||||
[[deps.ZygoteRules]]
|
||||
deps = ["ChainRulesCore", "MacroTools"]
|
||||
git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d"
|
||||
uuid = "700de1a5-db45-46bc-99cf-38207098b444"
|
||||
version = "0.2.3"
|
||||
|
||||
[[deps.cuDNN]]
|
||||
deps = ["CEnum", "CUDA", "CUDNN_jll"]
|
||||
git-tree-sha1 = "f65490d187861d6222cb38bcbbff3fd949a7ec3e"
|
||||
uuid = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd"
|
||||
version = "1.0.4"
|
||||
|
||||
[[deps.libblastrampoline_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
||||
version = "5.8.0+0"
|
||||
|
||||
[[deps.nghttp2_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
|
||||
version = "1.48.0+0"
|
||||
|
||||
[[deps.p7zip_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
|
||||
version = "17.4.0+0"
|
||||
@@ -1,11 +0,0 @@
|
||||
name = "GeneralUtils"
|
||||
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
|
||||
authors = ["tonaerospace <tonaerospace.etc@gmail.com>"]
|
||||
version = "0.1.0"
|
||||
|
||||
[deps]
|
||||
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
@@ -1,81 +0,0 @@
|
||||
module GeneralUtils
|
||||
|
||||
|
||||
export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue
|
||||
|
||||
|
||||
include("interface.jl")
|
||||
using .interface
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" version 0.0.2
|
||||
Todo:
|
||||
- []
|
||||
|
||||
Change from version:
|
||||
-
|
||||
|
||||
All features
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # generalUtils
|
||||
@@ -1,841 +0,0 @@
|
||||
module interface
|
||||
|
||||
|
||||
export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue, replaceMoreThan,
|
||||
replaceLessThan, cartesianAssign!, sumAlongDim3, matMul_3Dto3D_manyTo1batch,
|
||||
matMul_3Dto4D_batchwise
|
||||
|
||||
using JSON3, DataStructures, Distributions, Flux, CUDA
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
noNegative!(a::AbstractVector) = replace!(x -> x < 0 ? 0 : x, a)
|
||||
findNotZero(x::AbstractVector) = findall( (!iszero).(x) )
|
||||
replaceMoreThan(i, target) = i > target ? target : i
|
||||
replaceLessThan(i, target) = i < target ? target : i
|
||||
precision(x::Array{<:Array}) = ( std(mean.(x)) / mean(mean.(x)) ) * 100
|
||||
precision(x::Array) = std(x) / mean(x) * 100
|
||||
replaceAt!(x::AbstractVector, ind::Number, value::Number) = x[ind] = value
|
||||
notZero(x::AbstractVector) = (!iszero).(x)
|
||||
Zero(x::AbstractVector) = iszero.(x)
|
||||
isNan(x::AbstractVector) = isnan.(x)
|
||||
isInf(x::Number) = abs(x) === Inf
|
||||
isInf(x::AbstractVector) = isinf.(x)
|
||||
isLess(x::AbstractVector, target::Number) = isless.(x, target)
|
||||
isMore(x::Number, target::Number) = x > target
|
||||
isMore(x::AbstractVector, target::Number) = isMore.(x, target)
|
||||
absolute(x::AbstractVector) = abs.(x)
|
||||
vecEleMul(x::AbstractVector, y::AbstractVector) = x .* y
|
||||
vecEleMul(x::Number, y::AbstractVector) = x .* y
|
||||
expDecay(initialValue::Number, decayFactor::Number, timePass::Number) =
|
||||
initialValue * (1 - decayFactor)^timePass
|
||||
mul!(x::AbstractVector, y::AbstractVector) = x .*= y
|
||||
mul(x::AbstractVector, y::AbstractVector) = x .* y
|
||||
|
||||
ReLu(x::Number) = max(0, x)
|
||||
|
||||
updateVector!(x::AbstractVector, target::Number) = x .= target
|
||||
updateVector!(x::AbstractVector, target::AbstractArray) = x .= target
|
||||
|
||||
function selectAdd!(x::AbstractVector, ind::AbstractVector, value::AbstractVector)
|
||||
@. x = x + (ind * value)
|
||||
end
|
||||
|
||||
|
||||
""" findIndex(input::String, target::Char)
|
||||
|
||||
Find target index inside a collection.
|
||||
Return 1) Bool array of matched target
|
||||
2) CartesianIndex of every matched target
|
||||
"""
|
||||
function findIndex(input::String, target::Char)
|
||||
match_position = []
|
||||
for i in input
|
||||
if i == target
|
||||
append!(match_position, 1)
|
||||
else
|
||||
append!(match_position, 0)
|
||||
end
|
||||
end
|
||||
match_index = findall(isequal.(match_position, 1))
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(input::Array, target::Number)
|
||||
match_position = isequal.(input, target)
|
||||
match_index = findall(match_position)
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
# function findIndex(input::Array, target::Array)
|
||||
# match_position = isone.(zeros(length(input)))
|
||||
# for i in target
|
||||
# match_position = match_position + isequal.(input, i)
|
||||
# end
|
||||
|
||||
# match_position = replaceMoreThan.(match_position, 1)
|
||||
# match_index = findall(isone.(match_position)) # Findall donot work with Int64 vector [1, 0, 0, 1].
|
||||
# # It only works with BitVector. isone() converts Int64 vector [1, 0, 0, 1] into
|
||||
# # BitVector [1, 0, 0, 1]
|
||||
|
||||
# return match_position, match_index
|
||||
# end
|
||||
|
||||
function findIndex(input::Array, target::Symbol)
|
||||
match_position = isequal.(input, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::Array{String}, target::String)
|
||||
match_position = isequal.(collection, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::Array{String}, target::Array{String})
|
||||
match_position = nothing
|
||||
match_index = nothing
|
||||
|
||||
for i in target
|
||||
match_pos = isequal.(collection, i)
|
||||
match_ind = findall(match_pos)
|
||||
|
||||
if match_position === nothing
|
||||
match_position = match_pos
|
||||
|
||||
else
|
||||
match_position = hcat(match_position, match_pos)
|
||||
end
|
||||
|
||||
if match_index === nothing
|
||||
match_index = match_ind
|
||||
else
|
||||
match_index = hcat(match_index, match_ind)
|
||||
end
|
||||
end
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findIndex(collection::OrderedDict, target::Symbol)
|
||||
collection_keys = keys(collection)
|
||||
collection_keys_array = [i for i in collection_keys]
|
||||
match_position = isequal.(collection_keys_array, target)
|
||||
match_index = findall(match_position)
|
||||
|
||||
return match_position, match_index
|
||||
end
|
||||
|
||||
function findMax(collection::AbstractVector)
|
||||
maxValue, maxIndex = findmax(collection)
|
||||
matchPosition = isequal.(collection, maxValue)
|
||||
return maxValue, maxIndex, matchPosition
|
||||
end
|
||||
|
||||
|
||||
|
||||
""" read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
|
||||
|
||||
with multiple text file in a folder,
|
||||
this function read x_th text file in a folder (filename is sorted by OS)
|
||||
|
||||
# Example
|
||||
utils.read_textfile_by_index(cleaned_data_path, 2)
|
||||
read 2nd txt file in a folder
|
||||
"""
|
||||
function read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
|
||||
if isdir(folder_path)
|
||||
filenumber = length(readdir(folder_path))
|
||||
|
||||
if read_file_number > filenumber
|
||||
error("you specified read_file_number = $read_file_number which is out
|
||||
of range, the cleaned data folder has only $filenumber files")
|
||||
return nothing, nothing, nothing
|
||||
else
|
||||
content = 0
|
||||
# open each file in the directory and read
|
||||
filename = readdir(folder_path, join=true, sort=false)[read_file_number]
|
||||
f = open(filename)
|
||||
content = readlines(f)
|
||||
# content = read(f)
|
||||
close(f)
|
||||
end
|
||||
|
||||
return read_file_number, filename, content
|
||||
else
|
||||
error("ERROR no file or folder at $folder_path")
|
||||
return nothing, nothing, nothing
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" Array_to_JSON3_str(data::AbstractArray)
|
||||
|
||||
encode Array to JSON3 String
|
||||
|
||||
# Example
|
||||
|
||||
a = [1.23 4.7889; 9987.1 -123.07; -0.0027 -6.75]
|
||||
json3_str = Array_to_JSON3_str(a)
|
||||
|
||||
json3_str = {"Array":[1.23,9987.1,-0.0027,4.7889,-123.07,-6.75],"size":[3,2]}
|
||||
"""
|
||||
function Array_to_JSON3_str(data::AbstractArray)
|
||||
d = Dict("Array"=> data, "size"=>size(data))
|
||||
json3_str = JSON3.write(d)
|
||||
return json3_str
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" JSON3_str_to_Array(json3_str::String)
|
||||
|
||||
decode JSON3 String to Array
|
||||
|
||||
# Example
|
||||
|
||||
json3_str = {"Array":[1.23,9987.1,-0.0027,4.7889,-123.07,-6.75],"size":[3,2]}
|
||||
a = JSON3_str_to_Array(json3_str)
|
||||
|
||||
a = [1.23 4.7889; 9987.1 -123.07; -0.0027 -6.75]
|
||||
"""
|
||||
function JSON3_str_to_Array(json3_str::String)
|
||||
d = JSON3.read(json3_str)
|
||||
array = reshape(Array(d.Array), (d.size[1], d.size[2]))
|
||||
return array
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" Convert JSON3.read object to OrderedDict
|
||||
|
||||
# Example
|
||||
dict = dictionary(["a"=>4, "b"=>6])
|
||||
OrDict = OrderedDict(dict)
|
||||
jsonString = JSON3.write(OrDict) # use jsonString to exchange. One can save it to file or send it thru pub/sub
|
||||
jsonObject = JSON3.read(jsonString)
|
||||
OrDict2 = JSON3read_to_OrDict(jsonObject) # example here
|
||||
Adict2 = dictionary(OrDict2)
|
||||
|
||||
Andyferris's github https://github.com/andyferris/Dictionaries.jl
|
||||
"""
|
||||
function JSON3read_to_OrDict(x)
|
||||
dict = OrderedDict()
|
||||
for (k, v) in x
|
||||
k = string(k)
|
||||
dict[k] = v
|
||||
end
|
||||
return dict
|
||||
end
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
"""
|
||||
print time of cpu executtion at the line inwhich this macro is used
|
||||
"""
|
||||
macro timeline(expr)
|
||||
quote
|
||||
print("line ", $(__source__.line), ": ")
|
||||
@time $(esc(expr))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
batchindex(batch_counter::Number, batch_size::Number; offset=0) =
|
||||
(offset + (batch_counter-1) * batch_size + 1) : offset + (batch_counter * batch_size)
|
||||
|
||||
function flip_true_false(x::Bool)
|
||||
if x == true
|
||||
x = false
|
||||
elseif x == false
|
||||
x = true
|
||||
else
|
||||
error("undefined condition line $(@__LINE__)")
|
||||
end
|
||||
|
||||
return x
|
||||
end
|
||||
|
||||
function flip_true_false(x::Int)
|
||||
if x == 1
|
||||
x = 0
|
||||
elseif x == 0
|
||||
x = 1
|
||||
else
|
||||
throw("not define input of type $(typeof(x)) yet")
|
||||
end
|
||||
|
||||
return x
|
||||
end
|
||||
|
||||
"""
|
||||
Return drawed index
|
||||
# Example
|
||||
drawed_index = randomWithProb([0.5, 0.2, 0.3])
|
||||
|
||||
"""
|
||||
randomWithProb(probability::AbstractVector) = rand(Distributions.Categorical(probability)) # return drawed index
|
||||
|
||||
"""
|
||||
Draw from choices according to its probability.
|
||||
Probability range is 0.0 to 1.0 and all probability must summed up to 1
|
||||
(may get probability from NNlib's softmax function)
|
||||
|
||||
# Example
|
||||
|
||||
draw = draw_choices([true, false, nothing], [0.5, 0.2, 0.3])
|
||||
"""
|
||||
function randomChoiceWithProb(choices::Array, probability::Array)
|
||||
if length(choices) != length(probability)
|
||||
error("random is not possible, choices array length != probability array length")
|
||||
elseif sum(probability) != 1.0
|
||||
error("probability does not sum to 1.0")
|
||||
end
|
||||
|
||||
return choices[randomWithProb(probability)]
|
||||
end
|
||||
|
||||
function randomChoiceOnTarget(target::Number, targetMatch::Number, choices::AbstractVector,
|
||||
probability::AbstractVector)
|
||||
if length(choices) != length(probability)
|
||||
throw("random is not possible, choices array length != probability array length")
|
||||
end
|
||||
return target == targetMatch ? randomChoiceWithProb(choices, probability) : target
|
||||
# dist = Distributions.Categorical(probability)
|
||||
# draw_result = choices[rand(dist)]
|
||||
end
|
||||
|
||||
function randomChoiceOnTarget(target::AbstractVector, choiceList::AbstractVector,
|
||||
probability::AbstractVector)
|
||||
return randomChoiceOnTarget.(target, 1, (choiceList,), (probability,))
|
||||
end
|
||||
|
||||
function linearly_weighted_avg(a::Array)
|
||||
total = 0.0
|
||||
for (i, v) in enumerate(a)
|
||||
total = total + (i * v)
|
||||
end
|
||||
|
||||
return total / sum(a)
|
||||
end
|
||||
|
||||
|
||||
""" Convert String that is holded inside a variable to Symbol
|
||||
# Example
|
||||
x = "hello" # x is a variable holding String "hello" \n
|
||||
y = variable_to_symbol(x) # y holds :hello
|
||||
"""
|
||||
function variable_str_to_symbol(variable)
|
||||
semi = :($variable)
|
||||
symbol = Symbol(semi)
|
||||
|
||||
return symbol
|
||||
end
|
||||
|
||||
|
||||
""" get useable type of specified fieldname inside a composite struct
|
||||
|
||||
# Example
|
||||
julia> @Base.kwdef mutable struct some_struct
|
||||
a::Union{Bool, Nothing} = nothing
|
||||
b::Union{Float64, Nothing} = nothing
|
||||
c::Union{Int64, AbstractFloat} = 3.5
|
||||
d::Union{String, Nothing} = nothing
|
||||
end
|
||||
|
||||
julia> a = some_struct()
|
||||
julia> fieldname_useable_type(some_struct, :c) =result=> [Int64, Float64]
|
||||
"""
|
||||
function fieldname_useable_type(somestruct, fieldname::Symbol;
|
||||
test_types=[2.0, 2, true, :h, "str", 'c', missing, nothing])::Vector{DataType}
|
||||
new_instance = somestruct()
|
||||
useable_type = []
|
||||
|
||||
for i in test_types
|
||||
try
|
||||
new_instance.:($fieldname) = i
|
||||
type = typeof(new_instance.:($fieldname))
|
||||
if type ∉ useable_type
|
||||
push!(useable_type, type)
|
||||
end
|
||||
catch
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return useable_type
|
||||
end
|
||||
|
||||
|
||||
function randomNoRepeat(drawOptions::Array, draw_number::Integer;
|
||||
exclude_list::Union{AbstractArray,Nothing}=nothing)
|
||||
draw_option = copy(drawOptions)
|
||||
draw_option = isnothing(exclude_list) ? draw_option :
|
||||
filter!(x -> x ∉ exclude_list, draw_option)
|
||||
shuffle!(draw_option)
|
||||
drawed_items = []
|
||||
while length(drawed_items) < draw_number
|
||||
push!(drawed_items, pop!(draw_option))
|
||||
end
|
||||
return drawed_items
|
||||
end
|
||||
|
||||
""" using cron to schedule backup job by
|
||||
1. sudo nano /etc/crontab <<< this is a system-wide cron file
|
||||
2. to execute julia file @ 2.00am everyday add the following line at the buttom of the file
|
||||
0 2 * * * root julia-1.7 /home/syncthing_backup_script.jl
|
||||
|
||||
Requirements using Dates
|
||||
"""
|
||||
function folderBackup(sourceFolderAbsolutePath::String, # absolute path to folder to be backuped
|
||||
backupFolderAbsolutePath::String; # absolute path to folder used to store backup file
|
||||
totalBackupFiles::Integer=7, # total backup file, the oldest will be deleted
|
||||
containerName::Union{Array{String}, Nothing}=nothing) # container using source_folder
|
||||
|
||||
sep = (Sys.iswindows() ? "\\" : '/')
|
||||
|
||||
if sourceFolderAbsolutePath[end] == sep
|
||||
sourceFolderAbsolutePath = sourceFolderAbsolutePath[1:end-1]
|
||||
end
|
||||
if backupFolderAbsolutePath[end] != sl
|
||||
backupFolderAbsolutePath = backupFolderAbsolutePath * sep
|
||||
end
|
||||
|
||||
if isdir(backupFolderAbsolutePath)
|
||||
else
|
||||
mkpath(backupFolderAbsolutePath)
|
||||
end
|
||||
|
||||
# stop running docker container service
|
||||
if containerName !== nothing
|
||||
println("stop running services")
|
||||
for i in containerName
|
||||
try run(`docker stop $i`) catch; end
|
||||
sleep(10) # wait for services to stop
|
||||
end
|
||||
end
|
||||
|
||||
# do backup
|
||||
println("doing backup now")
|
||||
timestamp = string(Dates.now())
|
||||
name = split(sourceFolderAbsolutePath, sep)[end] * "--"
|
||||
filename = name * timestamp * ".zip" # resulting compressed filename
|
||||
run(`chmod -R a+rwx $sourceFolderAbsolutePath`)
|
||||
# zip -r [destination+filename] [source folder to be zipped]
|
||||
run(`zip -r $(backupFolderAbsolutePath * filename) $sourceFolderAbsolutePath`)
|
||||
|
||||
# check if total backup file is more than user specified, if yes, delete the oldest backup
|
||||
backupFiles = readdir(backupFolderAbsolutePath)
|
||||
|
||||
while length(backupFiles) > totalBackupFiles
|
||||
run(`rm $(backupFolderAbsolutePath * backupFiles[1])`)
|
||||
backupFiles = readdir(backupFolderAbsolutePath)
|
||||
end
|
||||
|
||||
# start docker services
|
||||
if containerName !== nothing
|
||||
println("start services")
|
||||
for i in containerName
|
||||
try run(`docker start $i`) catch; end
|
||||
sleep(10) # wait for services to stop
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lowerclip!(data::AbstractVector, lowerbound::Number)
|
||||
replace!(x -> x < lowerbound ? lowerbound : x, data)
|
||||
end
|
||||
|
||||
function upperclip!(data::AbstractVector, upperbound::Number)
|
||||
replace!(x -> x > upperbound ? upperbound : x, data)
|
||||
end
|
||||
|
||||
function normalise(x::AbstractArray, mu, std)
|
||||
ϵ = oftype(x[1], 1e-5)
|
||||
μ = mu
|
||||
# σ = std(x, dims=dims, mean=μ, corrected=false) # use this when Zygote#478 gets merged
|
||||
σ = std
|
||||
return (x .- μ) ./ (σ .+ ϵ)
|
||||
end
|
||||
|
||||
function minMaxScaler(x::AbstractVector)
|
||||
min = findmin(x)[1]
|
||||
max = findmax(x)[1]
|
||||
|
||||
scaler(a::Number, min::Number, max::Number) = (a-min) / (max-min)
|
||||
return scaler.(x, min, max)
|
||||
end
|
||||
|
||||
""" a = [-1e200, -1e-200, 1e200, 1e-200] \n
|
||||
result = vtclamp.(a, 1e-6, 1e6, -1e6, -1e-6)
|
||||
"""
|
||||
function customclamp(x::Number, poslo::Number, poshi::Number,
|
||||
neglo::Number, neghi::Number)
|
||||
signx = sign(x)
|
||||
if signx == -1
|
||||
if neghi < x < 0
|
||||
return neghi
|
||||
elseif x < neglo
|
||||
return neglo
|
||||
else
|
||||
return x
|
||||
end
|
||||
elseif signx == +1
|
||||
if poshi < x
|
||||
return poshi
|
||||
elseif 0 < x < poslo
|
||||
return poslo
|
||||
else
|
||||
return x
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function unitVec(x::AbstractVector)
|
||||
y = √(sum(x.^2))
|
||||
return x./y
|
||||
end
|
||||
|
||||
function replaceAt!(x::AbstractVector, ind::AbstractVector, value::Number)
|
||||
for i in ind
|
||||
x[i] = value
|
||||
end
|
||||
end
|
||||
|
||||
function signbitVec(x::AbstractVector)
|
||||
sign = signbit.(x) * 1
|
||||
signVec = replace(s -> s == 0 ? -1 : s, sign)
|
||||
return signVec
|
||||
end
|
||||
|
||||
function deleteall!(x::AbstractVector)
|
||||
for i in 1:length(x)
|
||||
deleteat!(x, 1)
|
||||
end
|
||||
end
|
||||
|
||||
""" Select specific range of vectors in a dict, return a new dict
|
||||
# Example
|
||||
dict = Dict(:a => [1:5...],
|
||||
:b => [6:10...])
|
||||
|
||||
call -> selectRange(dict, 1:3)
|
||||
return -> Dict{Any, Any} with 2 entries:
|
||||
:a => [1, 2, 3]
|
||||
:b => [6, 7, 8]
|
||||
"""
|
||||
function selectRange(d::Dict{Symbol, <:AbstractVector}, range)
|
||||
newDict = Dict{Symbol, AbstractVector}()
|
||||
for (k, v) in d
|
||||
newDict[k] = v[range]
|
||||
end
|
||||
|
||||
return newDict
|
||||
end
|
||||
|
||||
""" Assign value to a given Dict by array of keys
|
||||
|
||||
# Example
|
||||
d = Dict(
|
||||
:a1=> Dict(:c=> 5),
|
||||
:a2=> Dict(
|
||||
:k=> 10,
|
||||
:b=> Dict(
|
||||
:s=> "target",
|
||||
)
|
||||
)
|
||||
)
|
||||
index = [:a2, :b, :s] \n
|
||||
assignDict!(d, [:a2, :b, :s], "wow")
|
||||
|
||||
return 1 if no target key in a given dict.
|
||||
"""
|
||||
function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
|
||||
wd = nothing
|
||||
for i in accessArray
|
||||
println(i)
|
||||
if i != accessArray[end]
|
||||
if wd === nothing && haskey(dict, i)
|
||||
wd = Ref(dict[i])
|
||||
elseif wd.x !== nothing && haskey(wd.x, i)
|
||||
wd = Ref(wd.x[i])
|
||||
else
|
||||
return 1 # error, no target key in a given dict.
|
||||
end
|
||||
else
|
||||
wd.x[i] = valueToAssign
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
""" convert hour(0-23), minute(0-59) into julia time object
|
||||
# Example
|
||||
time
|
||||
"""
|
||||
function iTime(h::Integer, m::Integer)
|
||||
if h == 0
|
||||
h = 12
|
||||
ampm = "am"
|
||||
elseif 1 <= h <= 11
|
||||
ampm = "am"
|
||||
elseif h == 12
|
||||
ampm = "pm"
|
||||
elseif 13 <= h <= 23
|
||||
h = h - 12
|
||||
ampm = "pm"
|
||||
else
|
||||
error("hour out of range")
|
||||
end
|
||||
|
||||
m = m < 10 ? "0$m" : m
|
||||
t = "$h:$m$ampm"
|
||||
|
||||
return Time(t, "HH:MMp")
|
||||
end
|
||||
|
||||
""" replace a number according to the limit
|
||||
if value is lower than lowerbound return lowerbound replacement value
|
||||
if value is more than upperbound return upperbound replacement value
|
||||
|
||||
# Example
|
||||
limitvalue(4, (-5 => 0), (5 => 5))
|
||||
"""
|
||||
function limitvalue(v::Number, lowerbound::Pair, upperbound::Pair)
|
||||
lwLimit, lwReplace = lowerbound
|
||||
upLimit, upReplace = upperbound
|
||||
|
||||
if v < lwLimit
|
||||
v = lwReplace
|
||||
elseif v > upLimit
|
||||
v = upReplace
|
||||
else
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
""" assign matrix b to matrix a according to matrix b's CartesianIndex
|
||||
"""
|
||||
cartesianAssign!(a::CuArray, b::CuArray) = @cuda cartesianAssign!(a, b)
|
||||
|
||||
function cartesianAssign!(a, b)
|
||||
for (i, v) in enumerate(b)
|
||||
a[CartesianIndices(b)[i].I...] = v
|
||||
end
|
||||
return nothing
|
||||
end
|
||||
|
||||
function sumAlongDim3(a::Array)
|
||||
totalDim = length(size(a))
|
||||
|
||||
if totalDim == 3
|
||||
d1, d2, d3 = size(a)
|
||||
r = zeros(1, 1, d3)
|
||||
for i in 1:d3
|
||||
view(r, 1, 1, i) .= sum(a[:, :, i])
|
||||
end
|
||||
elseif totalDim == 4
|
||||
d1, d2, d3, d4 = size(a)
|
||||
r = zeros(1, 1, d3, d4)
|
||||
for j in 1:d4
|
||||
for i in 1:d3
|
||||
view(r, 1, 1, i, j) .= sum(a[:, :, i, j])
|
||||
end
|
||||
end
|
||||
else
|
||||
error("this condition is not define yet")
|
||||
end
|
||||
|
||||
return r
|
||||
end
|
||||
|
||||
|
||||
""" ELEMENT-wise multiply of each slice of 3D input matrix ,a, to all slice of 3D another matrix ,b, and
|
||||
concatenate at the 4th dimension.
|
||||
|
||||
Example
|
||||
julia> input = rand(32, 32, 128) # batch at 3rd dim
|
||||
julia> weight = rand(32, 32, 1024)
|
||||
julia> r = matMul_3Dto3D_manyTo1batch(input, weight);
|
||||
julia> size(r)
|
||||
(32, 32, 1024, 128)
|
||||
"""
|
||||
function matMul_3Dto3D_manyTo1batch(a::Array, b::Array; resultStorage::Union{Array, Nothing}=nothing)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if resultStorage === nothing
|
||||
resultStorage = similar(a, eltype(b), bsize[1], bsize[2], bsize[3], asize[3])
|
||||
end
|
||||
|
||||
c = [slice .* b for slice in eachslice(a, dims=3)]
|
||||
resultStorage .= cat(c..., dims=4)
|
||||
|
||||
return resultStorage
|
||||
end
|
||||
|
||||
# function matMul_3Dto3D_manyTo1batch(a::CuArray, b::CuArray; # XXX working code
|
||||
# resultStorage::Union{CuArray, Nothing}=nothing, threads=256)
|
||||
# asize = [size(a)...]
|
||||
# bsize = [size(b)...]
|
||||
# if resultStorage === nothing
|
||||
# resultStorage = similar(a, eltype(b), bsize[1], bsize[2], bsize[3], asize[3]) |> gpu
|
||||
# end
|
||||
# CUDA.@sync begin
|
||||
# @cuda threads=threads matMul_3Dto3D_manyTo1batch_gpu!(a, b, resultStorage)
|
||||
# end
|
||||
# return resultStorage
|
||||
# end
|
||||
|
||||
# function matMul_3Dto3D_manyTo1batch_gpu!(a, b, resultStorage) # XXX working code
|
||||
# _, _, _, p = size(resultStorage)
|
||||
|
||||
# index = threadIdx().x # this example only requires linear indexing, so just use `x`
|
||||
# stride = blockDim().x
|
||||
# for i in index:stride:p
|
||||
# view(resultStorage, :, :, :, i) .= view(a, :, :, i) .* b
|
||||
# end
|
||||
# return nothing
|
||||
# end
|
||||
|
||||
""" GPU kernel
|
||||
"""
|
||||
function matMul_3Dto3D_manyTo1batch_gpu!(a, b, resultStorage)
|
||||
_, _, batch = size(a) # This kernel use 1 thread per batch
|
||||
i = (blockIdx().x - 1) * blockDim().x + threadIdx().x
|
||||
if i <= batch # guard against unused threads to accessing memory out of bound
|
||||
# @cuprintln("thread $i")
|
||||
view(resultStorage, :, :, :, i) .= view(a, :, :, i) .* b
|
||||
end
|
||||
return nothing
|
||||
end
|
||||
|
||||
""" GPU version of batchMatEleMul
|
||||
|
||||
Example
|
||||
julia> using Flux, CUDA
|
||||
julia> device = Flux.CUDA.functional() ? gpu : cpu
|
||||
julia> if device == gpu CUDA.device!(0) end
|
||||
julia> input = rand(32, 32, 128) |> gpu; # 128-batches
|
||||
julia> weight = rand(32, 32, 1024) |> gpu; # 1-batch
|
||||
julia> r = matMul_3Dto3D_manyTo1batch(input, weight);
|
||||
julia> size(r)
|
||||
(32, 32, 1024, 128)
|
||||
"""
|
||||
function matMul_3Dto3D_manyTo1batch(a::CuArray, b::CuArray;
|
||||
resultStorage::Union{CuArray, Nothing}=nothing)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if resultStorage === nothing
|
||||
resultStorage = similar(a, eltype(b), bsize[1], bsize[2], bsize[3], asize[3]) |> gpu
|
||||
end
|
||||
|
||||
kernel = @cuda launch=false matMul_3Dto3D_manyTo1batch_gpu!(a, b, resultStorage)
|
||||
config = launch_configuration(kernel.fun)
|
||||
|
||||
# threads to be launched. Since one can't launch exact thread number the kernel needs,
|
||||
# one just launch threads more than this kernel needs then use a guard inside the kernel
|
||||
# to prevent unused threads to access memory.
|
||||
threads = min(1024, config.threads) # most NVIDIA gpu has 1024 threads per block
|
||||
blocks = cld(asize[3], threads) # This kernel use 1 thread per batch
|
||||
|
||||
CUDA.@sync begin
|
||||
kernel(a, b, resultStorage; threads, blocks)
|
||||
end
|
||||
return resultStorage
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
""" ELEMENT-wise multiply of each slice of 3D input matrix ,a, to all batch of another 4D matrix ,b, and
|
||||
concatenate at the 4th dimension.
|
||||
|
||||
Example
|
||||
julia>
|
||||
julia> a = rand(2,2,3) # 3-batches
|
||||
julia> b = rand(2,2,4,3) # 3-batches
|
||||
julia> r = GeneralUtils.matMul_3Dto4D_batchwise(a, b);
|
||||
julia> size(r)
|
||||
(2, 2, 4, 3)
|
||||
"""
|
||||
function matMul_3Dto4D_batchwise(a::Array, b::Array; resultStorage::Union{Array, Nothing}=nothing)
|
||||
asize = [size(a)...]
|
||||
bsize = [size(b)...]
|
||||
if asize[end] != bsize[end]
|
||||
error("batch number of a and b must be equal")
|
||||
end
|
||||
if resultStorage === nothing
|
||||
resultStorage = zeros(bsize[1], bsize[2], bsize[3], asize[3])
|
||||
end
|
||||
for i in 1:asize[3]
|
||||
view(resultStorage, :, :, :, i) .= a[:, :, i] .* b[:, :, :, i]
|
||||
end
|
||||
return resultStorage
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # module
|
||||
@@ -1,911 +0,0 @@
|
||||
# This file is machine-generated - editing it directly is not advised
|
||||
|
||||
julia_version = "1.9.2"
|
||||
manifest_format = "2.0"
|
||||
project_hash = "168be3100b37ab8a45dff337b2c1caa16b5ecd26"
|
||||
|
||||
[[deps.AbstractFFTs]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "8bc0aaec0ca548eb6cf5f0d7d16351650c1ee956"
|
||||
uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
|
||||
version = "1.3.2"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.AbstractFFTs.extensions]
|
||||
AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.Adapt]]
|
||||
deps = ["LinearAlgebra", "Requires"]
|
||||
git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24"
|
||||
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
|
||||
version = "3.6.2"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.Adapt.extensions]
|
||||
AdaptStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.ArgCheck]]
|
||||
git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4"
|
||||
uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
|
||||
version = "2.3.0"
|
||||
|
||||
[[deps.ArgTools]]
|
||||
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.Artifacts]]
|
||||
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
|
||||
|
||||
[[deps.Atomix]]
|
||||
deps = ["UnsafeAtomics"]
|
||||
git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be"
|
||||
uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.BFloat16s]]
|
||||
deps = ["LinearAlgebra", "Printf", "Random", "Test"]
|
||||
git-tree-sha1 = "dbf84058d0a8cbbadee18d25cf606934b22d7c66"
|
||||
uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.BangBang]]
|
||||
deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"]
|
||||
git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed"
|
||||
uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66"
|
||||
version = "0.3.39"
|
||||
|
||||
[deps.BangBang.extensions]
|
||||
BangBangChainRulesCoreExt = "ChainRulesCore"
|
||||
BangBangDataFramesExt = "DataFrames"
|
||||
BangBangStaticArraysExt = "StaticArrays"
|
||||
BangBangStructArraysExt = "StructArrays"
|
||||
BangBangTypedTablesExt = "TypedTables"
|
||||
|
||||
[deps.BangBang.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9"
|
||||
|
||||
[[deps.Base64]]
|
||||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||
|
||||
[[deps.Baselet]]
|
||||
git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e"
|
||||
uuid = "9718e550-a3fa-408a-8086-8db961cd8217"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.CEnum]]
|
||||
git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
|
||||
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
|
||||
version = "0.4.2"
|
||||
|
||||
[[deps.CUDA]]
|
||||
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "442d989978ed3ff4e174c928ee879dc09d1ef693"
|
||||
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
version = "4.3.2"
|
||||
|
||||
[[deps.CUDA_Driver_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "498f45593f6ddc0adff64a9310bb6710e851781b"
|
||||
uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc"
|
||||
version = "0.5.0+1"
|
||||
|
||||
[[deps.CUDA_Runtime_Discovery]]
|
||||
deps = ["Libdl"]
|
||||
git-tree-sha1 = "bcc4a23cbbd99c8535a5318455dcf0f2546ec536"
|
||||
uuid = "1af6417a-86b4-443c-805f-a4643ffb695f"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.CUDA_Runtime_jll]]
|
||||
deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "5248d9c45712e51e27ba9b30eebec65658c6ce29"
|
||||
uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2"
|
||||
version = "0.6.0+0"
|
||||
|
||||
[[deps.CUDNN_jll]]
|
||||
deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "2918fbffb50e3b7a0b9127617587afa76d4276e8"
|
||||
uuid = "62b44479-cb7b-5706-934f-f13b2eb2e645"
|
||||
version = "8.8.1+0"
|
||||
|
||||
[[deps.Calculus]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
|
||||
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
|
||||
version = "0.5.1"
|
||||
|
||||
[[deps.ChainRules]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"]
|
||||
git-tree-sha1 = "1cdf290d4feec68824bfb84f4bfc9f3aba185647"
|
||||
uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2"
|
||||
version = "1.51.1"
|
||||
|
||||
[[deps.ChainRulesCore]]
|
||||
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
|
||||
git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644"
|
||||
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
version = "1.16.0"
|
||||
|
||||
[[deps.CommonSubexpressions]]
|
||||
deps = ["MacroTools", "Test"]
|
||||
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
|
||||
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
|
||||
version = "0.3.0"
|
||||
|
||||
[[deps.Compat]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957"
|
||||
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
||||
version = "4.6.1"
|
||||
weakdeps = ["Dates", "LinearAlgebra"]
|
||||
|
||||
[deps.Compat.extensions]
|
||||
CompatLinearAlgebraExt = "LinearAlgebra"
|
||||
|
||||
[[deps.CompilerSupportLibraries_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
|
||||
version = "1.0.5+0"
|
||||
|
||||
[[deps.CompositionsBase]]
|
||||
git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
|
||||
uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
|
||||
version = "0.1.2"
|
||||
|
||||
[deps.CompositionsBase.extensions]
|
||||
CompositionsBaseInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.CompositionsBase.weakdeps]
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.ConstructionBase]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c"
|
||||
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
|
||||
version = "1.5.2"
|
||||
|
||||
[deps.ConstructionBase.extensions]
|
||||
ConstructionBaseIntervalSetsExt = "IntervalSets"
|
||||
ConstructionBaseStaticArraysExt = "StaticArrays"
|
||||
|
||||
[deps.ConstructionBase.weakdeps]
|
||||
IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
|
||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
|
||||
[[deps.ContextVariablesX]]
|
||||
deps = ["Compat", "Logging", "UUIDs"]
|
||||
git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc"
|
||||
uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5"
|
||||
version = "0.1.3"
|
||||
|
||||
[[deps.DataAPI]]
|
||||
git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630"
|
||||
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
||||
version = "1.14.0"
|
||||
|
||||
[[deps.DataStructures]]
|
||||
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
||||
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
|
||||
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
version = "0.18.13"
|
||||
|
||||
[[deps.DataValueInterfaces]]
|
||||
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
|
||||
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Dates]]
|
||||
deps = ["Printf"]
|
||||
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||
|
||||
[[deps.DefineSingletons]]
|
||||
git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c"
|
||||
uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.DelimitedFiles]]
|
||||
deps = ["Mmap"]
|
||||
git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae"
|
||||
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
|
||||
version = "1.9.1"
|
||||
|
||||
[[deps.DiffResults]]
|
||||
deps = ["StaticArraysCore"]
|
||||
git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621"
|
||||
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.DiffRules]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272"
|
||||
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
|
||||
version = "1.15.1"
|
||||
|
||||
[[deps.Distributed]]
|
||||
deps = ["Random", "Serialization", "Sockets"]
|
||||
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
|
||||
|
||||
[[deps.Distributions]]
|
||||
deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"]
|
||||
git-tree-sha1 = "eead66061583b6807652281c0fbf291d7a9dc497"
|
||||
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
version = "0.25.90"
|
||||
|
||||
[deps.Distributions.extensions]
|
||||
DistributionsChainRulesCoreExt = "ChainRulesCore"
|
||||
DistributionsDensityInterfaceExt = "DensityInterface"
|
||||
|
||||
[deps.Distributions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
|
||||
|
||||
[[deps.DocStringExtensions]]
|
||||
deps = ["LibGit2"]
|
||||
git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
|
||||
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
||||
version = "0.9.3"
|
||||
|
||||
[[deps.Downloads]]
|
||||
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
|
||||
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.DualNumbers]]
|
||||
deps = ["Calculus", "NaNMath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
|
||||
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
|
||||
version = "0.6.8"
|
||||
|
||||
[[deps.ExprTools]]
|
||||
git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00"
|
||||
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
|
||||
version = "0.1.9"
|
||||
|
||||
[[deps.FLoops]]
|
||||
deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"]
|
||||
git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576"
|
||||
uuid = "cc61a311-1640-44b5-9fba-1b764f453329"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.FLoopsBase]]
|
||||
deps = ["ContextVariablesX"]
|
||||
git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7"
|
||||
uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6"
|
||||
version = "0.1.1"
|
||||
|
||||
[[deps.FileWatching]]
|
||||
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
||||
|
||||
[[deps.FillArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
|
||||
git-tree-sha1 = "fc86b4fd3eff76c3ce4f5e96e2fdfa6282722885"
|
||||
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.Flux]]
|
||||
deps = ["Adapt", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote", "cuDNN"]
|
||||
git-tree-sha1 = "3e2c3704c2173ab4b1935362384ca878b53d4c34"
|
||||
uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
version = "0.13.17"
|
||||
|
||||
[deps.Flux.extensions]
|
||||
AMDGPUExt = "AMDGPU"
|
||||
FluxMetalExt = "Metal"
|
||||
|
||||
[deps.Flux.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
|
||||
|
||||
[[deps.ForwardDiff]]
|
||||
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"]
|
||||
git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d"
|
||||
uuid = "f6369f11-7733-5829-9624-2563aa707210"
|
||||
version = "0.10.35"
|
||||
weakdeps = ["StaticArrays"]
|
||||
|
||||
[deps.ForwardDiff.extensions]
|
||||
ForwardDiffStaticArraysExt = "StaticArrays"
|
||||
|
||||
[[deps.Functors]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "478f8c3145bb91d82c2cf20433e8c1b30df454cc"
|
||||
uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
|
||||
version = "0.4.4"
|
||||
|
||||
[[deps.Future]]
|
||||
deps = ["Random"]
|
||||
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
|
||||
|
||||
[[deps.GPUArrays]]
|
||||
deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"]
|
||||
git-tree-sha1 = "2e57b4a4f9cc15e85a24d603256fe08e527f48d1"
|
||||
uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7"
|
||||
version = "8.8.1"
|
||||
|
||||
[[deps.GPUArraysCore]]
|
||||
deps = ["Adapt"]
|
||||
git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0"
|
||||
uuid = "46192b85-c4d5-4398-a991-12ede77f4527"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.GPUCompiler]]
|
||||
deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"]
|
||||
git-tree-sha1 = "cb090aea21c6ca78d59672a7e7d13bd56d09de64"
|
||||
uuid = "61eb1bfa-7361-4325-ad38-22787b887f55"
|
||||
version = "0.20.3"
|
||||
|
||||
[[deps.HypergeometricFunctions]]
|
||||
deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
|
||||
git-tree-sha1 = "84204eae2dd237500835990bcade263e27674a93"
|
||||
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
|
||||
version = "0.3.16"
|
||||
|
||||
[[deps.IRTools]]
|
||||
deps = ["InteractiveUtils", "MacroTools", "Test"]
|
||||
git-tree-sha1 = "eac00994ce3229a464c2847e956d77a2c64ad3a5"
|
||||
uuid = "7869d1d1-7146-5819-86e3-90919afe41df"
|
||||
version = "0.4.10"
|
||||
|
||||
[[deps.InitialValues]]
|
||||
git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3"
|
||||
uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c"
|
||||
version = "0.3.1"
|
||||
|
||||
[[deps.InteractiveUtils]]
|
||||
deps = ["Markdown"]
|
||||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||||
|
||||
[[deps.IrrationalConstants]]
|
||||
git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
|
||||
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
|
||||
version = "0.2.2"
|
||||
|
||||
[[deps.IteratorInterfaceExtensions]]
|
||||
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
|
||||
uuid = "82899510-4779-5014-852e-03e436cf321d"
|
||||
version = "1.0.0"
|
||||
|
||||
[[deps.JLLWrappers]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
|
||||
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
|
||||
version = "1.4.1"
|
||||
|
||||
[[deps.JSON3]]
|
||||
deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"]
|
||||
git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683"
|
||||
uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
version = "1.12.0"
|
||||
|
||||
[[deps.JuliaVariables]]
|
||||
deps = ["MLStyle", "NameResolution"]
|
||||
git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70"
|
||||
uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.KernelAbstractions]]
|
||||
deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"]
|
||||
git-tree-sha1 = "b48617c5d764908b5fac493cd907cf33cc11eec1"
|
||||
uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
|
||||
version = "0.9.6"
|
||||
|
||||
[[deps.LLVM]]
|
||||
deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"]
|
||||
git-tree-sha1 = "5007c1421563108110bbd57f63d8ad4565808818"
|
||||
uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
|
||||
version = "5.2.0"
|
||||
|
||||
[[deps.LLVMExtra_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
|
||||
git-tree-sha1 = "1222116d7313cdefecf3d45a2bc1a89c4e7c9217"
|
||||
uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
|
||||
version = "0.0.22+0"
|
||||
|
||||
[[deps.LazyArtifacts]]
|
||||
deps = ["Artifacts", "Pkg"]
|
||||
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
|
||||
|
||||
[[deps.LibCURL]]
|
||||
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
||||
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
||||
version = "0.6.3"
|
||||
|
||||
[[deps.LibCURL_jll]]
|
||||
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
|
||||
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
|
||||
version = "7.84.0+0"
|
||||
|
||||
[[deps.LibGit2]]
|
||||
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||
|
||||
[[deps.LibSSH2_jll]]
|
||||
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
|
||||
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
|
||||
version = "1.10.2+0"
|
||||
|
||||
[[deps.Libdl]]
|
||||
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
|
||||
|
||||
[[deps.LinearAlgebra]]
|
||||
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
|
||||
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||||
|
||||
[[deps.LogExpFunctions]]
|
||||
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
|
||||
git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b"
|
||||
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
|
||||
version = "0.3.23"
|
||||
|
||||
[deps.LogExpFunctions.extensions]
|
||||
LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
|
||||
LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.LogExpFunctions.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.Logging]]
|
||||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||
|
||||
[[deps.MLStyle]]
|
||||
git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8"
|
||||
uuid = "d8e11817-5142-5d16-987a-aa16d5891078"
|
||||
version = "0.4.17"
|
||||
|
||||
[[deps.MLUtils]]
|
||||
deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"]
|
||||
git-tree-sha1 = "3504cdb8c2bc05bde4d4b09a81b01df88fcbbba0"
|
||||
uuid = "f1d291b0-491e-4a28-83b9-f70985020b54"
|
||||
version = "0.4.3"
|
||||
|
||||
[[deps.MacroTools]]
|
||||
deps = ["Markdown", "Random"]
|
||||
git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
|
||||
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
|
||||
version = "0.5.10"
|
||||
|
||||
[[deps.Markdown]]
|
||||
deps = ["Base64"]
|
||||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||||
|
||||
[[deps.MbedTLS_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
|
||||
version = "2.28.2+0"
|
||||
|
||||
[[deps.MicroCollections]]
|
||||
deps = ["BangBang", "InitialValues", "Setfield"]
|
||||
git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e"
|
||||
uuid = "128add7d-3638-4c79-886c-908ea0c25c34"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.Missings]]
|
||||
deps = ["DataAPI"]
|
||||
git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272"
|
||||
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.Mmap]]
|
||||
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
||||
|
||||
[[deps.MozillaCACerts_jll]]
|
||||
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
|
||||
version = "2022.10.11"
|
||||
|
||||
[[deps.NNlib]]
|
||||
deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"]
|
||||
git-tree-sha1 = "72240e3f5ca031937bd536182cb2c031da5f46dd"
|
||||
uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
|
||||
version = "0.8.21"
|
||||
|
||||
[deps.NNlib.extensions]
|
||||
NNlibAMDGPUExt = "AMDGPU"
|
||||
|
||||
[deps.NNlib.weakdeps]
|
||||
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
|
||||
|
||||
[[deps.NNlibCUDA]]
|
||||
deps = ["Adapt", "CUDA", "LinearAlgebra", "NNlib", "Random", "Statistics", "cuDNN"]
|
||||
git-tree-sha1 = "f94a9684394ff0d325cc12b06da7032d8be01aaf"
|
||||
uuid = "a00861dc-f156-4864-bf3c-e6376f28a68d"
|
||||
version = "0.2.7"
|
||||
|
||||
[[deps.NaNMath]]
|
||||
deps = ["OpenLibm_jll"]
|
||||
git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
|
||||
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
|
||||
version = "1.0.2"
|
||||
|
||||
[[deps.NameResolution]]
|
||||
deps = ["PrettyPrint"]
|
||||
git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e"
|
||||
uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391"
|
||||
version = "0.1.5"
|
||||
|
||||
[[deps.NetworkOptions]]
|
||||
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.OneHotArrays]]
|
||||
deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"]
|
||||
git-tree-sha1 = "5e4029759e8699ec12ebdf8721e51a659443403c"
|
||||
uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f"
|
||||
version = "0.2.4"
|
||||
|
||||
[[deps.OpenBLAS_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
||||
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
|
||||
version = "0.3.21+4"
|
||||
|
||||
[[deps.OpenLibm_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
|
||||
version = "0.8.1+0"
|
||||
|
||||
[[deps.OpenSpecFun_jll]]
|
||||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
|
||||
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
|
||||
version = "0.5.5+0"
|
||||
|
||||
[[deps.Optimisers]]
|
||||
deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"]
|
||||
git-tree-sha1 = "6a01f65dd8583dee82eecc2a19b0ff21521aa749"
|
||||
uuid = "3bd65402-5787-11e9-1adc-39752487f4e2"
|
||||
version = "0.2.18"
|
||||
|
||||
[[deps.OrderedCollections]]
|
||||
git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282"
|
||||
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.PDMats]]
|
||||
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
|
||||
git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1"
|
||||
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
|
||||
version = "0.11.17"
|
||||
|
||||
[[deps.Parsers]]
|
||||
deps = ["Dates", "SnoopPrecompile"]
|
||||
git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf"
|
||||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||||
version = "2.5.8"
|
||||
|
||||
[[deps.Pkg]]
|
||||
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
||||
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
|
||||
version = "1.9.2"
|
||||
|
||||
[[deps.PrecompileTools]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81"
|
||||
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
|
||||
version = "1.1.2"
|
||||
|
||||
[[deps.Preferences]]
|
||||
deps = ["TOML"]
|
||||
git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1"
|
||||
uuid = "21216c6a-2e73-6563-6e65-726566657250"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.PrettyPrint]]
|
||||
git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4"
|
||||
uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98"
|
||||
version = "0.2.0"
|
||||
|
||||
[[deps.Printf]]
|
||||
deps = ["Unicode"]
|
||||
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||||
|
||||
[[deps.ProgressLogging]]
|
||||
deps = ["Logging", "SHA", "UUIDs"]
|
||||
git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539"
|
||||
uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c"
|
||||
version = "0.1.4"
|
||||
|
||||
[[deps.QuadGK]]
|
||||
deps = ["DataStructures", "LinearAlgebra"]
|
||||
git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee"
|
||||
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
|
||||
version = "2.8.2"
|
||||
|
||||
[[deps.REPL]]
|
||||
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
||||
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||||
|
||||
[[deps.Random]]
|
||||
deps = ["SHA", "Serialization"]
|
||||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||
|
||||
[[deps.Random123]]
|
||||
deps = ["Random", "RandomNumbers"]
|
||||
git-tree-sha1 = "552f30e847641591ba3f39fd1bed559b9deb0ef3"
|
||||
uuid = "74087812-796a-5b5d-8853-05524746bad3"
|
||||
version = "1.6.1"
|
||||
|
||||
[[deps.RandomNumbers]]
|
||||
deps = ["Random", "Requires"]
|
||||
git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111"
|
||||
uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
|
||||
version = "1.5.3"
|
||||
|
||||
[[deps.RealDot]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9"
|
||||
uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.Reexport]]
|
||||
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
|
||||
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
||||
version = "1.2.2"
|
||||
|
||||
[[deps.Requires]]
|
||||
deps = ["UUIDs"]
|
||||
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
||||
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
|
||||
version = "1.3.0"
|
||||
|
||||
[[deps.Rmath]]
|
||||
deps = ["Random", "Rmath_jll"]
|
||||
git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b"
|
||||
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
|
||||
version = "0.7.1"
|
||||
|
||||
[[deps.Rmath_jll]]
|
||||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||||
git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da"
|
||||
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
|
||||
version = "0.4.0+0"
|
||||
|
||||
[[deps.SHA]]
|
||||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||||
version = "0.7.0"
|
||||
|
||||
[[deps.Scratch]]
|
||||
deps = ["Dates"]
|
||||
git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a"
|
||||
uuid = "6c6a2e73-6563-6170-7368-637461726353"
|
||||
version = "1.2.0"
|
||||
|
||||
[[deps.Serialization]]
|
||||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||||
|
||||
[[deps.Setfield]]
|
||||
deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"]
|
||||
git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac"
|
||||
uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
|
||||
version = "1.1.1"
|
||||
|
||||
[[deps.ShowCases]]
|
||||
git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5"
|
||||
uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3"
|
||||
version = "0.1.0"
|
||||
|
||||
[[deps.SimpleTraits]]
|
||||
deps = ["InteractiveUtils", "MacroTools"]
|
||||
git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231"
|
||||
uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
|
||||
version = "0.9.4"
|
||||
|
||||
[[deps.SnoopPrecompile]]
|
||||
deps = ["Preferences"]
|
||||
git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c"
|
||||
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.Sockets]]
|
||||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||||
|
||||
[[deps.SortingAlgorithms]]
|
||||
deps = ["DataStructures"]
|
||||
git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00"
|
||||
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
|
||||
version = "1.1.0"
|
||||
|
||||
[[deps.SparseArrays]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
|
||||
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
|
||||
|
||||
[[deps.SpecialFunctions]]
|
||||
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
|
||||
git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880"
|
||||
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
|
||||
version = "2.2.0"
|
||||
weakdeps = ["ChainRulesCore"]
|
||||
|
||||
[deps.SpecialFunctions.extensions]
|
||||
SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
|
||||
|
||||
[[deps.SplittablesBase]]
|
||||
deps = ["Setfield", "Test"]
|
||||
git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5"
|
||||
uuid = "171d559e-b47b-412a-8079-5efa626c420e"
|
||||
version = "0.1.15"
|
||||
|
||||
[[deps.StaticArrays]]
|
||||
deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"]
|
||||
git-tree-sha1 = "832afbae2a45b4ae7e831f86965469a24d1d8a83"
|
||||
uuid = "90137ffa-7385-5640-81b9-e52037218182"
|
||||
version = "1.5.26"
|
||||
|
||||
[[deps.StaticArraysCore]]
|
||||
git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a"
|
||||
uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
|
||||
version = "1.4.0"
|
||||
|
||||
[[deps.Statistics]]
|
||||
deps = ["LinearAlgebra", "SparseArrays"]
|
||||
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||||
version = "1.9.0"
|
||||
|
||||
[[deps.StatsAPI]]
|
||||
deps = ["LinearAlgebra"]
|
||||
git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7"
|
||||
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
|
||||
version = "1.6.0"
|
||||
|
||||
[[deps.StatsBase]]
|
||||
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
|
||||
git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4"
|
||||
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
||||
version = "0.34.0"
|
||||
|
||||
[[deps.StatsFuns]]
|
||||
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
|
||||
git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a"
|
||||
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
|
||||
version = "1.3.0"
|
||||
|
||||
[deps.StatsFuns.extensions]
|
||||
StatsFunsChainRulesCoreExt = "ChainRulesCore"
|
||||
StatsFunsInverseFunctionsExt = "InverseFunctions"
|
||||
|
||||
[deps.StatsFuns.weakdeps]
|
||||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||||
|
||||
[[deps.StructArrays]]
|
||||
deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"]
|
||||
git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389"
|
||||
uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
|
||||
version = "0.6.15"
|
||||
|
||||
[[deps.StructTypes]]
|
||||
deps = ["Dates", "UUIDs"]
|
||||
git-tree-sha1 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70"
|
||||
uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.SuiteSparse]]
|
||||
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
|
||||
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
|
||||
|
||||
[[deps.SuiteSparse_jll]]
|
||||
deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"]
|
||||
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
|
||||
version = "5.10.1+6"
|
||||
|
||||
[[deps.TOML]]
|
||||
deps = ["Dates"]
|
||||
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
|
||||
version = "1.0.3"
|
||||
|
||||
[[deps.TableTraits]]
|
||||
deps = ["IteratorInterfaceExtensions"]
|
||||
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
|
||||
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
|
||||
version = "1.0.1"
|
||||
|
||||
[[deps.Tables]]
|
||||
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
|
||||
git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec"
|
||||
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
|
||||
version = "1.10.1"
|
||||
|
||||
[[deps.Tar]]
|
||||
deps = ["ArgTools", "SHA"]
|
||||
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
|
||||
version = "1.10.0"
|
||||
|
||||
[[deps.Test]]
|
||||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||
|
||||
[[deps.TimerOutputs]]
|
||||
deps = ["ExprTools", "Printf"]
|
||||
git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7"
|
||||
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
|
||||
version = "0.5.23"
|
||||
|
||||
[[deps.Transducers]]
|
||||
deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
|
||||
git-tree-sha1 = "a66fb81baec325cf6ccafa243af573b031e87b00"
|
||||
uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999"
|
||||
version = "0.4.77"
|
||||
|
||||
[deps.Transducers.extensions]
|
||||
TransducersBlockArraysExt = "BlockArrays"
|
||||
TransducersDataFramesExt = "DataFrames"
|
||||
TransducersLazyArraysExt = "LazyArrays"
|
||||
TransducersOnlineStatsBaseExt = "OnlineStatsBase"
|
||||
TransducersReferenceablesExt = "Referenceables"
|
||||
|
||||
[deps.Transducers.weakdeps]
|
||||
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
|
||||
OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338"
|
||||
Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
|
||||
|
||||
[[deps.UUIDs]]
|
||||
deps = ["Random", "SHA"]
|
||||
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
||||
|
||||
[[deps.Unicode]]
|
||||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
||||
|
||||
[[deps.UnsafeAtomics]]
|
||||
git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278"
|
||||
uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f"
|
||||
version = "0.2.1"
|
||||
|
||||
[[deps.UnsafeAtomicsLLVM]]
|
||||
deps = ["LLVM", "UnsafeAtomics"]
|
||||
git-tree-sha1 = "ea37e6066bf194ab78f4e747f5245261f17a7175"
|
||||
uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249"
|
||||
version = "0.1.2"
|
||||
|
||||
[[deps.Zlib_jll]]
|
||||
deps = ["Libdl"]
|
||||
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
|
||||
version = "1.2.13+0"
|
||||
|
||||
[[deps.Zygote]]
|
||||
deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"]
|
||||
git-tree-sha1 = "5be3ddb88fc992a7d8ea96c3f10a49a7e98ebc7b"
|
||||
uuid = "e88e6eb3-aa80-5325-afca-941959d7151f"
|
||||
version = "0.6.62"
|
||||
|
||||
[deps.Zygote.extensions]
|
||||
ZygoteColorsExt = "Colors"
|
||||
ZygoteDistancesExt = "Distances"
|
||||
ZygoteTrackerExt = "Tracker"
|
||||
|
||||
[deps.Zygote.weakdeps]
|
||||
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
|
||||
Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
|
||||
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
|
||||
|
||||
[[deps.ZygoteRules]]
|
||||
deps = ["ChainRulesCore", "MacroTools"]
|
||||
git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d"
|
||||
uuid = "700de1a5-db45-46bc-99cf-38207098b444"
|
||||
version = "0.2.3"
|
||||
|
||||
[[deps.cuDNN]]
|
||||
deps = ["CEnum", "CUDA", "CUDNN_jll"]
|
||||
git-tree-sha1 = "f65490d187861d6222cb38bcbbff3fd949a7ec3e"
|
||||
uuid = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd"
|
||||
version = "1.0.4"
|
||||
|
||||
[[deps.libblastrampoline_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
||||
version = "5.8.0+0"
|
||||
|
||||
[[deps.nghttp2_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
|
||||
version = "1.48.0+0"
|
||||
|
||||
[[deps.p7zip_jll]]
|
||||
deps = ["Artifacts", "Libdl"]
|
||||
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
|
||||
version = "17.4.0+0"
|
||||
@@ -1,12 +0,0 @@
|
||||
name = "GeneralUtils"
|
||||
uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe"
|
||||
authors = ["tonaerospace <tonaerospace.etc@gmail.com>"]
|
||||
version = "0.1.0"
|
||||
|
||||
[deps]
|
||||
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
|
||||
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||
Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
|
||||
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||
@@ -1,81 +0,0 @@
|
||||
module GeneralUtils
|
||||
|
||||
|
||||
export noNegative!, randomWithProb, randomChoiceWithProb, findIndex, limitvalue
|
||||
|
||||
|
||||
include("interface.jl")
|
||||
using .interface
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
""" version 0.0.3
|
||||
Todo:
|
||||
- [*1] cartesianAssign for different matrix dimension
|
||||
|
||||
Change from version: 0.0.2
|
||||
-
|
||||
|
||||
All features
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # generalUtils
|
||||
File diff suppressed because it is too large
Load Diff
@@ -74,6 +74,7 @@ mutable struct mqttClientInstance_v2 <: mqttClientInstance
|
||||
onMsgCallback::Function
|
||||
qos::MQTTClient.QOS
|
||||
client::MQTTClient.Client
|
||||
clientId::String
|
||||
connection::MQTTClient.Connection
|
||||
keepalivetopic::String
|
||||
keepaliveChannel::Channel
|
||||
@@ -107,6 +108,8 @@ end
|
||||
A time interval to check whether the mqtt client still connect to mqtt broker
|
||||
- `qos`
|
||||
Quality of Service. Can be QOS_0, QOS_1, QOS_2
|
||||
- `clearOldMsg`
|
||||
Boolean to determine if old messages should be cleared from channels
|
||||
|
||||
# Return
|
||||
- `mqttInstance`
|
||||
@@ -151,11 +154,13 @@ function mqttClientInstance_v2(
|
||||
keepaliveChannel::Channel, # used for checkMqttConnection(). user needs to specify because it has to be accessible by user-defined onMsgCallback()
|
||||
onMsgCallback::Function
|
||||
;
|
||||
clientId::String="NA",
|
||||
mqttBrokerPort::Integer=1883,
|
||||
keepalivetopic::String= "/keepalive/$(uuid4snakecase())",
|
||||
keepaliveTopic::String= "/keepalive/$(uuid4snakecase())",
|
||||
keepaliveCheckInterval::Integer=30,
|
||||
qos::MQTTClient.QOS=QOS_1,
|
||||
multiMsg::String="single",
|
||||
multiMsg::String="single", #[PENDING] bad design. this info should be stored in each msgMeta
|
||||
clearOldMsg::Bool=true,
|
||||
)
|
||||
|
||||
client, connection = MQTTClient.MakeConnection(mqttBrokerAddress, mqttBrokerPort)
|
||||
@@ -163,7 +168,9 @@ function mqttClientInstance_v2(
|
||||
for i in subtopic
|
||||
MQTTClient.subscribe(client, i, onMsgCallback, qos=qos)
|
||||
end
|
||||
MQTTClient.subscribe(client, keepalivetopic, onMsgCallback, qos=qos)
|
||||
MQTTClient.subscribe(client, keepaliveTopic, onMsgCallback, qos=qos)
|
||||
|
||||
keepaliveTopic = clientId == "NA" ? keepaliveTopic : "/keepalive/$clientId"
|
||||
|
||||
instance = mqttClientInstance_v2(
|
||||
mqttBrokerAddress,
|
||||
@@ -173,8 +180,9 @@ function mqttClientInstance_v2(
|
||||
onMsgCallback,
|
||||
qos,
|
||||
client,
|
||||
clientId,
|
||||
connection,
|
||||
keepalivetopic,
|
||||
keepaliveTopic,
|
||||
keepaliveChannel,
|
||||
keepaliveCheckInterval,
|
||||
nothing,
|
||||
@@ -182,11 +190,23 @@ function mqttClientInstance_v2(
|
||||
nothing, # store latest message to prevent doing the same massage twice
|
||||
)
|
||||
|
||||
if clearOldMsg
|
||||
chnames = keys(msgReceiveChannel)
|
||||
for i in chnames
|
||||
totalmsg = msgReceiveChannel[i].n_avail_items #[TESTING]
|
||||
if totalmsg > 0
|
||||
while isready(msgReceiveChannel[i])
|
||||
_ = take!(msgReceiveChannel[i])
|
||||
end
|
||||
println("Total $totalmsg old MQTT messages cleared ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
|
||||
|
||||
|
||||
""" Generate msgMeta to be including in a message. So the message receiver know
|
||||
what to do with the message.
|
||||
|
||||
@@ -331,8 +351,6 @@ end
|
||||
-----
|
||||
"""
|
||||
function isMqttConnectionAlive(mqttInstance::T)::Bool where {T<:mqttClientInstance}
|
||||
|
||||
starttime = Dates.now()
|
||||
isconnectionalive = false
|
||||
|
||||
# ditch old keepalive msg is any
|
||||
@@ -354,9 +372,9 @@ function isMqttConnectionAlive(mqttInstance::T)::Bool where {T<:mqttClientInstan
|
||||
|
||||
publish(mqttInstance.client, keepaliveMsg[:msgMeta][:sendTopic],
|
||||
JSON3.write(keepaliveMsg))
|
||||
|
||||
timediff = 0
|
||||
while timediff < 5
|
||||
starttime = Dates.now()
|
||||
while timediff <= 5
|
||||
timediff = timedifference(starttime, Dates.now(), "seconds")
|
||||
if isready(mqttInstance.keepaliveChannel)
|
||||
incomingMsg = take!(mqttInstance.keepaliveChannel)
|
||||
@@ -378,7 +396,7 @@ end
|
||||
-----
|
||||
mqttInstanceDict::Dict{Symbol, Any}
|
||||
a dictionary contain mqtt instance. 1 per mqtt client.
|
||||
interval::Integer
|
||||
keepaliveCheckInterval::Integer
|
||||
time interval to check mqtt server in seconds
|
||||
|
||||
Return\n
|
||||
@@ -398,7 +416,7 @@ end
|
||||
-----
|
||||
"""
|
||||
function checkMqttConnection!(mqttInstance::T;
|
||||
keepaliveCheckInterval::Union{Integer, Nothing}=nothing) where {T<:mqttClientInstance}
|
||||
keepaliveCheckInterval::Union{Integer, Nothing}=nothing)::Union{Bool, Nothing} where {T<:mqttClientInstance}
|
||||
|
||||
interval = keepaliveCheckInterval !== nothing ? keepaliveCheckInterval : mqttInstance.keepaliveCheckInterval
|
||||
|
||||
@@ -410,29 +428,32 @@ function checkMqttConnection!(mqttInstance::T;
|
||||
Inf
|
||||
end
|
||||
|
||||
isreconnect = false # this value is true if connection is disconnected
|
||||
if intervaldiff > interval
|
||||
connectionStatusStart = isMqttConnectionAlive(mqttInstance) # a flag to note whether the connection status has changed from false to true
|
||||
while true
|
||||
mqttConnStatus = isMqttConnectionAlive(mqttInstance)
|
||||
if mqttConnStatus == false
|
||||
isreconnect = true
|
||||
println("mqtt connection disconnected, attemping to reconnect $(Dates.now())")
|
||||
sleep(5) # wait
|
||||
println("MQTT connection disconnected, attemping to reconnect $(Dates.now()) at $(mqttInstance.mqttBrokerAddress):$(mqttInstance.mqttBrokerPort)")
|
||||
# use new client to reconnect instead of the previous one because I don't want to modify MQTTClient.jl yet
|
||||
mqttInstance.client, mqttInstance.connection =
|
||||
MakeConnection(mqttInstance.mqttBrokerAddress,
|
||||
mqttInstance.mqttBrokerPort)
|
||||
try
|
||||
connect(mqttInstance.client, mqttInstance.connection)
|
||||
for topic in mqttInstance.subtopic
|
||||
subscribe(mqttInstance.client, topic, mqttInstance.onMsgCallback, qos=mqttInstance.qos)
|
||||
end
|
||||
MQTTClient.subscribe(mqttInstance.client, mqttInstance.keepalivetopic, mqttInstance.onMsgCallback, qos=mqttInstance.qos)
|
||||
sleep(1) # wait before checking connection again
|
||||
catch
|
||||
println("Failed to reconnect MQTT broker at $(mqttInstance.mqttBrokerAddress):$(mqttInstance.mqttBrokerPort) $(Dates.now())")
|
||||
end
|
||||
else
|
||||
mqttInstance.lastTimeMqttConnCheck = Dates.now()
|
||||
if isreconnect
|
||||
println("connected to mqtt broker")
|
||||
if connectionStatusStart != mqttConnStatus
|
||||
println("Reconnected to MQTT broker at $(mqttInstance.mqttBrokerAddress):$(mqttInstance.mqttBrokerPort) $(Dates.now())")
|
||||
end
|
||||
return isreconnect
|
||||
return mqttConnStatus
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -518,8 +539,10 @@ end
|
||||
an outgoing message
|
||||
|
||||
# Keyword Arguments
|
||||
- `timeout::Integer`
|
||||
time to wait for a response before error
|
||||
- `timeout::Integer=60`
|
||||
time in seconds to wait for a response before error
|
||||
- `maxattempt::Integer=1`
|
||||
maximum number of attempts to send and receive message
|
||||
|
||||
# Return
|
||||
- `result::NamedTuple`
|
||||
@@ -547,14 +570,12 @@ julia> outgoingMsg = Dict(
|
||||
julia> success, error, response = GeneralUtils.sendReceiveMqttMsg(outgoingMsg)
|
||||
```
|
||||
|
||||
# TODO
|
||||
- [] update docs
|
||||
|
||||
# Signature
|
||||
"""
|
||||
function sendReceiveMqttMsg(outgoingMsg::Dict{Symbol, T};
|
||||
timeout::Integer=60, maxattempt::Integer=1)::NamedTuple where {T<:Any}
|
||||
mqttMsgReceiveTopic = "/GeneralUtils_sendReceiveMqttMsg/$(outgoingMsg[:msgMeta][:senderId])"
|
||||
connectiontimeout::Integer=600, responsetimeout::Integer=60, responsemaxattempt::Integer=1)::NamedTuple where {T<:Any}
|
||||
senderId = outgoingMsg[:msgMeta][:senderId]
|
||||
mqttMsgReceiveTopic = "/GeneralUtils_sendReceiveMqttMsg/$senderId"
|
||||
mqttMsgReceiveChannel = (ch1=Channel(8),)
|
||||
keepaliveChannel = Channel(8)
|
||||
outgoingMsg[:msgMeta][:replyTopic] = mqttMsgReceiveTopic
|
||||
@@ -562,43 +583,72 @@ function sendReceiveMqttMsg(outgoingMsg::Dict{Symbol, T};
|
||||
# Define the callback for receiving messages.
|
||||
function onMsgCallback(topic, payload)
|
||||
jobj = JSON3.read(String(payload))
|
||||
onMsg = copy(jobj)
|
||||
put!(mqttMsgReceiveChannel[:ch1], onMsg)
|
||||
incomingMqttMsg = copy(jobj)
|
||||
|
||||
if occursin("GeneralUtils_sendReceiveMqttMsg", topic)
|
||||
put!(mqttMsgReceiveChannel[:ch1], incomingMqttMsg)
|
||||
elseif occursin("keepalive", topic)
|
||||
put!(keepaliveChannel, incomingMqttMsg)
|
||||
else
|
||||
println("undefined condition ", @__FILE__, " ", @__LINE__)
|
||||
end
|
||||
end
|
||||
|
||||
mqttInstance = nothing
|
||||
attempt = 0
|
||||
starttime = Dates.now()
|
||||
endtime = starttime + Second(connectiontimeout)
|
||||
errormsg = nothing
|
||||
while true
|
||||
timenow = Dates.now()
|
||||
timepass = timedifference(starttime, timenow, "seconds")
|
||||
timeleft = timedifference(timenow, endtime, "seconds")
|
||||
|
||||
if timepass <= connectiontimeout
|
||||
attempt += 1
|
||||
attempt > 1 ? println("Attempt $attempt to connect to MQTT broker. Timed out in $timeleft seconds. $errormsg") : nothing
|
||||
|
||||
try
|
||||
mqttInstance = mqttClientInstance_v2(
|
||||
outgoingMsg[:msgMeta][:mqttBrokerAddress],
|
||||
[mqttMsgReceiveTopic],
|
||||
mqttMsgReceiveChannel,
|
||||
keepaliveChannel,
|
||||
onMsgCallback;
|
||||
mqttBrokerPort=outgoingMsg[:msgMeta][:mqttBrokerPort]
|
||||
mqttBrokerPort=outgoingMsg[:msgMeta][:mqttBrokerPort],
|
||||
clientId=senderId
|
||||
)
|
||||
break
|
||||
catch e
|
||||
errormsg = e
|
||||
sleep(5)
|
||||
end
|
||||
else
|
||||
println("Failed to instantiate MQTT client after $timepass seconds. $errormsg")
|
||||
return nothing
|
||||
end
|
||||
end
|
||||
|
||||
response = sendReceiveMqttMsg(mqttInstance, :ch1, outgoingMsg; timeout=timeout, maxattempt=maxattempt)
|
||||
response = sendReceiveMqttMsg(mqttInstance, :ch1, outgoingMsg;
|
||||
responsetimeout=responsetimeout, responsemaxattempt=responsemaxattempt)
|
||||
try disconnect(mqttInstance.client) catch end
|
||||
|
||||
return response
|
||||
end
|
||||
|
||||
function sendReceiveMqttMsg(mqttInstance::mqttClientInstance_v2, receivechannel::Symbol,
|
||||
outgoingMsg::Dict{Symbol, T}; timeout::Integer=60, maxattempt::Integer=1
|
||||
outgoingMsg::Dict{Symbol, T}; responsetimeout::Integer=60, responsemaxattempt::Integer=1
|
||||
)::NamedTuple where {T<:Any}
|
||||
|
||||
timepass = nothing
|
||||
attempts = 1
|
||||
while attempts <= maxattempt
|
||||
if attempts > 1
|
||||
println("attempts $attempts ", @__FILE__, " ", @__LINE__)
|
||||
end
|
||||
|
||||
while attempts <= responsemaxattempt
|
||||
sendMqttMsg(mqttInstance, outgoingMsg)
|
||||
|
||||
starttime = Dates.now()
|
||||
while true
|
||||
timepass = timedifference(starttime, Dates.now(), "seconds")
|
||||
|
||||
if timepass <= timeout
|
||||
if timepass <= responsetimeout
|
||||
if isready(mqttInstance.msgReceiveChannel[receivechannel])
|
||||
incomingMsg = take!(mqttInstance.msgReceiveChannel[receivechannel])
|
||||
|
||||
@@ -616,7 +666,12 @@ function sendReceiveMqttMsg(mqttInstance::mqttClientInstance_v2, receivechannel:
|
||||
end
|
||||
sleep(1)
|
||||
end
|
||||
|
||||
if attempts > 1
|
||||
println("\n<sendReceiveMqttMsg()> attempts $attempts/$responsemaxattempt ", @__FILE__, ":", @__LINE__, " $(Dates.now())")
|
||||
pprintln(outgoingMsg)
|
||||
println("</sendReceiveMqttMsg()> attempts $attempts/$responsemaxattempt ", @__FILE__, ":", @__LINE__, " $(Dates.now())\n")
|
||||
checkMqttConnection!(mqttInstance, keepaliveCheckInterval=5)
|
||||
end
|
||||
attempts += 1
|
||||
end
|
||||
|
||||
@@ -626,80 +681,23 @@ function sendReceiveMqttMsg(mqttInstance::mqttClientInstance_v2, receivechannel:
|
||||
end
|
||||
|
||||
|
||||
# function sendReceiveMqttMsg(outgoingMsg::Dict{Symbol, T};
|
||||
# timeout::Integer=60, maxattempt::Integer=1)::NamedTuple where {T<:Any}
|
||||
|
||||
# mqttMsgReceiveTopic = "/GeneralUtils_sendReceiveMqttMsg/$(outgoingMsg[:msgMeta][:senderId])"
|
||||
# mqttMsgReceiveChannel = Channel(4)
|
||||
|
||||
# # ask message receiver to send a message back to specified topic
|
||||
# outgoingMsg[:msgMeta][:replyTopic] = mqttMsgReceiveTopic
|
||||
|
||||
# # Define the callback for receiving messages.
|
||||
# function onMsgCallback(topic, payload)
|
||||
# jobj = JSON3.read(String(payload))
|
||||
# onMsg = copy(jobj)
|
||||
# put!(mqttMsgReceiveChannel, onMsg)
|
||||
# end
|
||||
|
||||
# # Instantiate a client and connection.
|
||||
# client, connection = MakeConnection(outgoingMsg[:msgMeta][:mqttBrokerAddress],
|
||||
# outgoingMsg[:msgMeta][:mqttBrokerPort])
|
||||
# connect(client, connection)
|
||||
# subscribe(client, mqttMsgReceiveTopic, onMsgCallback, qos=QOS_1)
|
||||
|
||||
# timepass = nothing
|
||||
# attempts = 1
|
||||
# while attempts <= maxattempt
|
||||
# publish(client, outgoingMsg[:msgMeta][:sendTopic], JSON3.write(outgoingMsg))
|
||||
|
||||
# starttime = Dates.now()
|
||||
# while true
|
||||
# timepass = timedifference(starttime, Dates.now(), "seconds")
|
||||
|
||||
# if timepass <= timeout
|
||||
# if isready(mqttMsgReceiveChannel)
|
||||
# incomingMsg = take!(mqttMsgReceiveChannel)
|
||||
|
||||
# if incomingMsg[:msgMeta][:replyToMsgId] == outgoingMsg[:msgMeta][:msgId]
|
||||
# if msgPurpose == "NACK"
|
||||
# break # resend the msg
|
||||
# else
|
||||
# # disconnect mqtt
|
||||
# unsubscribe(client, mqttMsgReceiveTopic)
|
||||
# disconnect(client)
|
||||
# return (success=true, error=nothing, response=incomingMsg[:payload])
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# else
|
||||
# break
|
||||
# end
|
||||
# sleep(1)
|
||||
# end
|
||||
# println("attempts $attempts ", @__FILE__, " ", @__LINE__)
|
||||
# attempts += 1
|
||||
# end
|
||||
|
||||
# # disconnect mqtt
|
||||
# unsubscribe(client, mqttMsgReceiveTopic)
|
||||
# disconnect(client)
|
||||
# return (success=false,
|
||||
# error="no response, timeout $timepass/$timeout, $attempts publish attempted",
|
||||
# response=nothing)
|
||||
# end
|
||||
|
||||
|
||||
|
||||
""" Send a message to specified MQTT topic then wait for reply.
|
||||
|
||||
# Arguments
|
||||
- `outgoingMsg::Dict`
|
||||
an outgoing message
|
||||
- `workDict::Dict`
|
||||
A dictionary containing workspace data
|
||||
- `incomingMsg::Dict`
|
||||
The incoming message to process
|
||||
|
||||
# Keyword Arguments
|
||||
- `data`
|
||||
Optional data to be transferred. Default is nothing.
|
||||
|
||||
# Return
|
||||
- `result::NamedTuple`
|
||||
( success= true, error= nothing )
|
||||
- `result::Dict`
|
||||
A dictionary containing either:
|
||||
- Metadata about the data transfer session if initiating a new transfer
|
||||
- The requested data part if responding to a data part request
|
||||
|
||||
# Example
|
||||
```jldoctest
|
||||
@@ -719,9 +717,7 @@ end
|
||||
julia> success, error = GeneralUtils.sendMqttMsg(outgoingMsg)
|
||||
```
|
||||
# TODO
|
||||
- [x] implement crude version of this function
|
||||
- [] update docs
|
||||
- [] transfer multiple msg with the same mqtt connection. The transfer loop should be
|
||||
- [x] transfer multiple msg with the same mqtt connection. The transfer loop should be
|
||||
implemented by passing mqttInstance into sendReceiveMqttMsg() so that
|
||||
1-connection is used to send all data
|
||||
- [] partsize should be calculate from the fact that MQTT max size is 4MB (256MB theorectically)
|
||||
@@ -838,7 +834,6 @@ function dataTransferOverMQTT_sender(workDict::Dict, incomingMsg::Dict; data=not
|
||||
|
||||
return d
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
""" Send a message to specified MQTT topic then wait for reply.
|
||||
|
||||
284
src/llmUtil.jl
284
src/llmUtil.jl
@@ -1,6 +1,6 @@
|
||||
module llmUtil
|
||||
|
||||
export formatLLMtext, formatLLMtext_llama3instruct, jsoncorrection
|
||||
export formatLLMtext, formatLLMtext_llama3instruct, jsoncorrection, deFormatLLMtext, extractthink
|
||||
|
||||
using UUIDs, JSON3, Dates
|
||||
using GeneralUtils
|
||||
@@ -42,7 +42,8 @@ julia> formattedtext = YiemAgent.formatLLMtext_llama3instruct(d[:name], d[:text]
|
||||
|
||||
Signature
|
||||
"""
|
||||
function formatLLMtext_llama3instruct(name::T, text::T) where {T<:AbstractString}
|
||||
function formatLLMtext_llama3instruct(name::T, text::T;
|
||||
assistantStarter::Bool=false) where {T<:AbstractString}
|
||||
formattedtext =
|
||||
if name == "system"
|
||||
"""
|
||||
@@ -58,38 +59,133 @@ function formatLLMtext_llama3instruct(name::T, text::T) where {T<:AbstractString
|
||||
"""
|
||||
end
|
||||
|
||||
if assistantStarter
|
||||
formattedtext *=
|
||||
"""
|
||||
<|start_header_id|>assistant<|end_header_id|>
|
||||
"""
|
||||
end
|
||||
|
||||
return formattedtext
|
||||
end
|
||||
# function formatLLMtext_llama3instruct(name::T, text::T) where {T<:AbstractString}
|
||||
# formattedtext =
|
||||
# if name == "system"
|
||||
# """
|
||||
# <|begin_of_text|>
|
||||
# <|start_header_id|>$name<|end_header_id|>
|
||||
# $text
|
||||
# <|eot_id|>
|
||||
# """
|
||||
# else
|
||||
# """
|
||||
# <|start_header_id|>$name<|end_header_id|>
|
||||
# $text
|
||||
# <|eot_id|>
|
||||
# """
|
||||
# end
|
||||
|
||||
# return formattedtext
|
||||
# end
|
||||
|
||||
function formatLLMtext_qwen(name::T, text::T;
|
||||
assistantStarter::Bool=false) where {T<:AbstractString}
|
||||
formattedtext =
|
||||
if name == "system"
|
||||
"""
|
||||
<|im_start|>$name
|
||||
$text
|
||||
<|im_end|>
|
||||
"""
|
||||
else
|
||||
"""
|
||||
<|im_start|>$name
|
||||
$text
|
||||
<|im_end|>
|
||||
"""
|
||||
end
|
||||
|
||||
if assistantStarter
|
||||
formattedtext *=
|
||||
"""
|
||||
<|im_start|>assistant
|
||||
"""
|
||||
end
|
||||
|
||||
return formattedtext
|
||||
end
|
||||
|
||||
|
||||
function formatLLMtext_qwen3(name::T, text::T;
|
||||
assistantStarter::Bool=false) where {T<:AbstractString}
|
||||
formattedtext =
|
||||
if name == "system"
|
||||
"""
|
||||
<|im_start|>$name
|
||||
$text
|
||||
<|im_end|>
|
||||
"""
|
||||
else
|
||||
"""
|
||||
<|im_start|>$name
|
||||
$text
|
||||
<|im_end|>
|
||||
"""
|
||||
end
|
||||
|
||||
if assistantStarter
|
||||
formattedtext *=
|
||||
"""
|
||||
<|im_start|>assistant
|
||||
"""
|
||||
end
|
||||
|
||||
return formattedtext
|
||||
end
|
||||
|
||||
|
||||
function formatLLMtext_phi4(name::T, text::T;
|
||||
assistantStarter::Bool=false) where {T<:AbstractString}
|
||||
formattedtext =
|
||||
if name == "system"
|
||||
"""
|
||||
<|system|>
|
||||
$text
|
||||
<|end|>
|
||||
"""
|
||||
else
|
||||
"""
|
||||
<|assistant|>
|
||||
$text
|
||||
<|end|>
|
||||
"""
|
||||
end
|
||||
|
||||
if assistantStarter
|
||||
formattedtext *=
|
||||
"""
|
||||
<|assistant|>
|
||||
"""
|
||||
end
|
||||
|
||||
return formattedtext
|
||||
end
|
||||
|
||||
|
||||
function formatLLMtext_granite3(name::T, text::T;
|
||||
assistantStarter::Bool=false) where {T<:AbstractString}
|
||||
formattedtext =
|
||||
if name == "system"
|
||||
"""
|
||||
<|start_of_role|>system<|end_of_role|>{$text}<|end_of_text|>
|
||||
"""
|
||||
else
|
||||
"""
|
||||
<|start_of_role|>$name<|end_of_role|>{$text}<|end_of_text|>
|
||||
"""
|
||||
end
|
||||
|
||||
if assistantStarter
|
||||
formattedtext *=
|
||||
"""
|
||||
<|start_of_role|>assistant<|end_of_role|>{
|
||||
"""
|
||||
end
|
||||
|
||||
return formattedtext
|
||||
end
|
||||
|
||||
|
||||
|
||||
""" Convert a chat messages in vector of dictionary into LLM model instruct format.
|
||||
""" Convert a vector of chat message dictionaries into LLM model instruct format.
|
||||
|
||||
# Arguments
|
||||
- `messages::Vector{Dict{Symbol, T}}`
|
||||
message owner name e.f. "system", "user" or "assistant"
|
||||
A vector of dictionaries where each dictionary contains the keys `:name` (the name of the message owner) and `:text` (the text of the message).
|
||||
- `formatname::T`
|
||||
format name to be used
|
||||
|
||||
The name of the format to be used for converting the chat messages.
|
||||
# Return
|
||||
- `formattedtext::String`
|
||||
text formatted to model format
|
||||
@@ -106,34 +202,137 @@ julia> chatmessage = [
|
||||
julia> formattedtext = YiemAgent.formatLLMtext(chatmessage, "llama3instruct")
|
||||
"<|begin_of_text|>\n <|start_header_id|>system<|end_header_id|>\n You are a helpful, respectful and honest assistant.\n <|eot_id|>\n <|start_header_id|>user<|end_header_id|>\n list me all planets in our solar system.\n <|eot_id|>\n <|start_header_id|>assistant<|end_header_id|>\n I'm sorry. I don't know. You tell me.\n <|eot_id|>\n"
|
||||
```
|
||||
|
||||
# Signature
|
||||
"""
|
||||
function formatLLMtext(messages::Vector{Dict{Symbol, T}}; formatname::String="llama3instruct"
|
||||
)::String where {T<:Any}
|
||||
f = if formatname == "llama3instruct"
|
||||
function formatLLMtext(messages::Vector{Dict{Symbol, T}}, formatname::String
|
||||
)::String where {T<:AbstractString}
|
||||
f =
|
||||
if formatname == "llama3instruct"
|
||||
formatLLMtext_llama3instruct
|
||||
elseif formatname == "mistral"
|
||||
# not define yet
|
||||
elseif formatname == "phi3instruct"
|
||||
formatLLMtext_phi3instruct
|
||||
# not define yet
|
||||
elseif formatname == "qwen"
|
||||
formatLLMtext_qwen
|
||||
elseif formatname == "qwen3"
|
||||
formatLLMtext_qwen3
|
||||
elseif formatname == "phi4"
|
||||
formatLLMtext_phi4
|
||||
elseif formatname == "granite3"
|
||||
formatLLMtext_granite3
|
||||
else
|
||||
error("$formatname template not define yet")
|
||||
end
|
||||
|
||||
str = ""
|
||||
for t in messages
|
||||
for (i, t) in enumerate(messages)
|
||||
if i < length(messages)
|
||||
str *= f(t[:name], t[:text])
|
||||
else
|
||||
str *= f(t[:name], t[:text]; assistantStarter=true)
|
||||
end
|
||||
|
||||
# add <|assistant|> so that the model don't generate it and I don't need to clean it up later
|
||||
if formatname == "phi3instruct"
|
||||
str *= "<|assistant|>\n"
|
||||
end
|
||||
|
||||
return str
|
||||
end
|
||||
|
||||
""" Revert LLM-format response back into regular text.
|
||||
|
||||
# Arguments
|
||||
- `text::String`
|
||||
The LLM formatted string to be converted.
|
||||
|
||||
# Return
|
||||
- `normalText::String`
|
||||
The original plain text extracted from the given LLM-formatted string.
|
||||
|
||||
# Example
|
||||
```jldoctest
|
||||
julia> using Revise
|
||||
julia> using YiemAgent
|
||||
julia> response = "<|begin_of_text|>This is a sample system instruction.<|eot_id|>"
|
||||
julia> normalText = YiemAgent.deFormatLLMtext(response, "granite3")
|
||||
"This is a sample system instruction."
|
||||
```
|
||||
"""
|
||||
function deFormatLLMtext(text::String, formatname::String; includethink::Bool=false
|
||||
)::String
|
||||
f =
|
||||
if formatname == "granite3"
|
||||
deFormatLLMtext_granite3
|
||||
elseif formatname == "qwen3"
|
||||
deFormatLLMtext_qwen3
|
||||
else
|
||||
error("$formatname template not define yet")
|
||||
end
|
||||
|
||||
r = f(text)
|
||||
result = r === nothing ? text : r
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
""" Revert LLM-format response back into regular text for Granite 3 format.
|
||||
|
||||
# Arguments
|
||||
- `text::String`
|
||||
The LLM formatted string to be converted.
|
||||
|
||||
# Return
|
||||
- `normalText::Union{Nothing, String}`
|
||||
The original plain text extracted from the given LLM-formatted string.
|
||||
Returns nothing if the text is not in Granite 3 format.
|
||||
|
||||
# Example
|
||||
```jldoctest
|
||||
julia> using Revise
|
||||
julia> using YiemAgent
|
||||
julia> response = "{This is a sample LLM response.}"
|
||||
julia> normalText = YiemAgent.deFormatLLMtext(response, "granite3")
|
||||
"This is a sample LLM response."
|
||||
"""
|
||||
function deFormatLLMtext_granite3(text::String)::Union{Nothing, String}
|
||||
# check if '{' and '}' are in the text because it's a special format for the LLM response
|
||||
if contains(text, "<|im_start|>assistant")
|
||||
# get the text between '{' and '}'
|
||||
text_between_braces = GeneralUtils.extractTextBetweenCharacter(text, '{', '}')[1]
|
||||
return text_between_braces
|
||||
elseif text[end] == '}'
|
||||
text = "{$text"
|
||||
text_between_braces = GeneralUtils.extractTextBetweenCharacter(text, '{', '}')[1]
|
||||
else
|
||||
return nothing
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function deFormatLLMtext_qwen3(text::String)::Union{Nothing, String}
|
||||
return text
|
||||
end
|
||||
|
||||
# function deFormatLLMtext_qwen3(text::String; includethink::Bool=false)::Union{Nothing, String}
|
||||
# think = nothing
|
||||
# str = nothing
|
||||
|
||||
# if occursin("<think>", text)
|
||||
# r = GeneralUtils.extractTextBetweenString(text, "<think>", "</think>")
|
||||
# if r[:success]
|
||||
# think = r[:text]
|
||||
# end
|
||||
# str = string(split(text, "</think>")[2])
|
||||
# end
|
||||
|
||||
# if includethink == true && occursin("<think>", text)
|
||||
# result = "ModelThought: $think $str"
|
||||
# return result
|
||||
# elseif includethink == false && occursin("<think>", text)
|
||||
# result = str
|
||||
# return result
|
||||
# else
|
||||
# return text
|
||||
# end
|
||||
# end
|
||||
|
||||
|
||||
""" Attemp to correct LLM response's incorrect JSON response.
|
||||
|
||||
@@ -224,7 +423,20 @@ function jsoncorrection(config::T1, input::T2, correctJsonExample::T3;
|
||||
end
|
||||
|
||||
|
||||
|
||||
function extractthink(text::String)
|
||||
think = nothing
|
||||
str = nothing
|
||||
if occursin("<think>", text)
|
||||
r = GeneralUtils.extractTextBetweenString(text, "<think>", "</think>")
|
||||
if r[:success]
|
||||
think = r[:text]
|
||||
end
|
||||
str = string(split(text, "</think>")[2])
|
||||
else
|
||||
str = text
|
||||
end
|
||||
return think, str
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
477
src/util.jl
477
src/util.jl
@@ -5,7 +5,9 @@ export timedifference, showstracktrace, findHighestIndexKey, uuid4snakecase, rep
|
||||
dataframeToCSV, dfToVectorDict, disintegrate_vectorDict, getDataFrameValue, dfRowtoString,
|
||||
dfToString, dataframe_to_json_list, dictToString, dictToString_noKey,
|
||||
dictToString_numbering, extract_triple_backtick_text,
|
||||
countGivenWords, remove_french_accents, detect_keyword, extractTextBetweenCharacter
|
||||
countGivenWords, remove_french_accents, detect_keyword, extractTextBetweenCharacter,
|
||||
extractTextBetweenString,
|
||||
convertCamelSnakeKebabCase, fitrange, recentElementsIndex, nonRecentElementsIndex
|
||||
|
||||
using JSON3, DataStructures, Distributions, Random, Dates, UUIDs, MQTTClient, DataFrames
|
||||
|
||||
@@ -41,6 +43,7 @@ function timedifference(starttime::DateTime, stoptime::DateTime, unit::String)::
|
||||
diff = stoptime - starttime
|
||||
unit = lowercase(unit)
|
||||
|
||||
# Check the unit and calculate the time difference accordingly
|
||||
if unit == "milliseconds"
|
||||
return diff.value
|
||||
elseif unit == "seconds"
|
||||
@@ -277,17 +280,20 @@ OrderedCollections.OrderedDict{Any, Any}(:thought => "what to do",
|
||||
|
||||
# Signature
|
||||
"""
|
||||
function textToDict(text::String, keywords::Vector{String};
|
||||
rightmarker::Union{String, Nothing}=nothing, symbolkey::Bool=false, lowercasekey::Bool=false
|
||||
function textToDict(text::String, detectKeywords::Vector{String};
|
||||
dictKey::Union{Vector{String}, Nothing}=nothing,
|
||||
symbolkey::Bool=false, lowercasekey::Bool=false
|
||||
)::OrderedDict
|
||||
|
||||
# make sure this function detect variation of a work e.g. agent, Agent, AGENT
|
||||
kw = []
|
||||
# use for loop and detect_keyword function to get the exact variation of each keyword in the text then push to kw list
|
||||
for keyword in keywords
|
||||
for keyword in detectKeywords
|
||||
detected = detect_keyword(keyword, text)
|
||||
if detected !== nothing
|
||||
push!(kw, detected)
|
||||
else
|
||||
error("Keyword $keyword not found in text.")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -299,31 +305,32 @@ function textToDict(text::String, keywords::Vector{String};
|
||||
end
|
||||
|
||||
remainingtext = text
|
||||
dictKey_ = reverse(dictKey)
|
||||
|
||||
for keyword in reverse(kw)
|
||||
mkeyword = rightmarker !== nothing ? keyword * rightmarker : keyword
|
||||
|
||||
# process text from back to front
|
||||
rkw = reverse(kw)
|
||||
for (i,keyword) in enumerate(rkw)
|
||||
# Find the position of the keyword in the text
|
||||
keywordidx = findlast(mkeyword, remainingtext)
|
||||
keywordidx = findlast(keyword, remainingtext)
|
||||
dKey = dictKey_[i]
|
||||
|
||||
if keywordidx !== nothing
|
||||
substr = remainingtext[keywordidx[end]+1:end]
|
||||
str = string(strip(substr)) # Removes both leading and trailing whitespace.
|
||||
_key = lowercasekey == true ? lowercase(keyword) : keyword
|
||||
_key = lowercasekey == true ? lowercase(dKey) : dKey
|
||||
key = symbolkey == true ? Symbol(_key) : _key
|
||||
od1[key] = str
|
||||
remainingtext = remainingtext[1:keywordidx[1]-1]
|
||||
else
|
||||
error("""keyword "$keyword" not found in the provided text""")
|
||||
error("""keyword "$keyword" not found in the provided text: $text </end of error note>""")
|
||||
end
|
||||
end
|
||||
|
||||
kw = lowercasekey == true ? lowercase.(kw) : kw
|
||||
|
||||
# correct the order
|
||||
for keyword in kw
|
||||
key = symbolkey == true ? Symbol(keyword) : keyword
|
||||
od2[key] = od1[key]
|
||||
ks = reverse([i for i in keys(od1)])
|
||||
for k in ks
|
||||
k = symbolkey == true ? Symbol(k) : k
|
||||
od2[k] = od1[k]
|
||||
end
|
||||
|
||||
return od2
|
||||
@@ -741,10 +748,10 @@ end
|
||||
Extracts text enclosed within triple backticks (```) from the given string.
|
||||
|
||||
# Arguments:
|
||||
- `text::String`: The input string containing potential triple backtick blocks.
|
||||
- `text::String` The input string containing potential triple backtick blocks.
|
||||
|
||||
# Returns:
|
||||
- `Vector{String}`: A vector of strings, each representing a block of text enclosed within triple backticks found in the input string.
|
||||
- `Vector{String}` A vector of strings, each representing a block of text enclosed within triple backticks found in the input string.
|
||||
|
||||
# Examples:
|
||||
```jldoctest
|
||||
@@ -766,17 +773,134 @@ function extract_triple_backtick_text(input::String)::Vector{String}
|
||||
end
|
||||
|
||||
|
||||
wordwindow(word::String, startindex::Integer)::UnitRange = startindex:startindex + length(word) -1
|
||||
|
||||
function cuttext(range, text)
|
||||
# check whether range is outside text boundary
|
||||
if range.start > length(text) || range.stop > length(text)
|
||||
return nothing
|
||||
else
|
||||
return text[range]
|
||||
end
|
||||
end
|
||||
|
||||
"""
|
||||
detect_keyword(keywords::AbstractVector{String}, text::String; mode::Union{String, Nothing}=nothing, delimiter::AbstractVector=[' ', '\n', '.']) -> Dict{String, Integer}
|
||||
|
||||
Detects and counts occurrences of multiple keywords in the text in different case variations (lowercase, uppercase first letter, or all uppercase).
|
||||
|
||||
# Arguments
|
||||
- `keywords::AbstractVector{String}` Vector of keywords to search for
|
||||
- `text::String` The text to search in
|
||||
|
||||
# Keyword Arguments
|
||||
- `mode::Union{String, Nothing}` When set to "individual", only counts matches that are individual words (default: nothing)
|
||||
- `delimiter::AbstractVector` Characters used to determine word boundaries when mode="individual" (default: [' ', '\n', '.'])
|
||||
|
||||
# Returns
|
||||
- `Dict{String, Integer}` Returns a dictionary mapping each keyword to its count in the text (0 if not found)
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
julia> detect_keyword(["test", "example"], "This is a Test EXAMPLE")
|
||||
Dict{String, Integer}("test" => 1, "example" => 1)
|
||||
|
||||
julia> detect_keyword(["cat"], "cats and category", mode="individual")
|
||||
Dict{String, Integer}("cat" => 0)
|
||||
|
||||
julia> detect_keyword(["error"], "No ERRORS found!")
|
||||
Dict{String, Integer}("error" => 1)
|
||||
```
|
||||
|
||||
# Signature
|
||||
"""
|
||||
# function detect_keyword(keywords::T1, text::String;
|
||||
# mode::Union{String, Nothing}=nothing, delimiter::T2=[' ', '\n', '.']
|
||||
# )::Dict{String, Integer} where {T1<:AbstractVector, T2<:AbstractVector}
|
||||
# # Initialize dictionary to store keyword counts
|
||||
# kwdict = Dict{String, Integer}()
|
||||
# for i in keywords
|
||||
# kwdict[i] = 0
|
||||
# end
|
||||
|
||||
# startindex = 1
|
||||
# # Iterate through each keyword and search for matches in text
|
||||
# for kw in keywords
|
||||
# # Check each possible starting position in the text
|
||||
# for startindex in 1:1:length(text)
|
||||
# # Get the window range for current keyword at current position
|
||||
# wordwindows = wordwindow(kw, startindex)
|
||||
# # Extract the text slice for comparison
|
||||
# cuttexts = cuttext(wordwindows, text)
|
||||
# if cuttexts !== nothing
|
||||
# # Try to detect keyword in current text slice
|
||||
# detected_kw = detect_keyword(kw, cuttexts)
|
||||
# if detected_kw !== nothing && mode === nothing
|
||||
# # Increment count if keyword found and no mode restrictions
|
||||
# kwdict[kw] +=1
|
||||
# elseif detected_kw !== nothing && mode === "individual"
|
||||
# # For individual word mode, check word boundaries
|
||||
# # Check if character before keyword is a delimiter or start of text
|
||||
# checkbefore =
|
||||
# if wordwindows.start > 1 &&
|
||||
# text[wordwindows.start-1] ∈ delimiter
|
||||
# true
|
||||
# elseif wordwindows.start == 1
|
||||
# true
|
||||
# else
|
||||
# false
|
||||
# end
|
||||
|
||||
# # Check if character after keyword is a delimiter or end of text
|
||||
# checkafter =
|
||||
# if wordwindows.stop < length(text) &&
|
||||
# text[wordwindows.stop+1] ∈ delimiter
|
||||
# true
|
||||
# elseif wordwindows.stop == length(text)
|
||||
# true
|
||||
# else
|
||||
# false
|
||||
# end
|
||||
# # Only count keyword if it's a complete word
|
||||
# if checkbefore && checkafter
|
||||
# kwdict[kw] +=1
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# return kwdict
|
||||
# end
|
||||
|
||||
|
||||
function detect_keyword(keywords::T, text::String)::Dict{String, Integer} where {T<:AbstractVector}
|
||||
kw = Dict{String, Integer}()
|
||||
splittext = string.(split(text, " "))
|
||||
# use for loop and detect_keyword function to get the exact variation of each keyword in the text then push to kw list
|
||||
for keyword in keywords
|
||||
ws = detect_keyword.(keyword, splittext)
|
||||
total = sum(issomething.(ws))
|
||||
if total != 0
|
||||
kw[keyword] = total
|
||||
else
|
||||
kw[keyword] = 0
|
||||
end
|
||||
end
|
||||
return kw
|
||||
end
|
||||
|
||||
|
||||
"""
|
||||
detect_keyword(keyword::String, text::String) -> Union{Nothing, String}
|
||||
|
||||
Detects if a keyword exists in the text in different case variations (lowercase, uppercase first letter, or all uppercase).
|
||||
|
||||
# Arguments:
|
||||
- `keyword::String`: The keyword to search for
|
||||
- `text::String`: The text to search in
|
||||
- `keyword::String` The keyword to search for
|
||||
- `text::String` The text to search in
|
||||
|
||||
# Returns:
|
||||
- `Union{Nothing, String}`: Returns the matched keyword variation if found, otherwise returns nothing
|
||||
- `Union{Nothing, String}` Returns the matched keyword variation if found, otherwise returns nothing
|
||||
|
||||
# Examples:
|
||||
```jldoctest
|
||||
@@ -794,7 +918,7 @@ Detects if a keyword exists in the text in different case variations (lowercase,
|
||||
"""
|
||||
function detect_keyword(keyword::String, text::String)::Union{Nothing, String}
|
||||
# Define the keyword variations to search for
|
||||
keyword_variations = [keyword, uppercasefirst(keyword), uppercase(keyword)]
|
||||
keyword_variations = [keyword, uppercasefirst(keyword), uppercase(keyword), lowercase(keyword)]
|
||||
|
||||
# Check if any of the keyword variations are in the text
|
||||
for variation in keyword_variations
|
||||
@@ -815,10 +939,10 @@ Count the occurrences of each word in the given list within the provided text.
|
||||
|
||||
# Arguments
|
||||
- `text::String`: The input text to search through.
|
||||
- `words::Vector{String}`: A vector of words whose occurrences need to be counted.
|
||||
- `words::Vector{String}` A vector of words whose occurrences need to be counted.
|
||||
|
||||
# Returns
|
||||
- `Vector{Int64}`: Their respective counts in the `text`.
|
||||
- `Vector{Int64}` Their respective counts in the `text`.
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
@@ -857,10 +981,10 @@ end
|
||||
Remove French accents from the given text.
|
||||
|
||||
# Arguments
|
||||
- `text::String`: The input string containing French accents.
|
||||
- `text::String` The input string containing French accents.
|
||||
|
||||
# Returns
|
||||
- `String`: The input string with all French accents removed.
|
||||
- `String` The input string with all French accents removed.
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
@@ -908,23 +1032,24 @@ end
|
||||
|
||||
|
||||
"""
|
||||
extractTextBetweenCharacters(text::String, start_char::Char, end_char::Char)::String
|
||||
|
||||
Extracts and returns the text that is enclosed between two specified characters within a given string.
|
||||
|
||||
# Arguments:
|
||||
- `text::String`: The input string from which to extract the text.
|
||||
- `startchar::Char`: The starting character that marks the beginning of the desired text.
|
||||
- `endchar::Char`: The ending character that marks the end of the desired text.
|
||||
# Arguments
|
||||
- `text::String` The input string from which to extract the text.
|
||||
- `startchar::Char` The starting character that marks the beginning of the desired text.
|
||||
- `endchar::Char` The ending character that marks the end of the desired text.
|
||||
|
||||
# Returns:
|
||||
- `String`: The substring enclosed between `start_char` and `end_char`.
|
||||
# Returns
|
||||
- `String` The substring enclosed between `start_char` and `end_char`.
|
||||
|
||||
# Examples:
|
||||
# Examples
|
||||
```jldoctest
|
||||
julia> text = "Hello [World]!"
|
||||
julia> extracted_text = extractTextBetweenCharacter(text, '[', ']')
|
||||
println(extracted_text) # Output: "World"
|
||||
julia> text = "Hello [World]! [Yay]"
|
||||
julia> extracted_text = extractTextBetweenCharacter(text, '[', ']')
|
||||
2-element Vector{Any}:
|
||||
"World"
|
||||
"Yay"
|
||||
```
|
||||
"""
|
||||
function extractTextBetweenCharacter(text::String, startchar::Char, endchar::Char)
|
||||
result = []
|
||||
@@ -947,10 +1072,288 @@ function extractTextBetweenCharacter(text::String, startchar::Char, endchar::Cha
|
||||
end
|
||||
|
||||
|
||||
function extractTextBetweenString(text::String, startstr::String, endstr::String)
|
||||
# check whether startstr is in the text or not
|
||||
isStartStr = split(text, startstr)
|
||||
if length(isStartStr) > 2
|
||||
return (success=false, error="There are more than one occurrences of the start string '$startstr' in the text. Text must has only one start string", errorcode=2, result=nothing)
|
||||
elseif length(isStartStr) == 1
|
||||
return (success=false, error="There are no start string '$startstr' in the text. Text must has only one start string", errorcode=1, result=nothing)
|
||||
end
|
||||
|
||||
# check whether endstr is in the text or not
|
||||
isEndStr = split(text, endstr)
|
||||
if length(isEndStr) > 2
|
||||
return (success=false, error="There are more than one occurrences of the end string '$endstr' in the text. Text must has only one end string", errorcode=3, result=nothing)
|
||||
elseif length(isStartStr) == 1
|
||||
return (success=false, error="There are no end string '$endstr' in the text. Text must has only one end string", errorcode=4, result=nothing)
|
||||
end
|
||||
|
||||
s = string(split(isStartStr[2], endstr)[1])
|
||||
|
||||
return (success=true, error=nothing, errorcode=0, text=s)
|
||||
end
|
||||
|
||||
|
||||
"""
|
||||
Determines if the given string follows camel case naming convention.
|
||||
|
||||
# Arguments:
|
||||
- `text::String` The input string to check for camel case.
|
||||
|
||||
# Returns:
|
||||
- `Bool` True if the string is in camel case, False otherwise.
|
||||
|
||||
# Examples:
|
||||
```jldoctest
|
||||
julia> isCamelCase("helloWorld")
|
||||
true
|
||||
julia> isCamelCase("HelloWorld")
|
||||
false
|
||||
julia> isCamelCase("hello_world")
|
||||
false
|
||||
```
|
||||
"""
|
||||
function isCamelCase(text::String)
|
||||
# Regular expression to match camel case
|
||||
pattern = r"^[a-z]+(?:[A-Z][a-z]*)*$"
|
||||
return occursin(pattern, text)
|
||||
end
|
||||
|
||||
"""
|
||||
Splits a string at the boundaries of camel case words.
|
||||
|
||||
# Arguments
|
||||
- `text::String` The input string to be split.
|
||||
|
||||
# Returns
|
||||
- `Vector{String}` A vector containing the individual words from the camel case string.
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
julia> text = "splitCamelCaseFunction"
|
||||
julia> words = splitCamelCase(text)
|
||||
println(words) # Output: ["split", "Camel", "Case", "Function"]
|
||||
```
|
||||
"""
|
||||
function splitCamelCase(text::String)
|
||||
# Regular expression to match the boundaries of camel case words
|
||||
# split_pattern = r"(?<=.)(?=[A-Z])"
|
||||
split_pattern = r"(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])"
|
||||
result = split(text, split_pattern)
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
"""
|
||||
Converts a string between Camel Case, Snake Case, and Kebab Case.
|
||||
|
||||
# Arguments
|
||||
- `text::String` The input string to be converted.
|
||||
- `tocase::Symbol` The target case format. Can be one of :camel, :snake, or :kebab.
|
||||
|
||||
# Returns
|
||||
- `String` The converted string in the specified case format.
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
julia> text = "splitCamelCaseFunction"
|
||||
julia> converted_text = convertCamelSnakeKebabCase(text, :snake)
|
||||
println(converted_text) # Output: "split_camel_case_function"
|
||||
julia> converted_text = convertCamelSnakeKebabCase(text, :kebab)
|
||||
println(converted_text) # Output: "split-camel-case-function"
|
||||
julia> converted_text = convertCamelSnakeKebabCase(text, :camel)
|
||||
println(converted_text) # Output: "splitCamelCaseFunction"
|
||||
```
|
||||
"""
|
||||
function convertCamelSnakeKebabCase(text::T, tocase::Symbol)::String where {T<:AbstractString}
|
||||
# Check the current case format of the input text
|
||||
iscamel = isCamelCase(text)
|
||||
issnake = occursin('_', text) # Check for snake case by looking for underscores
|
||||
iskebab = occursin('-', text) # Check for kebab case by looking for hyphens
|
||||
|
||||
if iscamel
|
||||
# Handle camel case input
|
||||
wordlist = splitCamelCase(text)
|
||||
if tocase == :camel
|
||||
return text # Already in camel case, return as is
|
||||
elseif tocase == :snake
|
||||
wordlist = lowercase.(wordlist) # Convert all words to lowercase
|
||||
return join(wordlist, '_') # Join with underscores for snake case
|
||||
elseif tocase == :kebab
|
||||
wordlist = lowercase.(wordlist) # Convert all words to lowercase
|
||||
return join(wordlist, '-') # Join with hyphens for kebab case
|
||||
end
|
||||
|
||||
elseif issnake
|
||||
# Handle snake case input
|
||||
wordlist = split(text, '_') # Split at underscores
|
||||
if tocase == :camel
|
||||
wordlist = lowercase.(wordlist)
|
||||
wordlist = uppercasefirst.(wordlist) # Capitalize first letter of each word
|
||||
wordlist[1] = lowercase(wordlist[1]) # First word should start with lowercase
|
||||
return join(wordlist) # Join without separator for camel case
|
||||
elseif tocase == :snake
|
||||
return text # Already in snake case, return as is
|
||||
elseif tocase == :kebab
|
||||
wordlist = lowercase.(wordlist) # Convert all words to lowercase
|
||||
return join(wordlist, '-') # Join with hyphens for kebab case
|
||||
end
|
||||
|
||||
elseif iskebab
|
||||
# Handle kebab case input
|
||||
wordlist = split(text, '-') # Split at hyphens
|
||||
if tocase == :camel
|
||||
wordlist = lowercase.(wordlist)
|
||||
wordlist = uppercasefirst.(wordlist) # Capitalize first letter of each word
|
||||
wordlist[1] = lowercase(wordlist[1]) # First word should start with lowercase
|
||||
return join(wordlist) # Join without separator for camel case
|
||||
elseif tocase == :snake
|
||||
wordlist = lowercase.(wordlist) # Convert all words to lowercase
|
||||
return join(wordlist, '_') # Join with underscores for snake case
|
||||
elseif tocase == :kebab
|
||||
return text # Already in kebab case, return as is
|
||||
end
|
||||
else
|
||||
error("Undefined condition") # Input text format not recognized
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
""" Check if a value is not `nothing`.
|
||||
|
||||
# Arguments
|
||||
- `x`: The value to check
|
||||
|
||||
# Returns
|
||||
- `Bool`: `true` if `x` is not `nothing`, `false` otherwise
|
||||
|
||||
# Examples
|
||||
```jldoctest
|
||||
julia> issomething(1)
|
||||
true
|
||||
julia> issomething(nothing)
|
||||
false
|
||||
julia> issomething("test")
|
||||
true
|
||||
````
|
||||
"""
|
||||
function issomething(x)
|
||||
return x === nothing ? false : true
|
||||
end
|
||||
|
||||
|
||||
""" Adjust a given range to fit within the bounds of a vector's length.
|
||||
|
||||
# Arguments
|
||||
- `v::T1`
|
||||
the input vector to check against
|
||||
- `range::UnitRange`
|
||||
the original range to be adjusted
|
||||
|
||||
# Return
|
||||
- `adjusted_range::UnitRange`
|
||||
a range that is constrained to the vector's length, preventing out-of-bounds indexing
|
||||
|
||||
# Example
|
||||
|
||||
julia> v = [1, 2, 3, 4, 5]
|
||||
julia> fitrange(v, 3:10)
|
||||
3:5
|
||||
|
||||
"""
|
||||
function fitrange(v::T1, range::UnitRange) where {T1<:AbstractVector}
|
||||
totalelements = length(v)
|
||||
|
||||
startind =
|
||||
# check if user put start range greater than total event
|
||||
if range.start > totalelements
|
||||
totalelements
|
||||
else
|
||||
range.start
|
||||
end
|
||||
|
||||
stopind =
|
||||
if range.stop > totalelements
|
||||
totalelements
|
||||
else
|
||||
range.stop
|
||||
end
|
||||
|
||||
return startind:stopind
|
||||
end
|
||||
|
||||
|
||||
""" Find a unit range for a vector given a number of the most recent elements of interest.
|
||||
|
||||
# Arguments
|
||||
- `vectorLength::Integer`
|
||||
the length of the vector to generate range from
|
||||
- `n::Integer`
|
||||
the number of most recent elements to include in range
|
||||
|
||||
|
||||
# Return
|
||||
- `UnitRange`
|
||||
a range representing the n most recent elements of a vector with length vectorLength
|
||||
|
||||
# Example
|
||||
```jldoctest
|
||||
julia> a = [1, 2, 3, 4, 5]
|
||||
julia> recentElementsIndex(length(a), 3)
|
||||
3:5
|
||||
julia> recentElementsIndex(length(a), 0)
|
||||
5:5
|
||||
```
|
||||
"""
|
||||
function recentElementsIndex(vectorlength::Integer, n::Integer; includelatest::Bool=false)
|
||||
if n == 0
|
||||
error("n must be greater than 0")
|
||||
end
|
||||
|
||||
if includelatest
|
||||
start = max(1, vectorlength - n + 1)
|
||||
return start:vectorlength
|
||||
else
|
||||
startind = max(1, vectorlength - n)
|
||||
endind = vectorlength -1
|
||||
return startind:endind
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
""" Find a unit range for a vector excluding the most recent elements.
|
||||
|
||||
# Arguments
|
||||
- `vectorlength::Integer`
|
||||
the length of the vector to generate range from
|
||||
- `n::Integer`
|
||||
the number of most recent elements to exclude from range
|
||||
|
||||
# Return
|
||||
- `UnitRange`
|
||||
a range representing the elements of the vector excluding the last `n` elements
|
||||
|
||||
# Example
|
||||
```jldoctest
|
||||
julia> a = [1, 2, 3, 4, 5]
|
||||
julia> nonRecentElementsIndex(length(a), 3)
|
||||
1:2
|
||||
julia> nonRecentElementsIndex(length(a), 1)
|
||||
1:4
|
||||
julia> nonRecentElementsIndex(length(a), 0)
|
||||
1:5
|
||||
```
|
||||
"""
|
||||
function nonRecentElementsIndex(vectorlength::Integer, n::Integer)
|
||||
if n < 0
|
||||
error("n must be non-negative")
|
||||
end
|
||||
if n > vectorlength
|
||||
return 1:0 # empty range
|
||||
end
|
||||
return 1:(vectorlength-n)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
3
test/.vscode/settings.json
vendored
Normal file
3
test/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"julia.environmentPath": "/appfolder/app/dev/GeneralUtils/test"
|
||||
}
|
||||
41
test/Manifest.toml
Normal file
41
test/Manifest.toml
Normal file
@@ -0,0 +1,41 @@
|
||||
# This file is machine-generated - editing it directly is not advised
|
||||
|
||||
julia_version = "1.11.4"
|
||||
manifest_format = "2.0"
|
||||
project_hash = "71d91126b5a1fb1020e1098d9d492de2a4438fd2"
|
||||
|
||||
[[deps.Base64]]
|
||||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.InteractiveUtils]]
|
||||
deps = ["Markdown"]
|
||||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.Logging]]
|
||||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.Markdown]]
|
||||
deps = ["Base64"]
|
||||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.Random]]
|
||||
deps = ["SHA"]
|
||||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.SHA]]
|
||||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||||
version = "0.7.0"
|
||||
|
||||
[[deps.Serialization]]
|
||||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||||
version = "1.11.0"
|
||||
|
||||
[[deps.Test]]
|
||||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||
version = "1.11.0"
|
||||
2
test/Project.toml
Normal file
2
test/Project.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[deps]
|
||||
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||
7
test/etc.jl
Normal file
7
test/etc.jl
Normal file
@@ -0,0 +1,7 @@
|
||||
python -> pandas -> dataframe -> csv
|
||||
|
||||
|
||||
|
||||
julia -> DataFrames -> dataframe -> csv
|
||||
|
||||
dict -> dataframe -> csv
|
||||
@@ -1,44 +0,0 @@
|
||||
using Revise
|
||||
using GeneralUtils, MQTTClient, JSON3
|
||||
|
||||
mqttMsgReceiveTopic = ["/receivetopic_1", "/receivetopic_2"]
|
||||
mqttMsgReceiveChannel = (ch1=Channel(8), ch2=Channel(32))
|
||||
keepaliveChannel = Channel(8)
|
||||
function onMsgCallback(topic, payload)
|
||||
jobj = JSON3.read(String(payload))
|
||||
incomingMqttMsg = copy(jobj) # convert json object into julia dictionary recursively
|
||||
|
||||
if occursin("topic_1", topic)
|
||||
put!(mqttMsgReceiveChannel[:ch1], incomingMqttMsg)
|
||||
elseif occursin("topic_2", topic)
|
||||
put!(mqttMsgReceiveChannel[:ch2], incomingMqttMsg)
|
||||
elseif occursin("keepalive", topic)
|
||||
put!(keepaliveChannel, incomingMqttMsg)
|
||||
else
|
||||
println("undefined condition ", @__FILE__, " ", @__LINE__)
|
||||
end
|
||||
end
|
||||
mqttInstance = GeneralUtils.mqttClientInstance_v2(
|
||||
"mqtt.yiem.cc",
|
||||
mqttMsgReceiveTopic,
|
||||
mqttMsgReceiveChannel,
|
||||
keepaliveChannel,
|
||||
onMsgCallback
|
||||
)
|
||||
|
||||
|
||||
_ = GeneralUtils.checkMqttConnection!(mqttInstance)
|
||||
|
||||
|
||||
println("GeneralUtils test done")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
39
test/runtests.jl
Normal file
39
test/runtests.jl
Normal file
@@ -0,0 +1,39 @@
|
||||
using Test
|
||||
using GeneralUtils: detect_keyword
|
||||
|
||||
@testset "detect_keyword tests" begin
|
||||
@test detect_keyword(["test"], "this is a test") == Dict("test" => 1)
|
||||
|
||||
@test detect_keyword(["hello", "world"], "hello world hello") == Dict("hello" => 2, "world" => 1)
|
||||
|
||||
@test detect_keyword(["cat"], "category") == Dict("cat" => 1)
|
||||
|
||||
@test detect_keyword(["cat"], "category"; mode="individual") == Dict("cat" => 0)
|
||||
|
||||
@test detect_keyword(["dog"], "dogs and cats"; mode="individual", delimiter=[' ']) == Dict("dog" => 0)
|
||||
|
||||
@test detect_keyword(["test"], "test.case"; mode="individual", delimiter=['.']) == Dict("test" => 1)
|
||||
|
||||
@test detect_keyword(["word"], "") == Dict("word" => 0)
|
||||
|
||||
@test detect_keyword(String[], "some text") == Dict{String, Integer}()
|
||||
|
||||
@test detect_keyword(["a", "b"], "a.b\nc"; delimiter=['.', '\n']) == Dict("a" => 1, "b" => 1)
|
||||
|
||||
multiline_text = """
|
||||
first line
|
||||
second line
|
||||
first word
|
||||
"""
|
||||
@test detect_keyword(["first"], multiline_text) == Dict("first" => 2)
|
||||
|
||||
@test detect_keyword(["word"], "word"; mode="individual") == Dict("word" => 1)
|
||||
|
||||
@test detect_keyword(["test"], "testing.test.tester"; mode="individual", delimiter=['.']) == Dict("test" => 1)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user