diff --git a/.github/workflows/Lint.yml b/.github/workflows/Lint.yml index 813fc89..b1d1376 100644 --- a/.github/workflows/Lint.yml +++ b/.github/workflows/Lint.yml @@ -52,5 +52,5 @@ jobs: id: lychee uses: lycheeverse/lychee-action@v2 with: - fail: true + fail: false args: --config '.lychee.toml' . diff --git a/.gitignore b/.gitignore index 73743a6..4a160d3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ .DS_Store .benchmarkci Manifest.toml -!experiments/SynthBN/Manifest.toml +!experiments/Synth/Manifest.toml benchmark/*.json coverage docs/build/ diff --git a/Project.toml b/Project.toml index 26a6961..2753ec6 100644 --- a/Project.toml +++ b/Project.toml @@ -1,18 +1,37 @@ name = "GraphDynamicalSystems" uuid = "13529e2e-ed53-56b1-bd6f-420b01fca819" authors = ["Reuben Gardos Reid <5456207+ReubenJ@users.noreply.github.com>"] -version = "0.1.0" +version = "0.2.0" [deps] +AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" DynamicalSystems = "61744808-ddfa-5f27-97ff-6e42cc95d634" FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +HerbConstraints = "1fa96474-3206-4513-b4fa-23913f296dfc" +HerbCore = "2b23ba43-8213-43cb-b5ea-38c12b45bd45" +HerbGrammar = "4ef9e186-2fe5-4b24-8de7-9f7291f24af7" +HerbSearch = "3008d8e8-f9aa-438a-92ed-26e9c7b4829f" +MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078" MetaGraphsNext = "fa8bd995-216d-47f1-8a91-f3b68fbeb377" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SoleLogics = "b002da8f-3cb3-4d91-bbe3-2953433912b5" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] +AbstractTrees = "0.4.5" +DocStringExtensions = "0.9.3" DynamicalSystems = "3" FileIO = "1" +Graphs = "1.12" +HerbConstraints = "0.2.4" +HerbCore = "0.3.4" +HerbGrammar = "0.5" +HerbSearch = "0.4.1" +MLStyle = "0.4.17" MetaGraphsNext = "0.7" -SoleLogics = "0.9, 0.10" +Random = "1.11" +SoleLogics = "0.12" +Statistics = "1.10,1.11.1" julia = "1.6" diff --git a/docs/Project.toml b/docs/Project.toml index 3d58610..7a8d108 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,11 +1,8 @@ -# Don't forget to run -# -# pkg> dev .. -# [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" GraphDynamicalSystems = "13529e2e-ed53-56b1-bd6f-420b01fca819" +LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" +Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" [compat] Documenter = "1" diff --git a/docs/make.jl b/docs/make.jl index 1d7ca34..7c84285 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,3 +1,7 @@ +using Revise + +Revise.revise() + using GraphDynamicalSystems using Documenter diff --git a/docs/src/95-reference.md b/docs/src/95-reference.md index e6903cb..ce52be3 100644 --- a/docs/src/95-reference.md +++ b/docs/src/95-reference.md @@ -13,5 +13,5 @@ Pages = ["95-reference.md"] ``` ```@autodocs -Modules = [GraphDynamicalSystems] +Modules = [GraphDynamicalSystems, GraphDynamicalSystems.BooleanNetworks] ``` diff --git a/experiments/Synth/.envrc b/experiments/Synth/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/experiments/Synth/.envrc @@ -0,0 +1 @@ +use flake diff --git a/experiments/SynthBN/.gitattributes b/experiments/Synth/.gitattributes similarity index 100% rename from experiments/SynthBN/.gitattributes rename to experiments/Synth/.gitattributes diff --git a/experiments/SynthBN/.github/workflows/CI.yml b/experiments/Synth/.github/workflows/CI.yml similarity index 100% rename from experiments/SynthBN/.github/workflows/CI.yml rename to experiments/Synth/.github/workflows/CI.yml diff --git a/experiments/SynthBN/.gitignore b/experiments/Synth/.gitignore similarity index 100% rename from experiments/SynthBN/.gitignore rename to experiments/Synth/.gitignore diff --git a/experiments/SynthBN/CondaPkg.toml b/experiments/Synth/CondaPkg.toml similarity index 57% rename from experiments/SynthBN/CondaPkg.toml rename to experiments/Synth/CondaPkg.toml index acef723..94ee17e 100644 --- a/experiments/SynthBN/CondaPkg.toml +++ b/experiments/Synth/CondaPkg.toml @@ -1,4 +1,3 @@ -channels = ["bioconda"] [pip.deps] biodivine-aeon = "" diff --git a/experiments/Synth/LocalPreferences.toml b/experiments/Synth/LocalPreferences.toml new file mode 100644 index 0000000..c1c42e9 --- /dev/null +++ b/experiments/Synth/LocalPreferences.toml @@ -0,0 +1,3 @@ +[CondaPkg] +backend = "MicroMamba" +pip_backend = "uv" diff --git a/experiments/SynthBN/Manifest.toml b/experiments/Synth/Manifest.toml similarity index 82% rename from experiments/SynthBN/Manifest.toml rename to experiments/Synth/Manifest.toml index fffc941..ed006a2 100644 --- a/experiments/SynthBN/Manifest.toml +++ b/experiments/Synth/Manifest.toml @@ -2,16 +2,17 @@ julia_version = "1.10.2" manifest_format = "2.0" -project_hash = "7f5a84f27789614a8f5a49e495609da6e55f2159" +project_hash = "db74a993eef408d9b910e97f9a72ec5fee351591" [[deps.ADTypes]] -git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" +git-tree-sha1 = "72af59f5b8f09faee36b4ec48e014a79210f2f4f" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.9.0" -weakdeps = ["ChainRulesCore", "EnzymeCore"] +version = "1.11.0" +weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] [deps.ADTypes.extensions] ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" ADTypesEnzymeCoreExt = "EnzymeCore" [[deps.AbstractFFTs]] @@ -37,24 +38,24 @@ uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" [[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown"] -git-tree-sha1 = "b392ede862e506d451fc1616e79aa6f4c673dab8" +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "0ba8f4c1f06707985ffb4804fdad1bf97b233897" uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.38" +version = "0.1.41" [deps.Accessors.extensions] - AccessorsAxisKeysExt = "AxisKeys" - AccessorsDatesExt = "Dates" - AccessorsIntervalSetsExt = "IntervalSets" - AccessorsStaticArraysExt = "StaticArrays" - AccessorsStructArraysExt = "StructArrays" - AccessorsTestExt = "Test" - AccessorsUnitfulExt = "Unitful" + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" [deps.Accessors.weakdeps] AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Requires = "ae029012-a4dd-5104-9daa-d747884805df" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" @@ -63,9 +64,9 @@ version = "0.1.38" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "d80af0733c99ea80575f612813fa6aa71022d33a" +git-tree-sha1 = "50c3c56a52972d78e8be9fd135bfb91c9574c140" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.1.0" +version = "4.1.1" weakdeps = ["StaticArrays"] [deps.Adapt.extensions] @@ -101,15 +102,16 @@ version = "3.5.1+1" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "3640d077b6dafd64ceb8fd5c1ec76f7ca53bcf76" +git-tree-sha1 = "017fcb757f8e921fb44ee063a7aafe5f89b86dd1" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.16.0" +version = "7.18.0" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" ArrayInterfaceCUDAExt = "CUDA" ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" ArrayInterfaceChainRulesExt = "ChainRules" ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" ArrayInterfaceReverseDiffExt = "ReverseDiff" @@ -123,6 +125,7 @@ version = "7.16.0" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" @@ -140,9 +143,9 @@ version = "0.1.0" [[deps.Attractors]] deps = ["BlackBoxOptim", "Clustering", "ComplexityMeasures", "Distances", "Distributions", "DynamicalSystemsBase", "LinearAlgebra", "Mmap", "Neighborhood", "Optim", "ProgressMeter", "Random", "Reexport", "StateSpaceSets"] -git-tree-sha1 = "a45deb78320c10654c981706320c125b069fd612" +git-tree-sha1 = "5bb99c6145337871d15c4190e2e2e13fd128decd" uuid = "f3fd9213-ca85-4dba-9dfd-7fc91308fec7" -version = "1.22.0" +version = "1.23.3" [deps.Attractors.extensions] AttractorsVisualizations = "Makie" @@ -165,10 +168,10 @@ version = "1.1.0" uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.BenchmarkTools]] -deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] -git-tree-sha1 = "f1dff6729bc61f4d49e140da1af55dcd1ac97b2f" +deps = ["Compat", "JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] +git-tree-sha1 = "e38fbc49a620f5d0b660d7f543db1009fe0f8336" uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "1.5.0" +version = "1.6.0" [[deps.BitFlags]] git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" @@ -197,11 +200,17 @@ git-tree-sha1 = "bc93511973d1f949d45b0ea17878e6cb0ad484a1" uuid = "ad839575-38b3-5650-b840-f874b8c74a25" version = "0.12.9" +[[deps.BranchAndPrune]] +deps = ["AbstractTrees"] +git-tree-sha1 = "9a97232c3aab366fc4408ddc2239939b4cad0179" +uuid = "d3bc4f2e-91e6-11e9-365e-cd067da536ce" +version = "0.2.1" + [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+2" +version = "1.0.8+4" [[deps.CPUSummary]] deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] @@ -214,12 +223,6 @@ git-tree-sha1 = "2dcc50ea6a0a1ef6440d6eecd0fe3813e5671f45" uuid = "a9c8d775-2e2e-55fc-8582-045d282d599e" version = "1.0.0" -[[deps.CRlibm]] -deps = ["CRlibm_jll"] -git-tree-sha1 = "32abd86e3c2025db5172aa182b982debed519834" -uuid = "96374032-68de-5a5b-8d9e-752f78720389" -version = "1.0.1" - [[deps.CRlibm_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" @@ -264,9 +267,9 @@ version = "0.6.0" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "3e4b134270b372f2ed4d4d0e936aabaefc1802bc" +git-tree-sha1 = "1713c74e00545bfe14605d2a2be1712de8fbcb58" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.25.0" +version = "1.25.1" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] @@ -274,9 +277,9 @@ weakdeps = ["SparseArrays"] [[deps.ChaosTools]] deps = ["Combinatorics", "DSP", "DataStructures", "Distances", "Distributions", "DynamicalSystemsBase", "IntervalRootFinding", "LinearAlgebra", "LombScargle", "Neighborhood", "Optim", "ProgressMeter", "Random", "Reexport", "Roots", "SpecialFunctions", "Statistics", "StatsBase"] -git-tree-sha1 = "c73aa5f86db02f08e538861ca73bfc5bedf94909" +git-tree-sha1 = "4cc63a307ba5f5db6e1083207e495199198cda15" uuid = "608a59af-f2a3-5ad4-90b4-758bdf3122a7" -version = "3.2.1" +version = "3.3.0" [[deps.Cleaner]] deps = ["PrettyTables", "Tables", "Unicode"] @@ -292,9 +295,9 @@ version = "0.1.13" [[deps.Clustering]] deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "Random", "SparseArrays", "Statistics", "StatsBase"] -git-tree-sha1 = "9ebb045901e9bbf58767a9f34ff89831ed711aae" +git-tree-sha1 = "3e22db924e2945282e70c33b75d4dde8bfa44c94" uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" -version = "0.15.7" +version = "0.15.8" [[deps.CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] @@ -310,9 +313,9 @@ version = "0.7.6" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "13951eb68769ad1cd460cdb2e64e5e95f1bf123d" +git-tree-sha1 = "c785dfb1b3bfddd1da557e861b919819b82bbe5b" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.27.0" +version = "3.27.1" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] @@ -332,9 +335,9 @@ weakdeps = ["SpecialFunctions"] [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +git-tree-sha1 = "64e15186f0aa277e174aa81798f7eb8598e0157e" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.11" +version = "0.13.0" [[deps.Combinatorics]] git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" @@ -374,9 +377,9 @@ version = "1.1.0+0" [[deps.ComplexityMeasures]] deps = ["Combinatorics", "DelayEmbeddings", "Distances", "FFTW", "LinearAlgebra", "Neighborhood", "QuadGK", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "StateSpaceSets", "StaticArrays", "Statistics", "StatsBase", "StatsFuns", "Wavelets"] -git-tree-sha1 = "0472182ceac6519028f869e26d994b2f8e5c2ecd" +git-tree-sha1 = "200eb792ae4f85ef95a507b5a226cf79af6cf65d" uuid = "ab4b797d-85ee-42ba-b621-05d793b346a2" -version = "3.7.1" +version = "3.8.0" [[deps.CompositionsBase]] git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" @@ -394,15 +397,15 @@ version = "0.2.3" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] -git-tree-sha1 = "ea32b83ca4fefa1768dc84e504cc0a94fb1ab8d1" +git-tree-sha1 = "f36e5e8fdffcb5646ea5da81495a5a7566005127" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.4.2" +version = "2.4.3" [[deps.CondaPkg]] deps = ["JSON3", "Markdown", "MicroMamba", "Pidfile", "Pkg", "Preferences", "TOML"] -git-tree-sha1 = "8f7faef2ca039ee068cd971a80ccd710d23fb2eb" +git-tree-sha1 = "905244d4b8d2319783a39df4e7c7eb9e9bb022d8" uuid = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" -version = "0.2.23" +version = "0.2.24" [[deps.Configurations]] deps = ["ExproniconLite", "OrderedCollections", "TOML"] @@ -493,15 +496,15 @@ version = "1.9.1" [[deps.Dictionaries]] deps = ["Indexing", "Random", "Serialization"] -git-tree-sha1 = "1f3b7b0d321641c1f2e519f7aed77f8e1f6cb133" +git-tree-sha1 = "61ab242274c0d44412d8eab38942a49aa46de9d0" uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" -version = "0.3.29" +version = "0.4.3" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "TruncatedStacktraces"] -git-tree-sha1 = "f8eefbb7e910f59087c4bb09ce670f235758ee4a" +deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "TruncatedStacktraces"] +git-tree-sha1 = "b1e23a7fe7371934d9d538114a7e7166c1d09e05" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.158.3" +version = "6.161.0" [deps.DiffEqBase.extensions] DiffEqBaseCUDAExt = "CUDA" @@ -560,9 +563,9 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "d7477ecdafb813ddee2ae727afa94e9dcb5f3fb0" +git-tree-sha1 = "7901a6117656e29fa2c74a58adb682f380922c47" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.112" +version = "0.25.116" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -592,10 +595,10 @@ uuid = "634d3b9d-ee7a-5ddf-bec9-22491ea816e1" version = "2.18.0" [[deps.DynamicalSystems]] -deps = ["Attractors", "ChaosTools", "ComplexityMeasures", "DataStructures", "DelayEmbeddings", "DynamicalSystemsBase", "FractalDimensions", "PredefinedDynamicalSystems", "RecurrenceAnalysis", "Reexport", "Scratch", "StateSpaceSets", "TimeseriesSurrogates"] -git-tree-sha1 = "4ffb0ba248bffd75e559d88f7f40d569210a8fe8" +deps = ["Attractors", "ChaosTools", "ComplexityMeasures", "DataStructures", "DelayEmbeddings", "DynamicalSystemsBase", "FractalDimensions", "PredefinedDynamicalSystems", "RecurrenceAnalysis", "Reexport", "StateSpaceSets", "TimeseriesSurrogates"] +git-tree-sha1 = "40091547f24350fe41700bbebbce0579576fed0c" uuid = "61744808-ddfa-5f27-97ff-6e42cc95d634" -version = "3.3.22" +version = "3.4.1" [deps.DynamicalSystems.extensions] DynamicalSystemsVisualizations = "Makie" @@ -605,9 +608,9 @@ version = "3.3.22" [[deps.DynamicalSystemsBase]] deps = ["ForwardDiff", "LinearAlgebra", "OrdinaryDiffEqTsit5", "Reexport", "Roots", "SciMLBase", "SparseArrays", "StateSpaceSets", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "5da2aa65f991b7c6d2052231d8dfb018d6c6af85" +git-tree-sha1 = "943eb944aa71118d08dd873868cb0e5253724c07" uuid = "6e36e845-645a-534a-86f2-f5d4aa5a06b4" -version = "3.11.2" +version = "3.13.2" [deps.DynamicalSystemsBase.extensions] StochasticSystemsBase = "StochasticDiffEq" @@ -627,9 +630,9 @@ uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" [[deps.EnzymeCore]] -git-tree-sha1 = "9c3a42611e525352e9ad5e4134ddca5c692ff209" +git-tree-sha1 = "0cdb7af5c39e92d78a0ee8d0a447d32f7593137e" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.8.4" +version = "0.8.8" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -637,26 +640,21 @@ weakdeps = ["Adapt"] [[deps.EpollShim_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" -version = "0.0.20230411+0" - -[[deps.ErrorfreeArithmetic]] -git-tree-sha1 = "d6863c556f1142a061532e79f611aa46be201686" -uuid = "90fa49ef-747e-5e6f-a989-263ba693cf1a" -version = "0.5.2" +version = "0.0.20230411+1" [[deps.ExceptionUnwrapping]] deps = ["Test"] -git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" -version = "0.1.10" +version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +git-tree-sha1 = "e51db81749b0777b2147fbe7b783ee79045b8e99" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.2+0" +version = "2.6.4+3" [[deps.ExprTools]] git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" @@ -664,9 +662,9 @@ uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" version = "0.1.10" [[deps.ExpressionExplorer]] -git-tree-sha1 = "7005f1493c18afb2fa3bdf06e02b16a9fde5d16d" +git-tree-sha1 = "71d0768dd78ad62d3582091bf338d98af8bbda67" uuid = "21656369-7473-754a-2065-74616d696c43" -version = "1.1.0" +version = "1.1.1" [[deps.Expronicon]] deps = ["MLStyle", "Pkg", "TOML"] @@ -680,9 +678,9 @@ uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" version = "0.10.13" [[deps.Extents]] -git-tree-sha1 = "81023caa0021a41712685887db1fc03db26f41f5" +git-tree-sha1 = "063512a13dbe9c40d999c439268539aa552d1ae6" uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" -version = "0.1.4" +version = "0.1.5" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] @@ -691,10 +689,10 @@ uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.2" [[deps.FFMPEG_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "4.4.2+2" +version = "4.4.4+1" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] @@ -706,7 +704,7 @@ version = "1.8.0" deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4d81ed14783ec49ce9f2e168208a12ce1815aa25" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.10+1" +version = "3.3.10+3" [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] @@ -720,9 +718,9 @@ uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" version = "0.3.2" [[deps.FastPower]] -git-tree-sha1 = "46aee43f62bc2bc06a74e2d668ffeea0a2689c93" +git-tree-sha1 = "58c3431137131577a7c379d00fea00be524338fb" uuid = "a4df4552-cc26-4903-aec0-212e50a0e84b" -version = "1.1.0" +version = "1.1.1" [deps.FastPower.extensions] FastPowerEnzymeExt = "Enzyme" @@ -740,17 +738,15 @@ version = "1.1.0" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" -[[deps.FastRounding]] -deps = ["ErrorfreeArithmetic", "LinearAlgebra"] -git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44" -uuid = "fa42c844-2597-5d31-933b-ebd51ab2693f" -version = "0.3.1" - [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "62ca0547a14c57e98154423419d8a342dca75ca9" +git-tree-sha1 = "2dd20384bf8c6d411b5c7370865b1e9b26cb2ea3" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.4" +version = "1.16.6" +weakdeps = ["HTTP"] + + [deps.FileIO.extensions] + HTTPExt = "HTTP" [[deps.FilePathsBase]] deps = ["Compat", "Dates"] @@ -780,9 +776,9 @@ weakdeps = ["PDMats", "SparseArrays", "Statistics"] [[deps.FiniteDiff]] deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "b10bdafd1647f57ace3885143936749d61638c3b" +git-tree-sha1 = "84e3a47db33be7248daa6274b287507dd6ff84e8" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.26.0" +version = "2.26.2" [deps.FiniteDiff.extensions] FiniteDiffBandedMatricesExt = "BandedMatrices" @@ -804,9 +800,9 @@ version = "0.8.5" [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +git-tree-sha1 = "21fac3c77d7b5a9fc03b0ec503aa1a6392c34d2b" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.96+0" +version = "2.15.0+0" [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" @@ -815,9 +811,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +git-tree-sha1 = "a2df1b776752e3f344e5116c06d75a10436ab853" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.36" +version = "0.10.38" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -825,21 +821,21 @@ weakdeps = ["StaticArrays"] [[deps.FractalDimensions]] deps = ["ComplexityMeasures", "Distances", "Distributions", "HypothesisTests", "Neighborhood", "ProgressMeter", "Random", "Reexport", "Roots", "Scratch", "SpecialFunctions", "StateSpaceSets", "Statistics"] -git-tree-sha1 = "cfb5f2c97f474b2248d47214084559065c2a835e" +git-tree-sha1 = "f76d8eb8130259e59a2d0f4f20cea77c0d773d3d" uuid = "4665ce21-e117-4649-aed8-08bbe5ccbead" -version = "1.8.2" +version = "1.9.2" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +git-tree-sha1 = "786e968a8d2fb167f2e4880baba62e0e26bd8e4e" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.2+0" +version = "2.13.3+1" [[deps.FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +git-tree-sha1 = "846f7026a9decf3679419122b49f8a1fdb48d2d5" uuid = "559328eb-81f9-559d-9380-de523a88c83c" -version = "1.0.14+0" +version = "1.0.16+0" [[deps.FunctionWrappers]] git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" @@ -870,44 +866,44 @@ version = "0.5.5" [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] -git-tree-sha1 = "532f9126ad901533af1d4f5c198867227a7bb077" +git-tree-sha1 = "fcb0584ff34e25155876418979d4c8971243bb89" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.0+1" +version = "3.4.0+2" [[deps.GPUArraysCore]] deps = ["Adapt"] -git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.6" +version = "0.2.0" [[deps.GR]] -deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] -git-tree-sha1 = "8e2d86e06ceb4580110d9e716be26658effc5bfd" +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "424c8f76017e39fdfcdbb5935a8e6742244959e8" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.72.8" +version = "0.73.10" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "da121cbdc95b065da07fbb93638367737969693f" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "b90934c8cb33920a8dc66736471dc3961b42ec9f" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.8+0" +version = "0.73.10+0" [[deps.GeoFormatTypes]] -git-tree-sha1 = "59107c179a586f0fe667024c5eb7033e81333271" +git-tree-sha1 = "ce573eab15760315756de2c82df7406c870c7187" uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" -version = "0.4.2" +version = "0.4.3" [[deps.GeoInterface]] -deps = ["Extents", "GeoFormatTypes"] -git-tree-sha1 = "2f6fce56cdb8373637a6614e14a5768a88450de2" +deps = ["DataAPI", "Extents", "GeoFormatTypes"] +git-tree-sha1 = "f4ee66b6b1872a4ca53303fbb51d158af1bf88d4" uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" -version = "1.3.7" +version = "1.4.0" [[deps.GeometryBasics]] -deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "c1a9c159c3ac53aa09663d8662c7277ef3fa508d" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.11" +version = "0.5.1" [[deps.GeometryTypes]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] @@ -923,29 +919,27 @@ version = "0.21.0+0" [[deps.Git]] deps = ["Git_jll"] -git-tree-sha1 = "51764e6c2e84c37055e846c516e9015b4a291c7d" +git-tree-sha1 = "04eff47b1354d702c3a85e8ab23d539bb7d5957e" uuid = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" -version = "1.3.0" +version = "1.3.1" [[deps.Git_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "d8be4aab0f4e043cc40984e9097417307cce4c03" +git-tree-sha1 = "399f4a308c804b446ae4c91eeafadb2fe2c54ff9" uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.36.1+2" +version = "2.47.1+0" [[deps.Glib_jll]] deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "674ff0db93fffcd11a3573986e550d66cd4fd71f" +git-tree-sha1 = "b0036b392358c80d2d2124746c2bf3d48d457938" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.80.5+0" +version = "2.82.4+0" [[deps.GraphDynamicalSystems]] -deps = ["DynamicalSystems", "FileIO", "MetaGraphsNext", "Random", "SoleLogics"] -git-tree-sha1 = "9f0a969177c639014d70d3fe633e09ca2e55f71a" -repo-rev = "main" -repo-url = "../.." +deps = ["AbstractTrees", "DocStringExtensions", "DynamicalSystems", "FileIO", "Graphs", "HerbConstraints", "HerbCore", "HerbGrammar", "HerbSearch", "MLStyle", "MetaGraphsNext", "Random", "SoleLogics", "Statistics"] +path = "../.." uuid = "13529e2e-ed53-56b1-bd6f-420b01fca819" -version = "0.1.0" +version = "0.2.0" [[deps.GraphRecipes]] deps = ["AbstractTrees", "GeometryTypes", "Graphs", "InteractiveUtils", "Interpolations", "LinearAlgebra", "NaNMath", "NetworkLayout", "PlotUtils", "RecipesBase", "SparseArrays", "Statistics"] @@ -955,9 +949,9 @@ version = "0.5.13" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +git-tree-sha1 = "01979f9b37367603e2848ea225918a3b3861b606" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.14+0" +version = "1.3.14+1" [[deps.Graphs]] deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] @@ -971,62 +965,52 @@ uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "c67b33b085f6e2faf8bf79a61962e7339a81129c" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.8" - -[[deps.HarfBuzz_ICU_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "HarfBuzz_jll", "ICU_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] -git-tree-sha1 = "6ccbc4fdf65c8197738c2d68cc55b74b19c97ac2" -uuid = "655565e8-fb53-5cb3-b0cd-aec1ca0647ea" -version = "2.8.1+0" +version = "1.10.15" [[deps.HarfBuzz_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] -git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "55c53be97790242c29031e5cd45e8ac296dadda3" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" -version = "2.8.1+1" - -[[deps.Herb]] -deps = ["HerbConstraints", "HerbCore", "HerbGrammar", "HerbInterpret", "HerbSearch", "HerbSpecification", "Pkg"] -git-tree-sha1 = "e88773e806efae5423c5d6f3c83bba28e070495c" -uuid = "c09c6b7f-4f63-49de-90d9-97a3563c0f4a" -version = "0.4.0" +version = "8.5.0+0" [[deps.HerbConstraints]] deps = ["DataStructures", "HerbCore", "HerbGrammar", "MLStyle"] -git-tree-sha1 = "f59ff469ec62d6c91f69eaaa91abe86ee1b34787" +git-tree-sha1 = "a89c7d2ef3283b8feb846822505722a0a0c50a91" uuid = "1fa96474-3206-4513-b4fa-23913f296dfc" -version = "0.2.3" +version = "0.2.4" [[deps.HerbCore]] -git-tree-sha1 = "98a4c7b30a8a752bb33bddc2475f6554602b588b" +deps = ["AbstractTrees"] +git-tree-sha1 = "7af906201c6d701957b9d061c58940a28bfa4b83" uuid = "2b23ba43-8213-43cb-b5ea-38c12b45bd45" -version = "0.3.1" +version = "0.3.4" [[deps.HerbGrammar]] -deps = ["AbstractTrees", "DataStructures", "HerbCore", "Serialization", "TreeView"] -git-tree-sha1 = "0bd40db4936ad39926246ebddcee7b5df2a332ba" +deps = ["HerbCore", "Serialization"] +git-tree-sha1 = "3c667987e8a27d9b697993fab68dfc602b3a18e6" uuid = "4ef9e186-2fe5-4b24-8de7-9f7291f24af7" -version = "0.4.0" +version = "0.5.0" [[deps.HerbInterpret]] deps = ["HerbCore", "HerbGrammar", "HerbSpecification"] -git-tree-sha1 = "2c1486af643e1abf4b191315db210068994f5b15" +git-tree-sha1 = "6dd2913b88e0cbd0bc5ed78e67d4d406df61ddda" uuid = "5bbddadd-02c5-4713-84b8-97364418cca7" -version = "0.1.4" +version = "0.1.6" [[deps.HerbSearch]] -deps = ["DataStructures", "HerbConstraints", "HerbCore", "HerbGrammar", "HerbInterpret", "HerbSpecification", "Logging", "MLStyle", "Random", "StatsBase"] -git-tree-sha1 = "012eade2b2de78913d22fe0c051c5dd22738c297" +deps = ["DataStructures", "HerbConstraints", "HerbCore", "HerbGrammar", "HerbInterpret", "HerbSpecification", "MLStyle", "Random", "StatsBase"] +git-tree-sha1 = "95a5c1e87cd61b14cf9785f293e5633b39a69fc5" uuid = "3008d8e8-f9aa-438a-92ed-26e9c7b4829f" -version = "0.3.1" +version = "0.4.1" [[deps.HerbSpecification]] -git-tree-sha1 = "5385b81e40c3cd62aeea591319896148036863c9" +deps = ["AutoHashEquals"] +git-tree-sha1 = "4a153a24694d4d91cf811d63581c9115087f06fc" uuid = "6d54aada-062f-46d8-85cf-a1ceaf058a06" -version = "0.1.0" +version = "0.2.0" [[deps.Hiccup]] deps = ["MacroTools", "Test"] @@ -1042,9 +1026,9 @@ version = "0.5.3" [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "7c4195be1649ae622304031ed46a2f4df989f1eb" +git-tree-sha1 = "b1c2585431c382e3fe5805874bda6aea90a95de9" uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.24" +version = "0.3.25" [[deps.Hyperscript]] deps = ["Test"] @@ -1064,12 +1048,6 @@ git-tree-sha1 = "6c3ce99fdbaf680aa6716f4b919c19e902d67c9c" uuid = "09f84164-cd44-5f33-b23f-e6b0d136a0d5" version = "0.11.3" -[[deps.ICU_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "20b6765a3016e1fca0c9c93c80d50061b94218b7" -uuid = "a51ab1cf-af8e-5615-a023-bc2c838bba6b" -version = "69.1.0+0" - [[deps.IOCapture]] deps = ["Logging", "Random"] git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770" @@ -1125,16 +1103,28 @@ weakdeps = ["Unitful"] InterpolationsUnitfulExt = "Unitful" [[deps.IntervalArithmetic]] -deps = ["CRlibm", "FastRounding", "LinearAlgebra", "Markdown", "Random", "RecipesBase", "RoundingEmulator", "SetRounding", "StaticArrays"] -git-tree-sha1 = "5ab7744289be503d76a944784bac3f2df7b809af" +deps = ["CRlibm_jll", "LinearAlgebra", "MacroTools", "RoundingEmulator"] +git-tree-sha1 = "ffb76d09ab0dc9f5a27edac2acec13c74a876cc6" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.20.9" +version = "0.22.21" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + + [deps.IntervalArithmetic.weakdeps] + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" [[deps.IntervalRootFinding]] -deps = ["ForwardDiff", "IntervalArithmetic", "LinearAlgebra", "Polynomials", "Reexport", "StaticArrays"] -git-tree-sha1 = "b92e9e2b356146918c4f3f3845571abcf0501594" +deps = ["BranchAndPrune", "ForwardDiff", "IntervalArithmetic", "LinearAlgebra", "Reexport", "StaticArrays"] +git-tree-sha1 = "68c9d23b092424df6b66e06cd241d2709f1b430e" uuid = "d2bf35a9-74e0-55ec-b149-d360ff49b807" -version = "0.5.11" +version = "0.6.0" [[deps.InverseFunctions]] git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" @@ -1147,9 +1137,9 @@ weakdeps = ["Dates", "Test"] InverseFunctionsTestExt = "Test" [[deps.InvertedIndices]] -git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.3.0" +version = "1.3.1" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -1168,21 +1158,21 @@ version = "1.0.0" [[deps.JLD2]] deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "PrecompileTools", "Requires", "TranscodingStreams"] -git-tree-sha1 = "783c1be5213a09609b23237a0c9e5dfd258ae6f2" +git-tree-sha1 = "91d501cb908df6f134352ad73cde5efc50138279" uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" -version = "0.5.7" +version = "0.5.11" [[deps.JLFzf]] deps = ["Pipe", "REPL", "Random", "fzf_jll"] -git-tree-sha1 = "39d64b09147620f5ffbf6b2d3255be3c901bec63" +git-tree-sha1 = "71b48d857e86bf7a1838c4736545699974ce79a2" uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" -version = "0.1.8" +version = "0.1.9" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "be3dc50a92e5a386872a493a10050136d4703f9b" +git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.6.1" +version = "1.7.0" [[deps.JSExpr]] deps = ["JSON", "MacroTools", "Observables", "WebIO"] @@ -1210,15 +1200,15 @@ version = "1.14.1" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "25ee0be4d43d0269027024d75a24c24d6c6e590c" +git-tree-sha1 = "eac1206917768cb54957c65a615460d87b455fc1" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.0.4+0" +version = "3.1.1+0" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "2984284a8abcfcc4784d95a9e2ea4e352dd8ede7" +git-tree-sha1 = "10da5154188682e5c0726823c2b5125957ec3778" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.36" +version = "0.9.38" [[deps.Kaleido_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1239,10 +1229,10 @@ uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" version = "3.100.2+0" [[deps.LERC_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3" uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "3.0.0+1" +version = "4.0.1+0" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1252,9 +1242,9 @@ version = "18.1.7+0" [[deps.LZO_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "854a9c268c43b77b0a27f22d7fab8d33cdb3a731" +git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a" uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.2+1" +version = "2.10.3+0" [[deps.LaTeXStrings]] git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" @@ -1284,9 +1274,9 @@ uuid = "10f19ff3-798f-405d-979b-55457f8fc047" version = "0.1.17" [[deps.LazilyInitializedFields]] -git-tree-sha1 = "8f7f3cabab0fd1800699663533b6d5cb3fc0e612" +git-tree-sha1 = "0f2da712350b020bc3957f269c9caad516383ee0" uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" -version = "1.2.2" +version = "1.3.0" [[deps.Lazy]] deps = ["MacroTools"] @@ -1327,51 +1317,51 @@ uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +git-tree-sha1 = "27ecae93dd25ee0909666e6835051dd684cc035e" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" -version = "3.2.2+1" +version = "3.2.2+2" [[deps.Libgcrypt_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] -git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +git-tree-sha1 = "8be878062e0ffa2c3f67bb58a595375eda5de80b" uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.11+0" +version = "1.11.0+0" [[deps.Libglvnd_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] -git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "ff3b4b9d35de638936a525ecd36e86a8bb919d11" uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" -version = "1.6.0+0" +version = "1.7.0+0" [[deps.Libgpg_error_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c6ce1e19f3aec9b59186bdf06cdf3c4fc5f5f3e6" +git-tree-sha1 = "df37206100d39f79b3376afb6b9cee4970041c61" uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" -version = "1.50.0+0" +version = "1.51.1+0" [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "61dfdba58e585066d8bce214c5a51eaa0539f269" +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+1" +version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +git-tree-sha1 = "89211ea35d9df5831fca5d33552c02bd33878419" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.40.1+0" +version = "2.40.3+0" [[deps.Libtiff_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "4ab7581296671007fc33f07a721631b8855f4b1d" uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.4.0+0" +version = "4.7.1+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +git-tree-sha1 = "e888ad02ce716b319e6bdb985d2ef300e7089889" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.40.1+0" +version = "2.40.3+0" [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] @@ -1383,17 +1373,11 @@ version = "7.3.0" deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -[[deps.LittleCMS_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg"] -git-tree-sha1 = "110897e7db2d6836be22c18bffd9422218ee6284" -uuid = "d3a379c0-f9a3-5b72-a4c0-6bf4d2e8af0f" -version = "2.12.0+0" - [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.28" +version = "0.3.29" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -1422,9 +1406,9 @@ version = "1.0.3" [[deps.LoweredCodeUtils]] deps = ["JuliaInterpreter"] -git-tree-sha1 = "260dc274c1bc2cb839e758588c63d9c8b5e639d1" +git-tree-sha1 = "688d6d9e098109051ae33d126fcfc88c4ce4a021" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "3.0.5" +version = "3.1.0" [[deps.MIMEs]] git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" @@ -1443,10 +1427,9 @@ uuid = "d8e11817-5142-5d16-987a-aa16d5891078" version = "0.4.17" [[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +git-tree-sha1 = "72aebe0b5051e5143a079a4685a46da330a40472" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.13" +version = "0.5.15" [[deps.Malt]] deps = ["Distributed", "Logging", "RelocatableFolders", "Serialization", "Sockets"] @@ -1461,9 +1444,9 @@ version = "0.1.8" [[deps.MarchingCubes]] deps = ["PrecompileTools", "StaticArrays"] -git-tree-sha1 = "301345b808264ae42e60d10a519e55c5d992969b" +git-tree-sha1 = "0e893025924b6becbae4109f8020ac0e12674b01" uuid = "299715c1-40a9-479a-aaf9-4a633d36f717" -version = "0.1.10" +version = "0.1.11" [[deps.Markdown]] deps = ["Base64"] @@ -1572,15 +1555,15 @@ version = "7.8.3" [[deps.NaNMath]] deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +git-tree-sha1 = "030ea22804ef91648f29b7ad3fc15fa49d0e6e71" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" +version = "1.0.3" [[deps.NearestNeighbors]] deps = ["Distances", "StaticArrays"] -git-tree-sha1 = "3cebfc94a0754cc329ebc3bab1e6c89621e791ad" +git-tree-sha1 = "8a3271d8309285f4db73b4f662b1b290c715e85e" uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" -version = "0.4.20" +version = "0.4.21" [[deps.Neighborhood]] deps = ["Distances", "NearestNeighbors", "Random", "Test"] @@ -1590,9 +1573,9 @@ version = "0.2.4" [[deps.NetworkLayout]] deps = ["GeometryBasics", "LinearAlgebra", "Random", "Requires", "StaticArrays"] -git-tree-sha1 = "0c51e19351dc1eecc61bc23caaf2262e7ba71973" +git-tree-sha1 = "ef79ce223dddbdaf709779842211d6d6e85c1514" uuid = "46757867-2c16-5918-afeb-47bfcb05e46a" -version = "0.4.7" +version = "0.4.9" weakdeps = ["Graphs"] [deps.NetworkLayout.extensions] @@ -1608,9 +1591,9 @@ uuid = "510215fc-4207-5dde-b226-833fc4488ee2" version = "0.5.5" [[deps.OffsetArrays]] -git-tree-sha1 = "1a27764e945a152f7ca7efa04de513d473e9542e" +git-tree-sha1 = "5e1897147d1ff8d98883cda2be2187dcf57d8f0c" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.14.1" +version = "1.15.0" weakdeps = ["Adapt"] [deps.OffsetArrays.extensions] @@ -1627,12 +1610,6 @@ deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" version = "0.3.23+4" -[[deps.OpenJpeg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libtiff_jll", "LittleCMS_jll", "Pkg", "libpng_jll"] -git-tree-sha1 = "76374b6e7f632c130e78100b166e5a48464256f8" -uuid = "643b3616-a352-519d-856d-80112ee9badc" -version = "2.4.0+0" - [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" @@ -1646,21 +1623,21 @@ version = "1.4.3" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ad31332567b189f508a3ea8957a2640b1147ab00" +git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.23+1" +version = "3.0.15+3" [[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" +version = "0.5.6+0" [[deps.Optim]] deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "d9b79c4eed437421ac4285148fcadf42e0700e89" +git-tree-sha1 = "ab7edad78cdef22099f43c54ef77ac63c2c9cc64" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.9.4" +version = "1.10.0" [deps.Optim.extensions] OptimMOIExt = "MathOptInterface" @@ -1675,15 +1652,15 @@ uuid = "91d4177d-7536-5919-b921-800302f37372" version = "1.3.3+0" [[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" +version = "1.7.0" [[deps.OrdinaryDiffEqCore]] -deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "FastBroadcast", "FastClosures", "FastPower", "FillArrays", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleUnPack", "Static", "StaticArrayInterface", "StaticArraysCore", "TruncatedStacktraces"] -git-tree-sha1 = "1175717a62ab21736a8f5d0d2531d2a6ad3b9e74" +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "FastBroadcast", "FastClosures", "FastPower", "FillArrays", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleUnPack", "Static", "StaticArrayInterface", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "72c77ae685fddb6291fff22dba13f4f32602475c" uuid = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" -version = "1.9.0" +version = "1.14.1" weakdeps = ["EnzymeCore"] [deps.OrdinaryDiffEqCore.extensions] @@ -1708,9 +1685,9 @@ version = "0.11.31" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "9dd97171646850ee607593965ce1f55063d8d3f9" +git-tree-sha1 = "ed6834e95bd326c52d5675b4181386dfbe885afb" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.54.0+0" +version = "1.55.5+0" [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] @@ -1754,15 +1731,15 @@ version = "1.10.0" [[deps.PlotThemes]] deps = ["PlotUtils", "Statistics"] -git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" -version = "3.2.0" +version = "3.3.0" [[deps.PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] -git-tree-sha1 = "650a022b2ce86c7dcfbdecf00f78afeeb20e5655" +git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" -version = "1.4.2" +version = "1.4.3" [[deps.PlotlyBase]] deps = ["ColorSchemes", "Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Parameters", "Pkg", "REPL", "Requires", "Statistics", "UUIDs"] @@ -1772,9 +1749,9 @@ version = "0.8.19" [[deps.PlotlyJS]] deps = ["Base64", "Blink", "DelimitedFiles", "JSExpr", "JSON", "Kaleido_jll", "Markdown", "Pkg", "PlotlyBase", "PlotlyKaleido", "REPL", "Reexport", "Requires", "WebIO"] -git-tree-sha1 = "f198c8a80c08987a2915156e6e6131e5d73b97f4" +git-tree-sha1 = "e415b25fdec06e57590a7d5ac8e0cf662fa317e2" uuid = "f0f68f2c-4968-5e81-91da-67840de0976a" -version = "0.18.14" +version = "0.18.15" [deps.PlotlyJS.extensions] CSVExt = "CSV" @@ -1789,16 +1766,16 @@ version = "0.18.14" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" [[deps.PlotlyKaleido]] -deps = ["Base64", "JSON", "Kaleido_jll"] -git-tree-sha1 = "3210de4d88af7ca5de9e26305758a59aabc48aac" +deps = ["Artifacts", "Base64", "JSON", "Kaleido_jll"] +git-tree-sha1 = "ba551e47d7eac212864fdfea3bd07f30202b4a5b" uuid = "f2990250-8cf9-495f-b13a-cce12b45703c" -version = "2.2.5" +version = "2.2.6" [[deps.Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "TOML", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "f202a1ca4f6e165238d8175df63a7e26a51e04dc" +git-tree-sha1 = "dae01f8c2e069a683d3a6e17bbae5070ab94786f" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.40.7" +version = "1.40.9" [deps.Plots.extensions] FileIOExt = "FileIO" @@ -1816,15 +1793,15 @@ version = "1.40.7" [[deps.Pluto]] deps = ["Base64", "Configurations", "Dates", "Downloads", "ExpressionExplorer", "FileWatching", "FuzzyCompletions", "HTTP", "HypertextLiteral", "InteractiveUtils", "Logging", "LoggingExtras", "MIMEs", "Malt", "Markdown", "MsgPack", "Pkg", "PlutoDependencyExplorer", "PrecompileSignatures", "PrecompileTools", "REPL", "RegistryInstances", "RelocatableFolders", "Scratch", "Sockets", "TOML", "Tables", "URIs", "UUIDs"] -git-tree-sha1 = "274f6900eb612a173104cddfe60ec95f72b6e379" +git-tree-sha1 = "b5509a2e4d4c189da505b780e3f447d1e38a0350" uuid = "c3e4b0f8-55cb-11ea-2926-15256bba5781" -version = "0.20.1" +version = "0.20.4" [[deps.PlutoDependencyExplorer]] deps = ["ExpressionExplorer", "InteractiveUtils", "Markdown"] -git-tree-sha1 = "592470bdf383cd34e88a21bbd7f1f7ffc52a21c6" +git-tree-sha1 = "e0864c15334d2c4bac8137ce3359f1174565e719" uuid = "72656b73-756c-7461-726b-72656b6b696b" -version = "1.1.0" +version = "1.2.0" [[deps.PlutoHooks]] deps = ["InteractiveUtils", "Markdown", "UUIDs"] @@ -1863,18 +1840,20 @@ uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" version = "0.2.2" [[deps.Polynomials]] -deps = ["LinearAlgebra", "RecipesBase"] -git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163" +deps = ["LinearAlgebra", "OrderedCollections", "RecipesBase", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "27f6107dc202e2499f0750c628a848ce5d6e77f5" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "3.2.13" +version = "4.0.13" [deps.Polynomials.extensions] PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsFFTWExt = "FFTW" PolynomialsMakieCoreExt = "MakieCore" PolynomialsMutableArithmeticsExt = "MutableArithmetics" [deps.Polynomials.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" @@ -1884,12 +1863,6 @@ git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" version = "1.4.3" -[[deps.Poppler_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "OpenJpeg_jll", "Pkg", "libpng_jll"] -git-tree-sha1 = "02148a0cb2532f22c0589ceb75c110e168fb3d1f" -uuid = "9c32591e-4766-534b-9725-b71a8799265b" -version = "21.9.0+0" - [[deps.PositiveFactorizations]] deps = ["LinearAlgebra"] git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" @@ -1921,9 +1894,15 @@ version = "1.2.1" [[deps.PredefinedDynamicalSystems]] deps = ["DynamicalSystemsBase", "Reexport", "SparseArrays", "StaticArrays", "Statistics"] -git-tree-sha1 = "082f44959e71bef816a7d41c2383fd0df83c95df" +git-tree-sha1 = "bdfa9f3d4f3a843b5041055e4a5b9a077a2341eb" uuid = "31e2f376-db9e-427a-b76e-a14f56347a14" -version = "1.2.0" +version = "1.3.0" + +[[deps.PreferenceTools]] +deps = ["Markdown", "Pkg", "Preferences"] +git-tree-sha1 = "44ffbe8eb0b8bdff44bd1e9898de5157fcae7893" +uuid = "ba661fbb-e901-4445-b070-854aec6bfbc5" +version = "0.1.2" [[deps.Preferences]] deps = ["TOML"] @@ -1974,11 +1953,29 @@ git-tree-sha1 = "06a778ec6d6e76b0c2fb661436a18bce853ec45f" uuid = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" version = "0.9.23" -[[deps.Qt5Base_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] -git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" -uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" -version = "5.15.3+2" +[[deps.Qt6Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] +git-tree-sha1 = "492601870742dcd38f233b23c3ec629628c1d724" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.7.1+1" + +[[deps.Qt6Declarative_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll"] +git-tree-sha1 = "e5dd466bf2569fe08c91a2cc29c1003f4797ac3b" +uuid = "629bc702-f1f5-5709-abd5-49b8460ea067" +version = "6.7.1+2" + +[[deps.Qt6ShaderTools_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] +git-tree-sha1 = "1a180aeced866700d4bebc3120ea1451201f16bc" +uuid = "ce943373-25bb-56aa-8eca-768745ed7b5a" +version = "6.7.1+1" + +[[deps.Qt6Wayland_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] +git-tree-sha1 = "729927532d48cf79f49070341e1d918a65aba6b0" +uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" +version = "6.7.1+1" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] @@ -2024,15 +2021,15 @@ version = "0.6.12" [[deps.RecurrenceAnalysis]] deps = ["DelimitedFiles", "Distances", "Graphs", "LinearAlgebra", "Random", "Reexport", "SparseArrays", "StateSpaceSets", "Statistics", "UnicodePlots"] -git-tree-sha1 = "a211f904a9b6cb47feecb83e4e5780eff398c88a" +git-tree-sha1 = "28e655d7647b9907d079c4a9ad6e99440e34424c" uuid = "639c3291-70d9-5ea2-8c5b-839eba1ee399" -version = "2.1.0" +version = "2.1.1" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "b034171b93aebc81b3e1890a036d13a9c4a9e3e0" +git-tree-sha1 = "32f824db4e5bab64e25a12b22483a30a6b813d08" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.27.0" +version = "3.27.4" [deps.RecursiveArrayTools.extensions] RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" @@ -2041,6 +2038,7 @@ version = "3.27.0" RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] + RecursiveArrayToolsStructArraysExt = "StructArrays" RecursiveArrayToolsTrackerExt = "Tracker" RecursiveArrayToolsZygoteExt = "Zygote" @@ -2051,6 +2049,7 @@ version = "3.27.0" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" @@ -2078,10 +2077,14 @@ uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" [[deps.Revise]] -deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "7f4228017b83c66bd6aa4fddeb170ce487e53bc7" +deps = ["CodeTracking", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] +git-tree-sha1 = "b5e7c125687aa818de948ef8a0b9dc59f043342c" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.6.2" +version = "3.7.1" +weakdeps = ["Distributed"] + + [deps.Revise.extensions] + DistributedExt = "Distributed" [[deps.Rmath]] deps = ["Random", "Rmath_jll"] @@ -2097,9 +2100,9 @@ version = "0.5.1+0" [[deps.Roots]] deps = ["Accessors", "CommonSolve", "Printf"] -git-tree-sha1 = "3a7c7e5c3f015415637f5debdf8a674aa2c979c4" +git-tree-sha1 = "f233e0a3de30a6eed170b8e1be0440f732fdf456" uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.2.1" +version = "2.2.4" [deps.Roots.extensions] RootsChainRulesCoreExt = "ChainRulesCore" @@ -2128,9 +2131,9 @@ version = "0.5.13" [[deps.SBML]] deps = ["DocStringExtensions", "IfElse", "Libdl", "SBML_jll", "SparseArrays", "Unitful"] -git-tree-sha1 = "8bdb7ee0f1ad78a7de942951437412dd1c93e782" +git-tree-sha1 = "95a41304024735a61f2d5425265c6e7e75967766" uuid = "e5567a89-2604-4b09-9718-f5f78e97c3bb" -version = "1.5.1" +version = "1.6.0" [[deps.SBML_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Zlib_jll"] @@ -2149,9 +2152,9 @@ version = "0.1.0" [[deps.SciMLBase]] deps = ["ADTypes", "Accessors", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "Expronicon", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "0da22990d48d9297b05f9f6f1275f209d29840c0" +git-tree-sha1 = "3e5a9c5d6432b77a271646b4ada2573f239ac5c4" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.57.0" +version = "2.70.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2174,9 +2177,9 @@ version = "2.57.0" [[deps.SciMLOperators]] deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools"] -git-tree-sha1 = "ef388ca9e4921ec5614ce714f8aa59a5cd33d867" +git-tree-sha1 = "6149620767866d4b0f0f7028639b6e661b6a1e44" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.11" +version = "0.3.12" weakdeps = ["SparseArrays", "StaticArraysCore"] [deps.SciMLOperators.extensions] @@ -2185,9 +2188,9 @@ weakdeps = ["SparseArrays", "StaticArraysCore"] [[deps.SciMLStructures]] deps = ["ArrayInterface"] -git-tree-sha1 = "25514a6f200219cd1073e4ff23a6324e4a7efe64" +git-tree-sha1 = "0444a37a25fab98adbd90baa806ee492a3af133a" uuid = "53ae85a6-f571-4167-b2af-e1d143709226" -version = "1.5.0" +version = "1.6.1" [[deps.Scratch]] deps = ["Dates"] @@ -2197,18 +2200,13 @@ version = "1.2.1" [[deps.SentinelArrays]] deps = ["Dates", "Random"] -git-tree-sha1 = "305becf8af67eae1dbc912ee9097f00aeeabb8d5" +git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.6" +version = "1.4.8" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -[[deps.SetRounding]] -git-tree-sha1 = "d7a25e439d07a17b7cdf97eecee504c50fedf5f6" -uuid = "3cc68bcd-71a2-5612-b932-767ffbe40ab0" -version = "0.2.1" - [[deps.Setfield]] deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" @@ -2246,6 +2244,12 @@ git-tree-sha1 = "58e6353e72cde29b90a69527e56df1b5c3d8c437" uuid = "ce78b400-467f-4804-87d8-8f486da07d0a" version = "1.1.0" +[[deps.SlurmClusterManager]] +deps = ["Distributed"] +git-tree-sha1 = "9ea4bf8d0525f12ed59a8b5b1d7db6703281508e" +uuid = "c82cd089-7bf7-41d7-976b-6b5d413cbe0a" +version = "0.1.2" + [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" @@ -2256,10 +2260,10 @@ uuid = "4475fa32-7023-44a0-aa70-4813b230e492" version = "0.12.4" [[deps.SoleLogics]] -deps = ["AbstractTrees", "DataStructures", "Dictionaries", "FunctionWrappers", "Graphs", "IterTools", "Lazy", "PrettyTables", "Random", "Reexport", "Revise", "SoleBase", "StatsBase", "ThreadSafeDicts"] -git-tree-sha1 = "1ee03b46a5af29efbefbeb007cbc420d3ef2dd45" +deps = ["AbstractTrees", "DataStructures", "Dictionaries", "FunctionWrappers", "Graphs", "IterTools", "Lazy", "PrettyTables", "Random", "Reexport", "SoleBase", "StatsBase", "ThreadSafeDicts"] +git-tree-sha1 = "e041b8e0606b0eea5e033f5391e5c89edd8990e2" uuid = "b002da8f-3cb3-4d91-bbe3-2953433912b5" -version = "0.9.5" +version = "0.10.4" [[deps.SortingAlgorithms]] deps = ["DataStructures"] @@ -2279,9 +2283,9 @@ version = "0.1.6" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +git-tree-sha1 = "64cca0c26b4f31ba18f13f6c12af7c85f478cfde" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.4.0" +version = "2.5.0" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -2318,9 +2322,9 @@ weakdeps = ["OffsetArrays", "StaticArrays"] [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "777657803913ffc7e8cc20f0fd04b634f871af8f" +git-tree-sha1 = "47091a0340a675c738b1304b58161f3b0839d454" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.8" +version = "1.9.10" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -2344,10 +2348,10 @@ uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" version = "1.7.0" [[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "29321314c920c26684834965ec2ce0dacc9cf8e5" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.3" +version = "0.34.4" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] @@ -2378,19 +2382,6 @@ git-tree-sha1 = "a6b1675a536c5ad1a60e5a5153e1fee12eb146e3" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" version = "0.4.0" -[[deps.StructArrays]] -deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "f4dc295e983502292c4c3f951dbb4e985e35b3be" -uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.18" -weakdeps = ["Adapt", "GPUArraysCore", "SparseArrays", "StaticArrays"] - - [deps.StructArrays.extensions] - StructArraysAdaptExt = "Adapt" - StructArraysGPUArraysCoreExt = "GPUArraysCore" - StructArraysSparseArraysExt = "SparseArrays" - StructArraysStaticArraysExt = "StaticArrays" - [[deps.StructTypes]] deps = ["Dates", "UUIDs"] git-tree-sha1 = "159331b30e94d7b11379037feeb9b690950cace8" @@ -2408,9 +2399,9 @@ version = "7.2.1+1" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "4bc96df5d71515b1cb86dd626915f06f4c0d46f5" +git-tree-sha1 = "fd2d4f0499f6bb4a0d9f5030f5c7d61eed385e03" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.33" +version = "0.3.37" [[deps.TOML]] deps = ["Dates"] @@ -2469,21 +2460,9 @@ version = "0.5.2" [[deps.TidierData]] deps = ["Chain", "Cleaner", "DataFrames", "MacroTools", "Reexport", "ShiftedArrays", "Statistics", "StatsBase"] -git-tree-sha1 = "2649cad958374080016511376e647c15942825dc" +git-tree-sha1 = "48a6eda37acca44d4fdf70fef36a9b26a1193574" uuid = "fe2206b3-d496-4ee9-a338-6a095c4ece80" -version = "0.16.2" - -[[deps.TikzGraphs]] -deps = ["Graphs", "LaTeXStrings", "TikzPictures"] -git-tree-sha1 = "e8f41ed9a2cabf6699d9906c195bab1f773d4ca7" -uuid = "b4f28e30-c73f-5eaf-a395-8a9db949a742" -version = "1.4.0" - -[[deps.TikzPictures]] -deps = ["LaTeXStrings", "Poppler_jll", "Requires", "tectonic_jll"] -git-tree-sha1 = "79e2d29b216ef24a0f4f905532b900dcf529aa06" -uuid = "37f6aa50-8035-52d0-81c2-5a1d08754b2d" -version = "3.5.0" +version = "0.16.5" [[deps.TimeseriesSurrogates]] deps = ["AbstractFFTs", "DSP", "DelayEmbeddings", "Distances", "Distributions", "Interpolations", "LinearAlgebra", "LombScargle", "Random", "StateSpaceSets", "Statistics", "StatsAPI", "StatsBase", "Wavelets"] @@ -2502,12 +2481,6 @@ git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.11.3" -[[deps.TreeView]] -deps = ["CommonSubexpressions", "Graphs", "MacroTools", "TikzGraphs"] -git-tree-sha1 = "41ddcefb625f2ab0f4d9f2081c2da1af2ccbbf8b" -uuid = "39424ebd-4cf3-5550-a685-96706a953f40" -version = "0.5.1" - [[deps.Tricks]] git-tree-sha1 = "7822b97e99a1672bfb1b49b668a6d46d58d8cbcb" uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" @@ -2543,10 +2516,10 @@ uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.UnicodePlots]] -deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "LinearAlgebra", "MarchingCubes", "NaNMath", "PrecompileTools", "Printf", "Requires", "SparseArrays", "StaticArrays", "StatsBase"] -git-tree-sha1 = "acae7efed23db0e73d3d2c434d97353748c9527c" +deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "LinearAlgebra", "MarchingCubes", "NaNMath", "PrecompileTools", "Printf", "SparseArrays", "StaticArrays", "StatsBase"] +git-tree-sha1 = "24c0e2df19eb3f894d28a64e7486926f38de8a49" uuid = "b8865327-cd53-5732-bb35-84acbb429228" -version = "3.6.5" +version = "3.7.2" [deps.UnicodePlots.extensions] FreeTypeExt = ["FileIO", "FreeType"] @@ -2565,9 +2538,9 @@ version = "3.6.5" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d95fe458f26209c66a187b1114df96fd70839efd" +git-tree-sha1 = "c0667a8e676c53d390a09dc6870b3d8d6650e2bf" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.21.0" +version = "1.22.0" weakdeps = ["ConstructionBase", "InverseFunctions"] [deps.Unitful.extensions] @@ -2590,6 +2563,12 @@ git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" version = "0.2.0" +[[deps.Vulkan_Loader_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] +git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" +uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" +version = "1.3.243+0" + [[deps.Wavelets]] deps = ["DSP", "FFTW", "LinearAlgebra", "Reexport", "SpecialFunctions", "Statistics"] git-tree-sha1 = "f514f9b16f6a15552c6aad7b03afc7b9a8478ef4" @@ -2598,15 +2577,15 @@ version = "0.10.0" [[deps.Wayland_jll]] deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +git-tree-sha1 = "85c7811eddec9e7f22615371c3cc81a504c508ee" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.21.0+1" +version = "1.21.0+2" [[deps.Wayland_protocols_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +git-tree-sha1 = "5db3e9d307d32baba7067b13fc7b5aa6edd4a19a" uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" -version = "1.31.0+0" +version = "1.36.0+0" [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] @@ -2628,9 +2607,9 @@ version = "1.6.0" [[deps.Widgets]] deps = ["Colors", "Dates", "Observables", "OrderedCollections"] -git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" +git-tree-sha1 = "e9aeb174f95385de31e70bd15fa066a505ea82b9" uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" -version = "0.6.6" +version = "0.6.7" [[deps.WoodburyMatrices]] deps = ["LinearAlgebra", "SparseArrays"] @@ -2651,93 +2630,117 @@ version = "0.3.4" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "6a451c6f33a176150f315726eba8b92fbfdb9ae7" +git-tree-sha1 = "a2fccc6559132927d4c5dc183e3e01048c6dcbd6" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.4+0" +version = "2.13.5+0" [[deps.XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" +git-tree-sha1 = "7d1671acbe47ac88e981868a078bd6b4e27c5191" uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.41+0" +version = "1.1.42+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "beef98d5aad604d9e7d60b2ece5181f7888e2fd6" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.6.4+0" + +[[deps.Xorg_libICE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "326b4fea307b0b39892b3e85fa451692eda8d46c" +uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" +version = "1.1.1+0" + +[[deps.Xorg_libSM_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] +git-tree-sha1 = "3796722887072218eabafb494a13c963209754ce" +uuid = "c834827a-8449-5923-a945-d239c165b7dd" +version = "1.2.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" +git-tree-sha1 = "9dafcee1d24c4f024e7edc92603cedba72118283" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.8.6+0" +version = "1.8.6+3" [[deps.Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +git-tree-sha1 = "e9216fdcd8514b7072b43653874fd688e4c6c003" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.11+0" +version = "1.0.12+0" [[deps.Xorg_libXcursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "807c226eaf3651e7b2c468f687ac788291f9a89b" uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" -version = "1.2.0+4" +version = "1.2.3+0" [[deps.Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +git-tree-sha1 = "89799ae67c17caa5b3b5a19b8469eeee474377db" uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.4+0" +version = "1.1.5+0" [[deps.Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +git-tree-sha1 = "d7155fea91a4123ef59f42c4afb5ab3b4ca95058" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.6+0" +version = "1.3.6+3" [[deps.Xorg_libXfixes_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "6fcc21d5aea1a0b7cce6cab3e62246abd1949b86" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "5.0.3+4" +version = "6.0.0+0" [[deps.Xorg_libXi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] -git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "984b313b049c89739075b8e2a94407076de17449" uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.7.10+4" +version = "1.8.2+0" [[deps.Xorg_libXinerama_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] -git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] +git-tree-sha1 = "a1a7eaf6c3b5b05cb903e35e8372049b107ac729" uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.4+4" +version = "1.1.5+0" [[deps.Xorg_libXrandr_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "b6f664b7b2f6a39689d822a6300b14df4668f0f4" uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.2+4" +version = "1.5.4+0" [[deps.Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +git-tree-sha1 = "a490c6212a0e90d2d55111ac956f7c4fa9c277a6" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.11+0" +version = "0.9.11+1" [[deps.Xorg_libpthread_stubs_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +git-tree-sha1 = "c57201109a9e4c0585b208bb408bc41d205ac4e9" uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.1+0" +version = "0.1.2+0" [[deps.Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e" +git-tree-sha1 = "1a74296303b6524a0472a8cb12d3d87a78eb3612" uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.17.0+0" +version = "1.17.0+3" [[deps.Xorg_libxkbfile_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +git-tree-sha1 = "dbc53e4cf7701c6c7047c51e17d6e64df55dca94" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" -version = "1.1.2+0" +version = "1.1.2+1" + +[[deps.Xorg_xcb_util_cursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] +git-tree-sha1 = "04341cb870f29dcd5e39055f895c39d016e18ccd" +uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" +version = "0.1.4+0" [[deps.Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] @@ -2771,9 +2774,9 @@ version = "0.4.1+1" [[deps.Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] -git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +git-tree-sha1 = "ab2221d309eda71020cdda67a973aa582aa85d69" uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" -version = "1.4.6+0" +version = "1.4.6+1" [[deps.Xorg_xkeyboard_config_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] @@ -2783,9 +2786,9 @@ version = "2.39.0+0" [[deps.Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +git-tree-sha1 = "6dba04dbfb72ae3ebe5418ba33d087ba8aa8cb00" uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.5.0+0" +version = "1.5.1+0" [[deps.Zlib_jll]] deps = ["Libdl"] @@ -2794,27 +2797,39 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "555d1076590a6cc2fdee2ef1469451f872d8b41b" +git-tree-sha1 = "622cf78670d067c738667aaa96c553430b65e269" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.6+1" +version = "1.5.7+0" + +[[deps.eudev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"] +git-tree-sha1 = "431b678a28ebb559d224c0b6b6d01afce87c51ba" +uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" +version = "3.2.9+0" [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "936081b536ae4aa65415d869287d43ef3cb576b2" +git-tree-sha1 = "6e50f145003024df4f5cb96c7fce79466741d601" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" -version = "0.53.0+0" +version = "0.56.3+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0ba42241cb6809f1a278d0bcb976e0483c3f1f2d" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+1" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +git-tree-sha1 = "522c1df09d05a71785765d19c9524661234738e9" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.9.0+0" +version = "3.11.0+0" [[deps.libass_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.1+0" +version = "0.15.2+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] @@ -2827,17 +2842,29 @@ git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" version = "0.2.2+0" +[[deps.libevdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "141fe65dc3efabb0b1d5ba74e91f6ad26f84cc22" +uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" +version = "1.11.0+0" + [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" version = "2.0.3+0" +[[deps.libinput_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"] +git-tree-sha1 = "ad50e5b90f222cfe78aa3d5183a20a12de1322ce" +uuid = "36db933b-70db-51c0-b978-0f229ee0e533" +version = "1.18.0+0" + [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "b70c870239dc3d7bc094eb2d6be9b73d27bef280" +git-tree-sha1 = "d7b5bbf1efbafb5eca466700949625e07533aff2" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.44+0" +version = "1.6.45+1" [[deps.libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] @@ -2851,6 +2878,12 @@ git-tree-sha1 = "b4a5a3943078f9fd11ae0b5ab1bdbf7718617945" uuid = "f8abcde7-e9b7-5caa-b8af-a437887ae8e4" version = "1.5.8+0" +[[deps.mtdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "814e154bdb7be91d78b6802843f76b6ece642f11" +uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" +version = "1.1.6+0" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" @@ -2867,12 +2900,6 @@ deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+2" -[[deps.tectonic_jll]] -deps = ["Artifacts", "Fontconfig_jll", "FreeType2_jll", "Graphite2_jll", "HarfBuzz_ICU_jll", "HarfBuzz_jll", "ICU_jll", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "54867b00af20c70b52a1f9c00043864d8b926a21" -uuid = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" -version = "0.13.1+0" - [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" @@ -2887,6 +2914,6 @@ version = "3.5.0+0" [[deps.xkbcommon_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "9c304562909ab2bab0262639bd4f444d7bc2be37" +git-tree-sha1 = "63406453ed9b33a0df95d570816d5366c92b7809" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.4.1+1" +version = "1.4.1+2" diff --git a/experiments/SynthBN/Project.toml b/experiments/Synth/Project.toml similarity index 81% rename from experiments/SynthBN/Project.toml rename to experiments/Synth/Project.toml index 98a0e2c..3317191 100644 --- a/experiments/SynthBN/Project.toml +++ b/experiments/Synth/Project.toml @@ -1,4 +1,4 @@ -name = "SynthBN" +name = "Synth" [deps] AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" @@ -6,13 +6,14 @@ BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" CondaPkg = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" +DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" DrWatson = "634d3b9d-ee7a-5ddf-bec9-22491ea816e1" DynamicalSystems = "61744808-ddfa-5f27-97ff-6e42cc95d634" Git = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" GraphDynamicalSystems = "13529e2e-ed53-56b1-bd6f-420b01fca819" GraphRecipes = "bd48cda9-67a9-57be-86fa-5b3c104eda73" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -Herb = "c09c6b7f-4f63-49de-90d9-97a3563c0f4a" HerbConstraints = "1fa96474-3206-4513-b4fa-23913f296dfc" HerbCore = "2b23ba43-8213-43cb-b5ea-38c12b45bd45" HerbGrammar = "4ef9e186-2fe5-4b24-8de7-9f7291f24af7" @@ -28,13 +29,18 @@ Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Pluto = "c3e4b0f8-55cb-11ea-2926-15256bba5781" PlutoTeachingTools = "661c6b06-c737-4d37-b85c-46df65de6f69" PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +PreferenceTools = "ba661fbb-e901-4445-b070-854aec6bfbc5" ProgressBars = "49802e3a-d2f1-5c88-81d8-b72133a6f568" +ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SBML = "e5567a89-2604-4b09-9718-f5f78e97c3bb" +SlurmClusterManager = "c82cd089-7bf7-41d7-976b-6b5d413cbe0a" SoleLogics = "b002da8f-3cb3-4d91-bbe3-2953433912b5" StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd" Term = "22787eb5-b846-44ae-b979-8e399b8463ab" TidierData = "fe2206b3-d496-4ee9-a338-6a095c4ece80" +UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" XML = "72c71f33-b9b6-44de-8c94-c961784809e2" [compat] diff --git a/experiments/SynthBN/README.md b/experiments/Synth/README.md similarity index 95% rename from experiments/SynthBN/README.md rename to experiments/Synth/README.md index 2eb135a..3fa85c9 100644 --- a/experiments/SynthBN/README.md +++ b/experiments/Synth/README.md @@ -1,9 +1,9 @@ -# SynthBN +# Synth This code base is using the [Julia Language](https://julialang.org/) and [DrWatson](https://juliadynamics.github.io/DrWatson.jl/stable/) to make a reproducible scientific project named -> SynthBN +> Synth To (locally) reproduce this project, do the following: @@ -25,7 +25,7 @@ You may notice that most scripts start with the commands: ```julia using DrWatson -@quickactivate "SynthBN" +@quickactivate "Synth" ``` which auto-activate the project and enable local path handling from DrWatson. diff --git a/experiments/Synth/flake.lock b/experiments/Synth/flake.lock new file mode 100644 index 0000000..e841dc9 --- /dev/null +++ b/experiments/Synth/flake.lock @@ -0,0 +1,73 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 0, + "narHash": "sha256-JwQZIGSYnRNOgDDoIgqKITrPVil+RMWHsZH1eE1VGN0=", + "path": "/nix/store/gg86rfp39vc7chqsszk32q7995hz4943-source", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "old-julia": { + "locked": { + "lastModified": 1714750952, + "narHash": "sha256-oOUdvPrO8CbupgDSaPou+Jv6GL+uQA2QlE33D7OLzkM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5fd8536a9a5932d4ae8de52b7dc08d92041237fc", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "5fd8536a9a5932d4ae8de52b7dc08d92041237fc", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "old-julia": "old-julia", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/experiments/Synth/flake.nix b/experiments/Synth/flake.nix new file mode 100644 index 0000000..0570c59 --- /dev/null +++ b/experiments/Synth/flake.nix @@ -0,0 +1,19 @@ +{ + inputs = { + utils.url = "github:numtide/flake-utils"; + old-julia.url = "nixpkgs/5fd8536a9a5932d4ae8de52b7dc08d92041237fc"; + }; + outputs = { self, nixpkgs, utils, old-julia }: utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + julia1-10-2-pkgs = old-julia.legacyPackages.${system}; + in + { + devShell = pkgs.mkShell { + buildInputs = [ + julia1-10-2-pkgs.julia-bin + ]; + }; + } + ); +} diff --git a/experiments/SynthBN/notebooks/biodivine.jl b/experiments/Synth/notebooks/biodivine.jl similarity index 99% rename from experiments/SynthBN/notebooks/biodivine.jl rename to experiments/Synth/notebooks/biodivine.jl index e51bbfe..bf8a9cf 100644 --- a/experiments/SynthBN/notebooks/biodivine.jl +++ b/experiments/Synth/notebooks/biodivine.jl @@ -23,7 +23,7 @@ using MetaGraphsNext: MetaGraph using Plots # ╔═╡ 3ab50cf5-da53-440c-9796-c9ee73b7ad86 -using SynthBN: AEONParser +using Synth: AEONParser # ╔═╡ 8a5e88c4-b0a6-4848-b6d2-74bdbd960e7c using DataFrames @@ -183,7 +183,7 @@ md""" $((!isdefined(@__MODULE__, :df) || nrow(df) == 0) ? danger(md"It seems that the dataframe with the benchmark information failed to load, or it was empty. Try running the script: -`julia experiments/SynthBN/scripts/biodivine_benchmark/load_aeon.jl` +`julia experiments/Synth/scripts/biodivine_benchmark/load_aeon.jl` to load/parse the benchmark.") : md"") """ diff --git a/experiments/SynthBN/notebooks/boolean_grammar.jl b/experiments/Synth/notebooks/boolean_grammar.jl similarity index 100% rename from experiments/SynthBN/notebooks/boolean_grammar.jl rename to experiments/Synth/notebooks/boolean_grammar.jl diff --git a/experiments/SynthBN/notebooks/examine_traj.jl b/experiments/Synth/notebooks/examine_traj.jl similarity index 91% rename from experiments/SynthBN/notebooks/examine_traj.jl rename to experiments/Synth/notebooks/examine_traj.jl index b01ae7b..2243bed 100644 --- a/experiments/SynthBN/notebooks/examine_traj.jl +++ b/experiments/Synth/notebooks/examine_traj.jl @@ -7,7 +7,14 @@ using InteractiveUtils # This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error). macro bind(def, element) quote - local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end + local iv = try + Base.loaded_modules[Base.PkgId( + Base.UUID("6e696c72-6542-2067-7265-42206c756150"), + "AbstractPlutoDingetjes", + )].Bonds.initial_value + catch + b -> missing + end local el = $(esc(element)) global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el) el @@ -80,7 +87,7 @@ res = load(pname) # ╔═╡ 1ce04619-14b1-4a4b-bc65-40dfdcae2c74 anim = @animate for i in eachindex(res["trajectories"]) - heatmap(Matrix(res["trajectories"][i])) + heatmap(Matrix(res["trajectories"][i])) end # ╔═╡ b36271d5-f908-4e65-b0fa-9175e8c2416c @@ -100,9 +107,9 @@ split_applied = [split_state_space(t) for t in traj] # ╔═╡ 17f352fc-6f4e-4d7d-ad7a-d6d2ac049ada begin - name = tempname() - name *= ".jld2" - save(name, @strdict split_applied) + name = tempname() + name *= ".jld2" + save(name, @strdict split_applied) end # ╔═╡ 947a965d-54f5-40e3-b703-4a18bf671d9c diff --git a/experiments/SynthBN/notebooks/exploring_real_gene_data.jl b/experiments/Synth/notebooks/exploring_real_gene_data.jl similarity index 100% rename from experiments/SynthBN/notebooks/exploring_real_gene_data.jl rename to experiments/Synth/notebooks/exploring_real_gene_data.jl diff --git a/experiments/SynthBN/notebooks/exploring_synth_bn.jl b/experiments/Synth/notebooks/exploring_synth_bn.jl similarity index 100% rename from experiments/SynthBN/notebooks/exploring_synth_bn.jl rename to experiments/Synth/notebooks/exploring_synth_bn.jl diff --git a/experiments/SynthBN/scripts/benchmark.jl b/experiments/Synth/scripts/benchmark.jl similarity index 99% rename from experiments/SynthBN/scripts/benchmark.jl rename to experiments/Synth/scripts/benchmark.jl index 5edcb1f..322a678 100644 --- a/experiments/SynthBN/scripts/benchmark.jl +++ b/experiments/Synth/scripts/benchmark.jl @@ -1,6 +1,6 @@ using DrWatson -@quickactivate :SynthBN +@quickactivate :Synth using BenchmarkTools using SoleLogics diff --git a/experiments/Synth/scripts/get_biodivine_benchmark.jl b/experiments/Synth/scripts/get_biodivine_benchmark.jl new file mode 100644 index 0000000..bf181d2 --- /dev/null +++ b/experiments/Synth/scripts/get_biodivine_benchmark.jl @@ -0,0 +1,43 @@ +#!/usr/bin/env -S julia --project=. +# +#SBATCH --job-name="BBM" +#SBATCH --partition=compute +#SBATCH --time=00:15:00 +#SBATCH --ntasks 32 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=1G +#SBATCH --account=research-eemcs-st + +using Distributed +try + using SlurmClusterManager + addprocs(SlurmManager()) +catch + @info "Not running from within Slurm, proceeding without Slurm workers" +end + +@everywhere using DrWatson + +@everywhere quickactivate(pwd()) +@everywhere using Synth + + +@info "Cloning the biodivine benchmark repository" +bbm_dir = datadir("src_raw", "biodivine-boolean-models") +if !isdir(bbm_dir) + get_biodivine_repo(bbm_dir) +end + +@info "Bundling the benchmark to .aeon format" +aeon_bundle_dir = joinpath(bbm_dir, "bbm-aeon-format") +if !isdir(aeon_bundle_dir) + bundle_biodivine_benchmark(bbm_dir, aeon_bundle_dir) +end + +@info "Parsing .aeon model files" +ids_to_ignore = ["079"] +load_aeon_biodivine(bbm_dir, ids_to_ignore) + +@info "Converting to MetaGraph-based models" +excluded_files = [r"041\.aeon\.jld2", r"079\.aeon\.jld2"] +convert_aeon_models_to_metagraphs(excluded_files) diff --git a/experiments/SynthBN/scripts/make_zip_all.sh b/experiments/Synth/scripts/make_zip_all.sh similarity index 81% rename from experiments/SynthBN/scripts/make_zip_all.sh rename to experiments/Synth/scripts/make_zip_all.sh index 3aae418..731ddee 100644 --- a/experiments/SynthBN/scripts/make_zip_all.sh +++ b/experiments/Synth/scripts/make_zip_all.sh @@ -11,4 +11,4 @@ # Load modules: module load 2024r1 -zip -r /scratch/rjgardosreid/synthbn_backup.zip data/ +zip -r /scratch/rjgardosreid/Synth_backup.zip data/ diff --git a/experiments/SynthBN/scripts/pluto_session.sh b/experiments/Synth/scripts/pluto_session.sh similarity index 100% rename from experiments/SynthBN/scripts/pluto_session.sh rename to experiments/Synth/scripts/pluto_session.sh diff --git a/experiments/SynthBN/scripts/profile_biodivine_synth.jl b/experiments/Synth/scripts/profile_biodivine_synth.jl similarity index 99% rename from experiments/SynthBN/scripts/profile_biodivine_synth.jl rename to experiments/Synth/scripts/profile_biodivine_synth.jl index 4333f77..3f5dfaa 100644 --- a/experiments/SynthBN/scripts/profile_biodivine_synth.jl +++ b/experiments/Synth/scripts/profile_biodivine_synth.jl @@ -1,6 +1,6 @@ using DrWatson -@quickactivate :SynthBN +@quickactivate :Synth using DataFrames using Herb, HerbGrammar, SoleLogics, HerbSpecification, HerbSearch diff --git a/experiments/Synth/scripts/sample_trajectories_biodivine.jl b/experiments/Synth/scripts/sample_trajectories_biodivine.jl new file mode 100644 index 0000000..85929eb --- /dev/null +++ b/experiments/Synth/scripts/sample_trajectories_biodivine.jl @@ -0,0 +1,47 @@ +#!/usr/bin/env -S julia --project=. +# +#SBATCH --job-name="Trajectories" +#SBATCH --partition=compute +#SBATCH --time=02:00:00 +#SBATCH --ntasks 32 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=8G +#SBATCH --account=research-eemcs-st + +using Distributed +try + using SlurmClusterManager + addprocs(SlurmManager()) +catch + @info "Not running from within Slurm, proceeding without Slurm workers" +end + +@everywhere using DrWatson + +@everywhere quickactivate(pwd()) +@everywhere using Synth + +using DataFrames +using GraphDynamicalSystems: BooleanNetworks +using ProgressMeter +using MetaGraphsNext + +mg_df = collect_results(datadir("src_parsed", "biodivine_benchmark_as_metagraphs")) +mg_df[!, :ID] = ((x -> x[1]) ∘ splitext ∘ basename).(mg_df.path) +mg_df_by_id = groupby(mg_df, :ID) + +param_setup = Dict("id" => mg_df.ID, "n_trajectories" => 200, "iterations" => 100) +all_params = dict_list(param_setup) + +@showprogress pmap(all_params) do params + @produce_or_load(params, path = datadir("sims", "biodivine_trajectories"),) do params + @unpack id, n_trajectories, iterations = params + bn = mg_df_by_id[(id,)].metagraph_model[1] + trajectories = [] + for traj_i = 1:n_trajectories + async_bn = BooleanNetworks.abn(bn; seed = traj_i) + push!(trajectories, gather_bn_data(async_bn, iterations)) + end + @strdict trajectories + end +end diff --git a/experiments/Synth/scripts/split_biodivine_trajectories.jl b/experiments/Synth/scripts/split_biodivine_trajectories.jl new file mode 100644 index 0000000..8c74dc5 --- /dev/null +++ b/experiments/Synth/scripts/split_biodivine_trajectories.jl @@ -0,0 +1,49 @@ +#!/usr/bin/env -S julia --project=. +# +#SBATCH --job-name="Split" +#SBATCH --partition=compute +#SBATCH --time=02:00:00 +#SBATCH --ntasks 64 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=8G +#SBATCH --account=research-eemcs-st + +using Distributed +try + using SlurmClusterManager + addprocs(SlurmManager()) +catch + @info "Not running from within Slurm, proceeding without Slurm workers" +end + +@everywhere using DrWatson + +@everywhere quickactivate(pwd()) +@everywhere using Synth + +using JLD2 +using ProgressMeter + +trajectories_dir = datadir("sims", "biodivine_trajectories") +split_trajectories_dir = datadir("sims", "biodivine_split") + +param_setup = Dict("traj_file" => readdir(datadir("sims", "biodivine_trajectories"))) +all_params = dict_list(param_setup) + +@showprogress pmap(all_params) do params + @produce_or_load( + params, + path = split_trajectories_dir, + filename = splitext(basename(params["traj_file"]))[1] + ) do params + @unpack traj_file = params + traj_file_contents = load(joinpath(trajectories_dir, traj_file)) + split_traj = nothing + if "trajectories" in keys(traj_file_contents) + trajectories = traj_file_contents["trajectories"] # also includes git tag, etc. + + split_traj = split_state_space.(trajectories) + end + @strdict split_traj + end +end diff --git a/experiments/Synth/scripts/synth_biodivine.jl b/experiments/Synth/scripts/synth_biodivine.jl new file mode 100644 index 0000000..466e54a --- /dev/null +++ b/experiments/Synth/scripts/synth_biodivine.jl @@ -0,0 +1,101 @@ +#!/usr/bin/env -S julia --project=. +# +#SBATCH --job-name="Synth" +#SBATCH --partition=compute +#SBATCH --time=02:00:00 +#SBATCH --ntasks 256 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=8G +#SBATCH --account=research-eemcs-st + +using Distributed +try + using SlurmClusterManager + addprocs(SlurmManager()) +catch + @info "Not running from within Slurm, proceeding without Slurm workers" +end + +@everywhere using DrWatson + +@everywhere quickactivate(pwd()) +@everywhere using Synth + +@everywhere using ProgressMeter, DataFrames, HerbSearch, GraphDynamicalSystems, Random +using MetaGraphsNext: labels +using Statistics: quantile + +traj_df = collect_results(datadir("sims", "biodivine_split")) +path2id = path -> parse_savename(path)[end-1]["id"] +traj_df.ID = path2id.(traj_df.path) + +model_df = collect_results(datadir("src_parsed", "biodivine_benchmark_as_metagraphs");) +path2id = path -> parse(Int, splitext(basename(path))[1]) +model_df.ID = path2id.(model_df.path) +model_df.vertex = collect.(labels.(model_df.metagraph_model)) +# add a copy so that after flattening we have all of the vertices of a model in each row of df +model_df.vertices = model_df.vertex + +# Filter out the largest 5% of models +# They are likely Booleanized multivalue models—have to check +n_verts_per_model = length.(model_df.vertices) +per_vertex_df = + flatten(model_df[n_verts_per_model.<=quantile(n_verts_per_model, 0.95), :], :vertex) + +grammars_df = model_df[!, [:ID, :vertices]] +grammars_df.dnf_grammar = build_dnf_grammar.(grammars_df.vertices) +grammars_df.qn_grammar = build_qn_grammar.(grammars_df.vertices) + +get_evaluator = g -> Dict([:DNF => evaluate_bn, :QN => evaluate_qn])[g] + +function get_grammar(unique, grammar_type) + s = :unknown + if grammar_type == :DNF + s = :dnf_grammar + elseif grammar_type == :QN + s = :qn_grammar + end + + return only(grammars_df[grammars_df.ID.==unique.ID, s]) +end + +function select_trajectories(df, N, id, vertex, seed) + Random.seed!(seed) + selected_trajectories = rand(only(df[df.ID.==id, :split_traj]), N) + filtered_on_vertex = + reduce(union, map(x -> get(x, vertex, Set()), selected_trajectories)) + + return filtered_on_vertex +end + +synth_params = Dict( + "seed" => 42, + "max_depth" => 7, + "unique" => collect(eachrow(per_vertex_df[!, [:ID, :vertex, :vertices]])), + "id" => Derived("unique", x -> x.ID), + "vertex_names" => Derived("unique", x -> getfield.(x.vertices, :value)), + "index_of_vertex" => Derived("unique", x -> findfirst(==(x.vertex), x.vertices)), + "vertex" => Derived("unique", x -> string(x.vertex.value)), + "n_trajectories" => collect(10:45:110), + "selected_trajectories" => Derived( + ["n_trajectories", "unique", "index_of_vertex", "seed"], + (N, unique, index_of_vertex, seed) -> + select_trajectories(traj_df, N, unique.ID, index_of_vertex, seed), + ), + "iterator_type" => [BFSIterator], + "iter_name" => Derived("iterator_type", string), + "grammar_type" => [:DNF, :QN], + "grammar" => Derived(["unique", "grammar_type"], get_grammar), + "evaluator" => Derived("grammar_type", get_evaluator), + "max_iterations" => 1_000_000, +) + +@showprogress pmap(dict_list(synth_params)) do params + # loadfile = false so we don't load all results into memory of the main process + @produce_or_load( + synth_one_vertex, + params, + datadir("exp_raw", "biodivine_search"), + loadfile = false + ) +end diff --git a/experiments/SynthBN/scripts/synth_biodivine.sh b/experiments/Synth/scripts/synth_biodivine.sh similarity index 100% rename from experiments/SynthBN/scripts/synth_biodivine.sh rename to experiments/Synth/scripts/synth_biodivine.sh diff --git a/experiments/SynthBN/scripts/synthesize_bn.jl b/experiments/Synth/scripts/synthesize_bn.jl similarity index 98% rename from experiments/SynthBN/scripts/synthesize_bn.jl rename to experiments/Synth/scripts/synthesize_bn.jl index be21f62..3f00ed3 100644 --- a/experiments/SynthBN/scripts/synthesize_bn.jl +++ b/experiments/Synth/scripts/synthesize_bn.jl @@ -1,6 +1,6 @@ using DrWatson -@quickactivate "SynthBN" +@quickactivate "Synth" using DataFrames using Herb, HerbGrammar, SoleLogics, HerbSpecification, HerbSearch diff --git a/experiments/SynthBN/src/SynthBN.jl b/experiments/Synth/src/Synth.jl similarity index 53% rename from experiments/SynthBN/src/SynthBN.jl rename to experiments/Synth/src/Synth.jl index ab7b000..9c8f65b 100644 --- a/experiments/SynthBN/src/SynthBN.jl +++ b/experiments/Synth/src/Synth.jl @@ -1,8 +1,9 @@ -module SynthBN +module Synth using DrWatson using HerbGrammar using GraphDynamicalSystems +using HerbSpecification include("parse_aeon.jl") @@ -14,7 +15,9 @@ export load_aeon_biodivine, get_biodivine_repo, bundle_biodivine_benchmark, update_functions_to_network, - convert_aeon_models_to_metagraphs + convert_aeon_models_to_metagraphs, + synth_one_biodivine, + synth_one_vertex include("grammars.jl") @@ -24,4 +27,20 @@ include("gather_bn_data.jl") export gather_bn_data, split_state_space, get_split_state_space +include("synth_process.jl") + +export synth, synth_biodivine + +include("undirected_specification.jl") + +export UndirectedExample, UndirectedProblem + +include("evaluator.jl") + +export evaluate_bn, evaluate_qn, interpret + +include("create_problem.jl") + +export examples_to_problem + end diff --git a/experiments/SynthBN/src/biodivine_benchmark.jl b/experiments/Synth/src/biodivine_benchmark.jl similarity index 56% rename from experiments/SynthBN/src/biodivine_benchmark.jl rename to experiments/Synth/src/biodivine_benchmark.jl index b705e29..eb2fd22 100644 --- a/experiments/SynthBN/src/biodivine_benchmark.jl +++ b/experiments/Synth/src/biodivine_benchmark.jl @@ -8,10 +8,14 @@ using MetaGraphsNext: MetaGraph using Graphs: SimpleDiGraph, add_edge! using SoleLogics: Atom, subformulas, Formula -using Term: Progress, ProgressBar +using ProgressMeter using TidierData +using Distributed +using Random +using Graphs: nv + function get_biodivine_repo(raw_src_dir) remote = "https://github.com/ReubenJ/biodivine-boolean-models.git" commit_hash = "f785e571308122378664d0ad4168969cb70cdcc2" @@ -41,38 +45,32 @@ function bundle_biodivine_benchmark(raw_src_dir, output_dir) end end -function load_aeon_biodivine() - repo = datadir("src_raw", "biodivine-boolean-models") - - if !ispath(repo) - include("fetch_repo.jl") - @assert ispath(repo) - end +function load_aeon_biodivine(repo, ids_to_ignore = String[]) + @assert ispath(repo) models_path = joinpath(repo, "bbm-aeon-format") summary_csv_path = joinpath(models_path, "summary.csv") - df = DataFrame(CSV.File(summary_csv_path; types = Dict([:ID => String]))) - df[!, :path] = [joinpath(models_path, id) * ".aeon" for id in df.ID] + + df = DataFrame( + CSV.File(summary_csv_path; types = Dict([:ID => String]), normalizenames = true), + ) + + # construct path column + df = transform(df, :ID => ByRow(id -> joinpath(models_path, id) * ".aeon") => :path) + @tagsave(datadir("src_parsed", "summary_biodivine_benchmark.jld2"), @strdict(df)) - pbar = ProgressBar(; columns = :detailed) - Progress.foreachprogress( - df.path, - pbar; - parallel = true, - transient = false, - description = "Loading models...", - ) do model - if basename(model) != "079.aeon" # 79 is massive and seems to cause a stackoverflow error - @produce_or_load( - @dict(model), # produce_or_load needs this to be a dict - path = datadir("src_parsed", "biodivine_benchmark"), - filename = basename(model), - ) do config - @unpack model = config - parsed_model = AEONParser.parse_aeon_file(model) - @strdict parsed_model - end + df = filter(row -> row.ID ∉ ids_to_ignore, df) + + @showprogress "Parsing AEON Files..." pmap(eachrow(df)) do model + @produce_or_load( + model, + path = datadir("src_parsed", "biodivine_benchmark"), + filename = basename(model.path), + verbose = false + ) do model + parsed_model = AEONParser.parse_aeon_file(model.path) + @strdict parsed_model end end end @@ -107,57 +105,58 @@ function update_functions_to_network( return network end -function convert_aeon_models_to_metagraphs() - excluded_files = [r"041\.aeon\.jld2", r"079\.aeon\.jld2"] - - df = collect_results!( +function convert_aeon_models_to_metagraphs(excluded_files = Regex[]) + df = collect_results( datadir("src_parsed", "biodivine_benchmark"); rexclude = excluded_files, ) # "full/path/to/001.aeon.jld2" -> "001" df.ID = map((x -> x[1]) ∘ splitext ∘ (x -> x[1]) ∘ splitext ∘ basename, df.path) - components_df = @chain df begin + gdf = @chain df begin @select parsed_model ID flatten(:parsed_model) @rename Component = parsed_model # new = old @mutate ComponentType = typeof(Component) - @group_by ComponentType - end - - just_update_functions = components_df[(ComponentType = AEONParser.UpdateFunction,)] - just_regulations = components_df[(ComponentType = AEONParser.Regulation,)] - - update_functions_by_id = @chain just_update_functions begin - @group_by ID - @select Component - end - - regulations_by_id = @chain just_regulations begin @group_by ID - @select Component end - pbar = ProgressBar(; columns = :detailed) - Progress.foreachprogress( - collect(zip(update_functions_by_id, regulations_by_id)), - pbar; - parallel = true, - transient = false, - # description = "AEON -> MetaGraph", - ) do model + @showprogress "AEON -> MetaGraph" pmap(pairs(gdf)) do (components_key, components) @produce_or_load( - @dict(model), # produce_or_load needs this to be a dict + components, path = datadir("src_parsed", "biodivine_benchmark_as_metagraphs"), - filename = model[1].ID[1], - ) do config - @unpack model = config - (update_functions, regulations) = model + filename = components_key.ID + ) do components metagraph_model = update_functions_to_network( - Vector{AEONParser.UpdateFunction}(update_functions.Component), - Vector{AEONParser.Regulation}(regulations.Component), + Vector{AEONParser.UpdateFunction}( + components[ + components.ComponentType.==AEONParser.UpdateFunction, + :, + ].Component, + ), + Vector{AEONParser.Regulation}( + components[ + components.ComponentType.==AEONParser.Regulation, + :, + ].Component, + ), ) @strdict metagraph_model end end end + +function synth_one_vertex(params::AbstractDict{String,Any}) + @unpack vertex, selected_trajectories = params + problem = examples_to_problem(vertex, selected_trajectories) + + @unpack max_depth, iterator_type, max_iterations, grammar, evaluator, vertex_names = + params + iterator = iterator_type(grammar, :Start, max_depth = max_depth) + exprs_and_scores = + synth_biodivine(problem, iterator, grammar, max_iterations, evaluator, vertex_names) + + # Save output + params["exprs_and_scores"] = exprs_and_scores + return params +end diff --git a/experiments/Synth/src/create_problem.jl b/experiments/Synth/src/create_problem.jl new file mode 100644 index 0000000..4592a22 --- /dev/null +++ b/experiments/Synth/src/create_problem.jl @@ -0,0 +1,9 @@ +function _e2p(n, e) + _pair_to_undirected(p) = UndirectedExample(Dict(:state => p[1]), Dict(:state => p[2])) + + return UndirectedProblem(n, _pair_to_undirected.(e)) +end + +examples_to_problem(node::Integer, examples::AbstractSet) = _e2p(string(node), examples) +examples_to_problem(node::Atom, examples) = _e2p(node.value, examples) +examples_to_problem(node::AbstractString, examples) = _e2p(node, examples) diff --git a/experiments/Synth/src/evaluator.jl b/experiments/Synth/src/evaluator.jl new file mode 100644 index 0000000..1ea19e4 --- /dev/null +++ b/experiments/Synth/src/evaluator.jl @@ -0,0 +1,100 @@ +using MLStyle: @match +using SoleLogics +import SoleLogics.interpret + +function interpret(φ::Expr, i::SoleLogics.AbstractInterpretation, args...; kwargs...) + syntax_branch = @match φ begin + Expr(:call, :Atom, val) => interpret(Atom(val), i, args...; kwargs...) + Expr(:call, :∨, children...) => interpret( + SyntaxBranch(∨, [interpret(ch, i, args...; kwargs...) for ch in children]...), + i, + args...; + kwargs..., + ) + Expr(:call, :∧, children...) => interpret( + SyntaxBranch(∧, [interpret(ch, i, args...; kwargs...) for ch in children]...), + i, + args...; + kwargs..., + ) + Expr(:call, :¬, child) => interpret( + SyntaxBranch(¬, interpret(child, i, args...; kwargs...)), + i, + args...; + kwargs..., + ) + _ => error("missing a match for $φ") + end + + return interpret(syntax_branch, i, args...; kwargs...) +end + +function interpret( + e::Union{AbstractString,Integer,Expr}, + qn_state::AbstractVector{<:Integer}, + vertex_names::AbstractVector{<:AbstractString}, +) + state_map = Dict(zip(vertex_names, deepcopy(qn_state))) + + _int(e) = @match e begin + ::AbstractString => state_map[e] + ::Integer => e + :($v1 + $v2) => _int(v1) + _int(v2) + :($v1 - $v2) => _int(v1) - _int(v2) + :($v1 / $v2) => _int(v1) / _int(v2) + :($v1 * $v2) => _int(v1) * _int(v2) + :(Min($v1, $v2)) => min(_int(v1), _int(v2)) + :(Max($v1, $v2)) => max(_int(v1), _int(v2)) + :(Ceil($v)) => ceil(_int(v)) + :(Floor($v)) => floor(_int(v)) + _ => error("Unhandled Expr in `interpret`: $e, $(typeof(e))") + end + + return _int(e) +end + +function evaluate_bn(problem::UndirectedProblem, expr, vertex_names) + sat_examples = BitVector[] + + function _eval_1_dir(in, out) + truth = TruthDict(Dict(zip(vertex_names, in[:state]))) + res = interpret(expr, truth) + expected = BooleanTruth(out[:state][findfirst(==(problem.name), vertex_names)]) + success = expected == res + + return success + end + + for example ∈ problem.examples + success_direction1 = _eval_1_dir(example.data1, example.data2) + success_direction2 = _eval_1_dir(example.data2, example.data1) + + success = BitVector([success_direction1, success_direction2]) + + push!(sat_examples, success) + end + + return sat_examples +end + +function evaluate_qn(problem::UndirectedProblem, expr, vertex_names) + sat_examples = BitVector[] + + function _eval_1_dir(in, out) + res = interpret(expr, in[:state], vertex_names) + expected = out[:state][findfirst(==(problem.name), vertex_names)] + success = expected == res + return success + end + + for example ∈ problem.examples + success_direction1 = _eval_1_dir(example.data1, example.data2) + success_direction2 = _eval_1_dir(example.data2, example.data1) + + success = BitVector([success_direction1, success_direction2]) + + push!(sat_examples, success) + end + + return sat_examples +end diff --git a/experiments/SynthBN/src/gather_bn_data.jl b/experiments/Synth/src/gather_bn_data.jl similarity index 75% rename from experiments/SynthBN/src/gather_bn_data.jl rename to experiments/Synth/src/gather_bn_data.jl index 3da5a65..a0e1cb2 100644 --- a/experiments/SynthBN/src/gather_bn_data.jl +++ b/experiments/Synth/src/gather_bn_data.jl @@ -7,7 +7,8 @@ end function split_state_space(trajectory::StateSpaceSet) # split into pairs of input (all values) and output (changed value) - input_output_pairs_per_node = Dict{Int,Set{Tuple{Vector{Int},Int}}}() + # + input_output_pairs_per_node = Dict{Int,Set{Tuple{Vector{Int},Vector{Int}}}}() for i = 1:length(trajectory)-1 changed = findfirst(trajectory[i+1] .!= trajectory[i]) # only proceed if there was a change @@ -15,22 +16,15 @@ function split_state_space(trajectory::StateSpaceSet) # in real data we don't know the direction of the transition # was it from i -> i+1 or i+1 -> i, we only know that two - # states are adjacent, so for gathering data, we add both - # directions as IO pairs - # 1. state `i` and the new value of the single variable in - # the state that changed - # 2. state `i+1` and the previous value of the single variable - # in the state that changed + # states are adjacent, so for synthesis, we want to add the pair + # of i and i+1, and test possible programs on both. - new_value = trajectory[i+1][changed] - old_value = trajectory[i][changed] - existing_pairs = - get(input_output_pairs_per_node, changed, Set{Tuple{Vector{Int},Int}}()) - push!( - existing_pairs, - (trajectory[i], new_value), # 1 - (trajectory[i+1], old_value), # 2 + existing_pairs = get( + input_output_pairs_per_node, + changed, + Set{Tuple{Vector{Int},Vector{Int}}}(), ) + push!(existing_pairs, (trajectory[i], trajectory[i+1])) input_output_pairs_per_node[changed] = existing_pairs end end diff --git a/experiments/SynthBN/src/grammars.jl b/experiments/Synth/src/grammars.jl similarity index 62% rename from experiments/SynthBN/src/grammars.jl rename to experiments/Synth/src/grammars.jl index 05e2b4a..7d5d714 100644 --- a/experiments/SynthBN/src/grammars.jl +++ b/experiments/Synth/src/grammars.jl @@ -23,12 +23,21 @@ disjunctive = @cfgrammar begin Lit = ¬Var end -function _add_variables(grammar, num_vars::Int) - for i = 1:num_vars +function _add_variables(grammar, vars::AbstractVector{<:Union{<:AbstractString,<:Atom}}) + for i in vars add_rule!(grammar, :(Var = Atom($i))) end end +function _add_variables(grammar, vars::AbstractVector{<:Integer}) + for i in vars + add_rule!(grammar, :(Var = Atom($(string(i))))) + end +end + +_add_variables(grammar, num_vars::Int) = + _add_variables(grammar, string.(collect(1:num_vars))) + function build_cnf_grammar(num_vars::Int) grammar = deepcopy(conjunctive) _add_variables(grammar, num_vars) @@ -36,6 +45,13 @@ function build_cnf_grammar(num_vars::Int) return grammar end +function build_cnf_grammar(vars::AbstractVector) + grammar = deepcopy(conjunctive) + _add_variables(grammar, vars) + + return grammar +end + function build_dnf_grammar(num_vars::Int) grammar = deepcopy(disjunctive) _add_variables(grammar, num_vars) @@ -43,6 +59,13 @@ function build_dnf_grammar(num_vars::Int) return grammar end +function build_dnf_grammar(vars::AbstractVector) + grammar = deepcopy(disjunctive) + _add_variables(grammar, vars) + + return grammar +end + function count_neighbors_in_expr(r::AbstractRuleNode, grammar::ContextSensitiveGrammar) leaves_in_expr = Set(map(x -> get_rule(x), Leaves(r))) terminal_indices = findall(grammar.isterminal) diff --git a/experiments/SynthBN/src/parse_aeon.jl b/experiments/Synth/src/parse_aeon.jl similarity index 100% rename from experiments/SynthBN/src/parse_aeon.jl rename to experiments/Synth/src/parse_aeon.jl diff --git a/experiments/Synth/src/synth_process.jl b/experiments/Synth/src/synth_process.jl new file mode 100644 index 0000000..38112b5 --- /dev/null +++ b/experiments/Synth/src/synth_process.jl @@ -0,0 +1,40 @@ +function synth_biodivine( + problem, + iterator, + grammar, + max_iterations, + evaluator, + vertex_names, +) + exprs_and_scores = [] + + for (i, ex) in enumerate(iterator) + if i % 100000 == 0 + @info "$i iterations, problem $(problem.name)" + end + + expr = rulenode2expr(ex, grammar) + + sat_examples = nothing + try + sat_examples = evaluator(problem, expr, vertex_names) + catch + @error "Problem evaluating: Problem name $(problem.name), expr: $expr, i: $i." + end + + if isnothing(sat_examples) + push!(exprs_and_scores, (expr, nothing, nothing, i)) + # if all examples worked in at least one direction + elseif sum(all.(==(false), sat_examples)) == 0 + score = sum(count.(sat_examples)) / (2 * length(problem.examples)) + push!(exprs_and_scores, (expr, score, sat_examples, i)) + end + + if i > max_iterations + @warn "Maximum iterations reached" + break + end + end + + return exprs_and_scores +end diff --git a/experiments/Synth/src/undirected_specification.jl b/experiments/Synth/src/undirected_specification.jl new file mode 100644 index 0000000..6b64133 --- /dev/null +++ b/experiments/Synth/src/undirected_specification.jl @@ -0,0 +1,28 @@ +using HerbSpecification +using DocStringExtensions + +""" + $(TYPEDEF) + +Specification where it is not known whether f(data1) == data2 or f(data2) == data1. + +$(TYPEDFIELDS) +""" +struct UndirectedExample + "Either the input or output for this example." + data1::Dict{Symbol,Any} + "If data1 is the input, this field is the output, and vice-versa." + data2::Dict{Symbol,Any} +end + +""" + $(TYPEDEF) + +Problem defined over `UndirectedExample`s. + +$(TYPEDFIELDS) +""" +struct UndirectedProblem + name::AbstractString + examples::AbstractVector{UndirectedExample} +end diff --git a/experiments/SynthBN/test/001.aeon b/experiments/Synth/test/001.aeon similarity index 100% rename from experiments/SynthBN/test/001.aeon rename to experiments/Synth/test/001.aeon diff --git a/experiments/SynthBN/test/007.aeon b/experiments/Synth/test/007.aeon similarity index 100% rename from experiments/SynthBN/test/007.aeon rename to experiments/Synth/test/007.aeon diff --git a/experiments/SynthBN/test/ex_model.jld2 b/experiments/Synth/test/ex_model.jld2 similarity index 100% rename from experiments/SynthBN/test/ex_model.jld2 rename to experiments/Synth/test/ex_model.jld2 diff --git a/experiments/SynthBN/test/runtests.jl b/experiments/Synth/test/runtests.jl similarity index 55% rename from experiments/SynthBN/test/runtests.jl rename to experiments/Synth/test/runtests.jl index 1e74cb1..86fe3ea 100644 --- a/experiments/SynthBN/test/runtests.jl +++ b/experiments/Synth/test/runtests.jl @@ -1,5 +1,5 @@ using DrWatson, Test -@quickactivate :SynthBN +@quickactivate :Synth using HerbGrammar, HerbConstraints using GraphDynamicalSystems: BooleanNetworks @@ -12,14 +12,14 @@ ti = time() testdir = (x...) -> projectdir("test", x...) -@testset "SynthBN tests" begin - # @testset "Sample Trajectories" begin - # @unpack model = load(joinpath(@__DIR__, "ex_model.jld2")) - # async_bn = BooleanNetworks.abn(model.graph) - # @test !isnothing(gather_bn_data(async_bn, 1)) - # end +@testset "Synth tests" begin + @testset "Sample Trajectories" begin + @unpack model = load(joinpath(@__DIR__, "ex_model.jld2")) + async_bn = BooleanNetworks.abn(model.graph) + @test !isnothing(gather_bn_data(async_bn, 1)) + end - # include(testdir("test_neighbor_counting.jl")) + include(testdir("test_neighbor_counting.jl")) include(testdir("test_biodivine_pipeline.jl")) end diff --git a/experiments/SynthBN/test/test_biodivine_pipeline.jl b/experiments/Synth/test/test_biodivine_pipeline.jl similarity index 100% rename from experiments/SynthBN/test/test_biodivine_pipeline.jl rename to experiments/Synth/test/test_biodivine_pipeline.jl diff --git a/experiments/SynthBN/test/test_neighbor_counting.jl b/experiments/Synth/test/test_neighbor_counting.jl similarity index 100% rename from experiments/SynthBN/test/test_neighbor_counting.jl rename to experiments/Synth/test/test_neighbor_counting.jl diff --git a/experiments/SynthBN/test/test_state_division.jl b/experiments/Synth/test/test_state_division.jl similarity index 100% rename from experiments/SynthBN/test/test_state_division.jl rename to experiments/Synth/test/test_state_division.jl diff --git a/experiments/SynthBN/devbox.json b/experiments/SynthBN/devbox.json deleted file mode 100644 index 1d6f48e..0000000 --- a/experiments/SynthBN/devbox.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.10.7/.schema/devbox.schema.json", - "packages": ["julia-bin@1.10.2"], - "shell": { - "init_hook": ["echo 'Welcome to devbox!' > /dev/null"], - "scripts": { - "test": ["echo \"Error: no test specified\" && exit 1"] - } - } -} diff --git a/experiments/SynthBN/devbox.lock b/experiments/SynthBN/devbox.lock deleted file mode 100644 index 5f40845..0000000 --- a/experiments/SynthBN/devbox.lock +++ /dev/null @@ -1,53 +0,0 @@ -{ - "lockfile_version": "1", - "packages": { - "julia-bin@1.10.2": { - "last_modified": "2024-05-03T15:42:32Z", - "resolved": "github:NixOS/nixpkgs/5fd8536a9a5932d4ae8de52b7dc08d92041237fc#julia-bin", - "source": "devbox-search", - "version": "1.10.2", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/1f6bj0krcl5c1yi24mlr42jp0j85b3ca-julia-bin-1.10.2", - "default": true - } - ], - "store_path": "/nix/store/1f6bj0krcl5c1yi24mlr42jp0j85b3ca-julia-bin-1.10.2" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/q4sbir6aj7wb1mwp9mk3iix78br7c9cc-julia-bin-1.10.2", - "default": true - } - ], - "store_path": "/nix/store/q4sbir6aj7wb1mwp9mk3iix78br7c9cc-julia-bin-1.10.2" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/b0gs6cp0wb3gw60pfrsyx9x9x7gzxssp-julia-bin-1.10.2", - "default": true - } - ], - "store_path": "/nix/store/b0gs6cp0wb3gw60pfrsyx9x9x7gzxssp-julia-bin-1.10.2" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/nmfj6saliahdp6id9j51qaqjrwwaj30r-julia-bin-1.10.2", - "default": true - } - ], - "store_path": "/nix/store/nmfj6saliahdp6id9j51qaqjrwwaj30r-julia-bin-1.10.2" - } - } - } - } -} diff --git a/experiments/SynthBN/scripts/generate_state_spaces.jl b/experiments/SynthBN/scripts/generate_state_spaces.jl deleted file mode 100644 index e36cc29..0000000 --- a/experiments/SynthBN/scripts/generate_state_spaces.jl +++ /dev/null @@ -1,22 +0,0 @@ -using DrWatson - -@quickactivate "SynthBN" - -using DataFrames -using Herb, HerbGrammar, SoleLogics, HerbSpecification, HerbSearch - -include(srcdir("gather_bn_data.jl")) -include(srcdir("grammars.jl")) - -param_setup = Dict( - "network_size" => 10, - "max_equation_depth" => 3, - "iterations" => 1000, - "repetitions" => 10, - "seed" => collect(0:9), -) -all_params = dict_list(param_setup) - -for params in all_params - @produce_or_load(get_split_state_space, params, datadir("sims", "specs")) -end diff --git a/experiments/SynthBN/scripts/get_benchmark.sh b/experiments/SynthBN/scripts/get_benchmark.sh deleted file mode 100644 index dab9a6f..0000000 --- a/experiments/SynthBN/scripts/get_benchmark.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# -#SBATCH --job-name="Get Biodivine Benchmark" -#SBATCH --partition=compute -#SBATCH --time=02:00:00 -#SBATCH --cpus-per-task=1 -#SBATCH --mem-per-cpu=8G -#SBATCH --account=innovation - -srun julia --project=. scripts/get_biodivine_benchmark.jl diff --git a/experiments/SynthBN/scripts/get_biodivine_benchmark.jl b/experiments/SynthBN/scripts/get_biodivine_benchmark.jl deleted file mode 100644 index fe9ac48..0000000 --- a/experiments/SynthBN/scripts/get_biodivine_benchmark.jl +++ /dev/null @@ -1,22 +0,0 @@ -using DrWatson - -@quickactivate :SynthBN - - -@info "Cloning the biodivine benchmark repository" -raw_src_dir = datadir("src_raw", "biodivine-boolean-models") -if !isdir(raw_src_dir) - get_biodivine_repo(raw_src_dir) -end - -@info "Bundling the benchmark to .aeon format" -aeon_bundle_dir = joinpath(raw_src_dir, "bbm-aeon-format") -if !isdir(aeon_bundle_dir) - bundle_biodivine_benchmark(raw_src_dir, aeon_bundle_dir) -end - -@info "Parsing .aeon model files" -load_aeon_biodivine() - -@info "Converting to MetaGraph-based models" -convert_aeon_models_to_metagraphs() diff --git a/experiments/SynthBN/scripts/intro.jl b/experiments/SynthBN/scripts/intro.jl deleted file mode 100644 index b2eedbb..0000000 --- a/experiments/SynthBN/scripts/intro.jl +++ /dev/null @@ -1,17 +0,0 @@ -using DrWatson -@quickactivate "SynthBN" - -# Here you may include files from the source directory -include(srcdir("dummy_src_file.jl")) - -println(""" - Currently active project is: $(projectname()) - - Path of active project: $(projectdir()) - - Have fun with your new project! - - You can help us improve DrWatson by opening - issues on GitHub, submitting feature requests, - or even opening your own Pull Requests! - """) diff --git a/experiments/SynthBN/scripts/make_zip.sh b/experiments/SynthBN/scripts/make_zip.sh deleted file mode 100644 index 0682507..0000000 --- a/experiments/SynthBN/scripts/make_zip.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -#SBATCH --job-name=makezip -#SBATCH --partition=compute -#SBATCH --time=02:00:00 -#SBATCH --ntasks=1 -#SBATCH --cpus-per-task=1 -#SBATCH --mem-per-cpu=4G -#SBATCH --account=innovation - -# Load modules: -module load 2024r1 - -zip -r /scratch/rjgardosreid/traj_backup.zip data/sims/biodivine_trajectories/ diff --git a/experiments/SynthBN/scripts/make_zip_synth_results.sh b/experiments/SynthBN/scripts/make_zip_synth_results.sh deleted file mode 100644 index 7e6958e..0000000 --- a/experiments/SynthBN/scripts/make_zip_synth_results.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -#SBATCH --job-name=makezip -#SBATCH --partition=compute -#SBATCH --time=01:00:00 -#SBATCH --ntasks=1 -#SBATCH --cpus-per-task=1 -#SBATCH --mem-per-cpu=4G -#SBATCH --account=innovation - -# Load modules: -module load 2024r1 - -zip -r /scratch/rjgardosreid/synth_results.zip data/exp_raw/biodivine_search/ diff --git a/experiments/SynthBN/scripts/sample_trajectories.sh b/experiments/SynthBN/scripts/sample_trajectories.sh deleted file mode 100644 index d1eedc4..0000000 --- a/experiments/SynthBN/scripts/sample_trajectories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# -#SBATCH --job-name="Sample Trajectories" -#SBATCH --partition=compute -#SBATCH --time=02:00:00 -#SBATCH --cpus-per-task=1 -#SBATCH --mem-per-cpu=8G -#SBATCH --account=innovation - -srun julia --project=. scripts/sample_trajectories_biodivine.jl diff --git a/experiments/SynthBN/scripts/sample_trajectories_biodivine.jl b/experiments/SynthBN/scripts/sample_trajectories_biodivine.jl deleted file mode 100644 index 2503334..0000000 --- a/experiments/SynthBN/scripts/sample_trajectories_biodivine.jl +++ /dev/null @@ -1,34 +0,0 @@ -using DrWatson - -@quickactivate :SynthBN - -using DataFrames -using GraphDynamicalSystems: BooleanNetworks -using Term: Progress, ProgressBar -using MetaGraphsNext - -mg_df = collect_results!(datadir("src_parsed", "biodivine_benchmark_as_metagraphs")) -mg_df[!, :ID] = ((x -> x[1]) ∘ splitext ∘ basename).(mg_df.path) -mg_df_by_id = groupby(mg_df, :ID) - -param_setup = Dict("id" => mg_df.ID, "n_trajectories" => 1000, "iterations" => 1000) -all_params = dict_list(param_setup) - -pbar = ProgressBar(; columns = :detailed) -Progress.foreachprogress( - all_params, - pbar; - parallel = true, - # description = "Collecting trajectories", -) do params - @produce_or_load(params, path = datadir("sims", "biodivine_trajectories"),) do params - @unpack id, n_trajectories, iterations = params - bn = mg_df_by_id[(id,)].metagraph_model[1] - trajectories = [] - for traj_i = 1:n_trajectories - async_bn = BooleanNetworks.abn(bn; seed = traj_i) - push!(trajectories, gather_bn_data(async_bn, iterations)) - end - @strdict trajectories - end -end diff --git a/experiments/SynthBN/scripts/split_biodivine.sh b/experiments/SynthBN/scripts/split_biodivine.sh deleted file mode 100644 index e96b771..0000000 --- a/experiments/SynthBN/scripts/split_biodivine.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -#SBATCH --job-name="Splitting Trajectories" -#SBATCH --partition=compute -#SBATCH --time=02:00:00 -#SBATCH --cpus-per-task=1 -#SBATCH --mem-per-cpu=8G -#SBATCH --account=innovation - -module load 2024r1 julia - -srun julia --project=. scripts/split_biodivine_trajectories.jl > splitting_trajectories.log diff --git a/experiments/SynthBN/scripts/split_biodivine_trajectories.jl b/experiments/SynthBN/scripts/split_biodivine_trajectories.jl deleted file mode 100644 index 643a056..0000000 --- a/experiments/SynthBN/scripts/split_biodivine_trajectories.jl +++ /dev/null @@ -1,33 +0,0 @@ -""" -Takes the biodivine trajectories and divides them into i/o pairs for synthesis -""" - -using DrWatson - -@quickactivate :SynthBN - -using JLD2 - -trajectories_dir = datadir("sims", "biodivine_trajectories") -split_trajectories_dir = datadir("sims", "biodivine_split") - -for traj_file in readdir(datadir("sims", "biodivine_trajectories")) - traj_path = joinpath(trajectories_dir, traj_file) - split_path = joinpath(split_trajectories_dir, traj_file) - - if !isfile(split_path) - @info "Splitting $traj_file..." - traj_file_contents = load(traj_path) - if "trajectories" in keys(traj_file_contents) - trajectories = traj_file_contents["trajectories"] # also includes git tag, etc. - - split_traj = split_state_space.(trajectories) - @tagsave(split_path, @strdict split_traj) - else - @info "No trajectory found for $traj_file" - end - - else - @info "$split_path already exists" - end -end diff --git a/experiments/SynthBN/scripts/synth_biodivine.jl b/experiments/SynthBN/scripts/synth_biodivine.jl deleted file mode 100644 index 7778d0f..0000000 --- a/experiments/SynthBN/scripts/synth_biodivine.jl +++ /dev/null @@ -1,84 +0,0 @@ -using DrWatson - -@quickactivate :SynthBN - -using DataFrames -using Herb, HerbGrammar, SoleLogics, HerbSpecification, HerbSearch -using Random -using Graphs: nv - -include(srcdir("grammars.jl")) -include(srcdir("synth_process.jl")) -include(srcdir("evaluator.jl")) -include(srcdir("create_problem.jl")) - - -res = collect_results(datadir("sims", "biodivine_split");) -res.ID = ((x -> x[end-1]["id"]) ∘ parse_savename).(res.path) -rename!(res, :path => "Trajectory Path") -mg_df = collect_results(datadir("src_parsed", "biodivine_benchmark_as_metagraphs");) -mg_df.ID = ((x -> parse(Int, x)) ∘ (x -> x[1]) ∘ splitext ∘ basename).(mg_df.path) -rename!(mg_df, :path => "Model Path") - -res = innerjoin(res, mg_df, on = :ID) - -synth_params = Dict( - "seed" => 42, - "max_depth" => 6, - "id" => res.ID, - "n_trajectories" => collect(10:20:110), - "iterator_type" => [BFSIterator], - "grammar_builder" => [build_dnf_grammar], - "max_iterations" => 1_000_000, -) - -function synth_one_vertex(save_data) - @unpack vertex, examples = save_data - problem = examples_to_problem(vertex, examples) - - @unpack max_depth, iterator_type, max_iterations, grammar = save_data - iterator = iterator_type(grammar, :Start, max_depth = max_depth) - exprs_and_scores = synth_biodivine(problem, iterator, grammar, max_iterations) - - # Save output - save_data["exprs_and_scores"] = exprs_and_scores - return save_data -end - -function synth_one_biodivine(outer_params::AbstractDict{String,Any}, res::DataFrame) - params = deepcopy(outer_params) - @unpack seed = params - Random.seed!(seed) - - @unpack n_trajectories, id = params - selected_trajs = rand(only(res[res.ID.==id, :split_traj]), n_trajectories) - - merged_selected_trajs = reduce(mergewith(union), selected_trajs) - - @unpack id, grammar_builder = params - @info "Synthsizing for model $id with $n_trajectories traj." - - model = only(res[res.ID.==id, :metagraph_model]) - grammar = grammar_builder(nv(model)) - - for (vertex, examples) ∈ merged_selected_trajs - @info "Synthesizing model $id, node $vertex, $n_trajectories traj." - save_data = deepcopy(params) - delete!(save_data, "specifications") - save_data["grammar"] = grammar - save_data["vertex"] = vertex - save_data["examples"] = examples - file_name = savename(save_data) - @produce_or_load( - synth_one_vertex, - save_data, - datadir("exp_raw", "biodivine_search"); - filename = file_name - ) - @info "Completed synthesis for model $id, node $vertex, $n_trajectories traj." - end -end - -Threads.@threads for params in dict_list(synth_params) - synth_one_biodivine(params, res) -end diff --git a/experiments/SynthBN/src/create_problem.jl b/experiments/SynthBN/src/create_problem.jl deleted file mode 100644 index fcfa5ce..0000000 --- a/experiments/SynthBN/src/create_problem.jl +++ /dev/null @@ -1,7 +0,0 @@ -function examples_to_problem(node, examples) - io_examples = - map(((in, out),) -> IOExample(Dict([:state => in]), out), collect(examples)) - problem = Problem("$node", io_examples) - - return problem -end diff --git a/experiments/SynthBN/src/evaluator.jl b/experiments/SynthBN/src/evaluator.jl deleted file mode 100644 index d45c252..0000000 --- a/experiments/SynthBN/src/evaluator.jl +++ /dev/null @@ -1,42 +0,0 @@ -using MLStyle: @match -using SoleLogics -import SoleLogics.interpret - -function interpret(φ::Expr, i::SoleLogics.AbstractInterpretation, args...; kwargs...) - syntax_branch = @match φ begin - Expr(:call, :Atom, val) => interpret(Atom(val), i, args...; kwargs...) - Expr(:call, :∨, children...) => interpret( - SyntaxBranch(∨, [interpret(ch, i, args...; kwargs...) for ch in children]...), - i, - args...; - kwargs..., - ) - Expr(:call, :∧, children...) => interpret( - SyntaxBranch(∧, [interpret(ch, i, args...; kwargs...) for ch in children]...), - i, - args...; - kwargs..., - ) - Expr(:call, :¬, child) => interpret( - SyntaxBranch(¬, interpret(child, i, args...; kwargs...)), - i, - args...; - kwargs..., - ) - _ => error("missing a match for $φ") - end - - return interpret(syntax_branch, i, args...; kwargs...) -end - -function evaluate_bn(problem, expr) - sat_examples = 0 - - for example ∈ problem.spec - truth = TruthDict(Dict(enumerate(example.in[:state]))) - res = interpret(expr, truth) - sat_examples += res.flag == example.out - end - - return sat_examples / length(problem.spec) -end diff --git a/experiments/SynthBN/src/synth_process.jl b/experiments/SynthBN/src/synth_process.jl deleted file mode 100644 index 7e9e874..0000000 --- a/experiments/SynthBN/src/synth_process.jl +++ /dev/null @@ -1,58 +0,0 @@ -function synth(problem, iterator, grammar, max_neighbors, max_iterations) - exprs_and_scores = [] - - largest_n_neighbors_explored = 0 - - for (i, ex) in enumerate(iterator) - if i % 1000 == 0 - @info "$i iterations, up to $largest_n_neighbors_explored neighbors explored" - end - - n_neighbors = count_neighbors_in_expr(ex, grammar) - - if n_neighbors > largest_n_neighbors_explored - largest_n_neighbors_explored = n_neighbors - end - - if n_neighbors > max_neighbors - @info "Explored up to $max_neighbors neighbors" - break - end - - expr = rulenode2expr(ex, grammar) - - score = evaluate_bn(problem, expr) - - push!(exprs_and_scores, (eval(expr), score)) - - if i > max_iterations - @warn "Maximum iterations reached" - break - end - end - - return exprs_and_scores -end - -function synth_biodivine(problem, iterator, grammar, max_iterations) - exprs_and_scores = [] - - for (i, ex) in enumerate(iterator) - if i % 1000 == 0 - @info "$i iterations, problem $(problem.name)" - end - - expr = rulenode2expr(ex, grammar) - - score = evaluate_bn(problem, expr) - - push!(exprs_and_scores, (eval(expr), score)) - - if i > max_iterations - @warn "Maximum iterations reached" - break - end - end - - return exprs_and_scores -end diff --git a/src/GraphDynamicalSystems.jl b/src/GraphDynamicalSystems.jl index a486dba..5c7d84c 100644 --- a/src/GraphDynamicalSystems.jl +++ b/src/GraphDynamicalSystems.jl @@ -1,27 +1,24 @@ module GraphDynamicalSystems -using SoleLogics -using MetaGraphsNext +using DocStringExtensions using DynamicalSystems +using MetaGraphsNext +using SoleLogics -include("BooleanNetworks.jl") +include("boolean_networks.jl") export BooleanNetworks -# """ -# gds(bn::MetaGraph) - -# Creates a [graph dynamical system](https://en.wikipedia.org/wiki/Graph_dynamical_system). -# The structure of the system is defined by the given `graph`, the initial state by the `state` vector, -# the vertex functions by the `vertex_functions` dictionary, and the update scheme by the `update_scheme` - -# """ -# function gds(graph::SimpleDiGraph, state, vertex_functions, update_scheme) -# return ArbitrarySteppable( -# model, -# step!, -# ) - -# end +include("qualitative_networks.jl") +export QualitativeNetwork, + QN, + build_qn_grammar, + update_functions_to_network, + sample_qualitative_network, + max_level, + components, + target_functions, + interpret, + aqn end diff --git a/src/BooleanNetworks.jl b/src/boolean_networks.jl similarity index 75% rename from src/BooleanNetworks.jl rename to src/boolean_networks.jl index ae34493..11b48dd 100644 --- a/src/BooleanNetworks.jl +++ b/src/boolean_networks.jl @@ -1,5 +1,10 @@ +""" + +$(EXPORTS) +""" module BooleanNetworks +using DocStringExtensions using MetaGraphsNext: MetaGraph, add_edge!, SimpleDiGraph, nv, labels using DynamicalSystems: ArbitrarySteppable using SoleLogics: @@ -20,7 +25,7 @@ using Random: seed! using FileIO: load """ - sample_boolean_network(n::Int) + $(TYPEDSIGNATURES) Return a random Boolean network with `n` nodes. """ @@ -35,6 +40,9 @@ function sample_boolean_network(n::Int, depth::Int = 2, seed::Int = 0; tactic = return bn end +""" + $(TYPEDSIGNATURES) +""" function update_functions_to_network(update_functions::AbstractVector{<:Formula}) network = MetaGraph(SimpleDiGraph(); label_type = Int, vertex_data_type = Formula) @@ -53,15 +61,32 @@ function update_functions_to_network(update_functions::AbstractVector{<:Formula} return network end +""" + $(TYPEDEF) + +$(FIELDS) +""" mutable struct BooleanNetwork + "The structure and update functions of the network" graph::MetaGraph + "The state of the network" state::AbstractVector{Int} end +""" + $(TYPEDSIGNATURES) +""" function truth_dict_from_state(state::AbstractVector{Int}, labels::AbstractVector) return TruthDict(Dict(l => s for (l, s) in zip(labels, state))) end +""" + $(TYPEDSIGNATURES) + +Update step for an asynchronous Boolean network (see [`abn`](@ref)). At each step, +It selects a node in the network and applies its update function, updating +the state for the selected node with the update function's output. +""" function abn_step!(model::BooleanNetwork) vertex_labels = collect(labels(model.graph)) i = rand(vertex_labels) @@ -74,18 +99,15 @@ end extract_state(model::BooleanNetwork) = model.state extract_parameters(model::BooleanNetwork) = model.graph - -function reset_model!(model::BooleanNetwork, u, _) - model.state .= u -end +reset_model!(model::BooleanNetwork, u, _) = model.state .= u """ - abn(network, initial_state) + $(TYPEDSIGNATURES) Create an asynchronous Boolean network (ABN) with the given `network`, -`initial_state`. The update scheme for an asynchronous Boolean network +`initial_state`. The update step for an asynchronous Boolean network is to choose a random node and update its state, one node at a time. -The random choice is uniform over all nodes. +The random choice is uniform over all nodes. See [`abn_step!`](@ref). """ function abn(network::MetaGraph, initial_state::AbstractVector{Int}) model = BooleanNetwork(network, initial_state) @@ -100,6 +122,11 @@ function abn(network::MetaGraph, initial_state::AbstractVector{Int}) ) end +""" + $(TYPEDSIGNATURES) + +Create an asynchronous Boolean network with a random initial state. +""" function abn(network::MetaGraph; seed::Int = 42) n = nv(network) seed!(seed) diff --git a/src/qualitative_networks.jl b/src/qualitative_networks.jl new file mode 100644 index 0000000..799a18c --- /dev/null +++ b/src/qualitative_networks.jl @@ -0,0 +1,310 @@ +import DynamicalSystems: get_state, set_state! + +using AbstractTrees: Leaves +using HerbCore: AbstractGrammar, RuleNode, get_rule +using HerbGrammar: add_rule!, rulenode2expr, @csgrammar +using HerbConstraints: addconstraint!, DomainRuleNode, VarNode, Ordered, Forbidden +using HerbSearch +using MLStyle: @match +using MetaGraphsNext: MetaGraph, SimpleDiGraph, add_edge!, nv + +base_qn_grammar = @csgrammar begin + Val = Val + Val + Val = Val - Val + Val = Val / Val + Val = Val * Val + Val = Min(Val, Val) + Val = Max(Val, Val) + Val = Ceil(Val) + Val = Floor(Val) +end + +default_qn_constants = [2] + +""" + $(TYPEDSIGNATURES) +""" +function build_qn_grammar( + entity_names::AbstractVector, + constants::AbstractVector{<:Integer}, +) + g = deepcopy(base_qn_grammar) + + for e in entity_names + add_rule!(g, :(Val = $e)) + end + + for c in constants + add_rule!(g, :(Val = $c)) + end + + add_rule!(g, :(Start = Val)) + + # +, *, min, max, are all commutative + template_tree = DomainRuleNode( + BitVector([ + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + zeros(Int, length(entity_names) + length(constants))..., + ]), + [VarNode(:a), VarNode(:b)], + ) + order = [:a, :b] + + addconstraint!(g, Ordered(template_tree, order)) + + # Forbid same arguments for 2-argument functions + template_tree = DomainRuleNode( + BitVector([ + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + zeros(Int, length(entity_names) + length(constants))..., + ]), + [VarNode(:a), VarNode(:a)], + ) + + addconstraint!(g, Forbidden(template_tree)) + + return g +end + +build_qn_grammar(entity_names) = build_qn_grammar(entity_names, default_qn_constants) + +""" + $(TYPEDSIGNATURES) +""" +function update_functions_to_network( + update_functions::AbstractDict{Symbol,Union{Symbol,Expr,Int}}, + grammar::AbstractGrammar, +) + network = MetaGraph( + SimpleDiGraph(); + label_type = Symbol, + vertex_data_type = Union{Symbol,Expr,Int}, + graph_data = grammar, + ) + + for (e, f) in update_functions + network[e] = f + end + + for (e1, f) in update_functions + input_variables = collect(Leaves(f)) + for e2 in input_variables + add_edge!(network, e1, e2) + end + end + + return network +end + +""" + $(TYPEDSIGNATURES) +""" +function sample_qualitative_network(entities::AbstractVector{Symbol}, max_eq_depth::Int) + g = build_qn_grammar(entities, default_qn_constants) + update_fns = Dict{Symbol,Union{Symbol,Expr,Int}}([ + e => rulenode2expr(rand(RuleNode, g, :Val, max_eq_depth), g) for e in entities + ]) + graph = update_functions_to_network(update_fns, g) + + return graph +end + +""" + $(TYPEDSIGNATURES) +""" +function sample_qualitative_network(size::Int, max_eq_depth::Int) + entities = [Symbol("c$e") for e = 1:size] + sample_qualitative_network(entities, max_eq_depth) +end + +""" + $(TYPEDEF) + +A qualitative network model as described in +["Qualitative networks: a symbolic approach to analyze biological +signaling networks"](https://doi.org/10.1186/1752-0509-1-4 +). + +$(FIELDS) + +Systems that include the model semantics wrap around this struct +with an [`ArbitrarySteppable`](https://juliadynamics.github.io/DynamicalSystems.jl/stable/tutorial/#DynamicalSystemsBase.ArbitrarySteppable) +from [`DynamicalSystems`](https://juliadynamics.github.io/DynamicalSystems.jl/stable/). +See [`aqn`](@ref) for an example. +""" +struct QualitativeNetwork + "Graph containing the topology and target functions of the network" + graph::MetaGraph + "State of the network" + state::AbstractVector{Int} + "The maximum activation level/state value of any component" + N::Int + + function QualitativeNetwork(g, s, N) + if any(s .> N) + error("All values in state must be <= N (N=$N)") + end + + return new(g, s, N) + end +end + +""" + $(TYPEDSIGNATURES) + +Shorthand for [`QualitativeNetwork`](@ref). +""" +const QN = QualitativeNetwork + +""" + $(TYPEDSIGNATURES) +""" +function max_level(qn::QN) + return qn.N +end + +function _get_component_index(qn::QN, component::Symbol) + return findfirst(isequal(component), components(qn)) +end + +""" + $(TYPEDSIGNATURES) +""" +function components(qn::QN) + return collect(labels(qn.graph)) +end + +""" + $(TYPEDSIGNATURES) +""" +function target_functions(qn::QN) + return Dict([c => fn for (c, (_, fn)) in qn.graph.vertex_properties]) +end + +""" + $(TYPEDSIGNATURES) +""" +get_state(qn::QN) = qn.state + +""" + $(TYPEDSIGNATURES) +""" +function get_state(qn::QN, component::Symbol) + i = _get_component_index(qn, component) + return qn.state[i] +end + +function _set_state!(qn::QN, component::Symbol, value::Integer) + i = _get_component_index(qn::QN, component::Symbol) + qn.state[i] = value +end + +""" + $(TYPEDSIGNATURES) +""" +function set_state!(qn::QN, component::Symbol, value::Integer) + if value > max_level(qn) + error( + "Value ($value) cannot be larger than the QN's maximum level (N=$(max_level(qn)))", + ) + end + + _set_state!(qn, component, value) +end + +""" + $(TYPEDSIGNATURES) + +Interpret target functions from a [`QualitativeNetwork`](@ref). +""" +function interpret(e::Union{Expr,Symbol,Int}, qn::QN) + @match e begin + ::Symbol => get_state(qn, e) + ::Int => e + :($v1 + $v2) => interpret(v1, qn) + interpret(v2, qn) + :($v1 - $v2) => interpret(v1, qn) - interpret(v2, qn) + :($v1 / $v2) => interpret(v1, qn) / interpret(v2, qn) + :($v1 * $v2) => interpret(v1, qn) * interpret(v2, qn) + :(Min($v1, $v2)) => min(interpret(v1, qn), interpret(v2, qn)) + :(Max($v1, $v2)) => max(interpret(v1, qn), interpret(v2, qn)) + :(Ceil($v)) => ceil(interpret(v, qn)) + :(Floor($v)) => floor(interpret(v, qn)) + _ => error("Unhandled Expr in `interpret`: $e") + end +end + +""" + $(TYPEDSIGNATURES) +""" +function limit_change(prev_value, next_value, N::Int) + if next_value > prev_value + limited_value = min(prev_value + 1, N + 1) + elseif next_value < prev_value + limited_value = max(prev_value - 1, 0) + else + limited_value = next_value + end + + return round(Int, limited_value) +end + +""" + $(TYPEDSIGNATURES) +""" +function async_qn_step!(qn::QN) + vertex_labels = collect(labels(qn.graph)) + c_i = rand(vertex_labels) + t = target_functions(qn)[c_i] + old_state = get_state(qn, c_i) + new_state = interpret(t, qn) + limited_state = limit_change(old_state, new_state, max_level(qn)) + set_state!(qn, c_i, limited_state) +end + +extract_state(model::QN) = model.state +extract_parameters(model::QN) = model.graph +reset_model!(model::QN, u, _) = model.state .= u + +""" + $(TYPEDSIGNATURES) + +Construct an asynchronous [`QualitativeNetwork`](@ref) system using the +[`async_qn_step!`](@ref) as a step function. +""" +function aqn(network::MetaGraph, initial_state::AbstractVector{Int}, max_level::Int) + model = QualitativeNetwork(network, initial_state, max_level) + + return ArbitrarySteppable( + model, + async_qn_step!, + extract_state, + extract_parameters, + reset_model!, + isdeterministic = false, + ) +end + +""" + $(TYPEDSIGNATURES) +""" +function aqn(network::MetaGraph, max_level::Int) + n_components = nv(network) + initial_state = rand(0:max_level, n_components) + return aqn(network, initial_state, max_level) +end diff --git a/test/Project.toml b/test/Project.toml index 42adc6a..1d74f2e 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,5 +1,9 @@ [deps] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DynamicalSystems = "61744808-ddfa-5f27-97ff-6e42cc95d634" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +HerbCore = "2b23ba43-8213-43cb-b5ea-38c12b45bd45" +JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" MetaGraphsNext = "fa8bd995-216d-47f1-8a91-f3b68fbeb377" SoleLogics = "b002da8f-3cb3-4d91-bbe3-2953433912b5" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/runtests.jl b/test/runtests.jl index cca1b47..7d0839d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,6 @@ +using Aqua using GraphDynamicalSystems +using JET using Test @@ -9,14 +11,23 @@ Don't add your tests to runtests.jl. Instead, create files named The file will be automatically included inside a `@testset` with title "Title For My Test". =# -for (root, dirs, files) in walkdir(@__DIR__) - for file in files - if isnothing(match(r"^test-.*\.jl$", file)) - continue - end - title = titlecase(replace(splitext(file[6:end])[1], "-" => " ")) - @testset "$title" begin - include(file) +@testset "GraphDynamicalSystems.jl" begin + @testset "Code quality (Aqua.jl)" begin + Aqua.test_all(GraphDynamicalSystems) + end + @testset "Code linting (JET.jl)" begin + JET.test_package(GraphDynamicalSystems; target_defined_modules = true) + end + + for (root, dirs, files) in walkdir(@__DIR__) + for file in files + if isnothing(match(r"^test-.*\.jl$", file)) + continue + end + title = titlecase(replace(splitext(file[6:end])[1], "-" => " ")) + @testset "$title" begin + include(file) + end end end end diff --git a/test/test-qn.jl b/test/test-qn.jl new file mode 100644 index 0000000..0006f28 --- /dev/null +++ b/test/test-qn.jl @@ -0,0 +1,71 @@ +using DynamicalSystems +using GraphDynamicalSystems +using Graphs: ne, nv + +@testset "QN Grammar Creation" begin + entities = [:a, :b, :c] + constants = [i for i = 1:10] + g = build_qn_grammar(entities, constants) + + @test issubset(Set(entities), Set(g.rules)) + @test issubset(Set(constants), Set(g.rules)) + + g2 = build_qn_grammar(Symbol[], Integer[]) + + @test isempty(intersect(Set(g2.rules), Set(entities))) + @test isempty(intersect(Set(g2.rules), Set(constants))) +end + +size = 3 +max_eq_depth = 3 +N = 5 +network = sample_qualitative_network(size, max_eq_depth) +initial_state = ones(size) +qn = QualitativeNetwork(network, initial_state, N) + +@testset "QN Sampling" begin + @test nv(network) == size + @test ne(network) > 0 +end + +@testset "QN properties, fields" begin + @test length(components(qn)) == size + + @test length(target_functions(qn)) == size + + @test all(get_state(qn) .<= max_level(qn)) + + @test get_state(qn, components(qn)[1]) == 1 + + @test_throws r"max" set_state!(qn, Symbol(1), 6) +end + +@testset "QN Construction" begin + basic_grammar = build_qn_grammar(Symbol[], Integer[]) + lower_N = 3 + initial_state_higher_than_N = [5, 5, 5] + + @test_throws r"<=" QN(basic_grammar, initial_state_higher_than_N, lower_N) +end + +@testset "Target Function" begin + # All state values should be 1, so adding two of them == 2, etc. + # The size of the test network is 3, so there should be c1, c2, c3 + # as available components to work with. + @test interpret(:(c1 + c2), qn) == 2 + @test interpret(:(c1 - c2), qn) == 0 + set_state!(qn, :c2, 2) + @test interpret(:(c1 / c2), qn) == 0.5 + @test interpret(:(c1 / 2), qn) == 0.5 + @test interpret(:(Min(c1, c2)), qn) == 1 + @test interpret(:(Max(c1, c2)), qn) == 2 + @test interpret(:(Ceil(c1 / c2)), qn) == 1 + @test interpret(:(Floor(c1 / c2)), qn) == 0 + @test_throws r"Unhandled" interpret(:(nonexistent_function(c1)), qn) +end + +@testset "Async QN" begin + async_qn = aqn(network, N) + step!(async_qn, 10) + @test all(get_state(async_qn.model) .<= N) +end