From a26d85d5a9773d4025a3d1d37076c47a93556058 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 12 Jun 2024 05:37:08 +0000 Subject: [PATCH] build based on a8efd81 --- dev/.documenter-siteinfo.json | 2 +- dev/about/index.html | 2 +- .../architecture_search/Manifest.toml | 1364 ++ .../architecture_search}/Project.toml | 1 + .../architecture_search/README/index.html | 2 + .../architecture_search/generate.jl | 4 + .../architecture_search/notebook.ipynb} | 212 +- .../architecture_search/notebook.jl | 136 + .../notebook.unexecuted.ipynb | 314 + .../architecture_search/notebook/index.html | 104 + dev/common_workflows/comparison/Manifest.toml | 2089 +++ .../comparison}/Project.toml | 1 + .../comparison/README/index.html | 2 + dev/common_workflows/comparison/generate.jl | 4 + .../comparison/notebook.ipynb} | 98 +- .../comparison/notebook.jl} | 44 +- .../comparison/notebook.unexecuted.ipynb | 265 + .../comparison/notebook/index.html | 60 + .../composition/Manifest.toml | 1489 +++ .../composition}/Project.toml | 1 + .../composition/README/index.html | 2 + dev/common_workflows/composition/generate.jl | 4 + .../composition/notebook.ipynb} | 149 +- .../composition/notebook.jl} | 56 +- .../composition/notebook.unexecuted.ipynb | 247 + .../composition/notebook/index.html | 68 + .../early_stopping/Manifest.toml | 1985 +++ .../early_stopping}/Project.toml | 1 + .../early_stopping/README/index.html | 2 + .../early_stopping/generate.jl | 4 + .../early_stopping/notebook.ipynb | 427 + .../early_stopping/notebook.jl} | 54 +- .../early_stopping/notebook.unexecuted.ipynb | 262 + .../early_stopping/notebook/803312a6.svg | 48 + .../early_stopping/notebook/index.html | 59 + .../hyperparameter_tuning/Manifest.toml | 1985 +++ .../hyperparameter_tuning}/Project.toml | 1 + .../hyperparameter_tuning/README/index.html | 2 + .../hyperparameter_tuning/generate.jl | 4 + .../hyperparameter_tuning/notebook.jl} | 71 +- .../notebook.unexecuted.ipynb | 289 + .../notebook/da89bfdc.svg | 40 + .../hyperparameter_tuning/notebook/index.html | 68 + .../incremental_training/Manifest.toml | 1364 ++ .../incremental_training}/Project.toml | 1 + .../incremental_training/README/index.html | 2 + .../incremental_training/generate.jl | 4 + .../incremental_training/notebook.ipynb} | 206 +- .../incremental_training/notebook.jl} | 63 +- .../notebook.unexecuted.ipynb | 253 + .../incremental_training/notebook/index.html | 71 + .../live_training/Manifest.toml | 1985 +++ .../live_training}/Project.toml | 1 + .../live_training/README/index.html | 2 + .../live_training/generate.jl | 5 + .../live_training/notebook.jl} | 63 +- .../live_training/notebook.unexecuted.ipynb | 196 + .../live_training/notebook/index.html | 81 + dev/contributing/index.html | 2 +- .../Boston/index.html | 2 +- dev/extended_examples/MNIST/Manifest.toml | 2319 ++++ dev/extended_examples/MNIST/Project.toml | 11 + dev/extended_examples/MNIST/README/index.html | 2 + dev/extended_examples/MNIST/generate.jl | 5 + dev/extended_examples/MNIST/loss.png | Bin 0 -> 22198 bytes dev/extended_examples/MNIST/notebook.ipynb | 2111 +++ dev/extended_examples/MNIST/notebook.jl | 295 + .../MNIST/notebook.unexecuted.ipynb | 732 + .../MNIST/notebook/0ad85449.svg | 50 + .../MNIST/notebook/78034c1f.svg | 62 + .../MNIST/notebook/c099548a.svg | 792 ++ .../MNIST/notebook/index.html | 200 + dev/extended_examples/MNIST/weights.png | Bin 0 -> 35741 bytes .../spam_detection/Manifest.toml | 1525 +++ .../spam_detection}/Project.toml | 4 +- .../spam_detection/README/index.html | 2 + .../spam_detection/generate.jl | 4 + .../spam_detection/notebook.ipynb} | 256 +- .../spam_detection/notebook.jl | 202 + .../spam_detection/notebook.unexecuted.ipynb | 552 + .../spam_detection/notebook/index.html | 114 + .../spam_detection}/sms.csv | 0 dev/full tutorials/MNIST/index.html | 55 - .../Spam Detection with RNNs/SMS.jl | 180 - .../Spam Detection with RNNs/SMS/index.html | 122 - dev/generate.jl | 52 + dev/index.html | 29 +- dev/interface/Builders/index.html | 4 +- dev/interface/Classification/index.html | 11 +- dev/interface/Custom Builders/index.html | 6 +- dev/interface/Image Classification/index.html | 5 +- .../Multitarget Regression/index.html | 9 +- dev/interface/Regression/index.html | 13 +- dev/interface/Summary/index.html | 4 +- dev/objects.inv | Bin 1400 -> 1784 bytes dev/search_index.js | 2 +- .../tuning.jl | 126 - .../tuning/index.html | 73 - .../Comparison/comparison/index.html | 58 - .../Composition/composition/index.html | 27 - .../Early Stopping/iteration.ipynb | 403 - .../Early Stopping/iteration/index.html | 37 - .../Hyperparameter Tuning/tuning.ipynb | 897 -- .../Hyperparameter Tuning/tuning/index.html | 33 - .../incremental/index.html | 22 - .../Live Training/live-training.ipynb | 11077 ---------------- .../Live Training/live-training/index.html | 38 - 107 files changed, 25183 insertions(+), 13661 deletions(-) create mode 100644 dev/common_workflows/architecture_search/Manifest.toml rename dev/{workflow examples/Basic Neural Architecture Search => common_workflows/architecture_search}/Project.toml (82%) create mode 100644 dev/common_workflows/architecture_search/README/index.html create mode 100644 dev/common_workflows/architecture_search/generate.jl rename dev/{workflow examples/Basic Neural Architecture Search/tuning.ipynb => common_workflows/architecture_search/notebook.ipynb} (59%) create mode 100644 dev/common_workflows/architecture_search/notebook.jl create mode 100644 dev/common_workflows/architecture_search/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/architecture_search/notebook/index.html create mode 100644 dev/common_workflows/comparison/Manifest.toml rename dev/{workflow examples/Comparison => common_workflows/comparison}/Project.toml (92%) create mode 100644 dev/common_workflows/comparison/README/index.html create mode 100644 dev/common_workflows/comparison/generate.jl rename dev/{workflow examples/Comparison/comparison.ipynb => common_workflows/comparison/notebook.ipynb} (68%) rename dev/{workflow examples/Comparison/comparison.jl => common_workflows/comparison/notebook.jl} (67%) create mode 100644 dev/common_workflows/comparison/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/comparison/notebook/index.html create mode 100644 dev/common_workflows/composition/Manifest.toml rename dev/{workflow examples/Composition => common_workflows/composition}/Project.toml (87%) create mode 100644 dev/common_workflows/composition/README/index.html create mode 100644 dev/common_workflows/composition/generate.jl rename dev/{workflow examples/Composition/composition.ipynb => common_workflows/composition/notebook.ipynb} (52%) rename dev/{workflow examples/Composition/composition.jl => common_workflows/composition/notebook.jl} (61%) create mode 100644 dev/common_workflows/composition/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/composition/notebook/index.html create mode 100644 dev/common_workflows/early_stopping/Manifest.toml rename dev/{workflow examples/Live Training => common_workflows/early_stopping}/Project.toml (82%) create mode 100644 dev/common_workflows/early_stopping/README/index.html create mode 100644 dev/common_workflows/early_stopping/generate.jl create mode 100644 dev/common_workflows/early_stopping/notebook.ipynb rename dev/{workflow examples/Early Stopping/iteration.jl => common_workflows/early_stopping/notebook.jl} (64%) create mode 100644 dev/common_workflows/early_stopping/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/early_stopping/notebook/803312a6.svg create mode 100644 dev/common_workflows/early_stopping/notebook/index.html create mode 100644 dev/common_workflows/hyperparameter_tuning/Manifest.toml rename dev/{workflow examples/Early Stopping => common_workflows/hyperparameter_tuning}/Project.toml (82%) create mode 100644 dev/common_workflows/hyperparameter_tuning/README/index.html create mode 100644 dev/common_workflows/hyperparameter_tuning/generate.jl rename dev/{workflow examples/Hyperparameter Tuning/tuning.jl => common_workflows/hyperparameter_tuning/notebook.jl} (60%) create mode 100644 dev/common_workflows/hyperparameter_tuning/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/hyperparameter_tuning/notebook/da89bfdc.svg create mode 100644 dev/common_workflows/hyperparameter_tuning/notebook/index.html create mode 100644 dev/common_workflows/incremental_training/Manifest.toml rename dev/{workflow examples/Incremental Training => common_workflows/incremental_training}/Project.toml (79%) create mode 100644 dev/common_workflows/incremental_training/README/index.html create mode 100644 dev/common_workflows/incremental_training/generate.jl rename dev/{workflow examples/Incremental Training/incremental.ipynb => common_workflows/incremental_training/notebook.ipynb} (54%) rename dev/{workflow examples/Incremental Training/incremental.jl => common_workflows/incremental_training/notebook.jl} (58%) create mode 100644 dev/common_workflows/incremental_training/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/incremental_training/notebook/index.html create mode 100644 dev/common_workflows/live_training/Manifest.toml rename dev/{workflow examples/Hyperparameter Tuning => common_workflows/live_training}/Project.toml (82%) create mode 100644 dev/common_workflows/live_training/README/index.html create mode 100644 dev/common_workflows/live_training/generate.jl rename dev/{workflow examples/Live Training/live-training.jl => common_workflows/live_training/notebook.jl} (52%) create mode 100644 dev/common_workflows/live_training/notebook.unexecuted.ipynb create mode 100644 dev/common_workflows/live_training/notebook/index.html rename dev/{full tutorials => extended_examples}/Boston/index.html (50%) create mode 100644 dev/extended_examples/MNIST/Manifest.toml create mode 100644 dev/extended_examples/MNIST/Project.toml create mode 100644 dev/extended_examples/MNIST/README/index.html create mode 100644 dev/extended_examples/MNIST/generate.jl create mode 100644 dev/extended_examples/MNIST/loss.png create mode 100644 dev/extended_examples/MNIST/notebook.ipynb create mode 100644 dev/extended_examples/MNIST/notebook.jl create mode 100644 dev/extended_examples/MNIST/notebook.unexecuted.ipynb create mode 100644 dev/extended_examples/MNIST/notebook/0ad85449.svg create mode 100644 dev/extended_examples/MNIST/notebook/78034c1f.svg create mode 100644 dev/extended_examples/MNIST/notebook/c099548a.svg create mode 100644 dev/extended_examples/MNIST/notebook/index.html create mode 100644 dev/extended_examples/MNIST/weights.png create mode 100644 dev/extended_examples/spam_detection/Manifest.toml rename dev/{full tutorials/Spam Detection with RNNs => extended_examples/spam_detection}/Project.toml (74%) create mode 100644 dev/extended_examples/spam_detection/README/index.html create mode 100644 dev/extended_examples/spam_detection/generate.jl rename dev/{full tutorials/Spam Detection with RNNs/SMS.ipynb => extended_examples/spam_detection/notebook.ipynb} (57%) create mode 100644 dev/extended_examples/spam_detection/notebook.jl create mode 100644 dev/extended_examples/spam_detection/notebook.unexecuted.ipynb create mode 100644 dev/extended_examples/spam_detection/notebook/index.html rename dev/{full tutorials/Spam Detection with RNNs => extended_examples/spam_detection}/sms.csv (100%) delete mode 100644 dev/full tutorials/MNIST/index.html delete mode 100644 dev/full tutorials/Spam Detection with RNNs/SMS.jl delete mode 100644 dev/full tutorials/Spam Detection with RNNs/SMS/index.html create mode 100644 dev/generate.jl delete mode 100644 dev/workflow examples/Basic Neural Architecture Search/tuning.jl delete mode 100644 dev/workflow examples/Basic Neural Architecture Search/tuning/index.html delete mode 100644 dev/workflow examples/Comparison/comparison/index.html delete mode 100644 dev/workflow examples/Composition/composition/index.html delete mode 100644 dev/workflow examples/Early Stopping/iteration.ipynb delete mode 100644 dev/workflow examples/Early Stopping/iteration/index.html delete mode 100644 dev/workflow examples/Hyperparameter Tuning/tuning.ipynb delete mode 100644 dev/workflow examples/Hyperparameter Tuning/tuning/index.html delete mode 100644 dev/workflow examples/Incremental Training/incremental/index.html delete mode 100644 dev/workflow examples/Live Training/live-training.ipynb delete mode 100644 dev/workflow examples/Live Training/live-training/index.html diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index d8e62131..38a837b9 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-11T00:39:31","documenter_version":"1.4.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-12T05:37:04","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/dev/about/index.html b/dev/about/index.html index 642e23be..1aa4d261 100644 --- a/dev/about/index.html +++ b/dev/about/index.html @@ -1,2 +1,2 @@ -- · MLJFlux
+- · MLJFlux
diff --git a/dev/common_workflows/architecture_search/Manifest.toml b/dev/common_workflows/architecture_search/Manifest.toml new file mode 100644 index 00000000..0a20d4e5 --- /dev/null +++ b/dev/common_workflows/architecture_search/Manifest.toml @@ -0,0 +1,1364 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "0f9d92a558d050b0bba129bd2d0367e7b1953ddf" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" diff --git a/dev/workflow examples/Basic Neural Architecture Search/Project.toml b/dev/common_workflows/architecture_search/Project.toml similarity index 82% rename from dev/workflow examples/Basic Neural Architecture Search/Project.toml rename to dev/common_workflows/architecture_search/Project.toml index 49fe3e47..4226930c 100644 --- a/dev/workflow examples/Basic Neural Architecture Search/Project.toml +++ b/dev/common_workflows/architecture_search/Project.toml @@ -3,4 +3,5 @@ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/architecture_search/README/index.html b/dev/common_workflows/architecture_search/README/index.html new file mode 100644 index 00000000..27c6054b --- /dev/null +++ b/dev/common_workflows/architecture_search/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/architecture_search/generate.jl b/dev/common_workflows/architecture_search/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/architecture_search/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/workflow examples/Basic Neural Architecture Search/tuning.ipynb b/dev/common_workflows/architecture_search/notebook.ipynb similarity index 59% rename from dev/workflow examples/Basic Neural Architecture Search/tuning.ipynb rename to dev/common_workflows/architecture_search/notebook.ipynb index d2869628..958109de 100644 --- a/dev/workflow examples/Basic Neural Architecture Search/tuning.ipynb +++ b/dev/common_workflows/architecture_search/notebook.ipynb @@ -10,23 +10,18 @@ { "cell_type": "markdown", "source": [ - "Neural Architecture Search is (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters\n", - "defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency,\n", - "in this example we will be using a simple random search." + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/architecture_search)." ], "metadata": {} }, { "cell_type": "markdown", "source": [ - "**Julia version** is assumed to be 1.10.*" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Basic Imports" + "Neural Architecture Search (NAS) is an instance of hyperparameter tuning concerned\n", + "with tuning model hyperparameters defining the architecture itself. Although it's\n", + "typically performed with sophisticated search algorithms for efficiency, in this example\n", + "we will be using a simple random search." ], "metadata": {} }, @@ -36,22 +31,45 @@ "name": "stdout", "output_type": "stream", "text": [ - "┌ Warning: The project dependencies or compat requirements have changed since the manifest was last resolved.\n", - "│ It is recommended to `Pkg.resolve()` or consider `Pkg.update()` if necessary.\n", - "└ @ Pkg.API /Applications/Julia-1.10.app/Contents/Resources/julia/share/julia/stdlib/v1.10/Pkg/src/API.jl:1800\n", - "[ Info: Precompiling RDatasets [ce6b1742-4840-55fa-b093-852dadbb1d8b]\n" + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/common_workflows/architecture_search`\n" ] } ], "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", "source": [ "using MLJ # Has MLJFlux models\n", "using Flux # For more flexibility\n", "using RDatasets: RDatasets # Dataset source\n", - "using DataFrames # To view tuning results in a table" + "using DataFrames # To view tuning results in a table\n", + "import Optimisers # native Flux.jl optimisers no longer supported" ], "metadata": {}, - "execution_count": 1 + "execution_count": 2 }, { "cell_type": "markdown", @@ -71,7 +89,7 @@ ] }, "metadata": {}, - "execution_count": 2 + "execution_count": 3 } ], "cell_type": "code", @@ -82,7 +100,7 @@ "first(X, 5)" ], "metadata": {}, - "execution_count": 2 + "execution_count": 3 }, { "cell_type": "markdown", @@ -94,7 +112,8 @@ { "cell_type": "markdown", "source": [ - "Now let's construct our model. This follows a similar setup the one followed in the [Quick Start](../../index.md#Quick-Start)." + "Now let's construct our model. This follows a similar setup the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." ], "metadata": {} }, @@ -111,33 +130,41 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (1, 1, 1), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Flux.Optimise.Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (1, 1, 1), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" }, "metadata": {}, - "execution_count": 3 + "execution_count": 4 } ], "cell_type": "code", "source": [ "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = \"MLJFlux\"\n", "clf = NeuralNetworkClassifier(\n", - "\tbuilder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),\n", - "\toptimiser = Flux.ADAM(0.01),\n", - "\tbatch_size = 8,\n", - "\tepochs = 10,\n", - "\trng = 42,\n", + " builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),\n", + " optimiser = Optimisers.ADAM(0.01),\n", + " batch_size = 8,\n", + " epochs = 10,\n", + " rng = 42,\n", ")" ], "metadata": {}, - "execution_count": 3 + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "### Generating Network Architectures" + ], + "metadata": {} }, { "cell_type": "markdown", "source": [ - "### Generating Network Architectures\n", - "We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define a network with $k$ hidden layers and\n", - "where the ith layer has $z_i$ neurons. We will proceed by defining a function that can generate all possible networks with a\n", - "specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons." + "We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define\n", + "a network with $k$ hidden layers and where the ith layer has $z_i$ neurons. We will\n", + "proceed by defining a function that can generate all possible networks with a specific\n", + "number of hidden layers, a minimum and maximum number of neurons per layer and\n", + "increments to consider for the number of neurons." ], "metadata": {} }, @@ -149,53 +176,54 @@ "text/plain": "generate_networks (generic function with 1 method)" }, "metadata": {}, - "execution_count": 4 + "execution_count": 5 } ], "cell_type": "code", "source": [ - "function generate_networks(;\n", - "\tmin_neurons::Int,\n", - "\tmax_neurons::Int,\n", - "\tneuron_step::Int,\n", - "\tnum_layers::Int,\n", - ")\n", - "\t# Define the range of neurons\n", - "\tneuron_range = min_neurons:neuron_step:max_neurons\n", + "function generate_networks(\n", + " ;min_neurons::Int,\n", + " max_neurons::Int,\n", + " neuron_step::Int,\n", + " num_layers::Int,\n", + " )\n", + " # Define the range of neurons\n", + " neuron_range = min_neurons:neuron_step:max_neurons\n", "\n", - "\t# Empty list to store the network configurations\n", - "\tnetworks = Vector{Tuple{Vararg{Int, num_layers}}}()\n", + " # Empty list to store the network configurations\n", + " networks = Vector{Tuple{Vararg{Int, num_layers}}}()\n", "\n", - "\t# Recursive helper function to generate all combinations of tuples\n", - "\tfunction generate_tuple(current_layers, remaining_layers)\n", - "\t\tif remaining_layers > 0\n", - "\t\t\tfor n in neuron_range\n", - "\t\t\t\t# current_layers =[] then current_layers=[(min_neurons)],\n", - "\t\t\t\t# [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...\n", - "\t\t\t\t# for each of these we call generate_layers again which appends\n", - "\t\t\t\t# the n combinations for each one of them\n", - "\t\t\t\tgenerate_tuple(vcat(current_layers, [n]), remaining_layers - 1)\n", - "\t\t\tend\n", - "\t\telse\n", - "\t\t\t# in the base case, no more layers to \"recurse on\"\n", - "\t\t\t# and we just append the current_layers as a tuple\n", - "\t\t\tpush!(networks, tuple(current_layers...))\n", - "\t\tend\n", - "\tend\n", + " # Recursive helper function to generate all combinations of tuples\n", + " function generate_tuple(current_layers, remaining_layers)\n", + " if remaining_layers > 0\n", + " for n in neuron_range\n", + " # current_layers =[] then current_layers=[(min_neurons)],\n", + " # [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...\n", + " # for each of these we call generate_layers again which appends\n", + " # the n combinations for each one of them\n", + " generate_tuple(vcat(current_layers, [n]), remaining_layers - 1)\n", + " end\n", + " else\n", + " # in the base case, no more layers to \"recurse on\"\n", + " # and we just append the current_layers as a tuple\n", + " push!(networks, tuple(current_layers...))\n", + " end\n", + " end\n", "\n", - "\t# Generate networks for the given number of layers\n", - "\tgenerate_tuple([], num_layers)\n", + " # Generate networks for the given number of layers\n", + " generate_tuple([], num_layers)\n", "\n", - "\treturn networks\n", + " return networks\n", "end" ], "metadata": {}, - "execution_count": 4 + "execution_count": 5 }, { "cell_type": "markdown", "source": [ - "Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4" + "Now let's generate an array of all possible neural networks with three hidden layers and\n", + "number of neurons per layer ∈ [1,64] with a step of 4" ], "metadata": {} }, @@ -207,18 +235,23 @@ "text/plain": "5-element Vector{Tuple{Int64, Int64, Int64}}:\n (1, 1, 1)\n (1, 1, 5)\n (1, 1, 9)\n (1, 1, 13)\n (1, 1, 17)" }, "metadata": {}, - "execution_count": 5 + "execution_count": 6 } ], "cell_type": "code", "source": [ "networks_space =\n", - "\tgenerate_networks(min_neurons = 1, max_neurons = 64, neuron_step = 4, num_layers = 3)\n", + " generate_networks(\n", + " min_neurons = 1,\n", + " max_neurons = 64,\n", + " neuron_step = 4,\n", + " num_layers = 3,\n", + " )\n", "\n", "networks_space[1:5]" ], "metadata": {}, - "execution_count": 5 + "execution_count": 6 }, { "cell_type": "markdown", @@ -230,7 +263,8 @@ { "cell_type": "markdown", "source": [ - "Let's use this array to define the range of hyperparameters and pass it along with the model to the `TunedModel` constructor." + "Let's use this array to define the range of hyperparameters and pass it along with the\n", + "model to the `TunedModel` constructor." ], "metadata": {} }, @@ -241,16 +275,16 @@ "r1 = range(clf, :(builder.hidden), values = networks_space)\n", "\n", "tuned_clf = TunedModel(\n", - "\tmodel = clf,\n", - "\ttuning = RandomSearch(),\n", - "\tresampling = CV(nfolds = 4, rng = 42),\n", - "\trange = [r1],\n", - "\tmeasure = cross_entropy,\n", - "\tn = 100, # searching over 100 random samples are enough\n", + " model = clf,\n", + " tuning = RandomSearch(),\n", + " resampling = CV(nfolds = 4, rng = 42),\n", + " range = [r1],\n", + " measure = cross_entropy,\n", + " n = 100, # searching over 100 random samples are enough\n", ");" ], "metadata": {}, - "execution_count": 6 + "execution_count": 7 }, { "cell_type": "markdown", @@ -262,7 +296,8 @@ { "cell_type": "markdown", "source": [ - "Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically:" + "Similar to the last workflow example, all we need now is to fit our model and the search\n", + "will take place automatically:" ], "metadata": {} }, @@ -271,10 +306,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (25, 53, 45), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Flux.Optimise.Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (21, 57, 25), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" }, "metadata": {}, - "execution_count": 7 + "execution_count": 8 } ], "cell_type": "code", @@ -284,7 +319,7 @@ "fitted_params(mach).best_model" ], "metadata": {}, - "execution_count": 7 + "execution_count": 8 }, { "cell_type": "markdown", @@ -296,7 +331,8 @@ { "cell_type": "markdown", "source": [ - "Let's analyze the search results by converting the history array to a dataframe and viewing it:" + "Let's analyze the search results by converting the history array to a dataframe and\n", + "viewing it:" ], "metadata": {} }, @@ -305,26 +341,26 @@ { "output_type": "execute_result", "data": { - "text/plain": "\u001b[1m10×2 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m mlp \u001b[0m\u001b[1m measurement \u001b[0m\n │\u001b[90m MLP… \u001b[0m\u001b[90m Float64 \u001b[0m\n─────┼────────────────────────────────────────────\n 1 │ MLP(hidden = (25, 53, 45), …) 0.0865692\n 2 │ MLP(hidden = (49, 41, 49), …) 0.0870145\n 3 │ MLP(hidden = (25, 61, 21), …) 0.0870776\n 4 │ MLP(hidden = (45, 21, 41), …) 0.0921284\n 5 │ MLP(hidden = (49, 13, 33), …) 0.0941658\n 6 │ MLP(hidden = (21, 49, 53), …) 0.100384\n 7 │ MLP(hidden = (33, 57, 61), …) 0.101213\n 8 │ MLP(hidden = (33, 49, 9), …) 0.10241\n 9 │ MLP(hidden = (17, 37, 17), …) 0.10542\n 10 │ MLP(hidden = (29, 49, 17), …) 0.108438", + "text/plain": "\u001b[1m10×2 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m mlp \u001b[0m\u001b[1m measurement \u001b[0m\n │\u001b[90m MLP… \u001b[0m\u001b[90m Float64 \u001b[0m\n─────┼────────────────────────────────────────────\n 1 │ MLP(hidden = (21, 57, 25), …) 0.0867019\n 2 │ MLP(hidden = (45, 17, 13), …) 0.0929803\n 3 │ MLP(hidden = (33, 13, 49), …) 0.0973896\n 4 │ MLP(hidden = (21, 41, 61), …) 0.0981502\n 5 │ MLP(hidden = (57, 49, 61), …) 0.100331\n 6 │ MLP(hidden = (25, 25, 29), …) 0.101083\n 7 │ MLP(hidden = (29, 61, 21), …) 0.101466\n 8 │ MLP(hidden = (29, 61, 5), …) 0.107513\n 9 │ MLP(hidden = (21, 61, 17), …) 0.107874\n 10 │ MLP(hidden = (45, 49, 61), …) 0.111292", "text/html": [ - "
10×2 DataFrame
Rowmlpmeasurement
MLP…Float64
1MLP(hidden = (25, 53, 45), …)0.0865692
2MLP(hidden = (49, 41, 49), …)0.0870145
3MLP(hidden = (25, 61, 21), …)0.0870776
4MLP(hidden = (45, 21, 41), …)0.0921284
5MLP(hidden = (49, 13, 33), …)0.0941658
6MLP(hidden = (21, 49, 53), …)0.100384
7MLP(hidden = (33, 57, 61), …)0.101213
8MLP(hidden = (33, 49, 9), …)0.10241
9MLP(hidden = (17, 37, 17), …)0.10542
10MLP(hidden = (29, 49, 17), …)0.108438
" + "
10×2 DataFrame
Rowmlpmeasurement
MLP…Float64
1MLP(hidden = (21, 57, 25), …)0.0867019
2MLP(hidden = (45, 17, 13), …)0.0929803
3MLP(hidden = (33, 13, 49), …)0.0973896
4MLP(hidden = (21, 41, 61), …)0.0981502
5MLP(hidden = (57, 49, 61), …)0.100331
6MLP(hidden = (25, 25, 29), …)0.101083
7MLP(hidden = (29, 61, 21), …)0.101466
8MLP(hidden = (29, 61, 5), …)0.107513
9MLP(hidden = (21, 61, 17), …)0.107874
10MLP(hidden = (45, 49, 61), …)0.111292
" ] }, "metadata": {}, - "execution_count": 8 + "execution_count": 9 } ], "cell_type": "code", "source": [ "history = report(mach).history\n", "history_df = DataFrame(\n", - "\tmlp = [x[:model].builder for x in history],\n", - "\tmeasurement = [x[:measurement][1] for x in history],\n", + " mlp = [x[:model].builder for x in history],\n", + " measurement = [x[:measurement][1] for x in history],\n", ")\n", "first(sort!(history_df, [order(:measurement)]), 10)" ], "metadata": {}, - "execution_count": 8 + "execution_count": 9 }, { "cell_type": "markdown", @@ -342,11 +378,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.0" + "version": "1.10.3" }, "kernelspec": { "name": "julia-1.10", - "display_name": "Julia 1.10.0", + "display_name": "Julia 1.10.3", "language": "julia" } }, diff --git a/dev/common_workflows/architecture_search/notebook.jl b/dev/common_workflows/architecture_search/notebook.jl new file mode 100644 index 00000000..61ba5d49 --- /dev/null +++ b/dev/common_workflows/architecture_search/notebook.jl @@ -0,0 +1,136 @@ +# # Neural Architecture Search with MLJFlux + +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/architecture_search). + +# Neural Architecture Search (NAS) is an instance of hyperparameter tuning concerned +# with tuning model hyperparameters defining the architecture itself. Although it's +# typically performed with sophisticated search algorithms for efficiency, in this example +# we will be using a simple random search. + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md + +# **Julia version** is assumed to be 1.10.* + +# ### Basic Imports + +using MLJ # Has MLJFlux models +using Flux # For more flexibility +using RDatasets: RDatasets # Dataset source +using DataFrames # To view tuning results in a table +import Optimisers # native Flux.jl optimisers no longer supported + +# ### Loading and Splitting the Data + +iris = RDatasets.dataset("datasets", "iris"); +y, X = unpack(iris, ==(:Species), colname -> true, rng = 123); +X = Float32.(X); # To be compatible with type of network network parameters +first(X, 5) + + +# ### Instantiating the model + +# Now let's construct our model. This follows a similar setup the one followed in the +# [Quick Start](../../index.md#Quick-Start). + +NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = "MLJFlux" +clf = NeuralNetworkClassifier( + builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu), + optimiser = Optimisers.ADAM(0.01), + batch_size = 8, + epochs = 10, + rng = 42, +) + + +# ### Generating Network Architectures + +# We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define +# a network with $k$ hidden layers and where the ith layer has $z_i$ neurons. We will +# proceed by defining a function that can generate all possible networks with a specific +# number of hidden layers, a minimum and maximum number of neurons per layer and +# increments to consider for the number of neurons. + +function generate_networks( + ;min_neurons::Int, + max_neurons::Int, + neuron_step::Int, + num_layers::Int, + ) + ## Define the range of neurons + neuron_range = min_neurons:neuron_step:max_neurons + + ## Empty list to store the network configurations + networks = Vector{Tuple{Vararg{Int, num_layers}}}() + + ## Recursive helper function to generate all combinations of tuples + function generate_tuple(current_layers, remaining_layers) + if remaining_layers > 0 + for n in neuron_range + ## current_layers =[] then current_layers=[(min_neurons)], + ## [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],... + ## for each of these we call generate_layers again which appends + ## the n combinations for each one of them + generate_tuple(vcat(current_layers, [n]), remaining_layers - 1) + end + else + ## in the base case, no more layers to "recurse on" + ## and we just append the current_layers as a tuple + push!(networks, tuple(current_layers...)) + end + end + + ## Generate networks for the given number of layers + generate_tuple([], num_layers) + + return networks +end + + +# Now let's generate an array of all possible neural networks with three hidden layers and +# number of neurons per layer ∈ [1,64] with a step of 4 +networks_space = + generate_networks( + min_neurons = 1, + max_neurons = 64, + neuron_step = 4, + num_layers = 3, + ) + +networks_space[1:5] + +# ### Wrapping the Model for Tuning + +# Let's use this array to define the range of hyperparameters and pass it along with the +# model to the `TunedModel` constructor. +r1 = range(clf, :(builder.hidden), values = networks_space) + +tuned_clf = TunedModel( + model = clf, + tuning = RandomSearch(), + resampling = CV(nfolds = 4, rng = 42), + range = [r1], + measure = cross_entropy, + n = 100, # searching over 100 random samples are enough +); + +# ### Performing the Search + +# Similar to the last workflow example, all we need now is to fit our model and the search +# will take place automatically: +mach = machine(tuned_clf, X, y); +fit!(mach, verbosity = 0); +fitted_params(mach).best_model + +# ### Analyzing the Search Results + +# Let's analyze the search results by converting the history array to a dataframe and +# viewing it: +history = report(mach).history +history_df = DataFrame( + mlp = [x[:model].builder for x in history], + measurement = [x[:measurement][1] for x in history], +) +first(sort!(history_df, [order(:measurement)]), 10) diff --git a/dev/common_workflows/architecture_search/notebook.unexecuted.ipynb b/dev/common_workflows/architecture_search/notebook.unexecuted.ipynb new file mode 100644 index 00000000..85b68135 --- /dev/null +++ b/dev/common_workflows/architecture_search/notebook.unexecuted.ipynb @@ -0,0 +1,314 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Neural Architecture Search with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/architecture_search)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Neural Architecture Search (NAS) is an instance of hyperparameter tuning concerned\n", + "with tuning model hyperparameters defining the architecture itself. Although it's\n", + "typically performed with sophisticated search algorithms for efficiency, in this example\n", + "we will be using a simple random search." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "using RDatasets: RDatasets # Dataset source\n", + "using DataFrames # To view tuning results in a table\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng = 123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters\n", + "first(X, 5)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's construct our model. This follows a similar setup the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = \"MLJFlux\"\n", + "clf = NeuralNetworkClassifier(\n", + " builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),\n", + " optimiser = Optimisers.ADAM(0.01),\n", + " batch_size = 8,\n", + " epochs = 10,\n", + " rng = 42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Generating Network Architectures" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define\n", + "a network with $k$ hidden layers and where the ith layer has $z_i$ neurons. We will\n", + "proceed by defining a function that can generate all possible networks with a specific\n", + "number of hidden layers, a minimum and maximum number of neurons per layer and\n", + "increments to consider for the number of neurons." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function generate_networks(\n", + " ;min_neurons::Int,\n", + " max_neurons::Int,\n", + " neuron_step::Int,\n", + " num_layers::Int,\n", + " )\n", + " # Define the range of neurons\n", + " neuron_range = min_neurons:neuron_step:max_neurons\n", + "\n", + " # Empty list to store the network configurations\n", + " networks = Vector{Tuple{Vararg{Int, num_layers}}}()\n", + "\n", + " # Recursive helper function to generate all combinations of tuples\n", + " function generate_tuple(current_layers, remaining_layers)\n", + " if remaining_layers > 0\n", + " for n in neuron_range\n", + " # current_layers =[] then current_layers=[(min_neurons)],\n", + " # [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...\n", + " # for each of these we call generate_layers again which appends\n", + " # the n combinations for each one of them\n", + " generate_tuple(vcat(current_layers, [n]), remaining_layers - 1)\n", + " end\n", + " else\n", + " # in the base case, no more layers to \"recurse on\"\n", + " # and we just append the current_layers as a tuple\n", + " push!(networks, tuple(current_layers...))\n", + " end\n", + " end\n", + "\n", + " # Generate networks for the given number of layers\n", + " generate_tuple([], num_layers)\n", + "\n", + " return networks\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now let's generate an array of all possible neural networks with three hidden layers and\n", + "number of neurons per layer ∈ [1,64] with a step of 4" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "networks_space =\n", + " generate_networks(\n", + " min_neurons = 1,\n", + " max_neurons = 64,\n", + " neuron_step = 4,\n", + " num_layers = 3,\n", + " )\n", + "\n", + "networks_space[1:5]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping the Model for Tuning" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's use this array to define the range of hyperparameters and pass it along with the\n", + "model to the `TunedModel` constructor." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "r1 = range(clf, :(builder.hidden), values = networks_space)\n", + "\n", + "tuned_clf = TunedModel(\n", + " model = clf,\n", + " tuning = RandomSearch(),\n", + " resampling = CV(nfolds = 4, rng = 42),\n", + " range = [r1],\n", + " measure = cross_entropy,\n", + " n = 100, # searching over 100 random samples are enough\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Performing the Search" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Similar to the last workflow example, all we need now is to fit our model and the search\n", + "will take place automatically:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(tuned_clf, X, y);\n", + "fit!(mach, verbosity = 0);\n", + "fitted_params(mach).best_model" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Analyzing the Search Results" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's analyze the search results by converting the history array to a dataframe and\n", + "viewing it:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "history = report(mach).history\n", + "history_df = DataFrame(\n", + " mlp = [x[:model].builder for x in history],\n", + " measurement = [x[:measurement][1] for x in history],\n", + ")\n", + "first(sort!(history_df, [order(:measurement)]), 10)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/architecture_search/notebook/index.html b/dev/common_workflows/architecture_search/notebook/index.html new file mode 100644 index 00000000..9f18496b --- /dev/null +++ b/dev/common_workflows/architecture_search/notebook/index.html @@ -0,0 +1,104 @@ + +Neural Architecture Search · MLJFlux

Neural Architecture Search with MLJFlux

This demonstration is available as a Jupyter notebook or julia script here.

Neural Architecture Search (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency, in this example we will be using a simple random search.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+using RDatasets: RDatasets        # Dataset source
+using DataFrames        # To view tuning results in a table
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng = 123);
+X = Float32.(X);      # To be compatible with type of network network parameters
+first(X, 5)
5×4 DataFrame
RowSepalLengthSepalWidthPetalLengthPetalWidth
Float32Float32Float32Float32
16.73.35.72.1
25.72.84.11.3
37.23.05.81.6
44.42.91.40.2
55.62.53.91.1

Instantiating the model

Now let's construct our model. This follows a similar setup the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = "MLJFlux"
+clf = NeuralNetworkClassifier(
+    builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),
+    optimiser = Optimisers.ADAM(0.01),
+    batch_size = 8,
+    epochs = 10,
+    rng = 42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (1, 1, 1), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Generating Network Architectures

We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define a network with $k$ hidden layers and where the ith layer has $z_i$ neurons. We will proceed by defining a function that can generate all possible networks with a specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons.

function generate_networks(
+    ;min_neurons::Int,
+    max_neurons::Int,
+    neuron_step::Int,
+    num_layers::Int,
+    )
+    # Define the range of neurons
+    neuron_range = min_neurons:neuron_step:max_neurons
+
+    # Empty list to store the network configurations
+    networks = Vector{Tuple{Vararg{Int, num_layers}}}()
+
+    # Recursive helper function to generate all combinations of tuples
+    function generate_tuple(current_layers, remaining_layers)
+        if remaining_layers > 0
+            for n in neuron_range
+                # current_layers =[] then current_layers=[(min_neurons)],
+                # [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...
+                # for each of these we call generate_layers again which appends
+                # the n combinations for each one of them
+                generate_tuple(vcat(current_layers, [n]), remaining_layers - 1)
+            end
+        else
+            # in the base case, no more layers to "recurse on"
+            # and we just append the current_layers as a tuple
+            push!(networks, tuple(current_layers...))
+        end
+    end
+
+    # Generate networks for the given number of layers
+    generate_tuple([], num_layers)
+
+    return networks
+end
generate_networks (generic function with 1 method)

Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4

networks_space =
+    generate_networks(
+        min_neurons = 1,
+        max_neurons = 64,
+        neuron_step = 4,
+        num_layers = 3,
+    )
+
+networks_space[1:5]
5-element Vector{Tuple{Int64, Int64, Int64}}:
+ (1, 1, 1)
+ (1, 1, 5)
+ (1, 1, 9)
+ (1, 1, 13)
+ (1, 1, 17)

Wrapping the Model for Tuning

Let's use this array to define the range of hyperparameters and pass it along with the model to the TunedModel constructor.

r1 = range(clf, :(builder.hidden), values = networks_space)
+
+tuned_clf = TunedModel(
+    model = clf,
+    tuning = RandomSearch(),
+    resampling = CV(nfolds = 4, rng = 42),
+    range = [r1],
+    measure = cross_entropy,
+    n = 100,             # searching over 100 random samples are enough
+);

Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically:

mach = machine(tuned_clf, X, y);
+fit!(mach, verbosity = 0);
+fitted_params(mach).best_model
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (25, 29, 45), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Analyzing the Search Results

Let's analyze the search results by converting the history array to a dataframe and viewing it:

history = report(mach).history
+history_df = DataFrame(
+    mlp = [x[:model].builder for x in history],
+    measurement = [x[:measurement][1] for x in history],
+)
+first(sort!(history_df, [order(:measurement)]), 10)
10×2 DataFrame
Rowmlpmeasurement
MLP…Float64
1MLP(hidden = (25, 29, 45), …)0.0812277
2MLP(hidden = (21, 9, 41), …)0.0817329
3MLP(hidden = (33, 25, 57), …)0.0857974
4MLP(hidden = (21, 9, 45), …)0.0905676
5MLP(hidden = (29, 57, 49), …)0.0927865
6MLP(hidden = (49, 13, 61), …)0.0957713
7MLP(hidden = (21, 9, 13), …)0.0966514
8MLP(hidden = (25, 41, 45), …)0.0971129
9MLP(hidden = (21, 41, 61), …)0.0981502
10MLP(hidden = (49, 53, 29), …)0.0998882

This page was generated using Literate.jl.

diff --git a/dev/common_workflows/comparison/Manifest.toml b/dev/common_workflows/comparison/Manifest.toml new file mode 100644 index 00000000..cc7f5095 --- /dev/null +++ b/dev/common_workflows/comparison/Manifest.toml @@ -0,0 +1,2089 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "40dffa20f32b34504f6cb1153eb426c75630d036" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Arpack]] +deps = ["Arpack_jll", "Libdl", "LinearAlgebra", "Logging"] +git-tree-sha1 = "9b9b347613394885fd1c8c7729bfc60528faa436" +uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" +version = "0.5.4" + +[[deps.Arpack_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS_jll", "Pkg"] +git-tree-sha1 = "5ba6c757e8feccf03a1554dfaf3e26b3cfc7fd5e" +uuid = "68821587-b530-5797-8361-c406ea357684" +version = "3.5.1+1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.CUDA_Driver_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "c48f9da18efd43b6b7adb7ee1f93fe5f2926c339" +uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" +version = "0.9.0+0" + +[[deps.CUDA_Runtime_jll]] +deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "bcba305388e16aa5c879e896726db9e71b4942c6" +uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" +version = "0.14.0+1" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" +weakdeps = ["JSON", "RecipesBase", "SentinelArrays", "StructTypes"] + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.25.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DecisionTree]] +deps = ["AbstractTrees", "DelimitedFiles", "LinearAlgebra", "Random", "ScikitLearnBase", "Statistics"] +git-tree-sha1 = "526ca14aaaf2d5a0e242f3a8a7966eb9065d7d78" +uuid = "7806a523-6efd-50cb-b5f6-3fa6f1930dbb" +version = "0.12.4" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +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.4+1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "ff38ba61beff76b8f4acad8ab0c97ef73bb670cb" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.9+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.5" + +[[deps.GR_jll]] +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 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.5+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +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" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JSON3]] +deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] +git-tree-sha1 = "eb3edce0ed4fa32f75a0a11217433c31d56bd48b" +uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" +version = "1.14.0" + + [deps.JSON3.extensions] + JSON3ArrowExt = ["ArrowTypes"] + + [deps.JSON3.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "e0b5cd21dc1b44ec6e64f351976f961e6f31d6c4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.3" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJDecisionTreeInterface]] +deps = ["CategoricalArrays", "DecisionTree", "MLJModelInterface", "Random", "Tables"] +git-tree-sha1 = "90ef4d3b6cacec631c57cc034e1e61b4aa0ce511" +uuid = "c6f25543-311c-4c74-83dc-3ea6d1015661" +version = "0.4.2" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJMultivariateStatsInterface]] +deps = ["CategoricalDistributions", "Distances", "LinearAlgebra", "MLJModelInterface", "MultivariateStats", "StatsBase"] +git-tree-sha1 = "0d76e36bf83926235dcd3eaeafa7f47d3e7f32ea" +uuid = "1b6a4a23-ba22-4f51-9698-8599985d3728" +version = "0.5.3" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLJXGBoostInterface]] +deps = ["MLJModelInterface", "SparseArrays", "Tables", "XGBoost"] +git-tree-sha1 = "988c399a352f0b49bc1345c509d8a4800cb468c5" +uuid = "54119dfa-1dab-4055-a167-80440f4f7a91" +version = "0.3.10" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.MultivariateStats]] +deps = ["Arpack", "Distributions", "LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI", "StatsBase"] +git-tree-sha1 = "816620e3aac93e5b5359e4fdaf23ca4525b00ddf" +uuid = "6f286f6a-111f-5878-ab1e-185364afe411" +version = "0.10.3" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.2.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[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", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[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 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.ScikitLearnBase]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "7877e55c1523a4b336b433da39c8e8c08d2f221f" +uuid = "6e75b9c4-186b-50bd-896f-2d2496a4843e" +version = "0.5.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SparseMatricesCSR]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "38677ca58e80b5cad2382e5a1848f93b054ad28d" +uuid = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" +version = "0.6.7" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70" +uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" +version = "1.10.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.Unzip]] +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.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XGBoost]] +deps = ["AbstractTrees", "CEnum", "JSON3", "LinearAlgebra", "OrderedCollections", "SparseArrays", "SparseMatricesCSR", "Statistics", "Tables", "XGBoost_jll"] +git-tree-sha1 = "bacb62e07d104630094c8dac2fd070f5d4b9b305" +uuid = "009559a3-9522-5dbb-924b-0b6ed2b22bb9" +version = "2.5.1" + + [deps.XGBoost.extensions] + XGBoostCUDAExt = "CUDA" + XGBoostTermExt = "Term" + + [deps.XGBoost.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Term = "22787eb5-b846-44ae-b979-8e399b8463ab" + +[[deps.XGBoost_jll]] +deps = ["Artifacts", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "1c0aa2390a7ebb28a3d6c214f64e57a24091fbd7" +uuid = "a5c6f535-4255-5ca2-a466-0e519f119c46" +version = "2.0.1+0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.12.7+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+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" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[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"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[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 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[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", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+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 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[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" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +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" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" diff --git a/dev/workflow examples/Comparison/Project.toml b/dev/common_workflows/comparison/Project.toml similarity index 92% rename from dev/workflow examples/Comparison/Project.toml rename to dev/common_workflows/comparison/Project.toml index 69b34c38..49b9b810 100644 --- a/dev/workflow examples/Comparison/Project.toml +++ b/dev/common_workflows/comparison/Project.toml @@ -8,5 +8,6 @@ MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" MLJMultivariateStatsInterface = "1b6a4a23-ba22-4f51-9698-8599985d3728" MLJXGBoostInterface = "54119dfa-1dab-4055-a167-80440f4f7a91" MultivariateStats = "6f286f6a-111f-5878-ab1e-185364afe411" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/comparison/README/index.html b/dev/common_workflows/comparison/README/index.html new file mode 100644 index 00000000..7d406415 --- /dev/null +++ b/dev/common_workflows/comparison/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/comparison/generate.jl b/dev/common_workflows/comparison/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/comparison/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/workflow examples/Comparison/comparison.ipynb b/dev/common_workflows/comparison/notebook.ipynb similarity index 68% rename from dev/workflow examples/Comparison/comparison.ipynb rename to dev/common_workflows/comparison/notebook.ipynb index e6d5f3b1..8163b302 100644 --- a/dev/workflow examples/Comparison/comparison.ipynb +++ b/dev/common_workflows/comparison/notebook.ipynb @@ -10,10 +10,38 @@ { "cell_type": "markdown", "source": [ - "In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux." + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/comparison)." ], "metadata": {} }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we see how we can compare different machine learning models\n", + "with a neural network from MLJFlux." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/common_workflows/comparison`\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, { "cell_type": "markdown", "source": [ @@ -35,10 +63,11 @@ "using MLJ # Has MLJFlux models\n", "using Flux # For more flexibility\n", "import RDatasets # Dataset source\n", - "using DataFrames # To visualize hyperparameter search results" + "using DataFrames # To visualize hyperparameter search results\n", + "import Optimisers # native Flux.jl optimisers no longer supported" ], "metadata": {}, - "execution_count": 1 + "execution_count": 2 }, { "cell_type": "markdown", @@ -55,13 +84,13 @@ "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);" ], "metadata": {}, - "execution_count": 2 + "execution_count": 3 }, { "cell_type": "markdown", "source": [ - "### Instantiating the models\n", - "Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start)." + "### Instantiating the models Now let's construct our model. This follows a similar setup\n", + "to the one followed in the [Quick Start](../../index.md#Quick-Start)." ], "metadata": {} }, @@ -78,10 +107,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" }, "metadata": {}, - "execution_count": 3 + "execution_count": 4 } ], "cell_type": "code", @@ -90,14 +119,14 @@ "\n", "clf1 = NeuralNetworkClassifier(\n", " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", + " optimiser=Optimisers.Adam(0.01),\n", " batch_size=8,\n", " epochs=50,\n", " rng=42\n", " )" ], "metadata": {}, - "execution_count": 3 + "execution_count": 4 }, { "cell_type": "markdown", @@ -131,14 +160,21 @@ "clf4 = XGBoostClassifier();" ], "metadata": {}, - "execution_count": 4 + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping One of the Models in a TunedModel" + ], + "metadata": {} }, { "cell_type": "markdown", "source": [ - "### Wrapping One of the Models in a TunedModel\n", - "Instead of just comparing with four models with the default/given hyperparameters, we will give `XGBoostClassifier` an unfair advantage\n", - "By wrapping it in a `TunedModel` that considers the best learning rate η for the model." + "Instead of just comparing with four models with the default/given hyperparameters, we\n", + "will give `XGBoostClassifier` an unfair advantage By wrapping it in a `TunedModel` that\n", + "considers the best learning rate η for the model." ], "metadata": {} }, @@ -156,19 +192,26 @@ ");" ], "metadata": {}, - "execution_count": 5 + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Of course, one can wrap each of the four in a TunedModel if they are interested in\n", + "comparing the models over a large set of their hyperparameters." + ], + "metadata": {} }, { "cell_type": "markdown", "source": [ - "Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters." + "### Comparing the models" ], "metadata": {} }, { "cell_type": "markdown", "source": [ - "### Comparing the models\n", "We simply pass the four models to the `models` argument of the `TunedModel` construct" ], "metadata": {} @@ -185,7 +228,7 @@ ");" ], "metadata": {}, - "execution_count": 6 + "execution_count": 7 }, { "cell_type": "markdown", @@ -214,7 +257,7 @@ "fit!(mach, verbosity=0);" ], "metadata": {}, - "execution_count": 7 + "execution_count": 8 }, { "cell_type": "markdown", @@ -228,23 +271,26 @@ { "output_type": "execute_result", "data": { - "text/plain": "\u001b[1m4×2 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m mlp \u001b[0m\u001b[1m measurement \u001b[0m\n │\u001b[90m Probabil… \u001b[0m\u001b[90m Float64 \u001b[0m\n─────┼────────────────────────────────────────────────\n 1 │ BayesianLDA(method = gevd, …) 0.0610826\n 2 │ RandomForestClassifier(max_depth… 0.0996176\n 3 │ NeuralNetworkClassifier(builder … 0.113266\n 4 │ ProbabilisticTunedModel(model = … 0.221056", + "text/plain": "\u001b[1m4×2 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m mlp \u001b[0m\u001b[1m measurement \u001b[0m\n │\u001b[90m Probabil… \u001b[0m\u001b[90m Float64 \u001b[0m\n─────┼────────────────────────────────────────────────\n 1 │ BayesianLDA(method = gevd, …) 0.0610826\n 2 │ NeuralNetworkClassifier(builder … 0.0857014\n 3 │ RandomForestClassifier(max_depth… 0.102881\n 4 │ ProbabilisticTunedModel(model = … 0.221056", "text/html": [ - "
4×2 DataFrame
Rowmlpmeasurement
Probabil…Float64
1BayesianLDA(method = gevd, …)0.0610826
2RandomForestClassifier(max_depth = -1, …)0.0996176
3NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)0.113266
4ProbabilisticTunedModel(model = XGBoostClassifier(test = 1, …), …)0.221056
" + "
4×2 DataFrame
Rowmlpmeasurement
Probabil…Float64
1BayesianLDA(method = gevd, …)0.0610826
2NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)0.0857014
3RandomForestClassifier(max_depth = -1, …)0.102881
4ProbabilisticTunedModel(model = XGBoostClassifier(test = 1, …), …)0.221056
" ] }, "metadata": {}, - "execution_count": 8 + "execution_count": 9 } ], "cell_type": "code", "source": [ "history = report(mach).history\n", - "history_df = DataFrame(mlp = [x[:model] for x in history], measurement = [x[:measurement][1] for x in history])\n", + "history_df = DataFrame(\n", + " mlp = [x[:model] for x in history],\n", + " measurement = [x[:measurement][1] for x in history],\n", + ")\n", "sort!(history_df, [order(:measurement)])" ], "metadata": {}, - "execution_count": 8 + "execution_count": 9 }, { "cell_type": "markdown", @@ -269,11 +315,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.0" + "version": "1.10.3" }, "kernelspec": { "name": "julia-1.10", - "display_name": "Julia 1.10.0", + "display_name": "Julia 1.10.3", "language": "julia" } }, diff --git a/dev/workflow examples/Comparison/comparison.jl b/dev/common_workflows/comparison/notebook.jl similarity index 67% rename from dev/workflow examples/Comparison/comparison.jl rename to dev/common_workflows/comparison/notebook.jl index b780958b..4d75c49d 100644 --- a/dev/workflow examples/Comparison/comparison.jl +++ b/dev/common_workflows/comparison/notebook.jl @@ -1,18 +1,24 @@ # # Model Comparison with MLJFlux -# In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux. -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/comparison). + +# In this workflow example, we see how we can compare different machine learning models +# with a neural network from MLJFlux. +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md # **Julia version** is assumed to be 1.10.* + # ### Basic Imports using MLJ # Has MLJFlux models using Flux # For more flexibility import RDatasets # Dataset source using DataFrames # To visualize hyperparameter search results +import Optimisers # native Flux.jl optimisers no longer supported # ### Loading and Splitting the Data @@ -20,17 +26,16 @@ iris = RDatasets.dataset("datasets", "iris"); y, X = unpack(iris, ==(:Species), colname -> true, rng=123); - -# ### Instantiating the models -# Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start). +# ### Instantiating the models Now let's construct our model. This follows a similar setup +# to the one followed in the [Quick Start](../../index.md#Quick-Start). NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux clf1 = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=50, + epochs=50, rng=42 ) @@ -44,8 +49,10 @@ clf4 = XGBoostClassifier(); # ### Wrapping One of the Models in a TunedModel -# Instead of just comparing with four models with the default/given hyperparameters, we will give `XGBoostClassifier` an unfair advantage -# By wrapping it in a `TunedModel` that considers the best learning rate η for the model. + +# Instead of just comparing with four models with the default/given hyperparameters, we +# will give `XGBoostClassifier` an unfair advantage By wrapping it in a `TunedModel` that +# considers the best learning rate η for the model. r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10) tuned_model_xg = TunedModel( @@ -56,10 +63,13 @@ tuned_model_xg = TunedModel( measure=cross_entropy, ); -# Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters. +# Of course, one can wrap each of the four in a TunedModel if they are interested in +# comparing the models over a large set of their hyperparameters. # ### Comparing the models + # We simply pass the four models to the `models` argument of the `TunedModel` construct + tuned_model = TunedModel( models=[clf1, clf2, clf3, tuned_model_xg], tuning=Explicit(), @@ -68,16 +78,16 @@ tuned_model = TunedModel( ); # Then wrapping our tuned model in a machine and fitting it. + mach = machine(tuned_model, X, y); fit!(mach, verbosity=0); # Now let's see the history for more details on the performance for each of the models history = report(mach).history -history_df = DataFrame(mlp = [x[:model] for x in history], measurement = [x[:measurement][1] for x in history]) +history_df = DataFrame( + mlp = [x[:model] for x in history], + measurement = [x[:measurement][1] for x in history], +) sort!(history_df, [order(:measurement)]) # This is Occam's razor in practice. - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=true) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src diff --git a/dev/common_workflows/comparison/notebook.unexecuted.ipynb b/dev/common_workflows/comparison/notebook.unexecuted.ipynb new file mode 100644 index 00000000..b8517a90 --- /dev/null +++ b/dev/common_workflows/comparison/notebook.unexecuted.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Model Comparison with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/comparison)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we see how we can compare different machine learning models\n", + "with a neural network from MLJFlux." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "using DataFrames # To visualize hyperparameter search results\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the models Now let's construct our model. This follows a similar setup\n", + "to the one followed in the [Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "\n", + "clf1 = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=50,\n", + " rng=42\n", + " )" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's as well load and construct three other classical machine learning models:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "BayesianLDA = @load BayesianLDA pkg=MultivariateStats\n", + "clf2 = BayesianLDA()\n", + "RandomForestClassifier = @load RandomForestClassifier pkg=DecisionTree\n", + "clf3 = RandomForestClassifier()\n", + "XGBoostClassifier = @load XGBoostClassifier pkg=XGBoost\n", + "clf4 = XGBoostClassifier();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping One of the Models in a TunedModel" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Instead of just comparing with four models with the default/given hyperparameters, we\n", + "will give `XGBoostClassifier` an unfair advantage By wrapping it in a `TunedModel` that\n", + "considers the best learning rate η for the model." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10)\n", + "tuned_model_xg = TunedModel(\n", + " model=clf4,\n", + " ranges=[r1],\n", + " tuning=Grid(resolution=10),\n", + " resampling=CV(nfolds=5, rng=42),\n", + " measure=cross_entropy,\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Of course, one can wrap each of the four in a TunedModel if they are interested in\n", + "comparing the models over a large set of their hyperparameters." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Comparing the models" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We simply pass the four models to the `models` argument of the `TunedModel` construct" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tuned_model = TunedModel(\n", + " models=[clf1, clf2, clf3, tuned_model_xg],\n", + " tuning=Explicit(),\n", + " resampling=CV(nfolds=5, rng=42),\n", + " measure=cross_entropy,\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then wrapping our tuned model in a machine and fitting it." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(tuned_model, X, y);\n", + "fit!(mach, verbosity=0);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now let's see the history for more details on the performance for each of the models" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "history = report(mach).history\n", + "history_df = DataFrame(\n", + " mlp = [x[:model] for x in history],\n", + " measurement = [x[:measurement][1] for x in history],\n", + ")\n", + "sort!(history_df, [order(:measurement)])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This is Occam's razor in practice." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/comparison/notebook/index.html b/dev/common_workflows/comparison/notebook/index.html new file mode 100644 index 00000000..18cc14f6 --- /dev/null +++ b/dev/common_workflows/comparison/notebook/index.html @@ -0,0 +1,60 @@ + +Model Comparison · MLJFlux

Model Comparison with MLJFlux

This demonstration is available as a Jupyter notebook or julia script here.

In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+import RDatasets        # Dataset source
+using DataFrames        # To visualize hyperparameter search results
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);

Instantiating the models Now let's construct our model. This follows a similar setup

to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
+
+clf1 = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=50,
+    rng=42
+    )
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 50, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Let's as well load and construct three other classical machine learning models:

BayesianLDA = @load BayesianLDA pkg=MultivariateStats
+clf2 = BayesianLDA()
+RandomForestClassifier = @load RandomForestClassifier pkg=DecisionTree
+clf3 = RandomForestClassifier()
+XGBoostClassifier = @load XGBoostClassifier pkg=XGBoost
+clf4 = XGBoostClassifier();
[ Info: For silent loading, specify `verbosity=0`.
+import MLJMultivariateStatsInterface ✔
+[ Info: For silent loading, specify `verbosity=0`.
+import MLJDecisionTreeInterface ✔
+[ Info: For silent loading, specify `verbosity=0`.
+import MLJXGBoostInterface ✔

Wrapping One of the Models in a TunedModel

Instead of just comparing with four models with the default/given hyperparameters, we will give XGBoostClassifier an unfair advantage By wrapping it in a TunedModel that considers the best learning rate η for the model.

r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10)
+tuned_model_xg = TunedModel(
+    model=clf4,
+    ranges=[r1],
+    tuning=Grid(resolution=10),
+    resampling=CV(nfolds=5, rng=42),
+    measure=cross_entropy,
+);

Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters.

Comparing the models

We simply pass the four models to the models argument of the TunedModel construct

tuned_model = TunedModel(
+    models=[clf1, clf2, clf3, tuned_model_xg],
+    tuning=Explicit(),
+    resampling=CV(nfolds=5, rng=42),
+    measure=cross_entropy,
+);

Then wrapping our tuned model in a machine and fitting it.

mach = machine(tuned_model, X, y);
+fit!(mach, verbosity=0);
┌ Warning: Layer with Float32 parameters got Float64 input.
+│   The input will be converted, but any earlier layers may be very slow.
+│   layer = Dense(4 => 5, relu)  # 25 parameters
+│   summary(x) = "4×8 Matrix{Float64}"
+└ @ Flux ~/.julia/packages/Flux/Wz6D4/src/layers/stateless.jl:60

Now let's see the history for more details on the performance for each of the models

history = report(mach).history
+history_df = DataFrame(
+    mlp = [x[:model] for x in history],
+    measurement = [x[:measurement][1] for x in history],
+)
+sort!(history_df, [order(:measurement)])
4×2 DataFrame
Rowmlpmeasurement
Probabil…Float64
1BayesianLDA(method = gevd, …)0.0610826
2NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)0.0857014
3RandomForestClassifier(max_depth = -1, …)0.102431
4ProbabilisticTunedModel(model = XGBoostClassifier(test = 1, …), …)0.221056

This is Occam's razor in practice.


This page was generated using Literate.jl.

diff --git a/dev/common_workflows/composition/Manifest.toml b/dev/common_workflows/composition/Manifest.toml new file mode 100644 index 00000000..c4f42e22 --- /dev/null +++ b/dev/common_workflows/composition/Manifest.toml @@ -0,0 +1,1489 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "99b4ea563e30c60eaf60c8393a5edf34416a3ab4" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.7" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.Clustering]] +deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "Random", "SparseArrays", "Statistics", "StatsBase"] +git-tree-sha1 = "9ebb045901e9bbf58767a9f34ff89831ed711aae" +uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" +version = "0.15.7" + +[[deps.CoDa]] +deps = ["AxisArrays", "Distances", "Distributions", "FillArrays", "LinearAlgebra", "Printf", "Random", "StaticArrays", "Statistics", "Tables"] +git-tree-sha1 = "0ae819d8911029b988479b8b447bf4fad4b5bfa7" +uuid = "5900dafe-f573-5c72-b367-76665857777b" +version = "1.4.0" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColumnSelectors]] +git-tree-sha1 = "221157488d6e5942ef8cc53086cad651b632ed4e" +uuid = "9cc86067-7e36-4c61-b350-1ac9833d277f" +version = "0.1.1" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataScienceTraits]] +deps = ["Dates"] +git-tree-sha1 = "ba239c8cf83cae0103012672cfba8abc6bc898c9" +uuid = "6cb2f572-2d2b-4ba6-bdb3-e710fa044d6c" +version = "0.3.1" + + [deps.DataScienceTraits.extensions] + DataScienceTraitsCategoricalArraysExt = "CategoricalArrays" + DataScienceTraitsCoDaExt = "CoDa" + DataScienceTraitsDistributionsExt = "Distributions" + DataScienceTraitsDynamicQuantitiesExt = "DynamicQuantities" + DataScienceTraitsMeshesExt = "Meshes" + DataScienceTraitsUnitfulExt = "Unitful" + + [deps.DataScienceTraits.weakdeps] + CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" + CoDa = "5900dafe-f573-5c72-b367-76665857777b" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" + Meshes = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.Imbalance]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Clustering", "Distances", "LinearAlgebra", "MLJModelInterface", "MLJTestInterface", "NearestNeighbors", "OrderedCollections", "ProgressMeter", "Random", "ScientificTypes", "Statistics", "StatsBase", "TableOperations", "TableTransforms", "Tables", "TransformsBase"] +git-tree-sha1 = "f39c71f6099147ad29fcf87d3ed18ce1e5b3b615" +uuid = "c709b415-507b-45b7-9a3d-1767c89fde68" +version = "0.1.6" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.IntervalSets]] +git-tree-sha1 = "dba9ddf07f77f60450fe5d2e2beb9854d9a49bd0" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.10" +weakdeps = ["Random", "RecipesBase", "Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "e7cbed5032c4c397a6ac23d1493f3289e01231c4" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.14" +weakdeps = ["Dates"] + + [deps.InverseFunctions.extensions] + DatesExt = "Dates" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTestInterface]] +deps = ["MLJBase", "Pkg", "Test"] +git-tree-sha1 = "f72bad656f93179b31c8bdcab15ccd2091e7da3c" +uuid = "72560011-54dd-4dc2-94f3-c5de45b75ecd" +version = "0.2.6" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "ded64ff6d4fdd1cb68dfcbb818c69e144a5b2e4c" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.16" + +[[deps.NelderMead]] +git-tree-sha1 = "25abc2f9b1c752e69229f37909461befa7c1f85d" +uuid = "2f6b4ddb-b4ff-44c0-b59b-2ab99302f970" +version = "0.4.0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableOperations]] +deps = ["SentinelArrays", "Tables", "Test"] +git-tree-sha1 = "e383c87cf2a1dc41fa30c093b2a19877c83e1bc1" +uuid = "ab02a1b2-a7df-11e8-156e-fb1833f50b87" +version = "1.2.0" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.TableTransforms]] +deps = ["AbstractTrees", "CategoricalArrays", "CoDa", "ColumnSelectors", "DataScienceTraits", "Distributions", "InverseFunctions", "LinearAlgebra", "NelderMead", "PrettyTables", "Random", "Statistics", "StatsBase", "Tables", "Transducers", "TransformsBase", "Unitful"] +git-tree-sha1 = "dae558bb3b3853db52d15750834af9e47e8fea6e" +uuid = "0d432bfd-3ee1-4ac1-886a-39f05cc69a3e" +version = "1.31.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.TransformsBase]] +deps = ["AbstractTrees"] +git-tree-sha1 = "484610e9b25a45f015f3e695c6d307e91883f2d3" +uuid = "28dd2a49-a57a-4bfb-84ca-1a49db9b96b8" +version = "1.4.1" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" +weakdeps = ["ConstructionBase", "InverseFunctions"] + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" diff --git a/dev/workflow examples/Composition/Project.toml b/dev/common_workflows/composition/Project.toml similarity index 87% rename from dev/workflow examples/Composition/Project.toml rename to dev/common_workflows/composition/Project.toml index d10ca3c4..8b6bea93 100644 --- a/dev/workflow examples/Composition/Project.toml +++ b/dev/common_workflows/composition/Project.toml @@ -5,4 +5,5 @@ Imbalance = "c709b415-507b-45b7-9a3d-1767c89fde68" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJBalancing = "45f359ea-796d-4f51-95a5-deb1a414c586" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/composition/README/index.html b/dev/common_workflows/composition/README/index.html new file mode 100644 index 00000000..ea888f29 --- /dev/null +++ b/dev/common_workflows/composition/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/composition/generate.jl b/dev/common_workflows/composition/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/composition/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/workflow examples/Composition/composition.ipynb b/dev/common_workflows/composition/notebook.ipynb similarity index 52% rename from dev/workflow examples/Composition/composition.ipynb rename to dev/common_workflows/composition/notebook.ipynb index 710660f7..ced33e3c 100644 --- a/dev/workflow examples/Composition/composition.ipynb +++ b/dev/common_workflows/composition/notebook.ipynb @@ -10,11 +10,39 @@ { "cell_type": "markdown", "source": [ - "In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a\n", - "class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux." + "This tutorial is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/composition)." ], "metadata": {} }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux\n", + "models. We will assume a class imbalance setting and wrap an oversampler with a deep\n", + "learning model from MLJFlux." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/common_workflows/composition`\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, { "cell_type": "markdown", "source": [ @@ -37,10 +65,11 @@ "using Flux # For more flexibility\n", "import RDatasets # Dataset source\n", "import Random # To create imbalance\n", - "import Imbalance # To solve the imbalance" + "import Imbalance # To solve the imbalance\n", + "import Optimisers # native Flux.jl optimisers no longer supported" ], "metadata": {}, - "execution_count": 1 + "execution_count": 2 }, { "cell_type": "markdown", @@ -58,7 +87,7 @@ "X = Float32.(X); # To be compatible with type of network network parameters" ], "metadata": {}, - "execution_count": 2 + "execution_count": 3 }, { "cell_type": "markdown", @@ -87,7 +116,7 @@ "Imbalance.checkbalance(y)" ], "metadata": {}, - "execution_count": 3 + "execution_count": 4 }, { "cell_type": "markdown", @@ -99,7 +128,8 @@ { "cell_type": "markdown", "source": [ - "Let's load `BorderlineSMOTE1` to oversample the data and `Standardizer` to standardize it." + "Let's load `BorderlineSMOTE1` to oversample the data and `Standardizer` to standardize\n", + "it." ], "metadata": {} }, @@ -116,34 +146,58 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" + "text/plain": "MLJFlux.NeuralNetworkClassifier" }, "metadata": {}, - "execution_count": 4 + "execution_count": 5 } ], "cell_type": "code", "source": [ "BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0\n", - "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", - "# We didn't need to load Standardizer because it is a local model for MLJ (see `localmodels()`)\n", - "\n", + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We didn't need to load Standardizer because it is a local model for MLJ (see\n", + "`localmodels()`)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ "clf = NeuralNetworkClassifier(\n", " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", + " optimiser=Optimisers.Adam(0.01),\n", " batch_size=8,\n", " epochs=50,\n", - " rng=42\n", - " )" + " rng=42,\n", + ")" ], "metadata": {}, - "execution_count": 4 + "execution_count": 6 }, { "cell_type": "markdown", "source": [ - "First we wrap the oversampler with the neural network via the `BalancedModel` construct. This comes from `MLJBalancing`\n", - "And allows combining resampling methods with MLJ models in a sequential pipeline." + "First we wrap the oversampler with the neural network via the `BalancedModel`\n", + "construct. This comes from `MLJBalancing` And allows combining resampling methods with\n", + "MLJ models in a sequential pipeline." ], "metadata": {} }, @@ -155,7 +209,7 @@ "text/plain": "Standardizer(\n features = Symbol[], \n ignore = false, \n ordered_factor = false, \n count = false)" }, "metadata": {}, - "execution_count": 5 + "execution_count": 7 } ], "cell_type": "code", @@ -165,7 +219,7 @@ "standarizer = Standardizer()" ], "metadata": {}, - "execution_count": 5 + "execution_count": 7 }, { "cell_type": "markdown", @@ -182,7 +236,7 @@ "text/plain": "ProbabilisticPipeline(\n standardizer = Standardizer(\n features = Symbol[], \n ignore = false, \n ordered_factor = false, \n count = false), \n balanced_model_probabilistic = BalancedModelProbabilistic(\n model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), \n balancer1 = BorderlineSMOTE1(m = 5, …)), \n cache = true)" }, "metadata": {}, - "execution_count": 6 + "execution_count": 8 } ], "cell_type": "code", @@ -190,21 +244,27 @@ "pipeline = standarizer |> balanced_model" ], "metadata": {}, - "execution_count": 6 + "execution_count": 8 }, { "cell_type": "markdown", "source": [ - "By this, any training data will be standardized then oversampled then passed to the model. Meanwhile,\n", - "for inference, the standardizer will automatically use the training set's mean and std and the oversampler\n", - "will be transparent." + "By this, any training data will be standardized then oversampled then passed to the\n", + "model. Meanwhile, for inference, the standardizer will automatically use the training\n", + "set's mean and std and the oversampler will be transparent." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Training the Composed Model" ], "metadata": {} }, { "cell_type": "markdown", "source": [ - "### Training the Composed Model\n", "It's indistinguishable from training a single model." ], "metadata": {} @@ -221,13 +281,10 @@ "[ Info: Training machine(BorderlineSMOTE1(m = 5, …), …).\n", "[ Info: Training machine(:model, …).\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", - "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", - "┌ Warning: Layer with Float32 parameters got Float64 input.\n", - "│ The input will be converted, but any earlier layers may be very slow.\n", - "│ layer = Dense(4 => 5, relu) # 25 parameters\n", - "│ summary(x) = \"4×8 Matrix{Float64}\"\n", - "└ @ Flux ~/.julia/packages/Flux/Wz6D4/src/layers/stateless.jl:60\n", - "\rOptimising neural net: 4%[> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 47%[===========> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 49%[============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 51%[============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 53%[=============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 55%[=============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 57%[==============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 59%[==============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 61%[===============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 63%[===============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 65%[================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 67%[================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 69%[=================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 71%[=================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 73%[==================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 75%[==================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 76%[===================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 78%[===================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 80%[====================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 82%[====================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 84%[=====================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 86%[=====================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 88%[======================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 90%[======================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 92%[=======================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 94%[=======================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 96%[========================>] ETA: 0:00:00\u001b[K\rOptimising neural net: 98%[========================>] ETA: 0:00:00\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:00\u001b[K\n", + "\rProgress: 13%|███████▏ | ETA: 0:00:01\u001b[K\rProgress: 100%|█████████████████████████████████████████████████████| Time: 0:00:00\u001b[K\n", + "\rProgress: 67%|███████████████████████████████████▍ | ETA: 0:00:01\u001b[K\r\n", + " class: virginica\u001b[K\r\u001b[A[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", + "\rOptimising neural net: 4%[> ] ETA: 0:05:10\u001b[K\rOptimising neural net: 6%[=> ] ETA: 0:03:22\u001b[K\rOptimising neural net: 8%[=> ] ETA: 0:02:29\u001b[K\rOptimising neural net: 10%[==> ] ETA: 0:01:56\u001b[K\rOptimising neural net: 12%[==> ] ETA: 0:01:35\u001b[K\rOptimising neural net: 14%[===> ] ETA: 0:01:20\u001b[K\rOptimising neural net: 16%[===> ] ETA: 0:01:08\u001b[K\rOptimising neural net: 18%[====> ] ETA: 0:00:59\u001b[K\rOptimising neural net: 20%[====> ] ETA: 0:00:52\u001b[K\rOptimising neural net: 22%[=====> ] ETA: 0:00:46\u001b[K\rOptimising neural net: 24%[=====> ] ETA: 0:00:41\u001b[K\rOptimising neural net: 25%[======> ] ETA: 0:00:37\u001b[K\rOptimising neural net: 27%[======> ] ETA: 0:00:33\u001b[K\rOptimising neural net: 29%[=======> ] ETA: 0:00:30\u001b[K\rOptimising neural net: 31%[=======> ] ETA: 0:00:28\u001b[K\rOptimising neural net: 33%[========> ] ETA: 0:00:25\u001b[K\rOptimising neural net: 35%[========> ] ETA: 0:00:23\u001b[K\rOptimising neural net: 37%[=========> ] ETA: 0:00:21\u001b[K\rOptimising neural net: 39%[=========> ] ETA: 0:00:20\u001b[K\rOptimising neural net: 41%[==========> ] ETA: 0:00:18\u001b[K\rOptimising neural net: 43%[==========> ] ETA: 0:00:17\u001b[K\rOptimising neural net: 45%[===========> ] ETA: 0:00:15\u001b[K\rOptimising neural net: 47%[===========> ] ETA: 0:00:14\u001b[K\rOptimising neural net: 49%[============> ] ETA: 0:00:13\u001b[K\rOptimising neural net: 51%[============> ] ETA: 0:00:12\u001b[K\rOptimising neural net: 53%[=============> ] ETA: 0:00:11\u001b[K\rOptimising neural net: 55%[=============> ] ETA: 0:00:10\u001b[K\rOptimising neural net: 57%[==============> ] ETA: 0:00:10\u001b[K\rOptimising neural net: 59%[==============> ] ETA: 0:00:09\u001b[K\rOptimising neural net: 61%[===============> ] ETA: 0:00:08\u001b[K\rOptimising neural net: 63%[===============> ] ETA: 0:00:08\u001b[K\rOptimising neural net: 82%[====================> ] ETA: 0:00:03\u001b[K\rOptimising neural net: 84%[=====================> ] ETA: 0:00:02\u001b[K\rOptimising neural net: 86%[=====================> ] ETA: 0:00:02\u001b[K\rOptimising neural net: 88%[======================> ] ETA: 0:00:02\u001b[K\rOptimising neural net: 90%[======================> ] ETA: 0:00:01\u001b[K\rOptimising neural net: 92%[=======================> ] ETA: 0:00:01\u001b[K\rOptimising neural net: 94%[=======================> ] ETA: 0:00:01\u001b[K\rOptimising neural net: 96%[========================>] ETA: 0:00:01\u001b[K\rOptimising neural net: 98%[========================>] ETA: 0:00:00\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:12\u001b[K\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 3, \"versicolor\" => 1).\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 3, \"versicolor\" => 1).\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"versicolor\" => 2).\n", @@ -236,26 +293,32 @@ "[ Info: After filtering, the mapping from each class to number of borderline points is (\"versicolor\" => 2).\n", "┌ Warning: Cannot oversample a class with no borderline points. Skipping.\n", "└ @ Imbalance ~/.julia/packages/Imbalance/knJL1/src/oversampling_methods/borderline_smote1/borderline_smote1.jl:67\n", - "\rEvaluating over 5 folds: 40%[==========> ] ETA: 0:00:00\u001b[K[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", + "┌ Warning: Layer with Float32 parameters got Float64 input.\n", + "│ The input will be converted, but any earlier layers may be very slow.\n", + "│ layer = Dense(4 => 5, relu) # 25 parameters\n", + "│ summary(x) = \"4×8 Matrix{Float64}\"\n", + "└ @ Flux ~/.julia/packages/Flux/Wz6D4/src/layers/stateless.jl:60\n", + "\rEvaluating over 5 folds: 40%[==========> ] ETA: 0:00:16\u001b[K[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1, \"versicolor\" => 2).\n", - "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1).\n", + "\rEvaluating over 5 folds: 60%[===============> ] ETA: 0:00:07\u001b[K[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1).\n", "┌ Warning: Cannot oversample a class with no borderline points. Skipping.\n", "└ @ Imbalance ~/.julia/packages/Imbalance/knJL1/src/oversampling_methods/borderline_smote1/borderline_smote1.jl:67\n", - "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1).\n", + "\rProgress: 67%|███████████████████████████████████▍ | ETA: 0:00:00\u001b[K\r\n", + " class: virginica\u001b[K\r\u001b[A[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 1).\n", "┌ Warning: Cannot oversample a class with no borderline points. Skipping.\n", "└ @ Imbalance ~/.julia/packages/Imbalance/knJL1/src/oversampling_methods/borderline_smote1/borderline_smote1.jl:67\n", + "\rEvaluating over 5 folds: 80%[====================> ] ETA: 0:00:03\u001b[K[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 3, \"versicolor\" => 3).\n", "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 3, \"versicolor\" => 3).\n", - "[ Info: After filtering, the mapping from each class to number of borderline points is (\"virginica\" => 3, \"versicolor\" => 3).\n", - "\rEvaluating over 5 folds: 100%[=========================] Time: 0:00:00\u001b[K\n" + "\rEvaluating over 5 folds: 100%[=========================] Time: 0:00:11\u001b[K\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "PerformanceEvaluation object with these fields:\n model, measure, operation, measurement, per_fold,\n per_observation, fitted_params_per_fold,\n report_per_fold, train_test_rows, resampling, repeats\nExtract:\n┌────────────┬──────────────┬─────────────┬─────────┬───────────────────────────\n│\u001b[22m measure \u001b[0m│\u001b[22m operation \u001b[0m│\u001b[22m measurement \u001b[0m│\u001b[22m 1.96*SE \u001b[0m│\u001b[22m per_fold \u001b[0m ⋯\n├────────────┼──────────────┼─────────────┼─────────┼───────────────────────────\n│ Accuracy() │ predict_mode │ 0.98 │ 0.0268 │ [1.0, 1.0, 0.95, 0.95, 1 ⋯\n└────────────┴──────────────┴─────────────┴─────────┴───────────────────────────\n\u001b[36m 1 column omitted\u001b[0m\n" + "text/plain": "PerformanceEvaluation object with these fields:\n model, measure, operation,\n measurement, per_fold, per_observation,\n fitted_params_per_fold, report_per_fold,\n train_test_rows, resampling, repeats\nExtract:\n┌────────────┬──────────────┬─────────────┐\n│\u001b[22m measure \u001b[0m│\u001b[22m operation \u001b[0m│\u001b[22m measurement \u001b[0m│\n├────────────┼──────────────┼─────────────┤\n│ Accuracy() │ predict_mode │ 0.99 │\n└────────────┴──────────────┴─────────────┘\n┌────────────────────────────┬─────────┐\n│\u001b[22m per_fold \u001b[0m│\u001b[22m 1.96*SE \u001b[0m│\n├────────────────────────────┼─────────┤\n│ [1.0, 1.0, 0.95, 1.0, 1.0] │ 0.0219 │\n└────────────────────────────┴─────────┘\n" }, "metadata": {}, - "execution_count": 7 + "execution_count": 9 } ], "cell_type": "code", @@ -266,7 +329,7 @@ "evaluate!(mach, resampling=cv, measure=accuracy)" ], "metadata": {}, - "execution_count": 7 + "execution_count": 9 }, { "cell_type": "markdown", @@ -284,11 +347,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.0" + "version": "1.10.3" }, "kernelspec": { "name": "julia-1.10", - "display_name": "Julia 1.10.0", + "display_name": "Julia 1.10.3", "language": "julia" } }, diff --git a/dev/workflow examples/Composition/composition.jl b/dev/common_workflows/composition/notebook.jl similarity index 61% rename from dev/workflow examples/Composition/composition.jl rename to dev/common_workflows/composition/notebook.jl index 27f07917..182021eb 100644 --- a/dev/workflow examples/Composition/composition.jl +++ b/dev/common_workflows/composition/notebook.jl @@ -1,14 +1,19 @@ # # Model Composition with MLJFlux -# In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a -# class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux. +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/composition). -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +# In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux +# models. We will assume a class imbalance setting and wrap an oversampler with a deep +# learning model from MLJFlux. + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md # **Julia version** is assumed to be 1.10.* + # ### Basic Imports using MLJ # Has MLJFlux models @@ -16,6 +21,7 @@ using Flux # For more flexibility import RDatasets # Dataset source import Random # To create imbalance import Imbalance # To solve the imbalance +import Optimisers # native Flux.jl optimisers no longer supported # ### Loading and Splitting the Data @@ -27,48 +33,48 @@ X = Float32.(X); # To be compatible with type of network network parameters Random.seed!(803429) subset_indices = rand(1:size(X, 1), 100) X, y = X[subset_indices, :], y[subset_indices] -Imbalance.checkbalance(y) - +Imbalance.checkbalance(y) # ### Instantiating the model -# Let's load `BorderlineSMOTE1` to oversample the data and `Standardizer` to standardize it. +# Let's load `BorderlineSMOTE1` to oversample the data and `Standardizer` to standardize +# it. + BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0 NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux -## We didn't need to load Standardizer because it is a local model for MLJ (see `localmodels()`) + +# We didn't need to load Standardizer because it is a local model for MLJ (see +# `localmodels()`) clf = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=50, - rng=42 - ) + epochs=50, + rng=42, +) + +# First we wrap the oversampler with the neural network via the `BalancedModel` +# construct. This comes from `MLJBalancing` And allows combining resampling methods with +# MLJ models in a sequential pipeline. -# First we wrap the oversampler with the neural network via the `BalancedModel` construct. This comes from `MLJBalancing` -# And allows combining resampling methods with MLJ models in a sequential pipeline. oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42) balanced_model = BalancedModel(model=clf, balancer1=oversampler) standarizer = Standardizer() # Now let's compose the balanced model with a standardizer. pipeline = standarizer |> balanced_model -# By this, any training data will be standardized then oversampled then passed to the model. Meanwhile, -# for inference, the standardizer will automatically use the training set's mean and std and the oversampler -# will be transparent. +# By this, any training data will be standardized then oversampled then passed to the +# model. Meanwhile, for inference, the standardizer will automatically use the training +# set's mean and std and the oversampler will be transparent. # ### Training the Composed Model + # It's indistinguishable from training a single model. mach = machine(pipeline, X, y) fit!(mach) cv=CV(nfolds=5) -evaluate!(mach, resampling=cv, measure=accuracy) - - - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=false) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src +evaluate!(mach, resampling=cv, measure=accuracy) diff --git a/dev/common_workflows/composition/notebook.unexecuted.ipynb b/dev/common_workflows/composition/notebook.unexecuted.ipynb new file mode 100644 index 00000000..54b2439a --- /dev/null +++ b/dev/common_workflows/composition/notebook.unexecuted.ipynb @@ -0,0 +1,247 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Model Composition with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/composition)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux\n", + "models. We will assume a class imbalance setting and wrap an oversampler with a deep\n", + "learning model from MLJFlux." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "import Random # To create imbalance\n", + "import Imbalance # To solve the imbalance\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To simulate an imbalanced dataset, we will take a random sample:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Random.seed!(803429)\n", + "subset_indices = rand(1:size(X, 1), 100)\n", + "X, y = X[subset_indices, :], y[subset_indices]\n", + "Imbalance.checkbalance(y)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's load `BorderlineSMOTE1` to oversample the data and `Standardizer` to standardize\n", + "it." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0\n", + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We didn't need to load Standardizer because it is a local model for MLJ (see\n", + "`localmodels()`)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=50,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "First we wrap the oversampler with the neural network via the `BalancedModel`\n", + "construct. This comes from `MLJBalancing` And allows combining resampling methods with\n", + "MLJ models in a sequential pipeline." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42)\n", + "balanced_model = BalancedModel(model=clf, balancer1=oversampler)\n", + "standarizer = Standardizer()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now let's compose the balanced model with a standardizer." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "pipeline = standarizer |> balanced_model" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "By this, any training data will be standardized then oversampled then passed to the\n", + "model. Meanwhile, for inference, the standardizer will automatically use the training\n", + "set's mean and std and the oversampler will be transparent." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Training the Composed Model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It's indistinguishable from training a single model." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(pipeline, X, y)\n", + "fit!(mach)\n", + "cv=CV(nfolds=5)\n", + "evaluate!(mach, resampling=cv, measure=accuracy)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/composition/notebook/index.html b/dev/common_workflows/composition/notebook/index.html new file mode 100644 index 00000000..fb3c77a7 --- /dev/null +++ b/dev/common_workflows/composition/notebook/index.html @@ -0,0 +1,68 @@ + +Model Composition · MLJFlux

Model Composition with MLJFlux

This tutorial is available as a Jupyter notebook or julia script here.

In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+import RDatasets        # Dataset source
+import Random           # To create imbalance
+import Imbalance        # To solve the imbalance
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
+X = Float32.(X);      # To be compatible with type of network network parameters

To simulate an imbalanced dataset, we will take a random sample:

Random.seed!(803429)
+subset_indices = rand(1:size(X, 1), 100)
+X, y = X[subset_indices, :], y[subset_indices]
+Imbalance.checkbalance(y)
versicolor: ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 28 (65.1%)
+virginica:  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 29 (67.4%)
+setosa:     ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 43 (100.0%)

Instantiating the model

Let's load BorderlineSMOTE1 to oversample the data and Standardizer to standardize it.

BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0
+NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
NeuralNetworkClassifier

We didn't need to load Standardizer because it is a local model for MLJ (see localmodels())

clf = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=50,
+    rng=42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 50, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

First we wrap the oversampler with the neural network via the BalancedModel construct. This comes from MLJBalancing And allows combining resampling methods with MLJ models in a sequential pipeline.

oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42)
+balanced_model = BalancedModel(model=clf, balancer1=oversampler)
+standarizer = Standardizer()
Standardizer(
+  features = Symbol[], 
+  ignore = false, 
+  ordered_factor = false, 
+  count = false)

Now let's compose the balanced model with a standardizer.

pipeline = standarizer |> balanced_model
ProbabilisticPipeline(
+  standardizer = Standardizer(
+        features = Symbol[], 
+        ignore = false, 
+        ordered_factor = false, 
+        count = false), 
+  balanced_model_probabilistic = BalancedModelProbabilistic(
+        model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), 
+        balancer1 = BorderlineSMOTE1(m = 5, …)), 
+  cache = true)

By this, any training data will be standardized then oversampled then passed to the model. Meanwhile, for inference, the standardizer will automatically use the training set's mean and std and the oversampler will be transparent.

Training the Composed Model

It's indistinguishable from training a single model.

mach = machine(pipeline, X, y)
+fit!(mach)
+cv=CV(nfolds=5)
+evaluate!(mach, resampling=cv, measure=accuracy)
PerformanceEvaluation object with these fields:
+  model, measure, operation,
+  measurement, per_fold, per_observation,
+  fitted_params_per_fold, report_per_fold,
+  train_test_rows, resampling, repeats
+Extract:
+┌────────────┬──────────────┬─────────────┐
+│ measure    │ operation    │ measurement │
+├────────────┼──────────────┼─────────────┤
+│ Accuracy() │ predict_mode │ 0.99        │
+└────────────┴──────────────┴─────────────┘
+┌────────────────────────────┬─────────┐
+│ per_fold                   │ 1.96*SE │
+├────────────────────────────┼─────────┤
+│ [1.0, 1.0, 0.95, 1.0, 1.0] │ 0.0219  │
+└────────────────────────────┴─────────┘
+

This page was generated using Literate.jl.

diff --git a/dev/common_workflows/early_stopping/Manifest.toml b/dev/common_workflows/early_stopping/Manifest.toml new file mode 100644 index 00000000..7de851af --- /dev/null +++ b/dev/common_workflows/early_stopping/Manifest.toml @@ -0,0 +1,1985 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "540de0ef73bde5cd1000ae716c1fee2e0f3a0bf1" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.25.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +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.4+1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "ff38ba61beff76b8f4acad8ab0c97ef73bb670cb" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.9+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.5" + +[[deps.GR_jll]] +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 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.5+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +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" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "e0b5cd21dc1b44ec6e64f351976f961e6f31d6c4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.3" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.2.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[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", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[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 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.Unzip]] +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.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.12.7+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+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" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[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"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[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 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[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", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+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 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[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" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +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" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" diff --git a/dev/workflow examples/Live Training/Project.toml b/dev/common_workflows/early_stopping/Project.toml similarity index 82% rename from dev/workflow examples/Live Training/Project.toml rename to dev/common_workflows/early_stopping/Project.toml index 74f46e95..b95d41bd 100644 --- a/dev/workflow examples/Live Training/Project.toml +++ b/dev/common_workflows/early_stopping/Project.toml @@ -2,5 +2,6 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/early_stopping/README/index.html b/dev/common_workflows/early_stopping/README/index.html new file mode 100644 index 00000000..517b1301 --- /dev/null +++ b/dev/common_workflows/early_stopping/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/early_stopping/generate.jl b/dev/common_workflows/early_stopping/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/early_stopping/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/common_workflows/early_stopping/notebook.ipynb b/dev/common_workflows/early_stopping/notebook.ipynb new file mode 100644 index 00000000..bbdda628 --- /dev/null +++ b/dev/common_workflows/early_stopping/notebook.ipynb @@ -0,0 +1,427 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Early Stopping with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/early_stopping)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we learn how MLJFlux enables us to easily use early stopping\n", + "when training MLJFlux models." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/common_workflows/early_stopping`\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "using Plots # To visualize training\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model Now let's construct our model. This follows a similar setup\n", + "to the one followed in the [Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: For silent loading, specify `verbosity=0`. \n", + "import MLJFlux ✔\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "\n", + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=50,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping it in an IteratedModel" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's start by defining the condition that can cause the model to early stop." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "5-element Vector{Any}:\n IterationControl.Step(1)\n EarlyStopping.NumberLimit(100)\n EarlyStopping.Patience(5)\n EarlyStopping.NumberSinceBest(9)\n EarlyStopping.TimeLimit(Dates.Millisecond(1800000))" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "stop_conditions = [\n", + " Step(1), # Repeatedly train for one iteration\n", + " NumberLimit(100), # Don't train for more than 100 iterations\n", + " Patience(5), # Stop after 5 iterations of disimprovement in validation loss\n", + " NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago\n", + " TimeLimit(30/60), # Or if 30 minutes passed\n", + "]" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We can also define callbacks. Here we want to store the validation loss for each iteration" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1-element Vector{IterationControl.WithLossDo{Main.var\"##351\".var\"#3#4\"}}:\n IterationControl.WithLossDo{Main.var\"##351\".var\"#3#4\"}(Main.var\"##351\".var\"#3#4\"(), false, nothing)" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "validation_losses = []\n", + "callbacks = [\n", + " WithLossDo(loss->push!(validation_losses, loss)),\n", + "]" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Construct the iterated model and pass to it the stop_conditions and the callbacks:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iterated_model = IteratedModel(\n", + " model=clf,\n", + " resampling=Holdout(fraction_train=0.7); # loss and stopping are based on out-of-sample\n", + " measures=log_loss,\n", + " iteration_parameter=:(epochs),\n", + " controls=vcat(stop_conditions, callbacks),\n", + " retrain=false # no need to retrain on all data at the end\n", + ");" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "You can see more advanced stopping conditions as well as how to involve callbacks in the\n", + "[documentation](https://juliaai.github.io/MLJ.jl/stable/controlling_iterative_models/#Controlling-Iterative-Models)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Training with Early Stopping" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At this point, all we need is to fit the model and iteration controls will be\n", + "automatically handled" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Training machine(ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …), …).\n", + "[ Info: final loss: 0.05287897645527522\n", + "[ Info: final training loss: 0.045833383\n", + "[ Info: Stop triggered by EarlyStopping.NumberLimit(100) stopping criterion. \n", + "[ Info: Total of 100 iterations. \n" + ] + } + ], + "cell_type": "code", + "source": [ + "mach = machine(iterated_model, X, y)\n", + "fit!(mach)\n", + "# We can get the training losses like so\n", + "training_losses = report(mach)[:model_report].training_losses;" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "### Results" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can see that the model converged after 100 iterations." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAIAAADZR5NjAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdaXxTVd4H8P+92dN03+lCFyhraSsgUHYEZFEQARFkVAZBGUFkHMVRdFweHefxAWVcxn0AFQRRdtlRKyAIhZZSthZKSwtd6Jo0aZKbe58XN1wrFEghTdrk9311e3Jyc9JPPfw859xzGEEQCAAAAACch3V3AwAAAAA8DQIWAAAAgJMhYAEAAAA4GQIWAAAAgJMhYAEAAAA4GQIWAAAAgJMhYAEAAAA4GQIWAAAAgJMhYAEAAAA4GQIWAAAAgJO1uoC1cOFCq9XqSE2bzdbSjYE2QRAEnPgEInQLIOJ53t1NgNbCXd1CqwtYn332mV6vd6Sm0Whs6cZAm2CxWDiOc3croFVAtwCihoYGZCwQuatbaHUBCwAAAKCtQ8ACAAAAcDIELAAAAAAnQ8ACAAAAcDIELAAAAAAnQ8ACAAAAcDIELAAAAAAnQ8ACAAAAcDKPCli7Lwoxq7jdF7GpNwAAALiTRwWsg+VCcb2wuwS79wIAAIA7yd3dAGfyUxIR1Tl0kiEAAIDdjh07vvvuO3e3AloEx3FyuZyItFrt4sWLWdZFQ0ueFbAURER1Fne3AwAA2pRdu3ZVVlaOHDnS3Q2BFjR37tw333xTo9G45uM8K2ApiYhqMYIFAADN1KdPn9mzZ7u7FdCCnn76aVd+nEetwfJXMkRUZ8EidwAAAHAnjwpY9ilCjGABAACAW3lgwKrFGiwAAABwK88KWJgiBAAAgFbAowKWP7ZpAAAAgFbAowKWWkZKlsw2Mtvc3RQAAADwYh61TQMR+SnpcgPVWijMRftcAAAAtAr5+fnffPPNteUvvvgiwzA3eOPSpUsbGhoWLlx4vQqzZ8++995777333ltu244dOziOGzNmzC3foc3xqBEsIvJTMERUZ8UyLAAA8C48z3Mcx3FcQUHB66+/zl1x0zcmJyenpaXdoMLgwYPj4uJup21btmxZv3797dyhzfG0ESz7Miw8SAgAAF4mKSnplVdeIaJ9+/Z9++230vX58+fPnj175MiRJ598sq6ubs+ePaWlpQkJCePGjZPJZEQUERFhs9mIqLy8PDs7u3v37t99951Op5syZYq473lcXFxAQAARnT59Wq/Xa7Xabdu2JSQkjB8/XhwbEwRh06ZNZ8+eHT58uMlkCgoK6tChw00bbDKZNm3aVFpa2q9fv969e4uFhYWFW7ZsaWhoSExMHD16tFKprKqqWr9+fWVlZUxMzOjRo/39/Vvm9+dknhawsJk7AAA4i9lGJcZWNyWiYCnG50ZTfo29/fbbBQUFnTt3TkpKMpvN4lkxYWFhH3300WeffbZlyxYiWrlypclkWrx4cU5OzowZM5KSkoYOHbp+/frVq1dv3bqViN54442HHnrooYce2rhx4/Lly2NjY/v167do0aJDhw698cYbRPTYY48dP3580qRJzzzzTGFh4dy5c+fNm3fjhtXX1/fr169jx45paWmTJ09+6qmn/vrXv+bn5w8YMGDWrFnBwcFr167t3r17REREz54977333sTExF9++SU4OHjEiBG39/tzEY8LWAqGSKizCESO/vEBAAA06YE9to2FvLtb0YSvh8qmJTq6yKdbt24rV64Ur9977z3xYsGCBYmJiadOnercuXPjytXV1WvWrAkJCVmwYEFQUFBlZWVwcHDjCuJglUwmGz58+NSpU994440zZ8589913RUVFfn5+8+fPT0hIcKRVn3zySXBwsHjG9vjx4/v27fvYY4/99ttvaWlpr7/+ulQtJyeH5/l3333XZYc0O4unBSzs1AAAAM4yMII5WcPYWlnE8lNSJ/9mDCIMGDBAut6xY8drr712+fJlrVZbWVlZWFh4VcBKSEgICQkhIp1OFxISUlZWdlXA6tWrlzixGBcXV1ZWRkS5ubndunXz8/MjIqVSKU323Vh2dvawYcPE6+TkZJ1Od+bMmWHDhr300kvdu3cfP378lClTevTo0alTp9jY2Li4uPvuu2/ixImDBw92/Iu7l6cFLPsUIdZgAQDAbftbMvu35DY2cHIttVotXtTX10+aNGn37t1iBkpOTr52CbxCoZCuGYYRhKtnSKUK0qtardZoNEoVGl/fgFKptFp/Hw6xWq0KhSIiIuL06dN79+5dt27doEGD1q9fP2TIkIyMjCNHjmzcuHHq1KkvvfTSnDlzHPzi7tXm/26uYj+OEAELAADgj8rLyxmGSUlJIaLjx4+fOnXKKbft3bt3QUHB4cOHiSgvLy8jI8ORd/Xr12/jxo1ixtq9e7dMJktKSjIajXK5fMiQIUuXLh07duzhw4dNJpMgCD179nz11VfnzZt38OBB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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "plot(training_losses, label=\"Training Loss\", linewidth=2)\n", + "plot!(validation_losses, label=\"Validation Loss\", linewidth=2, size=(800,400))" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/workflow examples/Early Stopping/iteration.jl b/dev/common_workflows/early_stopping/notebook.jl similarity index 64% rename from dev/workflow examples/Early Stopping/iteration.jl rename to dev/common_workflows/early_stopping/notebook.jl index 1af02f8c..a6c59da3 100644 --- a/dev/workflow examples/Early Stopping/iteration.jl +++ b/dev/common_workflows/early_stopping/notebook.jl @@ -1,19 +1,25 @@ -# # Early Stopping with MLJFlux +# # Early Stopping with MLJ -# In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models. +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/early_stopping). -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +# In this workflow example, we learn how MLJFlux enables us to easily use early stopping +# when training MLJFlux models. + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md + +# **Julia version** is assumed to be 1.10.* -# **Julia version** is assumed to be 1.10.* # ### Basic Imports using MLJ # Has MLJFlux models using Flux # For more flexibility import RDatasets # Dataset source -using Plots # To visualize training +using Plots # To visualize training +import Optimisers # native Flux.jl optimisers no longer supported # ### Loading and Splitting the Data @@ -22,22 +28,22 @@ y, X = unpack(iris, ==(:Species), colname -> true, rng=123); X = Float32.(X); # To be compatible with type of network network parameters -# ### Instantiating the model -# Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start). +# ### Instantiating the model Now let's construct our model. This follows a similar setup +# to the one followed in the [Quick Start](../../index.md#Quick-Start). NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux clf = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=50, - rng=42 - ) + epochs=50, + rng=42, +) # ### Wrapping it in an IteratedModel -# Let's start by defining the condition that can cause the model to early stop. +# Let's start by defining the condition that can cause the model to early stop. stop_conditions = [ Step(1), # Repeatedly train for one iteration NumberLimit(100), # Don't train for more than 100 iterations @@ -47,7 +53,7 @@ stop_conditions = [ ] # We can also define callbacks. Here we want to store the validation loss for each iteration -validation_losses = [] +validation_losses = [] callbacks = [ WithLossDo(loss->push!(validation_losses, loss)), ] @@ -55,17 +61,20 @@ callbacks = [ # Construct the iterated model and pass to it the stop_conditions and the callbacks: iterated_model = IteratedModel( model=clf, - resampling=CV(nfolds=6), # Split the data internally into 0.7 training and 0.3 validation + resampling=Holdout(fraction_train=0.7); # loss and stopping are based on out-of-sample measures=log_loss, iteration_parameter=:(epochs), controls=vcat(stop_conditions, callbacks), - retrain=false # no need to retrain on all data at the end + retrain=false # no need to retrain on all data at the end ); -# You can see more advanced stopping conditions as well as how to involve callbacks in the [documentation](https://juliaai.github.io/MLJ.jl/stable/controlling_iterative_models/#Controlling-Iterative-Models) +# You can see more advanced stopping conditions as well as how to involve callbacks in the +# [documentation](https://juliaai.github.io/MLJ.jl/stable/controlling_iterative_models/#Controlling-Iterative-Models) # ### Training with Early Stopping -# At this point, all we need is to fit the model and iteration controls will be automatically handled + +# At this point, all we need is to fit the model and iteration controls will be +# automatically handled mach = machine(iterated_model, X, y) fit!(mach) @@ -73,13 +82,8 @@ fit!(mach) training_losses = report(mach)[:model_report].training_losses; # ### Results + # We can see that the model converged after 100 iterations. plot(training_losses, label="Training Loss", linewidth=2) plot!(validation_losses, label="Validation Loss", linewidth=2, size=(800,400)) - -#- - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=false) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src diff --git a/dev/common_workflows/early_stopping/notebook.unexecuted.ipynb b/dev/common_workflows/early_stopping/notebook.unexecuted.ipynb new file mode 100644 index 00000000..5effdb73 --- /dev/null +++ b/dev/common_workflows/early_stopping/notebook.unexecuted.ipynb @@ -0,0 +1,262 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Early Stopping with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/early_stopping)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example, we learn how MLJFlux enables us to easily use early stopping\n", + "when training MLJFlux models." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "using Plots # To visualize training\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model Now let's construct our model. This follows a similar setup\n", + "to the one followed in the [Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "\n", + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=50,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping it in an IteratedModel" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's start by defining the condition that can cause the model to early stop." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "stop_conditions = [\n", + " Step(1), # Repeatedly train for one iteration\n", + " NumberLimit(100), # Don't train for more than 100 iterations\n", + " Patience(5), # Stop after 5 iterations of disimprovement in validation loss\n", + " NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago\n", + " TimeLimit(30/60), # Or if 30 minutes passed\n", + "]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We can also define callbacks. Here we want to store the validation loss for each iteration" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "validation_losses = []\n", + "callbacks = [\n", + " WithLossDo(loss->push!(validation_losses, loss)),\n", + "]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Construct the iterated model and pass to it the stop_conditions and the callbacks:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iterated_model = IteratedModel(\n", + " model=clf,\n", + " resampling=Holdout(fraction_train=0.7); # loss and stopping are based on out-of-sample\n", + " measures=log_loss,\n", + " iteration_parameter=:(epochs),\n", + " controls=vcat(stop_conditions, callbacks),\n", + " retrain=false # no need to retrain on all data at the end\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can see more advanced stopping conditions as well as how to involve callbacks in the\n", + "[documentation](https://juliaai.github.io/MLJ.jl/stable/controlling_iterative_models/#Controlling-Iterative-Models)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Training with Early Stopping" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At this point, all we need is to fit the model and iteration controls will be\n", + "automatically handled" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(iterated_model, X, y)\n", + "fit!(mach)\n", + "# We can get the training losses like so\n", + "training_losses = report(mach)[:model_report].training_losses;" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Results" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can see that the model converged after 100 iterations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(training_losses, label=\"Training Loss\", linewidth=2)\n", + "plot!(validation_losses, label=\"Validation Loss\", linewidth=2, size=(800,400))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/early_stopping/notebook/803312a6.svg b/dev/common_workflows/early_stopping/notebook/803312a6.svg new file mode 100644 index 00000000..e7e600f6 --- /dev/null +++ b/dev/common_workflows/early_stopping/notebook/803312a6.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/common_workflows/early_stopping/notebook/index.html b/dev/common_workflows/early_stopping/notebook/index.html new file mode 100644 index 00000000..debfddd6 --- /dev/null +++ b/dev/common_workflows/early_stopping/notebook/index.html @@ -0,0 +1,59 @@ + +Early Stopping · MLJFlux

Early Stopping with MLJFlux

This demonstration is available as a Jupyter notebook or julia script here.

In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+import RDatasets        # Dataset source
+using Plots             # To visualize training
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
+X = Float32.(X);      # To be compatible with type of network network parameters

Instantiating the model Now let's construct our model. This follows a similar setup

to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
+
+clf = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=50,
+    rng=42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 50, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Wrapping it in an IteratedModel

Let's start by defining the condition that can cause the model to early stop.

stop_conditions = [
+    Step(1),            # Repeatedly train for one iteration
+    NumberLimit(100),   # Don't train for more than 100 iterations
+    Patience(5),        # Stop after 5 iterations of disimprovement in validation loss
+    NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago
+    TimeLimit(30/60),   # Or if 30 minutes passed
+]
5-element Vector{Any}:
+ IterationControl.Step(1)
+ EarlyStopping.NumberLimit(100)
+ EarlyStopping.Patience(5)
+ EarlyStopping.NumberSinceBest(9)
+ EarlyStopping.TimeLimit(Dates.Millisecond(1800000))

We can also define callbacks. Here we want to store the validation loss for each iteration

validation_losses = []
+callbacks = [
+    WithLossDo(loss->push!(validation_losses, loss)),
+]
1-element Vector{IterationControl.WithLossDo{Main.var"#3#4"}}:
+ IterationControl.WithLossDo{Main.var"#3#4"}(Main.var"#3#4"(), false, nothing)

Construct the iterated model and pass to it the stop_conditions and the callbacks:

iterated_model = IteratedModel(
+    model=clf,
+    resampling=Holdout(fraction_train=0.7); # loss and stopping are based on out-of-sample
+    measures=log_loss,
+    iteration_parameter=:(epochs),
+    controls=vcat(stop_conditions, callbacks),
+    retrain=false            # no need to retrain on all data at the end
+);

You can see more advanced stopping conditions as well as how to involve callbacks in the documentation

Training with Early Stopping

At this point, all we need is to fit the model and iteration controls will be automatically handled

mach = machine(iterated_model, X, y)
+fit!(mach)
+# We can get the training losses like so
+training_losses = report(mach)[:model_report].training_losses;
[ Info: Training machine(ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …), …).
+[ Info: final loss: 0.05287897645527522
+[ Info: final training loss: 0.045833383
+[ Info: Stop triggered by EarlyStopping.NumberLimit(100) stopping criterion.
+[ Info: Total of 100 iterations.

Results

We can see that the model converged after 100 iterations.

plot(training_losses, label="Training Loss", linewidth=2)
+plot!(validation_losses, label="Validation Loss", linewidth=2, size=(800,400))
Example block output

This page was generated using Literate.jl.

diff --git a/dev/common_workflows/hyperparameter_tuning/Manifest.toml b/dev/common_workflows/hyperparameter_tuning/Manifest.toml new file mode 100644 index 00000000..7de851af --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/Manifest.toml @@ -0,0 +1,1985 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "540de0ef73bde5cd1000ae716c1fee2e0f3a0bf1" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.25.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +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.4+1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "ff38ba61beff76b8f4acad8ab0c97ef73bb670cb" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.9+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.5" + +[[deps.GR_jll]] +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 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.5+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +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" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "e0b5cd21dc1b44ec6e64f351976f961e6f31d6c4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.3" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.2.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[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", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[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 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.Unzip]] +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.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.12.7+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+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" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[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"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[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 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[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", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+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 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[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" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +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" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" diff --git a/dev/workflow examples/Early Stopping/Project.toml b/dev/common_workflows/hyperparameter_tuning/Project.toml similarity index 82% rename from dev/workflow examples/Early Stopping/Project.toml rename to dev/common_workflows/hyperparameter_tuning/Project.toml index 74f46e95..b95d41bd 100644 --- a/dev/workflow examples/Early Stopping/Project.toml +++ b/dev/common_workflows/hyperparameter_tuning/Project.toml @@ -2,5 +2,6 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/hyperparameter_tuning/README/index.html b/dev/common_workflows/hyperparameter_tuning/README/index.html new file mode 100644 index 00000000..0c57da54 --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/hyperparameter_tuning/generate.jl b/dev/common_workflows/hyperparameter_tuning/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/workflow examples/Hyperparameter Tuning/tuning.jl b/dev/common_workflows/hyperparameter_tuning/notebook.jl similarity index 60% rename from dev/workflow examples/Hyperparameter Tuning/tuning.jl rename to dev/common_workflows/hyperparameter_tuning/notebook.jl index e00ae6fc..aa39830d 100644 --- a/dev/workflow examples/Hyperparameter Tuning/tuning.jl +++ b/dev/common_workflows/hyperparameter_tuning/notebook.jl @@ -1,19 +1,25 @@ # # Hyperparameter Tuning with MLJFlux -# In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters. +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/hyperparameter_tuning). -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +# In this workflow example we learn how to tune different hyperparameters of MLJFlux +# models with emphasis on training hyperparameters. + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md # **Julia version** is assumed to be 1.10.* + # ### Basic Imports using MLJ # Has MLJFlux models using Flux # For more flexibility import RDatasets # Dataset source using Plots # To plot tuning results +import Optimisers # native Flux.jl optimisers no longer supported # ### Loading and Splitting the Data @@ -24,25 +30,32 @@ X = Float32.(X); # To be compatible with type of network network parameters # ### Instantiating the model -# Now let's construct our model. This follows a similar setup the one followed in the [Quick Start](../../index.md#Quick-Start). + +# Now let's construct our model. This follows a similar setup the one followed in the +# [Quick Start](../../index.md#Quick-Start). NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux clf = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=10, - rng=42 - ) + epochs=10, + rng=42, +) # ### Hyperparameter Tuning Example -# Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation. + +# Let's tune the batch size and the learning rate. We will use grid search and 5-fold +# cross-validation. # We start by defining the hyperparameter ranges r1 = range(clf, :batch_size, lower=1, upper=64) -r2 = range(clf, :(optimiser.eta), lower=10^-4, upper=10^0, scale=:log10) +etas = [10^x for x in range(-4, stop=0, length=4)] +optimisers = [Optimisers.Adam(eta) for eta in etas] +r2 = range(clf, :optimiser, values=optimisers) -# Then passing the ranges along with the model and other arguments to the `TunedModel` constructor. +# Then passing the ranges along with the model and other arguments to the `TunedModel` +# constructor. tuned_model = TunedModel( model=clf, @@ -58,26 +71,28 @@ fit!(mach, verbosity=0); # Let's check out the best performing model: fitted_params(mach).best_model -# We can visualize the hyperparameter search results as follows -plot(mach) # ### Learning Curves -# With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model + +# With learning curves, it's possible to center our focus on the effects of a single +# hyperparameter of the model # First define the range and wrap it in a learning curve r = range(clf, :epochs, lower=1, upper=200, scale=:log10) -curve = learning_curve(clf, X, y, - range=r, - resampling=CV(nfolds=4, rng=42), - measure=cross_entropy) +curve = learning_curve( + clf, + X, + y, + range=r, + resampling=CV(nfolds=4, rng=42), + measure=cross_entropy, +) # Then plot the curve -plot(curve.parameter_values, - curve.measurements, - xlab=curve.parameter_name, - xscale=curve.parameter_scale, - ylab = "Cross Entropy") - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=false) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src +plot( + curve.parameter_values, + curve.measurements, + xlab=curve.parameter_name, + xscale=curve.parameter_scale, + ylab = "Cross Entropy", +) diff --git a/dev/common_workflows/hyperparameter_tuning/notebook.unexecuted.ipynb b/dev/common_workflows/hyperparameter_tuning/notebook.unexecuted.ipynb new file mode 100644 index 00000000..2060f391 --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/notebook.unexecuted.ipynb @@ -0,0 +1,289 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Hyperparameter Tuning with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/hyperparameter_tuning)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example we learn how to tune different hyperparameters of MLJFlux\n", + "models with emphasis on training hyperparameters." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "using Plots # To plot tuning results\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's construct our model. This follows a similar setup the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=10,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Hyperparameter Tuning Example" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's tune the batch size and the learning rate. We will use grid search and 5-fold\n", + "cross-validation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We start by defining the hyperparameter ranges" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "r1 = range(clf, :batch_size, lower=1, upper=64)\n", + "etas = [10^x for x in range(-4, stop=0, length=4)]\n", + "optimisers = [Optimisers.Adam(eta) for eta in etas]\n", + "r2 = range(clf, :optimiser, values=optimisers)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then passing the ranges along with the model and other arguments to the `TunedModel`\n", + "constructor." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tuned_model = TunedModel(\n", + " model=clf,\n", + " tuning=Grid(goal=25),\n", + " resampling=CV(nfolds=5, rng=42),\n", + " range=[r1, r2],\n", + " measure=cross_entropy,\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then wrapping our tuned model in a machine and fitting it." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(tuned_model, X, y);\n", + "fit!(mach, verbosity=0);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's check out the best performing model:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "fitted_params(mach).best_model" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Learning Curves" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "With learning curves, it's possible to center our focus on the effects of a single\n", + "hyperparameter of the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First define the range and wrap it in a learning curve" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "r = range(clf, :epochs, lower=1, upper=200, scale=:log10)\n", + "curve = learning_curve(\n", + " clf,\n", + " X,\n", + " y,\n", + " range=r,\n", + " resampling=CV(nfolds=4, rng=42),\n", + " measure=cross_entropy,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then plot the curve" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(\n", + " curve.parameter_values,\n", + " curve.measurements,\n", + " xlab=curve.parameter_name,\n", + " xscale=curve.parameter_scale,\n", + " ylab = \"Cross Entropy\",\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/hyperparameter_tuning/notebook/da89bfdc.svg b/dev/common_workflows/hyperparameter_tuning/notebook/da89bfdc.svg new file mode 100644 index 00000000..0c63271e --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/notebook/da89bfdc.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/common_workflows/hyperparameter_tuning/notebook/index.html b/dev/common_workflows/hyperparameter_tuning/notebook/index.html new file mode 100644 index 00000000..efbef4b0 --- /dev/null +++ b/dev/common_workflows/hyperparameter_tuning/notebook/index.html @@ -0,0 +1,68 @@ + +Hyperparameter Tuning · MLJFlux

Hyperparameter Tuning with MLJFlux

This demonstration is available as a Jupyter notebook or julia script here.

In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+import RDatasets        # Dataset source
+using Plots             # To plot tuning results
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
+X = Float32.(X);      # To be compatible with type of network network parameters

Instantiating the model

Now let's construct our model. This follows a similar setup the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
+clf = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=10,
+    rng=42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Hyperparameter Tuning Example

Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation.

We start by defining the hyperparameter ranges

r1 = range(clf, :batch_size, lower=1, upper=64)
+etas = [10^x for x in range(-4, stop=0, length=4)]
+optimisers = [Optimisers.Adam(eta) for eta in etas]
+r2 = range(clf, :optimiser, values=optimisers)
NominalRange(optimiser = Adam(0.0001, (0.9, 0.999), 1.0e-8), Adam(0.00215443, (0.9, 0.999), 1.0e-8), Adam(0.0464159, (0.9, 0.999), 1.0e-8), ...)

Then passing the ranges along with the model and other arguments to the TunedModel constructor.

tuned_model = TunedModel(
+    model=clf,
+    tuning=Grid(goal=25),
+    resampling=CV(nfolds=5, rng=42),
+    range=[r1, r2],
+    measure=cross_entropy,
+);

Then wrapping our tuned model in a machine and fitting it.

mach = machine(tuned_model, X, y);
+fit!(mach, verbosity=0);

Let's check out the best performing model:

fitted_params(mach).best_model
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.0464159, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 1, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Learning Curves

With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model

First define the range and wrap it in a learning curve

r = range(clf, :epochs, lower=1, upper=200, scale=:log10)
+curve = learning_curve(
+    clf,
+    X,
+    y,
+    range=r,
+    resampling=CV(nfolds=4, rng=42),
+    measure=cross_entropy,
+)
(parameter_name = "epochs",
+ parameter_scale = :log10,
+ parameter_values = [1, 2, 3, 4, 5, 6, 7, 9, 11, 13  …  39, 46, 56, 67, 80, 96, 116, 139, 167, 200],
+ measurements = [0.9231712033780419, 0.7672938542047157, 0.6736075721456418, 0.6064130950372606, 0.5595521804926612, 0.5270759259385482, 0.5048969423979114, 0.47993815474701584, 0.46130985568830307, 0.4449225600160762  …  0.1621185148276446, 0.12283639917434747, 0.09543014842693512, 0.07850181447968614, 0.06950203807005066, 0.063248279208185, 0.060053521895940286, 0.05921442672620914, 0.05921052970422136, 0.060379476300399186],)

Then plot the curve

plot(
+    curve.parameter_values,
+    curve.measurements,
+    xlab=curve.parameter_name,
+    xscale=curve.parameter_scale,
+    ylab = "Cross Entropy",
+)
Example block output

This page was generated using Literate.jl.

diff --git a/dev/common_workflows/incremental_training/Manifest.toml b/dev/common_workflows/incremental_training/Manifest.toml new file mode 100644 index 00000000..71496de3 --- /dev/null +++ b/dev/common_workflows/incremental_training/Manifest.toml @@ -0,0 +1,1364 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "320d9911b43782f24ec06e345393811f5e76128b" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" diff --git a/dev/workflow examples/Incremental Training/Project.toml b/dev/common_workflows/incremental_training/Project.toml similarity index 79% rename from dev/workflow examples/Incremental Training/Project.toml rename to dev/common_workflows/incremental_training/Project.toml index b4afe33e..631dd106 100644 --- a/dev/workflow examples/Incremental Training/Project.toml +++ b/dev/common_workflows/incremental_training/Project.toml @@ -2,4 +2,5 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/incremental_training/README/index.html b/dev/common_workflows/incremental_training/README/index.html new file mode 100644 index 00000000..0ffbbdb3 --- /dev/null +++ b/dev/common_workflows/incremental_training/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/incremental_training/generate.jl b/dev/common_workflows/incremental_training/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/common_workflows/incremental_training/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/workflow examples/Incremental Training/incremental.ipynb b/dev/common_workflows/incremental_training/notebook.ipynb similarity index 54% rename from dev/workflow examples/Incremental Training/incremental.ipynb rename to dev/common_workflows/incremental_training/notebook.ipynb index 6bb51aaa..b85e848b 100644 --- a/dev/workflow examples/Incremental Training/incremental.ipynb +++ b/dev/common_workflows/incremental_training/notebook.ipynb @@ -3,15 +3,42 @@ { "cell_type": "markdown", "source": [ - "# Incremental Training with MLJFlux\n", + "# Incremental Training with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ "In this workflow example we explore how to incrementally train MLJFlux models." ], "metadata": {} }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/common_workflows/incremental_training`\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, { "cell_type": "markdown", "source": [ - "**Julia version** is assumed to be 1.10.*" + "**Julia version** is assumed to be 1.10.* This tutorial is available as a Jupyter\n", + "notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/incremental_training)." ], "metadata": {} }, @@ -28,10 +55,11 @@ "source": [ "using MLJ # Has MLJFlux models\n", "using Flux # For more flexibility\n", - "import RDatasets # Dataset source" + "import RDatasets # Dataset source\n", + "import Optimisers # native Flux.jl optimisers no longer supported" ], "metadata": {}, - "execution_count": 1 + "execution_count": 2 }, { "cell_type": "markdown", @@ -47,19 +75,28 @@ "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", "X = Float32.(X) # To be compatible with type of network network parameters\n", - "(X_train, X_test), (y_train, y_test) = partition((X, y), 0.8,\n", - " multi = true,\n", - " shuffle = true,\n", - " rng=42);" + "(X_train, X_test), (y_train, y_test) = partition(\n", + " (X, y), 0.8,\n", + " multi = true,\n", + " shuffle = true,\n", + " rng=42,\n", + ");" ], "metadata": {}, - "execution_count": 2 + "execution_count": 3 }, { "cell_type": "markdown", "source": [ - "### Instantiating the model\n", - "Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#quick-start)." + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's construct our model. This follows a similar setup to the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." ], "metadata": {} }, @@ -76,10 +113,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Flux.Optimise.Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" }, "metadata": {}, - "execution_count": 3 + "execution_count": 4 } ], "cell_type": "code", @@ -87,20 +124,27 @@ "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", "clf = NeuralNetworkClassifier(\n", " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", + " optimiser=Optimisers.Adam(0.01),\n", " batch_size=8,\n", " epochs=10,\n", - " rng=42\n", - " )" + " rng=42,\n", + ")" ], "metadata": {}, - "execution_count": 3 + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "### Initial round of training" + ], + "metadata": {} }, { "cell_type": "markdown", "source": [ - "### Initial round of training\n", - "Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above." + "Now let's train the model. Calling fit! will automatically train it for 100 epochs as\n", + "specified above." ], "metadata": {} }, @@ -111,16 +155,16 @@ "output_type": "stream", "text": [ "[ Info: Training machine(NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …).\n", - "\rOptimising neural net: 18%[====> ] ETA: 0:00:21\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:05\u001b[K\n" + "\rOptimising neural net: 18%[====> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 27%[======> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 36%[=========> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 45%[===========> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 55%[=============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 64%[===============> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 73%[==================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 82%[====================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 91%[======================> ] ETA: 0:00:00\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:00\u001b[K\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "trained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)\n args: \n 1:\tSource @655 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}\n 2:\tSource @902 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}}\n" + "text/plain": "trained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)\n args: \n 1:\tSource @068 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}\n 2:\tSource @767 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}}\n" }, "metadata": {}, - "execution_count": 4 + "execution_count": 5 } ], "cell_type": "code", @@ -129,7 +173,7 @@ "fit!(mach)" ], "metadata": {}, - "execution_count": 4 + "execution_count": 5 }, { "cell_type": "markdown", @@ -143,10 +187,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "0.5187556517212482" + "text/plain": "0.4392339631006042" }, "metadata": {}, - "execution_count": 5 + "execution_count": 6 } ], "cell_type": "code", @@ -154,17 +198,17 @@ "training_loss = cross_entropy(predict(mach, X_train), y_train)" ], "metadata": {}, - "execution_count": 5 + "execution_count": 6 }, { "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "0.5333333333333333" + "text/plain": "0.9" }, "metadata": {}, - "execution_count": 6 + "execution_count": 7 } ], "cell_type": "code", @@ -172,15 +216,28 @@ "val_acc = accuracy(predict_mode(mach, X_test), y_test)" ], "metadata": {}, - "execution_count": 6 + "execution_count": 7 }, { "cell_type": "markdown", "source": [ - "Poor performance it seems.\n", - "### Incremental Training\n", - "Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these\n", - "hyperparameters and call fit again. It won't reset the model parameters before training." + "Poor performance it seems." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Incremental Training" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's train it for another 30 epochs at half the original learning rate. All we need\n", + "to do is changes these hyperparameters and call fit again. It won't reset the model\n", + "parameters before training." ], "metadata": {} }, @@ -191,47 +248,47 @@ "output_type": "stream", "text": [ "[ Info: Updating machine(NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …).\n", - "[ Info: Loss is 0.5195\n", - "[ Info: Loss is 0.5113\n", - "[ Info: Loss is 0.5056\n", - "[ Info: Loss is 0.501\n", - "[ Info: Loss is 0.497\n", - "[ Info: Loss is 0.4944\n", - "[ Info: Loss is 0.4909\n", - "[ Info: Loss is 0.4881\n", - "[ Info: Loss is 0.4855\n", - "[ Info: Loss is 0.4833\n", - "[ Info: Loss is 0.4813\n", - "[ Info: Loss is 0.4794\n", - "[ Info: Loss is 0.4777\n", - "[ Info: Loss is 0.476\n", - "[ Info: Loss is 0.4744\n", - "[ Info: Loss is 0.4729\n", - "[ Info: Loss is 0.471\n", - "[ Info: Loss is 0.4685\n", - "[ Info: Loss is 0.4357\n", - "[ Info: Loss is 0.3986\n", - "[ Info: Loss is 0.354\n", - "[ Info: Loss is 0.3212\n", - "[ Info: Loss is 0.294\n", - "[ Info: Loss is 0.2832\n", - "[ Info: Loss is 0.2727\n", - "[ Info: Loss is 0.247\n", - "[ Info: Loss is 0.2285\n", - "[ Info: Loss is 0.2153\n", - "[ Info: Loss is 0.2024\n", - "[ Info: Loss is 0.1928\n" + "[ Info: Loss is 0.4393\n", + "[ Info: Loss is 0.4317\n", + "[ Info: Loss is 0.4244\n", + "[ Info: Loss is 0.4171\n", + "[ Info: Loss is 0.4096\n", + "[ Info: Loss is 0.4017\n", + "[ Info: Loss is 0.3931\n", + "[ Info: Loss is 0.3838\n", + "[ Info: Loss is 0.3737\n", + "[ Info: Loss is 0.3626\n", + "[ Info: Loss is 0.3505\n", + "[ Info: Loss is 0.3382\n", + "[ Info: Loss is 0.3244\n", + "[ Info: Loss is 0.3095\n", + "[ Info: Loss is 0.2954\n", + "[ Info: Loss is 0.2813\n", + "[ Info: Loss is 0.2654\n", + "[ Info: Loss is 0.25\n", + "[ Info: Loss is 0.235\n", + "[ Info: Loss is 0.2203\n", + "[ Info: Loss is 0.2118\n", + "[ Info: Loss is 0.196\n", + "[ Info: Loss is 0.179\n", + "[ Info: Loss is 0.1674\n", + "[ Info: Loss is 0.1586\n", + "[ Info: Loss is 0.1469\n", + "[ Info: Loss is 0.1353\n", + "[ Info: Loss is 0.1251\n", + "[ Info: Loss is 0.1173\n", + "[ Info: Loss is 0.1102\n" ] } ], "cell_type": "code", "source": [ - "clf.optimiser.eta = clf.optimiser.eta / 2\n", + "clf.optimiser = Optimisers.Adam(clf.optimiser.eta/2)\n", "clf.epochs = clf.epochs + 30\n", "fit!(mach, verbosity=2);" ], "metadata": {}, - "execution_count": 7 + "execution_count": 8 }, { "cell_type": "markdown", @@ -245,10 +302,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "0.18276122841169196" + "text/plain": "0.10519664737051289" }, "metadata": {}, - "execution_count": 8 + "execution_count": 9 } ], "cell_type": "code", @@ -256,17 +313,17 @@ "training_loss = cross_entropy(predict(mach, X_train), y_train)" ], "metadata": {}, - "execution_count": 8 + "execution_count": 9 }, { "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "0.9333333333333333" + "text/plain": "0.9666666666666667" }, "metadata": {}, - "execution_count": 9 + "execution_count": 10 } ], "cell_type": "code", @@ -274,12 +331,13 @@ "training_acc = accuracy(predict_mode(mach, X_test), y_test)" ], "metadata": {}, - "execution_count": 9 + "execution_count": 10 }, { "cell_type": "markdown", "source": [ - "That's much better. If we are rather interested in resetting the model parameters before fitting, we can do `fit(mach, force=true)`." + "That's much better. If we are rather interested in resetting the model parameters before\n", + "fitting, we can do `fit(mach, force=true)`." ], "metadata": {} }, @@ -299,11 +357,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.0" + "version": "1.10.3" }, "kernelspec": { "name": "julia-1.10", - "display_name": "Julia 1.10.0", + "display_name": "Julia 1.10.3", "language": "julia" } }, diff --git a/dev/workflow examples/Incremental Training/incremental.jl b/dev/common_workflows/incremental_training/notebook.jl similarity index 58% rename from dev/workflow examples/Incremental Training/incremental.jl rename to dev/common_workflows/incremental_training/notebook.jl index 1718a1a3..20d38b53 100644 --- a/dev/workflow examples/Incremental Training/incremental.jl +++ b/dev/common_workflows/incremental_training/notebook.jl @@ -1,9 +1,13 @@ # # Incremental Training with MLJFlux + +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/incremental_training). + # In this workflow example we explore how to incrementally train MLJFlux models. -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md # **Julia version** is assumed to be 1.10.* @@ -12,59 +16,72 @@ Pkg.instantiate(); #src using MLJ # Has MLJFlux models using Flux # For more flexibility import RDatasets # Dataset source +import Optimisers # native Flux.jl optimisers no longer supported + # ### Loading and Splitting the Data iris = RDatasets.dataset("datasets", "iris"); y, X = unpack(iris, ==(:Species), colname -> true, rng=123); X = Float32.(X) # To be compatible with type of network network parameters -(X_train, X_test), (y_train, y_test) = partition((X, y), 0.8, - multi = true, - shuffle = true, - rng=42); +(X_train, X_test), (y_train, y_test) = partition( + (X, y), 0.8, + multi = true, + shuffle = true, + rng=42, +); # ### Instantiating the model -# Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start). + +# Now let's construct our model. This follows a similar setup to the one followed in the +# [Quick Start](../../index.md#Quick-Start). NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux clf = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=10, - rng=42 - ) + epochs=10, + rng=42, +) # ### Initial round of training -# Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above. + +# Now let's train the model. Calling fit! will automatically train it for 100 epochs as +# specified above. mach = machine(clf, X_train, y_train) fit!(mach) # Let's evaluate the training loss and validation accuracy -training_loss = cross_entropy(predict(mach, X_train), y_train) +training_loss = cross_entropy(predict(mach, X_train), y_train) + #- + val_acc = accuracy(predict_mode(mach, X_test), y_test) # Poor performance it seems. + # ### Incremental Training -# Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these -# hyperparameters and call fit again. It won't reset the model parameters before training. -clf.optimiser.eta = clf.optimiser.eta / 2 +# Now let's train it for another 30 epochs at half the original learning rate. All we need +# to do is changes these hyperparameters and call fit again. It won't reset the model +# parameters before training. + +clf.optimiser = Optimisers.Adam(clf.optimiser.eta/2) clf.epochs = clf.epochs + 30 fit!(mach, verbosity=2); # Let's evaluate the training loss and validation accuracy -training_loss = cross_entropy(predict(mach, X_train), y_train) +training_loss = cross_entropy(predict(mach, X_train), y_train) + #- + training_acc = accuracy(predict_mode(mach, X_test), y_test) -#- -# That's much better. If we are rather interested in resetting the model parameters before fitting, we can do `fit(mach, force=true)`. +#- -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=false) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src +# That's much better. If we are rather interested in resetting the model parameters before +# fitting, we can do `fit(mach, force=true)`. diff --git a/dev/common_workflows/incremental_training/notebook.unexecuted.ipynb b/dev/common_workflows/incremental_training/notebook.unexecuted.ipynb new file mode 100644 index 00000000..4d12d4d7 --- /dev/null +++ b/dev/common_workflows/incremental_training/notebook.unexecuted.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Incremental Training with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this workflow example we explore how to incrementally train MLJFlux models." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.* This tutorial is available as a Jupyter\n", + "notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/incremental_training)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ # Has MLJFlux models\n", + "using Flux # For more flexibility\n", + "import RDatasets # Dataset source\n", + "import Optimisers # native Flux.jl optimisers no longer supported" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X) # To be compatible with type of network network parameters\n", + "(X_train, X_test), (y_train, y_test) = partition(\n", + " (X, y), 0.8,\n", + " multi = true,\n", + " shuffle = true,\n", + " rng=42,\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's construct our model. This follows a similar setup to the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=10,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Initial round of training" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's train the model. Calling fit! will automatically train it for 100 epochs as\n", + "specified above." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(clf, X_train, y_train)\n", + "fit!(mach)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's evaluate the training loss and validation accuracy" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "training_loss = cross_entropy(predict(mach, X_train), y_train)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "val_acc = accuracy(predict_mode(mach, X_test), y_test)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Poor performance it seems." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Incremental Training" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's train it for another 30 epochs at half the original learning rate. All we need\n", + "to do is changes these hyperparameters and call fit again. It won't reset the model\n", + "parameters before training." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "clf.optimiser = Optimisers.Adam(clf.optimiser.eta/2)\n", + "clf.epochs = clf.epochs + 30\n", + "fit!(mach, verbosity=2);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's evaluate the training loss and validation accuracy" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "training_loss = cross_entropy(predict(mach, X_train), y_train)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "training_acc = accuracy(predict_mode(mach, X_test), y_test)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "That's much better. If we are rather interested in resetting the model parameters before\n", + "fitting, we can do `fit(mach, force=true)`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/incremental_training/notebook/index.html b/dev/common_workflows/incremental_training/notebook/index.html new file mode 100644 index 00000000..989e43f1 --- /dev/null +++ b/dev/common_workflows/incremental_training/notebook/index.html @@ -0,0 +1,71 @@ + +Incremental Training · MLJFlux

Incremental Training with MLJFlux

In this workflow example we explore how to incrementally train MLJFlux models.

Julia version is assumed to be 1.10.* This tutorial is available as a Jupyter notebook or julia script here.

Basic Imports

using MLJ               # Has MLJFlux models
+using Flux              # For more flexibility
+import RDatasets        # Dataset source
+import Optimisers       # native Flux.jl optimisers no longer supported

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
+X = Float32.(X)      # To be compatible with type of network network parameters
+(X_train, X_test), (y_train, y_test) = partition(
+    (X, y), 0.8,
+    multi = true,
+    shuffle = true,
+    rng=42,
+);

Instantiating the model

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
+clf = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=10,
+    rng=42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Initial round of training

Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above.

mach = machine(clf, X_train, y_train)
+fit!(mach)
trained Machine; caches model-specific representations of data
+  model: NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)
+  args: 
+    1:	Source @519 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}
+    2:	Source @768 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}}
+

Let's evaluate the training loss and validation accuracy

training_loss = cross_entropy(predict(mach, X_train), y_train)
0.4392339631006042
val_acc = accuracy(predict_mode(mach, X_test), y_test)
0.9

Poor performance it seems.

Incremental Training

Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these hyperparameters and call fit again. It won't reset the model parameters before training.

clf.optimiser = Optimisers.Adam(clf.optimiser.eta/2)
+clf.epochs = clf.epochs + 30
+fit!(mach, verbosity=2);
[ Info: Updating machine(NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …).
+[ Info: Loss is 0.4393
+[ Info: Loss is 0.4317
+[ Info: Loss is 0.4244
+[ Info: Loss is 0.4171
+[ Info: Loss is 0.4096
+[ Info: Loss is 0.4017
+[ Info: Loss is 0.3931
+[ Info: Loss is 0.3838
+[ Info: Loss is 0.3737
+[ Info: Loss is 0.3626
+[ Info: Loss is 0.3505
+[ Info: Loss is 0.3382
+[ Info: Loss is 0.3244
+[ Info: Loss is 0.3095
+[ Info: Loss is 0.2954
+[ Info: Loss is 0.2813
+[ Info: Loss is 0.2654
+[ Info: Loss is 0.25
+[ Info: Loss is 0.235
+[ Info: Loss is 0.2203
+[ Info: Loss is 0.2118
+[ Info: Loss is 0.196
+[ Info: Loss is 0.179
+[ Info: Loss is 0.1674
+[ Info: Loss is 0.1586
+[ Info: Loss is 0.1469
+[ Info: Loss is 0.1353
+[ Info: Loss is 0.1251
+[ Info: Loss is 0.1173
+[ Info: Loss is 0.1102

Let's evaluate the training loss and validation accuracy

training_loss = cross_entropy(predict(mach, X_train), y_train)
0.10519664737051289
training_acc = accuracy(predict_mode(mach, X_test), y_test)
0.9666666666666667

That's much better. If we are rather interested in resetting the model parameters before fitting, we can do fit(mach, force=true).


This page was generated using Literate.jl.

diff --git a/dev/common_workflows/live_training/Manifest.toml b/dev/common_workflows/live_training/Manifest.toml new file mode 100644 index 00000000..7de851af --- /dev/null +++ b/dev/common_workflows/live_training/Manifest.toml @@ -0,0 +1,1985 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "540de0ef73bde5cd1000ae716c1fee2e0f3a0bf1" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "227985d885b4dbce5e18a96f9326ea1e836e5a03" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.69.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.24.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.25.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.109" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +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.4+1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FeatureSelection]] +deps = ["MLJModelInterface", "ScientificTypesBase", "Tables"] +git-tree-sha1 = "aef9de607c5313ae2ad78f339eee8732cf38d150" +uuid = "33837fe5-dbff-4c9e-8c2f-c5612fe2b8b6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "8a66c07630d6428eaab3506a0eabfcf4a9edea05" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.11" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "ff38ba61beff76b8f4acad8ab0c97ef73bb670cb" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.9+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.5" + +[[deps.GR_jll]] +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 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.5+0" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +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" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "8e5a339882cc401688d79b811d923a38ba77d50a" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.20" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "389aea28d882a40b5e1747069af71bdbd47a1cae" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "7.2.1" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "e0b5cd21dc1b44ec6e64f351976f961e6f31d6c4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.3" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "FeatureSelection", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "fb2da07c720db5d900bcaa940e1d098de281747a" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.6" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f707a01a92d664479522313907c07afa5d81df19" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.5" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "24e5d28b2ea86b3feb6af5a5735f012d62e27b65" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.4.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "84a5be55a364bb6b6dc7780bbd64317ebdd3ad1e" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.3" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "Optimisers", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2fcdce39d979f2865aaa82d5750c6ee4ce543f4d" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.5.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "f93f381a82fc1768c1a99c27a84b7ea1b1ee186d" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.2" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "88ef480f46e0506143681b3fb14d86742f3cecb1" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.10.0" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "42bcff728e44bcb682885a8f9900f9f4b4891c18" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.17.1" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "97f959ae512736b02c69a08af45afc5321bcef91" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.7" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + + [deps.Metalhead.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mocking]] +deps = ["Compat", "ExprTools"] +git-tree-sha1 = "bf17d9cb4f0d2882351dfad030598f64286e5936" +uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" +version = "0.7.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.2.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[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", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[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 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.RData]] +deps = ["CategoricalArrays", "CodecZlib", "DataFrames", "Dates", "FileIO", "Requires", "TimeZones", "Unicode"] +git-tree-sha1 = "19e47a495dfb7240eb44dc6971d660f7e4244a72" +uuid = "df47a6cb-8c03-5eed-afd8-b6050d6c41da" +version = "0.8.3" + +[[deps.RDatasets]] +deps = ["CSV", "CodecZlib", "DataFrames", "FileIO", "Printf", "RData", "Reexport"] +git-tree-sha1 = "2720e6f6afb3e562ccb70a6b62f8f308ff810333" +uuid = "ce6b1742-4840-55fa-b093-852dadbb1d8b" +version = "0.7.7" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "6e00379a24597be4ae1ee6b2d882e15392040132" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.5" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "983c41a0ddd6c19f5607ca87271d7c7620ab5d50" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.3.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[deps.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.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TZJData]] +deps = ["Artifacts"] +git-tree-sha1 = "1607ad46cf8d642aa779a1d45af1c8620dbf6915" +uuid = "dc5dba14-91b3-4cab-a142-028a31da12f7" +version = "1.2.0+2024a" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimeZones]] +deps = ["Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] +git-tree-sha1 = "a6ae8d7a27940c33624f8c7bde5528de21ba730d" +uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" +version = "1.17.0" +weakdeps = ["RecipesBase"] + + [deps.TimeZones.extensions] + TimeZonesRecipesBaseExt = "RecipesBase" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.9" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.Unzip]] +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.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.12.7+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+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" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[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"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[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 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[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", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+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 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[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" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +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" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" diff --git a/dev/workflow examples/Hyperparameter Tuning/Project.toml b/dev/common_workflows/live_training/Project.toml similarity index 82% rename from dev/workflow examples/Hyperparameter Tuning/Project.toml rename to dev/common_workflows/live_training/Project.toml index 74f46e95..b95d41bd 100644 --- a/dev/workflow examples/Hyperparameter Tuning/Project.toml +++ b/dev/common_workflows/live_training/Project.toml @@ -2,5 +2,6 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" diff --git a/dev/common_workflows/live_training/README/index.html b/dev/common_workflows/live_training/README/index.html new file mode 100644 index 00000000..4b1cd7bf --- /dev/null +++ b/dev/common_workflows/live_training/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/common_workflows/live_training/generate.jl b/dev/common_workflows/live_training/generate.jl new file mode 100644 index 00000000..daf1a1a1 --- /dev/null +++ b/dev/common_workflows/live_training/generate.jl @@ -0,0 +1,5 @@ +# Execute this julia file in a new julia process to generate the notebooks from +# ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=false, pluto=false) diff --git a/dev/workflow examples/Live Training/live-training.jl b/dev/common_workflows/live_training/notebook.jl similarity index 52% rename from dev/workflow examples/Live Training/live-training.jl rename to dev/common_workflows/live_training/notebook.jl index 5715d1c8..16bae98a 100644 --- a/dev/workflow examples/Live Training/live-training.jl +++ b/dev/common_workflows/live_training/notebook.jl @@ -1,17 +1,24 @@ # # Live Training with MLJFlux -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/live_training). + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md # **Julia version** is assumed to be 1.10.* # ### Basic Imports -using MLJ # Has MLJFlux models -using Flux # For more flexibility -import RDatasets # Dataset source -using Plots # For training plot +using MLJ +using Flux +import RDatasets +import Optimisers + +#- + +using Plots # ### Loading and Splitting the Data @@ -21,20 +28,24 @@ X = Float32.(X); # To be compatible with type of network network parameters # ### Instantiating the model -# Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start). + +# Now let's construct our model. This follows a similar setup to the one followed in the +# [Quick Start](../../index.md#Quick-Start). NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux clf = NeuralNetworkClassifier( builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu), - optimiser=Flux.ADAM(0.01), + optimiser=Optimisers.Adam(0.01), batch_size=8, - epochs=50, - rng=42 - ) + epochs=50, + rng=42, +) -# Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration. +# Now let's wrap this in an iterated model. We will use a callback that makes a plot for +# validation losses each iteration. + stop_conditions = [ Step(1), # Repeatedly train for one iteration NumberLimit(100), # Don't train for more than 100 iterations @@ -45,29 +56,23 @@ gr(reuse=true) # use the same window for plots function plot_loss(loss) push!(validation_losses, loss) display(plot(validation_losses, label="validation loss", xlim=(1, 100))) - sleep(.01) # to catch up with the plots while they are being generated + sleep(.01) # to catch up with the plots while they are being generated end callbacks = [ WithLossDo(plot_loss),] -iterated_model = IteratedModel(model=clf, - resampling=Holdout(), - measures=log_loss, - iteration_parameter=:(epochs), - controls=vcat(stop_conditions, callbacks), - retrain=true - ) +iterated_model = IteratedModel( + model=clf, + resampling=Holdout(), + measures=log_loss, + iteration_parameter=:(epochs), + controls=vcat(stop_conditions, callbacks), + retrain=true, +) # ### Live Training # Simply fitting the model is all we need mach = machine(iterated_model, X, y) -fit!(mach, force=true) - - -#- - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute=false) #src -Literate.notebook(@__FILE__, @__DIR__, execute=true) #src +fit!(mach, force=true) diff --git a/dev/common_workflows/live_training/notebook.unexecuted.ipynb b/dev/common_workflows/live_training/notebook.unexecuted.ipynb new file mode 100644 index 00000000..a647a39a --- /dev/null +++ b/dev/common_workflows/live_training/notebook.unexecuted.ipynb @@ -0,0 +1,196 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Live Training with MLJFlux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/common_workflows/live_training)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ\n", + "using Flux\n", + "import RDatasets\n", + "import Optimisers" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Loading and Splitting the Data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", + "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", + "X = Float32.(X); # To be compatible with type of network network parameters" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiating the model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's construct our model. This follows a similar setup to the one followed in the\n", + "[Quick Start](../../index.md#Quick-Start)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", + "\n", + "clf = NeuralNetworkClassifier(\n", + " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", + " optimiser=Optimisers.Adam(0.01),\n", + " batch_size=8,\n", + " epochs=50,\n", + " rng=42,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now let's wrap this in an iterated model. We will use a callback that makes a plot for\n", + "validation losses each iteration." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "stop_conditions = [\n", + " Step(1), # Repeatedly train for one iteration\n", + " NumberLimit(100), # Don't train for more than 100 iterations\n", + "]\n", + "\n", + "validation_losses = []\n", + "gr(reuse=true) # use the same window for plots\n", + "function plot_loss(loss)\n", + " push!(validation_losses, loss)\n", + " display(plot(validation_losses, label=\"validation loss\", xlim=(1, 100)))\n", + " sleep(.01) # to catch up with the plots while they are being generated\n", + "end\n", + "\n", + "callbacks = [ WithLossDo(plot_loss),]\n", + "\n", + "iterated_model = IteratedModel(\n", + " model=clf,\n", + " resampling=Holdout(),\n", + " measures=log_loss,\n", + " iteration_parameter=:(epochs),\n", + " controls=vcat(stop_conditions, callbacks),\n", + " retrain=true,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Live Training\n", + "Simply fitting the model is all we need" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(iterated_model, X, y)\n", + "fit!(mach, force=true)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/common_workflows/live_training/notebook/index.html b/dev/common_workflows/live_training/notebook/index.html new file mode 100644 index 00000000..48782074 --- /dev/null +++ b/dev/common_workflows/live_training/notebook/index.html @@ -0,0 +1,81 @@ + +Live Training · MLJFlux

Live Training with MLJFlux

This tutorial is available as a Jupyter notebook or julia script here.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ
+using Flux
+import RDatasets
+import Optimisers
using Plots

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
+y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
+X = Float32.(X);      # To be compatible with type of network network parameters

Instantiating the model

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
+
+clf = NeuralNetworkClassifier(
+    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
+    optimiser=Optimisers.Adam(0.01),
+    batch_size=8,
+    epochs=50,
+    rng=42,
+)
NeuralNetworkClassifier(
+  builder = MLP(
+        hidden = (5, 4), 
+        σ = NNlib.relu), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 50, 
+  batch_size = 8, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 42, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration.

stop_conditions = [
+    Step(1),            # Repeatedly train for one iteration
+    NumberLimit(100),   # Don't train for more than 100 iterations
+]
+
+validation_losses =  []
+gr(reuse=true)                  # use the same window for plots
+function plot_loss(loss)
+    push!(validation_losses, loss)
+    display(plot(validation_losses, label="validation loss", xlim=(1, 100)))
+    sleep(.01)  # to catch up with the plots while they are being generated
+end
+
+callbacks = [ WithLossDo(plot_loss),]
+
+iterated_model = IteratedModel(
+    model=clf,
+    resampling=Holdout(),
+    measures=log_loss,
+    iteration_parameter=:(epochs),
+    controls=vcat(stop_conditions, callbacks),
+    retrain=true,
+)
ProbabilisticIteratedModel(
+  model = NeuralNetworkClassifier(
+        builder = MLP(hidden = (5, 4), …), 
+        finaliser = NNlib.softmax, 
+        optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8), 
+        loss = Flux.Losses.crossentropy, 
+        epochs = 50, 
+        batch_size = 8, 
+        lambda = 0.0, 
+        alpha = 0.0, 
+        rng = 42, 
+        optimiser_changes_trigger_retraining = false, 
+        acceleration = CPU1{Nothing}(nothing)), 
+  controls = Any[IterationControl.Step(1), EarlyStopping.NumberLimit(100), IterationControl.WithLossDo{typeof(Main.plot_loss)}(Main.plot_loss, false, nothing)], 
+  resampling = Holdout(
+        fraction_train = 0.7, 
+        shuffle = false, 
+        rng = Random._GLOBAL_RNG()), 
+  measure = LogLoss(tol = 2.22045e-16), 
+  weights = nothing, 
+  class_weights = nothing, 
+  operation = MLJModelInterface.predict, 
+  retrain = true, 
+  check_measure = true, 
+  iteration_parameter = :epochs, 
+  cache = true)

Live Training

Simply fitting the model is all we need

mach = machine(iterated_model, X, y)
+fit!(mach, force=true)
trained Machine; does not cache data
+  model: ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …)
+  args: 
+    1:	Source @963 ⏎ ScientificTypesBase.Table{AbstractVector{ScientificTypesBase.Continuous}}
+    2:	Source @713 ⏎ AbstractVector{ScientificTypesBase.Multiclass{3}}
+

This page was generated using Literate.jl.

diff --git a/dev/contributing/index.html b/dev/contributing/index.html index 8f182f03..1d506454 100644 --- a/dev/contributing/index.html +++ b/dev/contributing/index.html @@ -1,2 +1,2 @@ -Contributing · MLJFlux

Adding new models to MLJFlux

This section assumes familiarity with the MLJ model API

If one subtypes a new model type as either MLJFlux.MLJFluxProbabilistic or MLJFlux.MLJFluxDeterministic, then instead of defining new methods for MLJModelInterface.fit and MLJModelInterface.update one can make use of fallbacks by implementing the lower level methods shape, build, and fitresult. See the classifier source code for an example.

One still needs to implement a new predict method.

+Contributing · MLJFlux

Adding new models to MLJFlux

This section assumes familiarity with the MLJ model API

If one subtypes a new model type as either MLJFlux.MLJFluxProbabilistic or MLJFlux.MLJFluxDeterministic, then instead of defining new methods for MLJModelInterface.fit and MLJModelInterface.update one can make use of fallbacks by implementing the lower level methods shape, build, and fitresult. See the classifier source code for an example.

One still needs to implement a new predict method.

diff --git a/dev/full tutorials/Boston/index.html b/dev/extended_examples/Boston/index.html similarity index 50% rename from dev/full tutorials/Boston/index.html rename to dev/extended_examples/Boston/index.html index a0c7708f..56fdfd6a 100644 --- a/dev/full tutorials/Boston/index.html +++ b/dev/extended_examples/Boston/index.html @@ -1,2 +1,2 @@ -- · MLJFlux
+- · MLJFlux
diff --git a/dev/extended_examples/MNIST/Manifest.toml b/dev/extended_examples/MNIST/Manifest.toml new file mode 100644 index 00000000..29c5e94b --- /dev/null +++ b/dev/extended_examples/MNIST/Manifest.toml @@ -0,0 +1,2319 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.3" +manifest_format = "2.0" +project_hash = "3049fd46149696b9ac7df5214242bc2535d0a10e" + +[[deps.ARFFFiles]] +deps = ["CategoricalArrays", "Dates", "Parsers", "Tables"] +git-tree-sha1 = "e8c8e0a2be6eb4f56b1672e46004463033daa409" +uuid = "da404889-ca92-49ff-9e8b-0aa6b4d38dc8" +version = "1.4.1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "0.1.0" + +[[deps.AtomsBase]] +deps = ["LinearAlgebra", "PeriodicTable", "Printf", "Requires", "StaticArrays", "Unitful", "UnitfulAtomic"] +git-tree-sha1 = "995c2b6b17840cd87b722ce9c6cdd72f47bab545" +uuid = "a963bdd2-2df7-4f54-a1ee-49d51e6be12a" +version = "0.3.5" + +[[deps.BFloat16s]] +deps = ["LinearAlgebra", "Printf", "Random", "Test"] +git-tree-sha1 = "2c7cc21e8678eff479978a0a2ef5ce2f51b63dff" +uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" +version = "0.5.0" + +[[deps.BSON]] +git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.9" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "7aa7ad1682f3d5754e3491bb59b8103cae28e3a3" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.40" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BitFlags]] +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.8" + +[[deps.BufferedStreams]] +git-tree-sha1 = "4ae47f9a4b1dc19897d3743ff13685925c5202ec" +uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" +version = "1.2.1" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+1" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.14" + +[[deps.CUDA]] +deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics"] +git-tree-sha1 = "b8c28cb78014f7ae81a652ce1524cba7667dea5c" +uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" +version = "5.3.5" + + [deps.CUDA.extensions] + ChainRulesCoreExt = "ChainRulesCore" + EnzymeCoreExt = "EnzymeCore" + SpecialFunctionsExt = "SpecialFunctions" + + [deps.CUDA.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.CUDA_Driver_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "dc172b558adbf17952001e15cf0d6364e6d78c2f" +uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" +version = "0.8.1+0" + +[[deps.CUDA_Runtime_Discovery]] +deps = ["Libdl"] +git-tree-sha1 = "38f830504358e9972d2a0c3e5d51cb865e0733df" +uuid = "1af6417a-86b4-443c-805f-a4643ffb695f" +version = "0.2.4" + +[[deps.CUDA_Runtime_jll]] +deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "4ca7d6d92075906c2ce871ea8bba971fff20d00c" +uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" +version = "0.12.1+0" + +[[deps.CUDNN_jll]] +deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "cbf7d75f8c58b147bdf6acea2e5bc96cececa6d4" +uuid = "62b44479-cb7b-5706-934f-f13b2eb2e645" +version = "9.0.0+1" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.0+2" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" +weakdeps = ["JSON", "RecipesBase", "SentinelArrays", "StructTypes"] + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + +[[deps.CategoricalDistributions]] +deps = ["CategoricalArrays", "Distributions", "Missings", "OrderedCollections", "Random", "ScientificTypes"] +git-tree-sha1 = "926862f549a82d6c3a7145bc7f1adff2a91a39f0" +uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" +version = "0.1.15" + + [deps.CategoricalDistributions.extensions] + UnivariateFiniteDisplayExt = "UnicodePlots" + + [deps.CategoricalDistributions.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "291821c1251486504f6bae435227907d734e94d2" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.66.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "575cd02e080939a33b6df6c5853d14924c08e35b" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.23.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.Chemfiles]] +deps = ["AtomsBase", "Chemfiles_jll", "DocStringExtensions", "PeriodicTable", "Unitful", "UnitfulAtomic"] +git-tree-sha1 = "82fe5e341c793cb51149d993307da9543824b206" +uuid = "46823bd8-5fb3-5f92-9aa0-96921f3dd015" +version = "0.10.41" + +[[deps.Chemfiles_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f3743181e30d87c23d9c8ebd493b77f43d8f1890" +uuid = "78a364fa-1a3c-552a-b4bb-8fa0f9c1fcca" +version = "0.10.4+0" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.25.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.15.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" + +[[deps.Conda]] +deps = ["Downloads", "JSON", "VersionParsing"] +git-tree-sha1 = "51cab8e982c5b598eea9c8ceaced4b58d9dd37c9" +uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" +version = "1.10.0" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataDeps]] +deps = ["HTTP", "Libdl", "Reexport", "SHA", "Scratch", "p7zip_jll"] +git-tree-sha1 = "8ae085b71c462c2cb1cfedcb10c3c877ec6cf03f" +uuid = "124859b0-ceae-595e-8997-d05f6a7a8dfe" +version = "0.7.13" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "22c595ca4146c07b16bcf9c8bea86f731f7109d2" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.108" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarlyStopping]] +deps = ["Dates", "Statistics"] +git-tree-sha1 = "98fdf08b707aaf69f524a6cd0a67858cefe0cfb6" +uuid = "792122b4-ca99-40de-a6bc-6742525f08b6" +version = "0.3.0" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8e9441ee83492030ace98f9789a654a6d0b1f643" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +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.4+1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.21" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.11.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "a5475163b611812d073171583982c42ea48d22b0" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.14.15" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxMetalExt = "Metal" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Functors]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d3e63d9fa13f8eaa2f06f64949e2afc593ff52c2" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.4.10" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "ff38ba61beff76b8f4acad8ab0c97ef73bb670cb" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.9+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] +git-tree-sha1 = "38cb19b8a3e600e509dc36a6396ac74266d108c1" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "10.1.1" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.6" + +[[deps.GPUCompiler]] +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"] +git-tree-sha1 = "1600477fba37c9fc067b9be21f5e8101f24a8865" +uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" +version = "0.26.4" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.5" + +[[deps.GR_jll]] +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 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.5+0" + +[[deps.GZip]] +deps = ["Libdl", "Zlib_jll"] +git-tree-sha1 = "0085ccd5ec327c077ec5b91a5f937b759810ba62" +uuid = "92fee26a-97fe-5a0c-ad85-20a5f3185b63" +version = "0.6.2" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.2+0" + +[[deps.Glob]] +git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" +uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" +version = "1.3.1" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HDF5]] +deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "Requires", "UUIDs"] +git-tree-sha1 = "e856eef26cf5bf2b0f95f8f4fc37553c72c8641c" +uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" +version = "0.17.2" + + [deps.HDF5.extensions] + MPIExt = "MPI" + + [deps.HDF5.weakdeps] + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] +git-tree-sha1 = "82a471768b513dc39e471540fdadc84ff80ff997" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "1.14.3+3" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.10.8" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ca0f6bf568b4bfc807e7537f081c81e35ceca114" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.10.0+0" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.IJulia]] +deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Libdl", "Logging", "Markdown", "MbedTLS", "Pkg", "Printf", "REPL", "Random", "SoftGlobalScope", "Test", "UUIDs", "ZMQ"] +git-tree-sha1 = "47ac8cc196b81001a711f4b2c12c97372338f00c" +uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +version = "1.24.2" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "950c3717af761bc3ff906c2e8e52bd83390b6ec2" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.14" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "b2a7eaa169c13f5bcae8131a83bc30eff8f71be0" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.2" + +[[deps.ImageShow]] +deps = ["Base64", "ColorSchemes", "FileIO", "ImageBase", "ImageCore", "OffsetArrays", "StackViews"] +git-tree-sha1 = "3b5344bcdbdc11ad58f3b1956709b5b9345355de" +uuid = "4e3cecfd-b093-5904-9786-8bbb286a6a31" +version = "0.3.8" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InternedStrings]] +deps = ["Random", "Test"] +git-tree-sha1 = "eb05b5625bc5d821b8075a77e4c421933e20c76b" +uuid = "7d512f48-7fb1-5a58-b986-67e6dc259f01" +version = "0.7.0" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterationControl]] +deps = ["EarlyStopping", "InteractiveUtils"] +git-tree-sha1 = "e663925ebc3d93c1150a7570d114f9ea2f664726" +uuid = "b3c1a2ee-3fec-4384-bf48-272ea71de57c" +version = "0.5.4" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Reexport", "Requires", "TranscodingStreams", "UUIDs", "Unicode"] +git-tree-sha1 = "bdbe8222d2f5703ad6a7019277d149ec6d78c301" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.48" + +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.7" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JSON3]] +deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] +git-tree-sha1 = "eb3edce0ed4fa32f75a0a11217433c31d56bd48b" +uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" +version = "1.14.0" + + [deps.JSON3.extensions] + JSON3ArrowExt = ["ArrowTypes"] + + [deps.JSON3.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.3+0" + +[[deps.JuliaNVTXCallbacks_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "af433a10f3942e882d3c671aacb203e006a5808f" +uuid = "9c1d0b0a-7046-5b2e-a33f-ea22f176ac7e" +version = "0.2.1+0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "db02395e4c374030c53dc28f3c1d33dec35f7272" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.19" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "839c82932db86740ae729779e610f07a1640be9a" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "6.6.3" +weakdeps = ["BFloat16s"] + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.29+0" + +[[deps.LLVMLoopInfo]] +git-tree-sha1 = "2e5c102cfc41f48ae4740c7eca7743cc7e7b75ea" +uuid = "8b046642-f1f6-4319-8d3c-209ddc03c586" +version = "1.0.0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" + +[[deps.Latexify]] +deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "e0b5cd21dc1b44ec6e64f351976f961e6f31d6c4" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.3" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + +[[deps.LatinHypercubeSampling]] +deps = ["Random", "StableRNGs", "StatsBase", "Test"] +git-tree-sha1 = "825289d43c753c7f1bf9bed334c253e9913997f8" +uuid = "a5e1c1ea-c99a-51d3-a14d-a9a37257b02d" +version = "1.9.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LearnAPI]] +deps = ["InteractiveUtils", "Statistics"] +git-tree-sha1 = "ec695822c1faaaa64cee32d0b21505e1977b4809" +uuid = "92ad9a40-7767-427a-9ee6-6e577f1266cb" +version = "0.1.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.11+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.49.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.5.1+1" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "18144f3e9cbe9b15b070288eef858f71b291ce37" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.27" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.0.3" + +[[deps.MAT]] +deps = ["BufferedStreams", "CodecZlib", "HDF5", "SparseArrays"] +git-tree-sha1 = "1d2dd9b186742b0f317f2530ddcbf00eebb18e96" +uuid = "23992714-dd62-5051-b70f-ba57cb901cac" +version = "0.10.7" + +[[deps.MLDatasets]] +deps = ["CSV", "Chemfiles", "DataDeps", "DataFrames", "DelimitedFiles", "FileIO", "FixedPointNumbers", "GZip", "Glob", "HDF5", "ImageShow", "JLD2", "JSON3", "LazyModules", "MAT", "MLUtils", "NPZ", "Pickle", "Printf", "Requires", "SparseArrays", "Statistics", "Tables"] +git-tree-sha1 = "aab72207b3c687086a400be710650a57494992bd" +uuid = "eb30cadb-4394-5ae3-aed4-317e484a6458" +version = "0.7.14" + +[[deps.MLFlowClient]] +deps = ["Dates", "FilePathsBase", "HTTP", "JSON", "ShowCases", "URIs", "UUIDs"] +git-tree-sha1 = "9abb12b62debc27261c008daa13627255bf79967" +uuid = "64a0f543-368b-4a9a-827a-e71edb2a0b83" +version = "0.5.1" + +[[deps.MLJ]] +deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "LinearAlgebra", "MLJBalancing", "MLJBase", "MLJEnsembles", "MLJFlow", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "Reexport", "ScientificTypes", "StatisticalMeasures", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "bd2072e9cd65be0a3cb841f3d8cda1d2cacfe5db" +uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +version = "0.20.5" + +[[deps.MLJBalancing]] +deps = ["MLJBase", "MLJModelInterface", "MLUtils", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "f02e28f9f3c54a138db12a97a5d823e5e572c2d6" +uuid = "45f359ea-796d-4f51-95a5-deb1a414c586" +version = "0.1.4" + +[[deps.MLJBase]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LearnAPI", "LinearAlgebra", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "RecipesBase", "Reexport", "ScientificTypes", "Serialization", "StatisticalMeasuresBase", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "aba2ffd56a9a97027b4102055dd9f909a6e35d12" +uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" +version = "1.3.0" +weakdeps = ["StatisticalMeasures"] + + [deps.MLJBase.extensions] + DefaultMeasuresExt = "StatisticalMeasures" + +[[deps.MLJEnsembles]] +deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatisticalMeasuresBase", "StatsBase"] +git-tree-sha1 = "d3dd87194ec96892bb243b65225a462c7ab16e66" +uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" +version = "0.4.2" + +[[deps.MLJFlow]] +deps = ["MLFlowClient", "MLJBase", "MLJModelInterface"] +git-tree-sha1 = "508bff8071d7d1902d6f1b9d1e868d58821f1cfe" +uuid = "7b7b8358-b45c-48ea-a8ef-7ca328ad328f" +version = "0.5.0" + +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "72935b7de07a7f6b72fd49ecc7898dac79248d46" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.4.0" + +[[deps.MLJIteration]] +deps = ["IterationControl", "MLJBase", "Random", "Serialization"] +git-tree-sha1 = "1e909ee09417ebd18559c4d9c15febff887192df" +uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +version = "0.6.1" + +[[deps.MLJModelInterface]] +deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "d2a45e1b5998ba3fdfb6cfe0c81096d4c7fb40e7" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.9.6" + +[[deps.MLJModels]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "410da88e0e6ece5467293d2c76b51b7c6df7d072" +uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" +version = "0.16.17" + +[[deps.MLJTuning]] +deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase", "StatisticalMeasuresBase"] +git-tree-sha1 = "efb9ec087ab9589afad0002e69fdd9cd38ef1643" +uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" +version = "0.8.6" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "b45738c2e3d0d402dffa32b2c1654759a2ac35a4" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.4" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "4099bb6809ac109bfc17d521dad33763bcf026b7" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "4.2.1+1" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.11" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "ce0ca3dd147c43de175c5aff161315a424f4b8ac" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.3.3+1" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "ChainRulesCore", "Flux", "Functors", "JLD2", "LazyArtifacts", "MLUtils", "NNlib", "PartialFunctions", "Random", "Statistics"] +git-tree-sha1 = "5aac9a2b511afda7bf89df5044a2e0b429f83152" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.9.3" +weakdeps = ["CUDA"] + + [deps.Metalhead.extensions] + MetalheadCUDAExt = "CUDA" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.4+2" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] +git-tree-sha1 = "3d4617f943afe6410206a5294a95948c8d1b35bd" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.17" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NPZ]] +deps = ["FileIO", "ZipFile"] +git-tree-sha1 = "60a8e272fe0c5079363b28b0953831e2dd7b7e6f" +uuid = "15e1cf62-19b3-5cfa-8e77-841668bca605" +version = "0.4.3" + +[[deps.NVTX]] +deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] +git-tree-sha1 = "53046f0483375e3ed78e49190f1154fa0a4083a1" +uuid = "5da4648a-3479-48b8-97b9-01cb529c0a1f" +version = "0.3.4" + +[[deps.NVTX_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ce3269ed42816bf18d500c9f63418d4b0d9f5a3b" +uuid = "e98f9f5b-d649-5603-91fd-7774390e6439" +version = "3.1.0+2" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OffsetArrays]] +git-tree-sha1 = "e64b4f5ea6b7389f6f046d13d4896a8f9c1ba71e" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.14.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "963a3f28a2e65bb87a68033ea4a616002406037d" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.5" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenML]] +deps = ["ARFFFiles", "HTTP", "JSON", "Markdown", "Pkg", "Scratch"] +git-tree-sha1 = "6efb039ae888699d5a74fb593f6f3e10c7193e33" +uuid = "8b6db2d4-7670-4922-a472-f9537c81ab66" +version = "0.3.1" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "e25c1778a98e34219a00455d6e4384e017ea9762" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "4.1.6+0" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.4.3" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.13+1" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "6572fe0c5b74431aaeb0b18a4aa5ef03c84678be" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.3.3" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.PackageExtensionCompat]] +git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" +uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" +version = "1.0.2" +weakdeps = ["Requires", "TOML"] + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.PartialFunctions]] +deps = ["MacroTools"] +git-tree-sha1 = "47b49a4dbc23b76682205c646252c0f9e1eb75af" +uuid = "570af359-4316-4cb7-8c74-252c00c2016b" +version = "1.2.0" + +[[deps.PeriodicTable]] +deps = ["Base64", "Unitful"] +git-tree-sha1 = "238aa6298007565529f911b734e18addd56985e1" +uuid = "7b2266bf-644c-5ea3-82d8-af4bbd25a884" +version = "1.2.1" + +[[deps.Pickle]] +deps = ["BFloat16s", "DataStructures", "InternedStrings", "Mmap", "Serialization", "SparseArrays", "StridedViews", "StringEncodings", "ZipFile"] +git-tree-sha1 = "e99da19b86b7e1547b423fc1721b260cfbe83acb" +uuid = "fbb45041-c46e-462f-888f-7c521cafbc2c" +version = "0.3.5" + +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.1.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.1" + +[[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", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] +git-tree-sha1 = "442e1e7ac27dd5ff8825c3fa62fbd1e86397974b" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.40.4" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyPrinting]] +git-tree-sha1 = "142ee93724a9c5d04d78df7006670a93ed1b244e" +uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" +version = "0.4.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.0" + +[[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 = "37b7bb7aabf9a085e0044307e1717436117f2b3b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.5.3+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.4" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.Random123]] +deps = ["Random", "RandomNumbers"] +git-tree-sha1 = "4743b43e5a9c4a2ede372de7061eed81795b12e7" +uuid = "74087812-796a-5b5d-8853-05524746bad3" +version = "1.7.0" + +[[deps.RandomNumbers]] +deps = ["Random", "Requires"] +git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111" +uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" +version = "1.5.3" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.2+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.ScientificTypes]] +deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] +git-tree-sha1 = "75ccd10ca65b939dab03b812994e571bf1e3e1da" +uuid = "321657f4-b219-11e9-178b-2701a2544e81" +version = "3.0.2" + +[[deps.ScientificTypesBase]] +git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.0.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.3" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.1.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SoftGlobalScope]] +deps = ["REPL"] +git-tree-sha1 = "986ec2b6162ccb95de5892ed17832f95badf770c" +uuid = "b85f4697-e234-5449-a836-ec8e2f98b302" +version = "1.1.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "9ae599cd7529cfce7fea36cf00a62cfc56f0f37c" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.4" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.2" + +[[deps.StatisticalMeasures]] +deps = ["CategoricalArrays", "CategoricalDistributions", "Distributions", "LearnAPI", "LinearAlgebra", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "StatisticalMeasuresBase", "Statistics", "StatsBase"] +git-tree-sha1 = "8b5a165b0ee2b361d692636bfb423b19abfd92b3" +uuid = "a19d573c-0a75-4610-95b3-7071388c7541" +version = "0.1.6" + + [deps.StatisticalMeasures.extensions] + LossFunctionsExt = "LossFunctions" + ScientificTypesExt = "ScientificTypes" + + [deps.StatisticalMeasures.weakdeps] + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" + +[[deps.StatisticalMeasuresBase]] +deps = ["CategoricalArrays", "InteractiveUtils", "MLUtils", "MacroTools", "OrderedCollections", "PrecompileTools", "ScientificTypesBase", "Statistics"] +git-tree-sha1 = "17dfb22e2e4ccc9cd59b487dce52883e0151b4d3" +uuid = "c062fc1d-0d66-479b-b6ac-8b44719de4cc" +version = "0.1.1" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "30b9236691858e13f167ce829490a68e1a597782" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.2.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.1" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StridedViews]] +deps = ["LinearAlgebra", "PackageExtensionCompat"] +git-tree-sha1 = "5b765c4e401693ab08981989f74a36a010aa1d8e" +uuid = "4db3bf67-4bd7-4b4e-b153-31dc3fb37143" +version = "0.2.2" +weakdeps = ["CUDA"] + + [deps.StridedViews.extensions] + StridedViewsCUDAExt = "CUDA" + +[[deps.StringEncodings]] +deps = ["Libiconv_jll"] +git-tree-sha1 = "b765e46ba27ecf6b44faf70df40c57aa3a547dcb" +uuid = "69024149-9ee7-55f6-a4c4-859efe599b68" +version = "0.3.7" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" + +[[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 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70" +uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" +version = "1.10.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimerOutputs]] +deps = ["ExprTools", "Printf"] +git-tree-sha1 = "5a13ae8a41237cff5ecf34f73eb1b8f42fff6531" +uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" +version = "0.5.24" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "5d54d076465da49d6746c647022f3b3674e64156" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.8" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "3064e780dbb8a9296ebb3af8f440f787bb5332af" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.80" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.URIs]] +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.5.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.20.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.UnitfulAtomic]] +deps = ["Unitful"] +git-tree-sha1 = "903be579194534af1c4b4778d1ace676ca042238" +uuid = "a7773ee8-282e-5fa2-be4e-bd808c38a91a" +version = "1.0.0" + +[[deps.UnitfulLatexify]] +deps = ["LaTeXStrings", "Latexify", "Unitful"] +git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" +uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" +version = "1.6.3" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.2.1" + +[[deps.UnsafeAtomicsLLVM]] +deps = ["LLVM", "UnsafeAtomics"] +git-tree-sha1 = "d9f5962fecd5ccece07db1ff006fb0b5271bdfdd" +uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" +version = "0.1.4" + +[[deps.Unzip]] +git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.2.0" + +[[deps.VersionParsing]] +git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" +uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" +version = "1.3.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.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "7558e29847e99bc3f04d6569e82d0f5c54460703" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.21.0+1" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "93f43ab61b16ddfb2fd3bb13b3ce241cafb0e6c9" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.31.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.12.7+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.4.6+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" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.2+0" + +[[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"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.6+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.39.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.ZMQ]] +deps = ["FileWatching", "PrecompileTools", "Sockets", "ZeroMQ_jll"] +git-tree-sha1 = "8ac0d6e982660047f4ec5ae462acf4b92260f4b3" +uuid = "c2297ded-f4af-51ae-bb23-16f91089e4e1" +version = "1.2.3" + +[[deps.ZeroMQ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "libsodium_jll"] +git-tree-sha1 = "42f97fb27394378591666ab0e9cee369e6d0e1f9" +uuid = "8f1865be-045e-5c20-9c9f-bfbfb0764568" +version = "4.3.5+0" + +[[deps.ZipFile]] +deps = ["Libdl", "Printf", "Zlib_jll"] +git-tree-sha1 = "f492b7fe1698e623024e873244f10d89c95c340a" +uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" +version = "0.10.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+0" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "19c586905e78a26f7e4e97f81716057bd6b1bc54" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.70" + + [deps.Zygote.extensions] + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "27798139afc0a2afa7b1824c206d5e87ea587a00" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.5" + +[[deps.cuDNN]] +deps = ["CEnum", "CUDA", "CUDA_Runtime_Discovery", "CUDNN_jll"] +git-tree-sha1 = "1f6a185a8da9bbbc20134b7b935981f70c9b26ad" +uuid = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" +version = "1.3.1" + +[[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 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.43.0+0" + +[[deps.gperf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3516a5630f741c9eecb3720b1ec9d8edc3ecc033" +uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" +version = "3.1.1+0" + +[[deps.libaec_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.2+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + +[[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", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+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 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.43+1" + +[[deps.libsodium_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "848ab3d00fe39d6fbc2a8641048f8f272af1c51e" +uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8" +version = "1.0.20+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[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" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +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" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+1" diff --git a/dev/extended_examples/MNIST/Project.toml b/dev/extended_examples/MNIST/Project.toml new file mode 100644 index 00000000..94a789a2 --- /dev/null +++ b/dev/extended_examples/MNIST/Project.toml @@ -0,0 +1,11 @@ +[deps] +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" +Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" +IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +MLDatasets = "eb30cadb-4394-5ae3-aed4-317e484a6458" +MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" +MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" +MLJIteration = "614be32b-d00c-4edb-bd02-1eb411ab5e55" +MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" diff --git a/dev/extended_examples/MNIST/README/index.html b/dev/extended_examples/MNIST/README/index.html new file mode 100644 index 00000000..d584d7c2 --- /dev/null +++ b/dev/extended_examples/MNIST/README/index.html @@ -0,0 +1,2 @@ + +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/extended_examples/MNIST/generate.jl b/dev/extended_examples/MNIST/generate.jl new file mode 100644 index 00000000..f68699de --- /dev/null +++ b/dev/extended_examples/MNIST/generate.jl @@ -0,0 +1,5 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=false, pluto=false) + diff --git a/dev/extended_examples/MNIST/loss.png b/dev/extended_examples/MNIST/loss.png new file mode 100644 index 0000000000000000000000000000000000000000..c77e097ac662e2a89e624df25f64e94fec1b0c62 GIT binary patch literal 22198 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

QQPKxKVd-0oFX%gtxSfsBG|OaQ|pj-p}o*? z&6f&$1Dra~yYOmjv0HIJBY*~1OkjO|eZBxGHn7?vDALE{F>AZ+gk&WUoh~*x|1eb2 zm|1fV*!cd=*ylA(ImzjT!g!JhP1&yjzSS(dY1ah0IrQHTMza9Dyqm9MQz8K9g)FpE znQ6W#PY50=u}!n~%gJiZH1zwoT8CTxe8y6h-b*r*2af3^`>4G*2t?(Jc<#!6O9x&c z1!I_$gsLdJUadajA$zNDXI{Mvjv`D0_kdkBqy?VLiu@UDK)T+E;c)t%2v1n&l4L ztYe>d9qQhD`X12Abb3^e{)H2V_~AJLW9D}~h*MXWmzS>rNe7Hrf29Uu&_c0NVNRiG z_4UC*Gh$b)o>X5HS-m!1FNk1IztfF60K7Kn6`ATpVWkXhC*He`M4`W*D)+eNcIDPM zor|kK6ZECXK3gg|-h}tol)7nAXsCS+x%>EJS|AaH;xOFZ--GwdBHO#V`d%)$`uqDM zq2j+s4hadd7|WAPWY%eEZGA<|qkmlv=4ku3CIo}cY&Z=d9r2GJUH4~37ZwD`$$wRS z{qbWjf`}WL9H0y$eiv(Xb#;)_yu7``hKDjiQDt#dhx09Co+uV`F8q50!VE{xJ=tKKi862jgZMtw? z(X6$c1XxK&N9W17mwX@7bE8Ihu~%N^A}3Gy*&Ir?UPM{Im|RpCz66y{#P`6V>Adw$ zK8J1XF0}JIk^M4|h7?H@lpX|V&M0bC*Tx%z_fJv#aiz_Ds-YS7Vzf|~YK%Q@Z1Eq<*stZ!`KEJP*d6k%O% zmdVmT;2W5l7U)*!)mhI12oLsp93X?v&Q7d7>%|uL(Ht>wVtXl^RzkP?)&J(|)!b0g zku6RnpH~;R>i@NO(f>-PrM8Ut}ib_LRhiW};%Xrp4k_j6JlT<8B_$;z5h`H3*008r3vHLK$n9wVWX6MFj`HOC5TN%Q#bGp`@sY z)iZwYqNt<x@qK!p zJ$2~HdGMvRd)raf1~t|Tz4qhJ0{~tjp%HdhS%cjMM}56OgDs{qCI`*mCsg?{sng_S zFCzb_+VpW^O{Dw0e~T} zP$pN_Hm9AjI65W9JybFwFA%vJ8yk6fc>%I3+kn293~7$*cEt)u%>hqJ%<$a}wGQ1T zwQeg|=1_Y}1qXSb44k7vr#S({PY{ZLExQ170A3|2DH#wQ9v%)X09G{|j7gc3n+xd4 z9`N3B9e!9u)DMEtXztz7AP;1p=H83>&m1`M74Rs&J96X|IpW(toEb*K4vPf6EPO!6<^=F z29f4oMIb>SUI`d7L0%;DUSpOAn2A0NihM(+fnYl9ToB@S{%+O(zzv7!NAQm$|9ruT7 z7AQNDCRAfqn?fKw;4OXO?>5)W5Ccy(bp~mae8z?$LwSi{kxNX3 z!b_tmR0xDyKESI=+q0{to)%+;-&~%2_gLk$A};xtGYZB``w-)RO3hETaZAEJ;oMTvS&A#0tYElriG@y zqYQuO{+lJgSo)eZ^;C9$h5R+d&-*>*-+&Au4w>H<6J{mRIcYcT#Sf00sZsw;0$$7< z%-u9#oGg<~ke?QN3O$<3GJCP{TM*EbT_9rS3?A2iu*vzyN{P{xoxNL^2g$oW|Mx&Q zTBz0sOg6#r2cG_ctmp(f<%Mr%6?&mh!{VTenTy;^WJfU0T6~tLwf!4|6?z(ZxG97K zd4K+mqJ|usoV{x&suT@{$<7Zsb! znon~<5;J#X^zW3DO)m9O!NwH{>2~jX2M#UEFbny!g0CLmh=j}1Ppw}BT1~f3k zGOz$bnV46d+fh=yiW127+c%mkJ!>~wiH*|W<#h1!0)vlJLgaq4nYX+|NIv?)$4zT> zS@nc9eF$XoS?HfBR_yC{;Ti5#6Cbim?X{#RxOZ2BGg-5&|CkQn51yh9v8?_(r zrdw%zW=?#XEE2W>PKUg)IM2Pojz2WJIf}9Bzsa^d$2ORJHJPzwcA3^4kJ0Nqs~7<9bs3Y$u3rD0Lx%6ilk$TB4+&G?g)N- za_|mED5feas@USIe6vhuD|yup{?lEGQpdKF?|oW%YgBjw?58v#sKoDc}VSw8aG>M8)P zDcrVg9_PDvcU}kVzfSQzRS)?CJ{8`Hhxst4c2) zcnpUym-(Np#Bkds-B&pk>)*RBVT9NymL3DC&I9+3od2CeLKO{cqD;#bz(orS3xKnD z95)96x3Zir7X*(0#4YYVXLNLQp~>0N-k#2rGhOzw(>)uXTxQWX@Zh zsI4!iA!g2&TxYxVFu+g&1`)}YmrmiZ05EaM`%(umLru-UzFunp$22xI0mcP*^Tzsm zTwTg95Mj4u$Bcjo^%!-iH587V!?G2<_6kf_k>aPw$S5xnD~K5#D0}s64FK!|M4?)y z8K00a1w>0AZJ`o!NYKP$LJQF+BbsF`LVij9t}pc6LTX zLmL{nk&9&sy+{Fi%OFtmen*q%ml0rLjRAoU6bl{`>wlQWNtqlMt`WshtA!_`^vGB# zns_BTEe9ZdTC%sE%241{bLg=A(Vc)atPeZwk*#ZqrxjvvVo1XY2Bh6Wxzy(J)r5}_i(geC#nd^{VMV@n>Kp1$0j{PCnK zvYQUVeBs|1JL!0=Xk2uQIL5Le1(rnmACCBnxSp5tWMP`k0y!t`ob@@Z3W#nzK6h6@ z)YQ?|1_MmD`#w6DeZg&X-c!}qCMNG*S`ubvE(at9XbAST{an9ZMW20%5h{mers^|FFOiIN=y3t!75~~dw_a-*5m8Om`Ass&QrjGqD zf&g~~Dn6gvQI-UigRAREf4{HH)-@D_Fw-^6-hq?b#y&{bQ#5f2eCR;B&5+)+p z%WYwCg0xft#-(X=#YEY`J4(E8Kg!1H1eCb|AD9_QsCT&O2EfV3&j0lLY{WlUF?WnB#@c>L zrk6Y}CQOn80?{(gNB*R(ja`z)dcMOlOfX`cERqf*z^0!=9|YM+!wofiK;tzetBL-c zOB%@GW+NFOy6u5V2s;~F!{GDB7%)5`Ft0@4JbA470C}gCc%}aqBr_Fe2Ur##3yjc5Qe3aoz|q?(*`Bm4ob<-Cmjq#5N%m?3_ zR@^^6D)wG%FcLu^hhPi2Z5OrWMsn+?&Zy1?uzU>paDpeP168J%_mTNMUkW zP3`Z`Rs(o3aBBLl^^n<9s5y-?5Gp5}o$C5wOvvUb9>9Zm0E*mCl><IvbM8klR(xh^!`94Imv)Oy|My~= zs#_A8V*eTy;-{w?Y6ps%^IH&fY1Hgz5AU@5^Y{4TIK7o||4Oyqo83o*Q7q{XSHVG! zdIrizL7|wK-=(x0TB|8&I*31?R4Env^0yXRQsaiMcU%F^=Nrq5)kSHDK3*yIQ_T-Z zI8uy^w6yAt4*8m8n^ZW;2_e7EmRx5T8aIgP;<*16wLAAjXAH=ILm`d#2)e-nC3}Fa zot#Ps-^uS_L)pml?i^9*vL#3tM4D|WpHAKFY#o24CkzkNJ4BE{Mwue>y|V{+CWpnM z_AfvS*EctO{QRfUnDi5Q7<~HP*B?=EMg_;VTFQ6X;_OTNHMk&<13|h@t$Ld>?Z)pI zIiuzm|K?l)Y{_Ba<>7gbfB?d5SdgFm=+onqt{Ic>=?Y4Ba%-f?t;Rlh>i+-$CC%g+ zWO*@`Vjol$R8?`w^Tfh%fe;587-)Tqvm9C{{m`$vj%=AplsB{FXA73@NBS7}QFHQ9 zo_5l1aDcV5yIZtI|GWU}dkFcU*~Y^6ulA+nFKkj=-T41oqrrv%^kuDPdP0KgD!mmN zAqPfSPkbf{{el*`)3QewC+EKkdPn&gAN}5wOB_~j+U($JYY0TUN-^Nc@wjc~L4+6_ z(Y8AQ8kUcbPug?;fsHp5w%o>x{KGcZdQ&mb?9}>7m-i3-&)rX%|69)YcnV@}8*M1G zvoO<#kd#!{@NR2m<(JC4A}0_Y(YOg+7r0!@bvCmq7yR~}KdmdIzfhU71YkTao=5dUP;_?AP< z!oqTp3%P9aRQf=FGTGx`Iz&5nHobrCpDF={Yx1nG0lBAeAw&a&(uD?)K@4wJJnqxU>w;u`9$; z)K!3n6P_&cpiu~<0eID0=_I@3RbWRf42Um2`sSqfSjx@8t(fX6U}ik2ckt zE{ShtAKIs)L$Vw+=sIa+QtUFHU2%3K>N*GBAF%P0H%t(H|E=ZnDf7OGZVzs4f8c3w zDV1H@)|#3cpv#qNH;x&zVM1#(%T#}Cyu-Kq2ctE;uo&;^R8-5NW^-45J0zUSg9>Qp z4xkF7=EUr#(x6)eWHm0}mARu5$QpIl8g6bpTgQI<=Oo41aA#+)3)rR&ih z9tI)u-s*Inpo##hjV>U`0YzKvWe^&X3y4Ud)bE&t)^GuI`O~`V8Gl8&eEm4tF>$7v zAUhW{h%%XK=n=4y6i`D1MO#pP(W&_ZgMG@D*KYSo@3QXT%#R+ll5S5nH~b|0Lw?r9 z?_!y&y6sG-2pCIfJVlG^Va8-@7Bm|p=*5p#gD*AO?^PeQc56+am)G|Akh}LiZa#6* z4S=&j>IDT|#-B&P&j7dsSs^VCei3Lw3tyA%$Kr|^oJmY>)oO0Ju z!B>Qr0MdvHw#~h_wA}q2LkXG>K=y5jKoT(DmOektH%q6l-4b1N24yo)v-yv~OM;N~ zk<44ULbnx=h`#P_45(&}IVL{-Q;i68yS$UuxGeX#G?Jxy?V2tatFoI7HED)R2{>O* z=2wM>DD$d@$}=Y(E;L`>9=6+p;;^xCo-|D=hs9VjyBWxDz1~90fw4)0p~i~>*7RlD zROhJ}P@D(PlyRW`#CHtDn;?@zv+bUm3&bNSb)3KC#QpT< zcwzs&X+{ejqM}u-mH@~9QOVf-(`M_Mb@}2A%2=?vQ7?(NCQ3aJ+vxE_F{CCN5GRYd zIJswUN(n+SX|*n=_9NDKz~=TqF`+>0H1Lr%VA)a^R;9HaRY`Q1O0rK}1N<5XSq$04 zKK}bo_Fy+#^i)%gZw{PFl(d~fpO@3L{q-DMJY!!(1EiEm0XlTS?E`^#+ z3NJ_0mp+u3&*`N$bd@qJKdmefjH*>Hw3@rrkZ;*=qX!dn?noeAN7J-Dj=8 zD6j-3tG_iCUS4+~&k%81)&S}LX?!$Sy5zBF_sfQJ%D|Efe-6<7Co|=e0S}qsVi2Rn zMmhHoB&T9!W##8@25Bt-y2ba+I)EQQX_A#l% zubya3&0!E|h^Q!m89wl86uEH0Yl2P%V2Xx@hHbY8&4iqmz&Zmka>jSY z#>YXMg$DVd2dGi!G(Sw0>)e7uaDG{Ge7y5YXW(Jm?eIyQK@vcapQyg0gec%7gQ`|Y z<}Dd(0AoZB4KZs^lftT5c^k9sxLm7AK94|xK%0dmXV+Rnz2pDrb4GzhNsFEoh#k36 zLc5@qLn@yl!0WgN5B`fEMwQhxbM-7SA)zLDKWMfbjbOz8#)^-cUsgP74vH0ypp*<# z3K1R4{rJkW?ZvlW`m{!lDs@RId2OM(PLa}Rbd6DQ7oYV_pSy2Gh3;~0Qfry4xx(hy z0fAGFVqyV$ei=NAZ^yubqrrzn@P;YGN$KMX-!tV~3RaMkESbotH z9cnGwfX>(+pSqUwX1VA8ePHX2fhhZUB`coG%EB`8>(>_ytk!$lGz zqFXXOVxG0KtVPsGHUPJP8o!X|g|)c2xRlhuQz<7W2h``D+5&4eWsu!(|J7^Nn6E4^ zcU0{ICj&(9XXw4Md~pG%A)z(LL93OG*51wsav280Tl0(0cE|U@h2{_l%iuuiD8R{w ze`{eUS97-Q>Fj2a&}`8Cs0Rdu%u_LMFE0v8N;9AV8FmN%{w;xrhX<9gvwMo#ObpMF zkU$qsc!5Q>yc>X;V7{SOj2)Pu_8FS&tBu$zebVm7}R*?(FM`?q{`Lm^d8vf?$ z?0gS2mfQ2akH{gx!AF;uQDI@t?xzLq?Y@eNit6h4iPu17BTt0chgSxR=PJ<0dlkM3 zh%Waf;CCCd<)*!^kGrYRlbL;$hS)mvsbs*2Uu$vkNl*dD6OWlKo@?*mKoKzC?kmj8 zJ3AKaygPAxbOefReA95hRGF-X2S0Hwz*ri!M@!6pHBtgHF9eDrE$iXI~1H*dy`n4YV*3z|C9&{R-n3Pq;d5NiA)%Xdh)3wpmU+|3@~dDDS=|Pva$kHr_VinNwzd{lK6C%qssfzu)3^Y= zmFTq#)xXF_k$=&@-+Q)BSX} zDKFTvBPS;ao->u#x-!h!m2Tyg5C6Z#fo`|=Z_MW#?2V0$fdp)5WYpTyvbwqo8bAyi z5$WDr2w8RBxkL!2o*Ng?Qe)6-o=@!eaWFtC6;wn2^!2^v<#q23Coudu;~@77^cTIQ zp@}3FOu6-vujL8r2lf}xUC7Ky8FirGcH95}s_jn*M9K_MW}r6!_6Y(Eptxp^WXL5= zKhJkE6=y(cRPB!RK3VLO@rfx3=cBdDKKr*NKuAWa*eF1s1Pd_p#whs7XEHI=3WF0y zrBg@7*%Wnp4hlcL(~Un0 zaKBPOa9)C@vqpyvz%Dae-32=wZ(0aWyKpX~4r0m30U&b^s#{^3hv-{92`4`d5yTXL zUIO}RfB|5J^@!>H1&wNjg>Qq7vq~IdzguJvYK0WEHwoMjyl$Any`F&aw`q-5@wWpp zGZZiope2Jwn3}e_j)5D9stiiDudG4+f}!V)z~AGn{dcr`TO-&*%@`?kx1Mki9;5u3 z&B5d@Z}cLc=NuYXJ$Hv$#YUesJ3(vt?`GyTdCJE@a-c^o?Etn*ckUAadDNNHR5nJl zT$z1~_Xf0xX3d@=JxK|5T~e4ncgKC8C5ZW_9njw}F)?YB`aOr?;y&AB-%lcpqYdS5 z#y;n!X8iFCVg2b2ypiY6x~KWWM!UjfSlnsP%F@?_U{+JbAYHGSU!C0PZEkQ{fs ze-A^E_e<;ic#s)>1~GhMVlU9(;JWB;2D+IOEOG!32KIHg^!U){E>I+Nr!tXrb5`?u zpXDbixhUp11Gqn8()TMIg}d=NL`b7uQ5xWIVCk`$nVA_GiC+y+uSFQ0VH0~H=&0Sk(N;Fhn?Ij!*0ggRVlA(fyoyZoyUb5O5-sE;%$ z#6&)+k~DDz5z>~0`~^vhJb606hkdj=B?R=<89Wb6v?I`hEF*6fP!EZ#?4h0&ErLhM$2wnHz>jgpG+#1X;Ha5wNuwPn& z12aY)b3v!smwhP&(s2N0XqLM>hL~{Y60cHopkjAXNyi;~C<@Wn0|T7 z;qw`*A^@LkdkyF3{Q(pHk#IT-^eAl7q{e-|-6EOo2OSUT$dG;HPz>u%Gnu5x$Ew6Z zPO5XlE$V}HesstTCN}xZb2YkTf?;VPLq!)iv1)EvPdg&!CPc{md(5w8ZtO{*raFhx zqP?V%;A`pI8~O@pm2Dz$@6UrMo@@P*U*E$WK3aVNEdD(w z_zfbgf3jlD3WsFe7SiD*r}A3{<5klvu-UV+S@UInLWr^!Ewqv;EGJ1zbM?GAdx>-$ zw;=mu;ZXhau)o-Av`d>45;RE3TQEypSGw7$m_}ZS8CcNG2K`>60>`}f?rgNrt2Q6G z+Y#KhaqvW{WqybsP9(*N=9_!XH|b@R$Hn_qM4xRuk-Vxe9s85nzjQ6B@)TX6BSR*U z!~^ul)4JDd-}ANQzFBcz`r)5QZ05x>?0xEgZnmnVAqaEjffV7sqX;PZr6K)o5+|mq zLa^nJ-I?vn*N1gQYiw1miROM}fKoDb>N!Do)2Hs%AcZBC(}=S8VryAL(>7fb2wgMT*{WAj%km+kn60!}IQdcX4!C-M-_ zn9AH?GN)hJ_Zzyb+xaFSdQJKKV#n#Y5NoCUaAeR#4Pwpqzkf{eQb1F-S!~fT3{=y@H&C(kRfmu!+C=#>$~>KNrIl__0wki zG0gF7C+&VBh*U`&<_eyk*YQE~VH*Ip0ns3p`hXTGkk7!Ch34klyX#YiwS`~klDlF} zZMV)Bwqaz9o_+2!9ACnMOd2b`SA}D;7^kk;RN4}=Z4gM>l7(Z!Er&=EV3P7V6#*3| zp$`B`ez&9L>OEr<6Yray!cPf|pt-9!997>IKVK<=TPQxTPw2|Q!Dp-uOApOHM<_&} z`2uf$yPGGZf7_pC$vLVwxFrt(GN*7%3HARK9TNkz2sD_In%XpA8u98MnG->?t?V0& zG=5hbkm*1j41A_esx^ZeEMPg`zkg?x14Yr!z?bRi=?nrcDhfa^e}}q6XN|Xzmz$H| zdqAdVIYJhH>E)00=~L-41I^(iCHPEqD3&Rn2!0kGL#-n?OWtOkGf|?l7q6yUe3Yhw-SuvA*|tWiPa^#$f(6+;?tIN! z%*j=ykUa0~*;h0j2@yOthVRgG`!AL>6Qt-duc@y+@De!;$01A;6aYg|E z%{+io&I@uzSh-$%o9p3XLLX28U_(RH0Y#I$Iq{%z0V*QGK#4fRYhhk9*Q~drI4p3t z`Ao^iv~e$pN8vQ}U9tajhMZ(;l8^-()LH$z^*B0eygp3067~V@7pMKUOKl5449UuR z6CrN&4j+gXh4QpceCeVTlHg85a4n}xrX1|mOLIRC4z0(IpK z<&}n*1qWfiV!vxBeUJ4N=}d{F`XSE|lZAiL)}v5tGO+}AMf5QDKGXRtSTK zfy-VC^YfiuT`-=_APUA`K0X`_2}0*mQz-}(OE^6g8!i|3}{GMfpv}u=jvqR>Ge8<8-t+at?-xt8secZ3`xEh>-~a9p z9i~`3!A5PZkRc219;I);U=@K^R`v@OXins8T^@bIrt+!WYB1zg@UZAfcxmr@Cz_n8 zSbMlhMU59_)Db(n zOGLu&biLa*kKGwTdhLa~JnER^sfVH)j)_>Vbdxov*S^?zDH2~|)^~>jX}+6LMWu}C z*WDGsKsD)g|5U22Wyr8-4Pp*w72oUrN#Prnq%!V3X{sd&W#}g*MF(=s@ooj_JXC6f z;M}BO3kp1}{Aet8QEE_2#T2%YpJi{?S%;_a*u<7b!c;L7XOh80(n=S}Gn33%=^ux_ zrlWPaG=tF=f@9ha6Rbte3oSa&+tv!x<ublAQrqZt^( z)8uL{1l7tE<~o`(mN?i(f{-J&@F|`K=U0m7Z>nhii7h&_Pc#3~5!~Z2XJb-3PA@W) zz=!>==(erIdk8GxiiT2-5)NrT`^jPQrC-~ef|pOxoZ?zMhbyVtnX2dgNqF8LQHS%= z{12aK6;N>-J=ky0u%@IPGMmJT12Ft2KltZIeUe8BSx$~s38f55ZwBqlN>6_m;E z3v0TNFs^wiDxrE-3bluk(OcWW`x$E$HJ)aqG7jBh7&T%Rs+e-;+sw$zR+kPqZ1N6D zY)atH^cPmq=X+aEmo9Z5bMfz<{luY23C>7Tqxq*wVdAj-Jm$Z%5BPM0p}Edlm+ZI3-}Yh|Cj`r!PezF?BS*PzY*{qvB=Uf%73 zEGzgOSrNG)gS=x~0Xv{1jqk1&<7N>%U~ zVB*Zpf}_im0AiV`2)M#zBq`sJ=VK(rxB>3p#{q#!9@AWNACKbVr9HSOmgHV>bjSL6 zH4>Cm0~SAkIe-oC{fW4Q3D?1gP5vI?b%PtNp$CJZN9uWCQ{4L3mwlXJZ^zj3si>r| z#-#U&!bu7tTnJ!P4cZt{EG+65Ar$v-w-2=$TI?8IPhETWk$?!8Pp+`)5mO`D>naYE z0(d*W0x{h$6cz7Pwz9#krNBhF&Gebr^Ery_!uFaE>=yo;@Z2nIl<+ew*yNBxd^0uo zu<{dJogu{5hu*-iryt3DPKBs3z#d2uiH6(}t#*q-B3CkrA;KAgtgNnEEWJn;s~z$d z66}%^*i1@C>6jhNS;%l#m+Rf4pKVt1UnAf}ZdgCaF0USMcZ*iMZ+ix>Y(@)(5J4G; zjb;AAQflh=d6-%p_^kfH8?uG&iA#v2fUk=1^UNe!U%_9uuvQq29M5_EIqJZ+wo+pVbZ0fM(Q@XE+wC*wcB;-V_HO~-Wj_1tzu zFPd01K1Wt2Wd0eKQ-`Uk!{oLPL|%w_y+tUJk`I8WUL@?o%Ki4Q5G!E|MZk6^QE!VLM zPDcBDN^KaAzNnbh$7r|>Zh;3T1@B50qxR-oIHU(GrUWnLXIeNpbs6K!8Lu+(`vh_( zG1oQdVodtCTMKwIwJ*(4f5swpoeAP!x5vO;0Rf*mI>AsvZj$C; zVo4LKp4&0>aUJK)2?}<@El5hsRA`k9U}JBgtnjetpXMQS+~aP-lXi!yEA547FZLpm zci{0{v(>WxEPUKPU^*%O$Uy9liYh+~HsB)C-p+tn8+c1Xp_qs`xK#+8^&5W}o%ox| zxE$~n2Knt>G4qtA!T-vI5IH(RwgGT*jI0}`gf@lvV@fX{1MflH1vvDG!@} z1otGNkSkkSDfw|F@JXn;9}wZm9iF^XFz6YmCQHCRE|a`t{UyQP<#j{D%d~}LLQ;4$ zFhq0KHzewW6CyGQkb-f-6X?1h(0U%w!dN(n&o^eLJJBtE3Y+;HU*zXIL&ytm;~!B z7<4kac&15Fi%s>zDO<3G3@5Le|DpmK2uul*X`T$FdPya>mf}FF`7P@DQqh^4 zSsi68Z`fFwIs9p|K^;8{V{y>wzccM9|Lv_cdJl5wx2RI_TxEJD81Pxi^lRfs%fE2o z!7Dz5)EMe>?YrMjNmkr}Pi75d1yC^DstuVc*?eQATu6$y8E7eN_7OVlCRN%Lta}q> z?}FFRAb23*`lXtGZCwh6edi5dDF*hoXq7e;wA1iRVaFC0ZsDIrMF|xUu^;YKWN?}m zq&lz?H!N>>Y@tDaV90n<15{n=-hcXp6XiJ?sKCpf@KssRBYc)`@)a1jn&t5# z63f+koJ42frjwh@?*CWCnFm6(_hEdZY%SK1tz;-`XbdrSsVv!-kv)|LVQyhW6tZTE zL6%F*2w5`rC`)#(QASy#VT9C0!c}^|-uM3V`sd7W<~Zm4mh+qM^LZX$7ZsoUbscMgzq4n3CY zPTQdt^(xJK2!3@`o%hH@jX{g+4JTYRHC*gb8x68fHaZ1!bKz}w5y#UhkvmDu{BRZF zak{Z2m@w~WXV5CEqqgBQwz)oigQyZp0+#bbc7}YC=@akvC!SfUMCqH2sl*a^WvfP2 zmXxK2&Qsy_9%dvN=GfeU+!#uv97*69H-mgZXk=JV(Ooy{8udUa5-ycn0PnM@v zZ;xMKm0ll-B;PD~K$JdR0tfZXYFA#Rt!)kKl{~OepGEa8M8eUk*ojiIfhzs}M#dWa zHsnjWq}RFb1aGY8TZVZ;z9%k;BziOJt>x46>9G+Ru&zaz*Yasx#!3;dt<${o9uC@3 zwuP)kFk_eEND7=dNd&veYSlbj<8t;uvfSp;W+CS$_Im zAGoRHlNN?({nL3-_NW8eO~38!D%w?Fm!)65yGvarJ^YJ23vY%F13B?vt2?F-m5|x! zEuPIbf%I(E(b2Ou3?F0{K4~Q(5ne?*DO}NPW9KbRl5g4h<-h)R##P(2zr5w!0w;b* zlXGQLALCz_-%MF$Ts*%f*!Q#TFu5tw8Cdse6Z^r2Yk8S}b}X1ib|ze5u*Z*G7nG1=uyzu7 zwX`qT4>WX|*bfMP%s&4^g}`KiCo0~1$(zK+BaT3Xr?v{c6K4V+Z#RaYkN zE6wAwCt`&85(ztMo1IQ?B>?ZE;%Xl~dX#a-#a1RA@bu~F>BPeh4h{fZw2;YCBHfhg zYVfb~aYV_Ugsdn8ap9*}L7VH=&-J09oO8TlV)wTGb}O+Sr&6n)nL?z(y?eW$^uZT? zJmgNTt>KHKXG>mfeL5J?rW43#GD4+70cbJtLG04?u>CJP8je+}qI@7}#LZgB_;3kwX~1mI1NU+IvSm)8|a zSFfGX6k8%4gf6NImY|lHZ6c+%F3b5B#tB0oSlS1Ds4L{z_4!W@KL zCO>t4U9QVv79`8D8Cp5Z8!~xD zta#Dc<#lzog~Lcm@KnnLN8IMV72H%`#EX{kpYEw?2u= zG66bob#)bdIgq3RX8}X>d)FcXDs!r8Y9Jar6XuV~aN}ynVU$5;Otm04x2{XLn5=?= z0$9zFNEpGuCB4(s)SN5Tg-Y%(NJfF43^Mi3KmSY<7DSsQ?r2?%{5m(&76E@IX>b?< z1%L^+<1oq<6C3d7&OrJdd8@P*@d0s>Nv1`DsfwzCl-lD^Ai`G2rwW=-n*6C z#=8kV&gd#K#^cvuerRuJnz|p9-__MsKOJ1w(xNFRmoQ1+$~wgcKv%m&2I7IiXR$AE zyj!R0A+5;Q*Vn@X*&?n4N-gfzt-3L9wgNJl49&0>glUR!-(N;E@_GE5tXb`%S2;R5 z+7ZpEs;Ua$qqzp?DNQe5_SU}B(9nRCn2-=ms8SQhfXb2>1O+}$O$GPL()>Jabd+p< z8i&L6yhMk~=D>^sULSaNm}zZ$n442U=XmKefzBQz=Hw)}*#oO!W%Ukfw~)wW5?GW+ zE-fvssJP|n8PhQv85NZhXe7YTKi%LjfkJ%;C}B@64h?P5E6CTdOj6d?{%~Iui2Rs>5y;&v#464?_`4#8cqBf zgP8=DYig#K_E&d1jmMm03AndSyx=)PdNM~3vb(fKK;}DC!nOTx; znNv$}t)oKNT&eoZ$Lfid_*)k^;pfN^srpKn*8usUea7cLV80{x76&l5I7&cfUaRN7 z@BVM5(S=3X|NSX*o-(AR5w?q&vOxSTcz=OypDQuLIe4-1_3qNr(o-mlhzU^tcRWRZ zc?3#WSlFtJb~5EOAV2+OKgEOkD-$ z4bMhBl&2tFz|Bn@VuYUPrz%5Y01Cw?BGL?lBD0=fQD`3`KlXC5v9Ym!Sfy7(z{+@; zU8QBM$dTgwd>w@h%9uAa;jG_Y^hD|Cb;|twyqjRxbqcp0JiKgdY^>!I=`iLza7Y27 zv6btu!^u%}>K)0+a{C z(L9hEV1|VJmM3|6b@p-)U?AI=idY2ra(8#<8|WB5FYNaoWsZ%OPEIYU-A7vKQD03C zA@rSIg&Y$fflGIE^vl6GDmf})Dn%6Jos!6ln`X< zDW5&tOXP|50N|N3)Fs_Wl8@u}7M&Ak2A>NEsG}rtBI@_Ohc8vEgpZ7#o*sb9OLAfH z02-yWlBDE;4zWWMerh>$a~^B;Qm0OB1c$=)(=3rZz4L1TcCm}2Fqr4>mm$zBBX}7I zL;zAP&X-s(eK>p|{N@R6CY_|LtYe2d6r7so8qTV#t1Bud%NQYfy2oM16tAe|+v<_j zr`NVY8@Ybt2DhGJA-8x9I6+9$4oIGJ{D267b`qw=g_snDZuyy;iz}QSbmz_nSOhX~ zg*2RKJa`8r-Wy4V?NUZRempK-18%oS>W2@Rvh6Ib>#c*z2x>&LOU=`#?pf%;!9n0Z zCr6hze0+QW_hl1*VZVoOUbzxaSHo(c(a?`-fsH*830E(`&253j-lU8<-aUi}+J7+; zL8Uh?n_MID43a=TJ6@sQrZU4XSwY%V0FRZvV!!Ty1F{Z+jwjPOMx4d zG3eYzq|}aCcz(CMc%g(uMm{$+HT}iN_JxH~HHG3Y!pXtW2l87P$ZoyHv1wGQdFe-X z1aq5XA%dFJ9G%^yoAzcN9}m07#c{!WpBuazni3UtV2$vTgaNYi5Nnti?AhrquiZOl ziRJpGDLbfq;viEMrooU67VpC|WhW6yC1C52TlWBm4|YaqZ#`oeQD6a^gdf@y19YAC T7<>-ALtHw4*`Pwt^}&Atls+66 literal 0 HcmV?d00001 diff --git a/dev/extended_examples/MNIST/notebook.ipynb b/dev/extended_examples/MNIST/notebook.ipynb new file mode 100644 index 00000000..617be38e --- /dev/null +++ b/dev/extended_examples/MNIST/notebook.ipynb @@ -0,0 +1,2111 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using MLJ to classifiy the MNIST image dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This tutorial is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/MNIST)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/extended_examples/MNIST`\n" + ] + } + ], + "source": [ + "using Pkg\n", + "const DIR = @__DIR__\n", + "Pkg.activate(DIR)\n", + "Pkg.instantiate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Julia version** is assumed to be 1.10.*" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "using MLJ\n", + "using Flux\n", + "import MLJFlux\n", + "import MLUtils\n", + "import MLJIteration # for `skip`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If running on a GPU, you will also need to `import CUDA` and `import cuDNN`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "using Plots\n", + "gr(size=(600, 300*(sqrt(5)-1)));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Downloading the MNIST image dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import MLDatasets: MNIST\n", + "\n", + "ENV[\"DATADEPS_ALWAYS_ACCEPT\"] = true\n", + "images, labels = MNIST(split=:train)[:];" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In MLJ, integers cannot be used for encoding categorical data, so we\n", + "must force the labels to have the `Multiclass` [scientific\n", + "type](https://juliaai.github.io/ScientificTypes.jl/dev/). For\n", + "more on this, see [Working with Categorical\n", + "Data](https://alan-turing-institute.github.io/MLJ.jl/dev/working_with_categorical_data/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "labels = coerce(labels, Multiclass);\n", + "images = coerce(images, GrayImage);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Checking scientific types:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "@assert scitype(images) <: AbstractVector{<:Image}\n", + "@assert scitype(labels) <: AbstractVector{<:Finite}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Looks good." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For general instructions on coercing image data, see [Type coercion\n", + "for image\n", + "data](https://juliaai.github.io/ScientificTypes.jl/dev/#Type-coercion-for-image-data)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "28×28 Array{Gray{Float32},2} with eltype Gray{Float32}:\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " ⋮ ⋱ \n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n", + " Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "images[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We start by defining a suitable `Builder` object. This is a recipe\n", + "for building the neural network. Our builder will work for images of\n", + "any (constant) size, whether they be color or black and white (ie,\n", + "single or multi-channel). The architecture always consists of six\n", + "alternating convolution and max-pool layers, and a final dense\n", + "layer; the filter size and the number of channels after each\n", + "convolution layer is customisable." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import MLJFlux\n", + "struct MyConvBuilder\n", + " filter_size::Int\n", + " channels1::Int\n", + " channels2::Int\n", + " channels3::Int\n", + "end\n", + "\n", + "function MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n", + " k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n", + " mod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n", + " p = div(k - 1, 2) # padding to preserve image size\n", + " init = Flux.glorot_uniform(rng)\n", + " front = Chain(\n", + " Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),\n", + " MaxPool((2, 2)),\n", + " Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),\n", + " MaxPool((2, 2)),\n", + " Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),\n", + " MaxPool((2 ,2)),\n", + " MLUtils.flatten)\n", + " d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n", + " return Chain(front, Dense(d, n_out, init=init))\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Notes.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- There is no final `softmax` here, as this is applied by default in all MLJFLux\n", + " classifiers. Customisation of this behaviour is controlled using using the `finaliser`\n", + " hyperparameter of the classifier.\n", + "\n", + "- Instead of calculating the padding `p`, Flux can infer the required padding in each\n", + " dimension, which you enable by replacing `pad = (p, p)` with `pad = SamePad()`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now define the MLJ model." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mFor silent loading, specify `verbosity=0`. \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "import MLJFlux ✔\n" + ] + }, + { + "data": { + "text/plain": [ + "ImageClassifier(\n", + " builder = MyConvBuilder(3, 16, 32, 32), \n", + " finaliser = NNlib.softmax, \n", + " optimiser = Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n", + " loss = Flux.Losses.crossentropy, \n", + " epochs = 10, \n", + " batch_size = 50, \n", + " lambda = 0.0, \n", + " alpha = 0.0, \n", + " rng = 123, \n", + " optimiser_changes_trigger_retraining = false, \n", + " acceleration = CPU1{Nothing}(nothing))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ImageClassifier = @load ImageClassifier\n", + "clf = ImageClassifier(\n", + " builder=MyConvBuilder(3, 16, 32, 32),\n", + " batch_size=50,\n", + " epochs=10,\n", + " rng=123,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can add Flux options `optimiser=...` and `loss=...` in the above constructor\n", + "call. At present, `loss` must be a Flux-compatible loss, not an MLJ measure. To run on a\n", + "GPU, add to the constructor `acceleration=CUDALib()` and omit `rng`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For illustration purposes, we won't use all the data here:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "501:1000" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train = 1:500\n", + "test = 501:1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Binding the model with data in an MLJ machine:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "mach = machine(clf, images, labels);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Training for 10 epochs on the first 500 images:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mTraining machine(ImageClassifier(builder = MyConvBuilder(3, 16, 32, 32), …), …).\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 2.291\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 2.208\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 2.049\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 1.685\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 1.075\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 0.628\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 0.4639\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 0.361\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 0.2921\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mLoss is 0.2478\n" + ] + } + ], + "source": [ + "fit!(mach, rows=train, verbosity=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inspecting:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(training_losses = Float32[2.3242702, 2.2908378, 2.20822, 2.0489829, 1.6850392, 1.0751165, 0.6279615, 0.46388212, 0.36103815, 0.29207793, 0.2478443],)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "report(mach)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(chain = Chain(Chain(Chain(Conv((3, 3), 1 => 16, relu, pad=1), MaxPool((2, 2)), Conv((3, 3), 16 => 32, relu, pad=1), MaxPool((2, 2)), Conv((3, 3), 32 => 32, relu, pad=1), MaxPool((2, 2)), flatten), Dense(288 => 10)), softmax),)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain = fitted_params(mach)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "16-element Vector{Float32}:\n", + " 0.011803599\n", + " 0.05579675\n", + " 8.461591f-5\n", + " 0.013422165\n", + " -0.001925053\n", + " 0.011568692\n", + " -0.00051727734\n", + " -0.0003228416\n", + " 0.03614383\n", + " 0.06365696\n", + " -0.0005846103\n", + " -0.004092362\n", + " 0.0036211032\n", + " 0.0031117066\n", + " 0.02764553\n", + " 0.05152524" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Flux.params(chain)[2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Adding 20 more epochs:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mUpdating machine(ImageClassifier(builder = MyConvBuilder(3, 16, 32, 32), …), …).\n", + "\u001b[33mOptimising neural net: 100%[=========================] Time: 0:00:30\u001b[39m\n" + ] + } + ], + "source": [ + "clf.epochs = clf.epochs + 20\n", + "fit!(mach, rows=train);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Computing an out-of-sample estimate of the loss:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.36284237158113225" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predicted_labels = predict(mach, rows=test);\n", + "cross_entropy(predicted_labels, labels[test])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or to fit and predict, in one line:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "PerformanceEvaluation object with these fields:\n", + " model, measure, operation,\n", + " measurement, per_fold, per_observation,\n", + " fitted_params_per_fold, report_per_fold,\n", + " train_test_rows, resampling, repeats\n", + "Extract:\n", + "┌──────────────────────┬───────────┬─────────────┐\n", + "│\u001b[22m measure \u001b[0m│\u001b[22m operation \u001b[0m│\u001b[22m measurement \u001b[0m│\n", + "├──────────────────────┼───────────┼─────────────┤\n", + "│ LogLoss( │ predict │ 0.363 │\n", + "│ tol = 2.22045e-16) │ │ │\n", + "└──────────────────────┴───────────┴─────────────┘\n" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "evaluate!(mach,\n", + " resampling=Holdout(fraction_train=0.5),\n", + " measure=cross_entropy,\n", + " rows=1:1000,\n", + " verbosity=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Wrapping the MLJFlux model with iteration controls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Any iterative MLJFlux model can be wrapped in *iteration controls*,\n", + "as we demonstrate next. For more on MLJ's `IteratedModel` wrapper,\n", + "see the [MLJ\n", + "documentation](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The \"self-iterating\" classifier, called `iterated_clf` below, is for\n", + "iterating the image classifier defined above until one of the\n", + "following stopping criterion apply:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `Patience(3)`: 3 consecutive increases in the loss\n", + "- `InvalidValue()`: an out-of-sample loss, or a training loss, is `NaN`, `Inf`, or `-Inf`\n", + "- `TimeLimit(t=5/60)`: training time has exceeded 5 minutes\n", + "\n", + "These checks (and other controls) will be applied every two epochs\n", + "(because of the `Step(2)` control). Additionally, training a\n", + "machine bound to `iterated_clf` will:\n", + "\n", + "- save a snapshot of the machine every three control cycles (every six epochs)\n", + "- record traces of the out-of-sample loss and training losses for plotting\n", + "- record mean value traces of each Flux parameter for plotting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a complete list of controls, see [this\n", + "table](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/#Controls-provided)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wrapping the classifier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some helpers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To extract Flux params from an MLJFlux machine" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "parameters(mach) = vec.(Flux.params(fitted_params(mach)));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To store the traces:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Any[]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "losses = []\n", + "training_losses = []\n", + "parameter_means = Float32[];\n", + "epochs = []" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To update the traces:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "update_epochs (generic function with 1 method)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_loss(loss) = push!(losses, loss)\n", + "update_training_loss(losses) = push!(training_losses, losses[end])\n", + "update_means(mach) = append!(parameter_means, mean.(parameters(mach)));\n", + "update_epochs(epoch) = push!(epochs, epoch)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The controls to apply:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "save_control =\n", + " MLJIteration.skip(Save(joinpath(tempdir(), \"mnist.jls\")), predicate=3)\n", + "\n", + "controls=[\n", + " Step(2),\n", + " Patience(3),\n", + " InvalidValue(),\n", + " TimeLimit(5/60),\n", + " save_control,\n", + " WithLossDo(),\n", + " WithLossDo(update_loss),\n", + " WithTrainingLossesDo(update_training_loss),\n", + " Callback(update_means),\n", + " WithIterationsDo(update_epochs),\n", + "];" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The \"self-iterating\" classifier:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ProbabilisticIteratedModel(\n", + " model = ImageClassifier(\n", + " builder = MyConvBuilder(3, 16, 32, 32), \n", + " finaliser = NNlib.softmax, \n", + " optimiser = Adam(0.001, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n", + " loss = Flux.Losses.crossentropy, \n", + " epochs = 30, \n", + " batch_size = 50, \n", + " lambda = 0.0, \n", + " alpha = 0.0, \n", + " rng = 123, \n", + " optimiser_changes_trigger_retraining = false, \n", + " acceleration = CPU1{Nothing}(nothing)), \n", + " controls = Any[Step(2), Patience(3), InvalidValue(), TimeLimit(Dates.Millisecond(300000)), IterationControl.Skip{Save{typeof(Serialization.serialize)}, IterationControl.var\"#8#9\"{Int64}}(Save{typeof(Serialization.serialize)}(\"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/mnist.jls\", Serialization.serialize), IterationControl.var\"#8#9\"{Int64}(3)), WithLossDo{IterationControl.var\"#20#22\"}(IterationControl.var\"#20#22\"(), false, nothing), WithLossDo{typeof(update_loss)}(update_loss, false, nothing), WithTrainingLossesDo{typeof(update_training_loss)}(update_training_loss, false, nothing), Callback{typeof(update_means)}(update_means, false, nothing, false), WithIterationsDo{typeof(update_epochs)}(update_epochs, false, nothing)], \n", + " resampling = Holdout(\n", + " fraction_train = 0.7, \n", + " shuffle = false, \n", + " rng = Random._GLOBAL_RNG()), \n", + " measure = LogLoss(tol = 2.22045e-16), \n", + " weights = nothing, \n", + " class_weights = nothing, \n", + " operation = MLJModelInterface.predict, \n", + " retrain = false, \n", + " check_measure = true, \n", + " iteration_parameter = nothing, \n", + " cache = true)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iterated_clf = IteratedModel(\n", + " clf,\n", + " controls=controls,\n", + " resampling=Holdout(fraction_train=0.7),\n", + " measure=log_loss,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Binding the wrapped model to data:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "mach = machine(iterated_clf, images, labels);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Training" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mTraining machine(ProbabilisticIteratedModel(model = ImageClassifier(builder = MyConvBuilder(3, 16, 32, 32), …), …), …).\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mNo iteration parameter specified. Using `iteration_parameter=:(epochs)`. \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 2.2247422992833092\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 1.9681479167178544\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaving \"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/mnist1.jls\". \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 1.220910971646785\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.5940933327640742\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.46833501799372196\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaving \"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/mnist2.jls\". \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.4241402839593314\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.40840895980242126\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.404754883332919\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaving \"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/mnist3.jls\". \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.4097772917650752\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.420399235463716\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.43216415903189187\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mfinal loss: 0.43216415903189187\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mfinal training loss: 0.043363843\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mStop triggered by Patience(3) stopping criterion. \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mTotal of 22 iterations. \n" + ] + } + ], + "source": [ + "fit!(mach, rows=train);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison of the training and out-of-sample losses:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/loss.png\"" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot(\n", + " epochs,\n", + " losses,\n", + " xlab = \"epoch\",\n", + " ylab = \"cross entropy\",\n", + " label=\"out-of-sample\",\n", + ")\n", + "plot!(epochs, training_losses, label=\"training\")\n", + "\n", + "savefig(joinpath(tempdir(), \"loss.png\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Evolution of weights" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_epochs = length(losses)\n", + "n_parameters = div(length(parameter_means), n_epochs)\n", + "parameter_means2 = reshape(copy(parameter_means), n_parameters, n_epochs)'\n", + "plot(\n", + " epochs,\n", + " parameter_means2,\n", + " title=\"Flux parameter mean weights\",\n", + " xlab = \"epoch\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note.** The higher the number in the plot legend, the deeper the layer we are\n", + "**weight-averaging." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/weights.png\"" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "savefig(joinpath(tempdir(), \"weights.png\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Retrieving a snapshot for a prediction:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3-element CategoricalArrays.CategoricalArray{Int64,1,UInt32}:\n", + " 7\n", + " 9\n", + " 5" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mach2 = machine(joinpath(tempdir(), \"mnist3.jls\"))\n", + "predict_mode(mach2, images[501:503])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Restarting training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Mutating `iterated_clf.controls` or `clf.epochs` (which is otherwise\n", + "ignored) will allow you to restart training from where it left off." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mUpdating machine(ProbabilisticIteratedModel(model = ImageClassifier(builder = MyConvBuilder(3, 16, 32, 32), …), …), …).\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.4449181129617429\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.4575672614002921\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaving \"/var/folders/4n/gvbmlhdc8xj973001s6vdyw00000gq/T/mnist1.jls\". \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.4693455717095324\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.48012884529192995\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mloss: 0.49023152105995377\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mfinal loss: 0.49023152105995377\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mfinal training loss: 0.010609009\n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mStop triggered by Patience(4) stopping criterion. \n", + "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mTotal of 32 iterations. \n" + ] + }, + { + "data": { + "image/png": "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updkvzALCgrCwsIqJnaIiIgoKCioso94jd5/Tz75pMPhIKKlS5e6jlOxqfpxpkyZsmnTJiIaN27cI488snjx4rlz57733nvx8fGLFi1q2LDh/fff74pSnudXrFhRVlbmemNgYKBrQaFQVF6ufKcwNLR8drywsLAqn5ubm5ufn79w4ULXy5SUlMjIyJv72XiA3wUhEf0rlROIuv7i/KMPH6UhIuI0+rBR75atW3hxyvOhT76maJAodY0AAFfEx8efOnWqrKxMr9cT0e7du++9914iCgwMLCoqcu1T0RYql8udzisXr9nZ2ZWPc+jQIbvdLpfLXcfp1q1b5Q/6+OOPK7/s2rVr165d7Xb74MGDZ82a9dJLL23atMlisXAc53A4XnjhhVs6i/379ycmJhLRvn37XJePFZKTk/V6/axZs27pgJ7ij0FIRC+kcoJIXX9x/NGXj1QTERFj+m6Z8sgGBV++GdB3mLb9fRKXCABwWZMmTbp16zZs2LCxY8du2rTp77//njdvHhF17dr1448/Tk5OPnPmzLffftukSRMiCg8PDwwMnDRpUkJCwv333+/KTpdOnTo1aNBg9OjRw4cPX758eVFRUb9+/a71oWvXrt27d2/79u1tNtvRo0cfeOCBoKCgkJCQTz/9ND09febMmdfqO3otkyZN0mq1paWlU6dOXbBgQeVNmZmZH3744ejRowcPHmy329evXz9o0CBXavqAnwYhEb2Uxhns1PNXx7refJiqfKWqWYfw52ML5ky0nT4c1O9pJvPfnw8A1CgLFy785JNPpk2bFh0dvW3bNlcL54gRI4xG42effdasWbNvvvnm8OHDRMRx3Nq1axcvXrx9+/YuXbpUDkLG2OrVq6dMmTJ16tTGjRtv2bJFrVYT0T333FP5ItKlUaNGq1atmjx5slarfemll1x37FauXDl16tRNmzY99thjnTt3TklJIaJOnTpVPGLRpEmTwYMHu5b1ev2LL75YccD333//hx9+MJlM8+bN69y5MxGlpaW5rk2VSuXmzZunT58+bdo0hUJx1113RUVFeetHWQ27VrNyDTFhwgStVjt+/HgvHf/17c6s0+LaPnyo8spK0WounP+RYCgOGTZBFhBy559S0aDhh3DuUlchjdp+7llZWV9++SUm5vUgvV6/f//+2+4I6pqY9/Tp056tysVfniO8lnfukvVpwLqvcBRWevSTKdWhT76matb+0tR/2U4dlK46AADwOjT90XttZE7R2eNXx5pefHDFdaHrlmH9uIL/vq3v9qiu80NSlggAUMtV9C+tgfz9itBlUltZt/qsz2+OMvtV61VN24Y/P8X418rC+R+KdgkG/gEAuG3ffvvtwYPXa9P64IMPiouLfVZPjYUgLDe5naxVGOu10mG4Ogv5sPoRL04jYpc+fdFReFGi6gDA302fPn369Om39JZ169adOXO9WecWLVrkenzezyEIyzGizzJkaSGs128Oo+PqTXJFyOCXdRm98z55wXpkl0QFAoBfO3fu3Llz56qsNJvNFSsNBsP58+crb507d+599115EkwUxfPnz9vtV77sb9261TUujIvD4Th//nyVHpRmszkvL89TZ1EzIQivYESfd5SlBLGHVjvMjqpbtRm9Q4a+WvjdB4Y/l0pRHQD4r1WrVs2aNWvWrFkJCQlPPPEEEUVGRr788sspKSkDBgwgos6dO7dt27ZXr14NGjRYv369613333//kiVLiOjdd9995JFHOnXq1LNnz8jIyLVr17p2iIiIOHnyJBH169dv9OjRLVu27NatW1xcXMWz+a+//nrDhg179uw5aNCguLi4bdu2+f7cfQCdZa7CiL7oKBv2p/Oh1Y5lPXnV1SOPKpu0jHjhk7wvxvPhMaqUthLVCAASECxG66EdPvowXq5Kvovx8ooVPXv2HDVqFBFNmjSpYmVubu6xY8dkMhkRzZ8/33Vtt3LlytGjRx84cICIHA6HIAiunTds2LBjx47Y2Ng5c+a8/vrrrgFl7HZ7xfXfjh07/vrrL51O9/TTT0+dOnXGjBkbN26cM2fOvn37IiIifvjhhx9++MFHp+9zXgnCsrKy7OzskpKS1NRU1+OWbvdZs2YNY6xHjx5ardYbZdwejtHczrIn/nQ+vNrxcw9eeXUWyoIj9N0fNWz6BUEI4FechZdMu9b76MMYU8Q2kQWGXn+vMWPGuFKQiGw22/vvv3/u3Dmbzeaa4UGlUlXeuVevXrGxsUTUuXPnf//739WPNmjQIJ1OR0RdunT56quviGjt2rUPPfRQREQEEQ0cOHD06NGeOLeayPNBePLkyZYtW7Zt2zYyMvKZZ5558sknP/jggyr75Obmpqenp6WlCYLw8ssvZ2dnu37WNYSM0TedZUP+cA5c51zQTSa/uv1Y06pzybIvnYWXZCE1qGYA8Cp5/bjQYROkruIqISHlw32cPn26Y8eO//73vx9++GG73f7VV1+ZTKYqQVgxvoFcLq98m7CCKwUr72A0GjUajWslY6xiue7x/D3CsLCwgwcPrlmz5rvvvtuwYcOHH3549uzZKvt8+umn7dq1W758+f/+978WLVrMmDHD42XcIRmjeZ1lRDRwndMhXLWJyRWaNt2MW1ZKUxkA+CWFQuE2wIho48aNrVu3Hjt2bPfu3SvS8c6lpqa6phIkomPHjl28WGe7zXs+CPV6ff369V3L9evXl8lkFoulyj5ZWVmumZSJaMCAATVzHCM5Rz91kzlEeuz3qlmoy+ht3LxSdFbrUQMA4B0tW7Zcvnz5Z599tmLFiiqbUlNTs7Ozv/vuuwULFrht9rw9jz76qNFoHDBgwAcffDBixIiQkBCOq5v9K73bWeb999/v2LFjlek2iOjs2bPR0dGu5ZiYmOp9gisUFBTs379/5syZrpccxw0ePLjKJb/3yIh+7EID1gmDfhe/68xkl6fJZGH1ZeHRpj3ZquYdb+Y4Tqez+oC2fgLnLnUV0qjt517Rx6TmePjhh1Uq1f79+11P/r322msVd5RatGjx/fffL168OCgoaM6cOYsWLXI1Yz755JPNmjUjonvvvbfiecHg4OCJEye6lidMmOC6ghwyZEjFL+pmzZo99dRTRKRUKjdu3LhkyZKSkpL58+enpKT4ciBst27jLxXHcRXzOF6LFwfd/uabb1577bUNGzY0atSoyia9Xr9u3bq2bdsS0ebNm/v06VNYWOj2IEOHDj106FCLFi1cL1Uq1WuvvRYU5NO5c61OGrieC1fRzA4Cd/nnad2z0bJ1deDIiTdzhNo+APGdwLlLXYU0avu5//LLL19//XVWVpbUhUhs69atrVu3FkVx8uTJS5Ys2b59+w1DxUvOnDnTqVOnI0eO3Oob5XJ5RZeia/HWFeGPP/44fvz4tWvXVk9BIoqKirp06ZJr+eLFi9f5ltGgQYOmTZt6b/aJm6EiWtKD+q5yPPe37Mu7Za4sVN7VxfS/OXxZAR8efcMj2O12n13F1jQ4d6mrkEZtP3eFQiHVb/wa5dtvvx04cKAgCC1atFiwYIG0PxPGmJf+UnmlwXfJkiUvvvjib7/9lpycXLHS4XBUDGrXuXPnVatWuZZXr17dpUsXb5ThQWqesnryJ8rEURudritoJuM17XoaN/8qcWUAAF4zffr0EydOnDp1atmyZY0bN5a6HG/x/BXhkSNHBg4c2KFDh4ph8caOHdu0adN169b179+/tLSUiF544YWMjIyAgABBEL7//vstW7Z4vAyP0/D0v/v43isdYzc7P02XEZGuY5+LU54P6PU4kyukrg4AAG6T54MwKCjos88+q7wmICCAiJo1azZt2jTXmpSUlK1bt/7www+Msb///ru2fNHQ8pR1H99hmWP1ObFHNJMFRyhim5h3b9S0uVfq0gAA4DZ5PggjIiJcPY6qiI6OHjZsWMXLxMTEN9980+Of7m0BcvpnMvfTCaFHtIyItB37lK1diCAEAKi96uZDIV41II4tPSXYBCIidUo7Z0me/dxxqYsCAIDbhEG3b1mMljUNYmvPib1iGXGctv19xs0rg/o/I3VdAOBJp0+fnj17ttRVQLlrPWLnEQjC25EZzy04KfSKlRGRNr3XxUmjAv8xnCnVUtcFAJ7RvHnzDh06bN++/Tbea7fb5XL5jferi7x67mPGjPHSkRGEtyMznpu4w251ypQykgWEKBs3N+34Q5veS+q6AMAzGjZsOGvWrNt7b20fTOBO1NJzxz3C2xGpptRgtvpc+aA82ozeho3/k7YkAAC4PQjC2zQgnlt4snw0QlVSa9FmsZ255bF/AABAcgjC29Q/jlt+WrC4BoBlTJvey7jpF4lrAgCAW4cgvE2RamoVyladLb8o1Lbvad67STAZpK0KAABuFYLw9g2I5xacLL9NyGkDVE3bmbatlbYkAAC4VQjC29c/jluRI5gvz86r7djbsOkX8tq0VgAA4A0IwtsXrqLWoWzl5dZRZXwq4zjriX3SVgUAALcEQXhHMuO5hSevXAJqM3qjywwAQO2CILwjjzTiVuQIxsuto5q23SyHtgmGYkmLAgCAW4AgvCNhKmofzlbmlLeOciqtunkn45ZV0lYFAAA3D0F4pyr3HSUi3d3/MGb/ii4zAAC1BYLwTvVrxK06e6V1VB6dwGn0lsM7JC0KAABuFoLwTgUrqUME++WMULFG27EPuswAANQWCEIPqNJ3VHNXV+vJ/c7ifAlLAgCAm4Qg9ICHG3Grzwml9vKXTK7QtO5i/GulpEUBAMBNQRB6QJCCOtWr1jq6+VfR6bjOuwAAoCZAEHrGgKtbR+X1GvChUZYDWyUsCQAAbgaC0DMebsT9fv5K6ygRaTtilBkAgFoAQegZAXK6J4rLOn2ldVTd8h77uROOvHMSVgUAADeEIPSYAXGs8pP1TMZr2nU3/vWbhCUBAMANIQg95sGG3PoLQontyhptRm/jllWiw37tNwEAgMQQhB6jl1OXKG5ZpdZRPjRKEZNg3rNJwqoAAOD6EISelBnPFp4UKq/RZvQ2ZqPLDABAzYUg9KQHGnIbc8VC65U16tQOjvwLzotnpCsKAACuB0HoSVqeukVzyyu1jhIn03a437ZtjXRFAQDA9SAIPWxAHFtQpXW0w/32PRtFm0WqkgAA4DoQhB72jwbc5otiQaXWUVlQGN8w2bTzT+mKAgCAa0IQepiGpx7R3M+nrrooVLTtYdy0QqqSAADgOhCEnle97yjfuKVgKrPlHJWqJAAAuBYEoef1juW2XBIvmSutYkzb4T5jNi4KAQBqHASh52l4uj+W+/n01V1m0nuZ92wSLEapqgIAALcQhF4xIK5q6yinDVAltTJtWydVSQAA4BaC0Ct6x3I78q9uHSXSZvQxbsySqCIAAHAPQegVKhn1iuWWXN13VNm4ORGzndwvVVUAAFAdgtBbBsSxBSeEKiu16b0MmK0XAKAmQRB6y/0x3K5C8bxJrLxS06675cBWwVAiVVUAAFAFgtBblDLqG8stPXVVEHJqnTotw7h1tVRVAQBAFQhCL8qM56r0HaWKiZlE0e1bAADAxxCEXnRfDNtfVLV1VNEwmam01qO7pKoKAAAqQxB6kZyjvg24xSerXvzpMnqjywwAQA2BIPSuAXHcgmqto5q7ulqP7naWFEhSEgAAVIYg9K4e0exgkXjWxCqvZEq1pnVn41+/SVUVAABUQBB6l5yjBxtyy8/KqqzXZvQxbv6VhKoXiwAA4GMIQq/LjOeW5lT9Ocvrx8mCwy0Ht0pSEgAAVEAQel23+uyEgZ02uO0yg4mZAAAkhiD0Op6jPtHComp9R9WtOttzjjoKciWpCgAAXBCEvvBwrFD9yXrGyzVt7jX+tVKSkgAAwAVB6Av3RDhPlYknyqpeFGo79jVtWSU6HZJUBQAAhCD0DRmjhxu5ebKeD4viIxtY9mRLUhUAABCC0GcGxHHVZ2UiIl1GH0M2uswAAEgGQegjXaLYOZN4rLRal5nmGY5LOfbcM5JUBQAACEIf4Rg93Iir3neUOJm2XU90mQEAkApffdWMGTM6derUokWL2z5oWVnZjh07du/eXb9+/f79+1ffIScn5/vvv694+cADDzRt2vS2P662yIzjXtziHNei6pcPbcfeFz98JrD3E0yhlKQwAAB/5uaKcOHChS1btkxPT587d67JZLqNg37wwQf/+te//vvf/37zzTdudzhx4sSUKVOKLrPZbLfxKbXO3ZHsopmOllS9KJQFhSsaNTXvWi9JVQAAfs5NEP72228LFizQ6XQjRoyIiooaNWrUrl23NnneO++8s2vXriFDhlxnn8jIyEmX3cnVZy3CMXqkEVtYvXXUNcoMuswAAEjBTRAqlcoBAwasXr364MGDY8aMWbJkSatWrdq0aTN79myj0eipDy4sLHz77bc//fTTY8eOeeqYNd+1+o6qUtoJpYX2s8d9XxIAgJ9joujmAqUyi8Uybdq0CRMmOByOoKCgp5566qWXXoqIiLjhoT/66KM///wzKyur+qZt27ZNnz49KSnp2LFjCxcu/Omnn3r37u32IIMGDdqzZ09SUpLrpUKh+PDDD0NCQm746TWKwWDQ6XREJIiUtEz+v3sdSQFVf+zmPxYJJQXaB0dJUaAXVZy7H8K5S12FNHDuUldxFYVCwfNuesNUdr3NTqdz5cqVs2fPXrFihU6ne+KJJ4ho5syZ33777ZYtW2JjY2+7sjZt2lTcPkxNTZ0wYcK1gjAkJCQ1NfXhhx92veQ4LjQ0VKFQ3PZHS8JmsymV5R1h+seJy8/JXwtnVfbh03vnfzhG/sBITqXxeYFeVPnc/Q3OXeoqpIFzl7qKq3DcjR+OcB+EZ8+enTNnzpw5c3Jyctq0aTNr1qyBAwdqNBoiGj9+fOvWrRcsWPDSSy95pMq2bdu+995719oaGBhYv379Rx991COfJRWZTCaTlU9J+Gi8OHqT8827qs5QKAsOUya2tO1ar+3Yx+cFelHlc/c3OHepq5AGzl3qKm6Zm6h87rnnGjVq9MEHH/To0WPr1q1///338OHDXSlIRBERES1atCgsLLzVTxIEISsrq6SkhIhKS0sr1i9cuNBPOsu4pNdjpTY6UOy2y0wfw6b/+b4kAAB/5uaK0GAwTJky5YknnggKCnL7njlz5ly/cXLFihVvvPHGxYsXy8rK2rRp8+CDD77++ut2u/2BBx7Yvn1769atX3zxxe3bt8fFxR07dsxgMCxbtswzZ1MbMKJ+cWzBCeGt1lW/NymbtBDtNtupQ4pGyZLUBgDgh9wE4dy5c6//nsjIyOvvcM899yxYsKDipV6vJyKFQrF///74+Hgi+vzzz3fu3Hnx4sV69eq1atWq1t3zu0MD4rgn1zvfal1tA2PajN7G7F8QhAAAPuP+HqEgCCtWrNi6deupU6dCQ0OTk5P79+8fGhp6kwfV6XTVOw4xxlJSUlzLCoWiffv2t110bdc+glmctK9ITA2u2mVG2/6+3PeGB5rKOI1ektoAAPyNmyAsKip68MEHN2zYoFAoIiMji4uLS0tLx48f/9NPP3Xv3t33JdY9jGhAHFt4Qkit1mWG0+hUKe1MW1frujwiSW0AAP7GTWeZsWPH7tixY968eQaD4fTp0yUlJTt37kxKSsrMzCwuLvZ9iXXSgDjupxPun+AsH2XmRs93AgCAR7gJwmXLlr399ttDhw6Vy+WuNS1btly2bFlJScn69RgP0zPahjOHSLsL3aSdIi6FKZTWY3t8XxUAgB9yE4SMsYqRXCqEh4fXuvFcarj+cWyhu+HWiEib3suIoUcBAHzCTRD27dt30aJFVVb++eefVqu1U6dOPqnKL2TGcT9eo3VU06qL5eA20Wb1cUkAAH7ITWeZ0aNHP/bYYw8++ODQoUNjY2NdLaJffPHFhAkTTp48efLkSSKKjIyMjo72ebV1SuswxjHaWSC2Cq3ad5TT6BQNkyyHt6vTMiSpDQDAf7gJwldeeSUnJycnJ2f58uWV148bN65iefz48dcZFw1u0oA4tuCE0CrUzYhEqrR0897NCEIAAG9zE4SffvqpayC062jUqJFXyvEzA+K4R9Y4329LVS8JidRpGaW/fkuCk7jaN3AfAEAt4iYI27Zt6/s6/FPLUKaU0fZ8sU1Y1SiUBYbyoZHW4/uUTfxoIFYAAN+75vwUFotlz549y5Yt27RpU35+vi9r8ivX6TuqTssw7832cT0AAP7GfRDOmDEjKiqqRYsWDz30UKdOnerVq5eZmVlUVOTj4vyBq++o286jqrQM897NeLIeAMCr3AThvHnznn322datW8+fP3/jxo1ZWVnPP//8L7/8kpmZ6fv66ry0EKbj6e88N2knj2zA5Ar7ueO+rwoAwH+4uUc4ZcqU/v37L1iwgLHyG1d9+/a99957H3jggd27d/vV3IG+MSCeLTghtAt30ylGnZZu3rtZHtPY91UBAPgJN1eER44cGTRoUEUKuvTt2zcwMPDw4cO+KsyPDIznFlyjdVSdlmHes8nXBQEA+BM3QRgQEJCTk1NlZXFxscFgCAgI8ElV/iU5iAUo6K9L7sYdbZgsGEsdeed8XxUAgJ9wE4S9evV666231q5dW7HmwoULgwcP1ul0HSNtem8AACAASURBVDt29GFtfiQznnPfd5QxVWoH876/fF4RAIC/cBOEkyZNCg8P7969e1xcXOfOnZs3bx4XF7d27drZs2e75poHj3s0ni08KQrumkfVaemWvZt9XhEAgL9wE4SRkZHbt2//+OOPO3ToYLfbGzRo8Nxzz+3atQu9Rr0nKZCFKCn7opskVCa2sueedpbi2RUAAK9w02v08ccff+SRR8aOHev7avzZgDhu4UmhU2TVvqNMxquSW1sObNV2uE+SwgAA6jY3V4RLly41m82+L8XPPZbAFp4UnO5aR1Wp6RhiBgDAS9wEYfv27ffswfTovpYQwCLVbJO71lF1s/a24/tEK76dAAB4npsgnDp16vz58+fOnWuxWHxfkD8bEM8tcNd3lCnVirimlkPbfF8SAECd5yYIX3nllfz8/OHDh2s0mpCrnTp1yucV+pFH49nia7SOqtMyzHvQdxQAwPPcdJZ58MEHW7Vq5XZvPFDvVfF6Fq1l63PFrlFVZ2VSpaWX/O+/otPBZG7+yAAA4La5+a369NNP+74OcHE9Wd81qmrfUZk+mI+ItR7bo0pqLUlhAAB1lZum0cmTJ2/ZsqXKytLS0lGjRmFiQm/LjGOLTgoOd4PMqNMy8GQ9AIDHuQnCZcuWHT16tMpKs9k8e/bs0tJSn1TlvxrpWZye/Znrru9oi47mvdmYnhAAwLOuOUN9FXl5eUQUFBTkzWKA6Np9R/mw+pxaa8s54vuSAADqsCv3CA8cODBv3jwiOn369E8//bRv376KTQaD4ffff4+LiwsJCZGgRj/zaDy7a6lzRoaMr/YtxTVnvaJBkhR1AQDUTVeC8PTp07NnzyaisrKy33//fdOmK9PgBQYGJiYmTpw4UYIC/U+sliUEsHUXxJ7RVfuOqtMyir7/KLDPMCnqAgCom64EYa9evQoLC4koIyPj6aefHjJkiHRV+bvMeG7BCaFndNW+o4rYJoLF7Lh0lo+IkaQwAIC6x809wuzsbKSgtDLj2NJTgtFRbQNj6tQOGHcUAMCDrvl0dmlpaU5OTpVR1lJTU5VKpfer8nfRWtYpkvvphDA8seo3FVVaeumv3+q7YUosAADPcBOEFy5cGDNmzPLly8VqPfWPHz8eHx/vk8L83VPJ3Ns7nNWDUNm4uSPvnLO0UBaAjksAAB7gJgjHjBmzdu3at99+u1WrVlWu/6KionxVmL/rFcOe2UQ7C8RWoVd1mWEyXpXcxrLvL21Gb6lqAwCoS9wE4aZNm956662XXnrJ99VABY7RiCTuy0PC5x2rdplRN083/vUbghAAwCPcdJZhjMXGxvq+FKhiZBL34wmhzF51vSq5je3kAcFskKIoAIC6xk0QDhw4MCsry/elQBVRGronkvup2igzTKlWJKRZDmJ6QgAAD3DTNDps2LChQ4cOHTq0X79+VS4N0WvUx0Ylc2/ucI5Mqvp9xTUAt6Z1FymKAgCoU9wE4bPPPnvgwIEDBw589913VTah16iP3RfDns6mHfli67Crusyo09JLln0p2m1MrpCqNgCAusFNEH766aclJSVu90avUR/jGI1I5GYfEmZ2uqrLDKcNkEc1sh7brWraVqraAADqBjdB2LYtfrfWICOTuZRF9g/aywLkV61XpaWb925GEAIA3KFrTsOUk5OzYsWK2bNnO51OIjIYDAYDuilKIFJNXaK4H49X7TKjbtHJsnczpicEALhDboLQ4XCMGjWqUaNGffr0GTVqlMPhIKJp06a1atXK5+UBEdGoZO6Lg1WDkA+px+mDbKcPSVISAECd4SYI33vvvW+//XbGjBnZ2VcGdx46dOixY8cOHcKvXQn0jGFldtqeX/XiT52WgQG4AQDukJsg/PrrrydMmDB69OiYmCtz/cTGxup0uhMnTviwNijHiIYncrMOVWsdTUs3797k9i0AAHCT3AThhQsX3LaCyuVy3CaUyvAkbtFJofTqUWbkMY1JFOy5ZyQqCgCgLnAThFFRUQcOHKiy8uDBg0VFRXFxcT6pCqqKVNO99bkfqnWZUaV2sKB1FADgDrgJwszMzMmTJ2/ZsoWx8oe4z5w5M3z48MTExNatW/u2PLjiqWTuiwPVWkdT03GbEADgTrh5jvCNN97Izs5OT093Xf9lZGTs27dPo9GsXLlSJqs6EwL4TI9oZnTQ33li2/Aro8woE9IchRedxXmyoHAJawMAqL3cXBFqtdp169Z9+eWXzZs3v+uuuzQazb/+9a/du3e3b9/e9/VBBUY0IombXaXLDMepUtqZ9/0lUVEAALWemytCIpLL5SNGjBgxYoSPq4HrezKRa7rIPqXDVaPMqNPSDRuydJ3+IV1dAAC12DVHloEaqJ6autfn5h+76qJQldzGfuaIYEKHXgCA24EgrGWeSuZmXj3KDJMrlE1aWA5slaokAIBaDUFYy3SLZmYnbbl01Sgz6rR0897NUpUEAFCrIQhrGUY0slqXGVVqB+uRnaLdJlVVAAC1l1eCcNWqVePGjcvMzMzKyrrWPnPmzElPT8/IyPjmm2+8UUMdNjyRW3JKKLJeWcNp9PKYBOuRHdIVBQBQW904CIuKitauXXv69OmbP+jKlSsZY4cOHTp8+LDbHVasWDFhwoSPPvpo8uTJr7766po1a27+4BCmop4x3PdXjzKjTkXrKADA7XAThK+++uqTTz7pWj569GhSUlL37t3j4+O/+OKLmzzo1KlT//Of/zRs2PBaO3z++ecvvPBCx44d77777ueee+7zzz+/jdL92ajkqmNwq9MyzHs3k1B16BkAALg+N0H4888/t2vXzrU8ceJEnudXrVr1yiuvvPrqq0VFRR751L1797ZtWz61etu2bffs2eORw/qPrvWZ1Ul/VeoyIwuJkAWHW09VHSQWAACuz80D9RcuXEhISCAiQRBWrFjxwgsv9OjRo2vXrp9//vnOnTvvvffeO//UvLy8wMBA13JwcPClS5eutefevXs3btz45Zdful7KZLKVK1dGRkbeeQ2+ZDQaKwZu9ZTH4/jP9jpS2zsq1siS2pRt/9Me0cizH3SHvHHutQXOXeoqpIFzl7qKq6hUKp53P3RMBTeb5XK5zWYjouzs7KKiou7duxMRz/MBAQH5+fkeqSwgIMBoNLqWy8rKgoODr7VnSkpKYmLi008/7XqpUqnq16/vkRp8SRRFnU7n2WOOSqUmC+x2uSpYWb5GeVeXgq/e0g14xrMfdIe8ce61Bc5d6iqkgXOXuopb5qZptFmzZvPmzSsrK5s5c2ZYWJirDdNqtebm5oaHe2Zk5/j4+CNHjriWjxw5cp3ZnWQyWUhISPxltTEFvSRMRffHct9VGmVGXj+OZLz9/EkJqwIAqHXcBOEbb7yRlZUVEBAwf/78cePGuS4qV65cKYpiixYtbuagJpOpqKjIbrebzeaioiLX9eXRo0fffPNN1w5DhgyZOXOm2Ww2mUyzZ88eMmSI587Ij4xK5r64epQZdbP2mJUJAOCWuAnCHj167N279+uvv964ceNLL73kWqlUKmfMmBESEnIzBx03blxCQsLWrVs//vjjhISEn3/+mYjOnj1b8cjgP//5z6ZNm0ZHR0dHR7ds2XLYsGGeORs/0yWKEVH2xStdZlTNMxCEAAC3hImieOO9vMNkMjHG1Gr1dfaZMGGCVqsdP368z6ryhrKyMr1e740jT9kr7CkUv+l8eZ5IUbzw5qDwf33Mh9aU/kTeO/eaD+cudRXSwLlLXcUtc3NFuGvXroon3B0Ox+uvv96+ffuhQ4deuHDBs5+t0Wiun4JwQ8MSueWnhcKKUWYYU6W0s2B6QgCAm+YmCMeOHbty5UrX8hdffPHuu+/qdLrff//9gQce8G1tcGOhSuody3179MqdQnVahnkfhpgBALhZboLwwIED6enpruW5c+f2799/7dq1Gzdu3LFjx65du3xbHtzYqKbcrENCRQO3Mqm1/exxwVgqZU0AALWHmyCseLDv4sWLu3bt6tevHxE1atQoKirqxIkTvi4QbuSeSMaINuWWRyHj5crEVub9W6StCgCgtnAThJGRkYcOHSKiRYsWMca6du3qWl9aWiqXy31aHdyckVcPPapOS7dgAG4AgJvjZmSZfv36vfbaawcPHly0aFG3bt3q1atHRMeOHSsrK4uPj/d5hXBjTyZyb++w51tkYSoiIlWzdsWLZog2C1OopC4NAKCmc3NF+Pbbbz/22GNr1qxp06bN7NmzXSsXLlwYHx+fkpLi2/LgpgQpqG+DK6PMcGqdomGS5TCmJwQAuDE3QajRaGbMmHHw4MGsrKxGjRq5Vv7f//3f8ePHa9poqlDhqeSrusyo0jA9IQDATbnmxLyiKJ49e3bDhg0HDx60Wq3X2g1qiLsjmYzRhstdZtRpGZb9W0hwSlsVAEDN5z4If/jhhwYNGsTGxt5zzz0pKSmBgYFjxoypmC8CaqZ/JnGzL3eZkQWG8qGR1uP7pC0JAKDmc9NZZsmSJYMHD27VqtW///3vhg0bFhUVrV27ds6cObm5uUuXLvV9iXCTnkjkJu6051lk4Sqi8jnrs5VNbmqcdAAAv+UmCN9///37778/KytLJisfwfLxxx+/7777Bg8efPDgwaZNm/q2QrhZQQr6RwPu26PCi2kcEanSMvJnvRb08GjCnV0AgGtzP7LMiBEjKlLQZeDAgQEBAfv2oamtRnsqmZt9ucuMPLIBkyvs545LXBMAQM3mvtdoXl5elZUmk8lkMmk0Gp9UBbepYz0m5+jPCxVdZtB3FADgBtzPRzhx4sQdO648hVZaWjpy5EilUpmRkeHD2uB2uC4KXcvqtAzznk3S1gMAUMO5uUc4adKkTp06tWnTplWrVg0aNCgqKtq5c6fBYJg1a5ZrDFKoyR5vwr25w37JLItQk6JhsmAsdeSd48Ojpa4LAKCGcnNF2LBhw127dk2YMEGpVO7Zsyc/P/+hhx7Kzs4eOXKk7+uDWxWooAcacPNco8wwpkrtYMb0hAAA1+bmivD1119PT09/55133nnnHd8XBHduVFNu6B/Ol9I4RqROSy9b/ZO+az+piwIAqKHcXBF+/PHHJSUlvi8FPCU9gunl9McFkYiUia3suaedpUVSFwUAUEO5CcLWrVsfPnzY96WAB41I4mYdFIiIyXhVcmvLAUxPCADgnpsg/OCDD2bPnr1s2TJRFKtvhVphaGNu1TnhkpmISJWKhygAAK7JzT3CWbNmMcYeeughnU7XqFEjpVJZsWnZsmXR0eh/WAsEKuihhtzXR4VXm3PqZu2LF0wXrWamVEtdFwBAjeMmCKOjozt27Oh+b97N/lAzjUrmBv/hfDmN45RqRVxTy6Ft6hZ3S10UAECN4ybY3n33Xd/XAR7XPoIFyOn3C2K3+kydlmHesxlBCABQ3TXnI4Q6YOTlLjOqtHTLwa2i0yF1RQAANY6bIHzzzTcHDRpUZeXixYtbt27tdGKi19pkaBNuzXnhgolk+mA+ItZ6bI/UFQEA1DhugvCnn36qPqZoz549d+/evW3bNp9UBZ6hl9Mjjbh5RwVyzVmPvqMAANW4CcIzZ87Ex8dXWanX68PCwnJycnxSFXiMawxuQSR1i47mvdmER2IAAK7mJgi1Wu2ZM2eqrDQYDPn5+Wo1+t/XMu3CWZCS1p4X+bD6nFpryzkidUUAADWLmyDs0qXLRx99VFR01aBcb775plwu79Chg68KA4/5Z1L5xEyqtAw8WQ8AUIWbxycmTpzYoUOHxMTEoUOHJiQkFBQUrFixYsuWLe+8805oaKjvS4Q7NKQxN2Gb/byJC0vLKPr+o8A+w6SuCACgBnEThCkpKRs3bnzxxRenTZvm6iYaHx8/e/bsf/7znz4vDzxAJ6d+cdw3R8X/a95EsJgdl87yETFSFwUAUFO4HymmefPma9asMZlMubm5Op0uIiLCx2WBZz2VzGWudf67Oa9O7WDem63vlil1RQAANcX1HqjXaDTx8fFIwTqgTRgLUdLqc6IqDQNwAwBcBSPL+AvXcxTKxs0deeecpYVSlwMAUFMgCP3FoATujwvCBatM1bSNZd9fUpcDAFBTIAj9hU5O/eO4uUdEdVq6eW+21OUAANQUCEI/8nQKN/uQIE9qYzt5QDAbpC4HAKBGQBD6kRYhLEJFq/NUioQ0y0EMGwsAQIQg9DeuLjMYgBsAoAKC0L88lsCtzxWKEzpYDm0X7TapywEAkB6C0L/o5JQZz/33rF4e1ch6bLfU5QAASA9B6HfGNOW+PCQoUvFkPQAAEYLQDzUPYVEa2lqvo2XvZkxPCACAIPRHTyVzn50P5/RBtlMHpK4FAEBiCEJ/9FgCtylXsHZ4qPD7qc7Sohu/AQCg7kIQ+iMNT48mcHN1PTTtuud/8X+CsVTqigAAJIMg9FOjkrk5hwVt98dUKe3yZ70uWs1SVwQAIA0EoZ9qHsKitfTuTkHZ60l5bOP8r97CY4UA4J8QhP7rm86yXQVi44XO+U2fJn1IwZyJotMhdVEAAL6GIPRfiYFsaQ/Zyvtl6y9SS27sEYsq75tJJAhS1wUA4FMIQn+XGswWdJP91kcxPfXVP0+b1n8+1WzHw4UA4EcQhEBElBrMfuiuTHnmDVZ4/rOPvpi8WzCjlRQA/AOCEK5oFqHq+Oo7mdz+4M0/xP1kRxwCgD9AEMJVOJU29pn3Hij6Y0PI8u35IuIQAOo8BCFUxemCwsf8R78ta652zZre/P4iMR5xCAB1lxeD0Gw222x4NK1WkgWFhY15v/TXeQmnNszrIluNOASAussrQWixWB599NGoqKiIiIixY8eK1aY42LRpU0glS5Ys8UYZcCf4sPpho98rXvKF5eDfqcEMcQgAdZVXgnDatGnnzp27ePHiiRMnfvnll6VLl1bZweFwREVFHb+sb9++3igD7pA8qlHoyDcL50+xHt9LRIhDAKiTvBKE8+bNe/7555VKZUhIyPDhw+fNm1d9H5lMFnyZQqHwRhlw5xQNk0OfGFcw9z1bzlHXGsQhANQxXgnCEydOJCcnu5aTk5OPHz9efZ/Dhw9rNJr69es/88wzBoPhWodyOp2FhYUnLjt//rw3CobrUDZpGTxwbMGXb9pzz1SsRBwCQJ3Be/yIVqvVbDZrNBrXS51OV1xcXGWf5OTknTt3JiUlHTt27PHHH3/55Zdnzpzp9mj79+/ftGnT4sWLXS85jlu5cmVkZKTHy/aq6yR97dCwmbLnkLwvxmtHTOSCI66s5mnGXXSgMfvkIB+3l3s60Tm6iUN99d+pWn/udwDn7p9w7jWKSqWSy+XX38fzQahUKgMCAkpKSlwvi4uLIyIiquxTr169evXqEVFSUtI777wzbNiwawVh8+bN09PTx48f7/E6fUyv10tdwp3p1NtAgmHee+HPfSgLDK28pb2efoih3YXixB2y1ivlrzbnnkrmVLIrO9T6c78DOHf/hHO/IbtABjuZHKJVoGIr2QQy2MnoEG3VXhZZy3euePlMCvdkoiebMz0fhESUmpq6ffv2u+66i4i2bduWmpp6nZ1NJpNSqfRGGeBZuk59RYsxf+aE8Gc/4LQBVba2CGFLust2F4oTdwgf7HG82pz7ZxKn9srfLwCQjNlBFicV20SLk0wOKrWTxUEGh1hmJ6uT8sp4p8xpFajERjYnlVWKOrtw1UsZR3o5aXim5ChISfKrXyo40slJwzMtT3H6ipeca2vjAObZk/LKL6oxY8a88cYb7dq1Ky4u/uqrr7KysojIbrd36dJl7ty5iYmJP/30U1BQUFxc3NGjR1955ZXBgwd7owzwOH33RwWLKX/Wa+HPTGZKdfUdqsThK2ncY9Hkv9+NAWqSitAy2MnipFIbmRyixUnFtmvGW8WeRododVKxjVQyUvMUpGBKGWl5CpCTUkZ6OdPJSSUjFVEgz4IV1EhHChnp5aSWcSoZBSrKX7qiLlBBnIez7I54JQiHDBmSl5c3fPhwpVL52WefZWRkEBFjLCQkhOd5IhIEYdKkSRcvXoyMjHz++efHjBnjjTLAGwL7Plm81JY3c0L4mPeZQuV2n8px+O5OZdsIR1owSwthqcEsJZgpMJwRwK1zilRqozK7aHKQ0UHFNjI5RLODim1kdJDJQWV2sdRGJgeZHFRsE10LJTYyOESTgwx20stJJSO9nGnl5AonVywFK8vjLVDBIq6KN04nJ+XVe15fWZlDr3fzFbmGY9Wfdq9RJkyYoNVqa/s9wrKysjp1z0AUi378xFmSHzryLcbf4C70wYtlx6zafUW0p1DcVygeLxPjdCw1hDUPYanBlBbC4vSsJn019KS69ud+K3DubjcV28hgF40OMtivWi6ykskhui7FyuxkdpDBIZZUSjWjnZwiBShIxzMNTzq5K5xIw7Og8gUKkDO9nDQ8aeUUpGBqGWl4ClKSlmcanvQ3+Jfq9XOvyXAPB24dY8GP/qvgm/8UzpsUOmwCcde7xIvRUNN63D8alL+0CXSoWNxXJO4pFL88JO4rogKr2CzYlYssNZg1D2Fh7q8zAWqEEhsZHaLBTmX2qsuuYCs0yY2i02gXjQ4qs1OxjYx20eAgg50CFaSTMy1PejkFKUgrZzqedHIKUpCGZxFqahLouhlGOp4LuJxwwQqm4Ukpu3FtcHsQhHBbOC7k8X8XfPVW4Y8fhzz2It30RZ2Co+YhrHkIG5RQvqbERvuKxL2F4p5CcdFJYV+RqOQoLYQ1D2GugEwJYuh0A57lug4zOsQiq2uBDHax2EZll5dLbFRqJ6OdDHax1E6ldjLYRaOdSu0UICetnHRyFiCnADnp5Ewrp4rlSA01UAr1ApiW53Ry0sspUEFanrmWoWbCLxi4TUzGhz75ev7M8cVLZwY9cvt3eQMV1LEe61jvSpTmGMV9hbS3SFx3Xpy2XzhcIsZqWVoISwtmqcHUPITFBzBZXW1OhZtmdbpulYkGOxnsZHBQiU0scy3bqdQultrK15fZxRIbXd5NLLaSmiednHQ8C1KS65pMy7NgpWslhalY4wDSy13ruUBFefhpeRZ4E6NglZU59XrcCa9NEIRw+5hCGfrU23mf/bv0t+8D7hvkqcPGalmslnrFlmedQ6AjpeK+QnFPofjtMdpbKFw0i8lB5a2paSEsLYRF1r7b80CldjI7yOgQi61kcpDJSSU20Wh39fugUrt4+Q5Z+f0zV5iZneW9QmSMtHIKVjCdnLTlDYxM77pc4ylYwRrqytcHyLkARXnI6eWspnVZBMkhCOGOcCpt+Oj3Lk1/mSmU+q79vPERPEcpQSwliGXGl68x2Gl/kbinUNxXJP6SI+wpFM0OClKyIAWV/6dkgeXLLEhBQUoKVrAg5ZU1PL6v3xmH4GpFLO9Sb3GS2UElNtHiJNeNsRITb+OcZXYyOchoL+/EaHZSsZWMDtEVdeU9O3h2ud8HBSlYeb8PBenlLExFWp6CFKTmmatXiJYnDU96OdPL8YcIHoMghDvF6QLDx/wnb/rLnFqr7XC/Dz5RJ6f2Eax9xJVv9a6edcU2KrZSsY2KbWKJjYptlG8Rj5VSkZWKbUKxjYptVGwVS2wk56oGp2shsK4HZ5mdHALZBDJefgLa9TCZVaAi65U8swrlDYlWgUps4uWHzMjiJJNDLLUREQW463yv5EgnJ52cOCeFqVisli53ceQ0lzsxanim4SkAN8ygxkAQgge4JvLNm/4KU6o1rTr7vgBXP/L6mooVN2j5qh6crgW3wVlscz1KxZSX47By25qcI12l3+k6nskv7yY4FaEaZ8UmNU+VR54LUlzpYqSQkbbSv0VXXBGRxUlmp0hEgkglNg9sdV1IyTnS8az6I2JKWXkv/FAZ6eWk5UkpoyAF56o8SEFKGWn5m7oaq6XPk4F/QhCCZ7gm8s3//P84pUaV0lbqcm7gVoPTeLndz6XYShWP39oEMtqv7FlmFx2XtxmMDnul5yxNDrJeiUUqsl15hNfqJFOl6TsqkkbJUbCCERHHqHGAm60annNtrejEcfVWVmUrAFSHIASPcU3km//lW6FPTlAmpEldjidpedLylcLyek8MX9mtrExA70GAmg//SsGTKk3ke0TqWgAAbgqCEDzM7US+AAA1FoIQPE+d2iHwwX/mz5zgKMiVuhYAgBtAEIJXaO66V9/j0fwv/k8oLZS6FgCA60EQgrfoOvbVpvcyfv22eU821exJTgDAn6HXKHiRvlumXRdS9vuikmVf6u55QNP+Pk6lufHbAAB8CEEI3iVPaR/Svrv97LGyP5eW/va9uuXd+s4P8/Vipa4LAKAcghB8QR7TOGTwK87SImP2L5emv6xomKzv/JAysZXUdQEAIAjBh2QBwQH3D9F3f9S888/iJTNJxus69tG07c7kGPgEACSDIARfY7xc07a7pm1364n9ZWsXlK78VtO2h+6eB2WBoVKXBgD+CEEIklHGN1PGT3TknTNsWH5x8ihVs/b6rv3l9eOkrgsA/AuCECTGh0cHPTImoPfjpi2r82e/IQuO0Hd+SN28I3F4tgcAfAFBCDUCp9LqOj+k7dTXsndz2Z9LS/73X93dD2o73MeUmMoHALwLQQg1CJPx6pZ3q1vebcs5alj/c+nE+Zo29+q79JOFREhdGgDUWQhCqIkUsU1CBr/iLCkwbv714pRnFY2a4nELAPASBCHUXLLA0ID7h+i79jNt/71o8RecQqm750F16y5Mhr+3AOAx+IUCNR1TqrUZvbXpvaxHd5X9+XNJ1n+1Gb11dz/AaQNu/GYAgBtBEEItwZgysZUysZXj0lnDxqzc94armrXXd8uURzaUujIAqN0QhFDL8BExQY+MCej5mHHLqvwvxstCIgO6D1CltCfGpC4NAGolBCHUSpwuSN8tU9f5YdOOP0pWfFu0+HNV0l2qpNbKJi3QZAoAtwRBCLUY4+Xadj207Xo4Ci5YD+807VpftGAaHxqpTGylSmqliE9lvFzqmU73GgAAFs9JREFUGgGgpkMQQl3Ah0bxGVHajN4kCLZzx61HdpauWWA/8668QaIqqZUysZUipjHaTgHALQQh1C0cp4htoohtou+WKVrNttOHLId3Fi+Y5ijKUzZOUyW2UqW0kwWFSV0lANQgCEKos5hS7epoSkSutlPLkZ0l/5vLqXXKpFaqxFaqpm0whBsAIAjBL1RvOzVkryj8foo8OkGd2h5tpwD+DEEIfqZy26nNajt14HLb6SVl4+aqxFaq5DYY2hTAryAIwX8xhbKi7dRZVmQ7vs9yZGfpb/MZr3C1nSqTW3MqrdRlAoB3IQgBiIhk+mDXxBd0+Yai8e81hT9MlUfElD+MkZCGMU4B6iT8wwaoquKGomi3WY/vtR7eUfzzbGdxvqJBojymsSKmsTymMR8aiXuKAHUDghDgmphcoUq+S5V8VyCRYCi2nTlqO3fMtOMP+/KvBJNBHpNQkYvyiBjiOKnrBYDbgSAEuCmcLkiV0laV0tb1UrCY7OdP2nOOWg5vL1vzo6Mglw+NlMc2UcQ0kcc2UcQ2YXKFtAUDwE1CEALcDk6lUcY3U8Y3c70UrWb7pbOO3NO2nKOmXRvs50/wweEU2YjFpchjmyhiEphCJW3BAHAtCEIAD2BKteupDE3b7kQkOh2OvHNlR/c68nJcuSjTBfGRDRSxTRSxjRWNUjAyOEDNgSAE8Dwm4+WRDeXaEL1eT0QkOO2Xztpzjtpyjpb9ucw+fwrj5a4WVEVsY3mDJJk+WOqSAfwXghDA+ziZPLKhPLKh63qRRNFx6azt3HH72WNlf/5sP3uMKTWKmAR5TGN5/Th5RKwsLAqPagD4DP6xAfgcY3y9WL5eLLXu4lrhKMi1nz1mP3vc+Ncqx6UcZ3GeLDCUD4/hI6L58Bh5RDQfFi0LDscDGwDegCAEkB4fGsmHRqpbdCp/LTgdRZecBbmO/AuOglzLwb8duWecpQWygFA+soE8siEfGsmHRclCI/nQKEkLB6gLEIQANQ8n40Oj+NAo1/BvLqLT4SzOc+SetueesZ09Ztq1wZF7WnTY+NDyRJRHNuAjG8ojYjClBsAtQRAC1A5MxrvSUdWsQ8VKwWRwFFxwFuQ6Ci5Yjux0rF9mv3SWyWR8aNTla8coWWikPLIhnmsEuBYEIUAtxml0Ck0Tim1yZZUoOovzHHnn7HnnHJfOWY/tdeSdc5bky4LC+YgYeUQMHx4tC46QBYfLgsIwpDgAIQgB6hrGZMERsuCIqs2qBbn2S2cdl87aco4692xyFuc5i/NFQZAFR8gCQ2SBYXxwOBcYygeFyQLDucAQPNEB/gNBCFD3MRnPR8TwETFV1ot2m7O0wFlSKJQWOgouOC7mWI/udr10lhZwap0sMFQWGikLCJEFhpb/PzSSD44gTibJiQB4A4IQwH8xucJ137H6JtHpEAwlztJCZ0Gus6TAWVpoyzlaHplFlziVmg+N4ioCMiCED4viAkL44Ah01YFaB0EIAG4wGS8LDJUFhl51A9JFcDpLi5xFl5ylBc7ifGdRnvVSjmnbWmdxvrOkgNPquYBQURvkCArhtAGcNpDTBXCaAE4bwGn1Mm0ApwnATB1QoyAIAeAWcTJZUJgsKMzNJlF0lhU7S/INuWcVgl0wlgrGUkfeWcFYJhhLnMYywVgqmEo5lZbTBlT8J9PoOW0ApwvktIGcVs9pXcGpx/A64Bv4ewYAnsOYLCBYFhAsD4rUusZZdUcwGQRjiWAsE0ylgqHEaSoTjKWOnEuCoUQwlQquvDSWMrmiWjoGcFq9TBfIaQI4XSCn1DCVhlNrMeYO3AkEIQD4GqfRcRodhd9gN8FiEowlrlC8nI4ljvOnrBUrzUbRahLMRiZXMIWaU6o5jY4pVa5lptZyKg1TqJhKwylUnEbPlCqmVHMKNVNrOJWWKVR4vBLIe0GYl5e3ffv26OjotLQ0tzvYbLbs7GzGWEZGhlwu91IZAFB7cSoNp9LQTQwjJ9osgtUsWi2C2SBazaLVLFjNosUkWEyi1ewszndYzZU2WUSLSbAYRatZFAROpebUOqZQMeXl+FRqyiNTpeFUWuJ5TqkhjuNUGmKMqbSMMabWEhGn1hMRLklrO68E4dq1awcOHNixY8ddu3b17dv3s88+q7JDQUHBPffcExISIopiWVnZH3/8ERyMh5YA4DYxhUqmUNE122KvSXQ6RKtFMJeJVkuV+BRsZsFkcBTkktMpWE0kCILFRKIoWoyiKIpmIxEJ5jIiEsxGEkVOpSWOMZVGFJlJo2WcjClVxPGcUkUynilUjJczuYLxCiZXMLmC8XImVxIv5xQqYoxTuwY3KI9YIuLUOmJERJxKS4wjIqZU4b6pN3jlZ/ryyy//5z//GTly5KVLl5KSkkaNGlXlunD69OkJCQnLly8XRbFPnz6ff/75hAkTvFEJAMB1MBnPXO20d0ywGEkQBYvRaCjTyJgoCKLVTIJTsJrJ6RRsFnLYRbtVdNhFu00wGUSHTbTbRIddtFnKU5aIqDxiiUgwG0i8fGRRICLBYibBSURMoWI8T0RMrmS8goiIl3MKJRG5QpeImEzmepSFMa4iXF1JXFHzVdeynIyr9OgLU6qY7Epb3VU/IleEV2xSaSq6AQtGoyCrenHsCv5b/4n6jueD8OTJk3v37h04cCARRURE9OjRY+nSpVWCcMmSJa7kY4wNGjTok08+QRACQK3mGq+O0+g4uUZ+7Y5CHiHaLKLDQUSi3So6bEQk2u2i3UpE5HSINgsRiU6naDUTkSg4xfKUJdFuc+3v4rqWLX/hdDhslisfYbWITvuVPU2GKx/vuPxZrk0WEwlC+bLw/+3de1BU5f8H8Gf3sMtF4rIY17hfDZRYEAw2QRABF4OMLjM04x9iOoxp2RSEoQ5dTWayGYJwkATLMYaoJONSQNCOIBtCRMbdhlDu7LLAwF7Y8/3j6PntdxH19/txeIDzef3hnPOcR3g/nnWefc55znm0s8pZ/bRqFalW6RXS410ax4Cv27/eLTTewNG77GzAMxXtMQncgZbP8neEg4ODAoHA1PTu1wcnJ6fBwcHFdZycnKhtZ2fnxRVoCoWiv7+/pKSE2uVyufHx8Xz+qv5ysZhWq9Xe+6CwDbQddwo8oO3M/g4DPjLgI4Q4Riar6ubk9PT0Y4/2JYAe79JIjUq3f71bODdLkv9dT6M2sH7i0f+FORyOfle6yPJ3hEql0sDgf34sj8ebn5/Xq6NSqegJMvetQBsfH//zzz9VqrvfJgwNDUNCQqysrJY7NbOUSiVrJwRB23GnwAPajjsFHv+LtnMM9EaEiG+A+Cb61TbcZ/qICiG0dK+hh8/n63ZJ97X8HaGdnd3k5KRWq+VyuQihsbExOzv9SV+2trbj4+PU9tjYmL29/VI/zc3NbfPmzRkZGcuecyUtLCyYmCw6wewAbcedAg9oO+4UeKzRti//i448PT3Nzc2vXbuGENJqtfX19SKRSK9OWFhYbW0ttV1XVxcWFrbsMVaV8+fP446ATWFhIe4I2EDb2Ym1bSdJco22naN/+XU5fPTRR8XFxenp6TU1NW1tba2trQRBVFdXJyUlKRQKhFBra2t4ePjJkydJknzvvfckEslSjxseP358w4YNa3pESJIkQRDsvF+ysLBgaGio0WhwB8FAo9EYGxur1eqHV1131Gr1hg0b6DsarKJSqR577DGlUv9eFxsolUpzc/MH3OpatRh5fCI9Pd3FxaWhocHT0/Ps2bMEQSCEvLy8srKyqAoBAQF1dXUXL17kcDj19fVL9YIAAAAA0xgZES4jGBGuaTAihBEh28CIcC2OCGExFAAAAKy22t/W09XVdf369bKyMtxB/l84HE5QUBDuFHiQJMnOtpMkqdVqWdv2hYUF1rZdo9FA21ePvXv3PvSa4mq/NDo2Ntbb27vmnqDXo1AozMzMcKfAA9qOOwUe0HbcKfBYhW13dXUVCAQPrrPaO0IAAACAUXCPEAAAAKtBRwgAAIDVoCMEAADAatARAgAAYLXV/vjEWnfhwgX6sWJ3d/eoqCi8eZgml8t///33/v7+Z5991tbWli6/devWN998gxB6+eWXXVxcsOVj0szMzI0bN7q7u3fs2OHu7k4V9vT01NXV0XUSExOtra0xBWRQe3v7r7/+Ojk5KRQK4+PjufeWaZXJZF999dXExIRYLN66dSvekAzp7e2trq6mFiFPSkqi1l6Qy+X04nEIodDQUD8/P3wZmUK9RHNqasrLy+uFF14wNLy7muDk5OTFixflcvmePXuEQiHekI8CRoTMeuONN+rq6lpaWlpaWm7duoU7DrNIkrSxsUlPT3/ttdf6+vro8p6eHqFQOD4+Pj4+LhQKe3t7MYZkzpYtWw4fPvzmm282NzfThY2NjR988EHLPbOz+muWrgMdHR27d+/u7u4mCCItLe3FF1+kyufm5p5++mmJRMLj8WJjY8vLy/HmZIJCoQgJCWlrayMI4uzZsxEREdQX36Ghoddff50+76Ojo7iTMuLMmTPj4+N8Pj8vL08kElFtn5mZCQ4Obm5u5nK5O3furKqqwh3zEZCASRYWFr29vbhTrBylUkmSpEAgkEgkdGFqauqhQ4eo7YMHDx4+fBhPOIZRbQ8ICLh06RJdWFRUFB8fjy/USpibm1OpVNT2v//+y+Fw/vnnH5IkCwsLg4KCtFotSZIFBQXBwcE4UzJDo9HMzs5S2zMzM2ZmZvX19SRJ3rx508bGBmu0FTU/P29iYiKVSkmSzMvLCw0Npc57bm7uM888gzvdw8GIkHHffvttfn5+W1sb7iAr4b6vPqitrY2Li6O24+LiampqVjbUClnqtQ/Dw8M5OTklJSVyuXyFI60MIyMjei1W6qKokZERQqiuri42NpZaHDwuLq65uXlmZgZjTiYQBEEvv2dgYLCwsEC1HSGkUqny8/OLiooGBgbwBVwhnZ2dXC7X0dERLTrvEolk9b95FTpCZgUEBAwODkql0oiIiJMnT+KOg8fQ0BB9Y8zW1nZoaAhvnpVkYmLi7Ozc39+fn5/v4+PT2dmJOxGzjh07lpycbGNjg/77vFtbW3M4nDt37mBNx6zMzMzAwEDqVihBEEFBQV1dXeXl5b6+vj/88APudEzZt2+fi4uLSCT6+uuvF593W1tbkiSHh4exZnw4mCzDLHr94SNHjgiFwgMHDjzxxBN4I608LpdLL76h0WgMDFj0qUtKSkpKSqK2Dxw4cOLECd05FOvMO++809PTQ3/mdc87tbGOT31ubm5paWlDQwM1EvLy8qqurqYOnTt37ujRowkJCVgDMuXjjz9WKBSVlZUpKSktLS2Ojo56/9/RWjjvMCJcIVu2bLGwsOjv78cdBAMHBwd6KHDnzh07Ozu8eXCJiIjo6enBnYIpp06dunr1alVVlbm5OVVib2+ve94RQroTideT8+fPnz59uqam5r5fc8PDwwcGBtbrolR2dnbe3t5Hjx718fGh5kPpnXeCIFb/TGnoCBmk+9GXSqVTU1Oenp4Y8+AiFovp9UPKysri4+Px5llJup+ByspKHx8fjGGYk52dffny5erq6o0bN9KFYrG4vLycWpGxrKwsMjKSvp22nhQVFWVmZlZVVbm6utKFuue9qqrKzc1tra8csBg1Q4ranpmZ6e/vd3BwQAiJxeIrV65QY8GysrKYmBj6FvKqBS/dZlB5eXlGRkZgYOD8/PxPP/307rvvvv3227hDMWv//v0DAwP19fX+/v4WFhZFRUXU18OQkJBt27YhhJqbm5uamtbloDAjI0MqlV6/ft3Z2dnW1vbMmTNPPfUUNWXUwcHhjz/+GBkZqampoR8xXDdu3LgRGBjo7+//+OOPUyXZ2dn+/v5qtToyMpIkyU2bNpWVlV25ciUsLAxv1GU3MjLi4ODg6elJjwXfeuutXbt2HT9+XCKReHp63r59u6mp6fLlyzExMXijLrvGxsZ9+/Zt27aNy+XW1tYGBgaWlpYSBKFUKsPDww0NDT09Pb/77ruKiorg4GDcYR8COkIGqVQqqVTa19dnZGQUFBTk5uaGOxHjGhsbdR+VCw0NpQYBU1NTlZWVCKHY2Fj60tk609raOjExQe8KhUKBQDA8PCyVSkdHRx0dHbdv305PKVxPqLco6JYEBgZaWloihNRqdVVV1cTERFRU1Lq8Oz4/Py+RSHRLnnzySXt7e4VC0dTUNDg4uHHjRpFI9NBlgNYikiQ7Ojra29tJkvT19Q0ICKAPqVSqyspKuVy+c+dOe3t7jCEfEXSEAAAAWA3uEQIAAGA16AgBAACwGnSEAAAAWA06QgAAAKwGHSEAAABWg44QAAAAq0FHCAC7XLhw4YsvvsCdAoBVBJ4jBIBd4uPjp6amfvvtN9xBAFgtYEQIAACA1Vb76hgArHsDAwPd3d2mpqZCoVD31cwymczY2NjIyKi9vX1sbMzPz49a703XyMjIX3/9xefzhULh4ldaz87Otra2ajQaJyenxW/4Gx4evnnzppOTk7u7O7V4EAAsxczC9wCAhxsbG9u9eze6t2CbnZ1dTU0NfZTH4x07dkwkEhEEQRAEj8c7ffo0fVStVqempnK5XIIgEEJmZmaFhYX0Ua1Wm5WVRXWN1Lv/9+zZQx0Si8UikejUqVPUX0QIRUdHUysJAMBOcGkUADxIkkxISOjo6Kirq5ubmxsZGQkJCXnuued0l3H//PPPg4OD5XK5TCZLSUlJS0urqKigDmVlZeXl5X3yyScKhWJ0dDQ6Onr//v319fXU0ezs7BMnThw6dGh0dFSpVPb09Dz//PP0j21pabl27VpXV5dSqczJyfn555+Li4tXsu0ArC64e2IAWIpawby8vJwukcvlxsbGn376KbXL4/G8vb0XFhaoXZVK5eTkJBaLSZLUarWWlpbUNmV6elogECQmJlI1LS0td+3add/fKxaLTUxMxsfH6RJvb+/k5OTlbh8AawbcIwQAD2reZl9f37lz5+hCCwuLzs5OejcqKorLvXvZhsfjRUREUH9reHhYJpPpLnFnamoqEomkUilC6O+//5bJZImJiUv9ai8vLysrK3rXxcVFdxgKANtARwgAHnK5nMvl/vjjj7qFvr6+uuu3Uav60aysrEZHRxFCY2NjCCG9Ve4EAsHMzAxCaHp6GiGku1i8HlNTU91dAwODubm5/3NDAFjroCMEAA8bGxutVltcXGxnZ7dUndu3b+vuDg4OOjk5IYSoPxcftba2RgjZ2toihAYGBpiIDcD6A5NlAMCDmi+al5f3gDrl5eWzs7PUtkwmq6ys3Lp1K0LIwsLCw8Pj0qVLWq2WOjowMFBfXx8ZGYkQcnd39/b2LigoUKvVzLYBgHUBOkIA8AgICEhNTf3www8PHjxYUVHR0NDw5ZdfJiQkfP/993QdQ0PD2NjYioqKq1evxsbGajSa9PR06tD777/f3t6+d+/eqqqqkpKS6OhoExOTtLQ06uhnn33W29u7ffv2kpISiURSWFh45MgRDI0EYC2AS6MAYJOTk+Pn55ebm1tQUMDlcu3t7aOiojZv3kxXePXVV1Uq1SuvvDI5Oenv719ZWblp0ybq0EsvvUQQRFZWVmxsLI/H27FjR2lpqaurK3U0Jibml19+yczMTE5O1mq1jo6OKSkp1CEPDw/qViLNw8ODHncCwELwrlEA8KPmcNMTRCl8Pj8zMzMzMxMhtLCwQD//rkej0VDP4y/loRUAYDn47wEAfhwO58EvOVuqF0T33krzANALAvBgcI8QAAAAq8FXRQBWqaampgc8WQEAWC5wjxAAAACrwaVRAAAArPYfjOXSV2JD4EQAAAAASUVORK5CYII=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iterated_clf.controls[2] = Patience(4)\n", + "fit!(mach, rows=train)\n", + "\n", + "plot(\n", + " epochs,\n", + " losses,\n", + " xlab = \"epoch\",\n", + " ylab = \"cross entropy\",\n", + " label=\"out-of-sample\",\n", + ")\n", + "plot!(epochs, training_losses, label=\"training\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.10.3", + "language": "julia", + "name": "julia-1.10" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/dev/extended_examples/MNIST/notebook.jl b/dev/extended_examples/MNIST/notebook.jl new file mode 100644 index 00000000..448f50ee --- /dev/null +++ b/dev/extended_examples/MNIST/notebook.jl @@ -0,0 +1,295 @@ +# # Using MLJ to classifiy the MNIST image dataset + +# This tutorial is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/MNIST). + +using Pkg #!md +const DIR = @__DIR__ #!md +Pkg.activate(DIR) #!md +Pkg.instantiate() #!md + +# **Julia version** is assumed to be 1.10.* + +using MLJ +using Flux +import MLJFlux +import MLUtils +import MLJIteration # for `skip` + +# If running on a GPU, you will also need to `import CUDA` and `import cuDNN`. + +using Plots +gr(size=(600, 300*(sqrt(5)-1))); + +# ## Basic training + +# Downloading the MNIST image dataset: + +import MLDatasets: MNIST + +ENV["DATADEPS_ALWAYS_ACCEPT"] = true +images, labels = MNIST(split=:train)[:]; + +# In MLJ, integers cannot be used for encoding categorical data, so we +# must force the labels to have the `Multiclass` [scientific +# type](https://juliaai.github.io/ScientificTypes.jl/dev/). For +# more on this, see [Working with Categorical +# Data](https://alan-turing-institute.github.io/MLJ.jl/dev/working_with_categorical_data/). + +labels = coerce(labels, Multiclass); +images = coerce(images, GrayImage); + +# Checking scientific types: + +@assert scitype(images) <: AbstractVector{<:Image} +@assert scitype(labels) <: AbstractVector{<:Finite} + +# Looks good. + +# For general instructions on coercing image data, see [Type coercion +# for image +# data](https://juliaai.github.io/ScientificTypes.jl/dev/#Type-coercion-for-image-data) + +images[1] + +# We start by defining a suitable `Builder` object. This is a recipe +# for building the neural network. Our builder will work for images of +# any (constant) size, whether they be color or black and white (ie, +# single or multi-channel). The architecture always consists of six +# alternating convolution and max-pool layers, and a final dense +# layer; the filter size and the number of channels after each +# convolution layer is customisable. + +import MLJFlux +struct MyConvBuilder + filter_size::Int + channels1::Int + channels2::Int + channels3::Int +end + +function MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels) + k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3 + mod(k, 2) == 1 || error("`filter_size` must be odd. ") + p = div(k - 1, 2) # padding to preserve image size + init = Flux.glorot_uniform(rng) + front = Chain( + Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init), + MaxPool((2, 2)), + Conv((k, k), c1 => c2, pad=(p, p), relu, init=init), + MaxPool((2, 2)), + Conv((k, k), c2 => c3, pad=(p, p), relu, init=init), + MaxPool((2 ,2)), + MLUtils.flatten) + d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first + return Chain(front, Dense(d, n_out, init=init)) +end + +# **Notes.** + +# - There is no final `softmax` here, as this is applied by default in all MLJFLux +# classifiers. Customisation of this behaviour is controlled using using the `finaliser` +# hyperparameter of the classifier. +# +# - Instead of calculating the padding `p`, Flux can infer the required padding in each +# dimension, which you enable by replacing `pad = (p, p)` with `pad = SamePad()`. + +# We now define the MLJ model. + +ImageClassifier = @load ImageClassifier +clf = ImageClassifier( + builder=MyConvBuilder(3, 16, 32, 32), + batch_size=50, + epochs=10, + rng=123, +) + +# You can add Flux options `optimiser=...` and `loss=...` in the above constructor +# call. At present, `loss` must be a Flux-compatible loss, not an MLJ measure. To run on a +# GPU, add to the constructor `acceleration=CUDALib()` and omit `rng`. + +# For illustration purposes, we won't use all the data here: + +train = 1:500 +test = 501:1000 + + +# Binding the model with data in an MLJ machine: +mach = machine(clf, images, labels); + +# Training for 10 epochs on the first 500 images: + +fit!(mach, rows=train, verbosity=2); + +# Inspecting: + +report(mach) + +#- + +chain = fitted_params(mach) + +#- + +Flux.params(chain)[2] + +#- + +# Adding 20 more epochs: + +clf.epochs = clf.epochs + 20 +fit!(mach, rows=train); + +# Computing an out-of-sample estimate of the loss: + +predicted_labels = predict(mach, rows=test); +cross_entropy(predicted_labels, labels[test]) + +# Or to fit and predict, in one line: + +evaluate!( + mach, + resampling=Holdout(fraction_train=0.5), + measure=cross_entropy, + rows=1:1000, + verbosity=0, +) + + +# ## Wrapping the MLJFlux model with iteration controls + +# Any iterative MLJFlux model can be wrapped in *iteration controls*, +# as we demonstrate next. For more on MLJ's `IteratedModel` wrapper, +# see the [MLJ +# documentation](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/). + +# The "self-iterating" classifier, called `iterated_clf` below, is for +# iterating the image classifier defined above until one of the +# following stopping criterion apply: + +# - `Patience(3)`: 3 consecutive increases in the loss +# - `InvalidValue()`: an out-of-sample loss, or a training loss, is `NaN`, `Inf`, or `-Inf` +# - `TimeLimit(t=5/60)`: training time has exceeded 5 minutes +# +# These checks (and other controls) will be applied every two epochs +# (because of the `Step(2)` control). Additionally, training a +# machine bound to `iterated_clf` will: +# +# - save a snapshot of the machine every three control cycles (every six epochs) +# - record traces of the out-of-sample loss and training losses for plotting +# - record mean value traces of each Flux parameter for plotting + +# For a complete list of controls, see [this +# table](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/#Controls-provided). + +# ### Wrapping the classifier + +# Some helpers + +# To extract Flux params from an MLJFlux machine + +parameters(mach) = vec.(Flux.params(fitted_params(mach))); + +# To store the traces: + +losses = [] +training_losses = [] +parameter_means = Float32[]; +epochs = [] + +# To update the traces: + +update_loss(loss) = push!(losses, loss) +update_training_loss(losses) = push!(training_losses, losses[end]) +update_means(mach) = append!(parameter_means, mean.(parameters(mach))); +update_epochs(epoch) = push!(epochs, epoch) + +# The controls to apply: + +save_control = + MLJIteration.skip(Save(joinpath(tempdir(), "mnist.jls")), predicate=3) + +controls=[ + Step(2), + Patience(3), + InvalidValue(), + TimeLimit(5/60), + save_control, + WithLossDo(), + WithLossDo(update_loss), + WithTrainingLossesDo(update_training_loss), + Callback(update_means), + WithIterationsDo(update_epochs), +]; + +# The "self-iterating" classifier: + +iterated_clf = IteratedModel( + clf, + controls=controls, + resampling=Holdout(fraction_train=0.7), + measure=log_loss, +) + +# ### Binding the wrapped model to data: + +mach = machine(iterated_clf, images, labels); + + +# ### Training + +fit!(mach, rows=train); + +# ### Comparison of the training and out-of-sample losses: + +plot( + epochs, + losses, + xlab = "epoch", + ylab = "cross entropy", + label="out-of-sample", +) +plot!(epochs, training_losses, label="training") + +savefig(joinpath(tempdir(), "loss.png")) + +# ### Evolution of weights + +n_epochs = length(losses) +n_parameters = div(length(parameter_means), n_epochs) +parameter_means2 = reshape(copy(parameter_means), n_parameters, n_epochs)' +plot( + epochs, + parameter_means2, + title="Flux parameter mean weights", + xlab = "epoch", +) + +# **Note.** The higher the number in the plot legend, the deeper the layer we are +# **weight-averaging. + +savefig(joinpath(tempdir(), "weights.png")) + + +# ### Retrieving a snapshot for a prediction: + +mach2 = machine(joinpath(tempdir(), "mnist3.jls")) +predict_mode(mach2, images[501:503]) + + +# ### Restarting training + +# Mutating `iterated_clf.controls` or `clf.epochs` (which is otherwise +# ignored) will allow you to restart training from where it left off. + +iterated_clf.controls[2] = Patience(4) +fit!(mach, rows=train) + +plot( + epochs, + losses, + xlab = "epoch", + ylab = "cross entropy", + label="out-of-sample", +) +plot!(epochs, training_losses, label="training") diff --git a/dev/extended_examples/MNIST/notebook.unexecuted.ipynb b/dev/extended_examples/MNIST/notebook.unexecuted.ipynb new file mode 100644 index 00000000..f2beaabc --- /dev/null +++ b/dev/extended_examples/MNIST/notebook.unexecuted.ipynb @@ -0,0 +1,732 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Using MLJ to classifiy the MNIST image dataset" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/MNIST)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "const DIR = @__DIR__\n", + "Pkg.activate(DIR)\n", + "Pkg.instantiate()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Julia version** is assumed to be 1.10.*" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ\n", + "using Flux\n", + "import MLJFlux\n", + "import MLUtils\n", + "import MLJIteration # for `skip`" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "If running on a GPU, you will also need to `import CUDA` and `import cuDNN`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "gr(size=(600, 300*(sqrt(5)-1)));" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Basic training" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Downloading the MNIST image dataset:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "import MLDatasets: MNIST\n", + "\n", + "ENV[\"DATADEPS_ALWAYS_ACCEPT\"] = true\n", + "images, labels = MNIST(split=:train)[:];" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "In MLJ, integers cannot be used for encoding categorical data, so we\n", + "must force the labels to have the `Multiclass` [scientific\n", + "type](https://juliaai.github.io/ScientificTypes.jl/dev/). For\n", + "more on this, see [Working with Categorical\n", + "Data](https://alan-turing-institute.github.io/MLJ.jl/dev/working_with_categorical_data/)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "labels = coerce(labels, Multiclass);\n", + "images = coerce(images, GrayImage);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Checking scientific types:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@assert scitype(images) <: AbstractVector{<:Image}\n", + "@assert scitype(labels) <: AbstractVector{<:Finite}" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Looks good." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For general instructions on coercing image data, see [Type coercion\n", + "for image\n", + "data](https://juliaai.github.io/ScientificTypes.jl/dev/#Type-coercion-for-image-data)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "images[1]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We start by defining a suitable `Builder` object. This is a recipe\n", + "for building the neural network. Our builder will work for images of\n", + "any (constant) size, whether they be color or black and white (ie,\n", + "single or multi-channel). The architecture always consists of six\n", + "alternating convolution and max-pool layers, and a final dense\n", + "layer; the filter size and the number of channels after each\n", + "convolution layer is customisable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "import MLJFlux\n", + "struct MyConvBuilder\n", + " filter_size::Int\n", + " channels1::Int\n", + " channels2::Int\n", + " channels3::Int\n", + "end\n", + "\n", + "function MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n", + " k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n", + " mod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n", + " p = div(k - 1, 2) # padding to preserve image size\n", + " init = Flux.glorot_uniform(rng)\n", + " front = Chain(\n", + " Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),\n", + " MaxPool((2, 2)),\n", + " Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),\n", + " MaxPool((2, 2)),\n", + " Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),\n", + " MaxPool((2 ,2)),\n", + " MLUtils.flatten)\n", + " d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n", + " return Chain(front, Dense(d, n_out, init=init))\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Notes.**" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- There is no final `softmax` here, as this is applied by default in all MLJFLux\n", + " classifiers. Customisation of this behaviour is controlled using using the `finaliser`\n", + " hyperparameter of the classifier.\n", + "\n", + "- Instead of calculating the padding `p`, Flux can infer the required padding in each\n", + " dimension, which you enable by replacing `pad = (p, p)` with `pad = SamePad()`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We now define the MLJ model." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ImageClassifier = @load ImageClassifier\n", + "clf = ImageClassifier(\n", + " builder=MyConvBuilder(3, 16, 32, 32),\n", + " batch_size=50,\n", + " epochs=10,\n", + " rng=123,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can add Flux options `optimiser=...` and `loss=...` in the above constructor\n", + "call. At present, `loss` must be a Flux-compatible loss, not an MLJ measure. To run on a\n", + "GPU, add to the constructor `acceleration=CUDALib()` and omit `rng`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For illustration purposes, we won't use all the data here:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "train = 1:500\n", + "test = 501:1000" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Binding the model with data in an MLJ machine:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(clf, images, labels);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Training for 10 epochs on the first 500 images:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "fit!(mach, rows=train, verbosity=2);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Inspecting:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "report(mach)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "chain = fitted_params(mach)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Flux.params(chain)[2]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Adding 20 more epochs:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "clf.epochs = clf.epochs + 20\n", + "fit!(mach, rows=train);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Computing an out-of-sample estimate of the loss:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "predicted_labels = predict(mach, rows=test);\n", + "cross_entropy(predicted_labels, labels[test])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Or to fit and predict, in one line:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "evaluate!(mach,\n", + " resampling=Holdout(fraction_train=0.5),\n", + " measure=cross_entropy,\n", + " rows=1:1000,\n", + " verbosity=0)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Wrapping the MLJFlux model with iteration controls" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Any iterative MLJFlux model can be wrapped in *iteration controls*,\n", + "as we demonstrate next. For more on MLJ's `IteratedModel` wrapper,\n", + "see the [MLJ\n", + "documentation](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The \"self-iterating\" classifier, called `iterated_clf` below, is for\n", + "iterating the image classifier defined above until one of the\n", + "following stopping criterion apply:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `Patience(3)`: 3 consecutive increases in the loss\n", + "- `InvalidValue()`: an out-of-sample loss, or a training loss, is `NaN`, `Inf`, or `-Inf`\n", + "- `TimeLimit(t=5/60)`: training time has exceeded 5 minutes\n", + "\n", + "These checks (and other controls) will be applied every two epochs\n", + "(because of the `Step(2)` control). Additionally, training a\n", + "machine bound to `iterated_clf` will:\n", + "\n", + "- save a snapshot of the machine every three control cycles (every six epochs)\n", + "- record traces of the out-of-sample loss and training losses for plotting\n", + "- record mean value traces of each Flux parameter for plotting" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For a complete list of controls, see [this\n", + "table](https://alan-turing-institute.github.io/MLJ.jl/dev/controlling_iterative_models/#Controls-provided)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Wrapping the classifier" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Some helpers" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To extract Flux params from an MLJFlux machine" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "parameters(mach) = vec.(Flux.params(fitted_params(mach)));" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To store the traces:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "losses = []\n", + "training_losses = []\n", + "parameter_means = Float32[];\n", + "epochs = []" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To update the traces:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "update_loss(loss) = push!(losses, loss)\n", + "update_training_loss(losses) = push!(training_losses, losses[end])\n", + "update_means(mach) = append!(parameter_means, mean.(parameters(mach)));\n", + "update_epochs(epoch) = push!(epochs, epoch)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The controls to apply:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "save_control =\n", + " MLJIteration.skip(Save(joinpath(tempdir(), \"mnist.jls\")), predicate=3)\n", + "\n", + "controls=[\n", + " Step(2),\n", + " Patience(3),\n", + " InvalidValue(),\n", + " TimeLimit(5/60),\n", + " save_control,\n", + " WithLossDo(),\n", + " WithLossDo(update_loss),\n", + " WithTrainingLossesDo(update_training_loss),\n", + " Callback(update_means),\n", + " WithIterationsDo(update_epochs),\n", + "];" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The \"self-iterating\" classifier:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iterated_clf = IteratedModel(\n", + " clf,\n", + " controls=controls,\n", + " resampling=Holdout(fraction_train=0.7),\n", + " measure=log_loss,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Binding the wrapped model to data:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach = machine(iterated_clf, images, labels);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Training" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "fit!(mach, rows=train);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Comparison of the training and out-of-sample losses:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(\n", + " epochs,\n", + " losses,\n", + " xlab = \"epoch\",\n", + " ylab = \"cross entropy\",\n", + " label=\"out-of-sample\",\n", + ")\n", + "plot!(epochs, training_losses, label=\"training\")\n", + "\n", + "savefig(joinpath(tempdir(), \"loss.png\"))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Evolution of weights" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "n_epochs = length(losses)\n", + "n_parameters = div(length(parameter_means), n_epochs)\n", + "parameter_means2 = reshape(copy(parameter_means), n_parameters, n_epochs)'\n", + "plot(\n", + " epochs,\n", + " parameter_means2,\n", + " title=\"Flux parameter mean weights\",\n", + " xlab = \"epoch\",\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "**Note.** The higher the number in the plot legend, the deeper the layer we are\n", + "**weight-averaging." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "savefig(joinpath(tempdir(), \"weights.png\"))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Retrieving a snapshot for a prediction:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mach2 = machine(joinpath(tempdir(), \"mnist3.jls\"))\n", + "predict_mode(mach2, images[501:503])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Restarting training" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Mutating `iterated_clf.controls` or `clf.epochs` (which is otherwise\n", + "ignored) will allow you to restart training from where it left off." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "iterated_clf.controls[2] = Patience(4)\n", + "fit!(mach, rows=train)\n", + "\n", + "plot(\n", + " epochs,\n", + " losses,\n", + " xlab = \"epoch\",\n", + " ylab = \"cross entropy\",\n", + " label=\"out-of-sample\",\n", + ")\n", + "plot!(epochs, training_losses, label=\"training\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/extended_examples/MNIST/notebook/0ad85449.svg b/dev/extended_examples/MNIST/notebook/0ad85449.svg new file mode 100644 index 00000000..46fc54ac --- /dev/null +++ b/dev/extended_examples/MNIST/notebook/0ad85449.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/extended_examples/MNIST/notebook/78034c1f.svg b/dev/extended_examples/MNIST/notebook/78034c1f.svg new file mode 100644 index 00000000..1a32b1b2 --- /dev/null +++ b/dev/extended_examples/MNIST/notebook/78034c1f.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/extended_examples/MNIST/notebook/c099548a.svg b/dev/extended_examples/MNIST/notebook/c099548a.svg new file mode 100644 index 00000000..94fb991f --- /dev/null +++ b/dev/extended_examples/MNIST/notebook/c099548a.svg @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/extended_examples/MNIST/notebook/index.html b/dev/extended_examples/MNIST/notebook/index.html new file mode 100644 index 00000000..aa9b0589 --- /dev/null +++ b/dev/extended_examples/MNIST/notebook/index.html @@ -0,0 +1,200 @@ + +MNIST Images · MLJFlux

Using MLJ to classifiy the MNIST image dataset

This tutorial is available as a Jupyter notebook or julia script here.

Julia version is assumed to be 1.10.*

using MLJ
+using Flux
+import MLJFlux
+import MLUtils
+import MLJIteration # for `skip`

If running on a GPU, you will also need to import CUDA and import cuDNN.

using Plots
+gr(size=(600, 300*(sqrt(5)-1)));

Basic training

Downloading the MNIST image dataset:

import MLDatasets: MNIST
+
+ENV["DATADEPS_ALWAYS_ACCEPT"] = true
+images, labels = MNIST(split=:train)[:];

In MLJ, integers cannot be used for encoding categorical data, so we must force the labels to have the Multiclass scientific type. For more on this, see Working with Categorical Data.

labels = coerce(labels, Multiclass);
+images = coerce(images, GrayImage);

Checking scientific types:

@assert scitype(images) <: AbstractVector{<:Image}
+@assert scitype(labels) <: AbstractVector{<:Finite}

Looks good.

For general instructions on coercing image data, see Type coercion for image data

images[1]
Example block output

We start by defining a suitable Builder object. This is a recipe for building the neural network. Our builder will work for images of any (constant) size, whether they be color or black and white (ie, single or multi-channel). The architecture always consists of six alternating convolution and max-pool layers, and a final dense layer; the filter size and the number of channels after each convolution layer is customisable.

import MLJFlux
+struct MyConvBuilder
+    filter_size::Int
+    channels1::Int
+    channels2::Int
+    channels3::Int
+end
+
+function MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)
+    k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3
+    mod(k, 2) == 1 || error("`filter_size` must be odd. ")
+    p = div(k - 1, 2) # padding to preserve image size
+    init = Flux.glorot_uniform(rng)
+    front = Chain(
+        Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),
+        MaxPool((2, 2)),
+        Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),
+        MaxPool((2, 2)),
+        Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),
+        MaxPool((2 ,2)),
+        MLUtils.flatten)
+    d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first
+    return Chain(front, Dense(d, n_out, init=init))
+end

Notes.

  • There is no final softmax here, as this is applied by default in all MLJFLux classifiers. Customisation of this behaviour is controlled using using the finaliser hyperparameter of the classifier.

  • Instead of calculating the padding p, Flux can infer the required padding in each dimension, which you enable by replacing pad = (p, p) with pad = SamePad().

We now define the MLJ model.

ImageClassifier = @load ImageClassifier
+clf = ImageClassifier(
+    builder=MyConvBuilder(3, 16, 32, 32),
+    batch_size=50,
+    epochs=10,
+    rng=123,
+)
ImageClassifier(
+  builder = Main.MyConvBuilder(3, 16, 32, 32), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.001, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 50, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = 123, 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))

You can add Flux options optimiser=... and loss=... in the above constructor call. At present, loss must be a Flux-compatible loss, not an MLJ measure. To run on a GPU, add to the constructor acceleration=CUDALib() and omit rng.

For illustration purposes, we won't use all the data here:

train = 1:500
+test = 501:1000
501:1000

Binding the model with data in an MLJ machine:

mach = machine(clf, images, labels);

Training for 10 epochs on the first 500 images:

fit!(mach, rows=train, verbosity=2);
[ Info: Training machine(ImageClassifier(builder = Main.MyConvBuilder(3, 16, 32, 32), …), …).
+[ Info: Loss is 2.28
+[ Info: Loss is 2.171
+[ Info: Loss is 1.942
+[ Info: Loss is 1.505
+[ Info: Loss is 0.9922
+[ Info: Loss is 0.6912
+[ Info: Loss is 0.5584
+[ Info: Loss is 0.4542
+[ Info: Loss is 0.3809
+[ Info: Loss is 0.3272

Inspecting:

report(mach)
(training_losses = Float32[2.3174262, 2.280439, 2.1711705, 1.9420795, 1.5045885, 0.99224484, 0.69117606, 0.5583703, 0.45424515, 0.38085267, 0.3271538],)
chain = fitted_params(mach)
(chain = Chain(Chain(Chain(Conv((3, 3), 1 => 16, relu, pad=1), MaxPool((2, 2)), Conv((3, 3), 16 => 32, relu, pad=1), MaxPool((2, 2)), Conv((3, 3), 32 => 32, relu, pad=1), MaxPool((2, 2)), flatten), Dense(288 => 10)), softmax),)
Flux.params(chain)[2]
16-element Vector{Float32}:
+ 0.003225543
+ 0.019304937
+ 0.062040687
+ 0.024518687
+ 0.05317823
+ 0.069572166
+ 0.044410173
+ 0.024950704
+ 0.015806748
+ 0.015081032
+ 0.017513964
+ 0.02133927
+ 0.040562775
+ 0.0018777152
+ 0.055122323
+ 0.057923194

Adding 20 more epochs:

clf.epochs = clf.epochs + 20
+fit!(mach, rows=train);
[ Info: Updating machine(ImageClassifier(builder = Main.MyConvBuilder(3, 16, 32, 32), …), …).
+
Optimising neural net:  10%[==>                      ]  ETA: 0:00:07
Optimising neural net:  14%[===>                     ]  ETA: 0:00:08
Optimising neural net:  19%[====>                    ]  ETA: 0:00:08
Optimising neural net:  24%[=====>                   ]  ETA: 0:00:08
Optimising neural net:  29%[=======>                 ]  ETA: 0:00:07
Optimising neural net:  33%[========>                ]  ETA: 0:00:07
Optimising neural net:  38%[=========>               ]  ETA: 0:00:07
Optimising neural net:  43%[==========>              ]  ETA: 0:00:06
Optimising neural net:  48%[===========>             ]  ETA: 0:00:05
Optimising neural net:  52%[=============>           ]  ETA: 0:00:05
Optimising neural net:  57%[==============>          ]  ETA: 0:00:04
Optimising neural net:  62%[===============>         ]  ETA: 0:00:04
Optimising neural net:  67%[================>        ]  ETA: 0:00:04
Optimising neural net:  71%[=================>       ]  ETA: 0:00:03
Optimising neural net:  76%[===================>     ]  ETA: 0:00:03
Optimising neural net:  81%[====================>    ]  ETA: 0:00:02
Optimising neural net:  86%[=====================>   ]  ETA: 0:00:02
Optimising neural net:  90%[======================>  ]  ETA: 0:00:01
Optimising neural net:  95%[=======================> ]  ETA: 0:00:01
Optimising neural net: 100%[=========================] Time: 0:00:10

Computing an out-of-sample estimate of the loss:

predicted_labels = predict(mach, rows=test);
+cross_entropy(predicted_labels, labels[test])
0.4883231265583621

Or to fit and predict, in one line:

evaluate!(mach,
+          resampling=Holdout(fraction_train=0.5),
+          measure=cross_entropy,
+          rows=1:1000,
+          verbosity=0)
PerformanceEvaluation object with these fields:
+  model, measure, operation,
+  measurement, per_fold, per_observation,
+  fitted_params_per_fold, report_per_fold,
+  train_test_rows, resampling, repeats
+Extract:
+┌──────────────────────┬───────────┬─────────────┐
+│ measure              │ operation │ measurement │
+├──────────────────────┼───────────┼─────────────┤
+│ LogLoss(             │ predict   │ 0.488       │
+│   tol = 2.22045e-16) │           │             │
+└──────────────────────┴───────────┴─────────────┘
+

Wrapping the MLJFlux model with iteration controls

Any iterative MLJFlux model can be wrapped in iteration controls, as we demonstrate next. For more on MLJ's IteratedModel wrapper, see the MLJ documentation.

The "self-iterating" classifier, called iterated_clf below, is for iterating the image classifier defined above until one of the following stopping criterion apply:

  • Patience(3): 3 consecutive increases in the loss
  • InvalidValue(): an out-of-sample loss, or a training loss, is NaN, Inf, or -Inf
  • TimeLimit(t=5/60): training time has exceeded 5 minutes

These checks (and other controls) will be applied every two epochs (because of the Step(2) control). Additionally, training a machine bound to iterated_clf will:

  • save a snapshot of the machine every three control cycles (every six epochs)
  • record traces of the out-of-sample loss and training losses for plotting
  • record mean value traces of each Flux parameter for plotting

For a complete list of controls, see this table.

Wrapping the classifier

Some helpers

To extract Flux params from an MLJFlux machine

parameters(mach) = vec.(Flux.params(fitted_params(mach)));

To store the traces:

losses = []
+training_losses = []
+parameter_means = Float32[];
+epochs = []
Any[]

To update the traces:

update_loss(loss) = push!(losses, loss)
+update_training_loss(losses) = push!(training_losses, losses[end])
+update_means(mach) = append!(parameter_means, mean.(parameters(mach)));
+update_epochs(epoch) = push!(epochs, epoch)
update_epochs (generic function with 1 method)

The controls to apply:

save_control =
+    MLJIteration.skip(Save(joinpath(tempdir(), "mnist.jls")), predicate=3)
+
+controls=[
+    Step(2),
+    Patience(3),
+    InvalidValue(),
+    TimeLimit(5/60),
+    save_control,
+    WithLossDo(),
+    WithLossDo(update_loss),
+    WithTrainingLossesDo(update_training_loss),
+    Callback(update_means),
+    WithIterationsDo(update_epochs),
+];

The "self-iterating" classifier:

iterated_clf = IteratedModel(
+    clf,
+    controls=controls,
+    resampling=Holdout(fraction_train=0.7),
+    measure=log_loss,
+)
ProbabilisticIteratedModel(
+  model = ImageClassifier(
+        builder = Main.MyConvBuilder(3, 16, 32, 32), 
+        finaliser = NNlib.softmax, 
+        optimiser = Adam(0.001, (0.9, 0.999), 1.0e-8), 
+        loss = Flux.Losses.crossentropy, 
+        epochs = 30, 
+        batch_size = 50, 
+        lambda = 0.0, 
+        alpha = 0.0, 
+        rng = 123, 
+        optimiser_changes_trigger_retraining = false, 
+        acceleration = CPU1{Nothing}(nothing)), 
+  controls = Any[IterationControl.Step(2), EarlyStopping.Patience(3), EarlyStopping.InvalidValue(), EarlyStopping.TimeLimit(Dates.Millisecond(300000)), IterationControl.Skip{MLJIteration.Save{typeof(Serialization.serialize)}, IterationControl.var"#8#9"{Int64}}(MLJIteration.Save{typeof(Serialization.serialize)}("/tmp/mnist.jls", Serialization.serialize), IterationControl.var"#8#9"{Int64}(3)), IterationControl.WithLossDo{IterationControl.var"#20#22"}(IterationControl.var"#20#22"(), false, nothing), IterationControl.WithLossDo{typeof(Main.update_loss)}(Main.update_loss, false, nothing), IterationControl.WithTrainingLossesDo{typeof(Main.update_training_loss)}(Main.update_training_loss, false, nothing), IterationControl.Callback{typeof(Main.update_means)}(Main.update_means, false, nothing, false), MLJIteration.WithIterationsDo{typeof(Main.update_epochs)}(Main.update_epochs, false, nothing)], 
+  resampling = Holdout(
+        fraction_train = 0.7, 
+        shuffle = false, 
+        rng = Random._GLOBAL_RNG()), 
+  measure = LogLoss(tol = 2.22045e-16), 
+  weights = nothing, 
+  class_weights = nothing, 
+  operation = MLJModelInterface.predict, 
+  retrain = false, 
+  check_measure = true, 
+  iteration_parameter = nothing, 
+  cache = true)

Binding the wrapped model to data:

mach = machine(iterated_clf, images, labels);

Training

fit!(mach, rows=train);
[ Info: Training machine(ProbabilisticIteratedModel(model = ImageClassifier(builder = Main.MyConvBuilder(3, 16, 32, 32), …), …), …).
+[ Info: No iteration parameter specified. Using `iteration_parameter=:(epochs)`.
+[ Info: loss: 2.195050130190149
+[ Info: loss: 1.8450074691283658
+[ Info: Saving "/tmp/mnist1.jls".
+[ Info: loss: 1.1388123685158849
+[ Info: loss: 0.702997545486733
+[ Info: loss: 0.5778269559910739
+[ Info: Saving "/tmp/mnist2.jls".
+[ Info: loss: 0.5222495075757826
+[ Info: loss: 0.49847208228951995
+[ Info: loss: 0.4897800580510804
+[ Info: Saving "/tmp/mnist3.jls".
+[ Info: loss: 0.4893840844808948
+[ Info: loss: 0.49094569068535143
+[ Info: loss: 0.49593260647952264
+[ Info: Saving "/tmp/mnist4.jls".
+[ Info: loss: 0.5062357308150314
+[ Info: final loss: 0.5062357308150314
+[ Info: final training loss: 0.059303638
+[ Info: Stop triggered by EarlyStopping.Patience(3) stopping criterion.
+[ Info: Total of 24 iterations.

Comparison of the training and out-of-sample losses:

plot(
+    epochs,
+    losses,
+    xlab = "epoch",
+    ylab = "cross entropy",
+    label="out-of-sample",
+)
+plot!(epochs, training_losses, label="training")
+
+savefig(joinpath(tempdir(), "loss.png"))
"/tmp/loss.png"

Evolution of weights

n_epochs =  length(losses)
+n_parameters = div(length(parameter_means), n_epochs)
+parameter_means2 = reshape(copy(parameter_means), n_parameters, n_epochs)'
+plot(
+    epochs,
+    parameter_means2,
+    title="Flux parameter mean weights",
+    xlab = "epoch",
+)
Example block output

Note. The higher the number in the plot legend, the deeper the layer we are **weight-averaging.

savefig(joinpath(tempdir(), "weights.png"))
"/tmp/weights.png"

Retrieving a snapshot for a prediction:

mach2 = machine(joinpath(tempdir(), "mnist3.jls"))
+predict_mode(mach2, images[501:503])
3-element CategoricalArrays.CategoricalArray{Int64,1,UInt32}:
+ 7
+ 9
+ 5

Restarting training

Mutating iterated_clf.controls or clf.epochs (which is otherwise ignored) will allow you to restart training from where it left off.

iterated_clf.controls[2] = Patience(4)
+fit!(mach, rows=train)
+
+plot(
+    epochs,
+    losses,
+    xlab = "epoch",
+    ylab = "cross entropy",
+    label="out-of-sample",
+)
+plot!(epochs, training_losses, label="training")
Example block output

This page was generated using Literate.jl.

diff --git a/dev/extended_examples/MNIST/weights.png b/dev/extended_examples/MNIST/weights.png new file mode 100644 index 0000000000000000000000000000000000000000..df1fb43d8e1579391f86cf5347eb05b68d2697a5 GIT binary patch literal 35741 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

Mh=1rLYuxi&YxOe#Sr78u-mo2smw`*~5wQ=>oMB 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

k);Xw70X%n!N=+kB^hCyn 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 +Contents · MLJFlux

Contents

filedescription
notebook.ipynbJuptyer notebook (executed)
notebook.unexecuted.ipynbJupyter notebook (unexecuted)
notebook.mdstatic markdown (included in MLJFlux.jl docs)
notebook.jlexecutable Julia script annotated with comments
generate.jlmaintainers only: execute to generate first 3 from 4th

Important

Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.

diff --git a/dev/extended_examples/spam_detection/generate.jl b/dev/extended_examples/spam_detection/generate.jl new file mode 100644 index 00000000..0f122402 --- /dev/null +++ b/dev/extended_examples/spam_detection/generate.jl @@ -0,0 +1,4 @@ +# Execute this julia file to generate the notebooks from ../notebook.jl + +joinpath(@__DIR__, "..", "..", "generate.jl") |> include +generate(@__DIR__, execute=true, pluto=false) diff --git a/dev/full tutorials/Spam Detection with RNNs/SMS.ipynb b/dev/extended_examples/spam_detection/notebook.ipynb similarity index 57% rename from dev/full tutorials/Spam Detection with RNNs/SMS.ipynb rename to dev/extended_examples/spam_detection/notebook.ipynb index 3d265f1e..eed3ba38 100644 --- a/dev/full tutorials/Spam Detection with RNNs/SMS.ipynb +++ b/dev/extended_examples/spam_detection/notebook.ipynb @@ -10,10 +10,50 @@ { "cell_type": "markdown", "source": [ - "In this tutorial we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the [SMS Collection Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) from Kaggle." + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/spam_detection)." ], "metadata": {} }, + { + "cell_type": "markdown", + "source": [ + "In this demo we use a custom RNN model from Flux with MLJFlux to classify text\n", + "messages as spam or ham. We will be using the [SMS Collection\n", + "Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) from Kaggle." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Warning.** This demo includes some non-idiomatic use of MLJ to allow use of the\n", + "Flux.jl `Embedding` layer. It is not recommended for MLJ beginners." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/GoogleDrive/Julia/MLJ/MLJFlux/docs/src/extended_examples/spam_detection`\n", + "┌ Warning: The project dependencies or compat requirements have changed since the manifest was last resolved.\n", + "│ It is recommended to `Pkg.resolve()` or consider `Pkg.update()` if necessary.\n", + "└ @ Pkg.API /Applications/Julia-1.10.app/Contents/Resources/julia/share/julia/stdlib/v1.10/Pkg/src/API.jl:1807\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": 1 + }, { "cell_type": "markdown", "source": [ @@ -28,14 +68,14 @@ "using MLJ\n", "using MLJFlux\n", "using Flux\n", + "import Optimisers # Flux.jl native optimisers no longer supported\n", "using CSV # Read data\n", "using DataFrames # Read data\n", - "using ScientificTypes # Type coercion\n", "using WordTokenizers # For tokenization\n", "using Languages # For stop words" ], "metadata": {}, - "execution_count": 1 + "execution_count": 2 }, { "cell_type": "markdown", @@ -44,14 +84,23 @@ ], "metadata": {} }, + { + "cell_type": "markdown", + "source": [ + "We assume the [SMS Collection\n", + "Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) has been\n", + "downloaded and is in a file called \"sms.csv\" in the same directory as the this script." + ], + "metadata": {} + }, { "outputs": [], "cell_type": "code", "source": [ - "df = CSV.read(\"./sms.csv\", DataFrame);" + "df = CSV.read(joinpath(@__DIR__, \"sms.csv\"), DataFrame);" ], "metadata": {}, - "execution_count": 2 + "execution_count": 3 }, { "cell_type": "markdown", @@ -63,29 +112,23 @@ { "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "┌──────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n", - "│ Category │ Message │\n", - "│ String7 │ String │\n", - "│ Textual │ Textual │\n", - "├──────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤\n", - "│ ham │ Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat... │\n", - "│ ham │ Ok lar... Joking wif u oni... │\n", - "│ spam │ Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's │\n", - "│ ham │ U dun say so early hor... U c already then say... │\n", - "│ ham │ Nah I don't think he goes to usf, he lives around here though │\n", - "└──────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘\n" - ] + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[1m5×2 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m Category \u001b[0m\u001b[1m Message \u001b[0m\n │\u001b[90m String7 \u001b[0m\u001b[90m String \u001b[0m\n─────┼─────────────────────────────────────────────\n 1 │ ham Go until jurong point, crazy.. A…\n 2 │ ham Ok lar... Joking wif u oni...\n 3 │ spam Free entry in 2 a wkly comp to w…\n 4 │ ham U dun say so early hor... U c al…\n 5 │ ham Nah I don't think he goes to usf…", + "text/html": [ + "
5×2 DataFrame
RowCategoryMessage
String7String
1hamGo until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...
2hamOk lar... Joking wif u oni...
3spamFree entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's
4hamU dun say so early hor... U c already then say...
5hamNah I don't think he goes to usf, he lives around here though
" + ] + }, + "metadata": {}, + "execution_count": 4 } ], "cell_type": "code", "source": [ - "first(df, 5) |> pretty" + "first(df, 5)" ], "metadata": {}, - "execution_count": 3 + "execution_count": 4 }, { "cell_type": "markdown", @@ -99,7 +142,8 @@ { "cell_type": "markdown", "source": [ - "- Remove stop words (i.e., words that are not useful for the analysis, like \"the\", \"a\", etc.)" + "- Remove stop words (i.e., words that are not useful for the analysis, like \"the\", \"a\",\n", + " etc.)" ], "metadata": {} }, @@ -118,36 +162,41 @@ "text/plain": "preprocess_text (generic function with 1 method)" }, "metadata": {}, - "execution_count": 4 + "execution_count": 5 } ], "cell_type": "code", "source": [ + "const STOP_WORDS = Languages.stopwords(Languages.English())\n", + "\n", "function preprocess_text(text)\n", - "\t# (1) Splitting texts into words (so later it can be a sequence of vectors)\n", - "\ttokens = WordTokenizers.tokenize(text)\n", + " # (1) Splitting texts into words (so later it can be a sequence of vectors)\n", + " tokens = WordTokenizers.tokenize(text)\n", "\n", - "\t# (2) Stop word removal\n", - "\tstop_words = Languages.stopwords(Languages.English())\n", - "\tfiltered_tokens = filter(token -> !(token in stop_words), tokens)\n", + " # (2) Stop word removal\n", + " filtered_tokens = filter(token -> !(token in STOP_WORDS), tokens)\n", "\n", - "\treturn filtered_tokens\n", + " return filtered_tokens\n", "end" ], "metadata": {}, - "execution_count": 4 + "execution_count": 5 }, { "cell_type": "markdown", "source": [ - "Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors)." + "Define the vocabulary to be the set of all words in our training set. We also need a\n", + "function that would map each word in a given sequence of words into its index in the\n", + "dictionary (which is equivalent to representing the words as one-hot vectors)." ], "metadata": {} }, { "cell_type": "markdown", "source": [ - "Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and:" + "Now after we do this the sequences will all be numerical vectors but they will be of\n", + "unequal length. Thus, to facilitate batching of data for the deep learning model, we\n", + "need to decide on a specific maximum length for all sequences and:" ], "metadata": {} }, @@ -168,7 +217,8 @@ { "cell_type": "markdown", "source": [ - "Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token." + "Lastly, we must also handle the case that an incoming text sequence may involve words\n", + "never seen in training by represent all such out-of-vocabulary words with a new token." ], "metadata": {} }, @@ -187,26 +237,26 @@ "text/plain": "encode_and_equalize (generic function with 1 method)" }, "metadata": {}, - "execution_count": 5 + "execution_count": 6 } ], "cell_type": "code", "source": [ "function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)\n", - "\t# (1) encode using the vocabulary\n", - "\ttext_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]\n", + " # (1) encode using the vocabulary\n", + " text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]\n", "\n", - "\t# (2) truncate sequence if > max_length\n", - "\tlength(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])\n", + " # (2) truncate sequence if > max_length\n", + " length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])\n", "\n", - "\t# (3) pad with pad_val\n", - "\ttext_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))\n", + " # (3) pad with pad_val\n", + " text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))\n", "\n", - "\treturn text_seq_inds\n", + " return text_seq_inds\n", "end" ], "metadata": {}, - "execution_count": 5 + "execution_count": 6 }, { "cell_type": "markdown", @@ -223,13 +273,16 @@ "x_data, y_data = unpack(df, ==(:Message), ==(:Category))\n", "y_data = coerce(y_data, Multiclass);\n", "\n", - "(x_train, x_val), (y_train, y_val) = partition((x_data, y_data), 0.8,\n", - "\tmulti = true,\n", - "\tshuffle = true,\n", - "\trng = 42);" + "(x_train, x_val), (y_train, y_val) = partition(\n", + " (x_data, y_data),\n", + " 0.8,\n", + " multi = true,\n", + " shuffle = true,\n", + " rng = 42,\n", + ");" ], "metadata": {}, - "execution_count": 6 + "execution_count": 7 }, { "cell_type": "markdown", @@ -246,7 +299,7 @@ "x_val_processed = [preprocess_text(text) for text in x_val];" ], "metadata": {}, - "execution_count": 7 + "execution_count": 8 }, { "cell_type": "markdown", @@ -270,7 +323,7 @@ "println(x_train_processed[1], \" is \", y_data[1])" ], "metadata": {}, - "execution_count": 8 + "execution_count": 9 }, { "cell_type": "markdown", @@ -287,7 +340,7 @@ "text/plain": "12" }, "metadata": {}, - "execution_count": 9 + "execution_count": 10 } ], "cell_type": "code", @@ -299,7 +352,7 @@ "max_length = 12 # can choose this more smartly if you wish" ], "metadata": {}, - "execution_count": 9 + "execution_count": 10 }, { "cell_type": "markdown", @@ -316,23 +369,23 @@ "text/plain": "5-element Vector{Vector{Int64}}:\n [1, 2, 3, 4, 5, 10404, 10404, 10404, 10404, 10404, 10404, 10404]\n [6, 7, 8, 9, 10, 11, 12, 13, 11, 14, 15, 16]\n [36, 37, 38, 39, 36, 40, 41, 42, 10404, 10404, 10404, 10404]\n [43, 24, 36, 44, 45, 46, 10404, 10404, 10404, 10404, 10404, 10404]\n [43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 44, 45]" }, "metadata": {}, - "execution_count": 10 + "execution_count": 11 } ], "cell_type": "code", "source": [ "x_train_processed_equalized = [\n", - "\tencode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", - "\tseq in x_train_processed\n", - "]\n", + " encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", + " seq in x_train_processed\n", + " ]\n", "x_val_processed_equalized = [\n", - "\tencode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", - "\tseq in x_val_processed\n", - "]\n", - "x_train_processed_equalized[1:5] # all sequences are encoded and of the same length" + " encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", + " seq in x_val_processed\n", + " ]\n", + "x_train_processed_equalized[1:5] # all sequences are encoded and of the same length" ], "metadata": {}, - "execution_count": 10 + "execution_count": 11 }, { "cell_type": "markdown", @@ -349,7 +402,7 @@ "text/plain": "(4458, 12)" }, "metadata": {}, - "execution_count": 11 + "execution_count": 12 } ], "cell_type": "code", @@ -360,7 +413,7 @@ "size(x_train_processed_equalized_fixed)" ], "metadata": {}, - "execution_count": 11 + "execution_count": 12 }, { "cell_type": "markdown", @@ -372,7 +425,8 @@ { "cell_type": "markdown", "source": [ - "For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification." + "For the model, we will use a RNN from Flux. We will average the hidden states\n", + "corresponding to any sequence then pass that to a dense layer for classification." ], "metadata": {} }, @@ -392,12 +446,13 @@ "(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]" ], "metadata": {}, - "execution_count": 12 + "execution_count": 13 }, { "cell_type": "markdown", "source": [ - "For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integets but the MLJFlux model expects floats:" + "For compatibility, we will also define a layer that simply casts the input to integers\n", + "as the embedding layer in Flux expects integers but the MLJFlux model expects floats:" ], "metadata": {} }, @@ -410,12 +465,12 @@ "(m::Intify)(x) = Int.(x)" ], "metadata": {}, - "execution_count": 13 + "execution_count": 14 }, { "cell_type": "markdown", "source": [ - "Here we define out network:" + "Here we define our network:" ], "metadata": {} }, @@ -427,28 +482,31 @@ "text/plain": "GenericBuilder(apply = #15)\n" }, "metadata": {}, - "execution_count": 14 + "execution_count": 15 } ], "cell_type": "code", "source": [ "builder = MLJFlux.@builder begin\n", - "\tChain(\n", - "\t\tIntify(), # Cast input to integer\n", - "\t\tEmbedding(vocab_size + 2 => 300), # Embedding layer\n", - "\t\tRNN(300, 50, tanh), # RNN layer\n", - "\t\tMean(), # Mean pooling layer\n", - "\t\tDense(50, 2) # Classification dense layer\n", - "\t)\n", + " Chain(\n", + " Intify(), # Cast input to integer\n", + " Embedding(vocab_size + 2 => 300), # Embedding layer\n", + " RNN(300, 50, tanh), # RNN layer\n", + " Mean(), # Mean pooling layer\n", + " Dense(50, 2), # Classification dense layer\n", + " )\n", "end" ], "metadata": {}, - "execution_count": 14 + "execution_count": 15 }, { "cell_type": "markdown", "source": [ - "Notice that we used an embedding layer with input dimensionality `vocab_size + 2` to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here)." + "Notice that we used an embedding layer with input dimensionality `vocab_size + 2` to\n", + "take into account the padding and out-of-vocabulary tokens. Recall that the indices in\n", + "our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to\n", + "map them into meaningful dense vectors (of dimensionality 300 here)." ], "metadata": {} }, @@ -472,24 +530,24 @@ { "output_type": "execute_result", "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = GenericBuilder(\n apply = Main.var\"##500\".var\"#15#16\"()), \n finaliser = NNlib.softmax, \n optimiser = Flux.Optimise.Adam(0.1, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 128, \n lambda = 0.0, \n alpha = 0.0, \n rng = Random._GLOBAL_RNG(), \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))" + "text/plain": "NeuralNetworkClassifier(\n builder = GenericBuilder(\n apply = Main.var\"##1022\".var\"#15#16\"()), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.1, (0.9, 0.999), 1.0e-8), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 128, \n lambda = 0.0, \n alpha = 0.0, \n rng = Random.TaskLocalRNG(), \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" }, "metadata": {}, - "execution_count": 15 + "execution_count": 16 } ], "cell_type": "code", "source": [ "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux\n", "clf = NeuralNetworkClassifier(\n", - "\tbuilder = builder,\n", - "\toptimiser = Flux.ADAM(0.1),\n", - "\tbatch_size = 128,\n", - "\tepochs = 10,\n", + " builder = builder,\n", + " optimiser = Optimisers.Adam(0.1),\n", + " batch_size = 128,\n", + " epochs = 10,\n", ")" ], "metadata": {}, - "execution_count": 15 + "execution_count": 16 }, { "cell_type": "markdown", @@ -503,10 +561,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "untrained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @402 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @501 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n" + "text/plain": "untrained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @796 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @667 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n" }, "metadata": {}, - "execution_count": 16 + "execution_count": 17 } ], "cell_type": "code", @@ -515,7 +573,7 @@ "mach = machine(clf, x_train_processed_equalized_fixed, y_train)" ], "metadata": {}, - "execution_count": 16 + "execution_count": 17 }, { "cell_type": "markdown", @@ -531,16 +589,16 @@ "output_type": "stream", "text": [ "[ Info: Training machine(NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …), …).\n", - "\rOptimising neural net: 18%[====> ] ETA: 0:00:12\u001b[K\rOptimising neural net: 27%[======> ] ETA: 0:00:10\u001b[K\rOptimising neural net: 36%[=========> ] ETA: 0:00:09\u001b[K\rOptimising neural net: 45%[===========> ] ETA: 0:00:07\u001b[K\rOptimising neural net: 55%[=============> ] ETA: 0:00:06\u001b[K\rOptimising neural net: 64%[===============> ] ETA: 0:00:05\u001b[K\rOptimising neural net: 73%[==================> ] ETA: 0:00:04\u001b[K\rOptimising neural net: 82%[====================> ] ETA: 0:00:02\u001b[K\rOptimising neural net: 91%[======================> ] ETA: 0:00:01\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:12\u001b[K\n" + "\rOptimising neural net: 18%[====> ] ETA: 0:00:13\u001b[K\rOptimising neural net: 27%[======> ] ETA: 0:00:13\u001b[K\rOptimising neural net: 36%[=========> ] ETA: 0:00:12\u001b[K\rOptimising neural net: 45%[===========> ] ETA: 0:00:11\u001b[K\rOptimising neural net: 55%[=============> ] ETA: 0:00:09\u001b[K\rOptimising neural net: 64%[===============> ] ETA: 0:00:07\u001b[K\rOptimising neural net: 73%[==================> ] ETA: 0:00:05\u001b[K\rOptimising neural net: 82%[====================> ] ETA: 0:00:04\u001b[K\rOptimising neural net: 91%[======================> ] ETA: 0:00:02\u001b[K\rOptimising neural net: 100%[=========================] Time: 0:00:19\u001b[K\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "trained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @402 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @501 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n" + "text/plain": "trained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @796 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @667 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n" }, "metadata": {}, - "execution_count": 17 + "execution_count": 18 } ], "cell_type": "code", @@ -548,7 +606,7 @@ "fit!(mach)" ], "metadata": {}, - "execution_count": 17 + "execution_count": 18 }, { "cell_type": "markdown", @@ -562,10 +620,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "0.9370418555201171" + "text/plain": "0.9468762240501374" }, "metadata": {}, - "execution_count": 18 + "execution_count": 19 } ], "cell_type": "code", @@ -574,7 +632,7 @@ "balanced_accuracy(ŷ, y_val)" ], "metadata": {}, - "execution_count": 18 + "execution_count": 19 }, { "cell_type": "markdown", @@ -601,7 +659,7 @@ "z = rand(x_val)\n", "z_processed = preprocess_text(z)\n", "z_encoded_equalized =\n", - "\tencode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)\n", + " encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)\n", "z_encoded_equalized_fixed = matrixify([z_encoded_equalized])\n", "z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)\n", "z_pred = predict_mode(mach, z_encoded_equalized_fixed)\n", @@ -609,7 +667,7 @@ "print(\"SMS: `$(z)` and the prediction is `$(z_pred)`\")" ], "metadata": {}, - "execution_count": 19 + "execution_count": 20 }, { "cell_type": "markdown", @@ -627,11 +685,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.0" + "version": "1.10.3" }, "kernelspec": { "name": "julia-1.10", - "display_name": "Julia 1.10.0", + "display_name": "Julia 1.10.3", "language": "julia" } }, diff --git a/dev/extended_examples/spam_detection/notebook.jl b/dev/extended_examples/spam_detection/notebook.jl new file mode 100644 index 00000000..3d712ebf --- /dev/null +++ b/dev/extended_examples/spam_detection/notebook.jl @@ -0,0 +1,202 @@ +# # SMS Spam Detection with RNNs + +# This demonstration is available as a Jupyter notebook or julia script +# [here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/spam_detection). + +# In this demo we use a custom RNN model from Flux with MLJFlux to classify text +# messages as spam or ham. We will be using the [SMS Collection +# Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) from Kaggle. + +# **Warning.** This demo includes some non-idiomatic use of MLJ to allow use of the +# Flux.jl `Embedding` layer. It is not recommended for MLJ beginners. + +using Pkg #!md +Pkg.activate(@__DIR__); #!md +Pkg.instantiate(); #!md + +# ### Basic Imports +using MLJ +using MLJFlux +using Flux +import Optimisers # Flux.jl native optimisers no longer supported +using CSV # Read data +using DataFrames # Read data +using WordTokenizers # For tokenization +using Languages # For stop words + + +# ### Reading Data + +# We assume the [SMS Collection +# Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) has been +# downloaded and is in a file called "sms.csv" in the same directory as the this script. +df = CSV.read(joinpath(@__DIR__, "sms.csv"), DataFrame); + +# Display the first 5 rows with DataFrames +first(df, 5) + + +# ### Text Preprocessing +# Let's define a function that given an SMS message would: +# - Tokenize it (i.e., convert it into a vector of words) + +# - Remove stop words (i.e., words that are not useful for the analysis, like "the", "a", +# etc.) + +# - Return the filtered vector of words + +const STOP_WORDS = Languages.stopwords(Languages.English()) + +function preprocess_text(text) + ## (1) Splitting texts into words (so later it can be a sequence of vectors) + tokens = WordTokenizers.tokenize(text) + + ## (2) Stop word removal + filtered_tokens = filter(token -> !(token in STOP_WORDS), tokens) + + return filtered_tokens +end + +# Define the vocabulary to be the set of all words in our training set. We also need a +# function that would map each word in a given sequence of words into its index in the +# dictionary (which is equivalent to representing the words as one-hot vectors). + +# Now after we do this the sequences will all be numerical vectors but they will be of +# unequal length. Thus, to facilitate batching of data for the deep learning model, we +# need to decide on a specific maximum length for all sequences and: + +# - If a sequence is longer than the maximum length, we need to truncate it + +# - If a sequence is shorter than the maximum length, we need to pad it with a new token + +# Lastly, we must also handle the case that an incoming text sequence may involve words +# never seen in training by represent all such out-of-vocabulary words with a new token. + +# We will define a function that would do this for us. + +function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val) + ## (1) encode using the vocabulary + text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq] + + ## (2) truncate sequence if > max_length + length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length]) + + ## (3) pad with pad_val + text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds))) + + return text_seq_inds +end + +# ### Preparing Data +# Splitting the data +x_data, y_data = unpack(df, ==(:Message), ==(:Category)) +y_data = coerce(y_data, Multiclass); + +(x_train, x_val), (y_train, y_val) = partition( + (x_data, y_data), + 0.8, + multi = true, + shuffle = true, + rng = 42, +); + +# Now let's process the training and validation sets: +x_train_processed = [preprocess_text(text) for text in x_train] +x_val_processed = [preprocess_text(text) for text in x_val]; + +# sanity check +println(x_train_processed[1], " is ", y_data[1]) + +# Define the vocabulary from the training data +vocab = unique(vcat(x_train_processed...)) +vocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab)) +vocab_size = length(vocab) +pad_val, oov_val = vocab_size + 1, vocab_size + 2 +max_length = 12 # can choose this more smartly if you wish + +# Encode and equalize training and validation data: +x_train_processed_equalized = [ + encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for + seq in x_train_processed + ] +x_val_processed_equalized = [ + encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for + seq in x_val_processed + ] +x_train_processed_equalized[1:5] # all sequences are encoded and of the same length + + +# Convert both structures into matrix form: +matrixify(v) = reduce(hcat, v)' +x_train_processed_equalized_fixed = matrixify(x_train_processed_equalized) +x_val_processed_equalized_fixed = matrixify(x_val_processed_equalized) +size(x_train_processed_equalized_fixed) + +# ### Instantiate Model + +# For the model, we will use a RNN from Flux. We will average the hidden states +# corresponding to any sequence then pass that to a dense layer for classification. + +# For this, we need to define a custom Flux layer to perform the averaging operation: + +struct Mean end +Flux.@layer Mean +(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim] + +# For compatibility, we will also define a layer that simply casts the input to integers +# as the embedding layer in Flux expects integers but the MLJFlux model expects floats: +struct Intify end +Flux.@layer Intify +(m::Intify)(x) = Int.(x) + +# Here we define our network: +builder = MLJFlux.@builder begin + Chain( + Intify(), # Cast input to integer + Embedding(vocab_size + 2 => 300), # Embedding layer + RNN(300, 50, tanh), # RNN layer + Mean(), # Mean pooling layer + Dense(50, 2), # Classification dense layer + ) +end + +# Notice that we used an embedding layer with input dimensionality `vocab_size + 2` to +# take into account the padding and out-of-vocabulary tokens. Recall that the indices in +# our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to +# map them into meaningful dense vectors (of dimensionality 300 here). + +# 1. Load and instantiate model +NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux +clf = NeuralNetworkClassifier( + builder = builder, + optimiser = Optimisers.Adam(0.1), + batch_size = 128, + epochs = 10, +) + +# 2. Wrap it in a machine +x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous) +mach = machine(clf, x_train_processed_equalized_fixed, y_train) + + +# ## Train the Model +fit!(mach) + +# ## Evaluate the Model +ŷ = predict_mode(mach, x_val_processed_equalized_fixed) +balanced_accuracy(ŷ, y_val) + +# Acceptable performance. Let's see some live examples: + +using Random: Random; +Random.seed!(99); + +z = rand(x_val) +z_processed = preprocess_text(z) +z_encoded_equalized = + encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val) +z_encoded_equalized_fixed = matrixify([z_encoded_equalized]) +z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous) +z_pred = predict_mode(mach, z_encoded_equalized_fixed) + +print("SMS: `$(z)` and the prediction is `$(z_pred)`") diff --git a/dev/extended_examples/spam_detection/notebook.unexecuted.ipynb b/dev/extended_examples/spam_detection/notebook.unexecuted.ipynb new file mode 100644 index 00000000..cd5758bf --- /dev/null +++ b/dev/extended_examples/spam_detection/notebook.unexecuted.ipynb @@ -0,0 +1,552 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# SMS Spam Detection with RNNs" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demonstration is available as a Jupyter notebook or julia script\n", + "[here](https://github.com/FluxML/MLJFlux.jl/tree/dev/docs/src/extended_examples/spam_detection)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this demo we use a custom RNN model from Flux with MLJFlux to classify text\n", + "messages as spam or ham. We will be using the [SMS Collection\n", + "Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) from Kaggle." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Warning.** This demo includes some non-idiomatic use of MLJ to allow use of the\n", + "Flux.jl `Embedding` layer. It is not recommended for MLJ beginners." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Pkg\n", + "Pkg.activate(@__DIR__);\n", + "Pkg.instantiate();" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Basic Imports" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using MLJ\n", + "using MLJFlux\n", + "using Flux\n", + "import Optimisers # Flux.jl native optimisers no longer supported\n", + "using CSV # Read data\n", + "using DataFrames # Read data\n", + "using WordTokenizers # For tokenization\n", + "using Languages # For stop words" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Reading Data" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We assume the [SMS Collection\n", + "Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) has been\n", + "downloaded and is in a file called \"sms.csv\" in the same directory as the this script." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "df = CSV.read(joinpath(@__DIR__, \"sms.csv\"), DataFrame);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Display the first 5 rows with DataFrames" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "first(df, 5)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Text Preprocessing\n", + "Let's define a function that given an SMS message would:\n", + "- Tokenize it (i.e., convert it into a vector of words)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Remove stop words (i.e., words that are not useful for the analysis, like \"the\", \"a\",\n", + " etc.)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Return the filtered vector of words" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "const STOP_WORDS = Languages.stopwords(Languages.English())\n", + "\n", + "function preprocess_text(text)\n", + " # (1) Splitting texts into words (so later it can be a sequence of vectors)\n", + " tokens = WordTokenizers.tokenize(text)\n", + "\n", + " # (2) Stop word removal\n", + " filtered_tokens = filter(token -> !(token in STOP_WORDS), tokens)\n", + "\n", + " return filtered_tokens\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Define the vocabulary to be the set of all words in our training set. We also need a\n", + "function that would map each word in a given sequence of words into its index in the\n", + "dictionary (which is equivalent to representing the words as one-hot vectors)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now after we do this the sequences will all be numerical vectors but they will be of\n", + "unequal length. Thus, to facilitate batching of data for the deep learning model, we\n", + "need to decide on a specific maximum length for all sequences and:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- If a sequence is longer than the maximum length, we need to truncate it" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- If a sequence is shorter than the maximum length, we need to pad it with a new token" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Lastly, we must also handle the case that an incoming text sequence may involve words\n", + "never seen in training by represent all such out-of-vocabulary words with a new token." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We will define a function that would do this for us." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)\n", + " # (1) encode using the vocabulary\n", + " text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]\n", + "\n", + " # (2) truncate sequence if > max_length\n", + " length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])\n", + "\n", + " # (3) pad with pad_val\n", + " text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))\n", + "\n", + " return text_seq_inds\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Preparing Data\n", + "Splitting the data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x_data, y_data = unpack(df, ==(:Message), ==(:Category))\n", + "y_data = coerce(y_data, Multiclass);\n", + "\n", + "(x_train, x_val), (y_train, y_val) = partition(\n", + " (x_data, y_data),\n", + " 0.8,\n", + " multi = true,\n", + " shuffle = true,\n", + " rng = 42,\n", + ");" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now let's process the training and validation sets:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x_train_processed = [preprocess_text(text) for text in x_train]\n", + "x_val_processed = [preprocess_text(text) for text in x_val];" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "sanity check" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "println(x_train_processed[1], \" is \", y_data[1])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Define the vocabulary from the training data" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "vocab = unique(vcat(x_train_processed...))\n", + "vocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab))\n", + "vocab_size = length(vocab)\n", + "pad_val, oov_val = vocab_size + 1, vocab_size + 2\n", + "max_length = 12 # can choose this more smartly if you wish" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Encode and equalize training and validation data:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x_train_processed_equalized = [\n", + " encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", + " seq in x_train_processed\n", + " ]\n", + "x_val_processed_equalized = [\n", + " encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n", + " seq in x_val_processed\n", + " ]\n", + "x_train_processed_equalized[1:5] # all sequences are encoded and of the same length" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Convert both structures into matrix form:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "matrixify(v) = reduce(hcat, v)'\n", + "x_train_processed_equalized_fixed = matrixify(x_train_processed_equalized)\n", + "x_val_processed_equalized_fixed = matrixify(x_val_processed_equalized)\n", + "size(x_train_processed_equalized_fixed)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Instantiate Model" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For the model, we will use a RNN from Flux. We will average the hidden states\n", + "corresponding to any sequence then pass that to a dense layer for classification." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For this, we need to define a custom Flux layer to perform the averaging operation:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct Mean end\n", + "Flux.@layer Mean\n", + "(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For compatibility, we will also define a layer that simply casts the input to integers\n", + "as the embedding layer in Flux expects integers but the MLJFlux model expects floats:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct Intify end\n", + "Flux.@layer Intify\n", + "(m::Intify)(x) = Int.(x)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Here we define our network:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "builder = MLJFlux.@builder begin\n", + " Chain(\n", + " Intify(), # Cast input to integer\n", + " Embedding(vocab_size + 2 => 300), # Embedding layer\n", + " RNN(300, 50, tanh), # RNN layer\n", + " Mean(), # Mean pooling layer\n", + " Dense(50, 2), # Classification dense layer\n", + " )\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Notice that we used an embedding layer with input dimensionality `vocab_size + 2` to\n", + "take into account the padding and out-of-vocabulary tokens. Recall that the indices in\n", + "our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to\n", + "map them into meaningful dense vectors (of dimensionality 300 here)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "1. Load and instantiate model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux\n", + "clf = NeuralNetworkClassifier(\n", + " builder = builder,\n", + " optimiser = Optimisers.Adam(0.1),\n", + " batch_size = 128,\n", + " epochs = 10,\n", + ")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "2. Wrap it in a machine" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous)\n", + "mach = machine(clf, x_train_processed_equalized_fixed, y_train)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Train the Model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "fit!(mach)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Evaluate the Model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ŷ = predict_mode(mach, x_val_processed_equalized_fixed)\n", + "balanced_accuracy(ŷ, y_val)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Acceptable performance. Let's see some live examples:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Random: Random;\n", + "Random.seed!(99);\n", + "\n", + "z = rand(x_val)\n", + "z_processed = preprocess_text(z)\n", + "z_encoded_equalized =\n", + " encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)\n", + "z_encoded_equalized_fixed = matrixify([z_encoded_equalized])\n", + "z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)\n", + "z_pred = predict_mode(mach, z_encoded_equalized_fixed)\n", + "\n", + "print(\"SMS: `$(z)` and the prediction is `$(z_pred)`\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.3" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.3", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/extended_examples/spam_detection/notebook/index.html b/dev/extended_examples/spam_detection/notebook/index.html new file mode 100644 index 00000000..4105aa46 --- /dev/null +++ b/dev/extended_examples/spam_detection/notebook/index.html @@ -0,0 +1,114 @@ + +Spam Detection with RNNs · MLJFlux

SMS Spam Detection with RNNs

This demonstration is available as a Jupyter notebook or julia script here.

In this demo we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the SMS Collection Dataset from Kaggle.

Warning. This demo includes some non-idiomatic use of MLJ to allow use of the Flux.jl Embedding layer. It is not recommended for MLJ beginners.

Basic Imports

using MLJ
+using MLJFlux
+using Flux
+import Optimisers       # Flux.jl native optimisers no longer supported
+using CSV               # Read data
+using DataFrames        # Read data
+using WordTokenizers    # For tokenization
+using Languages         # For stop words

Reading Data

We assume the SMS Collection Dataset has been downloaded and is in a file called "sms.csv" in the same directory as the this script.

df = CSV.read(joinpath(@__DIR__, "sms.csv"), DataFrame);

Display the first 5 rows with DataFrames

first(df, 5)
5×2 DataFrame
RowCategoryMessage
String7String
1hamGo until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...
2hamOk lar... Joking wif u oni...
3spamFree entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's
4hamU dun say so early hor... U c already then say...
5hamNah I don't think he goes to usf, he lives around here though

Text Preprocessing

Let's define a function that given an SMS message would:

  • Tokenize it (i.e., convert it into a vector of words)

  • Remove stop words (i.e., words that are not useful for the analysis, like "the", "a", etc.)

  • Return the filtered vector of words

const STOP_WORDS = Languages.stopwords(Languages.English())
+
+function preprocess_text(text)
+    # (1) Splitting texts into words (so later it can be a sequence of vectors)
+    tokens = WordTokenizers.tokenize(text)
+
+    # (2) Stop word removal
+    filtered_tokens = filter(token -> !(token in STOP_WORDS), tokens)
+
+    return filtered_tokens
+end
preprocess_text (generic function with 1 method)

Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors).

Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and:

  • If a sequence is longer than the maximum length, we need to truncate it

  • If a sequence is shorter than the maximum length, we need to pad it with a new token

Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token.

We will define a function that would do this for us.

function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)
+    # (1) encode using the vocabulary
+    text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]
+
+    # (2) truncate sequence if > max_length
+    length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])
+
+    # (3) pad with pad_val
+    text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))
+
+    return text_seq_inds
+end
encode_and_equalize (generic function with 1 method)

Preparing Data

Splitting the data

x_data, y_data = unpack(df, ==(:Message), ==(:Category))
+y_data = coerce(y_data, Multiclass);
+
+(x_train, x_val), (y_train, y_val) = partition(
+    (x_data, y_data),
+    0.8,
+    multi = true,
+    shuffle = true,
+    rng = 42,
+);

Now let's process the training and validation sets:

x_train_processed = [preprocess_text(text) for text in x_train]
+x_val_processed = [preprocess_text(text) for text in x_val];

sanity check

println(x_train_processed[1], " is ", y_data[1])
["Que", "pases", "un", "buen", "tiempo"] is ham

Define the vocabulary from the training data

vocab = unique(vcat(x_train_processed...))
+vocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab))
+vocab_size = length(vocab)
+pad_val, oov_val = vocab_size + 1, vocab_size + 2
+max_length = 12                 # can choose this more smartly if you wish
12

Encode and equalize training and validation data:

x_train_processed_equalized = [
+    encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for
+        seq in x_train_processed
+        ]
+x_val_processed_equalized = [
+    encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for
+        seq in x_val_processed
+        ]
+x_train_processed_equalized[1:5]        # all sequences are encoded and of the same length
5-element Vector{Vector{Int64}}:
+ [1, 2, 3, 4, 5, 10404, 10404, 10404, 10404, 10404, 10404, 10404]
+ [6, 7, 8, 9, 10, 11, 12, 13, 11, 14, 15, 16]
+ [36, 37, 38, 39, 36, 40, 41, 42, 10404, 10404, 10404, 10404]
+ [43, 24, 36, 44, 45, 46, 10404, 10404, 10404, 10404, 10404, 10404]
+ [43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 44, 45]

Convert both structures into matrix form:

matrixify(v) = reduce(hcat, v)'
+x_train_processed_equalized_fixed = matrixify(x_train_processed_equalized)
+x_val_processed_equalized_fixed = matrixify(x_val_processed_equalized)
+size(x_train_processed_equalized_fixed)
(4458, 12)

Instantiate Model

For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification.

For this, we need to define a custom Flux layer to perform the averaging operation:

struct Mean end
+Flux.@layer Mean
+(m::Mean)(x) = mean(x, dims = 2)[:, 1, :]   # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]

For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integers but the MLJFlux model expects floats:

struct Intify end
+Flux.@layer Intify
+(m::Intify)(x) = Int.(x)

Here we define our network:

builder = MLJFlux.@builder begin
+    Chain(
+        Intify(),                         # Cast input to integer
+        Embedding(vocab_size + 2 => 300), # Embedding layer
+        RNN(300, 50, tanh),               # RNN layer
+        Mean(),                           # Mean pooling layer
+        Dense(50, 2),                     # Classification dense layer
+    )
+end
GenericBuilder(apply = #15)
+

Notice that we used an embedding layer with input dimensionality vocab_size + 2 to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here).

  1. Load and instantiate model
NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux
+clf = NeuralNetworkClassifier(
+    builder = builder,
+    optimiser = Optimisers.Adam(0.1),
+    batch_size = 128,
+    epochs = 10,
+)
NeuralNetworkClassifier(
+  builder = GenericBuilder(
+        apply = Main.var"#15#16"()), 
+  finaliser = NNlib.softmax, 
+  optimiser = Adam(0.1, (0.9, 0.999), 1.0e-8), 
+  loss = Flux.Losses.crossentropy, 
+  epochs = 10, 
+  batch_size = 128, 
+  lambda = 0.0, 
+  alpha = 0.0, 
+  rng = Random.TaskLocalRNG(), 
+  optimiser_changes_trigger_retraining = false, 
+  acceleration = CPU1{Nothing}(nothing))
  1. Wrap it in a machine
x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous)
+mach = machine(clf, x_train_processed_equalized_fixed, y_train)
untrained Machine; caches model-specific representations of data
+  model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)
+  args: 
+    1:	Source @759 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}
+    2:	Source @873 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}
+

Train the Model

fit!(mach)
trained Machine; caches model-specific representations of data
+  model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)
+  args: 
+    1:	Source @759 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}
+    2:	Source @873 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}
+

Evaluate the Model

ŷ = predict_mode(mach, x_val_processed_equalized_fixed)
+balanced_accuracy(ŷ, y_val)
0.8840999384477648

Acceptable performance. Let's see some live examples:

using Random: Random;
+Random.seed!(99);
+
+z = rand(x_val)
+z_processed = preprocess_text(z)
+z_encoded_equalized =
+    encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)
+z_encoded_equalized_fixed = matrixify([z_encoded_equalized])
+z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)
+z_pred = predict_mode(mach, z_encoded_equalized_fixed)
+
+print("SMS: `$(z)` and the prediction is `$(z_pred)`")
SMS: `Hi elaine, is today's meeting confirmed?` and the prediction is `CategoricalArrays.CategoricalValue{InlineStrings.String7, UInt32}[InlineStrings.String7("ham")]`

This page was generated using Literate.jl.

diff --git a/dev/full tutorials/Spam Detection with RNNs/sms.csv b/dev/extended_examples/spam_detection/sms.csv similarity index 100% rename from dev/full tutorials/Spam Detection with RNNs/sms.csv rename to dev/extended_examples/spam_detection/sms.csv diff --git a/dev/full tutorials/MNIST/index.html b/dev/full tutorials/MNIST/index.html deleted file mode 100644 index 1b9020ae..00000000 --- a/dev/full tutorials/MNIST/index.html +++ /dev/null @@ -1,55 +0,0 @@ - -- · MLJFlux

Image Classification Example

An expanded version of this example, with early stopping and snapshots, is available here.

We define a builder that builds a chain with six alternating convolution and max-pool layers, and a final dense layer, which we apply to the MNIST image dataset.

First we define a generic builder (working for any image size, color or gray):

using MLJ
-using Flux
-using MLDatasets
-
-# helper function
-function flatten(x::AbstractArray)
-	return reshape(x, :, size(x)[end])
-end
-
-import MLJFlux
-mutable struct MyConvBuilder
-	filter_size::Int
-	channels1::Int
-	channels2::Int
-	channels3::Int
-end
-
-function MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)
-
-	k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3
-
-	mod(k, 2) == 1 || error("`filter_size` must be odd. ")
-
-	# padding to preserve image size on convolution:
-	p = div(k - 1, 2)
-
-	front = Chain(
-            Conv((k, k), n_channels => c1, pad=(p, p), relu),
-            MaxPool((2, 2)),
-            Conv((k, k), c1 => c2, pad=(p, p), relu),
-            MaxPool((2, 2)),
-            Conv((k, k), c2 => c3, pad=(p, p), relu),
-            MaxPool((2 ,2)),
-           flatten,
-           )
-	d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first
-	return Chain(front, Dense(d, n_out))
-end

Next, we load some of the MNIST data and check scientific types conform to those is the table above:

N = 500
-Xraw, yraw = MNIST(split=:train)[:];
-Xraw = Xraw[:,:,1:N];
-yraw = yraw[1:N];
-
-scitype(Xraw)
scitype(yraw)

Inputs should have element scitype GrayImage:

X = coerce(Xraw, GrayImage);

For classifiers, target must have element scitype <: Finite:

y = coerce(yraw, Multiclass);

Instantiating an image classifier model:

ImageClassifier = @load ImageClassifier
-clf = ImageClassifier(
-    builder=MyConvBuilder(3, 16, 32, 32),
-    epochs=10,
-    loss=Flux.crossentropy,
-    )

And evaluating the accuracy of the model on a 30% holdout set:

mach = machine(clf, X, y)
-
-evaluate!(
-    mach,
-    resampling=Holdout(rng=123, fraction_train=0.7),
-    measure=misclassification_rate,
-    )
diff --git a/dev/full tutorials/Spam Detection with RNNs/SMS.jl b/dev/full tutorials/Spam Detection with RNNs/SMS.jl deleted file mode 100644 index 4f4bd8dd..00000000 --- a/dev/full tutorials/Spam Detection with RNNs/SMS.jl +++ /dev/null @@ -1,180 +0,0 @@ -# # SMS Spam Detection with RNNs - -# In this tutorial we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the [SMS Collection Dataset](https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) from Kaggle. - -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src - -# ### Basic Imports -using MLJ -using MLJFlux -using Flux -using CSV # Read data -using DataFrames # Read data -using ScientificTypes # Type coercion -using WordTokenizers # For tokenization -using Languages # For stop words - - -# ### Reading Data -df = CSV.read("./sms.csv", DataFrame); - -# Display the first 5 rows with DataFrames -first(df, 5) |> pretty - - -# ### Text Preprocessing -# Let's define a function that given an SMS message would: -# - Tokenize it (i.e., convert it into a vector of words) - -# - Remove stop words (i.e., words that are not useful for the analysis, like "the", "a", etc.) - -# - Return the filtered vector of words - -function preprocess_text(text) - ## (1) Splitting texts into words (so later it can be a sequence of vectors) - tokens = WordTokenizers.tokenize(text) - - ## (2) Stop word removal - stop_words = Languages.stopwords(Languages.English()) - filtered_tokens = filter(token -> !(token in stop_words), tokens) - - return filtered_tokens -end - -# Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors). - -# Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and: - -# - If a sequence is longer than the maximum length, we need to truncate it - -# - If a sequence is shorter than the maximum length, we need to pad it with a new token - -# Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token. - -# We will define a function that would do this for us. - -function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val) - ## (1) encode using the vocabulary - text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq] - - ## (2) truncate sequence if > max_length - length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length]) - - ## (3) pad with pad_val - text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds))) - - return text_seq_inds -end - -# ### Preparing Data -# Splitting the data -x_data, y_data = unpack(df, ==(:Message), ==(:Category)) -y_data = coerce(y_data, Multiclass); - -(x_train, x_val), (y_train, y_val) = partition((x_data, y_data), 0.8, - multi = true, - shuffle = true, - rng = 42); - -# Now let's process the training and validation sets: -x_train_processed = [preprocess_text(text) for text in x_train] -x_val_processed = [preprocess_text(text) for text in x_val]; - -# sanity check -println(x_train_processed[1], " is ", y_data[1]) - -# Define the vocabulary from the training data -vocab = unique(vcat(x_train_processed...)) -vocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab)) -vocab_size = length(vocab) -pad_val, oov_val = vocab_size + 1, vocab_size + 2 -max_length = 12 # can choose this more smartly if you wish - -# Encode and equalize training and validation data: -x_train_processed_equalized = [ - encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for - seq in x_train_processed -] -x_val_processed_equalized = [ - encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for - seq in x_val_processed -] -x_train_processed_equalized[1:5] # all sequences are encoded and of the same length - - -# Convert both structures into matrix form: -matrixify(v) = reduce(hcat, v)' -x_train_processed_equalized_fixed = matrixify(x_train_processed_equalized) -x_val_processed_equalized_fixed = matrixify(x_val_processed_equalized) -size(x_train_processed_equalized_fixed) - -# ### Instantiate Model - -# For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification. - -# For this, we need to define a custom Flux layer to perform the averaging operation: - -struct Mean end -Flux.@layer Mean -(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim] - -# For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integers but the MLJFlux model expects floats: -struct Intify end -Flux.@layer Intify -(m::Intify)(x) = Int.(x) - -# Here we define our network: -builder = MLJFlux.@builder begin - Chain( - Intify(), # Cast input to integer - Embedding(vocab_size + 2 => 300), # Embedding layer - RNN(300, 50, tanh), # RNN layer - Mean(), # Mean pooling layer - Dense(50, 2) # Classification dense layer - ) -end - -# Notice that we used an embedding layer with input dimensionality `vocab_size + 2` to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here). - -# 1. Load and instantiate model -NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux -clf = NeuralNetworkClassifier( - builder = builder, - optimiser = Flux.ADAM(0.1), - batch_size = 128, - epochs = 10, -) - -# 2. Wrap it in a machine -x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous) -mach = machine(clf, x_train_processed_equalized_fixed, y_train) - - -# ## Train the Model -fit!(mach) - -# ## Evaluate the Model -ŷ = predict_mode(mach, x_val_processed_equalized_fixed) -balanced_accuracy(ŷ, y_val) - -# Acceptable performance. Let's see some live examples: - -using Random: Random; -Random.seed!(99); - -z = rand(x_val) -z_processed = preprocess_text(z) -z_encoded_equalized = - encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val) -z_encoded_equalized_fixed = matrixify([z_encoded_equalized]) -z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous) -z_pred = predict_mode(mach, z_encoded_equalized_fixed) - -print("SMS: `$(z)` and the prediction is `$(z_pred)`") - - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute = true) #src -Literate.notebook(@__FILE__, @__DIR__, execute = true) #src diff --git a/dev/full tutorials/Spam Detection with RNNs/SMS/index.html b/dev/full tutorials/Spam Detection with RNNs/SMS/index.html deleted file mode 100644 index a9a02a4f..00000000 --- a/dev/full tutorials/Spam Detection with RNNs/SMS/index.html +++ /dev/null @@ -1,122 +0,0 @@ - -SMS Spam Detection with RNNs · MLJFlux

SMS Spam Detection with RNNs

In this tutorial we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the SMS Collection Dataset from Kaggle.

Basic Imports

using MLJ
-using MLJFlux
-using Flux
-using CSV               # Read data
-using DataFrames        # Read data
-using ScientificTypes   # Type coercion
-using WordTokenizers    # For tokenization
-using Languages         # For stop words

Reading Data

df = CSV.read("./sms.csv", DataFrame);

Display the first 5 rows with DataFrames

first(df, 5) |> pretty
┌──────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│ Category │ Message                                                                                                                                                     │
-│ String7  │ String                                                                                                                                                      │
-│ Textual  │ Textual                                                                                                                                                     │
-├──────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-│ ham      │ Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...                                             │
-│ ham      │ Ok lar... Joking wif u oni...                                                                                                                               │
-│ spam     │ Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's │
-│ ham      │ U dun say so early hor... U c already then say...                                                                                                           │
-│ ham      │ Nah I don't think he goes to usf, he lives around here though                                                                                               │
-└──────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-

Text Preprocessing

Let's define a function that given an SMS message would:

  • Tokenize it (i.e., convert it into a vector of words)

  • Remove stop words (i.e., words that are not useful for the analysis, like "the", "a", etc.)

  • Return the filtered vector of words

function preprocess_text(text)
-	# (1) Splitting texts into words (so later it can be a sequence of vectors)
-	tokens = WordTokenizers.tokenize(text)
-
-	# (2) Stop word removal
-	stop_words = Languages.stopwords(Languages.English())
-	filtered_tokens = filter(token -> !(token in stop_words), tokens)
-
-	return filtered_tokens
-end
preprocess_text (generic function with 1 method)

Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors).

Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and:

  • If a sequence is longer than the maximum length, we need to truncate it

  • If a sequence is shorter than the maximum length, we need to pad it with a new token

Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token.

We will define a function that would do this for us.

function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)
-	# (1) encode using the vocabulary
-	text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]
-
-	# (2) truncate sequence if > max_length
-	length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])
-
-	# (3) pad with pad_val
-	text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))
-
-	return text_seq_inds
-end
encode_and_equalize (generic function with 1 method)

Preparing Data

Splitting the data

x_data, y_data = unpack(df, ==(:Message), ==(:Category))
-y_data = coerce(y_data, Multiclass);
-
-(x_train, x_val), (y_train, y_val) = partition((x_data, y_data), 0.8,
-	multi = true,
-	shuffle = true,
-	rng = 42);

Now let's process the training and validation sets:

x_train_processed = [preprocess_text(text) for text in x_train]
-x_val_processed = [preprocess_text(text) for text in x_val];

sanity check

println(x_train_processed[1], " is ", y_data[1])
["Que", "pases", "un", "buen", "tiempo"] is ham
-

Define the vocabulary from the training data

vocab = unique(vcat(x_train_processed...))
-vocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab))
-vocab_size = length(vocab)
-pad_val, oov_val = vocab_size + 1, vocab_size + 2
-max_length = 12                 # can choose this more smartly if you wish
12

Encode and equalize training and validation data:

x_train_processed_equalized = [
-	encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for
-	seq in x_train_processed
-]
-x_val_processed_equalized = [
-	encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for
-	seq in x_val_processed
-]
-x_train_processed_equalized[1:5]          # all sequences are encoded and of the same length
5-element Vector{Vector{Int64}}:
- [1, 2, 3, 4, 5, 10404, 10404, 10404, 10404, 10404, 10404, 10404]
- [6, 7, 8, 9, 10, 11, 12, 13, 11, 14, 15, 16]
- [36, 37, 38, 39, 36, 40, 41, 42, 10404, 10404, 10404, 10404]
- [43, 24, 36, 44, 45, 46, 10404, 10404, 10404, 10404, 10404, 10404]
- [43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 44, 45]

Convert both structures into matrix form:

matrixify(v) = reduce(hcat, v)'
-x_train_processed_equalized_fixed = matrixify(x_train_processed_equalized)
-x_val_processed_equalized_fixed = matrixify(x_val_processed_equalized)
-size(x_train_processed_equalized_fixed)
(4458, 12)

Instantiate Model

For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification.

For this, we need to define a custom Flux layer to perform the averaging operation:

struct Mean end
-Flux.@layer Mean
-(m::Mean)(x) = mean(x, dims = 2)[:, 1, :]   # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]

For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integets but the MLJFlux model expects floats:

struct Intify end
-Flux.@layer Intify
-(m::Intify)(x) = Int.(x)

Here we define out network:

builder = MLJFlux.@builder begin
-	Chain(
-		Intify(),                         # Cast input to integer
-		Embedding(vocab_size + 2 => 300),  # Embedding layer
-		RNN(300, 50, tanh),               # RNN layer
-		Mean(),                           # Mean pooling layer
-		Dense(50, 2)                     # Classification dense layer
-	)
-end
GenericBuilder(apply = #15)
-

Notice that we used an embedding layer with input dimensionality vocab_size + 2 to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here).

  1. Load and instantiate model
NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux
-clf = NeuralNetworkClassifier(
-	builder = builder,
-	optimiser = Flux.ADAM(0.1),
-	batch_size = 128,
-	epochs = 10,
-)
NeuralNetworkClassifier(
-  builder = GenericBuilder(
-        apply = Main.var"##445".var"#15#16"()), 
-  finaliser = NNlib.softmax, 
-  optimiser = Flux.Optimise.Adam(0.1, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), 
-  loss = Flux.Losses.crossentropy, 
-  epochs = 10, 
-  batch_size = 128, 
-  lambda = 0.0, 
-  alpha = 0.0, 
-  rng = Random._GLOBAL_RNG(), 
-  optimiser_changes_trigger_retraining = false, 
-  acceleration = ComputationalResources.CPU1{Nothing}(nothing))
  1. Wrap it in a machine
x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous)
-mach = machine(clf, x_train_processed_equalized_fixed, y_train)
untrained Machine; caches model-specific representations of data
-  model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)
-  args: 
-    1:	Source @029 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}
-    2:	Source @942 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}
-

Train the Model

fit!(mach)
trained Machine; caches model-specific representations of data
-  model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)
-  args: 
-    1:	Source @029 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}
-    2:	Source @942 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}
-

Evaluate the Model

ŷ = predict_mode(mach, x_val_processed_equalized_fixed)
-balanced_accuracy(ŷ, y_val)
0.9370418555201171

Acceptable performance. Let's see some live examples:

using Random: Random;
-Random.seed!(99);
-
-z = rand(x_val)
-z_processed = preprocess_text(z)
-z_encoded_equalized =
-	encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)
-z_encoded_equalized_fixed = matrixify([z_encoded_equalized])
-z_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)
-z_pred = predict_mode(mach, z_encoded_equalized_fixed)
-
-print("SMS: `$(z)` and the prediction is `$(z_pred)`")
SMS: `Hi elaine, is today's meeting confirmed?` and the prediction is `CategoricalArrays.CategoricalValue{InlineStrings.String7, UInt32}[InlineStrings.String7("ham")]`

This page was generated using Literate.jl.

diff --git a/dev/generate.jl b/dev/generate.jl new file mode 100644 index 00000000..a9451d07 --- /dev/null +++ b/dev/generate.jl @@ -0,0 +1,52 @@ +function generate(dir; execute=true, pluto=false) + quote + using Pkg + Pkg.activate(temp=true) + Pkg.add("Literate") + using Literate + + OUTDIR = $dir + outdir = splitpath(OUTDIR)[end] + INFILE = joinpath(OUTDIR, "notebook.jl") + + @info "Generating notebooks for $outdir. " + + # generate pluto notebook: + if $pluto + TEMPDIR = tempdir() + Literate.notebook(INFILE, TEMPDIR, flavor=Literate.PlutoFlavor()) + mv("$TEMPDIR/notebook.jl", "$OUTDIR/notebook.pluto.jl", force=true) + else + @warn "Not generating a Pluto notebook for $outdir." + end + + Literate.markdown( + INFILE, + OUTDIR, + execute=false, + # overrides the default ```@example notebook ... ```, which will be ambiguous: + # config=Dict("codefence" => Pair("````@julia", "````" )), + config=Dict("codefence" => Pair("````@example $outdir", "````" )), + ) + + Literate.notebook(INFILE, OUTDIR, execute=false) + mv("$OUTDIR/notebook.ipynb", "$OUTDIR/notebook.unexecuted.ipynb", force=true) + Literate.notebook(INFILE, OUTDIR, execute=$execute) + $execute || @warn "Not generating a pre-executed Jupyter notebook for $outdir. "* + "YOU NEED TO EXECUTE \"notebook.ipynb\" MANUALLY!" + + end |> eval +end + +# Pkg.add("Pluto") +# using Pluto +# Pluto.run(notebook=joinpath(OUTDIR, "notebook.pluto.jl")) + +# Pkg.add("IJulia") +# Pkg.instantiate() +# using IJulia +# IJulia.notebook(dir=OUTDIR) +# Pkg.add("IJulia") +# Pkg.instantiate() +# using IJulia +# IJulia.notebook(dir=OUTDIR) diff --git a/dev/index.html b/dev/index.html index b4d04ccb..2e9be56e 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,8 +1,9 @@ -Introduction · MLJFlux

MLJFlux.jl

A Julia package integrating deep learning Flux models with MLJ.

Objectives

  • Provide a user-friendly and high-level interface to fundamental Flux deep learning models while still being extensible by supporting custom models written with Flux

  • Make building deep learning models more convenient to users already familiar with the MLJ workflow

  • Make it easier to apply machine learning techniques provided by MLJ, including: out-of-sample performance evaluation, hyper-parameter optimization, iteration control, and more, to deep learning models

MLJFlux Coverage

MLJFlux support is focused on fundamental and widely used deep learning models. Sophisticated architectures or techniques such as online learning, reinforcement learning, and adversarial networks are currently beyond its scope.

Also note that MLJFlux is limited to training models only when all training data fits into memory, though it still supports automatic batching of data.

Installation

import Pkg
+Introduction · MLJFlux

MLJFlux.jl

A Julia package integrating deep learning Flux models with MLJ.

Objectives

  • Provide a user-friendly and high-level interface to fundamental Flux deep learning models while still being extensible by supporting custom models written with Flux

  • Make building deep learning models more convenient to users already familiar with the MLJ workflow

  • Make it easier to apply machine learning techniques provided by MLJ, including: out-of-sample performance evaluation, hyper-parameter optimization, iteration control, and more, to deep learning models

MLJFlux Scope

MLJFlux support is focused on fundamental deep learning models for common supervised learning tasks. Sophisticated architectures and approaches, such as online learning, reinforcement learning, and adversarial networks, are currently outside its scope. Also, MLJFlux is limited to tasks where all (batches of) training data fits into memory.

Installation

import Pkg
 Pkg.activate("my_environment", shared=true)
-Pkg.add(["MLJ", "MLJFlux", "Flux"])

You only need Flux if you need to build a custom architecture or experiment with different optimizers, loss functions and activations.

Quick Start

using MLJ, Flux, MLJFlux
+Pkg.add(["MLJ", "MLJFlux", "Optimisers", "Flux"])

You only need Flux if you need to build a custom architecture, or experiment with different loss or activation functions. Since MLJFlux 0.5, you must use optimisers from Optimisers.jl, as native Flux.jl optimisers are no longer supported.

Quick Start

For the following demo, you will need to additionally run Pkg.add("RDatasets").

using MLJ, Flux, MLJFlux
 import RDatasets
+import Optimisers
 
 # 1. Load Data
 iris = RDatasets.dataset("datasets", "iris");
@@ -12,15 +13,31 @@
 NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg="MLJFlux"
 clf = NeuralNetworkClassifier(
     builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
+    optimiser=Optimisers.Adam(0.01),
     batch_size=8,
-    epochs=100, 
+    epochs=100,
     acceleration=CUDALibs()         # For GPU support
     )
 
-# 3. Wrap it in a machine 
+# 3. Wrap it in a machine
 mach = machine(clf, X, y)
 
 # 4. Evaluate the model
 cv=CV(nfolds=5)
-evaluate!(mach, resampling=cv, measure=accuracy) 

As you can see we were able to use MLJ functionality (i.e., cross validation) with a Flux deep learning model. All arguments provided also have defaults.

Notice that we were also able to define the neural network in a high-level fashion by only specifying the number of neurons in each hidden layer and the activation function. Meanwhile, MLJFlux was able to infer the input and output layer as well as use a suitable default for the loss function and output activation given the classification task. Notice as well that we did not need to implement a training or prediction loop as in Flux.

Basic idea

As in the example above, any MLJFlux model has a builder hyperparameter, an object encoding instructions for creating a neural network given the data that the model eventually sees (e.g., the number of classes in a classification problem). While each MLJ model has a simple default builder, users may need to define custom builders to get optimal results, and this will require familiarity with the Flux API for defining a neural network chain.

Flux or MLJFlux?

Flux is a deep learning framework in Julia that comes with everything you need to build deep learning models (i.e., GPU support, automatic differentiation, layers, activations, losses, optimizers, etc.). MLJFlux wraps models built with Flux which provides a more high-level interface for building and training such models. More importantly, it empowers Flux models by extending their support to many common machine learning workflows that are possible via MLJ such as:

  • Estimating performance of your model using a holdout set or other resampling strategy (e.g., cross-validation) as measured by one or more metrics (e.g., loss functions) that may not have been used in training

  • Optimizing hyper-parameters such as a regularization parameter (e.g., dropout) or a width/height/nchannnels of convolution layer

  • Compose with other models such as introducing data pre-processing steps (e.g., missing data imputation) into a pipeline. It might make sense to include non-deep learning models in this pipeline. Other kinds of model composition could include blending predictions of a deep learner with some other kind of model (as in “model stacking”). Models composed with MLJ can be also tuned as a single unit.

  • Controlling iteration by adding an early stopping criterion based on an out-of-sample estimate of the loss, dynamically changing the learning rate (eg, cyclic learning rates), periodically save snapshots of the model, generate live plots of sample weights to judge training progress (as in tensor board)

  • Comparing your model with a non-deep learning models

A comparable project, FastAI/FluxTraining, also provides a high-level interface for interacting with Flux models and supports a set of features that may overlap with (but not include all of) those supported by MLJFlux.

Many of the features mentioned above are showcased in the workflow examples that you can access from the sidebar.

+evaluate!(mach, resampling=cv, measure=accuracy)
PerformanceEvaluation object with these fields:
+  model, measure, operation,
+  measurement, per_fold, per_observation,
+  fitted_params_per_fold, report_per_fold,
+  train_test_rows, resampling, repeats
+Extract:
+┌────────────┬──────────────┬─────────────┐
+│ measure    │ operation    │ measurement │
+├────────────┼──────────────┼─────────────┤
+│ Accuracy() │ predict_mode │ 0.973       │
+└────────────┴──────────────┴─────────────┘
+┌─────────────────────────────┬─────────┐
+│ per_fold                    │ 1.96*SE │
+├─────────────────────────────┼─────────┤
+│ [1.0, 1.0, 0.967, 0.9, 1.0] │ 0.0426  │
+└─────────────────────────────┴─────────┘
+

As you can see we are able to use MLJ meta-functionality (i.e., cross validation) with a Flux deep learning model. All arguments provided have defaults.

Notice that we are also able to define the neural network in a high-level fashion by only specifying the number of neurons in each hidden layer and the activation function. Meanwhile, MLJFlux is able to infer the input and output layer as well as use a suitable default for the loss function and output activation given the classification task. Notice as well that we did not need to manually implement a training or prediction loop.

Basic idea: "builders" for data-dependent architecture

As in the example above, any MLJFlux model has a builder hyperparameter, an object encoding instructions for creating a neural network given the data that the model eventually sees (e.g., the number of classes in a classification problem). While each MLJ model has a simple default builder, users may need to define custom builders to get optimal results, and this will require familiarity with the Flux API for defining a neural network chain.

Flux or MLJFlux?

Flux is a deep learning framework in Julia that comes with everything you need to build deep learning models (i.e., GPU support, automatic differentiation, layers, activations, losses, optimizers, etc.). MLJFlux wraps models built with Flux which provides a more high-level interface for building and training such models. More importantly, it empowers Flux models by extending their support to many common machine learning workflows that are possible via MLJ such as:

  • Estimating performance of your model using a holdout set or other resampling strategy (e.g., cross-validation) as measured by one or more metrics (e.g., loss functions) that may not have been used in training

  • Optimizing hyper-parameters such as a regularization parameter (e.g., dropout) or a width/height/nchannnels of convolution layer

  • Compose with other models such as introducing data pre-processing steps (e.g., missing data imputation) into a pipeline. It might make sense to include non-deep learning models in this pipeline. Other kinds of model composition could include blending predictions of a deep learner with some other kind of model (as in “model stacking”). Models composed with MLJ can be also tuned as a single unit.

  • Controlling iteration by adding an early stopping criterion based on an out-of-sample estimate of the loss, dynamically changing the learning rate (eg, cyclic learning rates), periodically save snapshots of the model, generate live plots of sample weights to judge training progress (as in tensor board)

  • Comparing your model with a non-deep learning models

A comparable project, FastAI/FluxTraining, also provides a high-level interface for interacting with Flux models and supports a set of features that may overlap with (but not include all of) those supported by MLJFlux.

Many of the features mentioned above are showcased in the workflow examples that you can access from the sidebar.

diff --git a/dev/interface/Builders/index.html b/dev/interface/Builders/index.html index f725e9b6..81b693d9 100644 --- a/dev/interface/Builders/index.html +++ b/dev/interface/Builders/index.html @@ -1,5 +1,5 @@ -Builders · MLJFlux
MLJFlux.LinearType
Linear(; σ=Flux.relu)

MLJFlux builder that constructs a fully connected two layer network with activation function σ. The number of input and output nodes is determined from the data. Weights are initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.ShortType
Short(; n_hidden=0, dropout=0.5, σ=Flux.sigmoid)

MLJFlux builder that constructs a full-connected three-layer network using n_hidden nodes in the hidden layer and the specified dropout (defaulting to 0.5). An activation function σ is applied between the hidden and final layers. If n_hidden=0 (the default) then n_hidden is the geometric mean of the number of input and output nodes. The number of input and output nodes is determined from the data.

Each layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.MLPType
MLP(; hidden=(100,), σ=Flux.relu)

MLJFlux builder that constructs a Multi-layer perceptron network. The ith element of hidden represents the number of neurons in the ith hidden layer. An activation function σ is applied between each layer.

Each layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.@builderMacro
@builder neural_net

Creates a builder for neural_net. The variables rng, n_in, n_out and n_channels can be used to create builders for any random number generator rng, input and output sizes n_in and n_out and number of input channels n_channels.

Examples

julia> import MLJFlux: @builder;
+Builders · MLJFlux
MLJFlux.LinearType
Linear(; σ=Flux.relu)

MLJFlux builder that constructs a fully connected two layer network with activation function σ. The number of input and output nodes is determined from the data. Weights are initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.ShortType
Short(; n_hidden=0, dropout=0.5, σ=Flux.sigmoid)

MLJFlux builder that constructs a full-connected three-layer network using n_hidden nodes in the hidden layer and the specified dropout (defaulting to 0.5). An activation function σ is applied between the hidden and final layers. If n_hidden=0 (the default) then n_hidden is the geometric mean of the number of input and output nodes. The number of input and output nodes is determined from the data.

Each layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.MLPType
MLP(; hidden=(100,), σ=Flux.relu)

MLJFlux builder that constructs a Multi-layer perceptron network. The ith element of hidden represents the number of neurons in the ith hidden layer. An activation function σ is applied between each layer.

Each layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.

source
MLJFlux.@builderMacro
@builder neural_net

Creates a builder for neural_net. The variables rng, n_in, n_out and n_channels can be used to create builders for any random number generator rng, input and output sizes n_in and n_out and number of input channels n_channels.

Examples

julia> import MLJFlux: @builder;
 
 julia> nn = NeuralNetworkRegressor(builder = @builder(Chain(Dense(n_in, 64, relu),
                                                             Dense(64, 32, relu),
@@ -11,4 +11,4 @@
            Chain(front, Dense(d, n_out));
        end
 
-julia> conv_nn = NeuralNetworkRegressor(builder = conv_builder);
source
+julia> conv_nn = NeuralNetworkRegressor(builder = conv_builder);
source
diff --git a/dev/interface/Classification/index.html b/dev/interface/Classification/index.html index 74ba3b80..96df6885 100644 --- a/dev/interface/Classification/index.html +++ b/dev/interface/Classification/index.html @@ -1,11 +1,12 @@ -Classification · MLJFlux
MLJFlux.NeuralNetworkClassifierType
NeuralNetworkClassifier

A model type for constructing a neural network classifier, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux

Do model = NeuralNetworkClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkClassifier(builder=...).

NeuralNetworkClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a Multiclass or OrderedFactor target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass or OrderedFactor; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.crossentropy: Standard multiclass classification loss, also known as the log loss.

    • Flux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increassing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.

using MLJ
+Classification · MLJFlux
MLJFlux.NeuralNetworkClassifierType
NeuralNetworkClassifier

A model type for constructing a neural network classifier, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux

Do model = NeuralNetworkClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkClassifier(builder=...).

NeuralNetworkClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a Multiclass or OrderedFactor target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass or OrderedFactor; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.crossentropy: Standard multiclass classification loss, also known as the log loss.

    • Flux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights.] Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.

using MLJ
 using Flux
-import RDatasets

First, we can load the data:

iris = RDatasets.dataset("datasets", "iris");
+import RDatasets
+import Optimisers

First, we can load the data:

iris = RDatasets.dataset("datasets", "iris");
 y, X = unpack(iris, ==(:Species), rng=123); # a vector and a table
 NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
 clf = NeuralNetworkClassifier()

Next, we can train the model:

mach = machine(clf, X, y)
-fit!(mach)

We can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:

clf.optimiser.eta = clf.optimiser.eta * 2
+fit!(mach)

We can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:

clf.optimiser = Optimisers.Adam(clf.optimiser.eta * 2)
 clf.epochs = clf.epochs + 5
 
 fit!(mach, verbosity=2) # trains 5 more epochs

We can inspect the mean training loss using the cross_entropy function:

training_loss = cross_entropy(predict(mach, X), y)

And we can access the Flux chain (model) using fitted_params:

chain = fitted_params(mach).chain

Finally, we can see how the out-of-sample performance changes over time, using MLJ's learning_curve function:

r = range(clf, :epochs, lower=1, upper=200, scale=:log10)
@@ -19,7 +20,7 @@
      xlab=curve.parameter_name,
      xscale=curve.parameter_scale,
      ylab = "Cross Entropy")
-

See also ImageClassifier, NeuralNetworkBinaryClassifier.

source
MLJFlux.NeuralNetworkBinaryClassifierType
NeuralNetworkBinaryClassifier

A model type for constructing a neural network binary classifier, based on unknown.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=unknown

Do model = NeuralNetworkBinaryClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkBinaryClassifier(builder=...).

NeuralNetworkBinaryClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a binary (Multiclass{2} or OrderedFactor{2}) target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass{2} or OrderedFactor{2}; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.

  • optimiser::Flux.Adam(): A Flux.Optimise optimiser. The optimiser performs the updating of the weights of the network. For further reference, see the Flux optimiser documentation. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.binarycrossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.binarycrossentropy: Standard binary classification loss, also known as the log loss.

    • Flux.logitbinarycrossentropy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with σ and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default sigmoid finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.binary_focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increassing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞).

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training.

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.σ: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.σ.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.

using MLJ, Flux
+

See also ImageClassifier, NeuralNetworkBinaryClassifier.

source
MLJFlux.NeuralNetworkBinaryClassifierType
NeuralNetworkBinaryClassifier

A model type for constructing a neural network binary classifier, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=MLJFlux

Do model = NeuralNetworkBinaryClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkBinaryClassifier(builder=...).

NeuralNetworkBinaryClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a binary (Multiclass{2} or OrderedFactor{2}) target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass{2} or OrderedFactor{2}; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.

  • optimiser::Flux.Adam(): A Flux.Optimise optimiser. The optimiser performs the updating of the weights of the network. For further reference, see the Flux optimiser documentation. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.binarycrossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.binarycrossentropy: Standard binary classification loss, also known as the log loss.

    • Flux.logitbinarycrossentropy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with σ and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default sigmoid finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.binary_focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞).

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training.

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.σ: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.σ.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.

using MLJ, Flux
 import Optimisers
 import RDatasets

First, we can load the data:

mtcars = RDatasets.dataset("datasets", "mtcars");
 y, X = unpack(mtcars, ==(:VS), in([:MPG, :Cyl, :Disp, :HP, :WT, :QSec]));

Note that y is a vector and X a table.

y = categorical(y) # classifier takes catogorical input
@@ -47,4 +48,4 @@
    xscale=curve.parameter_scale,
    ylab = "Cross Entropy",
 )
-

See also ImageClassifier.

source
+

See also ImageClassifier.

source
diff --git a/dev/interface/Custom Builders/index.html b/dev/interface/Custom Builders/index.html index 9e379744..e19125d1 100644 --- a/dev/interface/Custom Builders/index.html +++ b/dev/interface/Custom Builders/index.html @@ -1,5 +1,5 @@ -Custom Builders · MLJFlux

Defining Custom Builders

Following is an example defining a new builder for creating a simple fully-connected neural network with two hidden layers, with n1 nodes in the first hidden layer, and n2 nodes in the second, for use in any of the first three models in Table 1. The definition includes one mutable struct and one method:

mutable struct MyBuilder <: MLJFlux.Builder
+Custom Builders · MLJFlux

Defining Custom Builders

Following is an example defining a new builder for creating a simple fully-connected neural network with two hidden layers, with n1 nodes in the first hidden layer, and n2 nodes in the second, for use in any of the first three models in Table 1. The definition includes one mutable struct and one method:

mutable struct MyBuilder <: MLJFlux.Builder
 	n1 :: Int
 	n2 :: Int
 end
@@ -11,5 +11,5 @@
             Dense(nn.n1, nn.n2, init=init),
             Dense(nn.n2, n_out, init=init),
             )
-end

Note here that n_in and n_out depend on the size of the data (see Table 1.

For a concrete image classification example, see the Image Classification Example.

More generally, defining a new builder means defining a new struct sub-typing MLJFlux.Builder and defining a new MLJFlux.build method with one of these signatures:

MLJFlux.build(builder::MyBuilder, rng, n_in, n_out)
-MLJFlux.build(builder::MyBuilder, rng, n_in, n_out, n_channels) # for use with `ImageClassifier`

This method must return a Flux.Chain instance, chain, subject to the following conditions:

  • chain(x) must make sense:

    • for any x <: Array{<:AbstractFloat, 2} of size (n_in, batch_size) where batch_size is any integer (for use with one of the first three model types); or
    • for any x <: Array{<:Float32, 4} of size (W, H, n_channels, batch_size), where (W, H) = n_in, n_channels is 1 or 3, and batch_size is any integer (for use with ImageClassifier)
  • The object returned by chain(x) must be an AbstractFloat vector of length n_out.

Alternatively, use MLJFlux.@builder(neural_net) to automatically create a builder for any valid Flux chain expression neural_net, where the symbols n_in, n_out, n_channels and rng can appear literally, with the interpretations explained above. For example,

builder = MLJFlux.@builder Chain(Dense(n_in, 128), Dense(128, n_out, tanh))
+end

Note here that n_in and n_out depend on the size of the data (see Table 1.

For a concrete image classification example, see Using MLJ to classifiy the MNIST image dataset.

More generally, defining a new builder means defining a new struct sub-typing MLJFlux.Builder and defining a new MLJFlux.build method with one of these signatures:

MLJFlux.build(builder::MyBuilder, rng, n_in, n_out)
+MLJFlux.build(builder::MyBuilder, rng, n_in, n_out, n_channels) # for use with `ImageClassifier`

This method must return a Flux.Chain instance, chain, subject to the following conditions:

  • chain(x) must make sense:

    • for any x <: Array{<:AbstractFloat, 2} of size (n_in, batch_size) where batch_size is any integer (for use with one of the first three model types); or
    • for any x <: Array{<:Float32, 4} of size (W, H, n_channels, batch_size), where (W, H) = n_in, n_channels is 1 or 3, and batch_size is any integer (for use with ImageClassifier)
  • The object returned by chain(x) must be an AbstractFloat vector of length n_out.

Alternatively, use MLJFlux.@builder(neural_net) to automatically create a builder for any valid Flux chain expression neural_net, where the symbols n_in, n_out, n_channels and rng can appear literally, with the interpretations explained above. For example,

builder = MLJFlux.@builder Chain(Dense(n_in, 128), Dense(128, n_out, tanh))
diff --git a/dev/interface/Image Classification/index.html b/dev/interface/Image Classification/index.html index 690ec2ee..98b70147 100644 --- a/dev/interface/Image Classification/index.html +++ b/dev/interface/Image Classification/index.html @@ -1,7 +1,8 @@ -Image Classification · MLJFlux
MLJFlux.ImageClassifierType
ImageClassifier

A model type for constructing a image classifier, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

ImageClassifier = @load ImageClassifier pkg=MLJFlux

Do model = ImageClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in ImageClassifier(builder=...).

ImageClassifier classifies images using a neural network adapted to the type of images provided (color or gray scale). Predictions are probabilistic. Users provide a recipe for constructing the network, based on properties of the image encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is any AbstractVector of images with ColorImage or GrayImage scitype; check the scitype with scitype(X) and refer to ScientificTypes.jl documentation on coercing typical image formats into an appropriate type.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass; check the scitype with scitype(y).

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder: An MLJFlux builder that constructs the neural network. The fallback builds a depth-16 VGG architecture adapted to the image size and number of target classes, with no batch normalization; see the Metalhead.jl documentation for details. See the example below for a user-specified builder. A convenience macro @builder is also available. See also finaliser below.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.crossentropy: Standard multiclass classification loss, also known as the log loss.

    • Flux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increassing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we use MLJFlux and a custom builder to classify the MNIST image dataset.

using MLJ
+Image Classification · MLJFlux
MLJFlux.ImageClassifierType
ImageClassifier

A model type for constructing a image classifier, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

ImageClassifier = @load ImageClassifier pkg=MLJFlux

Do model = ImageClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in ImageClassifier(builder=...).

ImageClassifier classifies images using a neural network adapted to the type of images provided (color or gray scale). Predictions are probabilistic. Users provide a recipe for constructing the network, based on properties of the image encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is any AbstractVector of images with ColorImage or GrayImage scitype; check the scitype with scitype(X) and refer to ScientificTypes.jl documentation on coercing typical image formats into an appropriate type.

  • y is the target, which can be any AbstractVector whose element scitype is Multiclass; check the scitype with scitype(y).

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder: An MLJFlux builder that constructs the neural network. The fallback builds a depth-16 VGG architecture adapted to the image size and number of target classes, with no batch normalization; see the Metalhead.jl documentation for details. See the example below for a user-specified builder. A convenience macro @builder is also available. See also finaliser below.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:

    • Flux.crossentropy: Standard multiclass classification loss, also known as the log loss.

    • Flux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).

    • Flux.tversky_loss: Used with imbalanced data to give more weight to false negatives.

    • Flux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.

    Currently MLJ measures are not supported values of loss.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increassing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

  • finaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.

  • predict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we use MLJFlux and a custom builder to classify the MNIST image dataset.

using MLJ
 using Flux
 import MLJFlux
+import Optimisers
 import MLJIteration # for `skip` control

First we want to download the MNIST dataset, and unpack into images and labels:

import MLDatasets: MNIST
 data = MNIST(split=:train)
 images, labels = data.features, data.targets

In MLJ, integers cannot be used for encoding categorical data, so we must coerce them into the Multiclass scitype:

labels = coerce(labels, Multiclass);

Above images is a single array but MLJFlux requires the images to be a vector of individual image arrays:

images = coerce(images, GrayImage);
@@ -45,4 +46,4 @@
           resampling=Holdout(fraction_train=0.5),
           measure=cross_entropy,
           rows=1:1000,
-          verbosity=0)

See also NeuralNetworkClassifier.

source
+ verbosity=0)

See also NeuralNetworkClassifier.

source
diff --git a/dev/interface/Multitarget Regression/index.html b/dev/interface/Multitarget Regression/index.html index 17b774c1..5e3ceb90 100644 --- a/dev/interface/Multitarget Regression/index.html +++ b/dev/interface/Multitarget Regression/index.html @@ -1,7 +1,8 @@ -Multi-Target Regression · MLJFlux
MLJFlux.MultitargetNeuralNetworkRegressorType
MultitargetNeuralNetworkRegressor

A model type for constructing a multitarget neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

MultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor pkg=MLJFlux

Do model = MultitargetNeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in MultitargetNeuralNetworkRegressor(builder=...).

MultitargetNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a multi-valued Continuous target, represented as a table, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any table or matrix of output targets whose element scitype is Continuous; check column scitypes with schema(y). If y is a Matrix, it is assumed to have columns corresponding to variables and rows corresponding to observations.

Hyper-parameters

  • builder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: Linear, Short, and MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:

    • Flux.mse

    • Flux.mae

    • Flux.msle

    • Flux.huber_loss

    Currently MLJ measures are not supported as loss functions here.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increassing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew having the same scitype as X above. Predictions are deterministic.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we apply a multi-target regression model to synthetic data:

using MLJ
+Multi-Target Regression · MLJFlux
MLJFlux.MultitargetNeuralNetworkRegressorType
MultitargetNeuralNetworkRegressor

A model type for constructing a multitarget neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

MultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor pkg=MLJFlux

Do model = MultitargetNeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in MultitargetNeuralNetworkRegressor(builder=...).

MultitargetNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a multi-valued Continuous target, represented as a table, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.

  • y is the target, which can be any table or matrix of output targets whose element scitype is Continuous; check column scitypes with schema(y). If y is a Matrix, it is assumed to have columns corresponding to variables and rows corresponding to observations.

Hyper-parameters

  • builder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: Linear, Short, and MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:

    • Flux.mse

    • Flux.mae

    • Flux.msle

    • Flux.huber_loss

    Currently MLJ measures are not supported as loss functions here.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew having the same scitype as X above. Predictions are deterministic.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we apply a multi-target regression model to synthetic data:

using MLJ
 import MLJFlux
-using Flux

First, we generate some synthetic data (needs MLJBase 0.20.16 or higher):

X, y = make_regression(100, 9; n_targets = 2) # both tables
+using Flux
+import Optimisers

First, we generate some synthetic data (needs MLJBase 0.20.16 or higher):

X, y = make_regression(100, 9; n_targets = 2) # both tables
 schema(y)
 schema(X)

Splitting off a test set:

(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);

Next, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features and n_out the number of target variables (both known at fit! time), while rng is a proxy for a RNG (which will be passed from the rng field of model defined below).

builder = MLJFlux.@builder begin
     init=Flux.glorot_uniform(rng)
@@ -15,7 +16,7 @@
 fit!(mach, verbosity=2)
 
 # first element initial loss, 2:end per epoch training losses
-report(mach).transformed_target_model_deterministic.model.training_losses

For experimenting with learning rate, see the NeuralNetworkRegressor example.

pipe.transformed_target_model_deterministic.model.optimiser.eta = 0.0001

With the learning rate fixed, we can now compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:

# custom MLJ loss:
+report(mach).transformed_target_model_deterministic.model.training_losses

For experimenting with learning rate, see the NeuralNetworkRegressor example.

pipe.transformed_target_model_deterministic.model.optimiser = Optimisers.Adam(0.0001)

With the learning rate fixed, we can now compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:

# custom MLJ loss:
 multi_loss(yhat, y) = l2(MLJ.matrix(yhat), MLJ.matrix(y))
 
 # CV estimate, based on `(X, y)`:
@@ -24,4 +25,4 @@
 # loss for `(Xtest, test)`:
 fit!(mach) # trains on all data `(X, y)`
 yhat = predict(mach, Xtest)
-multi_loss(yhat, ytest)

See also NeuralNetworkRegressor

source
+multi_loss(yhat, ytest)

See also NeuralNetworkRegressor

source
diff --git a/dev/interface/Regression/index.html b/dev/interface/Regression/index.html index 138508d3..edbf7aeb 100644 --- a/dev/interface/Regression/index.html +++ b/dev/interface/Regression/index.html @@ -1,11 +1,12 @@ -Regression · MLJFlux
MLJFlux.NeuralNetworkRegressorType
NeuralNetworkRegressor

A model type for constructing a neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux

Do model = NeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkRegressor(builder=...).

NeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a Continuous target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.
  • y is the target, which can be any AbstractVector whose element scitype is Continuous; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:

    • Flux.mse

    • Flux.mae

    • Flux.msle

    • Flux.huber_loss

    Currently MLJ measures are not supported as loss functions here.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and

    1. Increasing batch size may accelerate training if acceleration=CUDALibs() and a

    GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalized if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a regression model for the Boston house price dataset.

using MLJ
+Regression · MLJFlux
MLJFlux.NeuralNetworkRegressorType
NeuralNetworkRegressor

A model type for constructing a neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.

From MLJ, the type can be imported using

NeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux

Do model = NeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkRegressor(builder=...).

NeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a Continuous target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.

Training data

In MLJ or MLJBase, bind an instance model to data with

mach = machine(model, X, y)

Here:

  • X is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.
  • y is the target, which can be any AbstractVector whose element scitype is Continuous; check the scitype with scitype(y)

Train the machine with fit!(mach, rows=...).

Hyper-parameters

  • builder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.

  • optimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.

  • loss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:

    • Flux.mse

    • Flux.mae

    • Flux.msle

    • Flux.huber_loss

    Currently MLJ measures are not supported as loss functions here.

  • epochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.

  • batch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increasing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.

  • lambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.

  • alpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.

  • rng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().

  • optimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.

  • acceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().

Operations

  • predict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above.

Fitted parameters

The fields of fitted_params(mach) are:

  • chain: The trained "chain" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.

Report

The fields of report(mach) are:

  • training_losses: A vector of training losses (penalized if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.

Examples

In this example we build a regression model for the Boston house price dataset.

using MLJ
 import MLJFlux
-using Flux

First, we load in the data: The :MEDV column becomes the target vector y, and all remaining columns go into a table X, with the exception of :CHAS:

data = OpenML.load(531); # Loads from https://www.openml.org/d/531
+using Flux
+import Optimisers

First, we load in the data: The :MEDV column becomes the target vector y, and all remaining columns go into a table X, with the exception of :CHAS:

data = OpenML.load(531); # Loads from https://www.openml.org/d/531
 y, X = unpack(data, ==(:MEDV), !=(:CHAS); rng=123);
 
 scitype(y)
-schema(X)

Since MLJFlux models do not handle ordered factors, we'll treat :RAD as Continuous:

X = coerce(X, :RAD=>Continuous)

Splitting off a test set:

(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);

Next, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features (which will be known at fit! time) and rng is a proxy for a RNG (which will be passed from the rng field of model defined below). We also have the parameter n_out which is the number of output features. As we are doing single target regression, the value passed will always be 1, but the builder we define will also work for MultitargetNeuralRegressor.

builder = MLJFlux.@builder begin
+schema(X)

Since MLJFlux models do not handle ordered factors, we'll treat :RAD as Continuous:

X = coerce(X, :RAD=>Continuous)

Splitting off a test set:

(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);

Next, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features (which will be known at fit! time) and rng is a proxy for a RNG (which will be passed from the rng field of model defined below). We also have the parameter n_out which is the number of output features. As we are doing single target regression, the value passed will always be 1, but the builder we define will also work for MultitargetNeuralNetworkRegressor.

builder = MLJFlux.@builder begin
     init=Flux.glorot_uniform(rng)
     Chain(
         Dense(n_in, 64, relu, init=init),
@@ -27,7 +28,7 @@
 plt=plot()
 
 foreach(rates) do η
-  pipe.transformed_target_model_deterministic.model.optimiser.eta = η
+  pipe.transformed_target_model_deterministic.model.optimiser = Optimisers.Adam(η)
   fit!(mach, force=true, verbosity=0)
   losses =
       report(mach).transformed_target_model_deterministic.model.training_losses[3:end]
@@ -36,10 +37,10 @@
 
 plt
 
-pipe.transformed_target_model_deterministic.model.optimiser.eta = 0.0001

With the learning rate fixed, we compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:

# CV estimate, based on `(X, y)`:
+pipe.transformed_target_model_deterministic.model.optimiser.eta = Optimisers.Adam(0.0001)

With the learning rate fixed, we compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:

# CV estimate, based on `(X, y)`:
 evaluate!(mach, resampling=CV(nfolds=5), measure=l2)
 
 # loss for `(Xtest, test)`:
 fit!(mach) # train on `(X, y)`
 yhat = predict(mach, Xtest)
-l2(yhat, ytest)

These losses, for the pipeline model, refer to the target on the original, unstandardized, scale.

For implementing stopping criterion and other iteration controls, refer to examples linked from the MLJFlux documentation.

See also MultitargetNeuralNetworkRegressor

source
+l2(yhat, ytest)

These losses, for the pipeline model, refer to the target on the original, unstandardized, scale.

For implementing stopping criterion and other iteration controls, refer to examples linked from the MLJFlux documentation.

See also MultitargetNeuralNetworkRegressor

source
diff --git a/dev/interface/Summary/index.html b/dev/interface/Summary/index.html index c4812350..ef8e4a15 100644 --- a/dev/interface/Summary/index.html +++ b/dev/interface/Summary/index.html @@ -1,5 +1,5 @@ -Summary · MLJFlux

Models

MLJFlux provides four model types, for use with input features X and targets y of the scientific type indicated in the table below. The parameters n_in, n_out and n_channels refer to information passed to the builder, as described under Defining a new builder below.

Model TypePrediction typescitype(X) <: _scitype(y) <: _
NeuralNetworkRegressorDeterministicTable(Continuous) with n_in columnsAbstractVector{<:Continuous) (n_out = 1)
MultitargetNeuralNetworkRegressorDeterministicTable(Continuous) with n_in columns<: Table(Continuous) with n_out columns
NeuralNetworkClassifierProbabilistic<:Table(Continuous) with n_in columnsAbstractVector{<:Finite} with n_out classes
NeuralNetworkBinaryClassifierProbabilistic<:Table(Continuous) with n_in columnsAbstractVector{<:Finite{2}} (n_out = 2)
ImageClassifierProbabilisticAbstractVector(<:Image{W,H}) with n_in = (W, H)AbstractVector{<:Finite} with n_out classes
See definition of "model"

In MLJ a model is a mutable struct storing hyper-parameters for some learning algorithm indicated by the model name, and that's all. In particular, an MLJ model does not store learned parameters.

Difference in Definition

In Flux the term "model" has another meaning. However, as all Flux "models" used in MLJFLux are Flux.Chain objects, we call them chains, and restrict use of "model" to models in the MLJ sense.

Dealing with non-tabular input

Any AbstractMatrix{<:AbstractFloat} object Xmat can be forced to have scitype Table(Continuous) by replacing it with X = MLJ.table(Xmat). Furthermore, this wrapping, and subsequent unwrapping under the hood, will compile to a no-op. At present this includes support for sparse matrix data, but the implementation has not been optimized for sparse data at this time and so should be used with caution.

Instructions for coercing common image formats into some AbstractVector{<:Image} are here.

Fitting and warm restarts

MLJ machines cache state enabling the "warm restart" of model training, as demonstrated in the incremental training example. In the case of MLJFlux models, fit!(mach) will use a warm restart if:

  • only model.epochs has changed since the last call; or

  • only model.epochs or model.optimiser have changed since the last call and model.optimiser_changes_trigger_retraining == false (the default) (the "state" part of the optimiser is ignored in this comparison). This allows one to dynamically modify learning rates, for example.

Here model=mach.model is the associated MLJ model.

The warm restart feature makes it possible to apply early stopping criteria, as defined in EarlyStopping.jl. For an example, see /examples/mnist/. (Eventually, this will be handled by an MLJ model wrapper for controlling arbitrary iterative models.)

Model Hyperparameters.

All models share the following hyper-parameters:

Hyper-parameterDescriptionDefault
builderDefault builder for models.MLJFlux.Linear(σ=Flux.relu) (regressors) or MLJFlux.Short(n_hidden=0, dropout=0.5, σ=Flux.σ) (classifiers)
optimiserThe optimiser to use for training.Flux.ADAM()
lossThe loss function used for training.Flux.mse (regressors) and Flux.crossentropy (classifiers)
n_epochsNumber of epochs to train for.10
batch_sizeThe batch size for the data.1
lambdaThe regularization strength. Range = [0, ∞).0
alphaThe L2/L1 mix of regularization. Range = [0, 1].0
rngThe random number generator (RNG) passed to builders, for weight initialization, for example. Can be any AbstractRNG or the seed (integer) for a MersenneTwister that is reset on every cold restart of model (machine) training.GLOBAL_RNG
accelerationUse CUDALibs() for training on GPU; default is CPU1().CPU1()
optimiser_changes_trigger_retrainingTrue if fitting an associated machine should trigger retraining from scratch whenever the optimiser changes.false

The classifiers have an additional hyperparameter finaliser (default = Flux.softmax) which is the operation applied to the unnormalized output of the final layer to obtain probabilities (outputs summing to one). Default = Flux.softmax. It should return a vector of the same length as its input.

Loss Functions

Currently, the loss function specified by loss=... is applied internally by Flux and needs to conform to the Flux API. You cannot, for example, supply one of MLJ's probabilistic loss functions, such as MLJ.cross_entropy to one of the classifier constructors.

That said, you can only use MLJ loss functions or metrics in evaluation meta-algorithms (such as cross validation) and they will work even if the underlying model comes from MLJFlux.

More on accelerated training with GPUs

As in the table, when instantiating a model for training on a GPU, specify acceleration=CUDALibs(), as in

using MLJ
+Summary · MLJFlux

Models

MLJFlux provides four model types, for use with input features X and targets y of the scientific type indicated in the table below. The parameters n_in, n_out and n_channels refer to information passed to the builder, as described under Defining Custom Builders.

Model TypePrediction typescitype(X) <: _scitype(y) <: _
NeuralNetworkRegressorDeterministicTable(Continuous) with n_in columnsAbstractVector{<:Continuous) (n_out = 1)
MultitargetNeuralNetworkRegressorDeterministicTable(Continuous) with n_in columns<: Table(Continuous) with n_out columns
NeuralNetworkClassifierProbabilistic<:Table(Continuous) with n_in columnsAbstractVector{<:Finite} with n_out classes
NeuralNetworkBinaryClassifierProbabilistic<:Table(Continuous) with n_in columnsAbstractVector{<:Finite{2}} (n_out = 2)
ImageClassifierProbabilisticAbstractVector(<:Image{W,H}) with n_in = (W, H)AbstractVector{<:Finite} with n_out classes
What exactly is a "model"?

In MLJ a model is a mutable struct storing hyper-parameters for some learning algorithm indicated by the model name, and that's all. In particular, an MLJ model does not store learned parameters.

Difference in Definition

In Flux the term "model" has another meaning. However, as all Flux "models" used in MLJFLux are Flux.Chain objects, we call them chains, and restrict use of "model" to models in the MLJ sense.

Dealing with non-tabular input

Any AbstractMatrix{<:AbstractFloat} object Xmat can be forced to have scitype Table(Continuous) by replacing it with X = MLJ.table(Xmat). Furthermore, this wrapping, and subsequent unwrapping under the hood, will compile to a no-op. At present this includes support for sparse matrix data, but the implementation has not been optimized for sparse data at this time and so should be used with caution.

Instructions for coercing common image formats into some AbstractVector{<:Image} are here.

Fitting and warm restarts

MLJ machines cache state enabling the "warm restart" of model training, as demonstrated in the incremental training example. In the case of MLJFlux models, fit!(mach) will use a warm restart if:

  • only model.epochs has changed since the last call; or

  • only model.epochs or model.optimiser have changed since the last call and model.optimiser_changes_trigger_retraining == false (the default) (the "state" part of the optimiser is ignored in this comparison). This allows one to dynamically modify learning rates, for example.

Here model=mach.model is the associated MLJ model.

The warm restart feature makes it possible to externally control iteration. See, for example, Early Stopping with MLJFlux and Using MLJ to classifiy the MNIST image dataset.

Model Hyperparameters.

All models share the following hyper-parameters. See individual model docstrings for a full list.

Hyper-parameterDescriptionDefault
builderDefault builder for models.MLJFlux.Linear(σ=Flux.relu) (regressors) or MLJFlux.Short(n_hidden=0, dropout=0.5, σ=Flux.σ) (classifiers)
optimiserThe optimiser to use for training.Optimiser.Adam()
lossThe loss function used for training.Flux.mse (regressors) and Flux.crossentropy (classifiers)
n_epochsNumber of epochs to train for.10
batch_sizeThe batch size for the data.1
lambdaThe regularization strength. Range = [0, ∞).0
alphaThe L2/L1 mix of regularization. Range = [0, 1].0
rngThe random number generator (RNG) passed to builders, for weight initialization, for example. Can be any AbstractRNG or the seed (integer) for a Xoshirio that is reset on every cold restart of model (machine) training.GLOBAL_RNG
accelerationUse CUDALibs() for training on GPU; default is CPU1().CPU1()
optimiser_changes_trigger_retrainingTrue if fitting an associated machine should trigger retraining from scratch whenever the optimiser changes.false

The classifiers have an additional hyperparameter finaliser (default is Flux.softmax, or Flux.σ in the binary case) which is the operation applied to the unnormalized output of the final layer to obtain probabilities (outputs summing to one). It should return a vector of the same length as its input.

Loss Functions

Currently, the loss function specified by loss=... is applied internally by Flux and needs to conform to the Flux API. You cannot, for example, supply one of MLJ's probabilistic loss functions, such as MLJ.cross_entropy to one of the classifier constructors.

That said, you can only use MLJ loss functions or metrics in evaluation meta-algorithms (such as cross validation) and they will work even if the underlying model comes from MLJFlux.

More on accelerated training with GPUs

As in the table, when instantiating a model for training on a GPU, specify acceleration=CUDALibs(), as in

using MLJ
 ImageClassifier = @load ImageClassifier
 model = ImageClassifier(epochs=10, acceleration=CUDALibs())
-mach = machine(model, X, y) |> fit!

In this example, the data X, y is copied onto the GPU under the hood on the call to fit! and cached for use in any warm restart (see above). The Flux chain used in training is always copied back to the CPU at then conclusion of fit!, and made available as fitted_params(mach).

Built-in builders

As for the builder argument, the following builders are provided out-of-the-box:

BuilderDescription
MLJFlux.MLP(hidden=(10,))General multi-layer perceptron
MLJFlux.Short(n_hidden=0, dropout=0.5, σ=sigmoid)Fully connected network with one hidden layer and dropout
MLJFlux.Linear(σ=relu)Vanilla linear network with no hidden layers and activation function σ

See the following sections to learn more about the interface for the builders and models.

+mach = machine(model, X, y) |> fit!

In this example, the data X, y is copied onto the GPU under the hood on the call to fit! and cached for use in any warm restart (see above). The Flux chain used in training is always copied back to the CPU at then conclusion of fit!, and made available as fitted_params(mach).

Builders

BuilderDescription
MLJFlux.MLP(hidden=(10,))General multi-layer perceptron
MLJFlux.Short(n_hidden=0, dropout=0.5, σ=sigmoid)Fully connected network with one hidden layer and dropout
MLJFlux.Linear(σ=relu)Vanilla linear network with no hidden layers and activation function σ
MLJFlux.@builderMacro for customized builders
diff --git a/dev/objects.inv b/dev/objects.inv index 91c611479180f5686bc28f9f8005be519db4a5cf..97c005e7038f785563b769d557fb127d7ddffcb4 100644 GIT binary patch delta 1681 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 EA`Z2JJOBUy diff --git a/dev/search_index.js b/dev/search_index.js index 0c66de4e..5532c879 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"contributing/#Adding-new-models-to-MLJFlux","page":"Contributing","title":"Adding new models to MLJFlux","text":"","category":"section"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"This section assumes familiarity with the MLJ model API","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"If one subtypes a new model type as either MLJFlux.MLJFluxProbabilistic or MLJFlux.MLJFluxDeterministic, then instead of defining new methods for MLJModelInterface.fit and MLJModelInterface.update one can make use of fallbacks by implementing the lower level methods shape, build, and fitresult. See the classifier source code for an example.","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"One still needs to implement a new predict method.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"EditURL = \"incremental.jl\"","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Incremental-Training-with-MLJFlux","page":"Incremental Training","title":"Incremental Training with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"In this workflow example we explore how to incrementally train MLJFlux models.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Basic-Imports","page":"Incremental Training","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Loading-and-Splitting-the-Data","page":"Incremental Training","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X) # To be compatible with type of network network parameters\n(X_train, X_test), (y_train, y_test) = partition((X, y), 0.8,\n multi = true,\n shuffle = true,\n rng=42);\nnothing #hide","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Instantiating-the-model","page":"Incremental Training","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=10,\n rng=42\n )","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Initial-round-of-training","page":"Incremental Training","title":"Initial round of training","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"mach = machine(clf, X_train, y_train)\nfit!(mach)","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Let's evaluate the training loss and validation accuracy","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"training_loss = cross_entropy(predict(mach, X_train), y_train)","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"val_acc = accuracy(predict_mode(mach, X_test), y_test)","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Poor performance it seems.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/#Incremental-Training","page":"Incremental Training","title":"Incremental Training","text":"","category":"section"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these hyperparameters and call fit again. It won't reset the model parameters before training.","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"clf.optimiser.eta = clf.optimiser.eta / 2\nclf.epochs = clf.epochs + 30\nfit!(mach, verbosity=2);\nnothing #hide","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"Let's evaluate the training loss and validation accuracy","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"training_loss = cross_entropy(predict(mach, X_train), y_train)","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"training_acc = accuracy(predict_mode(mach, X_test), y_test)","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"That's much better. If we are rather interested in resetting the model parameters before fitting, we can do fit(mach, force=true).","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"","category":"page"},{"location":"workflow examples/Incremental Training/incremental/","page":"Incremental Training","title":"Incremental Training","text":"This page was generated using Literate.jl.","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"EditURL = \"tuning.jl\"","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Neural-Architecture-Search-with-MLJFlux","page":"Neural Architecture Search","title":"Neural Architecture Search with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Neural Architecture Search is (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency, in this example we will be using a simple random search.","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Basic-Imports","page":"Neural Architecture Search","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nusing RDatasets: RDatasets # Dataset source\nusing DataFrames # To view tuning results in a table","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Loading-and-Splitting-the-Data","page":"Neural Architecture Search","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng = 123);\nX = Float32.(X); # To be compatible with type of network network parameters\nfirst(X, 5)","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Instantiating-the-model","page":"Neural Architecture Search","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Now let's construct our model. This follows a similar setup the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = \"MLJFlux\"\nclf = NeuralNetworkClassifier(\n\tbuilder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),\n\toptimiser = Flux.ADAM(0.01),\n\tbatch_size = 8,\n\tepochs = 10,\n\trng = 42,\n)","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Generating-Network-Architectures","page":"Neural Architecture Search","title":"Generating Network Architectures","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"We know that the MLP builder takes a tuple of the form (z_1 z_2 z_k) to define a network with k hidden layers and where the ith layer has z_i neurons. We will proceed by defining a function that can generate all possible networks with a specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons.","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"function generate_networks(;\n\tmin_neurons::Int,\n\tmax_neurons::Int,\n\tneuron_step::Int,\n\tnum_layers::Int,\n)\n\t# Define the range of neurons\n\tneuron_range = min_neurons:neuron_step:max_neurons\n\n\t# Empty list to store the network configurations\n\tnetworks = Vector{Tuple{Vararg{Int, num_layers}}}()\n\n\t# Recursive helper function to generate all combinations of tuples\n\tfunction generate_tuple(current_layers, remaining_layers)\n\t\tif remaining_layers > 0\n\t\t\tfor n in neuron_range\n\t\t\t\t# current_layers =[] then current_layers=[(min_neurons)],\n\t\t\t\t# [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...\n\t\t\t\t# for each of these we call generate_layers again which appends\n\t\t\t\t# the n combinations for each one of them\n\t\t\t\tgenerate_tuple(vcat(current_layers, [n]), remaining_layers - 1)\n\t\t\tend\n\t\telse\n\t\t\t# in the base case, no more layers to \"recurse on\"\n\t\t\t# and we just append the current_layers as a tuple\n\t\t\tpush!(networks, tuple(current_layers...))\n\t\tend\n\tend\n\n\t# Generate networks for the given number of layers\n\tgenerate_tuple([], num_layers)\n\n\treturn networks\nend","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"networks_space =\n\tgenerate_networks(min_neurons = 1, max_neurons = 64, neuron_step = 4, num_layers = 3)\n\nnetworks_space[1:5]","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Wrapping-the-Model-for-Tuning","page":"Neural Architecture Search","title":"Wrapping the Model for Tuning","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Let's use this array to define the range of hyperparameters and pass it along with the model to the TunedModel constructor.","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"r1 = range(clf, :(builder.hidden), values = networks_space)\n\ntuned_clf = TunedModel(\n\tmodel = clf,\n\ttuning = RandomSearch(),\n\tresampling = CV(nfolds = 4, rng = 42),\n\trange = [r1],\n\tmeasure = cross_entropy,\n\tn = 100, # searching over 100 random samples are enough\n);\nnothing #hide","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Performing-the-Search","page":"Neural Architecture Search","title":"Performing the Search","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically:","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"mach = machine(tuned_clf, X, y);\nfit!(mach, verbosity = 0);\nfitted_params(mach).best_model","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/#Analyzing-the-Search-Results","page":"Neural Architecture Search","title":"Analyzing the Search Results","text":"","category":"section"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Let's analyze the search results by converting the history array to a dataframe and viewing it:","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"history = report(mach).history\nhistory_df = DataFrame(\n\tmlp = [x[:model].builder for x in history],\n\tmeasurement = [x[:measurement][1] for x in history],\n)\nfirst(sort!(history_df, [order(:measurement)]), 10)","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"","category":"page"},{"location":"workflow examples/Basic Neural Architecture Search/tuning/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Multitarget Regression/","page":"Multi-Target Regression","title":"Multi-Target Regression","text":"MLJFlux.MultitargetNeuralNetworkRegressor","category":"page"},{"location":"interface/Multitarget Regression/#MLJFlux.MultitargetNeuralNetworkRegressor","page":"Multi-Target Regression","title":"MLJFlux.MultitargetNeuralNetworkRegressor","text":"MultitargetNeuralNetworkRegressor\n\nA model type for constructing a multitarget neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nMultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor pkg=MLJFlux\n\nDo model = MultitargetNeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in MultitargetNeuralNetworkRegressor(builder=...).\n\nMultitargetNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a multi-valued Continuous target, represented as a table, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any table or matrix of output targets whose element scitype is Continuous; check column scitypes with schema(y). If y is a Matrix, it is assumed to have columns corresponding to variables and rows corresponding to observations.\n\nHyper-parameters\n\nbuilder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: Linear, Short, and MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:\nFlux.mse\nFlux.mae\nFlux.msle\nFlux.huber_loss\nCurrently MLJ measures are not supported as loss functions here.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreassing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew having the same scitype as X above. Predictions are deterministic.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we apply a multi-target regression model to synthetic data:\n\nusing MLJ\nimport MLJFlux\nusing Flux\n\nFirst, we generate some synthetic data (needs MLJBase 0.20.16 or higher):\n\nX, y = make_regression(100, 9; n_targets = 2) # both tables\nschema(y)\nschema(X)\n\nSplitting off a test set:\n\n(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);\n\nNext, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features and n_out the number of target variables (both known at fit! time), while rng is a proxy for a RNG (which will be passed from the rng field of model defined below).\n\nbuilder = MLJFlux.@builder begin\n init=Flux.glorot_uniform(rng)\n Chain(\n Dense(n_in, 64, relu, init=init),\n Dense(64, 32, relu, init=init),\n Dense(32, n_out, init=init),\n )\nend\n\nInstantiating the regression model:\n\nMultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor\nmodel = MultitargetNeuralNetworkRegressor(builder=builder, rng=123, epochs=20)\n\nWe will arrange for standardization of the the target by wrapping our model in TransformedTargetModel, and standardization of the features by inserting the wrapped model in a pipeline:\n\npipe = Standardizer |> TransformedTargetModel(model, target=Standardizer)\n\nIf we fit with a high verbosity (>1), we will see the losses during training. We can also see the losses in the output of report(mach)\n\nmach = machine(pipe, X, y)\nfit!(mach, verbosity=2)\n\n# first element initial loss, 2:end per epoch training losses\nreport(mach).transformed_target_model_deterministic.model.training_losses\n\nFor experimenting with learning rate, see the NeuralNetworkRegressor example.\n\npipe.transformed_target_model_deterministic.model.optimiser.eta = 0.0001\n\nWith the learning rate fixed, we can now compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:\n\n# custom MLJ loss:\nmulti_loss(yhat, y) = l2(MLJ.matrix(yhat), MLJ.matrix(y))\n\n# CV estimate, based on `(X, y)`:\nevaluate!(mach, resampling=CV(nfolds=5), measure=multi_loss)\n\n# loss for `(Xtest, test)`:\nfit!(mach) # trains on all data `(X, y)`\nyhat = predict(mach, Xtest)\nmulti_loss(yhat, ytest)\n\nSee also NeuralNetworkRegressor\n\n\n\n\n\n","category":"type"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"EditURL = \"live-training.jl\"","category":"page"},{"location":"workflow examples/Live Training/live-training/#Incremental-Training-with-MLJFlux","page":"Live Training","title":"Incremental Training with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Live Training/live-training/#Basic-Imports","page":"Live Training","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing Plots # For training plot","category":"page"},{"location":"workflow examples/Live Training/live-training/#Loading-and-Splitting-the-Data","page":"Live Training","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"workflow examples/Live Training/live-training/#Instantiating-the-model","page":"Live Training","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=50,\n rng=42\n )","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration.","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"stop_conditions = [\n Step(1), # Repeatedly train for one iteration\n NumberLimit(100), # Don't train for more than 100 iterations\n]\n\nvalidation_losses = []\ngr(reuse=true) # use the same window for plots\nfunction plot_loss(loss)\n push!(validation_losses, loss)\n display(plot(validation_losses, label=\"validation loss\", xlim=(1, 100)))\n sleep(.01) # to catch up with the plots while they are being generated\nend\n\ncallbacks = [ WithLossDo(plot_loss),]\n\niterated_model = IteratedModel(model=clf,\n resampling=Holdout(), # Split the data internally into 0.7 training and 0.3 validation\n measures=log_loss,\n iteration_parameter=:(epochs),\n controls=vcat(stop_conditions, callbacks),\n retrain=true # no need to retrain on all data at the end\n )","category":"page"},{"location":"workflow examples/Live Training/live-training/#Live-Training","page":"Live Training","title":"Live Training","text":"","category":"section"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"Simply fitting the model is all we need","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"mach = machine(iterated_model, X, y)\nfit!(mach, force=true)","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"using Literate #src","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"","category":"page"},{"location":"workflow examples/Live Training/live-training/","page":"Live Training","title":"Live Training","text":"This page was generated using Literate.jl.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"EditURL = \"comparison.jl\"","category":"page"},{"location":"workflow examples/Comparison/comparison/#Model-Comparison-with-MLJFlux","page":"Model Comparison","title":"Model Comparison with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Comparison/comparison/#Basic-Imports","page":"Model Comparison","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing DataFrames # To visualize hyperparameter search results","category":"page"},{"location":"workflow examples/Comparison/comparison/#Loading-and-Splitting-the-Data","page":"Model Comparison","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);","category":"page"},{"location":"workflow examples/Comparison/comparison/#Instantiating-the-models","page":"Model Comparison","title":"Instantiating the models","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf1 = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=50,\n rng=42\n )","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Let's as well load and construct three other classical machine learning models:","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"BayesianLDA = @load BayesianLDA pkg=MultivariateStats\nclf2 = BayesianLDA()\nRandomForestClassifier = @load RandomForestClassifier pkg=DecisionTree\nclf3 = RandomForestClassifier()\nXGBoostClassifier = @load XGBoostClassifier pkg=XGBoost\nclf4 = XGBoostClassifier();","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"[ Info: For silent loading, specify `verbosity=0`. \nimport MLJMultivariateStatsInterface ✔\n[ Info: For silent loading, specify `verbosity=0`. \nimport MLJDecisionTreeInterface ✔\n[ Info: For silent loading, specify `verbosity=0`. \nimport MLJXGBoostInterface ✔\n","category":"page"},{"location":"workflow examples/Comparison/comparison/#Wrapping-One-of-the-Models-in-a-TunedModel","page":"Model Comparison","title":"Wrapping One of the Models in a TunedModel","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Instead of just comparing with four models with the default/given hyperparameters, we will give XGBoostClassifier an unfair advantage By wrapping it in a TunedModel that considers the best learning rate η for the model.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10)\ntuned_model_xg = TunedModel(\n model=clf4,\n ranges=[r1],\n tuning=Grid(resolution=10),\n resampling=CV(nfolds=5, rng=42),\n measure=cross_entropy,\n);","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters.","category":"page"},{"location":"workflow examples/Comparison/comparison/#Comparing-the-models","page":"Model Comparison","title":"Comparing the models","text":"","category":"section"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"We simply pass the four models to the models argument of the TunedModel construct","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"tuned_model = TunedModel(\n models=[clf1, clf2, clf3, tuned_model_xg],\n tuning=Explicit(),\n resampling=CV(nfolds=5, rng=42),\n measure=cross_entropy,\n);","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Then wrapping our tuned model in a machine and fitting it.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"mach = machine(tuned_model, X, y);\nfit!(mach, verbosity=0);","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"┌ Warning: Layer with Float32 parameters got Float64 input.\n│ The input will be converted, but any earlier layers may be very slow.\n│ layer = Dense(4 => 5, relu) # 25 parameters\n│ summary(x) = \"4×8 Matrix{Float64}\"\n└ @ Flux ~/.julia/packages/Flux/Wz6D4/src/layers/stateless.jl:60\n","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"Now let's see the history for more details on the performance for each of the models","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"history = report(mach).history\nhistory_df = DataFrame(mlp = [x[:model] for x in history], measurement = [x[:measurement][1] for x in history])\nsort!(history_df, [order(:measurement)])","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"
4×2 DataFrame
Rowmlpmeasurement
Probabil…Float64
1BayesianLDA(method = gevd, …)0.0610826
2RandomForestClassifier(max_depth = -1, …)0.106565
3NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)0.113266
4ProbabilisticTunedModel(model = XGBoostClassifier(test = 1, …), …)0.221056
","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"This is Occam's razor in practice.","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"","category":"page"},{"location":"workflow examples/Comparison/comparison/","page":"Model Comparison","title":"Model Comparison","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Regression/","page":"Regression","title":"Regression","text":"MLJFlux.NeuralNetworkRegressor","category":"page"},{"location":"interface/Regression/#MLJFlux.NeuralNetworkRegressor","page":"Regression","title":"MLJFlux.NeuralNetworkRegressor","text":"NeuralNetworkRegressor\n\nA model type for constructing a neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux\n\nDo model = NeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkRegressor(builder=...).\n\nNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a Continuous target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Continuous; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:\nFlux.mse\nFlux.mae\nFlux.msle\nFlux.huber_loss\nCurrently MLJ measures are not supported as loss functions here.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreasing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalized if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a regression model for the Boston house price dataset.\n\nusing MLJ\nimport MLJFlux\nusing Flux\n\nFirst, we load in the data: The :MEDV column becomes the target vector y, and all remaining columns go into a table X, with the exception of :CHAS:\n\ndata = OpenML.load(531); # Loads from https://www.openml.org/d/531\ny, X = unpack(data, ==(:MEDV), !=(:CHAS); rng=123);\n\nscitype(y)\nschema(X)\n\nSince MLJFlux models do not handle ordered factors, we'll treat :RAD as Continuous:\n\nX = coerce(X, :RAD=>Continuous)\n\nSplitting off a test set:\n\n(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);\n\nNext, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features (which will be known at fit! time) and rng is a proxy for a RNG (which will be passed from the rng field of model defined below). We also have the parameter n_out which is the number of output features. As we are doing single target regression, the value passed will always be 1, but the builder we define will also work for MultitargetNeuralRegressor.\n\nbuilder = MLJFlux.@builder begin\n init=Flux.glorot_uniform(rng)\n Chain(\n Dense(n_in, 64, relu, init=init),\n Dense(64, 32, relu, init=init),\n Dense(32, n_out, init=init),\n )\nend\n\nInstantiating a model:\n\nNeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux\nmodel = NeuralNetworkRegressor(\n builder=builder,\n rng=123,\n epochs=20\n)\n\nWe arrange for standardization of the the target by wrapping our model in TransformedTargetModel, and standardization of the features by inserting the wrapped model in a pipeline:\n\npipe = Standardizer |> TransformedTargetModel(model, target=Standardizer)\n\nIf we fit with a high verbosity (>1), we will see the losses during training. We can also see the losses in the output of report(mach).\n\nmach = machine(pipe, X, y)\nfit!(mach, verbosity=2)\n\n# first element initial loss, 2:end per epoch training losses\nreport(mach).transformed_target_model_deterministic.model.training_losses\n\nExperimenting with learning rate\n\nWe can visually compare how the learning rate affects the predictions:\n\nusing Plots\n\nrates = rates = [5e-5, 1e-4, 0.005, 0.001, 0.05]\nplt=plot()\n\nforeach(rates) do η\n pipe.transformed_target_model_deterministic.model.optimiser.eta = η\n fit!(mach, force=true, verbosity=0)\n losses =\n report(mach).transformed_target_model_deterministic.model.training_losses[3:end]\n plot!(1:length(losses), losses, label=η)\nend\n\nplt\n\npipe.transformed_target_model_deterministic.model.optimiser.eta = 0.0001\n\nWith the learning rate fixed, we compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:\n\n# CV estimate, based on `(X, y)`:\nevaluate!(mach, resampling=CV(nfolds=5), measure=l2)\n\n# loss for `(Xtest, test)`:\nfit!(mach) # train on `(X, y)`\nyhat = predict(mach, Xtest)\nl2(yhat, ytest)\n\nThese losses, for the pipeline model, refer to the target on the original, unstandardized, scale.\n\nFor implementing stopping criterion and other iteration controls, refer to examples linked from the MLJFlux documentation.\n\nSee also MultitargetNeuralNetworkRegressor\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.Linear","category":"page"},{"location":"interface/Builders/#MLJFlux.Linear","page":"Builders","title":"MLJFlux.Linear","text":"Linear(; σ=Flux.relu)\n\nMLJFlux builder that constructs a fully connected two layer network with activation function σ. The number of input and output nodes is determined from the data. Weights are initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.Short","category":"page"},{"location":"interface/Builders/#MLJFlux.Short","page":"Builders","title":"MLJFlux.Short","text":"Short(; n_hidden=0, dropout=0.5, σ=Flux.sigmoid)\n\nMLJFlux builder that constructs a full-connected three-layer network using n_hidden nodes in the hidden layer and the specified dropout (defaulting to 0.5). An activation function σ is applied between the hidden and final layers. If n_hidden=0 (the default) then n_hidden is the geometric mean of the number of input and output nodes. The number of input and output nodes is determined from the data.\n\nEach layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.MLP","category":"page"},{"location":"interface/Builders/#MLJFlux.MLP","page":"Builders","title":"MLJFlux.MLP","text":"MLP(; hidden=(100,), σ=Flux.relu)\n\nMLJFlux builder that constructs a Multi-layer perceptron network. The ith element of hidden represents the number of neurons in the ith hidden layer. An activation function σ is applied between each layer.\n\nEach layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.@builder","category":"page"},{"location":"interface/Builders/#MLJFlux.@builder","page":"Builders","title":"MLJFlux.@builder","text":"@builder neural_net\n\nCreates a builder for neural_net. The variables rng, n_in, n_out and n_channels can be used to create builders for any random number generator rng, input and output sizes n_in and n_out and number of input channels n_channels.\n\nExamples\n\njulia> import MLJFlux: @builder;\n\njulia> nn = NeuralNetworkRegressor(builder = @builder(Chain(Dense(n_in, 64, relu),\n Dense(64, 32, relu),\n Dense(32, n_out))));\n\njulia> conv_builder = @builder begin\n front = Chain(Conv((3, 3), n_channels => 16), Flux.flatten)\n d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n Chain(front, Dense(d, n_out));\n end\n\njulia> conv_nn = NeuralNetworkRegressor(builder = conv_builder);\n\n\n\n\n\n","category":"macro"},{"location":"interface/Image Classification/","page":"Image Classification","title":"Image Classification","text":"MLJFlux.ImageClassifier","category":"page"},{"location":"interface/Image Classification/#MLJFlux.ImageClassifier","page":"Image Classification","title":"MLJFlux.ImageClassifier","text":"ImageClassifier\n\nA model type for constructing a image classifier, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nImageClassifier = @load ImageClassifier pkg=MLJFlux\n\nDo model = ImageClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in ImageClassifier(builder=...).\n\nImageClassifier classifies images using a neural network adapted to the type of images provided (color or gray scale). Predictions are probabilistic. Users provide a recipe for constructing the network, based on properties of the image encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is any AbstractVector of images with ColorImage or GrayImage scitype; check the scitype with scitype(X) and refer to ScientificTypes.jl documentation on coercing typical image formats into an appropriate type.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass; check the scitype with scitype(y).\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder: An MLJFlux builder that constructs the neural network. The fallback builds a depth-16 VGG architecture adapted to the image size and number of target classes, with no batch normalization; see the Metalhead.jl documentation for details. See the example below for a user-specified builder. A convenience macro @builder is also available. See also finaliser below.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.crossentropy: Standard multiclass classification loss, also known as the log loss.\nFlux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreassing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we use MLJFlux and a custom builder to classify the MNIST image dataset.\n\nusing MLJ\nusing Flux\nimport MLJFlux\nimport MLJIteration # for `skip` control\n\nFirst we want to download the MNIST dataset, and unpack into images and labels:\n\nimport MLDatasets: MNIST\ndata = MNIST(split=:train)\nimages, labels = data.features, data.targets\n\nIn MLJ, integers cannot be used for encoding categorical data, so we must coerce them into the Multiclass scitype:\n\nlabels = coerce(labels, Multiclass);\n\nAbove images is a single array but MLJFlux requires the images to be a vector of individual image arrays:\n\nimages = coerce(images, GrayImage);\nimages[1]\n\nWe start by defining a suitable builder object. This is a recipe for building the neural network. Our builder will work for images of any (constant) size, whether they be color or black and white (ie, single or multi-channel). The architecture always consists of six alternating convolution and max-pool layers, and a final dense layer; the filter size and the number of channels after each convolution layer is customizable.\n\nimport MLJFlux\n\nstruct MyConvBuilder\n filter_size::Int\n channels1::Int\n channels2::Int\n channels3::Int\nend\n\nmake2d(x::AbstractArray) = reshape(x, :, size(x)[end])\n\nfunction MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n mod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n p = div(k - 1, 2) # padding to preserve image size\n init = Flux.glorot_uniform(rng)\n front = Chain(\n Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),\n MaxPool((2 ,2)),\n make2d)\n d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n return Chain(front, Dense(d, n_out, init=init))\nend\n\nIt is important to note that in our build function, there is no final softmax. This is applied by default in all MLJFlux classifiers (override this using the finaliser hyperparameter).\n\nNow that our builder is defined, we can instantiate the actual MLJFlux model. If you have a GPU, you can substitute in acceleration=CUDALibs() below to speed up training.\n\nImageClassifier = @load ImageClassifier pkg=MLJFlux\nclf = ImageClassifier(builder=MyConvBuilder(3, 16, 32, 32),\n batch_size=50,\n epochs=10,\n rng=123)\n\nYou can add Flux options such as optimiser and loss in the snippet above. Currently, loss must be a flux-compatible loss, and not an MLJ measure.\n\nNext, we can bind the model with the data in a machine, and train using the first 500 images:\n\nmach = machine(clf, images, labels);\nfit!(mach, rows=1:500, verbosity=2);\nreport(mach)\nchain = fitted_params(mach)\nFlux.params(chain)[2]\n\nWe can tack on 20 more epochs by modifying the epochs field, and iteratively fit some more:\n\nclf.epochs = clf.epochs + 20\nfit!(mach, rows=1:500, verbosity=2);\n\nWe can also make predictions and calculate an out-of-sample loss estimate, using any MLJ measure (loss/score):\n\npredicted_labels = predict(mach, rows=501:1000);\ncross_entropy(predicted_labels, labels[501:1000])\n\nThe preceding fit!/predict/evaluate workflow can be alternatively executed as follows:\n\nevaluate!(mach,\n resampling=Holdout(fraction_train=0.5),\n measure=cross_entropy,\n rows=1:1000,\n verbosity=0)\n\nSee also NeuralNetworkClassifier.\n\n\n\n\n\n","category":"type"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"EditURL = \"tuning.jl\"","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Hyperparameter-Tuning-with-MLJFlux","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters.","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Basic-Imports","page":"Hyperparameter Tuning","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing Plots # To plot tuning results","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Loading-and-Splitting-the-Data","page":"Hyperparameter Tuning","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Instantiating-the-model","page":"Hyperparameter Tuning","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Now let's construct our model. This follows a similar setup the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=10,\n rng=42\n )","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Hyperparameter-Tuning-Example","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning Example","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation.","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"We start by defining the hyperparameter ranges","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"r1 = range(clf, :batch_size, lower=1, upper=64)\nr2 = range(clf, :(optimiser.eta), lower=10^-4, upper=10^0, scale=:log10)","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then passing the ranges along with the model and other arguments to the TunedModel constructor.","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"tuned_model = TunedModel(\n model=clf,\n tuning=Grid(goal=25),\n resampling=CV(nfolds=5, rng=42),\n range=[r1, r2],\n measure=cross_entropy,\n);\nnothing #hide","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then wrapping our tuned model in a machine and fitting it.","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"mach = machine(tuned_model, X, y);\nfit!(mach, verbosity=0);\nnothing #hide","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Let's check out the best performing model:","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"fitted_params(mach).best_model","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"We can visualize the hyperparameter search results as follows","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"plot(mach)","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/#Learning-Curves","page":"Hyperparameter Tuning","title":"Learning Curves","text":"","category":"section"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"First define the range and wrap it in a learning curve","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"r = range(clf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(clf, X, y,\n range=r,\n resampling=CV(nfolds=4, rng=42),\n measure=cross_entropy)","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then plot the curve","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"plot(curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\")","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"","category":"page"},{"location":"workflow examples/Hyperparameter Tuning/tuning/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Summary/#Models","page":"Summary","title":"Models","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"MLJFlux provides four model types, for use with input features X and targets y of the scientific type indicated in the table below. The parameters n_in, n_out and n_channels refer to information passed to the builder, as described under Defining a new builder below.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Model Type Prediction type scitype(X) <: _ scitype(y) <: _\nNeuralNetworkRegressor Deterministic Table(Continuous) with n_in columns AbstractVector{<:Continuous) (n_out = 1)\nMultitargetNeuralNetworkRegressor Deterministic Table(Continuous) with n_in columns <: Table(Continuous) with n_out columns\nNeuralNetworkClassifier Probabilistic <:Table(Continuous) with n_in columns AbstractVector{<:Finite} with n_out classes\nNeuralNetworkBinaryClassifier Probabilistic <:Table(Continuous) with n_in columns AbstractVector{<:Finite{2}} (n_out = 2)\nImageClassifier Probabilistic AbstractVector(<:Image{W,H}) with n_in = (W, H) AbstractVector{<:Finite} with n_out classes","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
See definition of \"model\"","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"In MLJ a model is a mutable struct storing hyper-parameters for some learning algorithm indicated by the model name, and that's all. In particular, an MLJ model does not store learned parameters.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"warning: Difference in Definition\nIn Flux the term \"model\" has another meaning. However, as all Flux \"models\" used in MLJFLux are Flux.Chain objects, we call them chains, and restrict use of \"model\" to models in the MLJ sense.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
Dealing with non-tabular input","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Any AbstractMatrix{<:AbstractFloat} object Xmat can be forced to have scitype Table(Continuous) by replacing it with X = MLJ.table(Xmat). Furthermore, this wrapping, and subsequent unwrapping under the hood, will compile to a no-op. At present this includes support for sparse matrix data, but the implementation has not been optimized for sparse data at this time and so should be used with caution.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Instructions for coercing common image formats into some AbstractVector{<:Image} are here.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
Fitting and warm restarts","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"MLJ machines cache state enabling the \"warm restart\" of model training, as demonstrated in the incremental training example. In the case of MLJFlux models, fit!(mach) will use a warm restart if:","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"only model.epochs has changed since the last call; or\nonly model.epochs or model.optimiser have changed since the last call and model.optimiser_changes_trigger_retraining == false (the default) (the \"state\" part of the optimiser is ignored in this comparison). This allows one to dynamically modify learning rates, for example.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Here model=mach.model is the associated MLJ model.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"The warm restart feature makes it possible to apply early stopping criteria, as defined in EarlyStopping.jl. For an example, see /examples/mnist/. (Eventually, this will be handled by an MLJ model wrapper for controlling arbitrary iterative models.)","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/#Model-Hyperparameters.","page":"Summary","title":"Model Hyperparameters.","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"All models share the following hyper-parameters:","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Hyper-parameter Description Default\nbuilder Default builder for models. MLJFlux.Linear(σ=Flux.relu) (regressors) or MLJFlux.Short(n_hidden=0, dropout=0.5, σ=Flux.σ) (classifiers)\noptimiser The optimiser to use for training. Flux.ADAM()\nloss The loss function used for training. Flux.mse (regressors) and Flux.crossentropy (classifiers)\nn_epochs Number of epochs to train for. 10\nbatch_size The batch size for the data. 1\nlambda The regularization strength. Range = [0, ∞). 0\nalpha The L2/L1 mix of regularization. Range = [0, 1]. 0\nrng The random number generator (RNG) passed to builders, for weight initialization, for example. Can be any AbstractRNG or the seed (integer) for a MersenneTwister that is reset on every cold restart of model (machine) training. GLOBAL_RNG\nacceleration Use CUDALibs() for training on GPU; default is CPU1(). CPU1()\noptimiser_changes_trigger_retraining True if fitting an associated machine should trigger retraining from scratch whenever the optimiser changes. false","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"The classifiers have an additional hyperparameter finaliser (default = Flux.softmax) which is the operation applied to the unnormalized output of the final layer to obtain probabilities (outputs summing to one). Default = Flux.softmax. It should return a vector of the same length as its input.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"note: Loss Functions\nCurrently, the loss function specified by loss=... is applied internally by Flux and needs to conform to the Flux API. You cannot, for example, supply one of MLJ's probabilistic loss functions, such as MLJ.cross_entropy to one of the classifier constructors. ","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"That said, you can only use MLJ loss functions or metrics in evaluation meta-algorithms (such as cross validation) and they will work even if the underlying model comes from MLJFlux.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
More on accelerated training with GPUs","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"As in the table, when instantiating a model for training on a GPU, specify acceleration=CUDALibs(), as in","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"using MLJ\nImageClassifier = @load ImageClassifier\nmodel = ImageClassifier(epochs=10, acceleration=CUDALibs())\nmach = machine(model, X, y) |> fit!","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"In this example, the data X, y is copied onto the GPU under the hood on the call to fit! and cached for use in any warm restart (see above). The Flux chain used in training is always copied back to the CPU at then conclusion of fit!, and made available as fitted_params(mach).","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/#Built-in-builders","page":"Summary","title":"Built-in builders","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"As for the builder argument, the following builders are provided out-of-the-box:","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Builder Description\nMLJFlux.MLP(hidden=(10,)) General multi-layer perceptron\nMLJFlux.Short(n_hidden=0, dropout=0.5, σ=sigmoid) Fully connected network with one hidden layer and dropout\nMLJFlux.Linear(σ=relu) Vanilla linear network with no hidden layers and activation function σ","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"See the following sections to learn more about the interface for the builders and models.","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"EditURL = \"iteration.jl\"","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Early-Stopping-with-MLJFlux","page":"Early Stopping","title":"Early Stopping with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models.","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Basic-Imports","page":"Early Stopping","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing Plots # To visualize training","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Loading-and-Splitting-the-Data","page":"Early Stopping","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Instantiating-the-model","page":"Early Stopping","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=50,\n rng=42\n )","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Wrapping-it-in-an-IteratedModel","page":"Early Stopping","title":"Wrapping it in an IteratedModel","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"Let's start by defining the condition that can cause the model to early stop.","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"stop_conditions = [\n Step(1), # Repeatedly train for one iteration\n NumberLimit(100), # Don't train for more than 100 iterations\n Patience(5), # Stop after 5 iterations of disimprovement in validation loss\n NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago\n TimeLimit(30/60), # Or if 30 minutes passed\n]","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"We can also define callbacks. Here we want to store the validation loss for each iteration","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"validation_losses = []\ncallbacks = [\n WithLossDo(loss->push!(validation_losses, loss)),\n]","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"Construct the iterated model and pass to it the stop_conditions and the callbacks:","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"iterated_model = IteratedModel(model=clf,\n resampling=CV(nfolds=6), # Split the data internally into 0.7 training and 0.3 validation\n measures=log_loss,\n iteration_parameter=:(epochs),\n controls=vcat(stop_conditions, callbacks),\n retrain=false # no need to retrain on all data at the end\n );\nnothing #hide","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"You can see more advanced stopping conditions as well as how to involve callbacks in the documentation","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Training-with-Early-Stopping","page":"Early Stopping","title":"Training with Early Stopping","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"At this point, all we need is to fit the model and iteration controls will be automatically handled","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"mach = machine(iterated_model, X, y)\nfit!(mach)\n# We can get the training losses like so\ntraining_losses = report(mach)[:model_report].training_losses;\nnothing #hide","category":"page"},{"location":"workflow examples/Early Stopping/iteration/#Results","page":"Early Stopping","title":"Results","text":"","category":"section"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"We can see that the model converged after 100 iterations.","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"plot(training_losses, label=\"Training Loss\", linewidth=2)\nplot!(validation_losses, label=\"Validation Loss\", linewidth=2, size=(800,400))","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"using Literate #src","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"","category":"page"},{"location":"workflow examples/Early Stopping/iteration/","page":"Early Stopping","title":"Early Stopping","text":"This page was generated using Literate.jl.","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"EditURL = \"SMS.jl\"","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#SMS-Spam-Detection-with-RNNs","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"In this tutorial we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the SMS Collection Dataset from Kaggle.","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Basic-Imports","page":"SMS Spam Detection with RNNs","title":"Basic Imports","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"using MLJ\nusing MLJFlux\nusing Flux\nusing CSV # Read data\nusing DataFrames # Read data\nusing ScientificTypes # Type coercion\nusing WordTokenizers # For tokenization\nusing Languages # For stop words","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Reading-Data","page":"SMS Spam Detection with RNNs","title":"Reading Data","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"df = CSV.read(\"./sms.csv\", DataFrame);","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Display the first 5 rows with DataFrames","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"first(df, 5) |> pretty","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"┌──────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Category │ Message │\n│ String7 │ String │\n│ Textual │ Textual │\n├──────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ ham │ Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat... │\n│ ham │ Ok lar... Joking wif u oni... │\n│ spam │ Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's │\n│ ham │ U dun say so early hor... U c already then say... │\n│ ham │ Nah I don't think he goes to usf, he lives around here though │\n└──────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘\n","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Text-Preprocessing","page":"SMS Spam Detection with RNNs","title":"Text Preprocessing","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Let's define a function that given an SMS message would:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Tokenize it (i.e., convert it into a vector of words)\nRemove stop words (i.e., words that are not useful for the analysis, like \"the\", \"a\", etc.)\nReturn the filtered vector of words","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"function preprocess_text(text)\n\t# (1) Splitting texts into words (so later it can be a sequence of vectors)\n\ttokens = WordTokenizers.tokenize(text)\n\n\t# (2) Stop word removal\n\tstop_words = Languages.stopwords(Languages.English())\n\tfiltered_tokens = filter(token -> !(token in stop_words), tokens)\n\n\treturn filtered_tokens\nend","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"preprocess_text (generic function with 1 method)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors).","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"If a sequence is longer than the maximum length, we need to truncate it\nIf a sequence is shorter than the maximum length, we need to pad it with a new token","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token.","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"We will define a function that would do this for us.","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)\n\t# (1) encode using the vocabulary\n\ttext_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]\n\n\t# (2) truncate sequence if > max_length\n\tlength(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])\n\n\t# (3) pad with pad_val\n\ttext_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))\n\n\treturn text_seq_inds\nend","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"encode_and_equalize (generic function with 1 method)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Preparing-Data","page":"SMS Spam Detection with RNNs","title":"Preparing Data","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Splitting the data","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"x_data, y_data = unpack(df, ==(:Message), ==(:Category))\ny_data = coerce(y_data, Multiclass);\n\n(x_train, x_val), (y_train, y_val) = partition((x_data, y_data), 0.8,\n\tmulti = true,\n\tshuffle = true,\n\trng = 42);","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Now let's process the training and validation sets:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"x_train_processed = [preprocess_text(text) for text in x_train]\nx_val_processed = [preprocess_text(text) for text in x_val];","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"sanity check","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"println(x_train_processed[1], \" is \", y_data[1])","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"[\"Que\", \"pases\", \"un\", \"buen\", \"tiempo\"] is ham\n","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Define the vocabulary from the training data","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"vocab = unique(vcat(x_train_processed...))\nvocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab))\nvocab_size = length(vocab)\npad_val, oov_val = vocab_size + 1, vocab_size + 2\nmax_length = 12 # can choose this more smartly if you wish","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"12","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Encode and equalize training and validation data:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"x_train_processed_equalized = [\n\tencode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n\tseq in x_train_processed\n]\nx_val_processed_equalized = [\n\tencode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n\tseq in x_val_processed\n]\nx_train_processed_equalized[1:5] # all sequences are encoded and of the same length","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"5-element Vector{Vector{Int64}}:\n [1, 2, 3, 4, 5, 10404, 10404, 10404, 10404, 10404, 10404, 10404]\n [6, 7, 8, 9, 10, 11, 12, 13, 11, 14, 15, 16]\n [36, 37, 38, 39, 36, 40, 41, 42, 10404, 10404, 10404, 10404]\n [43, 24, 36, 44, 45, 46, 10404, 10404, 10404, 10404, 10404, 10404]\n [43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 44, 45]","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Convert both structures into matrix form:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"matrixify(v) = reduce(hcat, v)'\nx_train_processed_equalized_fixed = matrixify(x_train_processed_equalized)\nx_val_processed_equalized_fixed = matrixify(x_val_processed_equalized)\nsize(x_train_processed_equalized_fixed)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"(4458, 12)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Instantiate-Model","page":"SMS Spam Detection with RNNs","title":"Instantiate Model","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification.","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"For this, we need to define a custom Flux layer to perform the averaging operation:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"struct Mean end\nFlux.@layer Mean\n(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integets but the MLJFlux model expects floats:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"struct Intify end\nFlux.@layer Intify\n(m::Intify)(x) = Int.(x)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Here we define out network:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"builder = MLJFlux.@builder begin\n\tChain(\n\t\tIntify(), # Cast input to integer\n\t\tEmbedding(vocab_size + 2 => 300), # Embedding layer\n\t\tRNN(300, 50, tanh), # RNN layer\n\t\tMean(), # Mean pooling layer\n\t\tDense(50, 2) # Classification dense layer\n\t)\nend","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"GenericBuilder(apply = #15)\n","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Notice that we used an embedding layer with input dimensionality vocab_size + 2 to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here).","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Load and instantiate model","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux\nclf = NeuralNetworkClassifier(\n\tbuilder = builder,\n\toptimiser = Flux.ADAM(0.1),\n\tbatch_size = 128,\n\tepochs = 10,\n)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"NeuralNetworkClassifier(\n builder = GenericBuilder(\n apply = Main.var\"##445\".var\"#15#16\"()), \n finaliser = NNlib.softmax, \n optimiser = Flux.Optimise.Adam(0.1, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 128, \n lambda = 0.0, \n alpha = 0.0, \n rng = Random._GLOBAL_RNG(), \n optimiser_changes_trigger_retraining = false, \n acceleration = ComputationalResources.CPU1{Nothing}(nothing))","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Wrap it in a machine","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous)\nmach = machine(clf, x_train_processed_equalized_fixed, y_train)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"untrained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @029 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @942 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Train-the-Model","page":"SMS Spam Detection with RNNs","title":"Train the Model","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"fit!(mach)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"trained Machine; caches model-specific representations of data\n model: NeuralNetworkClassifier(builder = GenericBuilder(apply = #15), …)\n args: \n 1:\tSource @029 ⏎ AbstractMatrix{ScientificTypesBase.Continuous}\n 2:\tSource @942 ⏎ AbstractVector{ScientificTypesBase.Multiclass{2}}\n","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/#Evaluate-the-Model","page":"SMS Spam Detection with RNNs","title":"Evaluate the Model","text":"","category":"section"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"ŷ = predict_mode(mach, x_val_processed_equalized_fixed)\nbalanced_accuracy(ŷ, y_val)","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"0.9370418555201171","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"Acceptable performance. Let's see some live examples:","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"using Random: Random;\nRandom.seed!(99);\n\nz = rand(x_val)\nz_processed = preprocess_text(z)\nz_encoded_equalized =\n\tencode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)\nz_encoded_equalized_fixed = matrixify([z_encoded_equalized])\nz_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)\nz_pred = predict_mode(mach, z_encoded_equalized_fixed)\n\nprint(\"SMS: `$(z)` and the prediction is `$(z_pred)`\")","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"SMS: `Hi elaine, is today's meeting confirmed?` and the prediction is `CategoricalArrays.CategoricalValue{InlineStrings.String7, UInt32}[InlineStrings.String7(\"ham\")]`","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"","category":"page"},{"location":"full tutorials/Spam Detection with RNNs/SMS/","page":"SMS Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"This page was generated using Literate.jl.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"EditURL = \"composition.jl\"","category":"page"},{"location":"workflow examples/Composition/composition/#Model-Composition-with-MLJFlux","page":"Model Composition","title":"Model Composition with MLJFlux","text":"","category":"section"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"workflow examples/Composition/composition/#Basic-Imports","page":"Model Composition","title":"Basic Imports","text":"","category":"section"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nimport Random # To create imbalance\nimport Imbalance # To solve the imbalance","category":"page"},{"location":"workflow examples/Composition/composition/#Loading-and-Splitting-the-Data","page":"Model Composition","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"To simulate an imbalanced dataset, we will take a random sample:","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"Random.seed!(803429)\nsubset_indices = rand(1:size(X, 1), 100)\nX, y = X[subset_indices, :], y[subset_indices]\nImbalance.checkbalance(y)","category":"page"},{"location":"workflow examples/Composition/composition/#Instantiating-the-model","page":"Model Composition","title":"Instantiating the model","text":"","category":"section"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"Let's load BorderlineSMOTE1 to oversample the data and Standardizer to standardize it.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n# We didn't need to load Standardizer because it is a local model for MLJ (see `localmodels()`)\n\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=50,\n rng=42\n )","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"First we wrap the oversampler with the neural network via the BalancedModel construct. This comes from MLJBalancing And allows combining resampling methods with MLJ models in a sequential pipeline.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42)\nbalanced_model = BalancedModel(model=clf, balancer1=oversampler)\nstandarizer = Standardizer()","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"Now let's compose the balanced model with a standardizer.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"pipeline = standarizer |> balanced_model","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"By this, any training data will be standardized then oversampled then passed to the model. Meanwhile, for inference, the standardizer will automatically use the training set's mean and std and the oversampler will be transparent.","category":"page"},{"location":"workflow examples/Composition/composition/#Training-the-Composed-Model","page":"Model Composition","title":"Training the Composed Model","text":"","category":"section"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"It's indistinguishable from training a single model.","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"mach = machine(pipeline, X, y)\nfit!(mach)\ncv=CV(nfolds=5)\nevaluate!(mach, resampling=cv, measure=accuracy)","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"","category":"page"},{"location":"workflow examples/Composition/composition/","page":"Model Composition","title":"Model Composition","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Classification/","page":"Classification","title":"Classification","text":"MLJFlux.NeuralNetworkClassifier","category":"page"},{"location":"interface/Classification/#MLJFlux.NeuralNetworkClassifier","page":"Classification","title":"MLJFlux.NeuralNetworkClassifier","text":"NeuralNetworkClassifier\n\nA model type for constructing a neural network classifier, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nDo model = NeuralNetworkClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkClassifier(builder=...).\n\nNeuralNetworkClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a Multiclass or OrderedFactor target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass or OrderedFactor; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.crossentropy: Standard multiclass classification loss, also known as the log loss.\nFlux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreassing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.\n\nusing MLJ\nusing Flux\nimport RDatasets\n\nFirst, we can load the data:\n\niris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), rng=123); # a vector and a table\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier()\n\nNext, we can train the model:\n\nmach = machine(clf, X, y)\nfit!(mach)\n\nWe can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:\n\nclf.optimiser.eta = clf.optimiser.eta * 2\nclf.epochs = clf.epochs + 5\n\nfit!(mach, verbosity=2) # trains 5 more epochs\n\nWe can inspect the mean training loss using the cross_entropy function:\n\ntraining_loss = cross_entropy(predict(mach, X), y)\n\nAnd we can access the Flux chain (model) using fitted_params:\n\nchain = fitted_params(mach).chain\n\nFinally, we can see how the out-of-sample performance changes over time, using MLJ's learning_curve function:\n\nr = range(clf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(clf, X, y,\n range=r,\n resampling=Holdout(fraction_train=0.7),\n measure=cross_entropy)\nusing Plots\nplot(curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\")\n\n\nSee also ImageClassifier, NeuralNetworkBinaryClassifier.\n\n\n\n\n\n","category":"type"},{"location":"interface/Classification/","page":"Classification","title":"Classification","text":"MLJFlux.NeuralNetworkBinaryClassifier","category":"page"},{"location":"interface/Classification/#MLJFlux.NeuralNetworkBinaryClassifier","page":"Classification","title":"MLJFlux.NeuralNetworkBinaryClassifier","text":"NeuralNetworkBinaryClassifier\n\nA model type for constructing a neural network binary classifier, based on unknown.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=unknown\n\nDo model = NeuralNetworkBinaryClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkBinaryClassifier(builder=...).\n\nNeuralNetworkBinaryClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a binary (Multiclass{2} or OrderedFactor{2}) target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass{2} or OrderedFactor{2}; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.\noptimiser::Flux.Adam(): A Flux.Optimise optimiser. The optimiser performs the updating of the weights of the network. For further reference, see the Flux optimiser documentation. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.binarycrossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.binarycrossentropy: Standard binary classification loss, also known as the log loss.\nFlux.logitbinarycrossentropy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with σ and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default sigmoid finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.binary_focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreassing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞).\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training.\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.σ: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.σ.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.\n\nusing MLJ, Flux\nimport Optimisers\nimport RDatasets\n\nFirst, we can load the data:\n\nmtcars = RDatasets.dataset(\"datasets\", \"mtcars\");\ny, X = unpack(mtcars, ==(:VS), in([:MPG, :Cyl, :Disp, :HP, :WT, :QSec]));\n\nNote that y is a vector and X a table.\n\ny = categorical(y) # classifier takes catogorical input\nX_f32 = Float32.(X) # To match floating point type of the neural network layers\nNeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=MLJFlux\nbclf = NeuralNetworkBinaryClassifier()\n\nNext, we can train the model:\n\nmach = machine(bclf, X_f32, y)\nfit!(mach)\n\nWe can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:\n\njulia> bclf.optimiser\nAdam(0.001, (0.9, 0.999), 1.0e-8)\n\nbclf.optimiser = Optimisers.Adam(eta = bclf.optimiser.eta * 2)\nbclf.epochs = bclf.epochs + 5\n\nfit!(mach, verbosity=2) # trains 5 more epochs\n\nWe can inspect the mean training loss using the cross_entropy function:\n\ntraining_loss = cross_entropy(predict(mach, X_f32), y)\n\nAnd we can access the Flux chain (model) using fitted_params:\n\nchain = fitted_params(mach).chain\n\nFinally, we can see how the out-of-sample performance changes over time, using MLJ's learning_curve function:\n\nr = range(bclf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(\n bclf,\n X_f32,\n y,\n range=r,\n resampling=Holdout(fraction_train=0.7),\n measure=cross_entropy,\n)\nusing Plots\nplot(\n curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\",\n)\n\n\nSee also ImageClassifier.\n\n\n\n\n\n","category":"type"},{"location":"#MLJFlux.jl","page":"Introduction","title":"MLJFlux.jl","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"A Julia package integrating deep learning Flux models with MLJ.","category":"page"},{"location":"#Objectives","page":"Introduction","title":"Objectives","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"Provide a user-friendly and high-level interface to fundamental Flux deep learning models while still being extensible by supporting custom models written with Flux\nMake building deep learning models more convenient to users already familiar with the MLJ workflow\nMake it easier to apply machine learning techniques provided by MLJ, including: out-of-sample performance evaluation, hyper-parameter optimization, iteration control, and more, to deep learning models","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"note: MLJFlux Coverage\nMLJFlux support is focused on fundamental and widely used deep learning models. Sophisticated architectures or techniques such as online learning, reinforcement learning, and adversarial networks are currently beyond its scope. ","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Also note that MLJFlux is limited to training models only when all training data fits into memory, though it still supports automatic batching of data.","category":"page"},{"location":"#Installation","page":"Introduction","title":"Installation","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"import Pkg\nPkg.activate(\"my_environment\", shared=true)\nPkg.add([\"MLJ\", \"MLJFlux\", \"Flux\"])","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"You only need Flux if you need to build a custom architecture or experiment with different optimizers, loss functions and activations.","category":"page"},{"location":"#Quick-Start","page":"Introduction","title":"Quick Start","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"using MLJ, Flux, MLJFlux\nimport RDatasets\n\n# 1. Load Data\niris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n\n# 2. Load and instantiate model\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=\"MLJFlux\"\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Flux.ADAM(0.01),\n batch_size=8,\n epochs=100, \n acceleration=CUDALibs() # For GPU support\n )\n\n# 3. Wrap it in a machine \nmach = machine(clf, X, y)\n\n# 4. Evaluate the model\ncv=CV(nfolds=5)\nevaluate!(mach, resampling=cv, measure=accuracy) ","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"As you can see we were able to use MLJ functionality (i.e., cross validation) with a Flux deep learning model. All arguments provided also have defaults.","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Notice that we were also able to define the neural network in a high-level fashion by only specifying the number of neurons in each hidden layer and the activation function. Meanwhile, MLJFlux was able to infer the input and output layer as well as use a suitable default for the loss function and output activation given the classification task. Notice as well that we did not need to implement a training or prediction loop as in Flux.","category":"page"},{"location":"#Basic-idea","page":"Introduction","title":"Basic idea","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"As in the example above, any MLJFlux model has a builder hyperparameter, an object encoding instructions for creating a neural network given the data that the model eventually sees (e.g., the number of classes in a classification problem). While each MLJ model has a simple default builder, users may need to define custom builders to get optimal results, and this will require familiarity with the Flux API for defining a neural network chain.","category":"page"},{"location":"#Flux-or-MLJFlux?","page":"Introduction","title":"Flux or MLJFlux?","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"Flux is a deep learning framework in Julia that comes with everything you need to build deep learning models (i.e., GPU support, automatic differentiation, layers, activations, losses, optimizers, etc.). MLJFlux wraps models built with Flux which provides a more high-level interface for building and training such models. More importantly, it empowers Flux models by extending their support to many common machine learning workflows that are possible via MLJ such as:","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Estimating performance of your model using a holdout set or other resampling strategy (e.g., cross-validation) as measured by one or more metrics (e.g., loss functions) that may not have been used in training\nOptimizing hyper-parameters such as a regularization parameter (e.g., dropout) or a width/height/nchannnels of convolution layer\nCompose with other models such as introducing data pre-processing steps (e.g., missing data imputation) into a pipeline. It might make sense to include non-deep learning models in this pipeline. Other kinds of model composition could include blending predictions of a deep learner with some other kind of model (as in “model stacking”). Models composed with MLJ can be also tuned as a single unit.\nControlling iteration by adding an early stopping criterion based on an out-of-sample estimate of the loss, dynamically changing the learning rate (eg, cyclic learning rates), periodically save snapshots of the model, generate live plots of sample weights to judge training progress (as in tensor board)","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Comparing your model with a non-deep learning models","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"A comparable project, FastAI/FluxTraining, also provides a high-level interface for interacting with Flux models and supports a set of features that may overlap with (but not include all of) those supported by MLJFlux.","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Many of the features mentioned above are showcased in the workflow examples that you can access from the sidebar.","category":"page"},{"location":"full tutorials/MNIST/#Image-Classification-Example","page":"-","title":"Image Classification Example","text":"","category":"section"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"An expanded version of this example, with early stopping and snapshots, is available here.","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"We define a builder that builds a chain with six alternating convolution and max-pool layers, and a final dense layer, which we apply to the MNIST image dataset.","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"First we define a generic builder (working for any image size, color or gray):","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"using MLJ\nusing Flux\nusing MLDatasets\n\n# helper function\nfunction flatten(x::AbstractArray)\n\treturn reshape(x, :, size(x)[end])\nend\n\nimport MLJFlux\nmutable struct MyConvBuilder\n\tfilter_size::Int\n\tchannels1::Int\n\tchannels2::Int\n\tchannels3::Int\nend\n\nfunction MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n\n\tk, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n\n\tmod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n\n\t# padding to preserve image size on convolution:\n\tp = div(k - 1, 2)\n\n\tfront = Chain(\n Conv((k, k), n_channels => c1, pad=(p, p), relu),\n MaxPool((2, 2)),\n Conv((k, k), c1 => c2, pad=(p, p), relu),\n MaxPool((2, 2)),\n Conv((k, k), c2 => c3, pad=(p, p), relu),\n MaxPool((2 ,2)),\n flatten,\n )\n\td = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n\treturn Chain(front, Dense(d, n_out))\nend","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"Next, we load some of the MNIST data and check scientific types conform to those is the table above:","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"N = 500\nXraw, yraw = MNIST(split=:train)[:];\nXraw = Xraw[:,:,1:N];\nyraw = yraw[1:N];\n\nscitype(Xraw)","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"scitype(yraw)","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"Inputs should have element scitype GrayImage:","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"X = coerce(Xraw, GrayImage);","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"For classifiers, target must have element scitype <: Finite:","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"y = coerce(yraw, Multiclass);","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"Instantiating an image classifier model:","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"ImageClassifier = @load ImageClassifier\nclf = ImageClassifier(\n builder=MyConvBuilder(3, 16, 32, 32),\n epochs=10,\n loss=Flux.crossentropy,\n )","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"And evaluating the accuracy of the model on a 30% holdout set:","category":"page"},{"location":"full tutorials/MNIST/","page":"-","title":"-","text":"mach = machine(clf, X, y)\n\nevaluate!(\n mach,\n resampling=Holdout(rng=123, fraction_train=0.7),\n measure=misclassification_rate,\n )","category":"page"},{"location":"interface/Custom Builders/#Defining-Custom-Builders","page":"Custom Builders","title":"Defining Custom Builders","text":"","category":"section"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Following is an example defining a new builder for creating a simple fully-connected neural network with two hidden layers, with n1 nodes in the first hidden layer, and n2 nodes in the second, for use in any of the first three models in Table 1. The definition includes one mutable struct and one method:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"mutable struct MyBuilder <: MLJFlux.Builder\n\tn1 :: Int\n\tn2 :: Int\nend\n\nfunction MLJFlux.build(nn::MyBuilder, rng, n_in, n_out)\n\tinit = Flux.glorot_uniform(rng)\n return Chain(\n Dense(n_in, nn.n1, init=init),\n Dense(nn.n1, nn.n2, init=init),\n Dense(nn.n2, n_out, init=init),\n )\nend","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Note here that n_in and n_out depend on the size of the data (see Table 1.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"For a concrete image classification example, see the Image Classification Example.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"More generally, defining a new builder means defining a new struct sub-typing MLJFlux.Builder and defining a new MLJFlux.build method with one of these signatures:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"MLJFlux.build(builder::MyBuilder, rng, n_in, n_out)\nMLJFlux.build(builder::MyBuilder, rng, n_in, n_out, n_channels) # for use with `ImageClassifier`","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"This method must return a Flux.Chain instance, chain, subject to the following conditions:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"chain(x) must make sense:\nfor any x <: Array{<:AbstractFloat, 2} of size (n_in, batch_size) where batch_size is any integer (for use with one of the first three model types); or\nfor any x <: Array{<:Float32, 4} of size (W, H, n_channels, batch_size), where (W, H) = n_in, n_channels is 1 or 3, and batch_size is any integer (for use with ImageClassifier)\nThe object returned by chain(x) must be an AbstractFloat vector of length n_out.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Alternatively, use MLJFlux.@builder(neural_net) to automatically create a builder for any valid Flux chain expression neural_net, where the symbols n_in, n_out, n_channels and rng can appear literally, with the interpretations explained above. For example,","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"builder = MLJFlux.@builder Chain(Dense(n_in, 128), Dense(128, n_out, tanh))","category":"page"}] +[{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Hyperparameter-Tuning-with-MLJFlux","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning with MLJFlux","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"This demonstration is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Basic-Imports","page":"Hyperparameter Tuning","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing Plots # To plot tuning results\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Loading-and-Splitting-the-Data","page":"Hyperparameter Tuning","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Instantiating-the-model","page":"Hyperparameter Tuning","title":"Instantiating the model","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Now let's construct our model. This follows a similar setup the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=10,\n rng=42,\n)","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Hyperparameter-Tuning-Example","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning Example","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"We start by defining the hyperparameter ranges","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"r1 = range(clf, :batch_size, lower=1, upper=64)\netas = [10^x for x in range(-4, stop=0, length=4)]\noptimisers = [Optimisers.Adam(eta) for eta in etas]\nr2 = range(clf, :optimiser, values=optimisers)","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then passing the ranges along with the model and other arguments to the TunedModel constructor.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"tuned_model = TunedModel(\n model=clf,\n tuning=Grid(goal=25),\n resampling=CV(nfolds=5, rng=42),\n range=[r1, r2],\n measure=cross_entropy,\n);\nnothing #hide","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then wrapping our tuned model in a machine and fitting it.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"mach = machine(tuned_model, X, y);\nfit!(mach, verbosity=0);\nnothing #hide","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Let's check out the best performing model:","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"fitted_params(mach).best_model","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/#Learning-Curves","page":"Hyperparameter Tuning","title":"Learning Curves","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"First define the range and wrap it in a learning curve","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"r = range(clf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(\n clf,\n X,\n y,\n range=r,\n resampling=CV(nfolds=4, rng=42),\n measure=cross_entropy,\n)","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"Then plot the curve","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"plot(\n curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\",\n)","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"","category":"page"},{"location":"common_workflows/hyperparameter_tuning/notebook/","page":"Hyperparameter Tuning","title":"Hyperparameter Tuning","text":"This page was generated using Literate.jl.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/comparison/notebook/#Model-Comparison-with-MLJFlux","page":"Model Comparison","title":"Model Comparison with MLJFlux","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"This demonstration is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/comparison/notebook/#Basic-Imports","page":"Model Comparison","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing DataFrames # To visualize hyperparameter search results\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/comparison/notebook/#Loading-and-Splitting-the-Data","page":"Model Comparison","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nnothing #hide","category":"page"},{"location":"common_workflows/comparison/notebook/#Instantiating-the-models-Now-let's-construct-our-model.-This-follows-a-similar-setup","page":"Model Comparison","title":"Instantiating the models Now let's construct our model. This follows a similar setup","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"to the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf1 = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=50,\n rng=42\n )","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Let's as well load and construct three other classical machine learning models:","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"BayesianLDA = @load BayesianLDA pkg=MultivariateStats\nclf2 = BayesianLDA()\nRandomForestClassifier = @load RandomForestClassifier pkg=DecisionTree\nclf3 = RandomForestClassifier()\nXGBoostClassifier = @load XGBoostClassifier pkg=XGBoost\nclf4 = XGBoostClassifier();\nnothing #hide","category":"page"},{"location":"common_workflows/comparison/notebook/#Wrapping-One-of-the-Models-in-a-TunedModel","page":"Model Comparison","title":"Wrapping One of the Models in a TunedModel","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Instead of just comparing with four models with the default/given hyperparameters, we will give XGBoostClassifier an unfair advantage By wrapping it in a TunedModel that considers the best learning rate η for the model.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10)\ntuned_model_xg = TunedModel(\n model=clf4,\n ranges=[r1],\n tuning=Grid(resolution=10),\n resampling=CV(nfolds=5, rng=42),\n measure=cross_entropy,\n);\nnothing #hide","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters.","category":"page"},{"location":"common_workflows/comparison/notebook/#Comparing-the-models","page":"Model Comparison","title":"Comparing the models","text":"","category":"section"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"We simply pass the four models to the models argument of the TunedModel construct","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"tuned_model = TunedModel(\n models=[clf1, clf2, clf3, tuned_model_xg],\n tuning=Explicit(),\n resampling=CV(nfolds=5, rng=42),\n measure=cross_entropy,\n);\nnothing #hide","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Then wrapping our tuned model in a machine and fitting it.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"mach = machine(tuned_model, X, y);\nfit!(mach, verbosity=0);\nnothing #hide","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"Now let's see the history for more details on the performance for each of the models","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"history = report(mach).history\nhistory_df = DataFrame(\n mlp = [x[:model] for x in history],\n measurement = [x[:measurement][1] for x in history],\n)\nsort!(history_df, [order(:measurement)])","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"This is Occam's razor in practice.","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"","category":"page"},{"location":"common_workflows/comparison/notebook/","page":"Model Comparison","title":"Model Comparison","text":"This page was generated using Literate.jl.","category":"page"},{"location":"contributing/#Adding-new-models-to-MLJFlux","page":"Contributing","title":"Adding new models to MLJFlux","text":"","category":"section"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"This section assumes familiarity with the MLJ model API","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"If one subtypes a new model type as either MLJFlux.MLJFluxProbabilistic or MLJFlux.MLJFluxDeterministic, then instead of defining new methods for MLJModelInterface.fit and MLJModelInterface.update one can make use of fallbacks by implementing the lower level methods shape, build, and fitresult. See the classifier source code for an example.","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"One still needs to implement a new predict method.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"extended_examples/spam_detection/notebook/#SMS-Spam-Detection-with-RNNs","page":"Spam Detection with RNNs","title":"SMS Spam Detection with RNNs","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"This demonstration is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"In this demo we use a custom RNN model from Flux with MLJFlux to classify text messages as spam or ham. We will be using the SMS Collection Dataset from Kaggle.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Warning. This demo includes some non-idiomatic use of MLJ to allow use of the Flux.jl Embedding layer. It is not recommended for MLJ beginners.","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Basic-Imports","page":"Spam Detection with RNNs","title":"Basic Imports","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"using MLJ\nusing MLJFlux\nusing Flux\nimport Optimisers # Flux.jl native optimisers no longer supported\nusing CSV # Read data\nusing DataFrames # Read data\nusing WordTokenizers # For tokenization\nusing Languages # For stop words","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Reading-Data","page":"Spam Detection with RNNs","title":"Reading Data","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"We assume the SMS Collection Dataset has been downloaded and is in a file called \"sms.csv\" in the same directory as the this script.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"df = CSV.read(joinpath(@__DIR__, \"sms.csv\"), DataFrame);\nnothing #hide","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Display the first 5 rows with DataFrames","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"first(df, 5)","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Text-Preprocessing","page":"Spam Detection with RNNs","title":"Text Preprocessing","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Let's define a function that given an SMS message would:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Tokenize it (i.e., convert it into a vector of words)\nRemove stop words (i.e., words that are not useful for the analysis, like \"the\", \"a\", etc.)\nReturn the filtered vector of words","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"const STOP_WORDS = Languages.stopwords(Languages.English())\n\nfunction preprocess_text(text)\n # (1) Splitting texts into words (so later it can be a sequence of vectors)\n tokens = WordTokenizers.tokenize(text)\n\n # (2) Stop word removal\n filtered_tokens = filter(token -> !(token in STOP_WORDS), tokens)\n\n return filtered_tokens\nend","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Define the vocabulary to be the set of all words in our training set. We also need a function that would map each word in a given sequence of words into its index in the dictionary (which is equivalent to representing the words as one-hot vectors).","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Now after we do this the sequences will all be numerical vectors but they will be of unequal length. Thus, to facilitate batching of data for the deep learning model, we need to decide on a specific maximum length for all sequences and:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"If a sequence is longer than the maximum length, we need to truncate it\nIf a sequence is shorter than the maximum length, we need to pad it with a new token","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Lastly, we must also handle the case that an incoming text sequence may involve words never seen in training by represent all such out-of-vocabulary words with a new token.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"We will define a function that would do this for us.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"function encode_and_equalize(text_seq, vocab_dict, max_length, pad_val, oov_val)\n # (1) encode using the vocabulary\n text_seq_inds = [get(vocab_dict, word, oov_val) for word in text_seq]\n\n # (2) truncate sequence if > max_length\n length(text_seq_inds) > max_length && (text_seq_inds = text_seq_inds[1:max_length])\n\n # (3) pad with pad_val\n text_seq_inds = vcat(text_seq_inds, fill(pad_val, max_length - length(text_seq_inds)))\n\n return text_seq_inds\nend","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Preparing-Data","page":"Spam Detection with RNNs","title":"Preparing Data","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Splitting the data","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"x_data, y_data = unpack(df, ==(:Message), ==(:Category))\ny_data = coerce(y_data, Multiclass);\n\n(x_train, x_val), (y_train, y_val) = partition(\n (x_data, y_data),\n 0.8,\n multi = true,\n shuffle = true,\n rng = 42,\n);\nnothing #hide","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Now let's process the training and validation sets:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"x_train_processed = [preprocess_text(text) for text in x_train]\nx_val_processed = [preprocess_text(text) for text in x_val];\nnothing #hide","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"sanity check","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"println(x_train_processed[1], \" is \", y_data[1])","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Define the vocabulary from the training data","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"vocab = unique(vcat(x_train_processed...))\nvocab_dict = Dict(word => idx for (idx, word) in enumerate(vocab))\nvocab_size = length(vocab)\npad_val, oov_val = vocab_size + 1, vocab_size + 2\nmax_length = 12 # can choose this more smartly if you wish","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Encode and equalize training and validation data:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"x_train_processed_equalized = [\n encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n seq in x_train_processed\n ]\nx_val_processed_equalized = [\n encode_and_equalize(seq, vocab_dict, max_length, pad_val, oov_val) for\n seq in x_val_processed\n ]\nx_train_processed_equalized[1:5] # all sequences are encoded and of the same length","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Convert both structures into matrix form:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"matrixify(v) = reduce(hcat, v)'\nx_train_processed_equalized_fixed = matrixify(x_train_processed_equalized)\nx_val_processed_equalized_fixed = matrixify(x_val_processed_equalized)\nsize(x_train_processed_equalized_fixed)","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Instantiate-Model","page":"Spam Detection with RNNs","title":"Instantiate Model","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"For the model, we will use a RNN from Flux. We will average the hidden states corresponding to any sequence then pass that to a dense layer for classification.","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"For this, we need to define a custom Flux layer to perform the averaging operation:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"struct Mean end\nFlux.@layer Mean\n(m::Mean)(x) = mean(x, dims = 2)[:, 1, :] # [batch_size, seq_len, hidden_dim] => [batch_size, 1, hidden_dim]=> [batch_size, hidden_dim]","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"For compatibility, we will also define a layer that simply casts the input to integers as the embedding layer in Flux expects integers but the MLJFlux model expects floats:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"struct Intify end\nFlux.@layer Intify\n(m::Intify)(x) = Int.(x)","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Here we define our network:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"builder = MLJFlux.@builder begin\n Chain(\n Intify(), # Cast input to integer\n Embedding(vocab_size + 2 => 300), # Embedding layer\n RNN(300, 50, tanh), # RNN layer\n Mean(), # Mean pooling layer\n Dense(50, 2), # Classification dense layer\n )\nend","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Notice that we used an embedding layer with input dimensionality vocab_size + 2 to take into account the padding and out-of-vocabulary tokens. Recall that the indices in our input correspond to one-hot-vectors and the embedding layer's purpose is to learn to map them into meaningful dense vectors (of dimensionality 300 here).","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Load and instantiate model","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = MLJFlux\nclf = NeuralNetworkClassifier(\n builder = builder,\n optimiser = Optimisers.Adam(0.1),\n batch_size = 128,\n epochs = 10,\n)","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Wrap it in a machine","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"x_train_processed_equalized_fixed = coerce(x_train_processed_equalized_fixed, Continuous)\nmach = machine(clf, x_train_processed_equalized_fixed, y_train)","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Train-the-Model","page":"Spam Detection with RNNs","title":"Train the Model","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"fit!(mach)","category":"page"},{"location":"extended_examples/spam_detection/notebook/#Evaluate-the-Model","page":"Spam Detection with RNNs","title":"Evaluate the Model","text":"","category":"section"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"ŷ = predict_mode(mach, x_val_processed_equalized_fixed)\nbalanced_accuracy(ŷ, y_val)","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"Acceptable performance. Let's see some live examples:","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"using Random: Random;\nRandom.seed!(99);\n\nz = rand(x_val)\nz_processed = preprocess_text(z)\nz_encoded_equalized =\n encode_and_equalize(z_processed, vocab_dict, max_length, pad_val, oov_val)\nz_encoded_equalized_fixed = matrixify([z_encoded_equalized])\nz_encoded_equalized_fixed = coerce(z_encoded_equalized_fixed, Continuous)\nz_pred = predict_mode(mach, z_encoded_equalized_fixed)\n\nprint(\"SMS: `$(z)` and the prediction is `$(z_pred)`\")","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"","category":"page"},{"location":"extended_examples/spam_detection/notebook/","page":"Spam Detection with RNNs","title":"Spam Detection with RNNs","text":"This page was generated using Literate.jl.","category":"page"},{"location":"common_workflows/composition/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/composition/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/composition/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/composition/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Incremental-Training-with-MLJFlux","page":"Incremental Training","title":"Incremental Training with MLJFlux","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"In this workflow example we explore how to incrementally train MLJFlux models.","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Julia version is assumed to be 1.10.* This tutorial is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Basic-Imports","page":"Incremental Training","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Loading-and-Splitting-the-Data","page":"Incremental Training","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X) # To be compatible with type of network network parameters\n(X_train, X_test), (y_train, y_test) = partition(\n (X, y), 0.8,\n multi = true,\n shuffle = true,\n rng=42,\n);\nnothing #hide","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Instantiating-the-model","page":"Incremental Training","title":"Instantiating the model","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=10,\n rng=42,\n)","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Initial-round-of-training","page":"Incremental Training","title":"Initial round of training","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above.","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"mach = machine(clf, X_train, y_train)\nfit!(mach)","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Let's evaluate the training loss and validation accuracy","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"training_loss = cross_entropy(predict(mach, X_train), y_train)","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"val_acc = accuracy(predict_mode(mach, X_test), y_test)","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Poor performance it seems.","category":"page"},{"location":"common_workflows/incremental_training/notebook/#Incremental-Training","page":"Incremental Training","title":"Incremental Training","text":"","category":"section"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these hyperparameters and call fit again. It won't reset the model parameters before training.","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"clf.optimiser = Optimisers.Adam(clf.optimiser.eta/2)\nclf.epochs = clf.epochs + 30\nfit!(mach, verbosity=2);\nnothing #hide","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"Let's evaluate the training loss and validation accuracy","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"training_loss = cross_entropy(predict(mach, X_train), y_train)","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"training_acc = accuracy(predict_mode(mach, X_test), y_test)","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"That's much better. If we are rather interested in resetting the model parameters before fitting, we can do fit(mach, force=true).","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"","category":"page"},{"location":"common_workflows/incremental_training/notebook/","page":"Incremental Training","title":"Incremental Training","text":"This page was generated using Literate.jl.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"extended_examples/MNIST/notebook/#Using-MLJ-to-classifiy-the-MNIST-image-dataset","page":"MNIST Images","title":"Using MLJ to classifiy the MNIST image dataset","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"This tutorial is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"using MLJ\nusing Flux\nimport MLJFlux\nimport MLUtils\nimport MLJIteration # for `skip`","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"If running on a GPU, you will also need to import CUDA and import cuDNN.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"using Plots\ngr(size=(600, 300*(sqrt(5)-1)));\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/#Basic-training","page":"MNIST Images","title":"Basic training","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Downloading the MNIST image dataset:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"import MLDatasets: MNIST\n\nENV[\"DATADEPS_ALWAYS_ACCEPT\"] = true\nimages, labels = MNIST(split=:train)[:];\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"In MLJ, integers cannot be used for encoding categorical data, so we must force the labels to have the Multiclass scientific type. For more on this, see Working with Categorical Data.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"labels = coerce(labels, Multiclass);\nimages = coerce(images, GrayImage);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Checking scientific types:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"@assert scitype(images) <: AbstractVector{<:Image}\n@assert scitype(labels) <: AbstractVector{<:Finite}","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Looks good.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"For general instructions on coercing image data, see Type coercion for image data","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"images[1]","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"We start by defining a suitable Builder object. This is a recipe for building the neural network. Our builder will work for images of any (constant) size, whether they be color or black and white (ie, single or multi-channel). The architecture always consists of six alternating convolution and max-pool layers, and a final dense layer; the filter size and the number of channels after each convolution layer is customisable.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"import MLJFlux\nstruct MyConvBuilder\n filter_size::Int\n channels1::Int\n channels2::Int\n channels3::Int\nend\n\nfunction MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n mod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n p = div(k - 1, 2) # padding to preserve image size\n init = Flux.glorot_uniform(rng)\n front = Chain(\n Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),\n MaxPool((2 ,2)),\n MLUtils.flatten)\n d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n return Chain(front, Dense(d, n_out, init=init))\nend","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Notes.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"There is no final softmax here, as this is applied by default in all MLJFLux classifiers. Customisation of this behaviour is controlled using using the finaliser hyperparameter of the classifier.\nInstead of calculating the padding p, Flux can infer the required padding in each dimension, which you enable by replacing pad = (p, p) with pad = SamePad().","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"We now define the MLJ model.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"ImageClassifier = @load ImageClassifier\nclf = ImageClassifier(\n builder=MyConvBuilder(3, 16, 32, 32),\n batch_size=50,\n epochs=10,\n rng=123,\n)","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"You can add Flux options optimiser=... and loss=... in the above constructor call. At present, loss must be a Flux-compatible loss, not an MLJ measure. To run on a GPU, add to the constructor acceleration=CUDALib() and omit rng.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"For illustration purposes, we won't use all the data here:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"train = 1:500\ntest = 501:1000","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Binding the model with data in an MLJ machine:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"mach = machine(clf, images, labels);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Training for 10 epochs on the first 500 images:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"fit!(mach, rows=train, verbosity=2);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Inspecting:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"report(mach)","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"chain = fitted_params(mach)","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Flux.params(chain)[2]","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Adding 20 more epochs:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"clf.epochs = clf.epochs + 20\nfit!(mach, rows=train);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Computing an out-of-sample estimate of the loss:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"predicted_labels = predict(mach, rows=test);\ncross_entropy(predicted_labels, labels[test])","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Or to fit and predict, in one line:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"evaluate!(mach,\n resampling=Holdout(fraction_train=0.5),\n measure=cross_entropy,\n rows=1:1000,\n verbosity=0)","category":"page"},{"location":"extended_examples/MNIST/notebook/#Wrapping-the-MLJFlux-model-with-iteration-controls","page":"MNIST Images","title":"Wrapping the MLJFlux model with iteration controls","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Any iterative MLJFlux model can be wrapped in iteration controls, as we demonstrate next. For more on MLJ's IteratedModel wrapper, see the MLJ documentation.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"The \"self-iterating\" classifier, called iterated_clf below, is for iterating the image classifier defined above until one of the following stopping criterion apply:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Patience(3): 3 consecutive increases in the loss\nInvalidValue(): an out-of-sample loss, or a training loss, is NaN, Inf, or -Inf\nTimeLimit(t=5/60): training time has exceeded 5 minutes","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"These checks (and other controls) will be applied every two epochs (because of the Step(2) control). Additionally, training a machine bound to iterated_clf will:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"save a snapshot of the machine every three control cycles (every six epochs)\nrecord traces of the out-of-sample loss and training losses for plotting\nrecord mean value traces of each Flux parameter for plotting","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"For a complete list of controls, see this table.","category":"page"},{"location":"extended_examples/MNIST/notebook/#Wrapping-the-classifier","page":"MNIST Images","title":"Wrapping the classifier","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Some helpers","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"To extract Flux params from an MLJFlux machine","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"parameters(mach) = vec.(Flux.params(fitted_params(mach)));\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"To store the traces:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"losses = []\ntraining_losses = []\nparameter_means = Float32[];\nepochs = []","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"To update the traces:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"update_loss(loss) = push!(losses, loss)\nupdate_training_loss(losses) = push!(training_losses, losses[end])\nupdate_means(mach) = append!(parameter_means, mean.(parameters(mach)));\nupdate_epochs(epoch) = push!(epochs, epoch)","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"The controls to apply:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"save_control =\n MLJIteration.skip(Save(joinpath(tempdir(), \"mnist.jls\")), predicate=3)\n\ncontrols=[\n Step(2),\n Patience(3),\n InvalidValue(),\n TimeLimit(5/60),\n save_control,\n WithLossDo(),\n WithLossDo(update_loss),\n WithTrainingLossesDo(update_training_loss),\n Callback(update_means),\n WithIterationsDo(update_epochs),\n];\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"The \"self-iterating\" classifier:","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"iterated_clf = IteratedModel(\n clf,\n controls=controls,\n resampling=Holdout(fraction_train=0.7),\n measure=log_loss,\n)","category":"page"},{"location":"extended_examples/MNIST/notebook/#Binding-the-wrapped-model-to-data:","page":"MNIST Images","title":"Binding the wrapped model to data:","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"mach = machine(iterated_clf, images, labels);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/#Training","page":"MNIST Images","title":"Training","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"fit!(mach, rows=train);\nnothing #hide","category":"page"},{"location":"extended_examples/MNIST/notebook/#Comparison-of-the-training-and-out-of-sample-losses:","page":"MNIST Images","title":"Comparison of the training and out-of-sample losses:","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"plot(\n epochs,\n losses,\n xlab = \"epoch\",\n ylab = \"cross entropy\",\n label=\"out-of-sample\",\n)\nplot!(epochs, training_losses, label=\"training\")\n\nsavefig(joinpath(tempdir(), \"loss.png\"))","category":"page"},{"location":"extended_examples/MNIST/notebook/#Evolution-of-weights","page":"MNIST Images","title":"Evolution of weights","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"n_epochs = length(losses)\nn_parameters = div(length(parameter_means), n_epochs)\nparameter_means2 = reshape(copy(parameter_means), n_parameters, n_epochs)'\nplot(\n epochs,\n parameter_means2,\n title=\"Flux parameter mean weights\",\n xlab = \"epoch\",\n)","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Note. The higher the number in the plot legend, the deeper the layer we are **weight-averaging.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"savefig(joinpath(tempdir(), \"weights.png\"))","category":"page"},{"location":"extended_examples/MNIST/notebook/#Retrieving-a-snapshot-for-a-prediction:","page":"MNIST Images","title":"Retrieving a snapshot for a prediction:","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"mach2 = machine(joinpath(tempdir(), \"mnist3.jls\"))\npredict_mode(mach2, images[501:503])","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"3-element CategoricalArrays.CategoricalArray{Int64,1,UInt32}:\n 7\n 9\n 5","category":"page"},{"location":"extended_examples/MNIST/notebook/#Restarting-training","page":"MNIST Images","title":"Restarting training","text":"","category":"section"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"Mutating iterated_clf.controls or clf.epochs (which is otherwise ignored) will allow you to restart training from where it left off.","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"iterated_clf.controls[2] = Patience(4)\nfit!(mach, rows=train)\n\nplot(\n epochs,\n losses,\n xlab = \"epoch\",\n ylab = \"cross entropy\",\n label=\"out-of-sample\",\n)\nplot!(epochs, training_losses, label=\"training\")","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"","category":"page"},{"location":"extended_examples/MNIST/notebook/","page":"MNIST Images","title":"MNIST Images","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Multitarget Regression/","page":"Multi-Target Regression","title":"Multi-Target Regression","text":"MLJFlux.MultitargetNeuralNetworkRegressor","category":"page"},{"location":"interface/Multitarget Regression/#MLJFlux.MultitargetNeuralNetworkRegressor","page":"Multi-Target Regression","title":"MLJFlux.MultitargetNeuralNetworkRegressor","text":"MultitargetNeuralNetworkRegressor\n\nA model type for constructing a multitarget neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nMultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor pkg=MLJFlux\n\nDo model = MultitargetNeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in MultitargetNeuralNetworkRegressor(builder=...).\n\nMultitargetNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a multi-valued Continuous target, represented as a table, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any table or matrix of output targets whose element scitype is Continuous; check column scitypes with schema(y). If y is a Matrix, it is assumed to have columns corresponding to variables and rows corresponding to observations.\n\nHyper-parameters\n\nbuilder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: Linear, Short, and MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:\nFlux.mse\nFlux.mae\nFlux.msle\nFlux.huber_loss\nCurrently MLJ measures are not supported as loss functions here.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew having the same scitype as X above. Predictions are deterministic.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we apply a multi-target regression model to synthetic data:\n\nusing MLJ\nimport MLJFlux\nusing Flux\nimport Optimisers\n\nFirst, we generate some synthetic data (needs MLJBase 0.20.16 or higher):\n\nX, y = make_regression(100, 9; n_targets = 2) # both tables\nschema(y)\nschema(X)\n\nSplitting off a test set:\n\n(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);\n\nNext, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features and n_out the number of target variables (both known at fit! time), while rng is a proxy for a RNG (which will be passed from the rng field of model defined below).\n\nbuilder = MLJFlux.@builder begin\n init=Flux.glorot_uniform(rng)\n Chain(\n Dense(n_in, 64, relu, init=init),\n Dense(64, 32, relu, init=init),\n Dense(32, n_out, init=init),\n )\nend\n\nInstantiating the regression model:\n\nMultitargetNeuralNetworkRegressor = @load MultitargetNeuralNetworkRegressor\nmodel = MultitargetNeuralNetworkRegressor(builder=builder, rng=123, epochs=20)\n\nWe will arrange for standardization of the the target by wrapping our model in TransformedTargetModel, and standardization of the features by inserting the wrapped model in a pipeline:\n\npipe = Standardizer |> TransformedTargetModel(model, target=Standardizer)\n\nIf we fit with a high verbosity (>1), we will see the losses during training. We can also see the losses in the output of report(mach)\n\nmach = machine(pipe, X, y)\nfit!(mach, verbosity=2)\n\n# first element initial loss, 2:end per epoch training losses\nreport(mach).transformed_target_model_deterministic.model.training_losses\n\nFor experimenting with learning rate, see the NeuralNetworkRegressor example.\n\npipe.transformed_target_model_deterministic.model.optimiser = Optimisers.Adam(0.0001)\n\nWith the learning rate fixed, we can now compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:\n\n# custom MLJ loss:\nmulti_loss(yhat, y) = l2(MLJ.matrix(yhat), MLJ.matrix(y))\n\n# CV estimate, based on `(X, y)`:\nevaluate!(mach, resampling=CV(nfolds=5), measure=multi_loss)\n\n# loss for `(Xtest, test)`:\nfit!(mach) # trains on all data `(X, y)`\nyhat = predict(mach, Xtest)\nmulti_loss(yhat, ytest)\n\nSee also NeuralNetworkRegressor\n\n\n\n\n\n","category":"type"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Early-Stopping-with-MLJFlux","page":"Early Stopping","title":"Early Stopping with MLJFlux","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"This demonstration is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models.","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Basic-Imports","page":"Early Stopping","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nusing Plots # To visualize training\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Loading-and-Splitting-the-Data","page":"Early Stopping","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Instantiating-the-model-Now-let's-construct-our-model.-This-follows-a-similar-setup","page":"Early Stopping","title":"Instantiating the model Now let's construct our model. This follows a similar setup","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"to the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=50,\n rng=42,\n)","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Wrapping-it-in-an-IteratedModel","page":"Early Stopping","title":"Wrapping it in an IteratedModel","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"Let's start by defining the condition that can cause the model to early stop.","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"stop_conditions = [\n Step(1), # Repeatedly train for one iteration\n NumberLimit(100), # Don't train for more than 100 iterations\n Patience(5), # Stop after 5 iterations of disimprovement in validation loss\n NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago\n TimeLimit(30/60), # Or if 30 minutes passed\n]","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"We can also define callbacks. Here we want to store the validation loss for each iteration","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"validation_losses = []\ncallbacks = [\n WithLossDo(loss->push!(validation_losses, loss)),\n]","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"Construct the iterated model and pass to it the stop_conditions and the callbacks:","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"iterated_model = IteratedModel(\n model=clf,\n resampling=Holdout(fraction_train=0.7); # loss and stopping are based on out-of-sample\n measures=log_loss,\n iteration_parameter=:(epochs),\n controls=vcat(stop_conditions, callbacks),\n retrain=false # no need to retrain on all data at the end\n);\nnothing #hide","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"You can see more advanced stopping conditions as well as how to involve callbacks in the documentation","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Training-with-Early-Stopping","page":"Early Stopping","title":"Training with Early Stopping","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"At this point, all we need is to fit the model and iteration controls will be automatically handled","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"mach = machine(iterated_model, X, y)\nfit!(mach)\n# We can get the training losses like so\ntraining_losses = report(mach)[:model_report].training_losses;\nnothing #hide","category":"page"},{"location":"common_workflows/early_stopping/notebook/#Results","page":"Early Stopping","title":"Results","text":"","category":"section"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"We can see that the model converged after 100 iterations.","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"plot(training_losses, label=\"Training Loss\", linewidth=2)\nplot!(validation_losses, label=\"Validation Loss\", linewidth=2, size=(800,400))","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"","category":"page"},{"location":"common_workflows/early_stopping/notebook/","page":"Early Stopping","title":"Early Stopping","text":"This page was generated using Literate.jl.","category":"page"},{"location":"common_workflows/early_stopping/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/early_stopping/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/early_stopping/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/early_stopping/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"extended_examples/spam_detection/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"extended_examples/spam_detection/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"extended_examples/spam_detection/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"extended_examples/spam_detection/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"common_workflows/live_training/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/live_training/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/live_training/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/live_training/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"common_workflows/hyperparameter_tuning/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/hyperparameter_tuning/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/hyperparameter_tuning/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"extended_examples/MNIST/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"extended_examples/MNIST/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"extended_examples/MNIST/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"extended_examples/MNIST/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/composition/notebook/#Model-Composition-with-MLJFlux","page":"Model Composition","title":"Model Composition with MLJFlux","text":"","category":"section"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"This tutorial is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/composition/notebook/#Basic-Imports","page":"Model Composition","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nimport RDatasets # Dataset source\nimport Random # To create imbalance\nimport Imbalance # To solve the imbalance\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/composition/notebook/#Loading-and-Splitting-the-Data","page":"Model Composition","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"To simulate an imbalanced dataset, we will take a random sample:","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"Random.seed!(803429)\nsubset_indices = rand(1:size(X, 1), 100)\nX, y = X[subset_indices, :], y[subset_indices]\nImbalance.checkbalance(y)","category":"page"},{"location":"common_workflows/composition/notebook/#Instantiating-the-model","page":"Model Composition","title":"Instantiating the model","text":"","category":"section"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"Let's load BorderlineSMOTE1 to oversample the data and Standardizer to standardize it.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"We didn't need to load Standardizer because it is a local model for MLJ (see localmodels())","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"clf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=50,\n rng=42,\n)","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"First we wrap the oversampler with the neural network via the BalancedModel construct. This comes from MLJBalancing And allows combining resampling methods with MLJ models in a sequential pipeline.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42)\nbalanced_model = BalancedModel(model=clf, balancer1=oversampler)\nstandarizer = Standardizer()","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"Now let's compose the balanced model with a standardizer.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"pipeline = standarizer |> balanced_model","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"By this, any training data will be standardized then oversampled then passed to the model. Meanwhile, for inference, the standardizer will automatically use the training set's mean and std and the oversampler will be transparent.","category":"page"},{"location":"common_workflows/composition/notebook/#Training-the-Composed-Model","page":"Model Composition","title":"Training the Composed Model","text":"","category":"section"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"It's indistinguishable from training a single model.","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"mach = machine(pipeline, X, y)\nfit!(mach)\ncv=CV(nfolds=5)\nevaluate!(mach, resampling=cv, measure=accuracy)","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"","category":"page"},{"location":"common_workflows/composition/notebook/","page":"Model Composition","title":"Model Composition","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Regression/","page":"Regression","title":"Regression","text":"MLJFlux.NeuralNetworkRegressor","category":"page"},{"location":"interface/Regression/#MLJFlux.NeuralNetworkRegressor","page":"Regression","title":"MLJFlux.NeuralNetworkRegressor","text":"NeuralNetworkRegressor\n\nA model type for constructing a neural network regressor, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux\n\nDo model = NeuralNetworkRegressor() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkRegressor(builder=...).\n\nNeuralNetworkRegressor is for training a data-dependent Flux.jl neural network to predict a Continuous target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Continuous; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Linear(σ=Flux.relu): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux documentation for more on builders, and the example below for using the @builder convenience macro.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.mse: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a regression task, natural loss functions are:\nFlux.mse\nFlux.mae\nFlux.msle\nFlux.huber_loss\nCurrently MLJ measures are not supported as loss functions here.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increasing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network.\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalized if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a regression model for the Boston house price dataset.\n\nusing MLJ\nimport MLJFlux\nusing Flux\nimport Optimisers\n\nFirst, we load in the data: The :MEDV column becomes the target vector y, and all remaining columns go into a table X, with the exception of :CHAS:\n\ndata = OpenML.load(531); # Loads from https://www.openml.org/d/531\ny, X = unpack(data, ==(:MEDV), !=(:CHAS); rng=123);\n\nscitype(y)\nschema(X)\n\nSince MLJFlux models do not handle ordered factors, we'll treat :RAD as Continuous:\n\nX = coerce(X, :RAD=>Continuous)\n\nSplitting off a test set:\n\n(X, Xtest), (y, ytest) = partition((X, y), 0.7, multi=true);\n\nNext, we can define a builder, making use of a convenience macro to do so. In the following @builder call, n_in is a proxy for the number input features (which will be known at fit! time) and rng is a proxy for a RNG (which will be passed from the rng field of model defined below). We also have the parameter n_out which is the number of output features. As we are doing single target regression, the value passed will always be 1, but the builder we define will also work for MultitargetNeuralNetworkRegressor.\n\nbuilder = MLJFlux.@builder begin\n init=Flux.glorot_uniform(rng)\n Chain(\n Dense(n_in, 64, relu, init=init),\n Dense(64, 32, relu, init=init),\n Dense(32, n_out, init=init),\n )\nend\n\nInstantiating a model:\n\nNeuralNetworkRegressor = @load NeuralNetworkRegressor pkg=MLJFlux\nmodel = NeuralNetworkRegressor(\n builder=builder,\n rng=123,\n epochs=20\n)\n\nWe arrange for standardization of the the target by wrapping our model in TransformedTargetModel, and standardization of the features by inserting the wrapped model in a pipeline:\n\npipe = Standardizer |> TransformedTargetModel(model, target=Standardizer)\n\nIf we fit with a high verbosity (>1), we will see the losses during training. We can also see the losses in the output of report(mach).\n\nmach = machine(pipe, X, y)\nfit!(mach, verbosity=2)\n\n# first element initial loss, 2:end per epoch training losses\nreport(mach).transformed_target_model_deterministic.model.training_losses\n\nExperimenting with learning rate\n\nWe can visually compare how the learning rate affects the predictions:\n\nusing Plots\n\nrates = rates = [5e-5, 1e-4, 0.005, 0.001, 0.05]\nplt=plot()\n\nforeach(rates) do η\n pipe.transformed_target_model_deterministic.model.optimiser = Optimisers.Adam(η)\n fit!(mach, force=true, verbosity=0)\n losses =\n report(mach).transformed_target_model_deterministic.model.training_losses[3:end]\n plot!(1:length(losses), losses, label=η)\nend\n\nplt\n\npipe.transformed_target_model_deterministic.model.optimiser.eta = Optimisers.Adam(0.0001)\n\nWith the learning rate fixed, we compute a CV estimate of the performance (using all data bound to mach) and compare this with performance on the test set:\n\n# CV estimate, based on `(X, y)`:\nevaluate!(mach, resampling=CV(nfolds=5), measure=l2)\n\n# loss for `(Xtest, test)`:\nfit!(mach) # train on `(X, y)`\nyhat = predict(mach, Xtest)\nl2(yhat, ytest)\n\nThese losses, for the pipeline model, refer to the target on the original, unstandardized, scale.\n\nFor implementing stopping criterion and other iteration controls, refer to examples linked from the MLJFlux documentation.\n\nSee also MultitargetNeuralNetworkRegressor\n\n\n\n\n\n","category":"type"},{"location":"common_workflows/comparison/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/comparison/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/comparison/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/comparison/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.Linear","category":"page"},{"location":"interface/Builders/#MLJFlux.Linear","page":"Builders","title":"MLJFlux.Linear","text":"Linear(; σ=Flux.relu)\n\nMLJFlux builder that constructs a fully connected two layer network with activation function σ. The number of input and output nodes is determined from the data. Weights are initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.Short","category":"page"},{"location":"interface/Builders/#MLJFlux.Short","page":"Builders","title":"MLJFlux.Short","text":"Short(; n_hidden=0, dropout=0.5, σ=Flux.sigmoid)\n\nMLJFlux builder that constructs a full-connected three-layer network using n_hidden nodes in the hidden layer and the specified dropout (defaulting to 0.5). An activation function σ is applied between the hidden and final layers. If n_hidden=0 (the default) then n_hidden is the geometric mean of the number of input and output nodes. The number of input and output nodes is determined from the data.\n\nEach layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.MLP","category":"page"},{"location":"interface/Builders/#MLJFlux.MLP","page":"Builders","title":"MLJFlux.MLP","text":"MLP(; hidden=(100,), σ=Flux.relu)\n\nMLJFlux builder that constructs a Multi-layer perceptron network. The ith element of hidden represents the number of neurons in the ith hidden layer. An activation function σ is applied between each layer.\n\nEach layer is initialized using Flux.glorot_uniform(rng), where rng is inferred from the rng field of the MLJFlux model.\n\n\n\n\n\n","category":"type"},{"location":"interface/Builders/","page":"Builders","title":"Builders","text":"MLJFlux.@builder","category":"page"},{"location":"interface/Builders/#MLJFlux.@builder","page":"Builders","title":"MLJFlux.@builder","text":"@builder neural_net\n\nCreates a builder for neural_net. The variables rng, n_in, n_out and n_channels can be used to create builders for any random number generator rng, input and output sizes n_in and n_out and number of input channels n_channels.\n\nExamples\n\njulia> import MLJFlux: @builder;\n\njulia> nn = NeuralNetworkRegressor(builder = @builder(Chain(Dense(n_in, 64, relu),\n Dense(64, 32, relu),\n Dense(32, n_out))));\n\njulia> conv_builder = @builder begin\n front = Chain(Conv((3, 3), n_channels => 16), Flux.flatten)\n d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n Chain(front, Dense(d, n_out));\n end\n\njulia> conv_nn = NeuralNetworkRegressor(builder = conv_builder);\n\n\n\n\n\n","category":"macro"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Neural-Architecture-Search-with-MLJFlux","page":"Neural Architecture Search","title":"Neural Architecture Search with MLJFlux","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"This demonstration is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Neural Architecture Search (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency, in this example we will be using a simple random search.","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Basic-Imports","page":"Neural Architecture Search","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"using MLJ # Has MLJFlux models\nusing Flux # For more flexibility\nusing RDatasets: RDatasets # Dataset source\nusing DataFrames # To view tuning results in a table\nimport Optimisers # native Flux.jl optimisers no longer supported","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Loading-and-Splitting-the-Data","page":"Neural Architecture Search","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng = 123);\nX = Float32.(X); # To be compatible with type of network network parameters\nfirst(X, 5)","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Instantiating-the-model","page":"Neural Architecture Search","title":"Instantiating the model","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Now let's construct our model. This follows a similar setup the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = \"MLJFlux\"\nclf = NeuralNetworkClassifier(\n builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),\n optimiser = Optimisers.ADAM(0.01),\n batch_size = 8,\n epochs = 10,\n rng = 42,\n)","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Generating-Network-Architectures","page":"Neural Architecture Search","title":"Generating Network Architectures","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"We know that the MLP builder takes a tuple of the form (z_1 z_2 z_k) to define a network with k hidden layers and where the ith layer has z_i neurons. We will proceed by defining a function that can generate all possible networks with a specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons.","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"function generate_networks(\n ;min_neurons::Int,\n max_neurons::Int,\n neuron_step::Int,\n num_layers::Int,\n )\n # Define the range of neurons\n neuron_range = min_neurons:neuron_step:max_neurons\n\n # Empty list to store the network configurations\n networks = Vector{Tuple{Vararg{Int, num_layers}}}()\n\n # Recursive helper function to generate all combinations of tuples\n function generate_tuple(current_layers, remaining_layers)\n if remaining_layers > 0\n for n in neuron_range\n # current_layers =[] then current_layers=[(min_neurons)],\n # [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...\n # for each of these we call generate_layers again which appends\n # the n combinations for each one of them\n generate_tuple(vcat(current_layers, [n]), remaining_layers - 1)\n end\n else\n # in the base case, no more layers to \"recurse on\"\n # and we just append the current_layers as a tuple\n push!(networks, tuple(current_layers...))\n end\n end\n\n # Generate networks for the given number of layers\n generate_tuple([], num_layers)\n\n return networks\nend","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"networks_space =\n generate_networks(\n min_neurons = 1,\n max_neurons = 64,\n neuron_step = 4,\n num_layers = 3,\n )\n\nnetworks_space[1:5]","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Wrapping-the-Model-for-Tuning","page":"Neural Architecture Search","title":"Wrapping the Model for Tuning","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Let's use this array to define the range of hyperparameters and pass it along with the model to the TunedModel constructor.","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"r1 = range(clf, :(builder.hidden), values = networks_space)\n\ntuned_clf = TunedModel(\n model = clf,\n tuning = RandomSearch(),\n resampling = CV(nfolds = 4, rng = 42),\n range = [r1],\n measure = cross_entropy,\n n = 100, # searching over 100 random samples are enough\n);\nnothing #hide","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Performing-the-Search","page":"Neural Architecture Search","title":"Performing the Search","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically:","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"mach = machine(tuned_clf, X, y);\nfit!(mach, verbosity = 0);\nfitted_params(mach).best_model","category":"page"},{"location":"common_workflows/architecture_search/notebook/#Analyzing-the-Search-Results","page":"Neural Architecture Search","title":"Analyzing the Search Results","text":"","category":"section"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"Let's analyze the search results by converting the history array to a dataframe and viewing it:","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"history = report(mach).history\nhistory_df = DataFrame(\n mlp = [x[:model].builder for x in history],\n measurement = [x[:measurement][1] for x in history],\n)\nfirst(sort!(history_df, [order(:measurement)]), 10)","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"","category":"page"},{"location":"common_workflows/architecture_search/notebook/","page":"Neural Architecture Search","title":"Neural Architecture Search","text":"This page was generated using Literate.jl.","category":"page"},{"location":"interface/Image Classification/","page":"Image Classification","title":"Image Classification","text":"MLJFlux.ImageClassifier","category":"page"},{"location":"interface/Image Classification/#MLJFlux.ImageClassifier","page":"Image Classification","title":"MLJFlux.ImageClassifier","text":"ImageClassifier\n\nA model type for constructing a image classifier, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nImageClassifier = @load ImageClassifier pkg=MLJFlux\n\nDo model = ImageClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in ImageClassifier(builder=...).\n\nImageClassifier classifies images using a neural network adapted to the type of images provided (color or gray scale). Predictions are probabilistic. Users provide a recipe for constructing the network, based on properties of the image encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is any AbstractVector of images with ColorImage or GrayImage scitype; check the scitype with scitype(X) and refer to ScientificTypes.jl documentation on coercing typical image formats into an appropriate type.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass; check the scitype with scitype(y).\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder: An MLJFlux builder that constructs the neural network. The fallback builds a depth-16 VGG architecture adapted to the image size and number of target classes, with no batch normalization; see the Metalhead.jl documentation for details. See the example below for a user-specified builder. A convenience macro @builder is also available. See also finaliser below.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.crossentropy: Standard multiclass classification loss, also known as the log loss.\nFlux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and\nIncreassing batch size may accelerate training if acceleration=CUDALibs() and a\nGPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we use MLJFlux and a custom builder to classify the MNIST image dataset.\n\nusing MLJ\nusing Flux\nimport MLJFlux\nimport Optimisers\nimport MLJIteration # for `skip` control\n\nFirst we want to download the MNIST dataset, and unpack into images and labels:\n\nimport MLDatasets: MNIST\ndata = MNIST(split=:train)\nimages, labels = data.features, data.targets\n\nIn MLJ, integers cannot be used for encoding categorical data, so we must coerce them into the Multiclass scitype:\n\nlabels = coerce(labels, Multiclass);\n\nAbove images is a single array but MLJFlux requires the images to be a vector of individual image arrays:\n\nimages = coerce(images, GrayImage);\nimages[1]\n\nWe start by defining a suitable builder object. This is a recipe for building the neural network. Our builder will work for images of any (constant) size, whether they be color or black and white (ie, single or multi-channel). The architecture always consists of six alternating convolution and max-pool layers, and a final dense layer; the filter size and the number of channels after each convolution layer is customizable.\n\nimport MLJFlux\n\nstruct MyConvBuilder\n filter_size::Int\n channels1::Int\n channels2::Int\n channels3::Int\nend\n\nmake2d(x::AbstractArray) = reshape(x, :, size(x)[end])\n\nfunction MLJFlux.build(b::MyConvBuilder, rng, n_in, n_out, n_channels)\n k, c1, c2, c3 = b.filter_size, b.channels1, b.channels2, b.channels3\n mod(k, 2) == 1 || error(\"`filter_size` must be odd. \")\n p = div(k - 1, 2) # padding to preserve image size\n init = Flux.glorot_uniform(rng)\n front = Chain(\n Conv((k, k), n_channels => c1, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c1 => c2, pad=(p, p), relu, init=init),\n MaxPool((2, 2)),\n Conv((k, k), c2 => c3, pad=(p, p), relu, init=init),\n MaxPool((2 ,2)),\n make2d)\n d = Flux.outputsize(front, (n_in..., n_channels, 1)) |> first\n return Chain(front, Dense(d, n_out, init=init))\nend\n\nIt is important to note that in our build function, there is no final softmax. This is applied by default in all MLJFlux classifiers (override this using the finaliser hyperparameter).\n\nNow that our builder is defined, we can instantiate the actual MLJFlux model. If you have a GPU, you can substitute in acceleration=CUDALibs() below to speed up training.\n\nImageClassifier = @load ImageClassifier pkg=MLJFlux\nclf = ImageClassifier(builder=MyConvBuilder(3, 16, 32, 32),\n batch_size=50,\n epochs=10,\n rng=123)\n\nYou can add Flux options such as optimiser and loss in the snippet above. Currently, loss must be a flux-compatible loss, and not an MLJ measure.\n\nNext, we can bind the model with the data in a machine, and train using the first 500 images:\n\nmach = machine(clf, images, labels);\nfit!(mach, rows=1:500, verbosity=2);\nreport(mach)\nchain = fitted_params(mach)\nFlux.params(chain)[2]\n\nWe can tack on 20 more epochs by modifying the epochs field, and iteratively fit some more:\n\nclf.epochs = clf.epochs + 20\nfit!(mach, rows=1:500, verbosity=2);\n\nWe can also make predictions and calculate an out-of-sample loss estimate, using any MLJ measure (loss/score):\n\npredicted_labels = predict(mach, rows=501:1000);\ncross_entropy(predicted_labels, labels[501:1000])\n\nThe preceding fit!/predict/evaluate workflow can be alternatively executed as follows:\n\nevaluate!(mach,\n resampling=Holdout(fraction_train=0.5),\n measure=cross_entropy,\n rows=1:1000,\n verbosity=0)\n\nSee also NeuralNetworkClassifier.\n\n\n\n\n\n","category":"type"},{"location":"interface/Summary/#Models","page":"Summary","title":"Models","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"MLJFlux provides four model types, for use with input features X and targets y of the scientific type indicated in the table below. The parameters n_in, n_out and n_channels refer to information passed to the builder, as described under Defining Custom Builders.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Model Type Prediction type scitype(X) <: _ scitype(y) <: _\nNeuralNetworkRegressor Deterministic Table(Continuous) with n_in columns AbstractVector{<:Continuous) (n_out = 1)\nMultitargetNeuralNetworkRegressor Deterministic Table(Continuous) with n_in columns <: Table(Continuous) with n_out columns\nNeuralNetworkClassifier Probabilistic <:Table(Continuous) with n_in columns AbstractVector{<:Finite} with n_out classes\nNeuralNetworkBinaryClassifier Probabilistic <:Table(Continuous) with n_in columns AbstractVector{<:Finite{2}} (n_out = 2)\nImageClassifier Probabilistic AbstractVector(<:Image{W,H}) with n_in = (W, H) AbstractVector{<:Finite} with n_out classes","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
What exactly is a \"model\"?","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"In MLJ a model is a mutable struct storing hyper-parameters for some learning algorithm indicated by the model name, and that's all. In particular, an MLJ model does not store learned parameters.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"warning: Difference in Definition\nIn Flux the term \"model\" has another meaning. However, as all Flux \"models\" used in MLJFLux are Flux.Chain objects, we call them chains, and restrict use of \"model\" to models in the MLJ sense.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
Dealing with non-tabular input","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Any AbstractMatrix{<:AbstractFloat} object Xmat can be forced to have scitype Table(Continuous) by replacing it with X = MLJ.table(Xmat). Furthermore, this wrapping, and subsequent unwrapping under the hood, will compile to a no-op. At present this includes support for sparse matrix data, but the implementation has not been optimized for sparse data at this time and so should be used with caution.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Instructions for coercing common image formats into some AbstractVector{<:Image} are here.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
Fitting and warm restarts","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"MLJ machines cache state enabling the \"warm restart\" of model training, as demonstrated in the incremental training example. In the case of MLJFlux models, fit!(mach) will use a warm restart if:","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"only model.epochs has changed since the last call; or\nonly model.epochs or model.optimiser have changed since the last call and model.optimiser_changes_trigger_retraining == false (the default) (the \"state\" part of the optimiser is ignored in this comparison). This allows one to dynamically modify learning rates, for example.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Here model=mach.model is the associated MLJ model.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"The warm restart feature makes it possible to externally control iteration. See, for example, Early Stopping with MLJFlux and Using MLJ to classifiy the MNIST image dataset.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/#Model-Hyperparameters.","page":"Summary","title":"Model Hyperparameters.","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"All models share the following hyper-parameters. See individual model docstrings for a full list.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Hyper-parameter Description Default\nbuilder Default builder for models. MLJFlux.Linear(σ=Flux.relu) (regressors) or MLJFlux.Short(n_hidden=0, dropout=0.5, σ=Flux.σ) (classifiers)\noptimiser The optimiser to use for training. Optimiser.Adam()\nloss The loss function used for training. Flux.mse (regressors) and Flux.crossentropy (classifiers)\nn_epochs Number of epochs to train for. 10\nbatch_size The batch size for the data. 1\nlambda The regularization strength. Range = [0, ∞). 0\nalpha The L2/L1 mix of regularization. Range = [0, 1]. 0\nrng The random number generator (RNG) passed to builders, for weight initialization, for example. Can be any AbstractRNG or the seed (integer) for a Xoshirio that is reset on every cold restart of model (machine) training. GLOBAL_RNG\nacceleration Use CUDALibs() for training on GPU; default is CPU1(). CPU1()\noptimiser_changes_trigger_retraining True if fitting an associated machine should trigger retraining from scratch whenever the optimiser changes. false","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"The classifiers have an additional hyperparameter finaliser (default is Flux.softmax, or Flux.σ in the binary case) which is the operation applied to the unnormalized output of the final layer to obtain probabilities (outputs summing to one). It should return a vector of the same length as its input.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"note: Loss Functions\nCurrently, the loss function specified by loss=... is applied internally by Flux and needs to conform to the Flux API. You cannot, for example, supply one of MLJ's probabilistic loss functions, such as MLJ.cross_entropy to one of the classifier constructors.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"That said, you can only use MLJ loss functions or metrics in evaluation meta-algorithms (such as cross validation) and they will work even if the underlying model comes from MLJFlux.","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
More on accelerated training with GPUs","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"As in the table, when instantiating a model for training on a GPU, specify acceleration=CUDALibs(), as in","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"using MLJ\nImageClassifier = @load ImageClassifier\nmodel = ImageClassifier(epochs=10, acceleration=CUDALibs())\nmach = machine(model, X, y) |> fit!","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"In this example, the data X, y is copied onto the GPU under the hood on the call to fit! and cached for use in any warm restart (see above). The Flux chain used in training is always copied back to the CPU at then conclusion of fit!, and made available as fitted_params(mach).","category":"page"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"
","category":"page"},{"location":"interface/Summary/#Builders","page":"Summary","title":"Builders","text":"","category":"section"},{"location":"interface/Summary/","page":"Summary","title":"Summary","text":"Builder Description\nMLJFlux.MLP(hidden=(10,)) General multi-layer perceptron\nMLJFlux.Short(n_hidden=0, dropout=0.5, σ=sigmoid) Fully connected network with one hidden layer and dropout\nMLJFlux.Linear(σ=relu) Vanilla linear network with no hidden layers and activation function σ\nMLJFlux.@builder Macro for customized builders\n ","category":"page"},{"location":"common_workflows/incremental_training/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/incremental_training/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/incremental_training/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/incremental_training/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"interface/Classification/","page":"Classification","title":"Classification","text":"MLJFlux.NeuralNetworkClassifier\nMLJFlux.NeuralNetworkBinaryClassifier","category":"page"},{"location":"interface/Classification/#MLJFlux.NeuralNetworkClassifier","page":"Classification","title":"MLJFlux.NeuralNetworkClassifier","text":"NeuralNetworkClassifier\n\nA model type for constructing a neural network classifier, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nDo model = NeuralNetworkClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkClassifier(builder=...).\n\nNeuralNetworkClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a Multiclass or OrderedFactor target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass or OrderedFactor; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.\noptimiser::Optimisers.Adam(): An Optimisers.jl optimiser. The optimiser performs the updating of the weights of the network. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.crossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.crossentropy: Standard multiclass classification loss, also known as the log loss.\nFlux.logitcrossentopy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with softmax and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default softmax finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights.] Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞). Note the history reports unpenalized losses.\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training. The default is Random.default_rng().\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.softmax: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.softmax.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.\n\nusing MLJ\nusing Flux\nimport RDatasets\nimport Optimisers\n\nFirst, we can load the data:\n\niris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), rng=123); # a vector and a table\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\nclf = NeuralNetworkClassifier()\n\nNext, we can train the model:\n\nmach = machine(clf, X, y)\nfit!(mach)\n\nWe can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:\n\nclf.optimiser = Optimisers.Adam(clf.optimiser.eta * 2)\nclf.epochs = clf.epochs + 5\n\nfit!(mach, verbosity=2) # trains 5 more epochs\n\nWe can inspect the mean training loss using the cross_entropy function:\n\ntraining_loss = cross_entropy(predict(mach, X), y)\n\nAnd we can access the Flux chain (model) using fitted_params:\n\nchain = fitted_params(mach).chain\n\nFinally, we can see how the out-of-sample performance changes over time, using MLJ's learning_curve function:\n\nr = range(clf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(clf, X, y,\n range=r,\n resampling=Holdout(fraction_train=0.7),\n measure=cross_entropy)\nusing Plots\nplot(curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\")\n\n\nSee also ImageClassifier, NeuralNetworkBinaryClassifier.\n\n\n\n\n\n","category":"type"},{"location":"interface/Classification/#MLJFlux.NeuralNetworkBinaryClassifier","page":"Classification","title":"MLJFlux.NeuralNetworkBinaryClassifier","text":"NeuralNetworkBinaryClassifier\n\nA model type for constructing a neural network binary classifier, based on MLJFlux.jl, and implementing the MLJ model interface.\n\nFrom MLJ, the type can be imported using\n\nNeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=MLJFlux\n\nDo model = NeuralNetworkBinaryClassifier() to construct an instance with default hyper-parameters. Provide keyword arguments to override hyper-parameter defaults, as in NeuralNetworkBinaryClassifier(builder=...).\n\nNeuralNetworkBinaryClassifier is for training a data-dependent Flux.jl neural network for making probabilistic predictions of a binary (Multiclass{2} or OrderedFactor{2}) target, given a table of Continuous features. Users provide a recipe for constructing the network, based on properties of the data that is encountered, by specifying an appropriate builder. See MLJFlux documentation for more on builders.\n\nTraining data\n\nIn MLJ or MLJBase, bind an instance model to data with\n\nmach = machine(model, X, y)\n\nHere:\n\nX is either a Matrix or any table of input features (eg, a DataFrame) whose columns are of scitype Continuous; check column scitypes with schema(X). If X is a Matrix, it is assumed to have columns corresponding to features and rows corresponding to observations.\ny is the target, which can be any AbstractVector whose element scitype is Multiclass{2} or OrderedFactor{2}; check the scitype with scitype(y)\n\nTrain the machine with fit!(mach, rows=...).\n\nHyper-parameters\n\nbuilder=MLJFlux.Short(): An MLJFlux builder that constructs a neural network. Possible builders include: MLJFlux.Linear, MLJFlux.Short, and MLJFlux.MLP. See MLJFlux.jl documentation for examples of user-defined builders. See also finaliser below.\noptimiser::Flux.Adam(): A Flux.Optimise optimiser. The optimiser performs the updating of the weights of the network. For further reference, see the Flux optimiser documentation. To choose a learning rate (the update rate of the optimizer), a good rule of thumb is to start out at 10e-3, and tune using powers of 10 between 1 and 1e-7.\nloss=Flux.binarycrossentropy: The loss function which the network will optimize. Should be a function which can be called in the form loss(yhat, y). Possible loss functions are listed in the Flux loss function documentation. For a classification task, the most natural loss functions are:\nFlux.binarycrossentropy: Standard binary classification loss, also known as the log loss.\nFlux.logitbinarycrossentropy: Mathematically equal to crossentropy, but numerically more stable than finalising the outputs with σ and then calculating crossentropy. You will need to specify finaliser=identity to remove MLJFlux's default sigmoid finaliser, and understand that the output of predict is then unnormalized (no longer probabilistic).\nFlux.tversky_loss: Used with imbalanced data to give more weight to false negatives.\nFlux.binary_focal_loss: Used with highly imbalanced data. Weights harder examples more than easier examples.\nCurrently MLJ measures are not supported values of loss.\nepochs::Int=10: The duration of training, in epochs. Typically, one epoch represents one pass through the complete the training dataset.\nbatch_size::int=1: the batch size to be used for training, representing the number of samples per update of the network weights. Typically, batch size is between 8 and 512. Increassing batch size may accelerate training if acceleration=CUDALibs() and a GPU is available.\nlambda::Float64=0: The strength of the weight regularization penalty. Can be any value in the range [0, ∞).\nalpha::Float64=0: The L2/L1 mix of regularization, in the range [0, 1]. A value of 0 represents L2 regularization, and a value of 1 represents L1 regularization.\nrng::Union{AbstractRNG, Int64}: The random number generator or seed used during training.\noptimizer_changes_trigger_retraining::Bool=false: Defines what happens when re-fitting a machine if the associated optimiser has changed. If true, the associated machine will retrain from scratch on fit! call, otherwise it will not.\nacceleration::AbstractResource=CPU1(): Defines on what hardware training is done. For Training on GPU, use CUDALibs().\nfinaliser=Flux.σ: The final activation function of the neural network (applied after the network defined by builder). Defaults to Flux.σ.\n\nOperations\n\npredict(mach, Xnew): return predictions of the target given new features Xnew, which should have the same scitype as X above. Predictions are probabilistic but uncalibrated.\npredict_mode(mach, Xnew): Return the modes of the probabilistic predictions returned above.\n\nFitted parameters\n\nThe fields of fitted_params(mach) are:\n\nchain: The trained \"chain\" (Flux.jl model), namely the series of layers, functions, and activations which make up the neural network. This includes the final layer specified by finaliser (eg, softmax).\n\nReport\n\nThe fields of report(mach) are:\n\ntraining_losses: A vector of training losses (penalised if lambda != 0) in historical order, of length epochs + 1. The first element is the pre-training loss.\n\nExamples\n\nIn this example we build a classification model using the Iris dataset. This is a very basic example, using a default builder and no standardization. For a more advanced illustration, see NeuralNetworkRegressor or ImageClassifier, and examples in the MLJFlux.jl documentation.\n\nusing MLJ, Flux\nimport Optimisers\nimport RDatasets\n\nFirst, we can load the data:\n\nmtcars = RDatasets.dataset(\"datasets\", \"mtcars\");\ny, X = unpack(mtcars, ==(:VS), in([:MPG, :Cyl, :Disp, :HP, :WT, :QSec]));\n\nNote that y is a vector and X a table.\n\ny = categorical(y) # classifier takes catogorical input\nX_f32 = Float32.(X) # To match floating point type of the neural network layers\nNeuralNetworkBinaryClassifier = @load NeuralNetworkBinaryClassifier pkg=MLJFlux\nbclf = NeuralNetworkBinaryClassifier()\n\nNext, we can train the model:\n\nmach = machine(bclf, X_f32, y)\nfit!(mach)\n\nWe can train the model in an incremental fashion, altering the learning rate as we go, provided optimizer_changes_trigger_retraining is false (the default). Here, we also change the number of (total) iterations:\n\njulia> bclf.optimiser\nAdam(0.001, (0.9, 0.999), 1.0e-8)\n\nbclf.optimiser = Optimisers.Adam(eta = bclf.optimiser.eta * 2)\nbclf.epochs = bclf.epochs + 5\n\nfit!(mach, verbosity=2) # trains 5 more epochs\n\nWe can inspect the mean training loss using the cross_entropy function:\n\ntraining_loss = cross_entropy(predict(mach, X_f32), y)\n\nAnd we can access the Flux chain (model) using fitted_params:\n\nchain = fitted_params(mach).chain\n\nFinally, we can see how the out-of-sample performance changes over time, using MLJ's learning_curve function:\n\nr = range(bclf, :epochs, lower=1, upper=200, scale=:log10)\ncurve = learning_curve(\n bclf,\n X_f32,\n y,\n range=r,\n resampling=Holdout(fraction_train=0.7),\n measure=cross_entropy,\n)\nusing Plots\nplot(\n curve.parameter_values,\n curve.measurements,\n xlab=curve.parameter_name,\n xscale=curve.parameter_scale,\n ylab = \"Cross Entropy\",\n)\n\n\nSee also ImageClassifier.\n\n\n\n\n\n","category":"type"},{"location":"common_workflows/architecture_search/README/#Contents","page":"Contents","title":"Contents","text":"","category":"section"},{"location":"common_workflows/architecture_search/README/","page":"Contents","title":"Contents","text":"file description\nnotebook.ipynb Juptyer notebook (executed)\nnotebook.unexecuted.ipynb Jupyter notebook (unexecuted)\nnotebook.md static markdown (included in MLJFlux.jl docs)\nnotebook.jl executable Julia script annotated with comments\ngenerate.jl maintainers only: execute to generate first 3 from 4th","category":"page"},{"location":"common_workflows/architecture_search/README/#Important","page":"Contents","title":"Important","text":"","category":"section"},{"location":"common_workflows/architecture_search/README/","page":"Contents","title":"Contents","text":"Scripts or notebooks in this folder cannot be reliably executed without the accompanying Manifest.toml and Project.toml files.","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"EditURL = \"notebook.jl\"","category":"page"},{"location":"common_workflows/live_training/notebook/#Live-Training-with-MLJFlux","page":"Live Training","title":"Live Training with MLJFlux","text":"","category":"section"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"This tutorial is available as a Jupyter notebook or julia script here.","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"Julia version is assumed to be 1.10.*","category":"page"},{"location":"common_workflows/live_training/notebook/#Basic-Imports","page":"Live Training","title":"Basic Imports","text":"","category":"section"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"using MLJ\nusing Flux\nimport RDatasets\nimport Optimisers","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"using Plots","category":"page"},{"location":"common_workflows/live_training/notebook/#Loading-and-Splitting-the-Data","page":"Live Training","title":"Loading and Splitting the Data","text":"","category":"section"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"iris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\nX = Float32.(X); # To be compatible with type of network network parameters\nnothing #hide","category":"page"},{"location":"common_workflows/live_training/notebook/#Instantiating-the-model","page":"Live Training","title":"Instantiating the model","text":"","category":"section"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=50,\n rng=42,\n)","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration.","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"stop_conditions = [\n Step(1), # Repeatedly train for one iteration\n NumberLimit(100), # Don't train for more than 100 iterations\n]\n\nvalidation_losses = []\ngr(reuse=true) # use the same window for plots\nfunction plot_loss(loss)\n push!(validation_losses, loss)\n display(plot(validation_losses, label=\"validation loss\", xlim=(1, 100)))\n sleep(.01) # to catch up with the plots while they are being generated\nend\n\ncallbacks = [ WithLossDo(plot_loss),]\n\niterated_model = IteratedModel(\n model=clf,\n resampling=Holdout(),\n measures=log_loss,\n iteration_parameter=:(epochs),\n controls=vcat(stop_conditions, callbacks),\n retrain=true,\n)","category":"page"},{"location":"common_workflows/live_training/notebook/#Live-Training","page":"Live Training","title":"Live Training","text":"","category":"section"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"Simply fitting the model is all we need","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"mach = machine(iterated_model, X, y)\nfit!(mach, force=true)","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"","category":"page"},{"location":"common_workflows/live_training/notebook/","page":"Live Training","title":"Live Training","text":"This page was generated using Literate.jl.","category":"page"},{"location":"#MLJFlux.jl","page":"Introduction","title":"MLJFlux.jl","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"A Julia package integrating deep learning Flux models with MLJ.","category":"page"},{"location":"#Objectives","page":"Introduction","title":"Objectives","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"Provide a user-friendly and high-level interface to fundamental Flux deep learning models while still being extensible by supporting custom models written with Flux\nMake building deep learning models more convenient to users already familiar with the MLJ workflow\nMake it easier to apply machine learning techniques provided by MLJ, including: out-of-sample performance evaluation, hyper-parameter optimization, iteration control, and more, to deep learning models","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"note: MLJFlux Scope\nMLJFlux support is focused on fundamental deep learning models for common supervised learning tasks. Sophisticated architectures and approaches, such as online learning, reinforcement learning, and adversarial networks, are currently outside its scope. Also, MLJFlux is limited to tasks where all (batches of) training data fits into memory.","category":"page"},{"location":"#Installation","page":"Introduction","title":"Installation","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"import Pkg\nPkg.activate(\"my_environment\", shared=true)\nPkg.add([\"MLJ\", \"MLJFlux\", \"Optimisers\", \"Flux\"])","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"You only need Flux if you need to build a custom architecture, or experiment with different loss or activation functions. Since MLJFlux 0.5, you must use optimisers from Optimisers.jl, as native Flux.jl optimisers are no longer supported. ","category":"page"},{"location":"#Quick-Start","page":"Introduction","title":"Quick Start","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"For the following demo, you will need to additionally run Pkg.add(\"RDatasets\").","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"using MLJ, Flux, MLJFlux\nimport RDatasets\nimport Optimisers\n\n# 1. Load Data\niris = RDatasets.dataset(\"datasets\", \"iris\");\ny, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n\n# 2. Load and instantiate model\nNeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=\"MLJFlux\"\nclf = NeuralNetworkClassifier(\n builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n optimiser=Optimisers.Adam(0.01),\n batch_size=8,\n epochs=100, \n acceleration=CUDALibs() # For GPU support\n )\n\n# 3. Wrap it in a machine \nmach = machine(clf, X, y)\n\n# 4. Evaluate the model\ncv=CV(nfolds=5)\nevaluate!(mach, resampling=cv, measure=accuracy) ","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"As you can see we are able to use MLJ meta-functionality (i.e., cross validation) with a Flux deep learning model. All arguments provided have defaults.","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Notice that we are also able to define the neural network in a high-level fashion by only specifying the number of neurons in each hidden layer and the activation function. Meanwhile, MLJFlux is able to infer the input and output layer as well as use a suitable default for the loss function and output activation given the classification task. Notice as well that we did not need to manually implement a training or prediction loop.","category":"page"},{"location":"#Basic-idea:-\"builders\"-for-data-dependent-architecture","page":"Introduction","title":"Basic idea: \"builders\" for data-dependent architecture","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"As in the example above, any MLJFlux model has a builder hyperparameter, an object encoding instructions for creating a neural network given the data that the model eventually sees (e.g., the number of classes in a classification problem). While each MLJ model has a simple default builder, users may need to define custom builders to get optimal results, and this will require familiarity with the Flux API for defining a neural network chain.","category":"page"},{"location":"#Flux-or-MLJFlux?","page":"Introduction","title":"Flux or MLJFlux?","text":"","category":"section"},{"location":"","page":"Introduction","title":"Introduction","text":"Flux is a deep learning framework in Julia that comes with everything you need to build deep learning models (i.e., GPU support, automatic differentiation, layers, activations, losses, optimizers, etc.). MLJFlux wraps models built with Flux which provides a more high-level interface for building and training such models. More importantly, it empowers Flux models by extending their support to many common machine learning workflows that are possible via MLJ such as:","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Estimating performance of your model using a holdout set or other resampling strategy (e.g., cross-validation) as measured by one or more metrics (e.g., loss functions) that may not have been used in training\nOptimizing hyper-parameters such as a regularization parameter (e.g., dropout) or a width/height/nchannnels of convolution layer\nCompose with other models such as introducing data pre-processing steps (e.g., missing data imputation) into a pipeline. It might make sense to include non-deep learning models in this pipeline. Other kinds of model composition could include blending predictions of a deep learner with some other kind of model (as in “model stacking”). Models composed with MLJ can be also tuned as a single unit.\nControlling iteration by adding an early stopping criterion based on an out-of-sample estimate of the loss, dynamically changing the learning rate (eg, cyclic learning rates), periodically save snapshots of the model, generate live plots of sample weights to judge training progress (as in tensor board)","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Comparing your model with a non-deep learning models","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"A comparable project, FastAI/FluxTraining, also provides a high-level interface for interacting with Flux models and supports a set of features that may overlap with (but not include all of) those supported by MLJFlux.","category":"page"},{"location":"","page":"Introduction","title":"Introduction","text":"Many of the features mentioned above are showcased in the workflow examples that you can access from the sidebar.","category":"page"},{"location":"interface/Custom Builders/#Defining-Custom-Builders","page":"Custom Builders","title":"Defining Custom Builders","text":"","category":"section"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Following is an example defining a new builder for creating a simple fully-connected neural network with two hidden layers, with n1 nodes in the first hidden layer, and n2 nodes in the second, for use in any of the first three models in Table 1. The definition includes one mutable struct and one method:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"mutable struct MyBuilder <: MLJFlux.Builder\n\tn1 :: Int\n\tn2 :: Int\nend\n\nfunction MLJFlux.build(nn::MyBuilder, rng, n_in, n_out)\n\tinit = Flux.glorot_uniform(rng)\n return Chain(\n Dense(n_in, nn.n1, init=init),\n Dense(nn.n1, nn.n2, init=init),\n Dense(nn.n2, n_out, init=init),\n )\nend","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Note here that n_in and n_out depend on the size of the data (see Table 1.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"For a concrete image classification example, see Using MLJ to classifiy the MNIST image dataset.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"More generally, defining a new builder means defining a new struct sub-typing MLJFlux.Builder and defining a new MLJFlux.build method with one of these signatures:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"MLJFlux.build(builder::MyBuilder, rng, n_in, n_out)\nMLJFlux.build(builder::MyBuilder, rng, n_in, n_out, n_channels) # for use with `ImageClassifier`","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"This method must return a Flux.Chain instance, chain, subject to the following conditions:","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"chain(x) must make sense:\nfor any x <: Array{<:AbstractFloat, 2} of size (n_in, batch_size) where batch_size is any integer (for use with one of the first three model types); or\nfor any x <: Array{<:Float32, 4} of size (W, H, n_channels, batch_size), where (W, H) = n_in, n_channels is 1 or 3, and batch_size is any integer (for use with ImageClassifier)\nThe object returned by chain(x) must be an AbstractFloat vector of length n_out.","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"Alternatively, use MLJFlux.@builder(neural_net) to automatically create a builder for any valid Flux chain expression neural_net, where the symbols n_in, n_out, n_channels and rng can appear literally, with the interpretations explained above. For example,","category":"page"},{"location":"interface/Custom Builders/","page":"Custom Builders","title":"Custom Builders","text":"builder = MLJFlux.@builder Chain(Dense(n_in, 128), Dense(128, n_out, tanh))","category":"page"}] } diff --git a/dev/workflow examples/Basic Neural Architecture Search/tuning.jl b/dev/workflow examples/Basic Neural Architecture Search/tuning.jl deleted file mode 100644 index 5a61c3e1..00000000 --- a/dev/workflow examples/Basic Neural Architecture Search/tuning.jl +++ /dev/null @@ -1,126 +0,0 @@ -# # Neural Architecture Search with MLJFlux - -# Neural Architecture Search is (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters -# defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency, -# in this example we will be using a simple random search. - -using Pkg #src -Pkg.activate(@__DIR__); #src -Pkg.instantiate(); #src - -# **Julia version** is assumed to be 1.10.* - -# ### Basic Imports - -using MLJ # Has MLJFlux models -using Flux # For more flexibility -using RDatasets: RDatasets # Dataset source -using DataFrames # To view tuning results in a table - -# ### Loading and Splitting the Data - -iris = RDatasets.dataset("datasets", "iris"); -y, X = unpack(iris, ==(:Species), colname -> true, rng = 123); -X = Float32.(X); # To be compatible with type of network network parameters -first(X, 5) - - - -# ### Instantiating the model - -# Now let's construct our model. This follows a similar setup the one followed in the [Quick Start](../../index.md#Quick-Start). -NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = "MLJFlux" -clf = NeuralNetworkClassifier( - builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu), - optimiser = Flux.ADAM(0.01), - batch_size = 8, - epochs = 10, - rng = 42, -) - - -# ### Generating Network Architectures -# We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define a network with $k$ hidden layers and -# where the ith layer has $z_i$ neurons. We will proceed by defining a function that can generate all possible networks with a -# specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons. - -function generate_networks(; - min_neurons::Int, - max_neurons::Int, - neuron_step::Int, - num_layers::Int, -) - ## Define the range of neurons - neuron_range = min_neurons:neuron_step:max_neurons - - ## Empty list to store the network configurations - networks = Vector{Tuple{Vararg{Int, num_layers}}}() - - ## Recursive helper function to generate all combinations of tuples - function generate_tuple(current_layers, remaining_layers) - if remaining_layers > 0 - for n in neuron_range - ## current_layers =[] then current_layers=[(min_neurons)], - ## [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],... - ## for each of these we call generate_layers again which appends - ## the n combinations for each one of them - generate_tuple(vcat(current_layers, [n]), remaining_layers - 1) - end - else - ## in the base case, no more layers to "recurse on" - ## and we just append the current_layers as a tuple - push!(networks, tuple(current_layers...)) - end - end - - ## Generate networks for the given number of layers - generate_tuple([], num_layers) - - return networks -end - - -# Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4 -networks_space = - generate_networks(min_neurons = 1, max_neurons = 64, neuron_step = 4, num_layers = 3) - -networks_space[1:5] - -# ### Wrapping the Model for Tuning - - -# Let's use this array to define the range of hyperparameters and pass it along with the model to the `TunedModel` constructor. -r1 = range(clf, :(builder.hidden), values = networks_space) - -tuned_clf = TunedModel( - model = clf, - tuning = RandomSearch(), - resampling = CV(nfolds = 4, rng = 42), - range = [r1], - measure = cross_entropy, - n = 100, # searching over 100 random samples are enough -); - -# ### Performing the Search - -# Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically: -mach = machine(tuned_clf, X, y); -fit!(mach, verbosity = 0); -fitted_params(mach).best_model - -# ### Analyzing the Search Results - -# Let's analyze the search results by converting the history array to a dataframe and viewing it: -history = report(mach).history -history_df = DataFrame( - mlp = [x[:model].builder for x in history], - measurement = [x[:measurement][1] for x in history], -) -first(sort!(history_df, [order(:measurement)]), 10) - - - - -using Literate #src -Literate.markdown(@__FILE__, @__DIR__, execute = false) #src -Literate.notebook(@__FILE__, @__DIR__, execute = true) #src diff --git a/dev/workflow examples/Basic Neural Architecture Search/tuning/index.html b/dev/workflow examples/Basic Neural Architecture Search/tuning/index.html deleted file mode 100644 index 524767c4..00000000 --- a/dev/workflow examples/Basic Neural Architecture Search/tuning/index.html +++ /dev/null @@ -1,73 +0,0 @@ - -Neural Architecture Search · MLJFlux

Neural Architecture Search with MLJFlux

Neural Architecture Search is (NAS) is an instance of hyperparameter tuning concerned with tuning model hyperparameters defining the architecture itself. Although it's typically performed with sophisticated search algorithms for efficiency, in this example we will be using a simple random search.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-using RDatasets: RDatasets        # Dataset source
-using DataFrames        # To view tuning results in a table

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng = 123);
-X = Float32.(X);      # To be compatible with type of network network parameters
-first(X, 5)

Instantiating the model

Now let's construct our model. This follows a similar setup the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg = "MLJFlux"
-clf = NeuralNetworkClassifier(
-	builder = MLJFlux.MLP(; hidden = (1, 1, 1), σ = Flux.relu),
-	optimiser = Flux.ADAM(0.01),
-	batch_size = 8,
-	epochs = 10,
-	rng = 42,
-)

Generating Network Architectures

We know that the MLP builder takes a tuple of the form $(z_1, z_2, ..., z_k)$ to define a network with $k$ hidden layers and where the ith layer has $z_i$ neurons. We will proceed by defining a function that can generate all possible networks with a specific number of hidden layers, a minimum and maximum number of neurons per layer and increments to consider for the number of neurons.

function generate_networks(;
-	min_neurons::Int,
-	max_neurons::Int,
-	neuron_step::Int,
-	num_layers::Int,
-)
-	# Define the range of neurons
-	neuron_range = min_neurons:neuron_step:max_neurons
-
-	# Empty list to store the network configurations
-	networks = Vector{Tuple{Vararg{Int, num_layers}}}()
-
-	# Recursive helper function to generate all combinations of tuples
-	function generate_tuple(current_layers, remaining_layers)
-		if remaining_layers > 0
-			for n in neuron_range
-				# current_layers =[] then current_layers=[(min_neurons)],
-				# [(min_neurons+neuron_step)], [(min_neurons+2*neuron_step)],...
-				# for each of these we call generate_layers again which appends
-				# the n combinations for each one of them
-				generate_tuple(vcat(current_layers, [n]), remaining_layers - 1)
-			end
-		else
-			# in the base case, no more layers to "recurse on"
-			# and we just append the current_layers as a tuple
-			push!(networks, tuple(current_layers...))
-		end
-	end
-
-	# Generate networks for the given number of layers
-	generate_tuple([], num_layers)
-
-	return networks
-end
generate_networks (generic function with 1 method)

Now let's generate an array of all possible neural networks with three hidden layers and number of neurons per layer ∈ [1,64] with a step of 4

networks_space =
-	generate_networks(min_neurons = 1, max_neurons = 64, neuron_step = 4, num_layers = 3)
-
-networks_space[1:5]
5-element Vector{Tuple{Int64, Int64, Int64}}:
- (1, 1, 1)
- (1, 1, 5)
- (1, 1, 9)
- (1, 1, 13)
- (1, 1, 17)

Wrapping the Model for Tuning

Let's use this array to define the range of hyperparameters and pass it along with the model to the TunedModel constructor.

r1 = range(clf, :(builder.hidden), values = networks_space)
-
-tuned_clf = TunedModel(
-	model = clf,
-	tuning = RandomSearch(),
-	resampling = CV(nfolds = 4, rng = 42),
-	range = [r1],
-	measure = cross_entropy,
-	n = 100,             # searching over 100 random samples are enough
-);
-nothing #hide

Similar to the last workflow example, all we need now is to fit our model and the search will take place automatically:

mach = machine(tuned_clf, X, y);
-fit!(mach, verbosity = 0);
-fitted_params(mach).best_model

Analyzing the Search Results

Let's analyze the search results by converting the history array to a dataframe and viewing it:

history = report(mach).history
-history_df = DataFrame(
-	mlp = [x[:model].builder for x in history],
-	measurement = [x[:measurement][1] for x in history],
-)
-first(sort!(history_df, [order(:measurement)]), 10)

This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Comparison/comparison/index.html b/dev/workflow examples/Comparison/comparison/index.html deleted file mode 100644 index 582a4488..00000000 --- a/dev/workflow examples/Comparison/comparison/index.html +++ /dev/null @@ -1,58 +0,0 @@ - -Model Comparison · MLJFlux

Model Comparison with MLJFlux

In this workflow example, we see how we can compare different machine learning models with a neural network from MLJFlux.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source
-using DataFrames        # To visualize hyperparameter search results

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);

Instantiating the models

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-
-clf1 = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=50,
-    rng=42
-    )
NeuralNetworkClassifier(
-  builder = MLP(
-        hidden = (5, 4), 
-        σ = NNlib.relu), 
-  finaliser = NNlib.softmax, 
-  optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), 
-  loss = Flux.Losses.crossentropy, 
-  epochs = 50, 
-  batch_size = 8, 
-  lambda = 0.0, 
-  alpha = 0.0, 
-  rng = 42, 
-  optimiser_changes_trigger_retraining = false, 
-  acceleration = CPU1{Nothing}(nothing))

Let's as well load and construct three other classical machine learning models:

BayesianLDA = @load BayesianLDA pkg=MultivariateStats
-clf2 = BayesianLDA()
-RandomForestClassifier = @load RandomForestClassifier pkg=DecisionTree
-clf3 = RandomForestClassifier()
-XGBoostClassifier = @load XGBoostClassifier pkg=XGBoost
-clf4 = XGBoostClassifier();
[ Info: For silent loading, specify `verbosity=0`. 
-import MLJMultivariateStatsInterface ✔
-[ Info: For silent loading, specify `verbosity=0`. 
-import MLJDecisionTreeInterface ✔
-[ Info: For silent loading, specify `verbosity=0`. 
-import MLJXGBoostInterface ✔
-

Wrapping One of the Models in a TunedModel

Instead of just comparing with four models with the default/given hyperparameters, we will give XGBoostClassifier an unfair advantage By wrapping it in a TunedModel that considers the best learning rate η for the model.

r1 = range(clf4, :eta, lower=0.01, upper=0.5, scale=:log10)
-tuned_model_xg = TunedModel(
-    model=clf4,
-    ranges=[r1],
-    tuning=Grid(resolution=10),
-    resampling=CV(nfolds=5, rng=42),
-    measure=cross_entropy,
-);

Of course, one can wrap each of the four in a TunedModel if they are interested in comparing the models over a large set of their hyperparameters.

Comparing the models

We simply pass the four models to the models argument of the TunedModel construct

tuned_model = TunedModel(
-    models=[clf1, clf2, clf3, tuned_model_xg],
-    tuning=Explicit(),
-    resampling=CV(nfolds=5, rng=42),
-    measure=cross_entropy,
-);

Then wrapping our tuned model in a machine and fitting it.

mach = machine(tuned_model, X, y);
-fit!(mach, verbosity=0);
┌ Warning: Layer with Float32 parameters got Float64 input.
-│   The input will be converted, but any earlier layers may be very slow.
-│   layer = Dense(4 => 5, relu)  # 25 parameters
-│   summary(x) = "4×8 Matrix{Float64}"
-└ @ Flux ~/.julia/packages/Flux/Wz6D4/src/layers/stateless.jl:60
-

Now let's see the history for more details on the performance for each of the models

history = report(mach).history
-history_df = DataFrame(mlp = [x[:model] for x in history], measurement = [x[:measurement][1] for x in history])
-sort!(history_df, [order(:measurement)])
4×2 DataFrame
Rowmlpmeasurement
Probabil…Float64
1BayesianLDA(method = gevd, …)0.0610826
2RandomForestClassifier(max_depth = -1, …)0.106565
3NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …)0.113266
4ProbabilisticTunedModel(model = XGBoostClassifier(test = 1, …), …)0.221056

This is Occam's razor in practice.


This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Composition/composition/index.html b/dev/workflow examples/Composition/composition/index.html deleted file mode 100644 index d4a18a0d..00000000 --- a/dev/workflow examples/Composition/composition/index.html +++ /dev/null @@ -1,27 +0,0 @@ - -Model Composition · MLJFlux

Model Composition with MLJFlux

In this workflow example, we see how MLJFlux enables composing MLJ models with MLJFlux models. We will assume a class imbalance setting and wrap an oversampler with a deep learning model from MLJFlux.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source
-import Random           # To create imbalance
-import Imbalance        # To solve the imbalance

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
-X = Float32.(X);      # To be compatible with type of network network parameters
-nothing #hide

To simulate an imbalanced dataset, we will take a random sample:

Random.seed!(803429)
-subset_indices = rand(1:size(X, 1), 100)
-X, y = X[subset_indices, :], y[subset_indices]
-Imbalance.checkbalance(y)

Instantiating the model

Let's load BorderlineSMOTE1 to oversample the data and Standardizer to standardize it.

BorderlineSMOTE1 = @load BorderlineSMOTE1 pkg=Imbalance verbosity=0
-NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-# We didn't need to load Standardizer because it is a  local model for MLJ (see `localmodels()`)
-
-clf = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=50,
-    rng=42
-    )

First we wrap the oversampler with the neural network via the BalancedModel construct. This comes from MLJBalancing And allows combining resampling methods with MLJ models in a sequential pipeline.

oversampler = BorderlineSMOTE1(k=5, ratios=1.0, rng=42)
-balanced_model = BalancedModel(model=clf, balancer1=oversampler)
-standarizer = Standardizer()

Now let's compose the balanced model with a standardizer.

pipeline = standarizer |> balanced_model

By this, any training data will be standardized then oversampled then passed to the model. Meanwhile, for inference, the standardizer will automatically use the training set's mean and std and the oversampler will be transparent.

Training the Composed Model

It's indistinguishable from training a single model.

mach = machine(pipeline, X, y)
-fit!(mach)
-cv=CV(nfolds=5)
-evaluate!(mach, resampling=cv, measure=accuracy)

This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Early Stopping/iteration.ipynb b/dev/workflow examples/Early Stopping/iteration.ipynb deleted file mode 100644 index 31ae9899..00000000 --- a/dev/workflow examples/Early Stopping/iteration.ipynb +++ /dev/null @@ -1,403 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Early Stopping with MLJFlux" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "**Julia version** is assumed to be 1.10.*" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Basic Imports" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using MLJ # Has MLJFlux models\n", - "using Flux # For more flexibility\n", - "import RDatasets # Dataset source\n", - "using Plots # To visualize training" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "### Loading and Splitting the Data" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", - "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", - "X = Float32.(X); # To be compatible with type of network network parameters" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "### Instantiating the model\n", - "Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start)." - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ Info: For silent loading, specify `verbosity=0`. \n", - "import MLJFlux ✔\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", - "\n", - "clf = NeuralNetworkClassifier(\n", - " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", - " batch_size=8,\n", - " epochs=50,\n", - " rng=42\n", - " )" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "### Wrapping it in an IteratedModel" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "Let's start by defining the condition that can cause the model to early stop." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "5-element Vector{Any}:\n Step(1)\n NumberLimit(100)\n Patience(5)\n NumberSinceBest(9)\n TimeLimit(Dates.Millisecond(1800000))" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "stop_conditions = [\n", - " Step(1), # Repeatedly train for one iteration\n", - " NumberLimit(100), # Don't train for more than 100 iterations\n", - " Patience(5), # Stop after 5 iterations of disimprovement in validation loss\n", - " NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago\n", - " TimeLimit(30/60), # Or if 30 minutes passed\n", - "]" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "We can also define callbacks. Here we want to store the validation loss for each iteration" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "1-element Vector{WithLossDo{Main.var\"##321\".var\"#3#4\"}}:\n WithLossDo{Main.var\"##321\".var\"#3#4\"}(Main.var\"##321\".var\"#3#4\"(), false, nothing)" - }, - "metadata": {}, - "execution_count": 5 - } - ], - "cell_type": "code", - "source": [ - "validation_losses = []\n", - "callbacks = [\n", - " WithLossDo(loss->push!(validation_losses, loss)),\n", - "]" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "cell_type": "markdown", - "source": [ - "Construct the iterated model and pass to it the stop_conditions and the callbacks:" - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "┌ Warning: Training could be very slow unless `resampling` is `Holdout(...)`, `nothing`, or a vector of the form `[(train, test),]`, where `train` and `test` are valid row indices for the data, as in `resampling = [(1:100, 101:150),]`. \n", - "└ @ MLJIteration ~/.julia/packages/MLJIteration/hgNDV/src/constructors.jl:274\n" - ] - } - ], - "cell_type": "code", - "source": [ - "iterated_model = IteratedModel(model=clf,\n", - " resampling=CV(nfolds=6), # Split the data internally into 0.7 training and 0.3 validation\n", - " measures=log_loss,\n", - " iteration_parameter=:(epochs),\n", - " controls=vcat(stop_conditions, callbacks),\n", - " retrain=false # no need to retrain on all data at the end\n", - " );" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "You can see more advanced stopping conditions as well as how to involve callbacks in the [documentation](https://juliaai.github.io/MLJ.jl/stable/controlling_iterative_models/#Controlling-Iterative-Models)" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Training with Early Stopping\n", - "At this point, all we need is to fit the model and iteration controls will be automatically handled" - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "┌ Warning: Training could be very slow unless `resampling` is `Holdout(...)`, `nothing`, or a vector of the form `[(train, test),]`, where `train` and `test` are valid row indices for the data, as in `resampling = [(1:100, 101:150),]`. \n", - "└ @ MLJBase ~/.julia/packages/MLJBase/QyZZM/src/machines.jl:654\n", - "[ Info: Training machine(ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …), …).\n", - "[ Info: final loss: 0.0727575172201591\n", - "[ Info: final training loss: 0.08841877\n", - "[ Info: Stop triggered by NumberLimit(100) stopping criterion. \n", - "[ Info: Total of 100 iterations. \n" - ] - } - ], - "cell_type": "code", - "source": [ - "mach = machine(iterated_model, X, y)\n", - "fit!(mach)\n", - "# We can get the training losses like so\n", - "training_losses = report(mach)[:model_report].training_losses;" - ], - "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "### Results\n", - "We can see that the model converged after 100 iterations." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=2}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "plot(training_losses, label=\"Training Loss\", linewidth=2)\n", - "plot!(validation_losses, label=\"Validation Loss\", linewidth=2, size=(800,400))" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using Literate #src" - ], - "metadata": {}, - "execution_count": 9 - }, - { - "cell_type": "markdown", - "source": [ - "---\n", - "\n", - "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" - ], - "metadata": {} - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/dev/workflow examples/Early Stopping/iteration/index.html b/dev/workflow examples/Early Stopping/iteration/index.html deleted file mode 100644 index 8c639f24..00000000 --- a/dev/workflow examples/Early Stopping/iteration/index.html +++ /dev/null @@ -1,37 +0,0 @@ - -Early Stopping · MLJFlux

Early Stopping with MLJFlux

In this workflow example, we learn how MLJFlux enables us to easily use early stopping when training MLJFlux models.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source
-using Plots         # To visualize training

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
-X = Float32.(X);      # To be compatible with type of network network parameters
-nothing #hide

Instantiating the model

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-
-clf = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=50,
-    rng=42
-    )

Wrapping it in an IteratedModel

Let's start by defining the condition that can cause the model to early stop.

stop_conditions = [
-    Step(1),            # Repeatedly train for one iteration
-    NumberLimit(100),   # Don't train for more than 100 iterations
-    Patience(5),        # Stop after 5 iterations of disimprovement in validation loss
-    NumberSinceBest(9), # Or if the best loss occurred 9 iterations ago
-    TimeLimit(30/60),   # Or if 30 minutes passed
-]

We can also define callbacks. Here we want to store the validation loss for each iteration

validation_losses =  []
-callbacks = [
-    WithLossDo(loss->push!(validation_losses, loss)),
-]

Construct the iterated model and pass to it the stop_conditions and the callbacks:

iterated_model = IteratedModel(model=clf,
-                               resampling=CV(nfolds=6),    # Split the data internally into 0.7 training and 0.3 validation
-                               measures=log_loss,
-                               iteration_parameter=:(epochs),
-                               controls=vcat(stop_conditions, callbacks),
-                               retrain=false                  # no need to retrain on all data at the end
-                               );
-nothing #hide

You can see more advanced stopping conditions as well as how to involve callbacks in the documentation

Training with Early Stopping

At this point, all we need is to fit the model and iteration controls will be automatically handled

mach = machine(iterated_model, X, y)
-fit!(mach)
-# We can get the training losses like so
-training_losses = report(mach)[:model_report].training_losses;
-nothing #hide

Results

We can see that the model converged after 100 iterations.

plot(training_losses, label="Training Loss", linewidth=2)
-plot!(validation_losses, label="Validation Loss", linewidth=2, size=(800,400))
using Literate #src

This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Hyperparameter Tuning/tuning.ipynb b/dev/workflow examples/Hyperparameter Tuning/tuning.ipynb deleted file mode 100644 index 3b199e70..00000000 --- a/dev/workflow examples/Hyperparameter Tuning/tuning.ipynb +++ /dev/null @@ -1,897 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Hyperparameter Tuning with MLJFlux" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "**Julia version** is assumed to be 1.10.*" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Basic Imports" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using MLJ # Has MLJFlux models\n", - "using Flux # For more flexibility\n", - "import RDatasets # Dataset source\n", - "using Plots # To plot tuning results" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "### Loading and Splitting the Data" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", - "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", - "X = Float32.(X); # To be compatible with type of network network parameters" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "### Instantiating the model\n", - "Now let's construct our model. This follows a similar setup the one followed in the [Quick Start](../../index.md#Quick-Start)." - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ Info: For silent loading, specify `verbosity=0`. \n", - "import MLJFlux ✔\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", - "clf = NeuralNetworkClassifier(\n", - " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", - " batch_size=8,\n", - " epochs=10,\n", - " rng=42\n", - " )" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "### Hyperparameter Tuning Example\n", - "Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "We start by defining the hyperparameter ranges" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "NumericRange(0.0001 ≤ optimiser.eta ≤ 1.0; origin=0.5, unit=0.5; on log10 scale)" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "r1 = range(clf, :batch_size, lower=1, upper=64)\n", - "r2 = range(clf, :(optimiser.eta), lower=10^-4, upper=10^0, scale=:log10)" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "Then passing the ranges along with the model and other arguments to the `TunedModel` constructor." - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "tuned_model = TunedModel(\n", - " model=clf,\n", - " tuning=Grid(goal=25),\n", - " resampling=CV(nfolds=5, rng=42),\n", - " range=[r1, r2],\n", - " measure=cross_entropy,\n", - ");" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "cell_type": "markdown", - "source": [ - "Then wrapping our tuned model in a machine and fitting it." - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "mach = machine(tuned_model, X, y);\n", - "fit!(mach, verbosity=0);" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "Let's check out the best performing model:" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.1, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 10, \n batch_size = 32, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" - }, - "metadata": {}, - "execution_count": 7 - } - ], - "cell_type": "code", - "source": [ - "fitted_params(mach).best_model" - ], - "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "We can visualize the hyperparameter search results as follows" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=4}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "plot(mach)" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "cell_type": "markdown", - "source": [ - "### Learning Curves\n", - "With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "First define the range and wrap it in a learning curve" - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ Info: Training machine(ProbabilisticTunedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …), …).\n", - "[ Info: Attempting to evaluate 25 models.\n", - "\rEvaluating over 25 metamodels: 0%[> ] ETA: N/A\u001b[K\rEvaluating over 25 metamodels: 4%[=> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 8%[==> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 12%[===> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 16%[====> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 20%[=====> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 24%[======> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 28%[=======> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 32%[========> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 36%[=========> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 40%[==========> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 44%[===========> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 48%[============> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 52%[=============> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 56%[==============> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 60%[===============> ] ETA: 0:00:01\u001b[K\rEvaluating over 25 metamodels: 64%[================> ] ETA: 0:00:01\u001b[K\rEvaluating over 25 metamodels: 68%[=================> ] ETA: 0:00:01\u001b[K\rEvaluating over 25 metamodels: 72%[==================> ] ETA: 0:00:01\u001b[K\rEvaluating over 25 metamodels: 76%[===================> ] ETA: 0:00:01\u001b[K\rEvaluating over 25 metamodels: 80%[====================> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 84%[=====================> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 88%[======================> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 92%[=======================> ] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 96%[========================>] ETA: 0:00:00\u001b[K\rEvaluating over 25 metamodels: 100%[=========================] Time: 0:00:04\u001b[K\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": "(parameter_name = \"epochs\",\n parameter_scale = :log10,\n parameter_values = [1, 2, 3, 4, 5, 6, 7, 9, 11, 13 … 39, 46, 56, 67, 80, 96, 116, 139, 167, 200],\n measurements = [0.8062291224242571, 0.7349032636328473, 0.6831822864090799, 0.6499205331218364, 0.6248770254396706, 0.606830885162984, 0.592554407591952, 0.5716582179222147, 0.5568372147591829, 0.5458850958793409 … 0.20880982517086102, 0.17360248501543618, 0.1304176223923372, 0.10766664152601196, 0.10348057744910813, 0.10307123308456925, 0.09357906967304538, 0.09787030345670497, 0.10027104135450549, 0.09926870681190969],)" - }, - "metadata": {}, - "execution_count": 9 - } - ], - "cell_type": "code", - "source": [ - "r = range(clf, :epochs, lower=1, upper=200, scale=:log10)\n", - "curve = learning_curve(clf, X, y,\n", - " range=r,\n", - " resampling=CV(nfolds=4, rng=42),\n", - " measure=cross_entropy)" - ], - "metadata": {}, - "execution_count": 9 - }, - { - "cell_type": "markdown", - "source": [ - "Then plot the curve" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "execution_count": 10 - } - ], - "cell_type": "code", - "source": [ - "plot(curve.parameter_values,\n", - " curve.measurements,\n", - " xlab=curve.parameter_name,\n", - " xscale=curve.parameter_scale,\n", - " ylab = \"Cross Entropy\")" - ], - "metadata": {}, - "execution_count": 10 - }, - { - "cell_type": "markdown", - "source": [ - "---\n", - "\n", - "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" - ], - "metadata": {} - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/dev/workflow examples/Hyperparameter Tuning/tuning/index.html b/dev/workflow examples/Hyperparameter Tuning/tuning/index.html deleted file mode 100644 index e36762e7..00000000 --- a/dev/workflow examples/Hyperparameter Tuning/tuning/index.html +++ /dev/null @@ -1,33 +0,0 @@ - -Hyperparameter Tuning · MLJFlux

Hyperparameter Tuning with MLJFlux

In this workflow example we learn how to tune different hyperparameters of MLJFlux models with emphasis on training hyperparameters.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source
-using Plots             # To plot tuning results

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
-X = Float32.(X);      # To be compatible with type of network network parameters
-nothing #hide

Instantiating the model

Now let's construct our model. This follows a similar setup the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-clf = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=10,
-    rng=42
-    )

Hyperparameter Tuning Example

Let's tune the batch size and the learning rate. We will use grid search and 5-fold cross-validation.

We start by defining the hyperparameter ranges

r1 = range(clf, :batch_size, lower=1, upper=64)
-r2 = range(clf, :(optimiser.eta), lower=10^-4, upper=10^0, scale=:log10)

Then passing the ranges along with the model and other arguments to the TunedModel constructor.

tuned_model = TunedModel(
-    model=clf,
-    tuning=Grid(goal=25),
-    resampling=CV(nfolds=5, rng=42),
-    range=[r1, r2],
-    measure=cross_entropy,
-);
-nothing #hide

Then wrapping our tuned model in a machine and fitting it.

mach = machine(tuned_model, X, y);
-fit!(mach, verbosity=0);
-nothing #hide

Let's check out the best performing model:

fitted_params(mach).best_model

We can visualize the hyperparameter search results as follows

plot(mach)

Learning Curves

With learning curves, it's possible to center our focus on the effects of a single hyperparameter of the model

First define the range and wrap it in a learning curve

r = range(clf, :epochs, lower=1, upper=200, scale=:log10)
-curve = learning_curve(clf, X, y,
-                       range=r,
-                       resampling=CV(nfolds=4, rng=42),
-                       measure=cross_entropy)

Then plot the curve

plot(curve.parameter_values,
-       curve.measurements,
-       xlab=curve.parameter_name,
-       xscale=curve.parameter_scale,
-       ylab = "Cross Entropy")

This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Incremental Training/incremental/index.html b/dev/workflow examples/Incremental Training/incremental/index.html deleted file mode 100644 index 7f7e578d..00000000 --- a/dev/workflow examples/Incremental Training/incremental/index.html +++ /dev/null @@ -1,22 +0,0 @@ - -Incremental Training · MLJFlux

Incremental Training with MLJFlux

In this workflow example we explore how to incrementally train MLJFlux models.

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
-X = Float32.(X)      # To be compatible with type of network network parameters
-(X_train, X_test), (y_train, y_test) = partition((X, y), 0.8,
-                                                 multi = true,
-                                                 shuffle = true,
-                                                 rng=42);
-nothing #hide

Instantiating the model

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-clf = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=10,
-    rng=42
-    )

Initial round of training

Now let's train the model. Calling fit! will automatically train it for 100 epochs as specified above.

mach = machine(clf, X_train, y_train)
-fit!(mach)

Let's evaluate the training loss and validation accuracy

training_loss = cross_entropy(predict(mach, X_train), y_train)
val_acc = accuracy(predict_mode(mach, X_test), y_test)

Poor performance it seems.

Incremental Training

Now let's train it for another 30 epochs at half the original learning rate. All we need to do is changes these hyperparameters and call fit again. It won't reset the model parameters before training.

clf.optimiser.eta = clf.optimiser.eta / 2
-clf.epochs = clf.epochs + 30
-fit!(mach, verbosity=2);
-nothing #hide

Let's evaluate the training loss and validation accuracy

training_loss = cross_entropy(predict(mach, X_train), y_train)
training_acc = accuracy(predict_mode(mach, X_test), y_test)

That's much better. If we are rather interested in resetting the model parameters before fitting, we can do fit(mach, force=true).


This page was generated using Literate.jl.

diff --git a/dev/workflow examples/Live Training/live-training.ipynb b/dev/workflow examples/Live Training/live-training.ipynb deleted file mode 100644 index 283a9b47..00000000 --- a/dev/workflow examples/Live Training/live-training.ipynb +++ /dev/null @@ -1,11077 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Incremental Training with MLJFlux" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "**Julia version** is assumed to be 1.10.*" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Basic Imports" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using MLJ # Has MLJFlux models\n", - "using Flux # For more flexibility\n", - "import RDatasets # Dataset source\n", - "using Plots # For training plot" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "### Loading and Splitting the Data" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "iris = RDatasets.dataset(\"datasets\", \"iris\");\n", - "y, X = unpack(iris, ==(:Species), colname -> true, rng=123);\n", - "X = Float32.(X); # To be compatible with type of network network parameters" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "### Instantiating the model\n", - "Now let's construct our model. This follows a similar setup to the one followed in the [Quick Start](../../index.md#Quick-Start)." - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ Info: For silent loading, specify `verbosity=0`. \n", - "import MLJFlux ✔\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": "NeuralNetworkClassifier(\n builder = MLP(\n hidden = (5, 4), \n σ = NNlib.relu), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing))" - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux\n", - "\n", - "clf = NeuralNetworkClassifier(\n", - " builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),\n", - " optimiser=Flux.ADAM(0.01),\n", - " batch_size=8,\n", - " epochs=50,\n", - " rng=42\n", - " )" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "ProbabilisticIteratedModel(\n model = NeuralNetworkClassifier(\n builder = MLP(hidden = (5, 4), …), \n finaliser = NNlib.softmax, \n optimiser = Adam(0.01, (0.9, 0.999), 1.0e-8, IdDict{Any, Any}()), \n loss = Flux.Losses.crossentropy, \n epochs = 50, \n batch_size = 8, \n lambda = 0.0, \n alpha = 0.0, \n rng = 42, \n optimiser_changes_trigger_retraining = false, \n acceleration = CPU1{Nothing}(nothing)), \n controls = Any[Step(1), NumberLimit(100), WithLossDo{typeof(Main.var\"##365\".plot_loss)}(Main.var\"##365\".plot_loss, false, nothing)], \n resampling = Holdout(\n fraction_train = 0.7, \n shuffle = false, \n rng = Random._GLOBAL_RNG()), \n measure = LogLoss(tol = 2.22045e-16), \n weights = nothing, \n class_weights = nothing, \n operation = nothing, \n retrain = true, \n check_measure = true, \n iteration_parameter = :epochs, \n cache = true)" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "stop_conditions = [\n", - " Step(1), # Repeatedly train for one iteration\n", - " NumberLimit(100), # Don't train for more than 100 iterations\n", - "]\n", - "\n", - "validation_losses = []\n", - "gr(reuse=true) # use the same window for plots\n", - "function plot_loss(loss)\n", - " push!(validation_losses, loss)\n", - " display(plot(validation_losses, label=\"validation loss\", xlim=(1, 100)))\n", - " sleep(.01) # to catch up with the plots while they are being generated\n", - "end\n", - "\n", - "callbacks = [ WithLossDo(plot_loss),]\n", - "\n", - "iterated_model = IteratedModel(model=clf,\n", - " resampling=Holdout(), # Split the data internally into 0.7 training and 0.3 validation\n", - " measures=log_loss,\n", - " iteration_parameter=:(epochs),\n", - " controls=vcat(stop_conditions, callbacks),\n", - " retrain=true # no need to retrain on all data at the end\n", - " )" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "### Live Training\n", - "Simply fitting the model is all we need" - ], - "metadata": {} - }, - { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ Info: Training machine(ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …), …).\n", - "[ Info: final loss: 0.11905657006943889\n", - "[ Info: final training loss: 0.07196077\n", - "[ Info: Stop triggered by NumberLimit(100) stopping criterion. \n", - "[ Info: Retraining on all provided data. To suppress, specify `retrain=false`. \n", - "[ Info: Total of 100 iterations. \n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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9fUWi8XRgzg9Dki7sFqtTTlJ024hDAoKEkJoNJr58+f/6U9/ysnJiYmJ8ff3r6ysVHe4ePGir6/vzR7kdezY0cvLa9myZfaaRxJqCD08PBw9yIOgZcuWjh7B6VksFqPRaDAYHD3Ig4AD8u5Zrdba2trb7mb/9xFWVFQYjUb17NCePXtmZGSo2zMyMnr27Gn3LwcAwN1o0iPC2tra9evXl5SUWK3WVatWtWjR4tlnnxVCxMfH//znP58zZ056enp6enp0dPTVq1eTk5OHDh2qPqs5a9asJ554Ijo62svL68033/z000/v7XcDAMAdalIIzWbzoUOHhBDTp08/dOhQ69at1RD279+/U6dOQoj27dtXVlauXLmyRYsWkydPnjlzpvq0bLdu3Xbs2LFixYr6+vrVq1cPHTr0Xn4vAADcMY3t42AcKzk5uaysjNcI7xSvEdpLdXU1L8ncPV4jtBcOSLtQXyNs+ElnjeKzRgEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpEUIAgNQIIQBAaoQQACA1QggAkBohBABIjRACAKRGCAEAUiOEAACpuTZ919LS0nPnznXq1MnT0/PGS+vq6r7//vuLFy+GhYVFRkaqG2tra3Nycmz7dOjQwc/P7y4nBgDAjpoUQkVR2rdvX1VVVVdXl56e/vjjj1+3w5UrVzp06BAREREcHLx3796RI0euWbNGCFFQUNCnT59u3bqpu73yyivx8fH2/QYAALgbTQqhRqPZtWtX586d/f39G91Bp9NlZWU98sgjQohz586FhobOnj07KipKCNG2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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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P9+/f/+KiorAwMDp06e7Gqxevbq6ujouLu7jjz8eP378NU/93HPPXbx4UQixbdu2cePGBQcHFxcX9+nT5+TJk0KItLS0//qv/3rllVdatWr13nvvPfroo/X8LRYtWjR37tyoqKjjx4/36tXLLEynTJmSmprarVs3Pz+/gwcPCiEWLFjw7rvvdu7cuXnz5p9++uktf2i3gIoQAK5t83l9zbfyJmyeuNNyf7v/U5zMnDlz5syZL774osViWb9+/U9+8pPQ0NDQ0NANGzaYDbp27frSSy/NmDHjmm/41ltvTZ069ZVXXhFCtGrV6sEHHzSPv/baa673b9eu3XfffRcXF9ejR49mzZpdHWkLFiz485///NOf/lQI4XQ6lyxZsnnzZiGEpmlbtmzx9/e/99574+Pjk5OTr9mH77//funSpf/4xz/MCbLx48evWLHihRdeOHr06O7du3/0ox+5Wh49evSRRx6pG9jSqBSEVIQAVDIs2tIySN5/Sj3DrzzXkCFD/P3909LShg4dumHDhuXLlwshqqurn3zyydTUVHODeXl5+fXe8JtvvnEFW//+/V3HN27cuGTJEqfT2aRJk6KiouzsbPOimFez2+3nzp0bOHCg+XTQoEF//etfzcfdu3c3L5ASExNTVlZWVVUVHBx89Tt89913TZs2dS0TGTRoUHp6uhDi2WefHTBgwODBg8eNGzd79mybzfbLX/5y5syZb7/99tixY+fMmSNzrY1CQSicjloWywBQRrRNRNs8+du5pmkPP/xwcnKyv79/RUXFsGHDhBArV67My8v75ptvrFZrWlqauZntmoKDg6uqqszHrgcFBQWPP/74iRMn2rdvL4To2LFjPddeMS+PUPdNXLfSc10mrP4r8thsturqasMwzGaud3j++efnzJmze/fulStX/u1vf/vkk0/uv//+0aNH79u3b926dXfffff58+elXaJIpTlC3cHQKADUlZSUtG3btuXLlyclJZnBkJ+fHxsba15j5XoDkqahQ4empKSY17nctGmTebCoqMhqtZpXBzt48GBmZqZ5PDQ0tKio6Ip3sFgsgwcPNqchdV1fv369Gcbu69ChQ1hY2I4dO4QQlZWV27ZtGzZsmGEYhYWF4eHhU6ZMWbp06TfffCOEKCgoCA4OHjdu3LvvvpuVlVVPpXvbKVQRMjQKAFdo165d796933vv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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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jp4wYULTpk2DW54mFBcXr1mzpqysrHPnzuPGjZNW3p49e3bp0qWVlZVPPPFEjx49gl2jBmzfvj0/P18IkZWVNXDgQOmk2+1euXJlYWFhamrqhAkTTCZTMEtUq9OnT+/fv7+0tPSpp56KiorynT948ODatWstFsu4ceNSUlKkkzU1NUuWLDl+/HiXLl3Gjh0rfV3pEWrJhQsXnnjiidLS0uTk5EWLFg0ePNjlcgkhampq+vXrd/DgwZSUlClTpixatCjYlWpDZWVlbm7ulClTLl68KJ357LPPRo4cmZSUdO7cuR49ely7di24FarfX//614yMjPLy8latWn399dc1NTVCiEuXLqWnp5eXlyckJAwdOnTHjh3BLlPtlixZMnr06MTExISEhKeffnrZsmXS+WnTps2dO7ddu3arV6/Ozc0Nao0qdfXq1e7du3/wwQdTpkyxWq2+83v37h0wYEBMTIzT6czIyPjnP/8pnc/NzV21alXbtm3nzp37y1/+8sfWXmhHTU1NTU2NdFxRUWGxWAoKCrxeb15eXocOHdxut9fr3bRpU0pKinSMukn/ywghioqKpDO9e/desGCBdPzQQw/NmTMneNVpgMvlatmy5erVq284P2vWrBEjRkjH77777qOPPqp4aRozbNiwd955Rzp+++23s7OzvV6v1Wo1m81nz571er1lZWWhoaHFxcXBrFKVPB6PdCCEOHr0qO/8qFGjZs6cKR0/88wz06dP93q9xcXFFoultLTU6/X+85//tFgsVqvV6/XSI9QSo9FoNP44mu1yuVwuV0REhBBi586dgwcP1uv1QoisrKzTp0/7fv3B7ezevXv//v1Tp071namurt69e/eQIUOkh1lZWXRl6lZUVFRSUpKZmTlv3rylS5dev35dOr9z586hQ4dKx3yM/ujQocPhw4c9Ho/H4zl06FDHjh2FELt3705JSZG26YmKikpLS+MGKTe73aZaO3bsuPlLuGvXrrS0NGkeJCkpKSUlZffu3YKhUe361a9+lZOTk5qaKoS4ePFikyZNpPNms7lx48a+sT7cktPp/NnPfrZw4ULptweJ9LthfHy89DAhIYGPsW6nT58OCQl54oknysrKPv/8865du0qDybW/kPHx8Xa7nUHmus2ePfvKlSstWrRITk4uLy9//fXXhRBWq9X3MQohEhISLly4ELwataS6urqkpKT2l1D6t3y7j5Qg1KTXXnvtwIED//u//ys9NBqNbrfb99OampqQkJAglaYNr7zyysiRI6Xfu32klQjStKvgY/SDXq8vLS394IMP/vCHP3z00UeJiYlLly4VQhiNRt/HKB2wyqNur7/+usPh2Lhx48aNG20225tvvin4d10PBoNBr9fX/hJKH93tPlKCUHv++Mc/fvTRR9u2bYuJiZHONG/e/Pz589JxeXl5ZWVls2bNglegBqxaterjjz9OT09PT08XQjz11FMbNmyIj483Go2+T/L8+fOsGq1b8+bNhRAPPPCA9PCBBx44c+aMdN7Xdzl//nx0dHRYWFiwitSEhQsXzpw5s3v37mlpaTNnzly4cKEQolmzZr5voxDi/Pnz/Lv2k8FgSEhIqP1vWfroav9XWfs8Qagxf/rTnxYvXpyfn5+QkOA7mZOT8/nnn9tsNiHE+vXrMzIyEhMTg1ejBnz++edLly5dsGCBdDv11157rV+/fgaDITs7e/369UKImpqaTz/9dPjw4cGuVNUefPDB1q1b79mzRwjh8Xj27dsnhWJOTs7HH3/s8XiEEHl5eTk5OUEuVPViY2NPnjwpHZ88eVLaJ3rAgAFlZWUFBQVCiBMnTnz33Xe+SS/c0fDhw/Py8oQQXq93/fr10pcwKyvr6NGjxcXFQgjpiosBAwYIwapRTZH+/lq1apX2L1999ZX0o8cee6xLly65ubmxsbHbtm0Lbp3aImqtGj1w4EBcXNyYMWN69erVr18/p9MZ3NrUb/369fHx8ZMnT87MzOzfv7/0idlstu7du/fv3//pp59OSEg4duxYsMtUu7y8vKioqLFjxz777LPR0dEff/yxdH7OnDlNmzadMGFCixYtZs2aFdwiVSsrKystLU0I0bFjx7S0tGvXrnm93lOnTjVt2nTUqFGDBw/u3LlzeXm51HjWrFnJycnSVcK+ZeHcfUJLqqqqioqKap9p06aNdAGpx+PZuXOn1Wrt27dvUlJSkArUpP3793fs2NFisUgPr1y5sn379qioqEGDBjGz5Y8zZ87s3r27WbNmffv29S0+cjqdX331lc1mGzJkiG+zAtTh4sWLe/fu1el0PXv2rD2ic+TIkW+//TY1NbV79+5BLE/NCgsLpQtYJV27dpUuk7927Vp+fr7FYhk8eLDvH7gQ4sCBA8ePH+/cuXOnTp2kMwQhAKBBY44QANCgEYQAgAaNIAQANGgEIQCgQSMIAQANGkEIAGjQCEIAQINGEAIAGjSCEADQoBGEAIAGjSAEADRo/w9LTGoVd2+LIgAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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2mOxWPz9/b1dhebV1tZKkqTX671diObxhXQJPkaXkGU5KirqlpepqEUIAIDn0Q8JAPBpBCEAwKcRhAAAn0YQAgB8mopGjeKWZFn+9ttvd+3adfXq1R49eowfP95oNCo/Ki4uXrZs2ZUrV4YNGzZkyBDv1qkh//rXvw4dOjRu3DjHxIndu3f/7//+b3R09NSpU2NjY71bniacPXs2MzNT+U5OmjRJmQF14cKFjz/+2Gw2jx07tk+fPt6uUQO+/PLLXbt2SZKUnp6elpamnLTZbCtXrjx58mTnzp2nTJni+PuOuvLy8o4cOVJaWjp27Njw8HDH+X/961/r1q0LCAiYNGlSu3btlJNWq3X58uVnz57t0aNHRkaGMlCcFqGW5ObmPvroo9evX2/VqtWCBQuGDh1qt9uFENXV1f3798/Kymrbtu1jjz22evVqb1eqDdevX8/IyHjyySeLioqUMxs3bhwzZkzr1q3Pnz+fmppaXl7u3QrVb9u2bXfffXdZWVmbNm127dqlLHtbUFDQt2/fioqKmJiYIUOG7Nu3z9tlqt1HH300YcKEuLi4mJiYMWPGrFy5Ujk/a9asRYsWdezYcfXq1ZMnT/ZqjSpVXFzcu3fvDz/88MknnywsLHSc//bbb9PS0iIjIy0WS9++ffPz85Xzjz322Jo1azp06LBw4cI5c+b8dLUM7aipqamtrVWOS0tLDQZDVlaWLMurVq2688477Xa7LMvr16+/4447lGPc3JNPPrlw4UIhRE5OjnImJSVlxYoVynH//v0//PBDrxWnBVartVWrVp9++mm986+88sojjzyiHM+fP3/EiBEeL01jhg4d+vbbbyvHr7/+uvKJFRQU+Pv75+fny7JcWloaEBCQm5vrzSpVyfFvnRDizJkzjvOjR49+5ZVXlOMJEya8+OKLsizn5OQEBASUlpbKspyfnx8QEFBYWCjLMi1CLTEajY4Z31ar1W63BwcHCyH27NmTnp4uSZIQIj09/cyZM44mDhqye/fus2fPPv74444zlZWVR44ccXQsp6enf/31116qThtOnDhRXl6ekpKycOHCjz/+2NGA/vrrr9PT05VjPkZndOnS5dixY8o/68eOHevatasQYv/+/cnJycoyPREREb179967d6+3K1Ud5d+9n/v666/vv/9+5djxJdy7d29KSkpERIQQolWrVu3atfvnP/8p6BrVrqeffnrcuHGtW7cWQhQUFLRo0UI5HxYW5u/vX1BQ4NXq1M5sNs+ePfuDDz6o+7dI+dBiYmKUh7GxsZcvX/ZOfRqRl5dnMBjGjh177dq1rVu39urV6/r16+I/v5AxMTHXr1+vrKz0aqVqN3/+/CtXriQmJiYmJpaXl7/22mtCiMLCQsfHKPhC3o6ampqSkpK6X0Llb3dDHylBqElz5849c+bMggULlIcGg6G2tlY5lmXZZrP5+fl5rzoNmDt37oQJE+644466J5WRCI5P0mq1ssbVzel0upKSkqVLl7700ksbNmyIjIxUbm7V/UIqa9cZDIzLu5nXXnvNYrFs2bJly5YtZWVlr7/+uhDCYDDU3WrUarXy99pJer1ep9PV/RIqH11DHylBqD2vvvrq1q1bd+7cqTTwhRAtW7Z0/FexsLCwtrY2Pj7eewVqwJo1a9atW9enT59+/foJIX75y19u3bpVWfPdsS34pUuX+BhvLiEhQQjRpUsX5WGXLl2+//578Z9fyEuXLkVHR/NfiptbsmTJq6++2rt375SUlN/97ndLliwRQiQkJNTdpP7SpUvKB45b0uv1sbGxdf8uKx9dy5Ytb/iREoQa8/bbb69bt2779u3R0dGOkyNGjNi6dWtVVZUQYsOGDQMHDnRkJG5o586dy5cvX7x4sTJYZt68ef369fP397///vs3bNgghKipqfnss88eeughb1eqaikpKYmJiQcOHBBC2Gy2Q4cOKaE4YsSIv/3tb8qQ5vXr148YMcLLhapeVFRUbm6ucpybm6usEz1o0KDi4uKjR48KIXJycrKzsx03vXBLDz300Pr164UQsixv2LBB+RIqQyhycnKEEMqMi59mqnhyeA+a6NSpU0KIdu3apfzbvn37ZFm22WzDhg3r1atXRkZGVFTUnj17vF2pZigbnjhGjX777bdRUVETJky46667Bg8ebLVavVue+q1bty42NnbatGnKJ1ZTUyPLcnl5+Z133jlo0KAxY8bExcV999133i5T7TIzM8PDwzMyMiZOnBgeHr5p0ybl/P/8z//Ex8dPnTo1MTFx3rx53i1StdLT01NSUoQQXbt2TUlJKSsrk2X5/Pnz8fHxo0ePvu+++7p3737t2jXl4tdeey0xMXHq1Knx8fHvvfeecpLdJ7TEbDafOXOm7pnk5OSwsDAhhN1u3717948//jhw4ED6T5wny/LRo0e7devm6Lu7cuXK7t27o6KiBg0axJ0tZ1y4cOHAgQMtW7bs37+/Yz9Ri8Wya9cus9k8ZMiQunOc0ZDLly8fPHhQkqS77747Li7Ocf7UqVPKhPpevXp5sTw1O3HihNVqdTy88847ldH1ZWVlO3fuDAgIuO++++ru7Hj06NGzZ8927969W7duyhmCEADg07hHCADwaQQhAMCnEYQAAJ9GEAIAfBpBCADwaQQhAMCnEYQAAJ9GEAIAfBpBCADwaQQhAMCnEYQAAJ/2/wEc31EX+M+nMQAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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/P3vf7/zzjuv+tVPP/10aWmpEGLdunV33nlnTExMZWVl7969lRtN79q169FHH/3tb3/bunXrwsLChh+x9+KLLz7xxBNpaWn79u3r1atXVVWVEOL+++/ftWtXt27d9Hr9zp07hRC//OUvly5d2qlTp8TERKX+gFFZj5A5QgCqsfq4+52SwN03dXY33V3t/6NzMn369JkzZ77wwguSJK1cufLee++Nj4+Pj49ftWqV0qBLly7z5s2bOnXqVT/w1VdfnTx58rx584QQrVu3njRpknJ8wYIFns9v3779iRMnbrzxxptuuikxMfHhhx++4kOef/75119/vaCgQAjhdDpfeumlv/71r0IInU63bt06vV4/YsSIvLy85cuXX7WG6urqV1555cCBA506dRJC5OfnL168+Nlnn92zZ8/27dtvuukmT8svv/zywQcfnDx5cuPOmi+oKAiF3WzW5D3rAYSmIRlS62h9wL7u5uQrewKDBg3S6XS7du26/fbb16xZs3jxYiGEzWabPXv2zp07dTqdXq+3Wq3X+sAjR4489thjyut+/fp5jq9Zs+all15yuVyxsbGVlZXffffdjTfeeNVPsNlsx48f79+/v/LjgAEDnnvuOeV1jx49lDurZGZmVldX2+32q46OHj9+PCEhQUlBIcTAgQOVPuVTTz1166233n777WPGjJk1a1ZMTMxPf/rTmTNnLly4MD8//8EHH0xLS7v+KfMRFQUhi2UAqEpGjJQRE8wCJEmaNm3aO++8o9PpbDbboEGDhBCLFy8uKys7cuSI0WjcuXNnA08mio6Orq2tVV57XpSVlT322GMHDx7MysoSQmRnZytLbK7KaDQajUabzeb5kJiYH86IZxqy/rOJfiwmJsZms3keYWS1WpVPeOaZZx5++OEtW7a8+eabH3300d///veCgoLRo0dv37595cqVt9566/Hjx5WgDQA1zRFyZxkA+E8zZsxYt27dwoULp0+frtPphBBlZWXt27c3Go2yLL/zzjsNvHfQoEFr165VHr+gjGcKISoqKiIjI5UnxX7yySenT59WjicmJlZUVFzxCXq9fuDAgcpIrNvtXrVq1eDBgxtV/4033hgfH79x40YhhNVqXb9+/eDBg2VZLi8vT05OnjRp0vz5848cOSKEuHTpUkxMzJ133rl06dKzZ8+azeZGfVFzqKpHyE23AeA/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y5cv33zzzZMmTTIajcqvysvL33777YsXL+bn5w8bNiy4dWrIN99889VXX02cONGzceKTTz754IMPUlNTZ82alZaWFtzyNOHYsWNr165Vrsnp06crO6BOnz69YsUKq9U6YcKE3r17B7tGDdi+ffu2bdskSRo+fPigQYOUgy6Xa+XKlYcOHerSpcvMmTM9f99R36lTp/bu3VtZWTlhwoTExETP8W+++aawsDAqKmr69OnZ2dnKQYfDsWzZsmPHjt18883Tpk1TForTI9SSEydOTJ48uaampk2bNq+//vrIkSPdbrcQwmaz9e/f/8iRIzfccMNPfvKT1atXB7tSbaipqZk2bdojjzxSVlamHHn//ffHjx/frl27kydP3nrrrSaTKbgVqt+WLVv69u1bXV2dlZW1bds25ba3paWleXl5ZrO5VatWw4YN+/TTT4Ndptq99dZbU6ZMad26datWrcaPH79y5Url+E9/+tPFixd36tRp9erVM2bMCGqNKlVeXp6Tk/PGG2888sgjFy5c8Bzfs2fPoEGDkpOT7XZ7Xl7euXPnlOM/+clP1qxZ07Fjx4ULF/73f//3D61laEddXZ3T6VReV1ZWGgyGI0eOyLK8atWqW265xe12y7K8bt26rl27Kq/RsEceeWThwoVCiJKSEuVIbm7u8uXLldf9+/d/4403glacFjgcjjZt2rz77rtXHP/1r3993333Ka9ffvnlsWPHBrw0jRk5cuTvf/975fVLL72knLHS0tLIyMhz587JslxZWRkVFXXixIlgVqlKnn/rhBDFxcWe4wUFBb/+9a+V11OmTHn22WdlWS4pKYmKiqqsrJRl+dy5c1FRURcuXJBlmR6hlhiNRs+Ob4fD4Xa74+LihBA7d+4cPny4JElCiOHDhxcXF3u6OLiWTz755NixYw888IDniMVi2bt3r2dgefjw4Tt27AhSddpw8OBBk8mUm5u7cOHCFStWeDrQO3bsGD58uPKa0+iNbt267d+/X/lnff/+/d27dxdC7N69u0OHDsptepKSknJycnbt2hXsSlVH+Xfvx3bs2DFixAjlteci3LVrV25ublJSkhCiTZs22dnZn3/+uWBoVLueeOKJiRMntmvXTghRWlrasmVL5XiLFi0iIyNLS0uDWp3aWa3W2bNnL1q0qP7fIuWktWrVSvkxLS3t+++/D059GnHq1CmDwTBhwoSqqqoPP/ywV69eNTU14j8vyFatWtXU1FgslqBWqnYvv/zyxYsX27Zt27ZtW5PJNHfuXCHEhQsXPKdRcEE2Rl1dXUVFRf2LUPnbfa1TShBq0nPPPVdcXPz6668rPxoMBqfTqbyWZdnlckVERASvOg147rnnpkyZ0rVr1/oHlZUInjPpcDi4x1XDdDpdRUXF0qVLn3/++fXr1ycnJyuTW/UvSOXedQYD6/IaMnfuXLvdvmnTpk2bNlVXV7/00ktCCIPBUP9Row6Hg7/XXtLr9Tqdrv5FqJy6a51SglB7fvOb33z44YdFRUVKB18IkZmZ6flfxQsXLjidzvT09OAVqAFr1qwpLCzs3bt3v379hBD33HPPhx9+qNzz3fNY8PPnz3MaG5aRkSGE6Natm/Jjt27dzpw5I/7zgjx//nxqair/S9GwJUuW/OY3v8nJycnNzX3hhReWLFkihMjIyKj/kPrz588rJxzXpdfr09LS6v9dVk5dZmbmVU8pQagxv//97wsLC7du3Zqamuo5OHbs2A8//LC2tlYIsX79+oEDB3oyEldVVFS0bNmyN998U1ksM2/evH79+kVGRo4YMWL9+vVCiLq6uo0bN44bNy7Ylapabm5u27Ztv/jiCyGEy+X66quvlFAcO3bse++9pyxpXrdu3dixY4NcqOqlpKScOHFCeX3ixAnlPtGDBw8uLy/ft2+fEKKkpOTbb7/1THrhusaNG7du3TohhCzL69evVy5CZQlFSUmJEELZcfHDTpVALu9BMx0+fFgIkZ2dnftvn376qSzLLpcrPz+/V69e06ZNS0lJ2blzZ7Ar1QzlgSeeVaN79uxJSUmZMmVKnz59hgwZ4nA4glue+hUWFqalpT300EPKGaurq5Nl2WQy3XLLLYMHDx4/fnzr1q3/9a9/BbtMtVu7dm1iYuK0adOmTp2amJi4YcMG5fif/vSn9PT0WbNmtW3bdt68ecEtUrWGDx+em5srhOjevXtubm51dbUsyydPnkxPTy8oKBg6dOhNN91UVVWlNJ47d27btm1nzZqVnp7+2muvKQd5+oSWWK3W4uLi+kc6dOjQokULIYTb7f7kk08uXbo0cOBAxk+8J8vyvn37evTo4Rm7u3jx4ieffJKSkjJ48GBmtrxx+vTpL774IjMzs3///p7nidrt9m3btlmt1mHDhtXf44xr+f7777/88ktJkvr27du6dWvP8cOHDysb6nv16hXE8tTs4MGDDofD8+Mtt9yirK6vrq4uKiqKiooaOnRo/Sc77tu379ixYzfddFOPHj2UIwQhACCsMUcIAAhrBCEAIKwRhACAsEYQAgDCGkEIAAhrBCEAIKwRhACAsEYQAgDCGkEIAAhrBCEAIKwRhACAsPb/ALQQgG8KUIoNAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daXgUVb7H8VPd6eyJ2chCEoiyQ1gDA7JI2BEFRwEVmLCJoCPKI+oziHPFC1fweWS8jIKIgMyACBjcQB00yLA4CggE2UIMEBDCEkgg6c7aS90X5fTNBBI6pJeq7u/nVXVxuvufsuIv55w6VZIsywIAAF+l83QBAAB4EkEIAPBpBCEAwKcRhAAAn0YQAgB8GkEIAPBpBCEAwKcRhAAAn0YQAgB8GkEIAPBpKgrCP/3pT2az2dNVaA8HzSmsVqvNZvN0Fd6AE9IpLBaLp0vwEo4cSRUF4apVq4xGo6er0J7KykpPl+ANzGaz1Wr1dBXegBPSKTiMTmGz2aqqqm7bTEVBCACA+xGEAACfRhACAHwaQQgA8GkEIQDApxGEAACf5ud4061bt2ZlZSUkJEyfPj06OvrmBjt37ty2bZvVah0wYMCIESOUnTabbd26dQcOHGjVqtWTTz4ZFBTknMIBAHAGR3uEK1aseOaZZ9q1a5eTk9O3b9/q6upaDTZs2DB27NjExMSWLVvOmDHj7bffVva/+OKLS5Ys6dSp01dffTV69Ghn1g4AQOPJDrBarXfffffWrVtlWbbZbKmpqZs2barVZsyYMa+++qqyvXTp0vT0dFmWi4uLg4ODc3NzZVkuKysLDw/Pzs6u61tCBk+/eq3IkXpQU2lpqadL8AYVFRXV1dWersIbcEI6hdFo9HQJ3sBqtZpMpts2c6hHeOHChfz8/MGDBwshJEkaNGjQ7t27a7Xp2LFjdna2xWKx2WwHDhzo2LGjEOLgwYNNmjRp3bq1ECI4OLh37943v9Gu4oF516qZswQAuJVDc4SXLl0KCwsLDAxUXsbGxh48eLBWm1deeWX06NEJCQl+fn5t2rTZtm2b8sYmTZrY28TGxl66dKmub5ErjH969S8xthvKy9TU1BkzZjToh/FNFRUVer3e01VoXmVlpV6vNxgMni5E87R7Qn788cdbt271dBW/sVqtGj2MrjN8+PAJEyY06C02m82RWyc6FIT+/v41b6RbXV0dEBBQq80bb7xx5cqVb7/91t/ff/bs2XPmzFmyZIm/v3/NG56azeab32gnVZladOjSOrBMedm+fft6GsPulv850FCyLBOETqHdE/Jf//pXkyZNBg0a5OlCcAu7d+/evXv31KlTG/QuB+816lAQJiYmVlZWFhUVKReLFhQUNG3atFab1atX/+///m/Xrl2FEK+99trQoUOXLFnStGnTgoICWZYlSRJCXLhwIT09va5v0VWXDbh/1Mg2dzlSEuz0ej1/OTae/t88XYjmafcwSpKUlpY2duxYTxeCW6isrMzKymroqSVJkpI+9XNoTi42NrZXr16bNm0SQhiNxq+//vqhhx4SQpSUlGRlZSltYmJiTp06pWzn5eUpI6I9e/bU6XQ7duwQQvz6668HDhx44IEH6qy4ymiy3L5iAACcyNF1hIsWLRozZsy//vWvI0eO9O7du1+/fkKI48ePDx06VJZlIcT8+fPHjx+/b98+f3//r7/++t133xVC+Pv7v/HGG+PHjx82bNju3buff/75xMTEur5Cqioz8QQuAIB7ORqE6enpR48e/fHHH59++uk+ffooOzt37nzo0CFle/jw4b/88sv+/futVuvixYvj4+OV/ZMnT+7Xr9+hQ4dmz57dpUuXer5CqjLRIwQAuFkD7iyTkJDwyCOP1NwTEhKiTAoqYmJi7DeUqalFixYtWrS47ecThAAA91PRuj2GRgEA7qeqIKRHCABwN4IQALxBmzZtzpw5I4SYOXPmihUrav3r9evXY2Ji6nl7bm6u8nZFampqXl7eHRdTVFRkv1JE/dQVhEYzQQgAd6KoqEi5i8pDDz3Us2fPWv8qy/L169frefvy5cvXrl1rf/n888/XH5z1s9ls165du+O3u1kDLpZxNamaOUIA+H8fffTRwIED7V2rTZs29e3bNy4ubvv27fv375ckacCAAX379q31LoPB4Of32//bz5w5s2nTJoPB8Pvf/97e4OTJk998801hYWHLli0nTJjg7+9/+vTpo0ePBgcHv//++82bNx82bFhAQIB9KfrBgwe/+eabwMDA0aNHN2/eXAiRk5Nz4cKF6Ojozz77LDExccqUKfXfTujbb7/94Ycf4uLixo0bFxERIYQoKytbv359fn5+ZGTkAw880KFDB4vFsnnz5mPHjgUGBvbv319ZpOce6uoRMjQKAHZZWVn2Qc5z5849+eST4eHhhYWF69evj42NjYiImDx58ocffljrXWvWrNm+fbsQ4vTp0/fee295ebm/v3/Nu3SuXr26qqqqZcuWX331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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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WHr27FlSUhIbGzts2LAtW7b4uky1W7hw4cSJE+Pj42NjY8ePH79o0SJl+5NPPrlgwYKbb755yZIl06ZN82mNKnXp0qUePXq89957jz32WH5+vnP7jh07MjIyYmJiKioqevbsmZeXp2yfMmVKVlZW27Zt58+f//TTT19tLUM7Kisrq6urldeFhYUGg+Hw4cOyLC9evLhbt24Oh0OW5eXLl7dv3155jfo99thj8+fPF0Lk5OQoW9LT0z/55BPldb9+/d577z2fFacFVVVVycnJX375Za3tL7/88n333ae8njNnzpgxY7xemsbcfvvtf/vb35TXs2fPVo6YxWIxmUx5eXmyLBcWFgYHB+fm5vqySlVy/q4TQhw5csS5fdy4cS+//LLyeuLEic8//7wsyzk5OcHBwYWFhbIs5+XlBQcH5+fny7JMj1BLjEajc8V3VVWVw+EIDw8XQmzatGn48OGSJAkhhg8ffuTIEWcXB3XZsGHDsWPHHnroIeeW0tLS7Oxs58Dy8OHDN27c6KPqtOHAgQNWqzU9PX3+/PmffvqpswO9cePG4cOHK685jK7o0KHDvn37lF/r+/bt69ixoxBi27Ztbdq0UW7TEx0d3aNHj82bN/u6UtVRfu9da+PGjSNGjFBeO0/CzZs3p6enR0dHCyGSk5NTU1N/+eUXwdCodj3zzDMPPPBAy5YthRAWi6VFixbK9mbNmplMJovF4tPq1K6srOypp5569913a/4vUg5abGys8jYuLu7cuXO+qU8jTp48aTAY7r///itXrqxatap79+7FxcXiP0/I2NjY4uLi0tJSn1aqdnPmzDl//nxKSkpKSorVan3ttdeEEPn5+c7DKDghG6KysrKgoKDmSaj8767rkBKEmvTCCy8cOXJk3rx5yluDwVBdXa28lmXZbrcHBQX5rjoNeOGFFyZOnNi+ffuaG5WZCM4jWVVVxT2u6qfT6QoKCj788MMXX3xxxYoVMTExysWtmiekcu86g4F5efV57bXXKioqVq5cuXLlyqKiotmzZwshDAZDzUeNVlVV8f/aRXq9XqfT1TwJlUNX1yElCLXnlVdeWbVq1bp165QOvhAiKSnJ+adifn5+dXV1QkKC7wrUgKysrKVLl9566619+/YVQtx7772rVq1S7vnufCz42bNnOYz1S0xMFEJ06NBBeduhQ4fTp0+L/zwhz54927x5c/6kqN8HH3zwyiuv9OjRIz09/aWXXvrggw+EEImJiTUfUn/27FnlgOOG9Hp9XFxczf/LyqFLSkq67iElCDXmb3/729KlS3/88cfmzZs7N44ZM2bVqlXl5eVCiBUrVgwYMMCZkbiudevWffzxx++//74yWWbWrFl9+/Y1mUwjRoxYsWKFEKKysvKf//znXXfd5etKVS09PT0lJWX79u1CCLvdvmvXLiUUx4wZ89VXXylTmpcvXz5mzBgfF6p6ZrM5NzdXeZ2bm6vcJ3rQoEGXLl3as2ePECInJ+fo0aPOi164obvuumv58uVCCFmWV6xYoZyEyhSKnJwcIYSy4uLqShVvTu9BEx06dEgIkZqamv6bLVu2yLJst9tHjhzZvXv3yZMnm83mTZs2+bpSzVAeeOKcNbpjxw6z2Txx4sRevXoNGTKkqqrKt+Wp39KlS+Pi4h555BHliFVWVsqybLVau3XrNmjQoPHjx8fHx//rX//ydZlqt2zZsqioqMmTJ0+aNCkqKurrr79Wtv/9739PSEiYPn16SkrKrFmzfFukag0fPjw9PV0I0bFjx/T09KKiIlmWT5w4kZCQMG7cuKFDh3bu3PnKlStK49deey0lJWX69OkJCQlvv/22spGnT2hJWVnZkSNHam5p06ZNs2bNhBAOh2PDhg0XL14cMGAA4yeuk2V5z549nTp1co7dnT9/fsOGDWazedCgQVzZcsWpU6e2b9+elJTUr18/5/NEKyoq1q9fX1ZWNmzYsJprnFGXc+fO7dy5U5Kk3r17x8fHO7cfOnRIWVDfvXt3H5anZgcOHKiqqnK+7datmzK7vqioaN26dcHBwUOHDq35ZMc9e/YcO3asc+fOnTp1UrYQhACAgMY1QgBAQCMIAQABjSAEAAQ0ghAAENAIQgBAQCMIAQABjSAEAAQ0ghAAENAIQgBAQCMIAQABjSAEAAS0/w88oP35YgmxHAAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daXwUVb7/8VPd6XTIThKyEhJIEGSHsEc2IQhBQEVUwIAgyzjiRfTOqOhfR7gu96UzOioiIqIsAgZkQESRRSAOirLJIkIIhB1CEsjeSae7/g9K+zIhhA7ppar7835UXZxO/1I2fD11Tp0jybIsAADwVjp3FwAAgDsRhAAAr0YQAgC8GkEIAPBqBCEAwKsRhAAAr0YQAgC8GkEIAPBqBCEAwKsRhAAAr6aiIHzmmWfMZrO7q9AeLppDWCwWq9Xq7io8AV9Ih6iurnZ3CR7CniupoiD86KOPSkpK3F2F9phMJneX4AnMZrPFYnF3FZ6AL6RDcBkdwmq1VlZW3rSZioIQAADXIwgBAF6NIAQAeDWCEADg1QhCAIBXIwgBAF7N3iA0m82vvPJKv379HnzwwYMHD17fwGKx/POf/xw6dOhdd9312muv2WasFhcXz5w5s1+/fpMmTTp79qzDCgcAwBHsDcLZs2evW7futdde69at28CBA4uLi2s0eOutt+bNm/fcc8+9/PLLq1evfumll5TzkydPzs3NfeONN4KCgtLT02VZdmT5AAA0jI89jaqqqj744IN//etfvXv37t2799q1a5cvXz5t2rRr2/zwww/jxo3r27evEGLq1KnLli0TQpw9e3bt2rVnzpyJjIzs2rVrXFzcd999d+edd9b6KZVd7reSkgAA17KrR3j27NnCwsIePXooL3v16rVv374abdLT09evX3/69OmLFy+uWrUqPT1dCHHw4MGEhITIyEghhE6n6969+/79+2/0KRXpL16uZMwSAOBSdvUIL126FBQU5OPze+OwsLBjx47VaJORkfHll1+2bNlSp9P16NFj+vTpQoi8vLzGjRvb2oSFhV28ePFGnyKXF90z5k8BJeeUl71793799dfr9ct4p7KyMkmS3F2F5plMJr1ebzAY3F2I5mn3C/n5559/9dVX7q7idxaLRa/Xu7sKdRk8ePC4cePq9Rar1WrPeJxdQRgUFFReXm57WVZWFhISUqPNn//8Z6PRWFRU5OPj88QTT4wdO3bt2rWBgYEVFRXXvjEpKelGn6KrKn3yuZe6N/n9r1BUVFRgYKA95Xk5WZa5UA3n4+NDEDqEdr+QP/74Y5MmTQYOHOjuQlCLHTt2/Pvf/64xJHdTVqv12gy6EbuCsGnTplar9cyZM/Hx8UKIEydOtGjRokabTZs2zZ0718/PTwgxceLEAQMGCCESEhJOnTplNpuVf19OnDgxfPjwG32KrrIkOrFbSutge0oCAIdLSUkZPXq0u6tALUwm06ZNm5z0w+0akwsNDR0yZMi8efOEEKdPn96wYcNDDz0khDh//vwbb7yhtElOTt6yZYtyvHnz5pYtWwohUlJSoqOjP/vsMyHETz/9dPTo0REjRtzoUyRTaTH7twAAXMveySl///vfMzMz27Vr17lz55kzZ7Zt21YIkZub+9e//lVp8Pbbb3/zzTetW7du3779ggULlNSUJGn+/PnPPvtsp06dhg4d+v77719/T9VGMhWXVGtyaAEAoF123RoVQrRq1ero0aM5OTkRERG2+S+9e/e2beHWvn37X3/99fz58xaLpWnTpjrd7xHbv3//3NzcU6dOxcbG1j1yIFWWFJsJQgCAS9kbhEIInU6n3PCscdJ2LElSXFzc9W80Go233XbbTX++VEGPEADgaip6bk+qKithjBAA4FpqCsKKYm6NAgBcTE1BWFnCrVEAuDWtWrU6ceKEEGL69Onz58+v8adXrlyJiIio4+1Hjx5V3q5o165ddnb2LRdTUFAQHR19y293MTUFoamExycA4NYUFBQosxdHjhxpWxHTRpblK1eu1PH2efPmLV682PZy5syZdQdn3axWa35+/i2/3cXqMVnG2SRTSQm3RgHgD5999tmdd95p61qtXLnyjjvuiIqK2rx5808//SRJ0oABA+64444a7zIYDLYVMU+cOLFy5UqDwXDPPffYGvz2228bN27My8tLTk4eN26cr69vTk7OwYMH/f39P/zww4SEhLvuustoNNqWytuzZ8/GjRv9/PxGjRqVkJAghDhy5MjZs2fDw8PXrFkTFxc3ceJEo9FYxy/y7bff7ty5MyoqasyYMaGhoUKIsrKyZcuWnTx5snHjxsOGDWvbtm11dfWqVasOHTrk5+fXr1+/Pn36OOgq3pyqeoSMEQLA/9m0aZPtJuepU6emTJkSHBycl5e3bNmyyMjI0NDQRx55ZOnSpTXetWjRos2bNwshcnJyevXqVV5e7uvre+0qnQsXLqysrExOTv7qq6/uvvvuWj/6L3/5y4ULF4QQmZmZd999t7+/f2FhYdeuXQ8dOiSEyMrK+tOf/vQ///M/0dHRK1as+NOf/lTHb/Hyyy/PmDEjKipq7969nTt3vnr1qhDiwQcfzMrKatOmjV6v37FjhxDihRdeWLBgwW233RYaGqrU7zJq6hEyRghATZYet36abXXZx01voxuZ8B+dkwkTJkycOPHFF1+UJGnx4sX33XdfUFBQUFDQkiVLlAatW7eeM2fOww8/XOsP/Mc//jF27Ng5c+YIIaKjo8eMGaOct60INmHChISEhJycnKSkpPbt24eGhk6dOrXGD3n++effe++9UaNGCSGqq6tfffVVZbEwnU6XmZmp1+sHDx7crVu3RYsW1VpDUVHR66+//ssvvygP0aWnpys71+7atWvr1q3t27e3tfzpp58mT548duzY+l01R1BTEDJGCEBN7oyVohu5bguIDmE1ewL9+vXT6XRZWVl9+/ZdtmyZsmKXyWSaPn36jh07dDqdXq+/dkeEGg4fPvzYY48px7169bKdX7Zs2auvvmqxWAICAgoLC8+ePXuj7RBMJtPx48dTU1OVl3fcccesWbOU43bt2in7Y8TFxRUVFVVWVtZ6d/T48ePBwcG2R8n79Omj9Cmffvrpnj179u3bd9iwYZMmTfL393/88ccnTpw4d+7c9PT0yZMnR0VF3fySOYiagrCytMIiWWWho1sIQAVi/aVYf3cWIElSRkbGp59+qtPpTCZTv379hBDz5s3Ly8s7fPiwwWDYsWNHRkbGjd7eqFEj294LtoO8vLzHHnvswIEDiYmJQogWLVrYFgi7nsFgMBgMJpPJ9kP8/X+/IrZhyLp33fL39zeZTLIsK83Ky8uVn/Dss89OnTp148aN8+fP//rrr7/66qtRo0YNHTp069atixcv7tmz5/Hjx122EZWKxgiFLPvrZZ6pBwCbRx55JDMzc+7cuRMmTFBW8srLy0tISDAYDLIsf/rpp3W8t1+/fitXrrRarUII5X6mEKKgoMBoNMbExAghtm3blpubq5wPDQ0tKCio8RP0en2fPn2UO7FWq3XJkiX9+/evV/1JSUlBQUFr164VQpSXl69atap///6yLOfn54eFhY0ZM+aVV145fPiwEOLy5cv+/v533333ggULTp8+XVpaWq8PaggV9QiFEMEGUVQlh/jSJQQAIYRITExMSUlZuXKl7am+jIyMAQMGHD9+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b6JuOVNmAMD7+Njf9PDhw5999plOp3v44YdbtWpV40/z8/O/+OIL28u+ffu2bt1aCLFly5acnBzlpNFonDBhQoNrdopxSbrHd1r+2oH/MwAA72Lvv/sHDx7s3bu30WiUJKlHjx7Z2dk1Gpw6deqvf/3riT+UlJQo5z/66KPVq1crJ3Nzcx1YumP1jZHKqsXBQjqFAOBd7O0RvvXWW48++uiLL74ohLh8+fI777zz7rvv1mgTFhb2+uuvX//ekSNH/vnPf25goc4mCfFQC2lZjvX1ML27awEAuI69PcLt27cPHjxYOR48ePC2bduub1NWVvbWW2/Nnz/fdi9U8e9///vNN9/84osvqqurG1atc41vqTte7O4iAACuZW+P8MKFC02aNFGOIyMjL1y4UKOBr69v79698/PzT5069d///d/Lli0bMWKEEKJ58+YlJSWXL19evHjx//7v/27fvt3Pz6/Wj6ioqJgxY4bRaFRetm/fftq0abfyO92q5n5iaaowmcyu/NCGM5lMBoPB3VVonslk0uv1FgvLzjYUX0iHMJlMPj71mMOBWlmtVnv+Utt7oX18fGz9uerqal9f3xoN2rdvv2bNGuV47ty5f/nLX5QgfPXVV5WTs2fP7tChw7Jlyx599NFaP0Kv13fq1CkgIEB52bJlS/462cNgMHChGs5isej1eq5kw/GFdAguo0NYrVar9ebPiNsbhHFxcefPn1eOz507FxsbW0fj1NTUp556SpZlSZJsJ41GY9euXWvcNb2Wr6/vxIkTw8LC7CwJCr1er9czrtlQ+j+4uxDN4zI6BJfRISRJujaGbsTeMcIRI0ZkZmYqx5mZmcOHD1eOt2/fXlRUJIQwmUy2xl9++WWbNm0kSZJlubKyUjl59erVrKysdu3a2f87AADgbPYG4YwZM3bu3Dly5Mhhw4YdOnTINgs0LS1t//79QohZs2b17t17/Pjxffv2fffdd5U5pWazOS4u7p577hk3btztt9/etWvXBx980Em/idd64403ZJmnPhrq22+/3bNnj7ur0LzS0tL333/f3VV4gmXLlp07d87dVWjeyZMnV65cedNmkv3/hpaUlGzevFmn0w0aNMg2kvfzzz+3bt06KCiorKzsp59+UubU9OjRIzg4WGmQk5Nz8OBBk8l0++23d+zYsY6fHx4enp2dza3R+jIYDBUVFYyr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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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MzMzz549qx6fPHny6tWrO3bsuHDhwt///ve/tFagHw0NDRaLRX1cVlbm4+Nz5MgRRVFWrVrVrVs3WZYVRVm/fv2NN96oPkbLZs6cuXDhQiFEXl6eeiQjI2PZsmXq4759+77//vtuK04PGhsbk5OTP/nkkybH586d+7vf/U59PG/evFGjRrm8NJ25884733jjDfXxq6++qn5jFy5c8PPzO3v2rKIoZWVl/v7++fn57qxSk2x/64QQx44dsx0fM2bM3Llz1ccTJkyYPXu2oih5eXn+/v5lZWWKopw9e9bf37+oqEhRFHqEemIymWwrvhsbG2VZDg4OFkJs37596NChkiQJIYYOHXrs2DFbFwfN2bp1a25u7sMPP2w7UlNTs2/fPtvA8tChQ7dt2+am6vTh0KFDVVVVGRkZCxcuXL58ua0DvW3btqFDh6qP+Rrt0aVLlx9//FH9s/7jjz927dpVCLFr164OHTqot+mJiIjo0aPHjh073F2p5qh/935r27Ztd9xxh/rYdhLu2LEjIyMjIiJCCJGcnNyuXbvvv/9eMDSqX0899dSDDz54ww03CCEuXLgQExOjHg8LC/Pz87tw4YJbq9O62traJ5544r333rv8/yL1S4uNjVWfxsXFnT9/3j316cSpU6d8fHzuv//+8vLyL7/8snv37pWVleLfT8jY2NjKysqamhq3Vqp18+bNu3jxYps2bdq0aVNVVfXSSy8JIYqKimxfo+CEvBYNDQ2lpaWXn4Tq/93NfaUEoS7NmTPn2LFj7777rvrUx8fHYrGojxVFsVqtvr6+7qtOB+bMmTNhwoQbb7zx8oPqTATbN9nY2Mg9rlpmMBhKS0s/+uij559/Pjs7OzIyUr24dfkJqd67zseHeXkteemll+rr6zdu3Lhx48aKiopXX31VCOHj43P5VqONjY38f20no9FoMBguPwnVr665r5Qg1J8///nPX375ZU5OjtrBF0IkJSXZ/qlYVFRksVgSEhLcV6AOrF69eu3atT179uzTp48Q4t577/3yyy/Ve77btgUvLCzka2xZYmKiEKJLly7q0y5dupw+fVr8+wlZWFgYHR3NPyla9uGHH/75z3/u0aNHRkbGn/70pw8//FAIkZiYePkm9YWFheoXjqsyGo1xcXGX/7+sfnVJSUlX/EoJQp1544031q5d+80330RHR9sOjho16ssvv6yrqxNCZGdn9+/f35aRuKKcnJylS5d+8MEH6mSZl19+uU+fPn5+fnfccUd2drYQoqGh4fPPPx89erS7K9W0jIyMNm3a7N69WwhhtVp/+OEHNRRHjRr1t7/9TZ3SvH79+lGjRrm5UM2LiorKz89XH+fn56v3iR44cGBJScn+/fuFEHl5ecePH7dd9MJVjR49ev369UIIRVGys7PVk1CdQpGXlyeEUFdc/LJSxZXTe9BKhw8fFkK0a9cu41c7d+5UFMVqtQ4fPrx79+6TJk2Kioravn27uyvVDXXDE9us0T179kRFRU2YMKFXr16DBg1qbGx0b3nat3bt2ri4uBkzZqjfWENDg6IoVVVV3bp1Gzhw4NixY+Pj4//1r3+5u0ytW7duXXh4+KRJkyZOnBgeHr5hwwb1+FtvvZWQkDBt2rQ2bdq8/PLL7i1Ss4YOHZqRkSGE6Nq1a0ZGRkVFhaIoJ0+eTEhIGDNmzODBg2+++eby8nK18UsvvdSmTZtp06YlJCQsWLBAPcjuE3pSW1t77Nixy4906NAhLCxMCCHL8tatWy9dutS/f3/GT+ynKMr+/ftvuukm29jdxYsXt27dGhUVNXDgQK5s2aOgoGD37t1JSUl9+/a17SdaX1//7bff1tbWDhky5PI1zmjO+fPn9+7dK0lS79694+PjbccPHz6sLqjv3r27G8vTskOHDjU2NtqeduvWTZ1dX1FRkZOT4+/vP3jw4Mt3dty/f39ubu7NN9980003qUcIQgCAV+MaIQDAqxGEAACvRhACALwaQQgA8GoEIQDAqxGEAACvRhACALwaQQgA8GoEIQDAqxGEAACvRhACALza/we8QGrLwsKJmwAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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Prpnz55OnTpptdrdu3cLIf76179+8sknd911l7+/v1K/zThSj9BQVFTtQMEMwMWtOmv6PNNks4+b1UkzJuY3vwMnT548derUl156SZKkFStW/O53v9Pr9Xq93vwgvA4dOsyfP1+51dft3n777YkTJ86fP18IERYWNmHCBGX9P/7xD/P7x8TEZGVltW3btkuXLv7+/uabhZm98MILH3744dixY4UQ1dXVCxYs+OKLL4QQGo1m3bp1Wq12+PDhvXr1WrZsWZ01FBUVvfHGG0ePHlVuND1y5MjU1NR58+bt37//u+++Mz/USAhx4MCBJ598srG31bYKRwrC6nIhRLlReHKrbQAO4L4IKczLdr+PugbWPjeUnJys0Wj27NkzaNCg1atXp6amCiHKy8tnzZq1e/dujUaj1WrLysrqe8OTJ08+88wzynK/fv3M61evXr1gwQKj0ejj41NQUHDp0qW2bdvW+Q7l5eVnz57t37+/8nLAgAHPP/+8snz33Xcrz0WIjIwsKiqqqKioc3T07Nmzfn5+5sctDBw4UOlT/ulPf+rbt++gQYMeeOCBadOmeXt7P/vss1OnTl20aNHIkSOffPLJ0NDQO+8yK3GgIBRC+LmZCitFmJe96wAAISK8pQhvexYgSVJKSsrnn3+u0WjKy8uTk5OFEKmpqXl5eSdPntTpdLt3705JSalvcy8vL/OzF8wLeXl5zzzzzLFjx2JjY4UQ8fHxyhSbOul0Op1OV15ebn4T5QkKQgjzaciG75fi7e1dXl5uvrmY+RkMf/nLX2bOnLlly5bFixd/++23mzdvHjt27P333//dd9+tWLGib9++Z8+etdkDiBxrKNJPJ4oqeUo9APxiypQp69atW7Ro0eTJk5WHwubl5cXExOh0OlmWP//88wa2TU5OTktLM5lMQghlPFMIkZ+f7+HhER4eLoTYuXNndna2st7f3z8/P7/WO2i12oEDByojsSaTaeXKlYMHD25U/W3bttXr9Rs3bhRClJWVrV+/fvDgwbIs37hxIzAwcMKECa+//vrJkyeFENevX/f29n7wwQc/+eSTixcv2vLBlo7VI2ylkwsr7F0EADiM2NjYxMTEtLQ081V9KSkp995779mzZ/Pz8zt06NDAtrNmzfrPf/6TlJQUGBjYunVrZWVCQkKvXr2SkpJiYmJKS0vbt2+vrB83btx//dd/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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deXxTdb7/8e9Jmjbd6L7RltYitKAglF1kUQERRMdhQLEigmwqPxkfMy6jM+rADOp1XK6iuCBoES+VxRUUWWQTKJuAIJTSgrIUSvd0SZsm5/fHcTKdSkvapsk5yev5V3LyTfLp4dB3v8s5R5JlWQAA4K107i4AAAB3IggBAF6NIAQAeDWCEADg1QhCAIBXIwgBAF6NIAQAeDWCEADg1QhCAIBXIwgBAF5NRUH4xBNPWCwWd1ehPew0p7BarTabzd1VeAIOSKeor693dwkewpE9qaIgXLx4sclkcncV2mM2m91dgiewWCxWq9XdVXgCDkinYDc6hc1mq62tvWIzFQUhAACuRxACALwaQQgA8GoEIQDAqxGEAACvRhACALyao0FYVlZ29913R0VFde/e/csvv/xtg6qqqhkzZiQmJsbHx997773FxcXK9tOnT48aNSo8PLx///779u1zWuEAADiDo0H4+OOPWyyW/Pz8V155JSMj48KFC40azJ8///jx44cOHTp+/Hh5efkTTzyhbJ8yZUrPnj3Pnj07ffr0O+64g5NtAQCq4lAQVldXL1++/LnnngsODh49evSQIUOWLVvWqE1eXp7S8wsODr7ttttOnjwphMjJycnOzn722WcDAgJmzpzp7++/bt26pr6lNv0PNrktPwsAAC3mUBD+8ssvdXV11157rfL0uuuuy8nJadRm+vTpH3/88bp16zZs2PD2228/+OCDQoicnJzOnTsHBwfb33j8+PGmvqXm1r9dNEut+SEAAGgtH0calZSUBAYGStKvKRUSEnL06NFGbdLT06+66qrHH3/c19c3ODh40KBByhuDgoLsbUJCQoqKipr6Frmq9Nr+t4jzPylPJ0yYsGTJkhb9MN6pqqrK/k+DVjObzXq93mAwuLsQzdPuAfnJJ5+sXbvW3VX8ymq16vV6d1ehLqNGjcrIyGjRW2w2myxfeaTRoSAMDw+vrKyUZVk5vsvLyyMjIxu1eeCBB7p3766MfL744ot33XXXrl27wsPDG14+tLy8vGvXrk19i77O9MWWnbd2CXGkJNjJstzwrw20jo+PD0HoFNo9IHfv3h0VFXXzzTe7uxBcxrZt277//vtZs2a1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GxYeHl5bW9uvX78zZ84o2++7777ly5d36dLlzTfffOSRR35tLUM76urq6uvrlcclJSU+Pj5Hjx6VZXnZsmW9evWy2WyyLK9cubJbt27KYzRv1qxZb775phAiNzdX2dKnT5+lS5cqjwcPHvz222+7rTgtsFgsCQkJn3zySaPtzz777B/+8Afl8fPPPz9u3DiXl6Yxt9xyy7/+9S/l8YIFC5Q9VlBQ4Ofnd+bMGVmWS0pKjEZjXl6eO6tUJfvvOiHEsWPH7NvHjx//7LPPKo8zMjL+8pe/yLKcm5trNBpLSkpkWT5z5ozRaLxw4YIsy/QItcRgMNjP+LZYLDabLSgoSAixbdu2kSNHSpIkhBg5cuSxY8fsXRw0ZcuWLTk5OQ888IB9S1VV1f79++0DyyNHjty6daubqtOGw4cPm0ymPn36vPnmmx988IG9A71169aRI0cqj9mNjujevfvBgweVX+sHDx685pprhBA7d+68+uqrlcv0hIWFpaenb9++3d2Vqo7ye++3tm7dOmrUKOWx/SDcvn17nz59wsLChBAJCQkpKSm7du0SDI1q19y5c+++++5OnToJIQoKCqKiopTtISEhfn5+BQUFbq1O7aqrq+fMmfPWW281/F+k7LTo6GjlaUxMzPnz591Tn0acOnXKx8dn4sSJZWVlX331Ve/evSsqKsR/H5DR0dEVFRVVVVVurVTtnn/++YsXLyYmJiYmJppMpnnz5gkhLly4YN+NggOyJerq6oqLixsehMr/7qZ2KUGoSU899dSxY8cWLlyoPPXx8amvr1cey7JstVp9fX3dV50GPPXUUxkZGd26dWu4UVmJYN+TFouFa1w1T6fTFRcXv/fee08//fSqVavCw8OVya2GB6Ry7TofH9blNWfevHm1tbVffPHFF198UV5evmDBAiGEj49Pw1uNWiwW/l87SK/X63S6hgehsuua2qUEofY899xzX3311caNG5UOvhAiPj7e/qfihQsX6uvr4+Li3FegBixfvnzFihV9+/YdNGiQEOLOO+/86quvlGu+228Lfu7cOXZj8zp27CiE6N69u/K0e/fuP//8s/jvA/LcuXORkZH8SdG8d99997nnnktPT+/Tp88zzzzz7rvvCiE6duzY8Cb1586dU3Y4rkiv18fExDT8v6zsuvj4+MvuUoJQY/71r3+tWLHi22+/jYyMtG8cN27cV199VVNTI4RYtWrVkCFD7BmJy9q4ceOSJUveeecdZbHM/PnzBw0a5OfnN2rUqFWrVgkh6urqPv/889tvv93dlapanz59EhMTd+/eLYSwWq179+5VQnHcuHGrV69WljSvXLly3Lhxbi5U9SIiIvLy8pTHeXl5ynWihw8fXlRUdODAASFEbm7u8ePH7ZNeuKLbb7995cqVQghZlletWqUchMoSitzcXCGEcsbFr2equHJ5D9royJEjQoiUlJQ+/7Zjxw5Zlq1W65gxY3r37j158uSIiIht27a5u1LNUG54Yl81mp2dHRERkZGR0b9//5tuuslisbi3PPVbsWJFTEzMjBkzlD1WV1cny7LJZOrVq9fw4cMnTJgQGxt74sQJd5epdllZWaGhoZMnT7733ntDQ0M//fRTZftrr70WFxc3bdq0xMTE+fPnu7dI1Ro5cmSfPn2EENdcc02fPn3Ky8tlWc7Pz4+Lixs/fvzNN9/co0ePsrIypfG8efMSExOnTZsWFxf3+uuvKxu5+4SWVFdXHzt2rOGWq6++OiQkRAhhs9m2bNly6dKlIUOGMH7iOFmWDxw4cO2119rH7i5evLhly5aIiIjhw4czs+WI06dP7969Oz4+fvDgwfb7idbW1m7atKm6unrEiBENz3FGU86fP79nzx5JkgYMGBAbG2vffuTIEeWE+t69e7uxPDU7fPiwxWKxP+3Vq5eyur68vHzjxo1Go/Hmm29ueGfHAwcO5OTk9OjR49prr1W2EIQAAK/GHCEAwKsRhAAAr0YQAgC8GkEIAPBqBCEAwKsRhAAAr0YQAgC8GkEIAPBqBCEAwKsRhAAAr0YQAgC82v8HVT+HoBrVyPUAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deWATdf7/8c8kTZveF/SAlkK5y01BKFBBpIgcXghLQUDxAEFX9Lveq+sXVHZ/8FVXQRQQVhAFwQMVV7mWwwVBQUHuUgpylZae6ZE2zczvj9FsF9qStmmSSZ6PvybTzyTvDENf/XzmMzOSoigCAABvpXN1AQAAuBJBCADwagQhAMCrEYQAAK9GEAIAvBpBCADwagQhAMCrEYQAAK9GEAIAvBpBCADwam4UhE8//bTFYnF1FdrDTnMIq9Uqy7Krq/AEHJAOUVVV5eoSPIQ9e9KNgnDZsmUmk8nVVWiP2Wx2dQmewGKxWK1WV1fhCTggHYLd6BCyLFdUVFy3mRsFIQAAzkcQAgC8GkEIAPBqBCEAwKsRhAAAr0YQAgC8mr1BmJ+ff+edd4aEhLRr1+7TTz+9toHJZJoyZUpsbGx0dPTdd9+dm5urrs/MzLzxxhtDQkJ69OixZ88ehxUOAIAj2BuEf/rTn/z8/C5fvrxs2bKpU6devHjxqgZz5849d+7cyZMnz5w5Y7Van376aXX9lClTBg0adOXKlSeeeOKuu+6qrKx0ZPkAADSOXUFYVla2Zs2aF154wd/ff8iQIUOGDFm1atVVbbKysoYOHRocHOzv7z9ixIisrCwhxPHjxw8cOPDcc8/5+vpOnTo1ODh448aNtX1KRe+7ZaUx3wUAgHrzsafRr7/+arFYkpKS1JfdunU7efLkVW1mzJgxa9asrl27+vr6vv322y+++KIQ4sSJE4mJiUFBQbYNT5w4UdunlN/6wmWz1Kwh3wIAgAayKwjz8vKCgoIkSVJfhoaGHjly5Ko2Xbp0ad269dy5cw0GQ3BwcO/evYUQBQUFthRUN8zLy6vtU5TSgq433CIuHlVfjh8//r333qvXl/FOpaWltn8aNJjZbNbr9QaDwdWFaJ52D8iPP/64jiErJ7NarXq93tVVuJfhw4dPmjSpXpvIsqwo1x9ptCsImzVrZjKZZFnW6XRCiMLCwubNm1/V5v777+/Vq9e8efOEEK+99tqECRP27t0bERFR/fahhYWFHTt2rO1T9JWmL7bvvrV9qD0lwUZRlOp/baBhfHx8CEKH0O4B+f333zdv3vzmm292dSGowc6dO//9739Pnz69XlvJslxeXn7dZnYFYXx8vK+v77Fjx7p06SKEOHz4cGpq6lVtjhw58vDDD6vLgwYNUodGO3TokJWVVVJSov7HOHz48OTJk2v7FKmssLBSk39IAvAMycnJ48aNc3UVqIHZbN68eXMTvbldk2UCAgLS09PnzJlTWlq6devW7du333PPPUKIkydPTpgwQW3Tv3//pUuXFhcXl5WVvf322/379xdCdOrUKTk5+eWXXzabzcuXLzeZTKNGjartUyRzcRHPbwEAOJe9l08sWLBAluX4+PiZM2euWrWqRYsWQgiz2WybNfPmm28GBwd37ty5bdu2JpNp+fLl6vqVK1fu27cvNjZ24cKFn3/+ua+vb62llBcVWbjAHwDgVHYNjQohwsPD161bd9XK7t27HzhwQF2Oior64IMPrt0wMTFx27Zt9nyEZC4qsjA0CgBwKjfqgUnlDI0CAJzNrYKwqIjJMgAA53KrICwsZGgUAOBcbhWExUXciBQAGqRjx46nT58WQjzyyCPvvvvuVT8tKCho1qyuO3edOHFC3VzVtWvXjIyMBheTl5cXExPT4M2dzI2CUGcuKqpyo3oAQEPy8vKsVqsQ4vbbb+/Xr99VP1UUpaCgoI7NFy9evHLlStvLxx9/vO7grJssy1euXGnw5k5m76xRJ5DKmTUKAP/x4YcfDh061Na1Wrt27aBBg6Kjo7ds2bJv3z5Jkm666aZBgwZdtZXBYPDx+e13++nTp9euXWswGO644w5bg+PHj3/77bc5OTnt2rWbNGmSr69vZmbmL7/8EhAQsGTJkoSEhFtuucXPz892q7z9+/d/++23RqNx7NixCQkJQohjx46dP38+MjLys88+a9my5X333efn51fHF9m0adPu3bujo6PT09PDwsKEEKWlpatXr87KygoPDx81alSXLl2qqqrWr19/+PBho9E4ePDga2/b0nTcqAfG0CgAVLd582bbIOfZs2cffPDBkJCQnJyc1atXR0VFhYWF3Xvvvddet7ZixYotW7YIITIzM1NSUsrKynx9favfpfO9996rqKho167dxo0bR48eXeNHP/nkk5cuXRJCrFu3bvTo0QEBAfn5+X369Dl8+LAQYteuXTNmzHj55ZdjYmLWrFkzY8aMOr7F//7v/z722GPR0dEHDhzo1atXYWGhEOIPf/jDrl27kpKS9Hr9zp07hRB//vOfly5d2qFDh7CwMLV+p3GnHqG5uNQqWRWhp1sIwA18cEp+P0N22sc9kqS7PeG/OidTp0697777XnzxRUmSVq5ceddddwUHBwcHB9sehNepU6e5c+eqt/q61muvvTZx4sS5c+cKIWJiYtLT09X18+fPt71/QkJCZmZm27Ztu3XrFhYW9tBDD131Js8///zChQvHjh0rhKiqqnr11Vc//PBDIYROp1u3bp1erx8+fHjfvn1XrFhRYw1FRUV//etfDx482KFDByHEyJEjFy9e/Oyzz+7du3fbtm3dunWztdy3b98DDzwwceLE+u01R3CjIBSKHKhXiitFeF09bABwkqEtpBh/5z0ConvE1Z2AwYMH63S6Xbt23XjjjatXr168eLEQwmw2P/LIIzt37tTpdHq9vqysrLY3rH4L6JSUFNv61atXv/rqq1arNTAwMD8///z5823btq3xHcxm86lTpwYOHKi+HDRo0HPPPacud+3aVX0+RsuWLYuKiioqKmocHT116lRISIiagkKI1NRUtU/5P//zP/3797/xxhtHjRo1bdq0gICAWbNm3XfffYsWLRo5cuQDDzwQHR19/V3mIO4UhEKE+orCSiXcjy4hANdrESC1CHBlAZIkTZ48+f3339fpdGazefDgwUKIxYsX5+TkHDlyxGAw7Ny5s44nGfj7+9uevWBbyMnJefjhhw8dOtS6dWshRGJiojrFpkYGg8FgMJjNZtubBAT8tkdspyHrfupWQECA2WxWFEVtVlZWpr7DM88889BDD3377bfvvvvuP//5z40bN44dO/bWW2/dtm3bypUr+/fvf+rUKac9iMqNzhEKIcIMSkGFq4sAALdx7733rlu3btGiRVOnTlUfhJeTk5OQkGAwGBRFef/99+vYdvDgwWvXrpVlWQihjmcKIfLy8vz8/GJjY4UQ27dvP3PmjLo+LCzs2ufF6vX61NRUdSRWluVVq1YNGTKkXvW3bds2ODh4w4YNQoiysrL169cPGTJEUZQrV65ERESkp6e/8sor6gNuc3NzAwICRo8evXTp0l9//bWkpKReH9QY7tUjDPGRC5kvAwC/a926dXJy8tq1a21X9U2ePPmmm246depUXl5ep06d6tj2kUce+frrr/v06RMREWF7iGzHjh379u3bp0+fhISE0tLS9u3bq+vHjRs3YsSIHTt2DBs2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AMBxtBeEMQGi1CJMFlfXAQDwCNoLQkmI1syXAQA4iPaCUHCaEADgONoMwhAmjgIAHMPH/qanTp1au3atTqdLT09v3bp1jW327NmzadMmvV4/dOjQAQMGCCG2bt2amZmp/tTPz2/q1KmNrlm0CZJO8XheAIAj2NsjPHbsWJ8+fYqLi/Py8nr37n369Olr27zyyivjxo0rLy+vrKxcv369unLZsmWrVq3av3///v37f/75Z4cUnRgiGBoFADiEvT3C119/fcqUKX/729+EEEVFRW+99dbrr79evcGRI0deffXVo0ePJiQkXLVtenr6zJkzHVKuKjFY4najAACHsLdHuG3bthEjRqjLI0aM2Lp161UNNm7cOHz48MLCwsWLF2/ZsqX6j3744Yc333zzm2++kWW58RULIRKDpbMlikyfEADQaPb2CC9duhQVFaUux8TEXLp06aoGWVlZR48effTRR4cMGbJw4cKUlJRly5YJIVq0aFFYWHj69OmFCxfGxMRs2bLF19e3xo8wm80vvvii0WhUX3bq1Omee+6psaUkRKhBd6bA3CLAzvI9mdlsNhgMrq5C88xms16vt1qtri5E8zggHcJsNvv41GMOB2oky7I9/6nt3dE6nc7Wn7NarTX+CxUXFx88eNBoNM6cObNVq1ZPPfVUhw4d/u///k/96bx587p167Z69er77ruvto8IDw/39/dXX0ZHR+v1+trqSQwWZ8v08cF2lu/J9Hp9HTsKdtL/ztWFaB670SHYjQ4hSZIjg7Bly5a2XuDFixdjY2OvbdC+fXu1PxcTExMdHX3mzJkOHTrYGvj7+/fr1y8jI6O2j/D19X388ccjIiLsqadtiPXXcslg0OTlH45lMBj4A7zxrFarXq9nTzYeB6RDsBsdQpblqqqq6zazN0hGjRr16aefqsufffbZqFGj1OV9+/aZTCYhxJgxY44fP15WViaEOH/+fE5OTvv27RVFsRVRUlKye/fuzp071/eb1CgxRHBzGQBA49nbI5w9e3b//v0nTJhgtVr37dv397//XV0/aNCgzZs3Dx48uEePHqNGjUpNTR08ePCXX345e/bsNm3aVFZWtm7d+qabbjIajVu3bu3cuXN6erpD6m4TLG29QBACABpLUhR746SgoODrr7/W6XQjR44MDQ1VV+7YsaNnz57qS0VRtm/fnpWV1aNHj+Tk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cOEtt9wiy7IQwmw2Dxw48MiRI23atJkyZcoHH3zg6kq1obi4ePLkydOnT8/JyVHXfPrpp+PGjWvVqtXp06f79+9vMplcW6H7+/bbb/v161dUVNS6deutW7eqt729dOlS3759S0pKoqKihg0b9t1337m6THe3bNmySZMmxcTEREVFjRs3buXKler6WbNmLV68uEOHDh988MG9997r0hrd1JUrV3r37v3OO+9Mnz49Ozvbtn7v3r2DBw+OiIioqKjo27fvuXPn1PVTpkxZvXp1+/btFy1a9Mc//vG31gq0o7KysqqqSl3Oz8/38fE5cuSIoiirVq3q2bOnLMuKoqxbt65z587qMuo2ffr0RYsWCSEyMjLUNcnJyStWrFCXBw4c+M4777isOC2wWCxxcXEff/zxVev/8pe/3H333eryvHnzxowZ4/TSNOaWW25ZsGCBuvzqq6+qe+zSpUt+fn7nzp1TFCU/P99oNGZmZrqySrdk+10nhDh27Jht/dixY//yl7+oy5MmTXr22WcVRcnIyDAajfn5+YqinDt3zmg0ZmdnK4pCj1BLDAaD7Ypvi8Uiy3JQUJAQYufOnWlpaZIkCSHS0tKOHTtm6+KgNtu3bz9x4sT9999vW1NaWrp//37bwHJaWtqOHTtcVJ02HDp0yGQyJScnL1q06B//+IetA71jx460tDR1md1oj6SkpJ9//ln9tf7zzz936dJFCLF79+527dqpt+kJDw/v3bv3rl27XF2p21F/711rx44dw4cPV5dtB+GuXbuSk5PDw8OFEHFxcYmJiXv27BEMjWrXY489NmHChFatWgkhLl261Lx5c3V9aGion5/fpUuXXFqduysrK3vkkUfefvvt6v+L1J0WFRWlvoyOjr548aJr6tOIrKwsHx+f8ePHFxYWfvXVV7169SouLhb/fUBGRUUVFxeXlpa6tFJ3N2/evMuXL8fHx8fHx5tMpjlz5gghsrOzbbtRcEDWR2VlZV5eXvWDUP3fXdsuJQg16bnnnjt27NjChQvVlz4+PlVVVeqyoihWq9XX19d11WnAc889N2nSpM6dO1dfqc5EsO1Ji8XCPa7qptPp8vLyli5d+vzzz69fvz4iIkI9uVX9gFTvXefjw7y8usyZM6eiouKLL7744osvioqKXn31VSGEj49P9UeNWiwW/l/bSa/X63S66gehuutq26UEofa89NJLX3311ZYtW9QOvhCiZcuWtj8Vs7Ozq6qqYmNjXVegBqxevXrNmjV9+vRJSUkRQtx5551fffWVes9322PBL1y4wG6sW4sWLYQQSUlJ6sukpKSzZ8+K/z4gL1y40KxZM/6kqNuSJUteeuml3r17Jycnv/jii0uWLBFCtGjRovpD6i9cuKDucFyXXq+Pjo6u/n9Z3XUtW7ascZcShBqzYMGCNWvWbNq0qVmzZraVY8aM+eqrr8rLy4UQ69evT01NtWUkarRly5bly5e/++676mSZuXPnpqSk+Pn5DR8+fP369UKIysrKDRs23Hbbba6u1K0lJyfHx8d///33Qgir1frDDz+ooThmzJhPPvlEndK8bt26MWPGuLhQtxcZGZmZmakuZ2ZmqveJHjJkyJUrVw4cOCCEyMjIOH78uO2kF67rtttuW7dunRBCUZT169erB6E6hSIjI0MIoV5x8duVKs6c3oNGOnz4sBAiMTEx+XffffedoihWq3XkyJG9evWaPHlyZGTkzp07XV2pZqgPPLHNGt27d29kZOSkSZNuuOGGoUOHWiwW15bn/tasWRMdHf3ggw+qe6yyslJRFJPJ1LNnzyFDhowbNy4mJubkyZOuLtPdrV27NiwsbPLkyffcc09YWNhnn32mrn/jjTdiY2OnTZsWHx8/d+5c1xbpttLS0pKTk4UQXbp0SU5OLioqUhTl9OnTsbGxY8eOvfnmm7t161ZYWKg2njNnTnx8/LRp02JjY9988011JU+f0JKysrJjx45VX9OuXbvQ0FAhhCzL27dvz83NTU1NZfzEfoqiHDhwoGvXrraxu8uXL2/fvj0yMnLIkCGc2bLHmTNnvv/++5YtWw4cOND2PNGKioqtW7eWlZUNGzas+jXOqM3Fixf37dsnSVK/fv1iYmJs6w8fPqxeUN+rVy8XlufODh06ZLFYbC979uypzq4vKirasmWL0Wi8+eabqz/Z8cCBAydOnOjWrVvXrl3VNQQhAMCrcY4QAODVCEIAgFcjCAEAXo0gBAB4NYIQAODVCEIAgFcjCAEAXo0gBAB4NYIQAODVCEIAgFcjCAEAXu3/A4vCrZpvezyiAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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6adDhgypsYZ169apqrp+/XohxIgRI5o1a/bMM8+cPXs2LCzsr3/9q4fHlQzKz8/Pzs6eO3duw4YNb7kPb5mcIPSxljMiBKBnPRopz9bjIyC8jcLnmk+bMGHCgw8++PLLL//666+5ubl33323EOLw4cOzZs06d+6cj49Pfn7+9R5jl5eXl5+f361bN+1lr1699u3bJ4SoqqqaPXv29u3bDQaDp6fnhQsXblBVWlpafHx8gwYNhBBGozEhIeHIkSNaEHbs2FFrEx0dvXfv3hu8Q2JionYcFhbWtm3btLS0QYMGhYaGRkZG3nfffSNHjhw8eHBYWNhDDz3UpEmTe+655/7773/44Yfr8/kb0q4REoQA9CzcRwyMlvxgqe7du4eEhGzbtu3rr78eN26cp6enEGL69OlTp06dPHmyEGLmzJlWq7XG3/Xz81NVtbKyUvst20MYli9fnpGRceTIES8vr19++eXee++9QQF+fn5XP72hrKzMz+/KBpl2BpWvr+/VWVteXu7n5+fr6/vDDz8cP378888/nzZt2n//939PmjRp2bJlL7300pdffvnaa68dPHhQe5ZR/ZB1jbC8gFWjAHAzY8eOXbp06dq1a8ePH6+dycvLa926tRCisLDw888/v94vBgQEdOrUSZsFNZlMH3/8se3XY2JivLy8hBArV660tQ8KCrr2QbM9evQ4evRoWlqaECInJ2fbtm21fRBS3759N2/erL3znj17cnJyOnfuXFhYaDab27Zt+9e//nXkyJHp6ellZWWlpaVRUVF/+ctfHn/88fT09Fp9ym2SdY2Q+wgB4ObGjRs3d+7cO++8Mz4+Xjsza9asUaNG9erV6/fff7edrNE777wzbNiwTz755Ny5c82aNdNOjhkzpk+fPvfcc09hYWG7du1sjR999NHhw4c3bdr0pZde0uZChRBRUVFvvfXWgAEDunbteuDAgSeffLJr1661qj8pKWn8+PFa/fv371+8eHFoaOimTZseffTRzp07m83mEydObN68+ezZs4mJiV26dPHx8Tlw4MDSpUtr9Sm3SbGtqa038+fPP5SZv63L81lj5MSwUysuLrZ9R3Gb6EwHcvbO/Mtf/tKtW7dp06bJLqQGly9f9vT0tM1JCiEyMzOzs7Pj4+MNBoMQwtfXt6qqqqSkJDg4WAhx4cKF0NBQ7UelpaXanQ+BgYFm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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daWAUVb738VPdnaUTEiArJOxLgIR9DQkYUAKuXMEBdVhFENQBnMUZZfRh5mHUq+g8oM4IV2RRUcMiCgZFGDQggiAgyDIQApIQCIEsJGTppLvreVHeHgwhdEinT3X39/Oqujip/nsm8Jtz6lQdRVVVAQCArzLILgAAAJkIQgCATyMIAQA+jSAEAPg0ghAA4NMIQgCATyMIAQA+jSAEAPg0ghAA4NMIQgCAT5MQhLt27Vq/fr37v9c7VFdXyy7Be9CZLkRnuhCd6UJWq/WmbSQE4f79+3fs2OH+7/UOlZWVskvwHnSmC9GZLkRnuordbrdYLDdtxtQoAMCnEYQAAJ9GEAIAfBpBCADwaQQhAMCn1S8IKysr697R3m63s/AXAOBBnA3CwsLCUaNGRUdHh4eHL168+PoGV69eHTduXFRUVKtWrZKTkzMzM11aJwAAjcLZIHzuueeaNm1aUFCwZ8+ev/zlL4cPH67RYOHChXl5eTk5ORcuXOjVq9dTTz3l6lIBAHA9p4LQZrO9//77f/jDH0wmU1xc3JgxY1atWlWjTV5eXv/+/c1ms8FgGDp06IULF+q44GVzzK2XDACA65icaZSfn19aWtqtWzftY3x8/DfffFOjzZNPPjl+/Pi4uLhmzZq98sor8+bNu9HVVFU91qRnUVGR40zz5s3rXzkAAC7gVBAWFxcrihIcHKx9DAkJKSwsrNEmIiKiffv2aWlpTZo0MRgM7dq1u9HVjh079mN1UIcOHbSP/v7+mzZtio+Pv5XyfU9ZWZmiKLKr8BJ0pgt5emeuWbMmPT1ddhU/s9lsRqNRdhW6M2fOnH79+tXrR+x2uzO/lk4FYUREhKqqJSUlzZo1E0IUFRVFR0fXaDN37tyEhIRXX31VCJGWljZu3Liffvqp1qslJCS0t/bLXF5U65+ibqqqNmnSRHYVXoLOdCFP78w9e/ZERkbecccdsgtB7ZYsWXLq1KmUlJR6/ZTdbq+oqLhpM6eCMDw8PCoq6uDBg8OHDxdCHDx40DFN6pCVlTV69GjtuHfv3jk5ORaLJSAgoNYLVhoCnfleAHCbfv36jRs3TnYVqN2WLVsa7+JOLZYxGAwzZsyYP39+Tk7O5s2bP//880ceeUQIkZOTk5qaWl5eLoS47bbb/vnPf546dSo/P//FF18cPHjwjVJQCGExBbvqPwAAgIZw9vGJ559/vm/fvsOHD58/f/4HH3zQvn17IYSqqna7XXvE/oUXXhgyZMjYsWNvu+02VVU//PDDOq5WaTA3vHQAABrOqalRIURAQMCiRYsWLVp07ck2bdr861//0o6Dg4MXLly4cOFCZ65WbQyotgs/3u8GAJBNThYpqq3o5nslAgDQ6OQEYYCtsqiqrneWAgDgHnKCMNBewYgQAKAHkkaE1rJCghAAXGTXrl233367dtymTZuLFy/WaLBixYpHH320jivs3LmzrKxMO96zZ8/QoUMbUs+KFStmzpzZkCu4k6QRoa2yyMLUKAC4RlVVleO9lc8+++z1LzewWCyOnKvVgw8+6HgLSps2bWbNmtWQeioqKkpKShpyBXdydtWoawXayhkRAkAdLl68uHXr1okTJ2ofCwoKNm3aNHXqVO3g1KlTYWFhDz74YGxsbI0fDAgIcLxXbOvWrTt27EhISHBsJWuz2bZv375nzx673Z6SkjJs2DAhxJdfflleXr527dpdu3YNHz48JCTE8SC43W5ft27d0aNH27dv//DDD2vn09PTu3Tpsnfv3mPHjqWkpKSmptbxH1JRUfHBBx9kZ2f37t37/vvv12rLyspKS0u7evVqu3btxo8f36xZs0uXLq1evTovLy8mJub+++9v06aNq3rypmQtlikvqpLyzQDgGZo3b/7UU0/9+OOP2scVK1Zob0P94osvjh8/3rFjx4KCgn79+l0/C/qb3/ymuLhYCLFkyZJZs2bFxsbu3r1be/+lEKKkpGT58uXh4eGRkZEzZ858++23r//qzMzMv/zlL9rxhAkT3nzzzZiYmI8//vj222+32WxCiEWLFo0dO/bQoUPh4eETJkyo4zWtVVVVycnJW7ZsiYmJeemll7T50gsXLgwZMkRRlG7dup0+fTorK8tutycnJ+fm5iYkJJSWlu7fv79hnVc/ckaEAbYKpkYB6Nln2erioza3fV2AQawbYQq85lXb/v7+Dz744Pvvv//yyy8LId57770XXnhBCDFhwoQJEyZobS5durRmzZrZs2fXes358+dv2LAhKSlJCJGbm6udbN68ueOFJ7169Zo7d+6MGTNGjhwZFBQ0bty4hIQEIUReXp7W4Icffvjiiy+ys7NDQkKmT5/etWvXjRs3jhkzRghx1113aYVVVFRs2LDhnnvuqbWGtLQ0VVXXrFkjhHjggQfatm37xz/+8dy5cxEREU8//bTJ9HMGXb58OTc3V9v49pb78JYxNQoAtRgUpfzJjVtABBhF4HXfNmXKlDFjxrz44ouHDh3Ky8sbNWqUEOLw4cNz5sw5f/58YGDg5cuXtb0Qrpefn3/58uUBAwZoHwcPHrxv3z4hRHV19dy5c7dt22YwGPz8/C5dulRHVUePHu3Zs2dISIgQwmg0JiUlHTlyRAvC3r17a21iY2O/++67Oq6QnJysHUdERMTFxR09enTkyJHh4eEtW7a89957x40bd/fdd0dERDz00EOtWrW68847R48e/etf/9qd+29IGhFay3l8AoCeRQaKEbGSN5YaOHBgWFjY1q1bP//880mTJvn5+QkhZs2aNX369GnTpgkhZs+ebbfba/3ZoKAgVVWrqqq0n3JswrB8+fJTp04dOXLE39//+++/v+uuu+ooICgo6NrdG8rLy4OCgrRjJ4PKbDZfm7UVFRVBQUFms/nrr78+efLkp59+OmPGjL/97W+PPPLIO++8s2DBgs8+++yVV145ePDg3//+d2eu7xKyVo1WFDI1CgA3M3HixGXLln344YeTJ0/WzuTn53fq1EkIUVxc/Omnn97oB5s0adKnTx9tFtRisaxfv97x461bt/b39xdCrFy50tG+WbNm1280O2jQoOPHjx89elQIceHCha1bt9Z3I6Rhw4alp6drV96zZ8+FCxf69u1bXFxstVrj4uKefvrpcePGHTt2rLy8vKysLCYm5rHHHnvqqaeOHTtWr29pIFn3CBkRAsDNTZo06bnnnuvVq1fPnj21M3PmzBk/fvzgwYNPnz7tOFmrf/7zn/fff//HH398/vz5tm3baicffvjhoUOH3nnnncXFxV26dHE0fvzxx8eOHdumTZsFCxZoc6FCiJiYmEWLFt1xxx39+/c/cODA7373u/79+9er/pSUlMmTJ2v179+/f8mSJeHh4Rs3bnz88cf79u1rtVozMzPT09PPnTuXnJzcr1+/wMDAAwcOLFu2rF7f0kCKY02t27z++uuHsy+l9/k/Fyb4ufmrvUBpaanjdxQNRGe6kKd35mOPPTZgwIAZM2bILqQWV65c8fPzc8xJCiGys7Nzc3N79uxp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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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cePG0aNHCyFGjBihFFZXV7dhw4Z77rmnyRpWr14ty/KaNWuEEPfff3/Hjh2ff/75wsLCyMjI5557zvFs8QsXLhQVFc2dO7d169bX3YfXTZ0gNNlZLANA025rK/1Wr792Oxfx1wvTZd82ceLE0aNH//nPf/7uu++Ki4vvuusuIcT3338/a9asn376yWQyXbhwITQ0tMkLlpSUXLhwoV+/fsrH22+/ff/+/UKIhoaG2bNnb9u2TafT+fn5nT9//ipVHTlyJCUlRXmcul6vT0tLO3z4sBKEPXv2VNrExsbu3bv3KldIT09XjiMjIxMSEo4cOTJs2LCIiIh27drde++9Y8eOvfvuuyMjIx988MH27dsPHz78vvvu+/Wvf613Y+erNiIsZR8hAA1rYxJDYq/9Bp8Wdeutt4aHh2/dunXTpk0PP/ywn5+fECIzM3Pq1KmPPvqoEGLmzJl2u73Jnw0MDJRl2WKxKD/leAnD0qVLT548efjwYaPR+M0334wYMeIqBQQGBl769oba2lrH+/icDKqAgIBLs7auri4wMDAgIGD79u3Hjx//5JNPpk2b9uKLL06ePPm9996bP3/+Z5999r//+78HDx589dVXnbm+S6i2j5CpUQC4poceemjJkiWrVq165JFHlDMlJSVdu3YVQpSXl3/yySdX+sHg4OBevXops6Bms3n9+vWOH+/QoYPRaBRCvP/++472oaGhl79o9rbbbjt27NiRI0eEEGfPnt26dWtzX4Q0cODArKws5cp79uw5e/Zs7969y8vLrVZrQkLCc889N3bs2KNHj9bW1tbU1MTExDz22GNPPvnk0aNHm/UtN0ilqVH2EQKAEx5++OG5c+fecsstKSkpyplZs2aNGzfu9ttvP336tONkk/72t7+NGjXq448//umnnzp27KicHD9+/IABA4YPH15eXp6YmOhoPGPGjDFjxsTFxc2fP9/xasmYmJjXX3998ODBffv2PXDgwNNPP923b99m1Z+RkfHII48o9efk5CxevDgiImLjxo0zZszo3bu31Wo9ceJEVlZWYWFhenp6nz59TCbTgQMHlixZ0qxvuUGSY02t27zxxhuHzpR80mteyUN+bv5qL1BVVeXRrz/VFDrThTy9Mx977LF+/fpNmzZN7UKaUFFR4efn55iTFELk5+cXFRWlpKTodDohREBAQENDQ3V1tfLu9PPnz0dERCh/VFNTo+x8CAkJsVqtQUFBQojq6urDhw/HxMS0b9++srLScZfRZrNVVlYGBQVJklRVVRUeHu4o4Pjx4507d46MjFTOVFdXG41GZVhpsVgsFkujnYt1dXUNDQ0hISHKx3PnzhUUFCQmJjp+ScrLy3Nzc00mU7du3ZTJ29ra2tzcXJvNlpSUpNR5qalTp95+++1XfybA5ZQX815+tUZUGxGWW4QshMoT8ACgeZcvpIyLi2u0zc7Pz09JQSFEmzZtHOeDgoJuvfVW5dixNTA4ODg1NVU5vnStjV6vd1zEkYJKAY5FN44rOI4diXipgICAgIBfXsAeFRUVFRV1aYPQ0NDbbrvt0jOBgYG9evUSalDnHqFOtvnrRXWDKl8OAMAvVHslYLi/xMJRAIDqVAvCMKNgvQwAQHUqjggFOygAAKpTLwhNTI0CANTH1CgAwKeps31CMDUKQEv0ev1LL730zjvvqF2IEELIsux4jxIUZ86cucF3BV+FakEY5i/xJiYAGjF//vypU6eqXcXPLn2kJxy6devWQldWc0R4ukqtLweA/xAZGel4bIrqPP0xPR5HvXuETI0CADSADfUAAJ/GqlEAgE9jQz0AwKexoR4A4NNUC8JWfqLeJhrsan0/AABCqBiEkhChRmZHAQAqUy0IBXvqAQAaoGYQhvuzcBQAoDJ1R4QEIQBAZeqOCKUyFo4CAFTF1CgAwKepOjXKqlEAgNpYNQoA8GlqT43Wq/j9AACov2qUESEAQE1qrxq1qPj9AACoPjXKYhkAgKpUXizD1CgAQF0qjwjLzIIkBACoSM0gNOqEUSdqGlQsAQDg69QMQiFEOLOjAABVqRyEPHcbAKAu1UeEgh0UAAAVqR6EUmk9U6MAANUwNQoA8GmqjwiZGgUAqEn1ESHv5gUAqEn9ESFTowAAFak9IuTdvAAAVak+ImRDPQBATWqPCJkaBQCoSvURIatGAQBqUj0I2VAPAFCTykEYYhS1NmG1q1sFAMB3qRyEkhChRmZHAQCqUTkIBXvqAQCqUj8I2VMPAFCR+kEYZiQIAQCqUT8Iw5kaBQCoRwtByIgQAKAa9YMwjD31AAD1aCEImRoFAKhG/SBkahQAoCL1gzDMKHgBBQBALeoHYbi/xCsJAQBq0UAQmpgaBQCoRv0gDDPybl4AgGrUD8Jwf8HUKABALeoHob9eGHSixqp2HQAAn6R+EAohIvyli7yeFwCgBk0EYVSAKKlXuwgAgE/SShCeq1O7CACAT9JIEErn6pgaBQCoQBNBGB0oimvVLgIA4JM0EYSMCAEAatFIEHKPEACgDo0EoVTMiBAAoAZNBGE0I0IAgEo0EYTcIwQAqEUTQRjmL+qswmxTuw4AgO/RRBAKIdqYpBKesgYAcDutBCFbCQEAqtBKELKDAgCgCu0EITsoAAAq0EoQsoMCAKAKrQQhOygAAKrQThAyIgQAqEArQRgdKBXXMiIEALibVoKQESEAQBXaCULuEQIAVKCVIAw1inqbqOcpawAA99JKEAoh2jIoBAC4nYaCkK2EAAD301AQcpsQAOB+mgpCnrsNAHA3DQVhdCBTowAAd9NQEDI1CgBwP00FISNCAIC7NS8Iy8rKysrKWqiUaN7EBABwO2eD0GKxjBs3Lj4+Pj4+/sEHH7RYLI0azJ8/X7qEn59fTU1Ns0phRAgAcD9ng3DJkiV5eXmFhYWFhYUnT5587733GjV44YUX5H+bM2fO3XffHRQU1KxSogJ47jYAwN2cDcKVK1c+9thjJpPJZDJNnz79ww8/vFJLm8324YcfPvroo80tpbVRNMiiztrcnwMA4PoZnGx3+vTpxMRE5TghISEvL+9KLTdv3myxWO6+++4rNbDZbBUVFadPn3ac6dy5syRJQoi2JulcndypleRkVQAA3CBng7CqqiogIEA5DgoKqqiouFLL9957b+LEiX5+fldqcPz48Q0bNmRnZysfjUbjhx9+mJSUJIRo4+/3Y6klUrI7W77vqampUf6jATeOznQhOtOF6ExXsdvtzvSks0HYpk2b8vJy5bisrCwqKqrJZiUlJVlZWd9+++1VLpWUlDRp0qRFixZd/kcxwbZK4RccrKFNHVojy3JwcLDaVXgJOtOF6EwXojNdxW6319VdexGms5GTkpKyf/9+5Xj//v0pKSlNNvvggw/69eunDO+uQ3SAKGbhKADAjZwNwhkzZixatGjHjh07duxYtGjR448/rpzv37+/IyCFEMuWLbuOZTIO7KAAALiZs1Ojw4cPf/nll+fMmSNJ0oIFC4YNG6ac79ixo8lkUo6Lioq6d+8+bty4664mKkA6Vs4OCgCA+zgbhEKISZMmTZo0qdHJlStXOo5jY2NXr159I9VEBYh/nb2RCwAA0DzaWpYSzXO3AQDupa0g5B4hAMDNNBaEgTxlDQDgVtoKwhA/YZNFLU9ZAwC4i7aCUPB6XgCAe2kwCLlNCABwHw0GIa/nBQC4j+aCMJoRIQDAjTQXhEyNAgDcSYNByGIZAID7aDAIRXGt2kUAAHyG5oIwOpARIQDAfTQXhNwjBAC4k+aCMJrtEwAAN9JcEAb7CVkWNTxlDQDgFpoLQsHCUQCAG2kzCLlNCABwE20GIS9jAgC4iRaDMDqQESEAwE20GIRMjQIA3EabQchiGQCAm2gxCGMCRUENQQgAcActBuFNIdKpSrWLAAD4Bk0GYSvpx2rZxpgQANDytBiEAQYR4S8VVJOEAIAWp8UgFELEh4iTzI4CAFqeRoOwa2vpRCUjQgBAi9NqEIZIpwhCAEDL02gQxoeIE0yNAgBankaDsGuIdLKCESEAoMVpNwjz2EEBAGh5Gg1CZQdFIc+XAQC0MI0GoRCiKzsoAAAtT7tBGN9aOsFtQgBAC9NuEHYNkU6ygwIA0MK0HIRMjQIAWpyWg5CpUQBAi9N0EJ6uku1EIQCgJWk3CAMNIsLEDgoAQMvSbhAKbhMCAFqepoMwPoR3UAAAWpamg5AnjgIAWprGg5CpUQBAy9J0EMbzel4AQAvTdBCygwIA0NI0HYSBBhFmlIpqSUIAQEvRdBAKIeJbixMVahcBAPBeWg9CHr0NAGhRBCEAwKdpPwiZGgUAtCCtB2F8a0aEAIAWpPUgZAcFAKBFaT0IgwyitVH8xA4KAEDL0HoQip8fva12EQAAL+UBQcijtwEALccTgpD1MgCAFuMBQRgfIpgaBQC0EA8IQvbUAwBajmcE4alKdlAAAFqEBwRhsB87KAAALcUDglAIkdhayuVBawCAFuAZQZgcJh0uZUQIAHA9jwnCI+UEIQDA9TwjCHswIgQAtAwPCcJw6XCZTBICAFzOM4KwtVG0Nkr51UQhAMDFPCMIhRDdw8ThMrWLAAB4HQ8KQukQtwkBAK7mMUGYHCYdKSMIAQAu5jFB2D1cOkwQAgBczWOCMDlUOl4hW+1q1wEA8C4eE4QBBhEbxGsoAAAu5jFBKIToHsbsKADAxTwrCAVBCABwLU8KwuQwia2EAADX8qQg7M4TRwEAruZJQZjYWiqokeusatcBAPAinhSEBp24KUT6oYJBIQDAZTwpCIXyPibWywAAXMfDgpAHrQEAXMvDgrB7mODR2wAAF/K0IAxnBwUAwJU8LAg7t5LKzHK5Re06AADewsOCUBIiKVQ6ym1CAICLeFgQCp44CgBwKQ8MwnAWjgIAXMYDg5ARIQDAdTwyCL9nBwUAwEU8LwjbBQohxLk6tesAAHgFzwtC8fP7mBgUAgBcwCODkPcxAQBcxSODMDlMOlJOEAIAXMAjg/CWcOngBYIQAOACHhmEfSKlHyrk6ga16wAAeD6PDEJ/vbglXNp7nkEhAOBGeWQQCiH6R0u7iglCAMCN8tQgTI+Sdp+zq10FAMDjeWoQ9o/S7S2RrUQhAODGeGoQhvmLuGDpO3YTAgBujKcGoeA2IQDAFTw4CNOjpN3nCEIAwA3x4CDsHyXtLOYmIQDghjQjCG022/Hjx0tLS6/Sxmw25+bmlpSU3HBh19apleSnk05VMigEAFw/Z4Pwhx9+SExMHDNmTHx8/J/+9Kcm23zwwQcxMTEjR47s0aPHggULXFfkFaVHS7uYHQUA3ABng/C5554bN27c4cOHDx48+Nprrx09erRRg6+//vrJJ5/cunXr8ePHi4uLp0yZ4upSm8BtQgDADXIqCMvLyzdt2jRjxgwhRFxc3IgRI1atWtWozdtvvz1lypTevXvX1NRIkhQeHu76Yi/TP4qFowCAG2JwplFBQYFer+/QoYPysWvXrj/++GOjNseOHfPz84uPj6+trY2Ojv7oo48SExObvJrFYikpKcnJyVE+SpKUkpJiMDhVSSMp4dLZWrmkTrQNuI6fBgDAuSCsrq4OCPglagIDAysrKxu1KS0t3bVr1759+8LCwp599tkpU6bs2rWryavl5eX985//zM3NVT5KkvT3v//9Sql5Tf0i/L7Mr7031leWjyoDbrWr8BJ0pgvRmS5EZ7qK3W53piedCsKoqKiqqiqr1aqM20pLS6Ojoy9vk5GRERYWJoSYOnXq66+/brFYjEbj5VdLTEwcP378okWLnPnqa7ojxp5TbngwUe+Sq2mfLMvBwcFqV+El6EwXojNdiM50FbvdXldXd81mTt0j7NChQ3h4+L59+5SPe/bs6dWrV6M2vXv3rqioUI7Ly8tNJpOfn19zCr5O/Vk4CgC4AU4FoZ+fX2Zm5lNPPfXVV1+98sorP/zww/jx44UQBw8eTEhIUNo88cQTa9asWbNmzf79+5977rlJkya5Z2h/WxvpUKlca3XDVwEAvJCzS1R+//vfBwQE/O53v4uOjv7yyy9DQkKEECEhIQMGDFAaJCUlrV+/ftGiRdXV1b/61a9mz57dUiX/pwCD6BEu7TsvD2zHlDoAoNkkWXb3vOIbb7xx6tQpV90jFEI8t9fW2ijN7eXBj4tzXlVVVatWrdSuwkvQmS5EZ7oQnekqyj3CoKCgqzfzhvBIj+YlvQCA6+QNQdg/Svd1iWxjxQwAoPm8IQgjTSImUDrES3oBAM3nDUEohLgzRtpaRBACAJrNS4Lwng66rAJuEwIAms1LgvDOdtLBC3KpWe06AACexkuCMMAg7mgnfVHIoBAA0DxeEoTi59lRbhMCAJrHe4Lw3jhpU4GdTRQAgGbxniBsHyS1D5L2lpCEAIBm8J4gFELcEyexdhQA0CzeFYQddJ/lMyIEADSDVwVhalupuE4+U00WAgCc5VVBqJPEXbG6TawdBQA4zauCUHCbEADQTN4WhMPb63ac5YX1AABneVsQtjaKXpHS9rPMjgIAnOJtQSh4ADcAoDm8MAjvjZM+PcOIEADgFC8MwqRQyV8veE8vAMAZXhiEQogRHSQewA0AcIZ3BuE9HXSf5XObEABwbd4ZhHfGSMcr5NNVDAoBANfgnUFo1IkHuuhWniQIAQDX4J1BKISYmKBbdtxOEgIArs5rg7BvpBTsJ746RxQCAK7Ga4NQCPFQV93yEyyZAQBcjXcHobQ+z85zRwEAV+HNQRgTKPVrI208w6AQAHBF3hyEQoiJ8cyOAgCuxsuDcHQn3b7zcmENS2YAAE3z8iA06cWYTrpVpwhCAEDTvDwIhRAT43XvH2d2FADQNO8PwvRoyWwXORcYFAIAmuD9QSgJ8TAbCgEAV+D9QSiEmBgvrTplN9vUrgMAoD0+EYSdWknJYdLnBQwKAQCN+UQQCiEyb9a9eZQgBAA05itB+F+ddScqxHelLJkBAPwHXwlCg05kJun+eoRBIQDgP/hKEAohMpN0G360n6tTuw4AgJb4UBCG+4v7O+uW5DIoBAD8woeCUAgxO1n3t6N2C1EIAPg33wrC5DCpW5hYl0cSAgB+5ltBKISYnax/9RBBCAD4mc8F4T1xUnWD+LqEfRQAACF8MAglIZ7oplt0mEEhAEAIHwxCIcSkBN22InsBb+sFAPhmELbyE4/E6/7GE9cAAL4ZhEKI3yTr3su1l1vUrgMAoDYfDcIuraRRnXT/8x1vZgIAX+ejQSiE+GNv/ZIf7PnV3CkEAJ/mu0HYLlA83k33Qg53CgHAp/luEAohnk/Rby2yH7jAoBAAfJdPB2Gwn5jbU//sXu4UAoDv8ukgFEI8drPuXJ34oohBIQD4KF8PQoNOvNhX99xem50oBACf5OtBKIQY3UkXYhQrTrJqBgB8EUEohBCv3Kqf+4291qp2HQAAtyMIhRDitrZSaluJ1zMBgA8iCH/2eqrur0dtR8u5VQgAvoUg/FlskDSvl37KDlbNAIBvIQh/kZmkM+rE344xQQoAPoQg/IVOEu8O0P/xgO10FaNCAPAVBOF/SGgtPdND/9hOG0kIAD6CIGzs2R66cov44AQTpADgEwjCxgw6sfQO/W/32c7VqV0KAKDlEYRNSAmXHk3QzfyKh3EDgPcjCJv2+976I2Xyhzx3DQC8HUHYNJNerB6sf3qP7XgF62YAwJsRhFfUPUx6oZf+1/+yWRgWAoD3Igiv5jfJuvZB0gvfcLMQALwWQXg1khDL7tCvPi1v5c29AOClCMJrCPMXyzP0E7OtxeymAABvRBBeW0Y7aXKCbnK2lVEhAHgfgtApf+ytr7CIBd+zbAYAvA1B6BSDTqwerH/rqJ1HrwGAlzGoXYDH6BAkbRuhH5hlCzKI+zvzHxAA4CX4B70Z4ltLnw/XP/6VjUWkAOA1CMLmuSVcWj3I8NB2a84FshAAvAFB2GwD20lLBujv3WI9Vk4WAoDHIwivx8g43f/cqh+x2XammiwEAM/GYpnrNDFeV9UgBmXZtt+r7xAkqV0OAOA6EYTX7zfddDa7uOMz2/Z79B2DyUIA8EgE4Q2Z3V0nCzF0k237PfqYQLIQADwP9whv1JPddZk36+7Msv1Uy/1CAPA8BKELPN1DN+1m3aAs29latUsBADQTQegaz/bQTeiqG/S5Na+KcSEAeBKC0GVe6KV7tocubaN19zmyEAA8BkHoSlMSdcsHGv5rm3XjGZ7NDQCegSB0sWGx0pYRhplf2988ShYCgAcgCF0vJVzKvkf/9lH7s3ttdmZJAUDbCMIW0amVtGuk4eBFecRma0md2tUAAK6MIGwpYf7iixGG26OknhsaeG0TAGgWQdiC9JL4Q2/9yjsNj+6w/eEA06QAoEUEYYu7s52UM8rw1Tl56CZrMdOkAKAxBKE7tA0Qm4Yb0qKkPhusn7CzAgC0hCB0E70k5vfRrxui/3/77eP+abtQr3ZBAAAhBEHoZre3lQ6ONnQJEbd8bP34R4aGAKA+gtDdTHrxP/30awbr5+y3P7SdoSEAqIwgVEd6lPTtaENUgEhe3/DOD3YWlAKAWghC1QQYxMLb9Nn3GNbl2ft9Yt1TQhgCgAqa94b6o0eP2u325ORkSWr8NnabzVZZWY92TY4AAAtgSURBVOn4GBgY6O/v74ICvd3NodIXIwwrTtjHbLMOidEtTNW3MaldEwD4EmdHhDU1NRkZGWPGjHnggQfS0tIuzTzFiRMnIiIibvq3999/38WVei9JiEfidUf/y6+1UXRf3/DKIXudVe2aAMBnOBuE7777rt1uP3z48KFDh0JCQt58883L27Rp06b036ZPn+7SOr1fqFH8NU2ffY9hX4mcsNa66LDdbFO7JgDwAc4G4Zo1ayZOnGgwGHQ63aRJk9asWdNks7Nnz5aVlbmuPJ9zc6i0ZrB+w1D95wX27uutH51iHQ0AtCxn7xHm5+d36dJFOe7SpUt+fv7lbcrKytLS0kpLS5OSklauXHnTTTc1eam6urqCgoJt27YpHyVJGjBggNFobH7xXqtvpLRlhGH7WXnuN7YIf+mu9o3vyAIAXMXZIKyrq3MsfjGZTDU1NY0adOzYsaSkJDQ01Gw2Z2ZmTp48eceOHU1eqqioaP/+/X/+858dZ1599dWuXbs2v3gv17eV2HynEEJUV/9ysqam5vKVSrg+dKYL0ZkuRGe6it1ud6YnnQ3CqKio0tJS5fjixYvR0dGNGgQEBAQEBAgh/P39n3/++R49elgslibHeV27dh0zZsyiRYuc/GpcSpbl4OBgtavwEnSmC9GZLkRnuordbq+ru/a7Dpy9R9i3b99du3Ypx7t37+7Xr99VGhcUFLRq1crPz8/JiwMAoBZnR4QzZ84cMmRIcnKy0Wh87bXXPvnkE+V8QkLC4sWLBw0atHz58tLS0sTExIKCgpdeeumJJ55gaA8A0D5nR4T9+vX7+OOPN23atGHDho8++mjAgAHK+fvvv79du3ZCiISEhNzc3Lfffnvv3r0LFy6cP39+S5Xsw+x2+yuvvKJ2FV6ivr7+jTfeULsKL1FeXv73v/9d7Sq8RHFx8fLly9Wuwkvk5eWtXr36ms0kWXb38vw33njj1KlT3CO8DjU1NW3btr18pRKuQ2FhYWpqamFhodqFeIPvv/9+woQJhw4dUrsQb5CdnT137tydO3eqXYg32LBhw7JlyzZu3Hj1ZjxrFADg0whCAIBPIwgBAD6teW+fcImTJ0+uWLHis88+c/9XezpZls1m85Ue2YNmsdlsJSUldKZLNDQ00JmuYjabS0tL6UyXqK2tDQsLu2YzFRbLWCyWH3/80WBQIYO9gNls5v1WrkJnuhCd6UJ0pqvIshwREREaGnr1ZioEIQAA2sE9QgCATyMIAQA+jSAEAPg0ghAA4NNYuqlddrt99+7d27dvr6qq6tWr17hx4/R6vfJHZ8+eXbZs2cWLF0eNGuV47iuc0dDQsHz58sTEREe/lZaWLlmypLi4+K677rrrrrvULc+DHD16dM2aNZWVlT179nzkkUeUk6dOnVq+fLnZbB4/fnzPnj3VrdBTlJaWLl++vLCwsFOnThMnTgwJCVHOHzt2bOXKlXa7fcKECcnJyeoWqWV5eXk5OTmlpaXjxo27dIHowYMH/+///s9kMk2cONHxYvmGhoalS5fm5uampKQ8/PDDyj+qjAi16+DBg1OnTq2rq2vXrt1f/vKX+++/XzlfWVl52223nTlzpkOHDqNHj77mY/RwqZdffvmZZ5756KOPlI8Wi6V///7ff/99586dp0yZsmzZMnXL8xSffvppenp6TU1Nx44dt2zZopzMz8/v16+fxWIJDw/PyMjYt2+fukV6hJqamltvvfXgwYMpKSnZ2dlpaWkWi0UIkZubm5qaqtfrAwIC0tLSjhw5onalGnXhwoXevXsvXrx4+vTpxcXFjvN79+7NyMgIDw83m839+vUrKChQzj/yyCMrV66Mj49/6623Zs2a9XNrGVplNpttNptynJ+fL4QoLCyUZfmvf/1rRkaGcn7JkiWpqalqVehxjh071rdv38zMzMzMTOXMqlWrunfvbrfbZVn+xz/+ER8frxzjKurr69u2bbtx48ZG53/7299OmDBBOZ43b97YsWPdXprn2blzZ3h4uPI33WKxmEym7777TpblGTNmPP7440qbp556asqUKWpWqWGOv7BCiGPHjjnO33///fPmzVOOJ0yYMGfOHFmWT5w4YTKZSktLZVkuKCgwmUzFxcWyLDMi1C6j0ajT/fx/kNls1ul0QUFBQogdO3YMHTpUOT906NC9e/eazWbVqvQcdrt92rRpixYtMhqNjpM7duwYMmSI8u7MoUOHnjhx4qefflKvRs+Qk5Mjy3K3bt3efPPN5cuXO16Hkp2dPWzYMOV46NCh2dnZ6tXoMbp06dLQ0HDy5EkhxJEjR4xGY4cOHYQQ2dnZl/41pzOv5Eovvm3yt3Hnzp19+vRRnjXTvn37Ll26fP3114KpUY9gt9tnzZo1ffp0Zfr77Nmzbdq0Uf6obdu2siyfPXtW1QI9w8KFC/v06ZOWlnbpyUs7MzAwMDg4mM68pry8PCHEgw8+WFlZuWHDhr59+ypZ2Og388KFCw0NDWoW6gliYmJWrFiRmpp68803Dx48eP369co/0406k1/LZrFYLBcvXry8A4uLix0nhRBRUVHKf/iyWEbrZFmeOXNmeXn5ggULlDMGg8FqtSrHysGlQxw06fjx4++9997+/fsbnb+0M4UQVquVzrwmnU53/vz57OzspKQkWZZ79uy5atWqqVOnNvrN1Ol0juVduJL8/PzMzMyFCxemp6dv27Zt8uTJBw4caNOmTaPO5NeyWfR6vU6nu7wDDQaDzWZzNGtoaPj5vCpVwnlPP/30gQMHtmzZosyLCiFiY2Md03eFhYUGg6Ft27bqFegZNmzYUF5efueddwohCgoKZFkuLS1dvXr1pZ154cKF+vr6mJgYVSv1ALGxsTqdLjExUQghSVK3bt3OnDkj/vM3s6ioqF27do65fVzJxx9/nJSUNHnyZCFEQkLC+++//+mnnz766KONOpNfy2bR6/VRUVFFRUVJSUnikg6MjY0tKipyNHOc59dU0373u99t3749KyvLsaJaCDFy5Mh//OMfyqTTunXrRowYwRPMr2nixIlZWVnvvPPOO++8M2jQoDvuuGPevHlCiJEjR37++ee1tbVCiHXr1t1+++2RkZFqF6t1qampbdu2VYbXDQ0N33zzTbdu3YQQI0eOXLt2rbJsYe3atSNHjlS5UE8QERFRUFCg/HWur68vKipSfgPvu+++tWvXKm3ozOvg6EBZltetW6d04NChQ48dO3bixAkhhLLjIiMjQ/DQbS3bvXt3//794+PjHSm4dOnSlJSUhoaGIUOGmM3mrl27btmyZcuWLb1791a3VM8ye/Zsi8Xy9ttvCyFkWf7Vr35VUFCQkpKSlZW1du1aZdSIq1uxYsXzzz9/33335eTkREZGZmVl6fX6ioqK9PT06Ojo0NDQPXv27Nq1q1OnTmpXqnV1dXUDBw60Wq2pqak7d+6MjIzcsmWLn59fSUlJWlpaQkKCwWA4fPjwV199FR0drXaxGjVs2LDS0tKcnJzk5GSTyfTll1+GhITk5eWlp6enpaWVl5eXlJTs3LmzdevWQoj58+e/++67Q4cO3bRp05w5c2bOnCkIQi2rqqo6fvz4pWcSExODg4OFEFar9V//+ldZWdnAgQOZF20uZWo0Li5O+Wi327Ozs8+dOzdgwIDY2Fh1a/Mgp06d2r9/f4cOHdLS0hwr9+rr67dt22Y2m4cMGaL8u4NrUh6dUVRU1LFjx9TUVEdn1tTUbNu2TZblIUOGKH/x0aTvv//+0mVZPXv2VG5OV1RUbNu2zWQyDR482GQyORocOHAgNze3R48e3bt3V84QhAAAn8Y9QgCATyMIAQA+jSAEAPg0ghAA4NMIQgCATyMIAQA+jSAEAPg0ghAA4NMIQgCATyMIAQA+jSAEAPi0/w9/eE0g5HMuYgAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daWAUVb738VPdnX3fSEhIwhaQJOwIIQGDsqmgojyAGhZREFxYdB511Lmj9+JyXa+AozAii4wLgqAsA4w8KJuCmiBICBAWCUQCJCF70umlnhfl7YkhkA50uqq7v59XlcpJ9d9j4Mc5dU6VJMuyAADAU+nULgAAADURhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj6ZCEO7Zs+eLL75w/ue6B5PJpHYJ7oPOdCA604HoTAcym83NtlEhCLOzs3fu3On8z3UPdXV1apfgPuhMB6IzHYjOdBSr1Wo0GpttxtQoAMCjEYQAAI9GEAIAPBpBCADwaAQhAMCjtSwIq6qqrr6u12Qysd4JAOBC7A3C4uLim2++OTExMSoq6s0337y8QUVFxV133dW2bdv27dv379//yJEjDq0TAIBWYW8QPv/8823btr148WJOTs4rr7yyf//+Rg3eeOONsrKywsLCc+fOpaWlPfHEE44uFQAAx7MrCC0WyyeffPLEE0/odLqOHTvec889K1eubNTm4sWLvXv39vHxkSQpLS3twoULV7lgsV/stZcMAIDjGOxpdP78+aqqqm7duilf3nDDDbt27WrUZtasWePGjVuwYEFQUNCCBQv++te/XulqVqv1oG/yyZMnf6/AYEhISLim4gEAuF52BWF5ebkQwt/fX/kyMDCwrKysUZuQkJB27dpt2LAhJCREp9PFxMRc6WpHjhw5ag4eOnSo7cxnn32WnJzc4to9UlVVldoluA8604FcvTNXr169adMmtav4ndlsNhjs+svZc8iyPGfOnD59+rTop6xWqyRJzTazq68jIyOFEOXl5WFhYUKIsrKyqKioRm1mz57du3fv1157TQixZs2aCRMmFBQUNHm15OTkRHOv/CWn7PloXC4oKEjtEtwHnelALt2Ze/fujYqKavgPdGjKokWLjh8/npmZ2aKfslqttbW1zTazNwhjYmJycnKU35Ls7OzU1NRGbU6fPj1mzBjluHv37oWFhUaj0cfHp8kL1un87PlcAHCavn37jhs3Tu0q0LStW7e23sXtWiwjSdLDDz/817/+9cSJE+vWrdu6devUqVOFEAUFBZmZmdXV1UKIIUOGLFy4MC8v7+zZs//1X/81aNCgK6WgEKJO7++o/wAAAK6HvdPQzz//fG1t7ejRoyMiIlavXp2YmCiEkCTJ399fmYGdN2/eSy+9NGnSJKPROGDAgE8//fQqVzMaAq6/dAAArp+9Qejt7f3666+//vrrDU/Gx8dv3rxZOfb393/llVdeeeUVe65m0nkZLcJH36JSAQBwPHWeNaqTLZfqVflkAAD+QJ0g9LHUlhplVT4aAICG1AlCX0vNJaMqnwwAwB+oFoSMCAHAUfbs2XPLLbcoxwkJCefPn2/UYNmyZQ899NBVrrBr1y5lC4AQYu/evYMHD76eepYtWzZjxozruYIzqRWEtaWMCAHAQerr6y9duqQcP/vss4GBgY0aGI1GW841acKECb/++qtynJCQMHPmzOupp7a2tqKi4nqu4EzqPMXHx1JDEALAVZw/f/7rr7+eOHGi8mVJScmGDRseeOAB5eD48ePh4eETJkyIi4tr9IPKyw+U46+//nrnzp0pKSmy/PsknMVi2b59+969e61Wa2Zm5pAhQ4QQ//rXv2pqalavXr1nz56bb745KCjIthHcarWuWbMmNze3Q4cO9913n3J+06ZNXbt2/eGHHw4fPpyZmTl8+PCr/IfU1tZ+8sknBQUFvXr1GjNmjFLbiRMnVq1aVVVV1b59+/Hjx4eGhl68ePHjjz8uKiqKjY0dM2aMM59BrdJiGXPtJaZGAeDKwsLC5s6d+8svvyhfLlu2THka6pYtW/Ly8jp16lRSUtK3b9/LZ0Eff/xx5XHQixYtmjlzZlxc3Pfff297j2xFRcXSpUsjIiKioqJmzJjxwQcfXP7R+fn5L774onKclZX17rvvxsbGrl279pZbbrFYLEKId95555577jlw4EBERERWVtZVHtNaX1+fkZGxdevW2NjYV199VZkvPXfu3KBBgyRJ6tat28mTJ0+cOGG1WjMyMgoLC1NSUiorK7Ozs6+v81pGnREhi2UAaNzGAnl+rsVpH+ejE2uGGXwb7K729vaeMGHCP/7xD+UZzitXrnz55ZeFEFlZWVlZWUqbixcvfv7557NmzWrymi+88MK6devS09OFEIWFhcrJsLAw2wNPevbsOWfOnOnTp48YMcLf33/cuHEpKSlCiKKiIqXBzz//vGXLloKCgqCgoGnTpt1www3r16+/++67hRC33XabUlhtbe26detGjRrVZA2rVq2SZfnzzz8XQowdOzYxMfHpp58+e/ZsZGTkU089ZXu2eHFxcWFh4V/+8peQkJBr7sNrploQMjUKQMsGtJGe0TvvqR8+euF72adNmTLl7rvvfuWVVw4cOFBUVDRy5EghxMGDB2fPnv3bb7/5+voWFxeHhoY2ecELFy4UFxffeOONypcDBw788ccfhRAmk2nOnDnbtm3T6XReXl4XL168SlW5ubk9evRQHqeu1+vT09MPHTqkBGGvXr2UNnFxcfv27bvKFTIyMpTjyMjILl265ObmjhgxIiIiom3btqNHjx43btztt98eGRl57733tmvX7tZbb73zzjvvv/9+vRM7X60gZB8hAE2L8hXD4pp/g0+r6t+/f3h4+Ndff7158+ZJkyZ5eXkJIWbOnDlt2rQHH3xQCDFr1iyr1drkz/r7+8uyXF9fr/yU7SUMS5cuPX78+KFDh7y9vX/66afbbrvtKgX4+/s3fHtDTU2N7X18dgaVn59fw6ytra319/f38/P79ttvjx079tVXX02fPv2ll16aOnXqhx9+OG/evI0bN77++uv79+9/++237bm+Q6i1oZ4RIQA0b+LEiUuWLPn0008nT56snLlw4ULnzp2FEGVlZV999dWVfjAwMLB3797KLKjRaPziiy9sPx4fH+/t7S2EWL58ua19aGhoaWlpo4sMGDAgLy8vNzdXCHHu3Lmvv/66pS9CGjJkyKZNm5Qr792799y5c3369CkrKzObzV26dHnqqafGjRt3+PDhmpqa6urq2NjYhx9+eO7cuYcPH27Rp1wn9e4R8og1AGjOpEmT/vKXv/Ts2bNHjx7KmdmzZ48fP37gwIEnT560nWzSe++9N2bMmLVr1/7222/KmxKEEPfdd9/gwYNvvfXWsrKyrl272ho/8sgj99xzT0JCwrx582yvloyNjX3nnXeGDh3ar1+/nJycJ598sl+/fi2qPzMzc/LkyUr92dnZixYtioiIWL9+/SOPPNKnTx+z2Zyfn79p06azZ89mZGT07dvX19c3JydnyZIlLfqU6yTZ1tQ6zYIFCw79WrS2938WT/Jy8ke7gcrKSpd+/amm0JkO5Oqd+fDDD994443Tp09Xu5AmlJeXe3l52eYkhRAFBQWFhYU9evTQ6XRCCD8/P5PJVFVVpbw7/eLFixER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dJTi4uL3339f7SrcREFBwfLly9Wuwk0cPXrUnr+7YY+DBw9++eWXzTYjCAEAHo0gBAB4NIIQAODRWrZq1CGOHz++cuXKjRs3Ov+jXZ0sy0ajsVOnTmoX4g4sFsuFCxfoTIcwmUx0pqMYjcbS0lI60yFqamrseXhZy/YROkR9ff2vv/7a7E4MNMloNPr4+KhdhZugMx2IznQgOtNRZFmOiIgIDQ29ejMVghAAAO3gHiEAwKMRhAAAj0YQAgA8GkEIAPBoLN3ULqvVumfPnm+//baysrJ3797jx4/X6/XKt86dO7ds2bKSkpIxY8YMHjxY3Tpdi8lkWrFiRdeuXW39VlpaumTJkqKiopEjR44cOVLd8lzI4cOHP//884qKil69etleUHrixIkVK1YYjcb77ruvV69e6lboKkpLS1esWHH27Nn27dtPmTIlODhYOZ+Xl/fxxx9brdasrKyUlBR1i9SyU6dOZWdnl5aWjh8/vuEC0f3793/22We+vr5TpkyxvUzeZDItXbr06NGjPXr0mDRpkvKXKiNC7dq/f/+0adNqa2vbtm376quvjh07VjlfUVExYMCA06dPx8fH33333evXr1e3Ttfy2muv/elPf/rkk0+UL+vr6wcNGnTw4MEOHTo89NBDy5YtU7c8V7Fhw4aMjIzq6urExMStW7cqJwsKCm688cb6+vrw8PDMzMwffvhB3SJdQnV1df/+/ffv39+jR48dO3akp6fX19cLIY4ePZqWlqbX6/38/NLT03Nzc9WuVKOKi4v79OmzaNGiGTNmKC/HVezbty8zMzM8PNxoNN54441nzpxRzk+ePPnjjz9OSkr629/+Nnv27N9by9Aqo9FosViU44KCAiHE2bNnZVleuHBhZmamcn7JkiVpaWlqVehy8vLy+vXrN3PmzJkzZypnPv3009TUVKvVKsvyl19+mZSUpBzjKurq6tq0abN+/fpG55955pmsrCzl+IUXXhg3bpzTS3M9u3btCg8PV/6k19fX+/r6HjhwQJblRx555NFHH1XaPPHEEw899JCaVWqY7Q+sECIvL892fuzYsS+88IJynJWV9eyzz8qynJ+f7+vrW1paKsvymTNnfH19i4qKZFlmRKhd3t7eOt3v/4OMRqNOp1NeL7lz587hw4cr54cPH75v3z6j0ahala7DarVOnz59/vz53t7etpM7d+4cNmyYJElCiOHDh+fn5//222/q1egasrOzZVlOTk5+9913V6xYUV1drZzfsWPHiBEjlOPhw4fv2LFDvRpdRseOHU0m0/Hjx4UQubm53t7e8fHxQogdO3Y0/GNOZ16J8of3ck3+Nu7atatv377Ks2batWvXsWPH77//XjA16hKsVuvs2bNnzJihTH+fO3cuKipK+VabNm1kWT537pyqBbqGt956q2/fvunp6Q1PNuxMf3//wMBAOrNZp06dEkLce++9FRUV69at69evn5KFjX4zi4uLTSaTmoW6gtjY2JUrV6alpd1www1Dhw794osvlL+mG3Umv5YtUl9fX1JScnkHFhUV2U4KIaKjo5V/+LJYRutkWZ41a1ZZWdkbb7yhnDEYDGazWTlWDhoOcdCkY8eOffjhhz/++GOj8w07UwhhNpvpzGbpdLqLFy/u2LGjW7dusiz36tXr008/nTZtWqPfTJ1OZ1vehSspKCiYOXPmW2+9lZGRsW3btqlTp+bk5ERFRTXqTH4tW0Sv1+t0uss70GAwWCwWWzOTyfT7eVWqhP2efPLJnJycrVu3KvOiQoi4uDjb9N3Zs2cNBkObNm3UK9A1rFu3rqys7OabbxZCnDlzRpbl0tLSVatWNezM4uLiurq62NhYVSt1AXFxcTqdrmvXrkIISZKSk5NPnz4t/vibWVhY2LZtW9vcPq5k7dq13bp1mzp1qhCiS5cuy5cv37Bhw4MPPtioM/m1bBG9Xh8dHV1YWNitWzfRoAPj4uIKCwttzWzn+TXVtOeee+7bb7/dtGmTbUW1EOKOO+748ssvlUmnNWvW3HbbbTzBvFlTpkzZtGnT4sWLFy9efMstt9x0000vvPCCEOKOO+745z//WVNTI4RYs2bNwIEDIyMj1S5W69LS0tq0aaMMr00m008//ZScnCyEuOOOO1avXq0sW1i9evUdd9yhcqGuICIi4syZM8of57q6usLCQuU38M4771y9erXShs68BrYOlGV5zZo1SgcOHz48Ly8vPz9fCKHsuMjMzBQ8dFvL9uzZM2jQoKSkJFsKLl26tEePHiaTadiwYUajsXPnzlu3bt26dWufPn3ULdW1zJkzp76+/v333xdCyLJ81113nTlzpkePHps2bVq9erUyasTVrVy58umnn77zzjuzs7MjIyM3bdqk1+vLy8szMjJiYmJCQ0P37t27e/fu9u3bq12p1tXW1g4ZMsRsNqelpe3atSsyMnLr1q1eXl4XLlxIT0/v0qWLwWA4dOjQd999FxMTo3axGjVixIjS0tLs7OyUlBRfX9/t27cHBwefOnUqIyMjPT29rKzswoULu3btCgkJEULMmzfvgw8+GD58+ObNm5999tlZs2YJglDLKisrjx071vBM165dAwMDhRBms/mbb765dOnSkCFDmBdtKWVqNCEhQfnSarXu2LHj/PnzgwcPjouLU7c2F3LixIkff/wxPj4+PT3dtnKvrq5u27ZtRqNx2LBhyt87aJby6IzCwsLExMS0tDRbZ1ZXV2/btk2W5WHDhil/8NGkgwcPNlyW1atXL+XmdHl5+bZt23x9fYcOHerr62trkJOTc/To0e7du6empipnCEIAgEfjHiEAwKMRhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj0YQAgA82v8HlIMdO/uuh/8AAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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v/+dlZUVEhIyffr0W2+9df369dpumvfcc49WWFVV1ccff3zffffVW8PKlStVVf3oo49E5MEHH2zXrt2vfvWrnJyc6Ojo5557zrG3+IULF3Jzc1944YWwsLAb7sMbRhACQD36tVB+bW66XT/8zRJwxbdNmTJlzJgxr7322oEDB/Lz8++66y4ROXjwYGpq6rlz5wICAi5cuBAeHl7vBQsKCi5cuHDHHXdoHwcMGLBnzx4Rqa2tffLJJzdv3mwymXx9fa/97tgjR4707NlT207dbDYPHDjw8OHDWhD27t1ba9O6detdu3Zd4wpJSUnacXR0dOfOnY8cOTJixIioqKhWrVqNHDly7Nix9957b3R09Lhx49q0aXP33XePHj16woQJ5ibsfH2C0N9aWVzN1CgA42oeIMNbX/8NPo2qb9++kZGRmzZt+vzzzydNmuTr6ysis2bNmj59+mOPPSYis2fPttvt9f5sUFCQqqo1NTXaTzlewrBw4cKTJ08ePnzYz8/v22+/veeee65RQFBQ0OVvb6isrHS8j8/JoAoMDLw8a6uqqoKCggIDA7ds2XLixIlPPvlkxowZr7zyytSpU99///2XX355w4YNb7zxxr59+669T6dr6bZqlBEhAFzXI488smDBghUrVkyePFk7U1BQ0LFjRxEpKSn55JNPrvaDwcHBt912mzYLarFY1qxZ4/jxuLg4Pz8/EVm8eLGjfXh4eHFxcZ2L9OvX79ixY0eOHBGRvLy8TZs2NfRFSEOGDNm4caN25Z07d+bl5fXp06ekpMRqtXbu3Pm5554bO3bs0aNHKysrKyoqYmNjH3/88aeeeuro0aMN+pabpNOIkCAEACdMmjTphRde6NWrV8+ePbUzqampDz300IABA77//nvHyXr985//vP/++9euXXvu3Ll27dppJ8ePHz948OC77767pKSkS5cujsZPPPHEAw880LZt25dfftnxasnY2Ni//e1vw4YNu/322/fu3fvMM8/cfvvtDao/OTl58uTJWv0ZGRlz586Niopav379E0880adPH6vVmpmZuXHjxpycnKSkpMTExICAgL179y5YsKBB33KTFMea2iYzZ86cI2fyPur9x4uTfZv4qz1AWVmZW7/+1FDoTBdy9858/PHH77jjjhkzZuhdSD0uXbrk6+vrmJMUkaysrNzc3J49e5pMJhEJDAys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9wBgEARhkxrZVjn4oI+I9Fpr/fIcQ0MA0B9B2NTC/WTeIPOcgeap6bafb7eVMjQEAF0RhPq4L0459KCPTZWE1dYPTtoZGwKAXghC3YT5ybxB5vUp5n8etff7xLq7kDQEAB34ON/UZrPt3r1bVdW+ffv6+NT9wdra2uzsbMfHqKiosLAw19To0fpEK9tH+yzNtP/0C2tKa0tk2EwAAAv9SURBVNNf+pujA/SuCQC8ibNBWFpaOnToUBHx8fGprKzcsmVLZGTk5Q1OnTrVvXv3du3aaR9/97vfPfrooy4t1WMpIpM7mUa1Nb2QYeu2pvbZHub/l2AKasB/ogAAbpyzU6Nz584NCwvbvXv3jh072rdvP2fOnCvbREVFnfovUrChIvzl3YHm9Pt8DhWrHVbWvn7AXs0mpQDQ+JwNwrVr106aNMlkMimKMmnSpDVr1lzZRlXV48ePZ2VlqSq3u27QreHK/w0xf363zzfn7V1WWRcct1vZmg0AGpOzE3DZ2dmOac927drl5ORc2aaqqurhhx8+f/58dHT0ypUrExIS6r1URUVFZmbmRx99pH309fVNSUkJCgpqePEeq1eEfDLctKNA/X2G7bX99md7KI92UgLMIiJ2u91uJxtdg850ITrThehMV3GyG50NQovF4uvrqx37+/tXVVXVaRAfH19QUBAYGGiz2VJTUx977LGdO3fWe6mCgoITJ058+OGHjjMdO3aMj493shLv0StYPkmWAxeVt4/6vLRXmdbR9v+62M2WKrPZrHdpHqKqis50GTrThehMV7Hb7YqiXLeZs0EYExNTVFSkHRcWFrZq1apOA39/f+3AbDbPnj27e/fuFovFcfJy8fHx991339///ncnv9rLJQVLUpwcLFb/fMDce6N92i1hT/cOjAnUuyyPoKpqcHCw3lV4CDrThehMV7Hb7VcO267k7D3C/v37p6ena8dbt27t37//NRqfOnUqLCys3hTEjekZqSy/07xztE+RRUlYXTsl3ZZxgRuxAOACzo4IU1NTBw8efMstt/j6+s6ZMyctLU0736pVqyVLlowYMWLevHn5+fmdO3fOzc196623nn322Uar2XvdEqr8JbH2jQEB75+w/+xLW5tmktrNNKadyYd9EQDgRjn7L2ivXr2++OKLAwcO7N69e8OGDf369dPOp6amarf3+vbtW1FR8emnn2Zl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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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0lV4iNra2sWLFytdhYcoLS197733lK7CQxQVFa1atUrpKjzE2bNn161bd8tmBKE7qampIQhdpbi4+J133lG6Cg+Rn5//wQcfKF2Fh8jNzXXm32444/Dhw5s3b75lM4IQAKBpBCEAQNMIQgCApilwQ/2pU6dWr179+eeft/xXuzu73W4ymTp16qR0IZ7AarVevnyZznQJs9lMZ7qKyWQqKSmhM12iuro6ODj4ls0UeNZoXV3duXPn6r+/EM670VsecRvoTBeiM12IznQVu90eGhoaFBR082YKBCEAAOrBGiEAQNMIQgCAphGEAABNIwgBAJrG1k31stlse/bs+e677yoqKnr16jVu3Di9/trrBgsLC1euXHn16tVHHnlkyJAhytbpXsxm86pVq+Li4hz9VlJSsnz58qKiovvuu+++++5Ttjw3kpOTs379+vLy8qSkpMmTJ8snT58+vWrVKpPJ9PjjjyclJSlbobsoKSlZtWrVhQsXOnToMGXKlICAAPn88ePH16xZY7PZJk6c2L17d2WLVLOzZ89mZ2eXlJSMGzeu/gbRgwcPfvzxx0ajccqUKXfddZd80mw2r1ixIjc3NzEx8YknnpD/UWVEqF4HDx6cNm1aTU1NmzZtFixYMHbsWPl8eXn5gAED8vLyYmNjH3300S1btihbp3v5y1/+8sILL3z00Ufyx7q6usGDBx8+fLhjx45PPfXUypUrlS3PXWzdujUlJaWqqqp9+/bbtm2TT+bn5/fr16+uri4kJGTo0KE//PCDskW6haqqqv79+x88eDAxMXHnzp3Jycl1dXVCiNzc3IEDB+r1el9f3+Tk5GPHjildqUoVFxf37t176dKl06dPLyoqcpzft2/f0KFDQ0JCTCZTv379zp8/L5+fPHnymjVrunTp8ve//3327NnXWtuhViaTyWq1ysf5+flCiAsXLtjt9v/+7/8eOnSofH758uUDBw5UqkK3c/z48b59+86YMWPGjBnymbVr1/bo0cNms9nt9s2bN3fp0kU+xk3U1tZGRERs2bKlwfnf/e53EydOlI/nzp2bnp7e4qW5n6ysrJCQEPlvel1dndFoPHTokN1unzlz5jPPPCO3ef7555966iklq1Qxx19YIcTx48cd58eOHTt37lz5eOLEia+88ordbj958qTRaCwpKbHb7efPnzcajUVFRXa7nRGhenl7e+t01/4PMplMOp3O399fCLFr1660tDT5fFpa2r59+0wmk2JVug+bzfb0009nZGR4e3s7Tu7atWvEiBGSJAkh0tLSTp48efHiReVqdA/Z2dl2uz0hIeHtt99etWpVVVWVfH7nzp0jR46Uj9PS0nbu3KlcjW7jrrvuMpvNp06dEkIcO3bM29s7NjZWCLFz5876f83pzBuR//Jer9HfxqysrD59+sjPmomJibnrrru+//57wdSoW7DZbLNnz54+fbo8/V1YWBgeHi7/UUREhN1uLywsVLRA97Bo0aI+ffokJyfXP1m/M/38/Fq1akVn3tLZs2eFEBMmTCgvL9+0aVPfvn3lLGzwm1lcXGw2m5Us1B1ER0evXr164MCB3bp1S01N/eSTT+R/pht0Jr+WTVJXV3f16tXrO7CoqMhxUggRGRkp/4cvm2XUzm63z5o1q7S09K9//at8xmAwWCwW+Vg+qD/EQaNOnDjx/vvv//jjjw3O1+9MIYTFYqEzb0mn0125cmXnzp3x8fF2uz0pKWnt2rXTpk1r8Jup0+kc27twI/n5+TNmzFi0aFFKSsqOHTumTp164MCB8PDwBp3Jr2WT6PV6nU53fQcaDAar1epoZjabr51XpEo477e//e2BAwe2bdsmz4sKIdq2beuYvrtw4YLBYIiIiFCuQPewadOm0tLSe++9Vwhx/vx5u91eUlKybt26+p1ZXFxcW1sbHR2taKVuoG3btjqdLi4uTgghSVJCQkJeXp7419/MgoKCNm3aOOb2cSOffvppfHz81KlThRBdu3b94IMPtm7d+uSTTzboTH4tm0Sv10dGRhYUFMTHx4t6Hdi2bduCggJHM8d5fk1V7dVXX/3uu+8yMzMdO6qFEGPGjNm8ebM86bRx48ZRo0bxBPNbmjJlSmZm5rvvvvvuu+8OHz78nnvumTt3rhBizJgx//jHP6qrq4UQGzduHDRoUFhYmNLFqt3AgQMjIiLk4bXZbN6/f39CQoIQYsyYMRs2bJC3LWzYsGHMmDEKF+oOQkNDz58/L/91rq2tLSgokH8DH3rooQ0bNsht6Mzb4OhAu92+ceNGuQPT0tKOHz9+8uRJIYR8x8XQoUMFD91Wsz179gwePLhLly6OFFyxYkViYqLZbB4xYoTJZOrcufO2bdu2bdvWu3dvZUt1L3PmzKmrq3vnnXeEEHa7/eGHHz5//nxiYmJmZuaGDRvkUSNubvXq1S+//PJDDz2UnZ0dFhaWmZmp1+vLyspSUlKioqKCgoL27t27e/fuDh06KF2p2tXU1AwbNsxisQwcODArKyssLGzbtm1eXl6XL19OTk7u2rWrwWA4evToP//5z6ioKKWLVamRI0eWlJRkZ2d3797daDR+8803AQEBZ8+eTUlJSU5OLi0tvXz5clZWVmBgoBBi3rx5y5YtS0tL++KLL1555ZVZs2YJglDNKioqTpw4Uf9MXFxcq1athBAWi+Xbb7/95Zdfhg0bxrxoU8lTo+3atZM/2my2nTt3Xrp0aciQIW3btlW2Njdy+vTpH3/8MTY2Njk52bFzr7a2dseOHSaTacSIEfK/O7gl+dEZBQUF7du3HzhwoKMzq6qqduzYYbfbR4wYIf/FR6MOHz5cf1tWUlKSvDhdVla2Y8cOo9GYmppqNBodDQ4cOJCbm3v33Xf36NFDPkMQAgA0jTVCAICmEYQAAE0jCAEAmkYQAgA0jSAEAGgaQQgA0DSCEACgaQQhAEDTCEIAgKYRhAAATSMIAQCa9r+L/X1FQJRZvwAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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TZ8+vVFn8rVsFr1e365du7y8vK5du4oGHRgdHZ2Xl1ffrP48X1NN++///u9du3Zt27atfke1EGL06NGbN29WJp02bNhw3333cQfzW5o6deq2bdvef//9999//5577hk8ePDChQuFEKNHj/7666+rqqqEEBs2bBg4cGB4eLjaxWpdSkpK27ZtleF1XV3doUOHunXrJoQYPXr0+vXrlW0L69evHz16tMqFuoKwsLALFy4of5xramry8vKUb+D999+/fv16pQ2deRvqO1CW5Q0bNigdOHz48JMnT54+fVoIoVxxMWTIEMFNt7Vs3759d911V5cuXepTcOXKlb169aqrq0tPTzebzZ07d87IyMjIyOjbt6+6pbqWefPm1dbWLl26VAghy/IDDzxw4cKFXr16bdu2bf369cqoEU37+OOPn3/++fvvv//w4cPh4eHbtm3T6/VXr14dNGhQREREcHDw/v37//73v8fHx6tdqdZVV1cPHTrUYrGkpKTs3bs3PDw8IyPDy8vr8uXLqampCQkJBoMhMzPzH//4R0REhNrFatSIESOKi4sPHz7cvXt3k8m0c+fOwMDAc+fODRo0KDU1tbS09PLly3v37g0KChJCLFq06IMPPhg+fPg333zz4osvzpkzRxCEWlZeXp6dnd3wTGJior+/vxDCYrF8//33JSUlQ4cOZV60uZSp0bi4OOWlzWbbvXv3pUuX0tLSoqOj1a3NheTk5Bw8eDA2NjY1NbV+515NTc2OHTvMZnN6erry9w5uSbl1Rl5eXvv27VNSUuo7s7KycseOHbIsp6enK3/wcUPHjh1ruC2rd+/eyuL01atXd+zYYTKZhg0bZjKZ6hscOXLk1KlTPXv27NGjh3KGIAQAeDTWCAEAHo0gBAB4NIIQAODRCEIAgEcjCAEAHo0gBAB4NIIQAODRCEIAgEcjCAEAHo0gBAB4NIIQAODR/j9QPsKHcZ0B2QAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daXwUVd728VPVnT1kT4BsyJZAAjFsEhIxKASNIwjyAeUGBZF9bgHx0dEZ5lbHUccZdQTRQQWBQUUWRURUBB0WUZBNIZBhl4RAEpKQhSydXup5UUwPhgAd6KSqu3/fV9XFofrvMXBxTp2qIymKIgAA8FSy1gUAAKAlghAA4NEIQgCARyMIAQAejSAEAHg0ghAA4NEIQgCARyMIAQAejSAEAHg0ghAA4NE0CMLt27d//PHHLf+97sFsNmtdgvugM52IznQiOtOJLBbLNdtoEIR79uzZunVry3+ve6irq9O6BPdBZzoRnelEdKaz2Gw2k8l0zWZMjQIAPBpBCADwaAQhAMCjEYQAAI9GEAIAPFrTgrC4uLi2tvYqDWpqas6fP39jJQEA0HIcDcLCwsK0tLTU1NS2bdv+6U9/urzB+fPns7Ky2rdv36tXr+Tk5AMHDji1TgAAmoWjQfiHP/whMTHxzJkzBw4cmDdv3q5duxo0+Nvf/qYoyunTp0+cOJGdnT179mxnlwoAgPM5FIQWi+Wjjz6aOXOmECIuLu6+++57//33G7QpLy9PSkry8vISQqSmppaXl1/lgiV+0ddbMAAAzmR0pFFRUVFNTU1CQoL6MTExccuWLQ3azJw5c+TIkX/5y19CQkIWLFjw4osvXulqVqt1v2/SiRMn7Gfat28vSVLTiwcA4EY5FISVlZWSJPn7+6sfAwICKioqGrTx9vYOCwvbsWNHYGCgLMsBAQFXutrhw4cPW4IHDhyofpQkacWKFV27dr2u+j1OdXU1/2hwFjrTiVy9M1euXLl+/Xqtq7jIarUaDAatq9CdGTNm9OrVq0m/xWazOfJj6VAQRkZGKopSXl4eFhYmhDh//nxUVFSDNrNmzbr11lv//Oc/CyHWrl07evTogoKCRitISkqKt/Q4tvCkI1+NBhRFCQwM1LoKN0FnOpGrd+aOHTsiIyPt/0CH3ixYsODYsWOZmZlN+l02m+3qTzqoHArC8PDw6Ojo3bt3Dx48WAixa9euHj16NGhz+vTpESNGqMcJCQnFxcX19fU+Pj6NXrDO4OfI9wJAi+nVq9fIkSO1rgKN27BhQ/Nd3KHFMpIkTZs27Q9/+MOBAwc+/PDDb7755uGHHxZC/PLLL3369KmurhZCZGVlvfbaa7t37z569OicOXMyMzOvlIJCiDqDv7P+AwAAuBEOjQiFEE899ZTZbB4/fnxYWNjatWtjY2OFEF5eXvHx8er857PPPhsYGDh79myTydS3b9+33nrrKlerM1zxDiIAAC3J0SA0Go3PPffcc889d+nJmJgY+xa7vr6+c+bMmTNnjiNXs8rGWovwc/TLAQBoLtq8a9Rgs5SaFE2+GgCAS2kThL7WmrJrbxoMAECz0yoIqwlCAIAeaBWEtWVMjQKAk2zfvv2OO+5Qj+Pj44uKiho0WLx48SOPPHKVK2zbtk19BEAIsWPHjv79+99IPYsXL54yZcqNXKElaTY1WlqnyTcDgBuqr6+3b4H39NNPX/5yA5PJZM+5Rt1///2//PKLehwfHz916tQbqae2traysvJGrtCStFm46WNhahQArqaoqGjjxo1jx45VP5aWlq5bt278+PHqwbFjx8LCwu6///6YmJgGv9HHx8f+Vq+NGzdu3bo1OTlZUS5Owlmt1m+//XbHjh02my0zM3PAgAFCiK+//rqmpmbVqlXbt2+//fbbW7VqZX8Q3GazrV69+uDBg+3btx89erR6fv369YmJiT/++OOhQ4cyMzOzsrKu8h9SW1v74Ycf5uXlpaamDhs2TK3t+PHjK1asuHDhwk033TRq1KiQkJBz58598MEHhYWF0dHRw4YNi4+Pd1ZPXpNmU6Pn65kaBYArCg0NnTVrln1v18WLF6tvQ/3qq69yc3M7duxYWlraq1evy2dB//d//1fd/2fBggVTp06NiYn54YcfXnnlFfVXKysr33vvvfDw8MjIyClTprz77ruXf/XRo0efffZZ9XjMmDHz58+Pjo7+5JNP7rjjDqvVKoR4/fXX77vvvp9//jk8PHzMmDFXeU1rfX19RkbGhg0boqOjX3rpJXW+9OzZs7feeqskSV27dj1x4sTx48dtNltGRkZBQUFycnJVVdWePXturPOaRpsRIVOjAHTu8zxl7kFri32djyxWDzL6XvKqbW9v7/vvv//9999/+eWXhRDLli174YUXhBBjxowZM2aM2ubcuXMrV6589NFHG73mM888s2bNmvT0dCFEQUGBejI0NHT58uXq8c033zxz5sxJkyYNHjzY399/5MiRycnJQojCwkK1wU8//fTVV1/l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eMninnjpnnhDvc3w7Rll9Unbiz9Z27eShrWT720nJYcyawoADRGE7slbFnfFSnfFGhZkGLYVKWtP2e752maUxL3tpKHt5FsiJV/msAFACEEQuj2jLG5vK93e1vB6mvipVFl7Snl8h/VguZIQJPWKkHpFSD0jpNRwchGA5yIIPUhquJQaLj3TUzZZxf4yZU+JsqdEWXTENihaevkWkhCAhyIIPZGPQfSJlPpEcssQAFg1CgDwbAQhAMCjEYQAAI9GELoSm832yiuvaF2Fm6irq5s3b57WVbiJ8vLyd955R+sq3ERhYeHSpUu1rsJNnDx5csWKFddsRhC6ktraWoLQWUpKSq60dzSaKi8vb8mSJVpX4SYOHz7syN/dcMT+/fs//fTTazYjCAEAHo0gBAB4NIIQAODRNHig/tixY8uWLfv8889b/qtdnaIoJpOpY8eOWhfiDqxWa3FxMZ3pFGazmc50FpPJVFZWRmc6RU1NTWho6DWbNW1jXqeor6//5ZdfjEZeanM9TCaTj4+P1lW4CTrTiehMJ6IznUVRlPDw8JCQkKs30yAIAQDQD+4RAgA8GkEIAPBoBCEAwKMRhAAAj8bSTf2y2Wzbt2/fvHlzVVVVjx49Ro0aZTBc3D737NmzixcvLi0tHTZsWP/+/bWt07WYzealS5cmJiba+62srGzhwoWFhYV33nnnnXfeqW15LuTQoUMrV66srKxMTU196KGH1JPHjx9funSpyWQaPXp0amqqthW6irKysqVLl54+ffqmm24aN25cUFCQej43N/eDDz6w2WxjxoxJTk7Wtkg9O3ny5J49e8rKykaNGnXpAtF9+/Z99NFHvr6+48aN69Chg3rSbDa/9957hw8fTklJefDBB9W/VBkR6te+ffsmTpxYW1vbtm3bl156acSIEer5ysrKvn37njp1Ki4ubvjw4Z999pm2dbqWl19++fHHH//www/Vj/X19bfeeuv+/fvbt2//yCOPLF68WNvyXMW6desyMjKqq6vbtWu3YcMG9WReXl6fPn3q6+vDwsIyMzN//PFHbYt0CdXV1bfccsu+fftSUlK2bNmSnp5eX18vhDh8+HBaWprBYPDz80tPTz948KDWlepUSUlJz549FyxYMGXKlMLCQvv5nTt3ZmZmhoWFmUymPn365Ofnq+cfeuihDz74oHPnzm+++eaMGTMutlagVyaTyWq1qsd5eXlCiNOnTyuK8sYbb2RmZqrnFy5cmJaWplWFLic3N7d3795Tp06dOnWqemb58uXdunWz2WyKonz66aedO3dWj3EVdXV1UVFRn332WYPzv/vd78aMGaMeP/PMMyNHjmzx0lzPtm3bwsLC1D/p9fX1vr6+P//8s6Io06ZNmz59utrmsccee+SRR7SsUsfsf2CFELm5ufbzI0aMeOaZZ9TjMWPGPP3004qiHD161NfXt6ysTFGU/Px8X1/fwsJCRVEYEeqXt7e3LF/8H2QymWRZDggIEEJs3bo1KytLPZ+VlbVz506TyaRZla7DZrNNmjRp7ty53t7e9pNbt24dNGiQJElCiKysrKNHj545c0a7Gl3Dnj17FEVJSkqaP3/+0qVLq6ur1fNbtmwZPHiwepyVlbVlyxbtanQZHTp0MJvNx44dE0IcPHjQ29s7Li5OCLFly5ZL/5jTmVei/uG9XKM/jdu2bevVq5f6rpnY2NgOHTr88MMPgqlRl2Cz2WbMmDFlyhR1+vvs2bORkZHqL0VFRSmKcvbsWU0LdA2vvvpqr1690tPTLz15aWf6+/sHBgbSmdd08uRJIcQDDzxQWVm5Zs2a3r17q1nY4CezpKTEbDZrWagriI6OXrZsWVpaWpcuXQYOHPjxxx+rf0036Ex+LJukvr6+tLT08g4sLCy0nxRCtG7dWv2HL4tl9E5RlEcffbS8vPxvf/ubesZoNFosFvVYPbh0iINGHTlyZNGiRbt27Wpw/tLOFEJYLBY685pkWT537tyWLVu6du2qKEpqaury5csnTpzY4CdTlmX78i5cSV5e3tSpU1999dWMjIxNmzY9/PDDe/fujYyMbNCZ/Fg2icFgkGX58g40Go1Wq9XezGw2XzyvSZVw3OzZs/fu3bthwwZ1XlQIERMTY5++O336tNFojIqK0q5A17BmzZry8vLbb79dCJGfn68oSllZ2YoVKy7tzJKSkrq6uujoaE0rdQExMTGyLCcmJgohJElKSko6deqU+PVPZkFBQdu2be1z+7iSTz75pGvXrg8//LAQIiEhYcmSJevWrZswYUKDzuTHskkMBkPr1q0LCgq6du0qLunAmJiYgoICezP7eX5Mde33v//95s2b169fb19RLYQYMmTIp59+qk46rV69Ojs7mzeYX9O4cePWr1//9ttvv/3223fcccdtt932zDPPCCGGDBnyxRdf1NTUCCFWr17dr1+/iIgIrYvVu7S0tKioKHV4bTabd+/enZSUJIQYMmTIqlWr1GULq1atGjJkiMaFuoLw8PD8/Hz1j3NdXV1BQYH6Ezh06NBVq1apbejM62DvQEVRVq9erXZgVlZWbm7u0aNHhRDqExeZmZmCl27r2fbt22+99dbOnTvbU/C9995LSUkxm82DBg0ymUydOnXasGHDhg0bevbsqW2prmXmzJn19fX/+Mc/hBCKotx77735+fkpKSnr169ftWqVOmrE1S1btuzJJ58cOnTonj17IiIi1q9fbzAYKioqMjIy2rRpExISsmPHju++++6mm27SulK9q62tHTBggMViSUtL27ZtW0RExIYNG7y8vIqLi9PT0xMSEoxGY05Ozvfff9+mTRuti9WpwYMHl5WV7dmzJzk52dfX99tvvw0KCjp58mRGRkZ6enp5eXlxcfG2bduCg4OFEM8///y7776blZX15ZdfPv30048++qggCPWsqqrqyJEjl55JTEwMDAwUQlgsln/961/nz58fMGAA86JNpU6NxsfHqx9tNtuWLVuKior69+8fExOjbW0u5Pjx47t27YqLi0tPT7ev3Kurq9u0aZPJZBo0aJD69w6uSX11RkFBQbt27dLS0uydWV1dvWnTJkVRBg0apP7BR6P2799/6bKs1NRU9eZ0RUXFpk2bfH19Bw4c6Ovra2+wd+/ew4cPd+/evVu3buoZghAA4NG4RwgA8GgEIQDAoxGEAACPRhACADwaQQgA8GgEIQDAoxGEAACPRhACADwaQQgA8GgEIQDAoxGEAACP9v8BUK2R8Z/seAUAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dZ3wVZRr38WvOOekFSCMFQk8INfQQShACyCqIsiCIgCgo+kixgB9WP8s+omtZdu1rocmqixARFUFZEAmIoghICRhCTSGBhJBC6mnPi+HJsiHACZxkTvl9X00mN3MubxP+3GVmFKvVKgAAuCud1gUAAKAlghAA4NYIQgCAWyMIAQBujSAEALg1ghAA4NYIQgCAWyMIAQBujSAEALg1ghAA4NY0CMJdu3atW7eu8T/XNRiNRq1LcB10ph3RmXZEZ9qRyWS6YRsNgnDv3r07duxo/M91DZWVlVqX4DroTDuiM+2IzrQXi8VSVVV1w2ZMjQIA3BpBCABwawQhAMCtEYQAALdGEAIA3Fr9gjA3N7esrOw6DUpLSwsKCm6tJAAAGo+tQZibm9unT5++ffu2aNHiL3/5y9UNCgsLhw4dGhsbm5CQEBcXd/DgQXuWCQBAw7A1CJ999tkuXbpkZWUdPnz4nXfe+eWXX2o1+Nvf/qbX6zMzM48fPz569OinnnrK3qUCAGB/NgWhyWT69NNP58yZIyJRUVH33HPPJ598UqtNcXFxXFycwWAQka5duxYVFV3nggU+kTdbMAAA9mSwpdG5c+cqKipiYmLUL2NiYlJTU2u1mTdv3vjx41988cUmTZosW7bspZdeutbVzGbzQe9OJ0+erDnTpk0bRVHqXzwAALfKpiAsKSlRFMXHx0f90s/Pr7i4uPaFDIamTZvu3bs3ICBAURRvb+9rXS0jIyPd2HTYsGHqlx4eHh9//HFcXNxN1e92Ll26pHUJroPOtCNn78yUlJSNGzdqXcVlJpNJnV1DDavVOnfu3J49e9brT1ksFltGWTb1dVhYmNVqLSoqCgoKEpGLFy+GhYXVajNv3rzBgwcvXrxYRDZs2HDfffedPXu2zgo6duwYbYo/vvSULR+NqwUEBGhdguugM+3IqTtz9+7doaGhNf9Ah6N57733jh8/npSUVK8/ZbFYKioqbtjMpiAMCgqKioras2fPyJEjRWTPnj1Xx/LZs2fHjRunHrdv3z4/P7+6utrLy6vOC1bqfWz5XABoNL169Ro/frzWVaBumzdvbriL2xSEiqI89thjzz77bHh4+KFDh7777ru33npLRE6fPn3PPffs2LHD399/xIgR//jHP+Li4gIDA//0pz/ddttt10pBEanU+9ntvwAAgFtg6zT0ggULjEbjzJkzmzVrtmHDhqioKBHx8PBo166dTqcTkUWLFgUEBCxYsKC6urpv377PPvvsda5WafC99dIBALh1tgahwWBYtGjRokWLrjwZFRWVkpKiHnt5eS1cuHDhwoW2XM2sGMpN4stiMABAa9o8a9RgNV2osmry0QAAXEmbIPQ2lRXe+KXBAAA0OI2C0FxOEAIAHIE2QehlKr9QydQoANjHrl27hg4dqh5HR0efO3euVoOVK1c+9NBD17nCzp07a14utHv37kGDBt1KPStXrnzkkUdu5QqNSZsg9LEwIgQAu6murr548aJ6vHDhQn9//1oNqqqqrv8SvXvvvff06dPqcXR09KxZs26lnoqKipKSklu5QmPSZuOml6nsAkEIANd27ty5LVu23H///eqXFy5c2LBhwwMPPKAeHD9+PCgo6N5771VvZruSl5dXzVO9tmzZsmPHjs6dO1utlyfhzGbztm3bdu/ebbFYkpKShgwZIiL/+c9/ysvLU1JSdu3addtttwUEBNTcCG6xWD777LO0tLQ2bdpMmjRJPb9x48bY2NhffvnlyJEjSUlJw4cPv85/SEVFxb///e/MzMz4+PixY8eqtZ04cWLNmjWXLl1q3br1hAkTmjZtmp+f/8knn+Tl5UVGRo4dOzY6OtpePXlDWq0RVlxk1ygAXFuzZs3mzZt36NAh9cuVK1eqT0P99ttvjx492q5duwsXLvTq1evqWdDHH39cff/Pe++9N2vWrKioqJ9++mnJkiXqd0tKSlasWBEcHBwaGvrII48sXbr06o/OyMioee/s5MmT33777cjIyM8//3zo0KFms1lEXn/99XvuuefAgQPBwcGTJ0++zmNaq6urBwwYsHnz5sjIyJdeekmdL83NzR04cKCiKHFxcSdPnjxx4oTFYhkwYEBOTk7nzp1LS0v37t17a51XP9qMCL3N5RcqNflkALDJ15nWN9LMjfZxXjr5LNngrf/vGU9Pz3vvvffjjz9+5ZVXROSjjz568cUXRWTy5MmTJ09W2+Tn569du3b27Nl1XnPRokXr169PTEwUkZycHPVks2bNVq9erR5379597ty5M2fOHDFihK+v7/jx4zt37iwieXl5aoPffvvt22+/zczMDAgImDFjRseOHb/66qu7775bREaNGqUWVlFRsX79+jvuuKPOGtasWWO1WteuXSsi48aNa9Wq1YIFC7Kzs0NCQubPn1/zbPGCgoKcnJznnnuuSZMmN92HN02jIOT2CQCOrV+Y8oxef+N2duKlF++rPm3atGl33333X//61wMHDuTl5alPez548OCcOXPOnj3r7e1dUFDQtGnTOi94/vz5goKCPn36qF/2799/z549ImI0GufOnbt161adTufh4ZGfn3+dqtLS0rp166Y+Tl2v1ycmJh4+fFgNwvj4eLVNVFTUzz//fJ0rDBgwQD0OCQmJiYlJS0sbMWJEcHBwRETEnXfeOX78+D/84Q8hISETJ05s0aLF7bffPmbMmPvuu0/fiJ2v1Yiw4jxTowAcWKi3JEdp/J7Uvn37BgUFbdmy5ZtvvpkyZYqHh4eIzJo1a8aMGQ8++KCIzJ4922Kx1PlnfX19rVZrdXW1+qdqXsKwYsWK48ePHz582NPT89dffx01atR1CvD19b3y7Q3l5eW+vpcfkGljUPn4+FyZtRUVFb6+vj4+Ptu3bz927NiXX345c+bMF154Yfr06cuXL1+8ePHXX3/96quv7t+//x//+Ict17cLrdYIGRECwI3df//9y5YtW7169dSpU9Uz58+fb9++vYgUFRV9+eWX1/qD/v7+PXr0UGdBq6qq1q1bV/PHW7Zs6enpKSIffvhhTfumTZsWFhbWuki/fv2OHj2alpYmIrm5uVu2bKnvi5CGDBmyceNG9cq7d+/Ozc3t2bNnUVGRyWSKiYmZP3/++PHjjxw5Ul5eXlZWFhkZ+fDDD8+bN+/IkSP1+pRbpNkaYSEjQgC4kSlTpjz33HPdu3fv1q2bembOnDkTJkzo37//yZMna07W6Z///OfYsWM///zzs2fPtmrVSj05adKkQYMG3X777UVFRbGxsTWNH3300XvuuSc6Onrx4sU1r5aMjIx8/fXXhw0b1rt373379j355JO9e/euV/1JSUlTp05V69+7d+97770XHBz81VdfPfrooz179jSZTBkZGRs3bszOzh4wYECvXr28vb337du3bNmyen3KLVJq9tQ2mjfffPPYyTNLu71c9aBHI3+0CygtLXXq1586FDrTjpy9Mx9++OE+ffrMnDlT60LqUFxc7OHhUTMnKSKZmZk5OTndunVTX/7j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jNtqZkMpAGiLINTGwHDlt7sNXYOkx3rTC/stFWyiAQCNEISa8dLLX3rq999tOFZsjUkx/SuDO+8BQAP1eA3T77///vHHH1sslvvuu69Lly61vltUVLR27dqaLxMTE69ug6u18FP+NUSfmmudt9u84pjltQR9j2BF66IAwI3YOiI8duxYv379dDqdr6/vgAEDDh06VKtBXtf/iBYAAA0mSURBVF7eE088cfL/Ky4utnepriwpQvl1rOG+dro7NpsmfGdOu8jgEAAaia0jwjfffHPSpEnPP/+8iBQVFb322msrVqyo1cbf3//ll1+2c4FuQ6/Iwx110zroVmVYRn5r7hEsi3vp4xkdAkADs3VEuGPHjhEjRqjHw4cPT01NvbpNVVXV66+//u6776anp9utQDfjpZeHO+rSxxsGh+tu/9Z03/eMDgGgYdk6IszNzQ0NDVWPw8LCcnNzazXw8PBISkoqKCjIyclZsGDB0qVLJ06cWOelsrOzv/vuuxkzZtSceeaZZ1q2bFn/4l2WXmR2jExvIx9kWJM3mXsGy5OdrAPCrCJSWVnp4eGhdYEugs60IzrTjuhMe7FYLBbLje/YtjUIPTw8TKbLe/xNJpOnp2etBu3atfvyyy/V46SkpKeffvpaQRgQEBAWFta7d2/1S0VRQkJC+L9+tWYe8kx3eaKrrDlpnf2LeOutczopo8M86Ct78fCgM+2GzrQjOtNe7ByEkZGROTk56nFOTk5kZOR1GicmJp49e7aqqsrLy+vq7zZp0qRr166zZs2y8aPdnI9eHoiVqTGy/rTl1YOWv/7mO6erMrWDLpBfk1um1+v1er3WVbgIOtOO6Ex7URRFUW6808LWNcLRo0enpKSoxykpKaNHj1aPd+7cWVhYKCIVFRU1jTds2NChQ4c6UxA3R6fIuDa6n+8yvNXHuDPP2uZT4//50XykiOVDALhVto4IH3vsscTExFGjRnl6eh48ePDHH39Uz48ePXr16tWjRo164YUXtmzZEhsbm5WVdfjw4TVr1jRYzW4tMdQysq3+bLnu/aOW5E2muKbKrDjdmGidF/98BICbYmsQhoaG/vbbb999953FYklOTvb391fPb9u2rV27diLy3HPP3X777dnZ2cHBwf369WvSpElDlQyRSF/l//bSP9tD//kpywe/Wx79wTyhrW5qB11CGLdbAED91OPJ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sw0GQ1hYmHYFOof169cXFRXddtttIpKVlWW1WgsLC9esWXNlZxYUFFRWVkZGRmpaqROIiorS6XSxsbEioihKp06dzpw5I//7k5mTkxMREVEzt49r+fzzz+Pi4qZPny4iMTExH3744YYNGx588MFancmPZb3o9frmzZvn5OTExcXJFR0YFRWVk5NT06zmPD+mDu1Pf/rT9u3bN27cWLOjWkRGjx79xRdfqJNOn3322ahRo3iC+Q1NmzZt48aN77///vvvvz906NDBgwcvWrRIREaPHr1p06by8nIR+eyzz/r37x8SEqJ1sY4uISEhLCxMHV4bjcZff/21U6dOIjJ69OiUlBR120JKSsro0aM1LtQZBAcHZ2Vlqb/OlZWVOTk56k/gmDFjUlJS1DZ05k2o6UCr1frZZ5+pHTh8+PCjR49mZGSIiHrHRVJSkvDQbUe2a9eugQMHdujQoSYFV6xY0a1bN6PRmJycXFVV1b59+82bN2/evLlnz57alupc5s6dW11d/e6774qI1Wq96667srKyunXrtnHjxpSUFHXUiOv76KOPFixYMGbMmL1794aEhGzcuFGv1xcXFw8YMCA8PLxp06a7d+/+4YcfWrdurXWljq6iomLIkCEmkykhIWHnzp0hISGbN2/28PA4f/58YmJiTEyMwWA4fPjwjz/+GB4ernWxDmrEiBGFhYV79+7t3Lmzt7f3tm3bAgMDT506NWDAgMTExKKiovPnz+/cubNJkyYisnjx4qVLlw4fPvybb75ZuHDh7NmzhSB0ZKWlpceOHbvyTGxsrL+/v4iYTKbvv//+4sWLQ4YMYV60vtSp0ejoaPVLi8WSmpp67ty5QYMGRUVFaVubEzlx4sSePXtatmyZmJhYs3OvsrJy69atVVVVycnJ6t87uCH10Rk5OTmtWrVKSEio6cyysrKtW7dardbk5GT1Fx91Onjw4JXbsuLj49XF6eLi4q1bt3p7ew8bNszb27umwb59+9LT07t27dqlSxf1DEEIAHBrrBECANwaQQgAcGsEIQDArRGEAAC3RhACANwaQQgAcGsEIQDArRGEAAC3RhACANwaQQgAcGsEIQDArf0/EvhewmPhPPMAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deXwUVb738VPVnT2B7JAOCfuSAGEJa4JGIUFRQZYLyCCgCAIO4HKHcZzhuczIqC+3UVFnRFnkcUE2QTAjER5WQZBN1gyQCCQkBAghJGTppLvq+aO8PZkQoAOdVC+f91/VlZPq35xp8vWcPnVKUlVVAADgqWS9CwAAQE8EIQDAoxGEAACPRhACADwaQQgA8GgEIQDAoxGEAACPRhACADwaQQgA8GgEIQDAo+kQhLt27VqzZk3jv697qK6u1rsE90FnOhCd6UB0pgNZLJbbttEhCA8cOLBjx47Gf1/3UFlZqXcJ7oPOdCA604HoTEdRFMVsNt+2GVOjAACPRhACADwaQQgA8GgEIQDAoxGEAACPVo8grKqq2r9/f3Z29s0aWK3WEydO/Pzzz+Xl5Y6oDQCABme0s92pU6fS0tKio6Nzc3MHDx68aNEiSZJqNtDO+/n5NW3aNDMzc8WKFSkpKQ1QMAAAjmTviHDu3LmjR4/evXv30aNHv//++61bt9Zq8M4778TFxR08eHDr1q3PPvvs3LlzHV0qAACOZ1cQVlVVrVu3bvLkyUKI4ODgESNGrFq1qlYbVVUjIiK048jISFVVb3HBQj/THVULAICD2TU1WlBQUF1d3bp1a+1l69atN2/eXKvNnDlzHn/88WeeeaZJkyZbt25dsGDBza5WUVGxT25nu4IkSQMGDPDx8bmj+gEAuCt2BWF5ebkkSd7e3tpLX1/fsrKyWm0uXbp0+fLlrl27Go3G69ev5+Tk9O3bt86r5efn51tjX331Ve2lJEl/+9vf2rZte6f/EzxLWVlZrW9nccfoTAdy9c5cuXJlenq63lX8ymq1GgwGvatwOrNnz05MTKzXryiKYs/H0q4gbNasmaqqRUVF2uTnlStXmjdvXquNNiJ88cUXhRADBw4cNWrUqFGjZLmOqde2bdtGWuK3fLDFnrdGLaqqBgYG6l2Fm6AzHcjVO3PPnj0RERGDBg3SuxDU7aOPPsrKyqrvGkxFUSoqKm7bzK4gDAkJadeu3a5du4YPHy6E+OGHH9LS0mq1KSkpCQsL047Dw8PLysqsVmudQSiEqDQG2PO+ANBoEhMTR48erXcVqFtGRkbDXdze2yeef/753/3ud0aj8ejRo/v37//888+FEKdPn05OTs7Ozg4KCho5cuQrr7wSEhLStGnTl19+ediwYV5eXje7WgVBCABwDvYG4YwZM3x9fRcvXhweHr5jx47w8HAhRNOmTR9//HEt8ObMmWMymdatW2c2mx999NEZM2bc4mpmg59VFQYX/kIBAOAm7A1CSZImT56s3UFhExkZ+be//U07lmV5woQJEyZMsOtyqlpkFhG+9akUAIAGoM9eo77W8sLKW91oCABA49AnCP2sZYU8gRkA4AR0CkILI0IAgFPQaWrUcp0RIQA4yq5duwYOHKgdx8bGXrx4sVaDpUuXPvXUU7e4ws6dO207pezZs+eee+65m3qWLl06bdq0u7lCY9JtavQyQQgADlJVVXX16lXt+KWXXrpxcwOz2XzjjmA1jR079uzZs9pxbGzs9OnT76aeioqKkpKSu7lCY7J31ahj+VrLr5iZGgWAm7p48eKmTZsef/xx7eWVK1c2bNjwxBNPaAdZWVmhoaFjx46Njo6u9Ys+Pj62fcU2bdq0Y8eOzp072x6EYLVat2zZsmfPHkVRUlJS7rvvPiHE999/X15evmrVql27dt1///1BQUG2/Z8VRVm9evXx48dbt249btw47Xx6enrHjh1/+umnEydOpKSk3LjFSk0VFRVffvllTk5O9+7dhw8frtWWnZ29YsWK69evt2rVasyYMcHBwZcvX/7iiy8KCgpMJtPw4cNjY2Md1ZO3pdd3hCyWAYBbCQkJee65544ePaq9XLp0qbYb6saNGzMzM9u2bXvlypXExMQbZ0FnzpxZXFwshPjoo4+mT58eHR39448/vvXWW9pPS0pKlixZEhYWFhERMW3atE8++eTGtz59+vSf//xn7Xj8+PEffPCByWT6+uuvBw4caLVahRDvvvvuyJEjDx8+HBYWNn78+Fts01pVVZWcnJyRkWEymV577TVtvvTChQsDBgyQJCkuLu6XX37Jzs5WFCU5OTkvL69z586lpaUHDhy4u86rH51GhJYyFssAcGbf5qjvHbc22tv5yGJ1qtG3xlbb3t7eY8eO/fzzz19//XUhxGefffbKK68IIcaPHz9+/HitzeXLl1euXDlr1qw6rzlv3ry1a9cmJSUJIfLy8rSTISEhy5cv1467dev27LPPTp06dfDgwf7+/qNHj+7cubMQoqCgQGvw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TWrSpIl2PjMz84svvlAUZfz48Z07d9a3SGd25syZAwcOFBUVjRkzpuYC0UOHDn311Ve+vr6TJk1q06aNdrK6unrJkiUnT55MSEiYMGGC9keVEaHzOnTo0JQpUyoqKqKiol577bVRo0Zp50tKSvr27Xvu3LmYmJgRI0asX79e3zpdy+uvv/7f//3fX375pfayqqpqwIABR44cad269VNPPbV06VJ9y3MVGzZsSE5OLisra9myZUZGhnYyJyend+/eVVVVoaGhKSkpP/30k75FuoSysrI+ffocOnQoISFh+/btSUlJVVVVQoiTJ0/269fPYDD4+fklJSUdP35c70qdVGFhYc+ePT/66KNp06YVFBTYzu/duzclJSU0NNRsNvfu3Ts3N1c7P3HixC+++KJ9+/Yffvjh7Nmzf22twlmZzWar1aod5+TkCCHOnz+vqur777+fkpKinV+0aFG/fv30qtDlZGZm9urVa/r06dOnT9fOLF++vEuXLoqiqKq6bt269u3ba8e4hcrKysjIyPXr19c6/+KLL44fP147njdv3ujRoxu9NNezc+fO0NBQ7V96VVWVr6/v4cOHVVWdMWPGM888o7V5/vnnn3rqKT2rdGK2f7BCiMzMTNv5UaNGzZs3TzseP378Sy+9pKrq6dOnfX19i4qKVFXNzc319fUtKChQVZURofPy9vaW5V//DzKbzbIsBwQECCF27NiRlpamnU9LS9u7d6/ZbNatStehKMrUqVPfe+89b29v28kdO3akpqZKkiSESEtLO336dH5+vn41uoYDBw6oqhofH//BBx8sW7asrKxMO799+/bBgwdrx2lpadu3b9evRpfRpk2b6urqrKwsIcTx48e9vb1jYmKEENu3b6/5z5zOvBntH++N6vw07ty5MzExUdtrpkWLFm3atPnxxx8FU6MuQVGU2bNnT5s2TZv+vnDhQkREhPajyMhIVVUvXLiga4Gu4e23305MTExKSqp5smZn+vv7BwYG0pm3debMGSHEY489VlJSsnbt2l69emlZWOuTWVhYWF1drWehrsBkMn322Wf9+vXr1KnToEGD1qxZo/2ZrtWZfCzrpaqq6sqVKzd2YEFBge2kEKJZs2baf/iyWMbZqao6a9as4uLiN998UztjNBotFot2rB3UHOKgTqdOnVq8ePG+fftqna/ZmUIIi8VCZ96WLMuXL1/evn17XFycqqrdu3dfvnz5lClTan0yZVm2Le/CzeTk5EyfPv3tt99OTk7evHnzk08+efDgwYiIiFqdyceyXgwGgyzLN3ag0Wi0Wq22ZtXV1b+e16VK2O+FF144ePBgRkaGNi8qhIiOjrZN350/f95oNEZGRupXoGtYu3ZtcXHx/fffL4TIzc1VVbWoqGjFihU1O7OwsLCystJkMulaqQuIjo6WZbljx45CCEmS4uPjz507J/7zk5mXlxcVFWWb28fNfP3113FxcU8++aQQokOHDp9++umGDRsmT55cqzP5WNaLwWBo1qxZXl5eXFycqNGB0dHReXl5tma283xMndof//jHbdu2paen21ZUCyGGDh26bt06bdJp9erVQ4YMYQfz25o0aVJ6evrChQsXLlw4cODAe++9d968eUKIoUOH/vOf/ywvLxdCrF69un///uHh4XoX6+z69esXGRmpDa+rq6v3798fHx8vhBg6dOiqVau0ZQurVq0aOnSozoW6grCwsNzcXO2fc2VlZV5envYJHDZs2KpVq7Q2dOYdsHWgqqqrV6/WOjAtLS0zM/P06dNCCO2Oi5SUFMGm285s165dAwYMaN++vS0FlyxZkpCQUF1dnZqaajab27Vrl5GRkZGR0bNnT31LdS3PPvtsVVXVP/7xDyGEqqqPPvpobm5uQkJCenr6qlWrtFEjbu2zzz77/e9/P2zYsAMHDoSHh6enpxsMhmvXriUnJzdv3jw4OHjPnj0//PBDq1at9K7U2VVUVNx3330Wi6Vfv347d+4MDw/PyMjw8vK6dOlSUlJShw4djEbjsWPHdu/e3bx5c72LdVKDBw8uKio6cOBA586dfX19t2zZ0qRJkzNnziQnJyclJRUXF1+6dGnnzp1NmzYVQsyfP/+TTz5JS0v77rvvXnrppVmzZgmC0JmVlpaeOnWq5pmOHTsGBgYKISwWy9atW69evXrfffcxL1pf2tRobGys9lJRlO3bt1+8ePGee+6Jjo7WtzYXkp2dvW/fvpiYmKSkJNvKvcrKys2bN5vN5tTUVO3vDm5L2zojLy+vZcuW/fr1s3VmWVnZ5s2bVVVNTU3V/uGjTkeOHKm5LKt79+7al9PXrl3bvHmzr6/voEGDfH19bQ0OHjx48uTJrl27dunSRTtDEAIAPBrfEQIAPBpBCADwaAQhAMCjEYQAAI9GEAIAPBpBCADwaAQhAMCjEYQAAI9GEAIAPBpBCADwaAQhAMCj/X857uJ+AoFqzQAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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b70LqTMnnEzXxWQ6EJPpKFartby8/LrD7LpGGB0dHRAQ8NNPP2kf//Wvf3Xr1u3SARaLZcyYMRs3bly9evV3332nBWFJSUk96gYAoCnZ1RF6e3vPnDnz6aeffv/993fv3r13795PP/1URA4cOPDAAw/s3r27devW2h4R2b59+6RJk2o+AgDgzOx9fOLFF1/s2bPnhAkTVqxYsXHjxuDgYBHx8vIKCwurNTI0NHT8+PEOLhMAgMZhbxD6+Pi88cYbBw8e3LJly8CBA7Wd8fHxn3/+ea2RXbp0+fDDDx1ZIy7x2muv2Ww8q+AAFovlzTff1LsKN1FSUvL+++/rXYWbyM3NXbRokd5VuImMjIxVq1ZddxhrjbqYv//972azWe8q3EFxcfFbb72ldxVu4uzZsx988IHeVbiJEydOLF++XO8q3ER6evrl3drlCEIAgEcjCAEAHo0gBAB4NLsen3CsU6dObdiwoV27dk3/1W7AYrHEx8frXYU70Jb64++hQ5jN5pycHCbTISorK/Py8phMhygrK2vRosV1hylNfwui1Wo9fvy4l5dXE3+ve6isrPT2dr01XJwTk+lATKYDMZmOYrPZQkJCgoKCrj1MhyAEAMB5cI0QAODRCEIAgEcjCAEAHo0gBAB4NB0en4CdbDZbWlratm3b8vPzu3fvPmXKlGbNmmm/lJeX9+GHH547d+7mm29OTEzUt07XYrValyxZEhMTM3LkSG1PUVHRP//5z+zs7BEjRiQlJelbngs5duzYypUrL1682KNHjxkzZmgvKz158uTixYvLysomT57ct29fvWt0DRcvXlyyZMnp06djYmJmzJgRGBio7T969Ognn3xisVimTp1a6813uFRGRsbevXvz8/MnT5586Q2i+/btW7lypclkmjFjRtu2bbWd1dXVCxcuPHr0aI8ePe6++26DwSB0hM4sIyNjypQpBQUF0dHR77333k033WS1WkWksrJy0KBBhw4diouLmzFjxieffKJ3pa7k3XfffeSRRxYuXKh9tFgsw4cP37NnT7t27R5++OF3331X3/JcxZYtW/r3719YWBgbG7tt2zZt/duzZ8/269evuLg4NDR09OjRqampepfpAsrLywcMGPDjjz/26NFj165dAwcOrKysFJHjx48PGDBAURR/f/+EhIT09HS9K3VSFy5c6N279/z58x944IGcnJya/WlpacOGDQsODq6srOzXr9/p06e1/dOnT1+2bFmHDh3ee++9hx566PfRNjirqqoqs9msbV+8eNFoNB48eNBmsy1duvSGG26wWq02m23NmjXx8fHaNq4rIyOje/fujzzyyNSpU7U9X375Zdu2bbV53rp1a2RkZHV1ta41uoDq6uqoqKhVq1bV2j937twJEyZo2y+//PK4ceOavDTX8/333zdv3txisdhsturqal9f371799pstjlz5syaNUsb8+STT86YMUPHIp1ZzU8/ETly5EjN/gkTJsydO1fbnjp16rPPPmuz2Y4fP24ymfLz82022+nTp00mU05Ojs1moyN0Xl5eXlrbLiLV1dVWq9Xf319EduzYMXr0aEVRRGTMmDG//PLLuXPn9CzURdhstuTk5DfffNPPz69m5/bt20eOHKnN8/Dhw8+fP3/ixAn9anQN6enpRUVFffv2fe+99xYtWlRcXKzt37Fjx5gxY7TtxMTE7du361ejy4iNjbXZbMeOHRORI0eOGI3GmJgYEdm+fTuTaQ/tJ+HlrjiBqampffr00daaiYqKatu27ffffy+cGnUVDz/88OTJk7V/IWfPng0NDdX2BwQE+Pj4nD17VtfqXMOCBQuio6NHjx596c6cnJyayTQajcHBwUzmdWVkZHh5eU2ePLmgoCAlJaVXr15FRUXyx7+ZYWFhxcXFJSUlulbqAlq1arV8+fKEhIT4+Pjhw4d/+umnISEhctlknj171sbiJ3arqqrKy8urNYHyx3/vIhIeHp6dnS3cLOMSnn/++cOHD3/77bfaR6PReOkrCS0WS81NNLiarKysefPm7d69u9Z+o9FosVhqPlZXVzOZ16Wqal5e3pYtW3r37i0iAwYMWLJkyZw5cy79m2k2mxVFMRr5CXMdWVlZycnJr7zyytChQ7/99tuZM2fu3bu3VatWXl5el06ml5fX1VofXM5gMKiqeukEav+ur/bvnb+mzu6FF17YsGHDtm3bapaOjYyM1P4vRkTOnTtXVVUVERGhX4GuYf369fn5+dqpkuzs7MrKyqSkpA0bNkRGRmZkZGhjSktLCwoKmMzrioyMFJEuXbpoH7t06XLq1Cn549/MrKyskJAQk8mkV5GuYt26de3bt7///vtFpGPHjkuWLPniiy+Sk5MjIyOzsrK0MVlZWdqcw04GgyE8PDwrK6tz584ikpWVpf27vnRWL93PqVGn9sYbbyxfvnzLli0tW7as2ZmUlJSSklJWViYia9asGTx4sD3Lq3u4SZMmbdq0acGCBQsWLLj55psHDBjw0ksviUhSUtKWLVsKCwtFZN26dZ07d46Li9O7WGfXu3fvNm3a7NmzR0QsFsuPP/6ohWJSUtKaNWu0e5tXr17Nsyj2CAkJOXPmTFVVlYhUVlaeOXNG+8euTaY2hsmsh/Hjx69evVpEbDbbmjVrtAlMTEw8cuTI8ePHRUR74mLYsGHCotvO7PDhw127dm3btm1Nzs2bN2/w4MFWq3X8+PHZ2dndunXbuHHjZ599NnToUH1LdS3/+Z//efLkyaVLl2of77rrrv379/fr1y8lJWXx4sW33HKLvuW5hE8//fShhx4aP378/v37/fz8Nm/e7OXlVVJSMmTIkKCgoLCwsB07duzYsaNDhw56V+rsKioqRo0aVVZWNmjQoJ07dwYFBW3durVZs2YXLlxISEiIi4szmUw///zz7t27OVdxNWPGjMnPz9+7d2/Xrl1NJtO2bduaN2+ekZGRkJAwaNCggoKC3Nzc1NRU7QHN//mf//nggw8SExM3bdr07LPPzpkzRwhCZ1ZWVnbkyJFL97Rv3177b2m1Wr/77rvz588PGTKEfx51pZ0aren8bDZbampqVlZWQkJCmzZt9K3NhZw8eXLPnj2RkZEJCQna0/QiUllZ+c0335SVlY0ePfq6776Bxmq17t69+8yZM23atBk4cGDNtcCysrKvv/7aYrGMHj06ICBA3yKdWXp6enV1dc3Hnj17aveBFxYWfv311yaTadSoUZeepf/pp5+OHj3avXv3mmUKCEIAgEfjGiEAwKMRhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj0YQAgA8GkEIAPBoBCEAwKMRhAAAj0YQAgA82v8Ds3Af3MX4JKEAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd2BVVbr38Wefkt5ICGmQQu9iaEJCD6BiAOESpSjKaFAv2OYyd7yOYpmxjDrKONhFLERBlKE5UkQBaUqR3gVCGgkJIb2ds98/tm+GCe0kOck+5fv565ydxT5PFpBf1tprr62oqioAALgrg94FAACgJ4IQAODWCEIAgFsjCAEAbo0gBAC4NYIQAODWCEIAgFsjCAEAbo0gBAC4NYIQAODWdAjCffv2LVy4sPk/1zVUV1frXYLroDPtiM60IzrTjmpqaq7bRocgPHDgwLp165r/c11DRUWF3iW4DjrTjuhMO6Iz7cVqtVZWVl63GVOjAAC3RhACANwaQQgAcGsEIQDArRGEAAC3ZrK96fHjx1etWuXj45OSktKiRYvLG2RlZa1cubKsrKxv376JiYn2KxIAgKZi64jwp59+6tOnT0ZGxg8//NCnT5+LFy/WaXDgwIEuXbrs27evuLh46tSpzz77rL1LBQDA/mwNwhdffPH3v//9a6+99vnnn8fFxX300Ud1GixevHjUqFHz589/+umn58+f/+GHH9q7VAAA7M/WIFy7dm1ycrL2+rbbbrv8jvjo6OisrCyr1SoiZ8+ejYmJucbZLvi1qX+pAADYn03XCC9evFhWVhYeHq69jYiIyMrKqtNmxowZ+/bt69SpU6tWrYqKilatWnW1s+Xn5+9Q2s+ZM+e3Ckyme+65JzY2tiHlu5/KykoPDw+9q3ARdKYd0Zl2RGfai9VqVVX1us1sCkJFUUSk9nSqqmpHLvXdd9+tWLHipZdeioiIeOWVV5599tkFCxZc7WzWgPCgwHO1R4xGoy1lAEATWbJkyfLly/Wu4jcWi4Wfipd77LHH+vTp0xRntikIAwICfH19c3JyIiMjRSQ7OzsiIqJOmzfeeOPBBx+cPHmyiHTq1CkyMvKll15q1arV5WcLDg72rIh58n9ua3Tx7qiqqsrT01PvKlwEnWlHzt6ZW7duDQ4OHjlypN6F4MreeeedI0eOJCQk1OtPWa3W8vLy6zaz9faJ0aNHr1ixIj4+XkRWrVo1btw4EbFYLEePHu3QoYPZbPb19T1//rzW+Pz58waDwcfH52pnqzAHWFQx1h1VAoBu4uPjJ02apHcVuLI1a9Y03cltDcInnnhi5MiRhYWFGRkZZ8+enT59uogUFBR069bt+PHj7du3f+SRR8aMGVNSUhIWFvbJJ5/MmjXLz8/vamezKobzFRLmbZ/vAQCABrN11WifPn12797dvn37MWPG7Ny5MzAwUEQCAwOXL1+uzZcmJiYePHiwf//+ISEhn3322bx5865xNpO1Krvs+hcwAQBoavXYWSYuLm7WrFmXHvHw8Bg7dmzt29atW9977722nMq7qjC7THqF2P7hAAA0CX32GvWuvJjFiBAA4AD0CUKvygvZZbp8MgAA/0GnEWHVxexyRoQAAP3pFYSFjAgBwF62bNkybNgw7XVMTExOTk6dBgsXLpwxY8Y1zrB58+aSkhLt9Y4dOxr5BKGFCxfOnDmzMWdoTvqNCLlGCAB2Ul1dfeHCBe31H//4R39//zoNKisrS0tLr3GGO++88/Tp09rr6OjoBx98sDH1lJeXFxUVNeYMzakeq0btyLuy8CgjQgC4utzc3DVr1tx1113a2/z8/JUrV95zzz3aixMnTgQHB99xxx1RUVF1/qCXl1ftLpjr16/fuHFjt27davfItFgsGzZs2LFjh8ViGTx4sDaOXLduXVlZ2dKlS7du3Tps2LCAgIDafYKsVuvSpUsPHjwYFxc3efJk7fjq1as7der0888/Hzx4cPDgwaNGjbrGN1JeXp6Wlpaent6rV6/x48drtZ08eXLx4sUlJSWxsbEpKSlBQUF5eXmLFi3StjAbP358dHS03bryenQbEeaU27ATKgC4q6CgoMcff3z//v3a24ULF2oPM1izZs3hw4fbtWuXn5/fu3fvy2dBZ82apY0O33333dTU1KioqO3bt7/66qvaV4uLixcsWBAcHBwaGvrggw++9957l3/08ePH586dq72eNm3am2++GRkZuWzZsmHDhlksFhGZN2/e7bff/ssvv4SEhNx1113XeMpCVVVVQkLCmjVrtH03U1NTRSQnJycxMVFRlC5dupw6derkyZNWqzUhISEjI6Nbt27FxcW7du1qZO/Viz4jQoO12tckFyol2In3JgTgylafVd84YGm2j/M0yJcjTN6X/Ej28PC44447Pv3007/+9a8i8sknn/z5z38WkSlTpkyZMkVrk5eXt2TJkocffviK55w7d+5XX32l7c+ZmZmpHQwKCvr888+117169Zo9e3Zq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RUVpv8WIyLlz56qqqiIjI/Ur0DksX768oKBAmyrJysqqrKxMTk5euXJlVFTUqVOntDalpaWFhYV05nVFRUWJSNeuXbW3Xbt2PXPmjPznv8zMzMyQkBAvLy+9inQWy5Yta9++/X333SciHTt2/Pjjj1esWJGamhoVFZWZmam1yczM1PocNjIajWFhYZmZmV26dBGRzMxM7f/1pb166XGmRh3aa6+9lpaWtnbt2pYtW9YeTE5OXr16dVlZmYgsXbo0MTHRlu3V3dykSZP+9a9/vfvuu+++++4tt9zSv3//F154QUSSk5PXrl178eJFEVm2bFmXLl3i4uL0LtbRxcfHR0dHb9++XUQsFsvPP/+shWJycvLSpUu1tc1ffvkl96LYIiQkJCMjo6qqSkQqKyszMjK0/+xaZ2pt6MwGGDt27JdffikiqqouXbpU68CRI0cePnz4+PHjIqLdcTFkyBBh021HdujQoW7durVt27Y25954443ExESr1Tp27NisrKzu3bt/8803X3/99eDBg/Ut1bn86U9/On369Geffaa9nTJlyt69e/v27bt69eqFCxeOGTNG3/KcwpIlSx5++OGxY8fu3bvX19d3zZo1ZrO5pKRk0KBBQUFBrVq12rRp06ZNmzp06KB3pY6uoqJixIgRZWVlAwcO/PHHH4OCgtatW+fh4XH+/PmEhIS4uDgvL69ffvll69atzFVczahRowoKCnbt2tWtWzcvL68NGzYEBAScOnUqISFh4MCBhYWFubm5mzdv1m7QfP75599///2RI0f+61//euKJJ2bPni0EoSMrKys7fPjwpUfat2+v/V1ardYffvghLy9v0KBB/PeoL21qtHbkp6rq5s2bMzMzExISoqOj9a3NiZw+fXr79u1RUVEJCQna3fQiUllZ+d1335WVlSUlJV332TfQWK3WrVu3ZmRkREdHDxgwoPZaYFlZ2fr16y0WS1JSkr+/v75FOrJ9+/ZVV1fXvu3Vq5e2DvzixYvr16/38vIaMWLEpbP0u3fvPnr0aI8ePWq3KSAIAQBujWuEAAC3RhACANwaQQgAcGsEIQDArRGEAAC3RhACANwaQQgAcGsEIQDArRGEAAC3RhACANwaQQgAcGv/D7B44aZTNObMAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd2BVVbr38Wefkt5ICGmQQq8RA4gQOgFsAdRLlKIoo0G9YpvL3PF1FMuMZdRRxsEuYiEKogzNkSIKSFMB6V0gpIeEkN7O2e8f25vJhJKT5CT7lO/nr3N2Fvs8WYT8WGuvvbaiqqoAAOCuDHoXAACAnghCAIBbIwgBAG6NIAQAuDWCEADg1ghCAIBbIwgBAG6NIAQAuDWCEADg1ghCAIBb0yEI9+3bt2jRorb/XNdQU1Ojdwmug860IzrTjuhMO6qtrW20jQ5BeODAgfXr17f957qGyspKvUtwHXSmHdGZdkRn2ovVaq2qqmq0GVOjAAC3RhACANwaQQgAcGsEIQDArRGEAAC3ZrK96fHjx1evXu3j45OSktKuXbuLG2RlZa1ataq8vHzQoEHDhg2zX5EAALQWW0eEP/7448CBAzMyMr7//vuBAwdeuHChQYMDBw706tVr3759JSUl06dPf+aZZ+xdKgAA9mdrEL7wwgu///3vX3311c8++ywuLu7DDz9s0GDJkiXjx49fsGDBU089tWDBgg8++MDepQIAYH+2BuG6deuSk5O11zfddNPFd8RHR0dnZWVZrVYROXv2bExMzBXOdt6vU9NLBQDA/my6RnjhwoXy8vLw8HDtbURERFZWVoM2s2bN2rdvX48ePTp06FBcXLx69erLna2goGCn0nXu3Lm/VWAy3XXXXbGxsc0p3/1UVVV5eHjoXYWLoDPtiM60IzrTXqxWq6qqjTazKQgVRRGRutOpqqodqe/bb79duXLliy++GBER8fLLLz/zzDMLFy683NmsAeFBgbl1R4xGoy1lAEArWbp06YoVK/Su4jcWi4Xfihd79NFHBw4c2BpntikIAwICfH19c3JyIiMjRSQ7OzsiIqJBm9dff/3++++fOnWqiPTo0SMyMvLFF1/s0KHDxWcLDg72rIx54n9uanHx7qi6utrT01PvKlwEnWlHzt6Z27ZtCw4OHjdunN6F4NLefvvtI0eOJCYmNulPWa3WioqKRpvZevvEhAkTVq5cmZCQICKrV6+eNGmSiFgslqNHj3br1s1sNvv6+p47d05rfO7cOYPB4OPjc7mzVZoDLKoYG44qAUA3CQkJU6ZM0bsKXNratWtb7+S2BuHjjz8+bty4oqKijIyMs2fPzpw5U0QKCwv79Olz/Pjxrl27PvzwwzfeeGNpaWlYWNjHH3/84IMP+vn5Xe5sVsVwrlLCvO3zPQAA0Gy2rhodOHDg7t27u3bteuONN/7888+BgYEiEhgYuGLFCm2+dNiwYQcPHhw8eHBISMinn346f/78K5zNZK3OLm/8AiYAAK2tCTvLxMXFPfjgg/WPeHh4TJw4se5tx44d7777bltO5V1dlF0u/UNs/3AAAFqFPnuNelddyGJECABwAPoEoVfV+exyXT4ZAID/oNOIsPpCdgUjQgCA/vQKwiJGhABgL1u3bh09erT2OiYmJicnp0GDRYsWzZo16wpn2LJlS2lpqfZ6586dLXyC0KJFi2bPnt2SM7Ql/UaEXCMEADupqak5f/689vqPf/yjv79/gwZVVVVlZWVXOMPtt99++vRp7XV0dPT999/fknoqKiqKi4tbcoa21IRVo3bkXVV0lBEhAFxeXl7e2rVr77jjDu1tQUHBqlWr7rrrLu3FiRMngoODb7vttqioqAZ/0MvLq24XzA0bNmzatKlPnz51e2RaLJaNGzfu3LnTYrGMGDFCG0euX7++vLx82bJl27ZtGz16dEBAQN0+QVarddmyZQcPHoyLi5s6dap2fM2aNT169Pjpp58OHjw4YsSI8ePHX+EbqaioSEtLS09P79+//+TJk7XaTp48uWTJktLS0tjY2JSUlKCgoPz8/MWLF2tbmE2ePDk6OtpuXdkY3UaEORU27IQKAO4qKCjoscce279/v/Z20aJF2sMM1q5de/jw4S5duhQUFAwYMODiWdAHH3xQGx2+8847qampUVFRO3bseOWVV7SvlpSULFy4MDg4ODQ09P7773/33Xcv/ujjx4/PmzdPez1jxow33ngjMjJy+fLlo0ePtlgsIjJ//vybb775l19+CQkJueOOO67wlIXq6urExMS1a9dq+26mpqaKSE5OzrBhwxRF6dWr16lTp06ePGm1WhMTEzMyMvr06VNSUrJr164W9l6T6DMiNFhrfE1yvkqCnXhvQgCubM1Z9fUDljb7OE+DfDHW5F3vV7KHh8dtt932ySef/PWvfxWRjz/++M9//rOITJs2bdq0aVqb/Pz8pUuXPvTQQ5c857x587788kttf87MzEztYFBQ0Geffaa97t+//5w5c1JTU8eNG+fj4/Nf//Vfffv2FZHc3N8eirB3796vv/46PT09ICDg3nvv7dmz54oVK2655RYRuf7661966SURqaysXL58+U03XXr76CVLllit1iVLliiKcuutt8bExPzhD3/IysoKCQmZO3euyfTbN1xQUJCRkfHkk09qu7W0MX2CUEQifJSscjXYk/1GATiiwaHK/8a33SMgPI3ifdHv45kzZyYnJz///PP79+/Pycm57rrrRGT//v0PPfRQZmaml5fXuXPnLpcc+fn5+fn511xzjfZ2yJAhO3fuFJGamppHHnlk/fr1BoPBbDbn5eVdoaqDBw/Gx8cHBASIiMFgGDp06IEDB7Qg7N+/v9YmKipq+/btVzhDYmKiNh3avn37Hj16HDx48LrrrgsNDY2IiLjpppumTJlyww03hISETJs2rWPHjtddd11ycvL06dPb8vkbOgahZJdL33Z6fT4AXEl7L0mK0vl/6oMGDerQocP69evXrl07Y8YMs9ksIvfdd9+sWbN+97vficicOXO0x6FfzNvbW1XV6upq7U/VPYThww8/PHbs2IEDBzw8PHbt2jVhwoQrFODj41P/6Q3l5eV1T1OwMah8fHzqZ21FRYWPj4+Xl9d333137NixFStWpKamPvvss7NmzXr//fefffbZ1atXv/LKK3v27HnttddsOb9d6HONUEQivBUWjgLAlc2YMeODDz74/PPP77zzTu1IXl5e165dRaSoqOgKz1D08/NLSEjQZkGrq6u//PLLuj/eqVMn7cG/ixYtqmsfFBRUWFjY4CTXXHPNkSNHDhw4ICI5OTnr1q0bOXJkk+ofOXLkmjVrtDPv3LkzKytrwIABRUVFtbW13bt3nzt37pQpUw4dOlRRUVFWVhYZGZmamvrII48cOnSoSZ/SQjqPCAEAV3DHHXc88cQT8fHxV111lXZkzpw5KSkpQ4cO/fXXX/v163eFP7tgwYLJkyd/9dVXWVlZsbGx2sGpU6cOGzZswoQJxcXF3bt3r2t8//3333rrrdHR0c8++2zddGtkZOT8+fOTkpK05y48+uijgwYNalL9I0eOvOuuu7T6f/7557fffjskJGTVqlX33XdfQkKCxWI5duzYmjVrMjIyhg4dOmDAAC8vr927d7///vtN+pQWUmx5jL19paWlrVmzZtDjn5wuVV+/lqcwN01JScnFdwiheehMO3L2zrz//vuvuuqq++67T+9CLuHChQtms7n+E17T09MzMzPj4+MNBoOIeHt719TUlJaWtmvXTkTy8/NDQkK0L5WVlWl3PgQEBNTW1vr6+opIaWnpgQMHIiMjO3bsWFxcHBQUpJ3WYrEUFxf7+voqilJSUhIcHFxXwLFjx+Li4tq3b68dKS0t9fDw0IaV1dXV1dXVDZ67V1FRUVNTo11cFJG8vLz09PTu3bvXHSkqKjp69KiXl1fv3r21ydvy8vKjR4/W1tb27t1bq7O+e+65Z8iQIdqEsO20B/NefLYGdBsRRvrI9itdowUAiIhcvBwmOjq6wW12ZrNZS0ERCQ0NrTvu6+tbt16m7tZAPz+/a6+9Vntdl4IiYjQa605Sl4JaAQ0GgvVjry4R6/P29vb2/vcjZzt06NChQ4f6DYKCggYPHlz/iI+Pz9VXXy160O8aoQ/XCAEA+tMxCLlGCADQn54jQh5JCADQnW5B6GsSoyLFNXp9PgAAIjoGoXCZEADgAPQNQi4TAgB0ptvtEyIS+duIkO1GAejMaDS+8MILbXwf9+Woqlr3HCVozpw5M3z48FY6uZ5ByIgQgIN4+umn7777br2r+E39LT1Rp3fv3q10Zn2DkGuEABxC+/bt67ZN0Z2zb9PjdHS9Rugt2RWNNwMAoPXovGo0q4wRIQBAT3qvGmVECADQFfcRAgDcmp5BGOQhNVYpr9WxBACAu9MzCEUk3FvJqWBQCADQjc5ByK2EAAB96R6EXCYEAOhJ9yCULEaEAAD96B6EjAgBAHrSOwi9uUYIANCT3kHIiBAAoCvdg5DNZQAAetI5CCMZEQIAdKVzEIZ4SUmNVFv1rQIA4L50DkJFpIOXksvmMgAAnegchKLdSlimdxEAAHflCEGoZDMiBADoxBGCkFsJAQC6cYQgZOEoAEA3DhCEbC4DANCP/kEY6cuIEACgG/2DMMKbzWUAALpxgCDkGiEAQD/6B2EHbymoFAtRCADQg/5BaFQk2FPymB0FAOhB/yAUkUhfJZPZUQCAHhwiCGP8lNMlBCEAQAcOEYSd/eVUid5FAADckkMEYZy/cooRIQBADwQhAMCtOUgQyq9MjQIA9OAgQaikl6pWxoQAgDbnEEHoZZR2npLFHRQAgDbnEEEoIp39FRaOAgDanqMEIetlAAC6cJwglF8JQgBAm3OcIGRqFACgA4cKQkaEAIC25ihByC5rAABdOEoQRvkq+ZVqpUXvOgAAbsZRgtCoSCdfJb2U2VEAQJtylCAUkThmRwEAbc6hglDhDgoAQBtzrCBk4SgAoI2ZmtT68OHDlZWV8fHxRqOxwZeqqqrKy8vrHwkICLi42RV09pdd55pUDgAALWVrEFZVVU2aNOnkyZP+/v4Wi2XDhg2hoaH1G3z55ZdPPvmk9rqioiI3NzcrKyssLMz2UuL8lVMlVtvbAwDQcrZOjaalpeXl5R04cGD37t3du3d/5ZVXGjSYNm3ayf9z3333jR07tkkpKFwjBADowdYgXLp06YwZMzw9PUVk1qxZS5cuvVxLVVU//vjj3/3ud00tpb2XWKxSVN3UPwcAQPPZOjWanp4eFxenvY6Li8vIyLBYLJe8BLhx48bz589PmjTpcqeqrq7OycnZsGFD3ZFrr73Wz89PRGL9lVMl6tUhShO+AwAAWsDWICwvL9eGgyLi5eVVW1tbXV3t7e19ccuFCxdOnz7dy8vrcqfKzs4+ePDg888/X3fk6aefTkhIEJFob/Ph/OpunlwpvKyysjJF4T8K9kFn2hGdaUd0pr1YrVZbetLWIAwPDy8sLNReFxQUBAUFXTIFL1y48M9//nPr1q1XOFVMTMzYsWMXL1588Ze6tbNk15j9/Bzopg5Ho6qqNnpGy9GZdkRn2hGdaS9Wq7WioqLRZrZGzsCBA3/44Qft9Q8//DBw4MBLNvv000979erVv39/G0/bALcSAgDamK0jwgceeGDw4MFXX311+/bt//KXvyxatEg7PmDAgCeffHLy5Mna24ULFzZjmUydOH/lXxnMiwIA2o6tQdirV69vvvnmrbfeqqysfO+992644Qbt+M033xwbG6u9LikpGTdu3NSpU5tdDduNAgDaWBN2lhk6dOjQoUMbHPzTn/5U99rf3//FF19sSTWd/ZUzpapVFQPXiQEAbcKxlqV4myTALDkVXCYEALQRxwpCEensrzA7CgBoMw4XhCwcBQC0JQcMQvmVESEAoK04YBAyIgQAtB2HC8LOAQQhAKDtOFwQxvlxKyEAoO04XBB28lPyKtQqi951AADcg8MFoVGRSB/lbBmzowCAtuBwQSgsHAUAtCFHDELWywAA2owjBiF3UAAA2oxDBiELRwEAbcURg7BnkHLoPCNCAEBbcMQg7NNOOV2qltXqXQcAwA04YhCaDdKnnfJLAYNCAECrc8QgFJGB7ZWf8wlCAECrc9AgHNBe2XWOIAQAtDoHDcKB7ZWfCUIAQOtz0CDs3U7JKFOLa/SuAwDg6hw0CI2KxAcrexgUAgBamYMGoYgMDGV2FADQ6hw3CFkvAwBoA44bhKyXAQC0AccNwh6BSm65Wlildx0AAJfmuEFoUOTq9soe9pcBALQmxw1CYX8ZAEDrc+ggZL0MAKC1OXQQsl4GANDaHDoIuwYqRdVqfqXedQAAXJdDB6EikhCi7GZQCABoNQ4dhML+MgCAVuboQch6GQBAq3L0IOQOCgBAq3L0IIzzVyotak6F3nUAAFyUowehiCQwOwoAaDVOEIQDmB0FALQa5whCRoQAgFbiBEE4sL3yU75V7yoAAK7JCYIw2k8RkcwyBoUAAPtzgiAUkQHtlR+5TAgAaAXOEYTDwg1bcghCAID9OUcQjoxQNhGEAIBW4BxBOLC9cuKCWlStdx0AAJfjHEFoNsg1HZStuQwKAQB25hxBKCIjww2bsrmJAgBgZ04ThCMilE3ZjAgBAHbmNEE4OFQ5VKSW1OhdBwDAtThNEHoaZUB7ZRuXCQEAduU0QSgiI8OVzTlcJgQA2JNTBWGEgcuEAAD7cqYgHNJB2VuoltfqXQcAwIU4UxB6m+SqYGVHHoNCAIDdOFMQirbXGncTAgDsx8mCcES4gU1HAQB25GRBmBim7DqnVlr0rgMA4CqcLAj9zNI7SPmJZxMCAOzEyYJQfrtMSBACAOzDGYPQsInb6gEAduJ8QTgsTNmZp1YThQAAe3C+IAz0kG6Byq5zzI4CAOzA+YJQREaEc5kQAGAfThmEo7itHgBgJ04ahIbteTybEABgB04ZhIEeMjxcWZXOoBAA0FJOGYQiMiXO8MWvXCYEALSUswbh5FjDd9nWYmZHAQAt46xBGGCWEeGG1cyOAgBaxlmDUESmdFaYHQUAtJCtQVhWVjZjxoygoKCYmJiFCxdess2BAwfGjh3r4+MTGRn5xhtv2K/IS5sUY/ie2VEAQMvYGoTPPvtsXl5eRkbG8uXLH3vssYMHDzZokJubO3bs2MmTJ2dnZ+/Zs2f48OH2LrWhALOMiDCsOsPsKACg+WwKQlVVP/jgg//3//6fn59fQkLCLbfc8uGHHzZo89Zbb1177bVz5swJDAwMCwvr379/K1Tb0JQ45YtTzI4CAJrPpiAsKCgoKCiIj4/X3vbr1+/YsWMN2uzdu7dLly6TJ0/u3r37tGnTsrOz7VzppUyKMWzKtl6oboOPAgC4JpMtjQoLC0XE399fexsYGHju3LkGbbKysjZu3LhixYq+ffvOnTv39ttv37Rp0yXPduzYsbS0tLS0NO2t2WxeuXLlsGHDmlG9IjI01PzFsfLbY91lgrSsrExRFL2rcBF0ph3RmXZEZ9qL1Wq1pSdtCsL27duLSHFxcUhIiIgUFRWFhoY2aBMSEjJp0qRRo0aJyJ///OeOHTueP3++Xbt2F59NGzIuXrzYlo9u1NRu1i9Ome7pa7TL2Ryfqqp+fn56V+Ei6Ew7ojPtiM60F6vVWlFR0Wgzm6ZG27VrFxoaun//fu3t/v37u3fv3qBNz549jcbf0kh7oaptcfVuUoxhM7OjAIDmsikIFUWZNWvWX/7ylwsXLvz444/Lly+/++67RSQnJyclJaWkpERE7rnnnpUrV+7du7e6uvqFF15ITEwMDg5u3dpFRMTfLCMjDOw7CgBoHltvn3jqqac6duzYtWvXqVOn/v3vf+/du7eI1NTUHD9+3GKxiEjv3r3feOONKVOmREdHp6enf/bZZ61Y9X9i7SgAoNlsukYoIj4+PhffMtGpU6c9e/bUvZ02bdq0adPsVprNJsYYHtxWc6HaGOjR9h8OAHBuTrzFWh1/s4yKMHx1mtlRAECTuUIQisg9PQ3/OEQQAgCazEWC8IZOSkmN/JjPlUIAQNO4SBAqIqk9DQsYFAIAmshFglBEftfdsCrdmtf4rZMAAPyb6wRhO0+5OcbwwTEGhQCAJnCdIBSROX0Mbx+2WrhQCACwmUsFYf8QpaOvsMsMAMB2LhWEIvLfvVkyAwBoAlcLwv+KMxw8rx4pYnoUAGATVwtCD4P8rofhzcMMCgEANnG1IBSR+3sZFp+wFtfoXQcAwBm4YBBG+iijIw2LTzAoBAA0zgWDUET+u7fhHwetVi4UAgAa45pBODpCCfCQJb8yKAQANMI1g1BEXrrG+MTP1mqiEABwRS4bhCPClW4B8iE7rgEArshlg1BEnh9kfG6PtbxW7zoAAA7MlYNwQHtlaAeFB/YCAK7AlYNQRP480PDKPsv5Kr3rAAA4KhcPwu6BysQYw6v7LXoXAgBwUC4ehCLyTILhnSPWHB7YCwC4FNcPwihf5c5uhr/sYVAIALgE1w9CEXn8KuPnv1p/LWGnGQBAQ24RhO295OE+xj/8yPJRAEBDbhGEIjI33nDwvMrD6wEADbhLEHoa5e1E45xt1jLurwcA1OMuQSgiIyOUYeHKc6yaAQDU40ZBKCKvDjYuPGrdW8iqGQDAb9wrCMO85bmBxtk/WHhUIQBA415BKCL39jAYFVnIUykAACLihkFoUOSdYcY//WzJY68ZAIAbBqGI9G2n3NnN8D87WTUDAHDLIBSReQnG7Xnq5yeZIAUAd+emQehrkq+SjA/vsBw4z7IZAHBrbhqEItIvWHntWuMtGywXqvUuBQCgH/cNQhGZ1sUwPkq5c5OFUSEAuC23DkIRee1aY2GV+tJeLhYCgJty9yA0G+SLsaYFh6xrMxgWAoA7cvcgFJFwb/lklPHOTbWneWAhALgfglBEZFSE8od44+T1liIWzgCAmyEIf/P7foakKOX6b2p5ThMAuBWC8N9eHmzs0065eX1tFXvOAIDbIAj/TRF5Z5gxwEO5ezOPpwAAd0EQ/gejImmjjecq1TnbGRUCgFsgCBvyMMiyJNPOPPXp3WQhALg+gvASAszy9QTT5yfV53/hRnsAcHEE4aV18JZNN5k+/9X6x58YFwKAKyMILyvMWzbdaNqYpf7PTjYjBQCXRRBeSTtPWXe9aWuu+sBW1pECgGsiCBsR5CHrrzcdLVJn/0AWAoALIggb52eWVRNMJ4vVqd9ZSmv0rgYAYFcEoU18TfL1daZADxm0opaH2gOAKyEIbeVllHeHGZ/obxi9pvbdI9xWAQAugiBsmhldDT8km/5xyHrn9xa25wYAF0AQNlmPQGX7RJOiyJCVtYeKmCYFAOdGEDaHr0k+Gml8tK9h1OraNw+xmBQAnBhB2Hx3dzf8OMmUdtJ63b9qs8v1rgYA0CwEYYvE+ivf32gaEqYM+GfN6nRGhgDgfAjCljIZ5OkE4+djTA9uszy4zVLMjYYA4FQIQvsYEa78coup2iq9l9Uu+ZWbKwDAaRCEdhPkIe8OM64YZ3x1v3X0mtrDLCgFAGdAENrZgPbKtmTTxBjDyNW1T++2VHCvIQA4NoLQ/kwGebSvYc/NpiNF0v2L2neOWGuYKwUAR0UQtpYoX+XzMcavJxi/zVS7La1994iVpxoCgAMiCFtXv2Bl6VjjopHGRcesCctrV6Vz9z0AOBaCsC2MilC2TTT9eaBh3i7rVV/VfnrCWstkKQA4BoKw7SRHG3bfbHpzqHHJr9auS2vnH7CWs5QGAPRGELa1YeHKqvGmpWONm3PUzktqntplySpnuhQAdGOyvenWrVv/8Y9/VFRU3H777bfffnuDr5aVlT322GN1b2+88caJEyfap0ZXdE2o8mWS8egFwxsHrf2+rE2KMjzY2zA8XNG7LgBwO7YG4bFjx66//vpXXnklPDx89uzZnp6eN998c/0GlZWV77333ttvv629jYyMtHOlrqhHoPKPocbnBxk/Pm5N/cHiaZD/7m24rYshwKx3ZQDgNmwNwrfeemvKlCmpqakikpWV9dprrzUIQo3WAE0SYJYHexv+u7dhQ6b69mHrH36suaGT4c5uhqQoxcgQEQBama3XCHft2pWYmKi9TkxM/Pnnny/Z7IEHHnjwwQeXL19un+rciSIyLkr5Msl48jbz0DBl3m5L9Ge1f/jRsq+QK4gA0IpsHRHm5uYGBwdrr0NCQioqKi5cuBAYGFjXwGw2P/zwwwkJCfn5+Q899ND27dv/+te/XvJUp0+f/vbbb8eMGVN35KmnnhowYEBzvwVXYxa5s5Pc2UmOFSufnzFOXGv0NMqt0ZZbOll6BKilpaV6F+g66Ew7ojPtiM60F6vVqiiNT6zZGoQ+Pj4VFRXa64qKCoPB4OPjU79BQEDAa6+9pr0eMmTIiBEjnnvuOU9Pz4tPFRUV1bdv3z/+8Y/aW6PReM011zQ4G0RkgL8MiJKXh8qP+eqSX423bFaDPGVSpOn2Hl592jFnah/+/v56l+A66Ew7ojPtwmq11iXXFdgahNHR0adPn9Zenzp1KiIiwmy+7IqO7t2719bWnj9/Pjw8/OKvms3msLCwpKQkGz8a14Qq14QaXxks23LVxUdrblpnMSoyKUaZGG0YFs51RABoEVuvEaakpCxevFiL1g8++CAlJUU7npaWduzYMRHJysqqqqoSEVVVFyxYEBsbe8kURLMpIolhyktX1566zfRlkjHIQ/n9Tkv44poZ31s+Pm7NLte7PgBwTraOCFNSUpYtW9arVy/tuuD8+fO14/PmzXvyySe7d+++evXq//3f/+3cuXNBQYHJZEpLS2utkiFyVbByVbDy5NWGjDL1mwx1dbr62I6aSF9lfJSSFGVIDFP8uQEDAGyjqGoTFiWePHmysrKyV69eBsNvQ8nS0lJPT09tmrSgoCA9PT0wMDA6OtpkumzEpqWlrVmzZvHixS0s3T2VlJRc8uKBRZVd59T1mer6TOuuc2rPQGVYuDI8XBkWZujg3fZlOofLdSaagc60IzrTXrRrhL6+vldu1oSdZUSkS5cuDY74+fnVvQ4JCQkJCWnSCWEvRkW7lKg80d9QZZGf8tUtueoHR7EfxPsAABF6SURBVK2zNlvCvZUhYcrQDsrQMKVXkGLgmiIA1NO0IIRT8DTKsHBlWLgiVxmsqhw8r27LU3/IVV/eb82rUK/toPRtp3QNULoFKt0CpKMv0QjArRGELs6gSL9gpV+wMruniEh+pezIsx4ukt0F6pJfrceLpaBS7R+i3N7ZcHsXQxiTqADcD0HoXkK9JDnakBz97yPltbItV/30hPWZPTVDOigzuhomxxi8+bkA4DZ4DJO78zFJUpSyaKQxY6p5elfDJyesUZ/VfHScBwcDcBf8zx+/8THJtC6GaV0MR4rU676xFFbJo335fxIA18dvOjTUM0jZPtG08Kj1jz9Z9K4FAFodQYhLiPCRTTeZvs9WH9hqsfL0CwAujSDEpQV7yobrTceL1Tu+t9RwxRCA6yIIcVl+Zlk5zlRco87cxBwpAJdFEOJKvE2ybKzpmwxrTuNPMgEAp0QQohGeRrmhk+Gfp5keBeCaCEI07pZY5SuCEICLIgjRuOs6Gn7MV89V6l0HALQCghCN8zFJUpRhdTqDQgAuiCCETW6JVb46zR2FAFwQQQibJEcbNudYi2v0rgMA7I0ghE38zZIYpnzN7CgAl0MQwla3xBqYHQXgeghC2GpyrGFthrW8Vu86AMCuCELYKsRTBoYq6zOZHQXgUghCNAGzowBcD0GIJrg1zrA63VrNmBCACyEI0QTh3tIzSPkui0EhANdBEKJpbok1sO8oAFdCEKJpbo1VVpyxWhgTAnAVBCGaJtZfifJVtuaShABcBEGIJhsRrvycTxACcBEEIZos2k85W0YQAnARBCGaLNpX0kv1LgIA7IQgRJNF+ynppYwIAbgIghBNFu2nnCEIAbgKghBN1sFbSmuF3bcBuAaCEE2miHT0Zb0MABdBEKI5YvxYLwPARRCEaI5oX9bLAHARBCGao5OfEIQAXANBiOaI9lPSy/QuAgDsgSBEc8RwKyEAV0EQojnYXAaAyyAI0RzRfkpGmcqQEIALIAjRHJ5GCfSQ3Aq96wCAFiMI0UzRfsqZEsaEAJweQYhmivZT0tlcBoDzIwjRTGwuA8A1EIRopk5sNwrAJRCEaKZoPzlToncRANBiBCGaiWuEAFwDQYhmYt9tAK6BIEQzdfCWilop4/G8AJwcQYjm6+irnGVQCMDJEYRovmg/4RkUAJwdQYjmY3MZAC6AIETzcSshABdAEKL52FwGgAsgCNF80TyeF4DzIwjRfNF+coYRIQAnRxCi+Tr5KpnlqpUxIQBnRhCi+TyN0s5DcipIQgBOjCBEi0T7KayXAeDUCEK0SAzrZQA4OYIQLcLmMgCcHUGIFunEMygAODmCEC0SzT31AJwcQYgW4RohAGdHEKJFov2UMzYEYZWlDWoBgOYgCNEi7b2kyiKlNVdqU2WR6M9rGDYCcEwEIVqqk5+SfsVnUBw8r4Z5K0qbFQQATUEQoqWifRtZL7OnQL06hBwE4KBMtjfdvXv3xo0bw8LCpkyZ4uXldblmO3bsyMvLmzhxoj3KgxP4v2dQXDbqCEIAjszWEeGyZcsmTJhQWFj48ccfjx071mq1XrLZiRMnbrzxxnvuucd+FcLRRfs18nheghCAI7M1CJ955pn58+c///zzX3/9dW5u7jfffHNxG1VVH3jggUcffdSuFcLRRfvJmZLLftWqyv5CNT6YIATgoGwKwszMzAMHDiQnJ4uI2WyeMGHCunXrLm725ptvdunSZfjw4XauEY4t+oqLZY4Xq6FeSjvPtqwIAJrApmuEWVlZfn5+/v7+2tuIiIh9+/Y1aHPmzJm///3vO3fu3Lt375XPVlBQsGfPnrlz52pvjUbj3XffHRsb27TC3VVVVZWHh4feVfyHCA85U2Koqqq65Fd/ypH4dpf9qr4csDOdF51pR3SmvVitVlVt/NYtm4JQUZT651JVVbloMfzs2bNffPHFoKAgW87m4eFRv6XBwOJVJ9bJR85XS2G1EuxxiR+4veeV+HbcQwjAcdkUhJGRkWVlZSUlJdqgMCcnJyIion6DEydObNmyJSAg4LPPPsvPzy8uLk5JSZk/f36DZprg4OA+ffo88cQTdvkG3E11dbWnp2PNM3qKDAur3XbOeGvcJf5Ds+987UN9jZ6ejniN0AE703nRmXZEZ9qL1WqtqKhotJlNQ7HIyMh+/fqtXLlSRKqrq7/55psJEyaISEVFxZEjR7QGK1asSE1NTU1NTU5O9vLySk1NDQwMbNm3AKcxJtKwMfvSw769herVIW1cDgA0ga33ET799NOzZ8/et2/fzz//HBUVpQXhnj17EhMTVVX18fFJSkrSWprNZg8Pj7q3cAdjIpV3N17ijprMMlUVifRxxOEgAGhsvTh3yy23fPvtt+Hh4ffee+/69eu1q3q9evVasWJFg5a9e/d+//337VwmHNtVIUphlZpx0drRPQXCHYQAHFwTdpaJj4+Pj4+vf6Rdu3YX7yATGhrKtjLuRhEZGWH4Llu9o+t/xB630gNwfCzXhH2MiVQ2Zl08IiQIATg6ghD2MTZS+TaTIATgfAhC2Ef3QEUVOVH87ywsqpaCSrVLAEEIwKERhLCbMZHKt/VmR/cUqFeFKAZyEIBjIwhhN2Mile/qB+E5tT97bQNweAQh7CYpUvku21qXhL8UqFe3JwgBODqCEHYT5asEeij7C3+LQlbKAHAKBCHsaez/3URRaZFfS9TeQQQhAEdHEMKeRkf8FoT7C9XugYqnUe+CAKAxBCHsaWyUYXOOtdbKvCgAp0EQwp5CPCXWT9l1TiUIATgLghB2pt1NSBACcBYEIexsTKRhQ6b14Hk1niAE4AwIQtjZiAhla64a7q0EmPUuBQBs0ITHMAG2CDBLQnulky/DQQDOgSCE/d0aZ/DjJwuAk+DXFezvf/ox5Q7AafALCwDg1ghCAIBbIwgBAG6NIHQyL7/8sqqqjbdDYywWy9/+9je9q3ARpaWlb775pt5VuIi8vLwPP/xQ7ypcxKlTp5YsWdJoM4LQybz44ou1tbV6V+EKSkpKXnvtNb2rcBHZ2dnvvfee3lW4iBMnTqSlpeldhYvYt2/fP//5z0abEYQAALdGEAIA3BpBCABwazrcUH/mzJlVq1Z16dKl7T/aBVgslp49e+pdhStQVbW0tJSfQ7uora3NycmhM+2iqqqqoKCAzrSL8vLydu3aNdpMafsliFar9fjx42YzWzI3R1VVlaenp95VuAg6047oTDuiM+1FVdWQkJCgoKArN9MhCAEAcBxcIwQAuDWCEADg1ghCAIBbIwgBAG6N5xE6LlVVd+7cuXHjxsLCwn79+k2dOtXDw0P7UkFBwfvvv5+bm3v99dePGzdO3zqdi9Vq/eijj2JiYsaMGaMdKS4ufvfdd7OyskaPHp2cnKxveU7k2LFjn3/++fnz5+Pj42fOnGkwGETk9OnTixYtKi8vT0lJGThwoN41Oofz589/9NFHZ8+ejYmJmTlzZmBgoHb86NGjn3zyicVimT59et++ffUt0pGdOnVq165dhYWFKSkp9ReI7tmz5/PPP/fy8po5c2bnzp21gzU1NQsXLjx69Gh8fPwdd9xhNBqFEaEjO3Xq1NSpU4uKijp16rRgwYIJEyZYrVYRqaqqGjp06MGDB+Pi4mbOnPnJJ5/oXakzeeONNx555JGFCxdqby0Wy6hRo3bs2NGlS5eHH374jTfe0Lc8Z7Fu3bprrrnmwoULsbGxGzdu1Pa/zc7OHjRoUElJSWhoaFJS0pYtW/Qu0wlUVFQMHjz4p59+io+P37p165AhQ6qqqkTk+PHjgwcPVhTFz88vMTFx3759elfqoM6dO5eQkPD222/Pnj07Jyen7vjOnTtHjhwZHBxcVVU1aNCgs2fPasfvvPPOxYsXd+vWbcGCBQ899NBvrVU4qurq6traWu31+fPnTSbTgQMHVFX99NNPr7rqKqvVqqrqsmXLevbsqb1Go06dOtWvX79HHnlk+vTp2pHVq1d37txZ6+f169dHRUXV1NToWqMTqKmp6dix45IlSxocnzdv3q233qq9fuGFF2666aY2L835bN++PSAgwGKxqKpaU1Pj4+Oza9cuVVXnzJlz7733am3mzp07c+ZMHYt0ZHW//UTk8OHDdcdvvfXWefPmaa+nT5/++OOPq6p6/PhxLy+vwsJCVVXPnj3r5eWVk5OjqiojQsdlNpu1YbuI1NTUWK1WPz8/Edm8eXNSUpKiKCIyfvz4I0eO5Obm6lmok1BVNTU19W9/+5uvr2/dwU2bNo0ZM0br51GjRuXn5584cUK/Gp3Dvn37iouLBw4cuGDBgg8//LCkpEQ7vnnz5vHjx2uvx40bt2nTJv1qdBqxsbGqqh47dkxEDh8+bDKZYmJiRGTTpk10pi2034QXu2QHbtmyZcCAAdpeMx07duzcufP27duFqVFn8fDDD6ekpGj/QrKzs0NDQ7Xj/v7+3t7e2dnZulbnHN55551OnTolJSXVP5iTk1PXmSaTKTg4mM5s1KlTp8xmc0pKSlFR0Zo1a66++uri4mL5z5/MDh06lJSUlJaW6lqpEwgPD09LS0tMTOzZs+eoUaOWLl0aEhIiF3Vmdna2yuYnNquuri4oKGjQgfKf/95FJCwsLCsrS1gs4xSeeOKJQ4cOfffdd9pbk8lU/5GEFoulbhENLiczM/P111/ftm1bg+Mmk8lisdS9rampoTMbZTAYCgoK1q1bl5CQICKDBw/+6KOP5syZU/8ns7a2VlEUk4nfMI3IzMxMTU196aWXRowY8d13382aNWvXrl3h4eFms7l+Z5rN5ssNfXAxo9FoMBjqd6D27/py/975MXV0zz777KpVqzZu3Fi3dWxUVJT2vxgRyc3Nra6ujoyM1K9A57BixYrCwkJtqiQrK6uqqio5OXnVqlVRUVGnTp3S2pSVlRUVFdGZjYqKihKR3r17a2979+595swZ+c+fzMzMzJCQEC8vL72KdBbLly/v2rXrPffcIyLdu3f/6KOPVq5cmZqaGhUVlZmZqbXJzMzU+hw2MhqNYWFhmZmZvXr1EpHMzEzt33X9Xq1/nKlRh/bqq6+mpaWtW7euffv2dQeTk5PXrFlTXl4uIsuWLRs2bJgt26u7uSlTpvzrX/9655133nnnneuvv37w4MHPP/+8iCQnJ69bt+7ChQsisnz58l69esXFxeldrKNLSEiIjo7esWOHiFgslp9++kkLxeTk5GXLlmlrm7/44gvuRbFFSEhIRkZGdXW1iFRVVWVkZGj/2LXO1NrQmc0wceLEL774QkRUVV22bJnWgePGjTt8+PDx48dFRLvjYuTIkcKm247s0KFDffr06dy5c13Ovf7668OGDbNarRMnTszKyurbt+/XX3/91VdfjRgxQt9Sncuf/vSn06dPf/rpp9rbadOm7d27d9CgQWvWrFm0aNGNN96ob3lOYenSpQ899NDEiRP37t3r6+u7du1as9lcWlo6fPjwoKCgDh06bN68efPmzd26ddO7UkdXWVk5duzY8vLyoUOH/vDDD0FBQevXr/fw8Dh37lxiYmJcXJyXl9cvv/yybds25iouZ/z48YWFhbt27erTp4+Xl9fGjRsDAgJOnTqVmJg4dOjQoqKivLy8LVu2aDdoPvfcc++99964ceP+9a9/Pf7443PmzBGC0JGVl5cfPny4/pGuXbtqf5dWq/X777/Pz88fPnw4/zyaSpsarRv5qaq6ZcuWzMzMxMTE6OhofWtzIqdPn96xY0dUVFRiYqJ2N72IVFVVffvtt+Xl5UlJSY0++wYaq9W6bdu2jIyM6OjoIUOG1F0LLC8v37Bhg8ViSUpK8vf317dIR7Zv376ampq6t/3799fWgV+4cGHDhg1eXl5jx46tP0u/e/fuo0eP9uvXr26bAoIQAODWuEYIAHBrBCEAwK0RhAAAt0YQAgDcGkEIAHBrBCEAwK0RhAAAt0YQAgDcGkEIAHBrBCEAwK0RhAAAt/b/ATbYN4kNGdBHAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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ze13v/tdnz59hBA5Ob89FOHIkSPffPNNWlqal5fX/fff36NHj7Vr106bNk0IMXHixJdfflkIUVVVtWbNmttuu/by0StXrpRleeXKlZIkTZ8+PTIy8o9//GNmZqa/v/+iRYsMht++4fz8/PT09KeeekpdraWdaROEQohQNymzQvFzZr1RANZoSKD0PzHt9wgIZ71wverzeO7cuYmJiS+88MKxY8eys7NvueUWIcSxY8cefvjhjIwMFxeXK1euXC858vLy8vLyBg8erL4cOnTo/v37hRC1tbWPPvro1q1bdTqd0WjMzc29QVUnTpyIiYnx8vISQuh0umHDhh0/flwNwv79+6ttwsPD9+7de4MjxMXFqdOhAQEB3bt3P3HixC233BIYGBgaGnrbbbfNmDHj1ltv9ff3nzVrVocOHW655ZbExMTZs2e35/M3NAxCkVUh+vhq9f4AcCMBLiIhXOO/1AcNGhQUFLR169bNmzfPmTPHaDQKIR544IF58+b9/ve/F0IsXLhQfRz61VxdXRVFqampUf9V/UMYPvroo7Nnzx4/ftzJyengwYMTJky4QQFubm4Nn95QUVFR/zQFM4PKzc2tYdZWVla6ubm5uLh8//33Z8+eXbt2bXJy8nPPPTdv3rwPPvjgueee27Bhw6uvvnr48OHXX3/dnONbhDbnCIUQoa4SF44CwI3NmTPnww8//OKLL+6++251T25ubpcuXYQQRUVFN3iGooeHR2xsrDoLWlNT89VXX9X/844dO6oP/l2+fHl9ex8fn4KCgkYHGTx48OnTp48fPy6EyM7O3rJly8iRI5tV/8iRIzdu3Kgeef/+/ZmZmQMGDCgqKqqrq+vWrduiRYtmzJhx8uTJysrK8vLysLCw5OTkRx999OTJk816l1bSeEQIALiBu+6668knn4yJienXr5+6Z+HChUlJScOGDfv111/79u17g3+7dOnSqVOnfv3115mZmVFRUerOmTNnxsfHT5gwoaSkpFu3bvWNH3zwwenTp0dERDz33HP1061hYWFLlixJSEhQn7vw2GOPDRo0qFn1jxw58p577lHrP3DgwDvvvOPv779+/foHHnggNjbWZDKdPXt248aN6enpw4YNGzBggIuLy6FDhz744INmvUsrSeY8xt6yUlJSNm7cOOiJTy+WKW/czFOYm6e0tPTqO4TQMnSmBdl6Zz744IP9+vV74IEHtC7kGoqLi41GY8MnvKalpWVkZMTExOh0OiGEq6trbW1tWVmZr6+vECIvL8/f31/9Unl5uXrng5eXV11dnbu7uxCirKzs+PHjYWFhHTp0KCkp8fHxUQ9rMplKSkrc3d0lSSotLfXz86sv4OzZs9HR0QEBAeqesrIyJycndVhZU1NTU1PT6Ll7lZWVtbW16slFIURubm5aWlq3bt3q9xQVFZ05c8bFxaVXr17q5G1FRcWZM2fq6up69eql1tnQfffdN3ToUHVC2Hzqg3mvPlojmo0Iw9zE3hudowUACCHE1ZfDRERENLrNzmg0qikohAgMDKzf7+7uXn+9TP2tgR4eHjfffLO6XZ+CQgi9Xl9/kPoUVAtoNBBsGHv1idiQq6urq+u/HzkbFBQUFBTUsIGPj8+QIUMa7nFzc7vpppuEFrQ7R+jGOUIAgPY0DELOEQIAtKfliJBHEgIANKdZELobhF4SJbVavT8AAEJoGISC04QAACugbRBymhAAoDHNbp8QQoT9NiJkuVEAGtPr9S+++GI738d9PYqi1D9HCapLly4NHz68jQ6uZRAyIgRgJZ555pl7771X6yp+03BJT9Tr1atXGx1Z2yDkHCEAqxAQEFC/bIrmbH2ZHpuj6TlCV5FV2XQzAADajsZXjWaWMyIEAGhJ66tGGRECADTFfYQAAIemZRD6OIlaWVTUaVgCAMDRaRmEQogQVym7kkEhAEAzGgchtxICALSleRBymhAAoCXNg1BkMiIEAGhH8yBkRAgA0JLWQejKOUIAgJa0DkJGhAAATWkehCwuAwDQksZBGMaIEACgKY2D0N9FlNaKGlnbKgAAjkvjIJSECHKRclhcBgCgEY2DUKi3EpZrXQQAwFFZQxBKWYwIAQAasYYg5FZCAIBmrCEIuXAUAKAZKwhCFpcBAGhH+yAMc2dECADQjPZBGOrK4jIAAM1YQRByjhAAoB3tgzDIVeRXCRNRCADQgvZBqJeEn7PIZXYUAKAF7YNQCBHmLmUwOwoA0IJVBGGkh3SxlCAEAGjAKoKwk6dILdW6CACAQ7KKIIz2lFIZEQIAtEAQAgAcmpUEofiVqVEAgBasJAiltDJFZkwIAGh3VhGELnrh6ywyuYMCANDurCIIhRCdPCUuHAUAtD9rCUKulwEAaMJ6glD8ShACANqd9QQhU6MAAA1YVRAyIgQAtDdrCUJWWQMAaMJagjDcXcqrUqpMWtcBAHAw1hKEekl0dJfSypgdBQC0K2sJQiFENLOjAIB2Z1VBKHEHBQCgnVlXEHLhKACgnRma1frUqVNVVVUxMTF6vb7Rl6qrqysqKhru8fLyurrZDXTyFAevNKscAABay9wgrK6unjJlyoULFzw9PU0m07Zt2wIDAxs2+Oqrr5566il1u7KyMicnJzMzMzg42PxSoj2l1FLZ/PYAALSeuVOjKSkpubm5x48fP3ToULdu3V599dVGDWbNmnXh/z3wwANjx45tVgoKzhECALRgbhCuWrVqzpw5zs7OQoh58+atWrXqei0VRfnkk09+//vfN7eUABdhkkVRTXP/HQAALWfu1GhaWlp0dLS6HR0dnZ6ebjKZrnkKcPv27YWFhVOmTLneoWpqarKzs7dt21a/5+abb/bw8BBCRHlKqaXKTf5SM74DAABawdwgrKioUIeDQggXF5e6urqamhpXV9erWy5btmz27NkuLi7XO1RWVtaJEydeeOGF+j3PPPNMbGysECLC1Xgqr6arM2cKr6u8vFyS+EPBMuhMC6IzLYjOtBRZls3pSXODMCQkpKCgQN3Oz8/38fG5ZgoWFxf/61//2r179w0OFRkZOXbs2BUrVlz9pa6+pqxao4eHFd3UYW0URVFHz2g9OtOC6EwLojMtRZblysrKJpuZGzkDBw788ccf1e0ff/xx4MCB12z22Wef9ezZs3///mYethFuJQQAtDNzR4QPPfTQkCFDbrrppoCAgL/+9a/Lly9X9w8YMOCpp56aOnWq+nLZsmUtuEymXrSn9G0686IAgPZjbhD27Nlz06ZNb7/9dlVV1fvvv3/rrbeq+2+//faoqCh1u7S0dNy4cTNnzmxxNSw3CgBoZ81YWWbYsGHDhg1rtPPPf/5z/banp+dLL73Ummo6eUqXyhRZETrOEwMA2oV1XZbiahBeRpFdyWlCAEA7sa4gFEJ08pSYHQUAtBurC0IuHAUAtCcrDELxKyNCAEB7scIgZEQIAGg/VheEnbwIQgBA+7G6IIz24FZCAED7sbog7Ogh5VYq1Sat6wAAOAarC0K9JMLcpMvlzI4CANqD1QWh4MJRAEA7ssYg5HoZAEC7scYg5A4KAEC7scog5MJRAEB7scYg7OEjnSxkRAgAaA/WGIS9faWLZUp5ndZ1AAAcgDUGoVEnevtKv+QzKAQAtDlrDEIhxMAA6UAeQQgAaHNWGoQDAqSDVwhCAECbs9IgHBggHSAIAQBtz0qDsJevlF6ulNRqXQcAwN5ZaRDqJRHjJx1mUAgAaGNWGoRCiIGBzI4CANqc9QYh18sAANqB9QYh18sAANqB9QZhd28pp0IpqNa6DgCAXbPeINRJ4qYA6TDrywAA2pL1BqFgfRkAQNuz6iDkehkAQFuz6iDkehkAQFuz6iDs4i0V1Sh5VVrXAQCwX1YdhJIQsf7SIQaFAIA2Y9VBKFhfBgDQxqw9CLleBgDQpqw9CLmDAgDQpqw9CKM9pSqTkl2pdR0AADtl7UEohIhldhQA0GZsIAgHMDsKAGgzthGEjAgBAG3EBoJwYID0c56sdRUAAPtkA0EY4SEJITLKGRQCACzPBoJQCDEgQPqJ04QAgDZgG0EYH6LblU0QAgAszzaCcGSotIMgBAC0AdsIwoEB0vlipahG6zoAAHbHNoLQqBODg6TdOQwKAQAWZhtBKIQYGaLbkcVNFAAAC7OZIBwRKu3IYkQIALAwmwnCIYHSySKltFbrOgAA9sVmgtBZLwYESHs4TQgAsCibCUIhxMgQaWc2pwkBAJZkU0EYquM0IQDAsmwpCIcGSUcKlIo6resAANgRWwpCV4Po5yfty2VQCACwGFsKQqGutcbdhAAAy7GxIBwRomPRUQCABdlYEMYFSwevKFUmresAANgLGwtCD6Po5SP9zLMJAQAWYmNBKH47TUgQAgAswxaDULeD2+oBABZie0EYHyztz1VqiEIAgCXYXhB6O4mu3tLBK8yOAgAswPaCUAgxIoTThAAAy7DJIBzFbfUAAAux0SDU7c3l2YQAAAuwySD0dhLDQ6T1aQwKAQCtZZNBKISYEa378ldOEwIAWstWg3BqlO77LLmE2VEAQOvYahB6GcWIEN0GZkcBAK1jq0EohJjRSWJ2FADQSuYGYXl5+Zw5c3x8fCIjI5ctW3bNNsePHx87dqybm1tYWNibb75puSKvbUqk7gdmRwEArWNuED733HO5ubnp6elr1qx5/PHHT5w40ahBTk7O2LFjp06dmpWVdfjw4eHDh1u61Ma8jGJEqG79JWZHAQAtZ1YQKory4Ycf/u///q+Hh0dsbOy0adM++uijRm3efvvtm2++eeHChd7e3sHBwf3792+DahubES19mcrsKACg5cwKwvz8/Pz8/JiYGPVl3759z54926jNkSNHOnfuPHXq1G7dus2aNSsrK8vClV7LlEjdjiy5uKYd3goAYJ8M5jQqKCgQQnh6eqovvb29r1y50qhNZmbm9u3b165d26dPn0WLFt155507duy45tHOnj2bkpKSkpKivjQajevWrYuPj29B9ZIQwwKNX56tuDPKUSZIy8vLJUnSugo7QWdaEJ1pQXSmpciybE5PmhWEAQEBQoiSkhJ/f38hRFFRUWBgYKM2/v7+U6ZMGTVqlBDiL3/5S4cOHQoLC319fa8+mjpkXLFihTlv3aSZXeUvUw339dFb5GjWT1EUDw8PrauwE3SmBdGZFkRnWoosy5WVlU02M2tq1NfXNzAw8NixY+rLY8eOdevWrVGbHj166PW/pZG6oSjtcfZuSqRuJ7OjAICWMisIJUmaN2/eX//61+Li4p9++mnNmjX33nuvECI7OzspKam0tFQIcd99961bt+7IkSM1NTUvvvhiXFycn59f29YuhBDC0yhGhupYdxQA0DLm3j7x9NNPd+jQoUuXLjNnzvzHP/7Rq1cvIURtbe25c+dMJpMQolevXm+++eaMGTMiIiLS0tI+//zzNqz6P3HtKACgxcw6RyiEcHNzu/qWiY4dOx4+fLj+5axZs2bNmmWx0sw2OVK3YE9tcY3e26n93xwAYNtseIm1ep5GMSpU9/VFZkcBAM1mD0EohLivh+6fJwlCAECz2UkQ3tpRKq0VP+VxphAA0Dx2EoSSEMk9dEsZFAIAmslOglAI8ftuuvVpcm7Tt04CAPBv9hOEvs7i9kjdh2cZFAIAmsF+glAIsbC37p1TsokThQAAs9lVEPb3lzq4C1aZAQCYz66CUAjxX724ZAYA0Az2FoS/i9adKFROFzE9CgAwi70FoZNO/L677q1TDAoBAGaxtyAUQjzYU7fivFxSq3UdAABbYIdBGOYmjQ7TrTjPoBAA0DQ7DEIhxH/10v3zhCxzohAA0BT7DMLRoZKXk1j5K4NCAEAT7DMIhRAvD9Y/eUCuIQoBADdkt0E4IkTq6iU+YsU1AMAN2W0QCiFeGKR//rBcUad1HQAAK2bPQTggQBoWJPHAXgDADdhzEAoh/jJQ9+pRU2G11nUAAKyVnQdhN29pcqTutWMmrQsBAFgpOw9CIcSzsbp3T8vZPLAXAHAt9h+E4e7S3V11fz3MoBAAcA32H4RCiCf66b/4Vf61lJVmAACNOUQQBriIR3rr//gTl48CABpziCAUQiyK0Z0oVHh4PQCgEUcJQme9eCdOv3CPXM799QCABhwlCIUQI0Ol+BDpea6aAQA04EBBKIR4bYh+2Rn5SAFXzQAAfuNYQRjsKp4fqJ//o4lHFQIAVI4VhEKI+7vr9JJYxlMpAABCCAcMQp0k3o3X//mAKZe1ZgAADhiEQog+vtLdXXX/vZ+rZgAADhmEQojFsfq9ucoXF5ggBQBH56BB6G4QXyfoH9lnOl7IZTMA4NAcNAiFEH39pNdv1k/bZiqu0boUAIB2HDcIhRCzOuvGh0t37zAxKgQAh+XQQSiEeP1mfUG18vIRThYCgINy9CA06sSXYw1LT8qb0xkWAoAjcvQgFEKEuIpPR+nv3lF3kQcWAoDjIQiFEGJUqPTHGP3UraYiLpwBAAdDEP7mD311CeHSxE11PKcJABwKQfhvrwzR9/aVbt9aV82aMwDgMAjCf5OEeDde7+Uk3buTx1MAgKMgCP+DXhIpo/VXqpSFexkVAoBDIAgbc9KJ1QmG/bnKM4fIQgCwfwThNXgZxTcTDF9cUF74hRvtAcDOEYTXFuQqdtxm+OJX+U8/My4EAHtGEF5XsKvYMcmwPVP57/0sRgoAdosgvBFfZ7FlomF3jvLQbq4jBQD7RBA2wcdJbJ1oOFOkzP+RLAQAO0QQNs3DKNZPMFwoUWZ+byqr1boaAIBFEYRmcTeIb24xeDuJQWvreKg9ANgTgtBcLnrxXrz+yf660Rvr3jvNbRUAYCcIwuaZ00X3Y6Lhnyflu38wsTw3ANgBgrDZuntLeycbJEkMXVd3sohpUgCwbQRhS7gbxMcj9Y/10Y3aUPfWSS4mBQAbRhC23L3ddD9NMaRckG/5ti6rQutqAAAtQhC2SpSn9MMkw9BgacC/ajekMTIEANtDELaWQSeeidV/McawYI9pwR5TCTcaAoBNIQgtY0SI9Ms0Q40seq2uW/krN1cAgM0gCC3Gx0m8F69fO07/2jF59Ma6U1xQCgC2gCC0sAEB0p5Ew+RI3cgNdc8cMlVyryEAWDeC0PIMOvFYH93h2w2ni0S3L+vePS3XMlcKANaKIGwr4e7SF2P030zQf5ehdF1V995pmacaAoAVIgjbVl8/adVY/fKR+uVn5dg1devTuPseAKwLQdgeRoVKeyYb/jJQt/ig3O/rus/Oy3VMlgKAdSAI209ihO7Q7Ya3hulX/ip3WVW35LhcwaU0AKA1grC9xYdI68cbVo3V78xWOq2sffqgKbOC6VIA0IzB/Ka7d+/+5z//WVlZeeedd955552NvlpeXv7444/Xv5w0adLkyZMtU6M9GhwofZWgP1Ose/OE3PeruoRw3YJeuuEhktZ1AYDDMTcIz549O3HixFdffTUkJGT+/PnOzs633357wwZVVVXvv//+O++8o74MCwuzcKX2qLu39M9h+hcG6T85Jyf/aHLWif/qpbujs87LqHVlAOAwzA3Ct99+e8aMGcnJyUKIzMzM119/vVEQqtQGaBYvo1jQS/dfvXTbMpR3Tsl//Kn21o66u7vqEsIlPUNEAGhj5p4jPHjwYFxcnLodFxd34MCBazZ76KGHFixYsGbNGstU50gkIcaFS18l6C/cYRwWLC0+ZIr4vO6PP5mOFnAGEQDakLkjwpycHD8/P3Xb39+/srKyuLjY29u7voHRaHzkkUdiY2Pz8vIefvjhvXv3/u1vf7vmoS5evPjdd9+NGTOmfs/TTz89YMCAln4L9sYoxN0dxd0dxdkS6YtL+smb9c56MT3CNK2jqbuXUlZWpnWB9oPOtCA604LoTEuRZVmSmp5YMzcI3dzcKisr1e3KykqdTufm5tawgZeX1+uvv65uDx06dMSIEc8//7yzs/PVhwoPD+/Tp8+f/vQn9aVerx88eHCjo0EIMcBTDAgXrwwTP+UpK3/VT9up+DiLKWGGO7u79PZlztQyPD09tS7BftCZFkRnWoQsy/XJdQPmBmFERMTFixfV7dTU1NDQUKPxuld0dOvWra6urrCwMCQk5OqvGo3G4ODghIQEM98agwOlwYH6V4eIPTnKijO1t20x6SUxJVKaHKGLD+E8IgC0irnnCJOSklasWKFG64cffpiUlKTuT0lJOXv2rBAiMzOzurpaCKEoytKlS6Oioq6ZgmgxSYi4YOnlm+pS7zB8laD3cZL+sN8UsqJ2zg+mT87JWRVa1wcAtsncEWFSUtLq1at79uypnhdcsmSJun/x4sVPPfVUt27dNmzY8D//8z+dOnXKz883GAwpKSltVTKE6Ocn9fOTnrpJl16ubEpXNqQpj++rDXOXxodLCeG6uGDJkxswAMA8kqI046LECxcuVFVV9ezZU6f7bShZVlbm7OysTpPm5+enpaV5e3tHREQYDNeN2JSUlI0bN65YsaKVpTum0tLSa548MCni4BVla4ayNUM+eEXp4S3Fh0jDQ6T4YF2Qa/uXaRuu15loATrTguhMS1HPEbq7u9+4WTNWlhFCdO7cudEeDw+P+m1/f39/f/9mHRCWopfUU4nSk/111Sbxc56yK1TqlmIAABIoSURBVEf58Iw8b6cpxFUaGiwNC5KGBUs9fSQd5xQBoIHmBSFsgrNexIdI8SGS6KeTFXGiUNmTq/yYo7xyTM6tVG4Okvr4Sl28pK7eUlcv0cGdaATg0AhCO6eTRF8/qa+fNL+HEELkVYl9ufKpInEoX1n5q3yuRORXKf39pTs76e7srAtmEhWA4yEIHUugi0iM0CVG/HtPRZ3Yk6N8dl5+9nDt0CBpThfd1EidKz8XABwGj2FydG4GkRAuLR+pT59pnN1F9+l5Ofzz2o/P8eBgAI6Cv/zxGzeDmNVZN6uz7nSRcssmU0G1eKwPfycBsH980qGxHj7S3smGZWfkP/1s0roWAGhzBCGuIdRN7LjN8EOW8tBuk8zTLwDYNYIQ1+bnLLZNNJwrUe76wVTLGUMA9osgxHV5GMW6cYaSWmXuDuZIAdgtghA34moQq8caNqXL2U0/yQQAbBJBiCY468WtHXX/usj0KAD7RBCiadOipK8JQgB2iiBE027poPspT7lSpXUdANAGCEI0zc0gEsJ1G9IYFAKwQwQhzDItSvr6IncUArBDBCHMkhih25ktl9RqXQcAWBpBCLN4GkVcsPQNs6MA7A5BCHNNi9IxOwrA/hCEMNfUKN3mdLmiTus6AMCiCEKYy99ZDAyUtmYwOwrArhCEaAZmRwHYH4IQzTA9WrchTa5hTAjAjhCEaIYQV9HDR/o+k0EhAPtBEKJ5pkXpWHcUgD0hCNE806OktZdkE2NCAPaCIETzRHlK4e7S7hySEICdIAjRbCNCpAN5BCEAO0EQotkiPKTL5QQhADtBEKLZItxFWpnWRQCAhRCEaLYIDymtjBEhADtBEKLZIjykSwQhAHtBEKLZglxFWZ1g9W0A9oEgRLNJQnRw53oZAHaCIERLRHpwvQwAO0EQoiUi3LleBoCdIAjREh09BEEIwD4QhGiJCA8prVzrIgDAEghCtEQktxICsBcEIVqCxWUA2A2CEC0R4SGllysMCQHYAYIQLeGsF95OIqdS6zoAoNUIQrRQhId0qZQxIQCbRxCihSI8pDQWlwFg+whCtBCLywCwDwQhWqgjy40CsAsEIVoo0kNcKm3hv92Urnx6XrZoOQDQQgQhWqhjK84RLjsjywwmAVgHghAt1OJ1t02K2J4pjw/nZw+AVeDDCC0U5Coq60R58x/Puy9XifCQQt3aoCYAaD6CEC3XwV263PxB4eZ0eWJHqS3qAYAWIAjRchEeogXPoPj2sjKhAz94AKwFn0douRYsLnOlSpwvUYYGMSIEYC0IQrRcC24l3JQujwnTGfm5A2A1+EBCy7VgcZnN6cqEDgwHAVgRghAtF9HMx/PKitiaIROEAKwKQYiWi/AQl5ozIjyUr/g7S5EeBCEAK0IQouU6uksZFYr5a8Rsuqzcwo0TAKwMQYiWc9YLXyeRXWluEm5Kl2/hxgkAVoZPJbRKhIdk5vUyRTXiaIESH8yIEIB1IQjRKpFmXy+zNUMeESK5Gtq6IgBoHoIQrWL+4jKb01lQBoA14oMJrdLR7GdQbElXbuHGCQDWhyBEq0SYd0/9sQLFoBNdvQlCAFaHIESrmHmOcFO6cis3TgCwSgQhWsXMxWU2c+MEAGvFZxNaJcBFVJlEWe2N2lSbxL5cZXQYI0IA1oggRGt19JDSbvgMihOFSicvyZ0bJwBYJYIQrRXh3sT1MofzlZv8GQ4CsFLN+Cv90KFD27dvDw4OnjFjhouLy/Wa7du3Lzc3d/LkyZYoDzbg/08TXjfqCEIA1szcEeHq1asnTJhQUFDwySefjB07VpblazY7f/78pEmT7rvvPstVCGsX4dHE43kJQgDWzNwgfPbZZ5csWfLCCy988803OTk5mzZturqNoigPPfTQY489ZtEKYe0iPMSl0ut+VVbEsQIlxo8gBGClzArCjIyM48ePJyYmCiGMRuOECRO2bNlydbO33nqrc+fOw4cPt3CNsG4RN7xY5lyJEugi+Tq3Z0UA0AxmnSPMzMz08PDw9PRUX4aGhh49erRRm0uXLv3jH//Yv3//kSNHbny0/Pz8w4cPL1q0SH2p1+vvvffeqKio5hXuqKqrq52cnLSu4j+EOolLpbrq6uprfvXnbBHje92vassKO9N20ZkWRGdaiizLitL0jc5mBaEkSQ2PpSiKJDWe6Zo/f/5LL73k4+NjztGcnJwattTpuHjVhnV0E4U1oqBG8nO6xg/ckUIpxtfsR/cCQLszKwjDwsLKy8tLS0vVQWF2dnZoaGjDBufPn9+1a5eXl9fnn3+el5dXUlKSlJS0ZMmSRs1Ufn5+vXv3fvLJJy3yDTiampoaZ2frmmd0FiI+uG7PFf306Gv8QXO0sO7hPnpnZ2s8R2iFnWm76EwLojMtRZblysrKJpuZNRQLCwvr27fvunXrhBA1NTWbNm2aMGGCEKKysvL06dNqg7Vr1yYnJycnJycmJrq4uCQnJ3t7e7fuW4DNGBOm25517WHfkQLlJv92LgcAmsHc+wifeeaZ+fPnHz169MCBA+Hh4WoQHj58OC4uTlEUNze3hIQEtaXRaHRycqp/CUcwJkx6b/s17qjJKFcUIcLcrHE4CAAqc0/OTZs27bvvvgsJCbn//vu3bt2qntXr2bPn2rVrG7Xs1avXBx98YOEyYd36+UsF1Ur6VdeOHs4X3EEIwMo1Y2WZmJiYmJiYhnt8fX2vXkEmMDCQZWUcjSTEyFDd91nKXV3+I/a4lR6A9eNyTVjGmDBpe+bVI0KCEIC1IwhhGWPDpO8yCEIAtocghGV085YUIc6X/DsLi2pEfpXS2YsgBGDVCEJYzJgw6bsGs6OH85V+/pKOHARg3QhCWMyYMOn7hkF4RenPWtsArB5BCItJCJO+z5Lrk/CXfOWmAIIQgLUjCGEx4e6St5N0rOC3KORKGQA2gSCEJY39/5soqkzi11Kllw9BCMDaEYSwpNGhvwXhsQKlm7fkrNe6IABoCkEISxobrtuZLdfJzIsCsBkEISzJ31lEeUgHrygEIQBbQRDCwtS7CQlCALaCIISFjQnTbcuQTxQqMQQhAFtAEMLCRoRKu3OUEFfJy6h1KQBghmY8hgkwh5dRxAZIHd0ZDgKwDQQhLG96tM6DnywANoKPK1jef/dlyh2AzeADCwDg0AhCAIBDIwgBAA6NILQxr7zyiqIoTbdDU0wm09///netq7ATZWVlb731ltZV2Inc3NyPPvpI6yrsRGpq6sqVK5tsRhDamJdeeqmurk7rKuxBaWnp66+/rnUVdiIrK+v999/Xugo7cf78+ZSUFK2rsBNHjx7917/+1WQzghAA4NAIQgCAQyMIAQAOTYMb6i9durR+/frOnTu3/1vbAZPJ1KNHD62rsAeKopSVlfFzaBF1dXXZ2dl0pkVUV1fn5+fTmRZRUVHh6+vbZDOp/S9BlGX53LlzRiNLMrdEdXW1s7Oz1lXYCTrTguhMC6IzLUVRFH9/fx8fnxs30yAIAQCwHpwjBAA4NIIQAODQCEIAgEMjCAEADo3nEVovRVH279+/ffv2goKCvn37zpw508nJSf1Sfn7+Bx98kJOTM3HixHHjxmlbp22RZfnjjz+OjIwcM2aMuqekpOS9997LzMwcPXp0YmKituXZkLNnz37xxReFhYUxMTFz587V6XRCiIsXLy5fvryioiIpKWngwIFa12gbCgsLP/7448uXL0dGRs6dO9fb21vdf+bMmU8//dRkMs2ePbtPnz7aFmnNUlNTDx48WFBQkJSU1PAC0cOHD3/xxRcuLi5z587t1KmTurO2tnbZsmVnzpyJiYm566679Hq9YERozVJTU2fOnFlUVNSxY8elS5dOmDBBlmUhRHV19bBhw06cOBEdHT137txPP/1U60ptyZtvvvnoo48uW7ZMfWkymUaNGrVv377OnTs/8sgjb775prbl2YotW7YMHjy4uLg4Kipq+/bt6vq3WVlZgwYNKi0tDQwMTEhI2LVrl9Zl2oDKysohQ4b8/PPPMTExu3fvHjp0aHV1tRDi3LlzQ4YMkSTJw8MjLi7u6NGjWldqpa5cuRIbG/vOO+/Mnz8/Ozu7fv/+/ftHjhzp5+dXXV09aNCgy5cvq/vvvvvuFStWdO3adenSpQ8//PBvrRVYq5qamrq6OnW7sLDQYDAcP35cUZTPPvusX79+siwrirJ69eoePXqo22hSampq3759H3300dmzZ6t7NmzY0KlTJ7Wft27dGh4eXltbq2mNNqC2trZDhw4rV65stH/x4sXTp09Xt1988cXbbrut3UuzPXv37vXy8jKZTIqi1NbWurm5HTx4UFGUhQsX3n///WqbRYsWzZ07V8MirVn9p58Q4tSpU/X7p0+fvnjxYnV79uzZTzzxhKIo586dc3FxKSgoUBTl8uXLLi4u2dnZiqIwIrReRqNRHbYLIWpra2VZ9vDwEELs3LkzISFBkiQhxPjx40+fPp2Tk6NloTZCUZTk5OS///3v7u7u9Tt37NgxZswYtZ9HjRqVl5d3/vx57Wq0DUePHi0pKRk4cODSpUs/+uij0tJSdf/OnTvHjx+vbo8bN27Hjh3a1WgzoqKiFEU5e/asEOLUqVMGgyEyMlIIsWPHDjrTHOon4dWu2YG7du0aMGCAutZMhw4dOnXqtHfvXsHUqK145JFHkpKS1N+QrKyswMBAdb+np6erq2tWVpam1dmGd999t2PHjgkJCQ13Zmdn13emwWDw8/OjM5uUmppqNBqTkpKKioo2btx40003lZSUiP/8yQwKCiotLS0rK9O0UhsQEhKSkpISFxfXo0ePUaNGrVq1yt/fX1zVmVlZWQqLn5itpqYmPz+/UQeK//x9F0IEBwdnZmYKLpaxCU8++eTJkye///579aXBYGj4SEKTyVR/EQ2uJyMj44033tizZ0+j/QaDwWQy1b+sra2lM5uk0+ny8/O3bNkSGxsrhBgyZMjHH3+8cOHChj+ZdXV1kiQZDHzCNCEjIyM5Ofnll18eMWLE999/P2/evIMHD4aEhBiNxoadaTQarzf0wdX0er1Op2vYgerv9fV+3/kxtXbPPffc+vXrt2/fXr90bHh4uPpXjBAiJyenpqYmLCxMuwJtw9q1awsKCtSpkszMzOrq6sTExPXr14eHh6empqptysvLi4qK6MwmhYeHCyF69eqlvuzVq9elS5fEf/5kZmRk+Pv7u7i4aFWkrVizZk2XLl3uu+8+IUS3bt0+/vjjdevWJScnh4eHZ2RkqG0yMjLUPoeZ9Hp9cHBwRkZGz549hRAZGRnq73XDXm24n6lRq/baa6+lpKRs2bIlICCgfmdiYuLGjRsrKiqEEKtXr46PjzdneXUHN2PGjG+//fbdd9999913J06cOGTIkBdeeEEIkZiYuGXLluLiYiHEmjVrevbsGR0drXWx1i42NjYiImLfvn1CCJPJ9PPPP6uhmJiYuHr1avXa5i+//JJ7Uczh7++fnp5eU1MjhKiurk5PT1d/2dXOVNvQmS0wefLkL7/8UgihKMrq1avVDhw3btypU6fOnTsnhFDvuBg5cqRg0W1rdvLkyd69e3fq1Kk+59544434+HhZlidPnpyZmdmnT59vvvnm66+/HjFihLal2pY///nPFy9e/Oyzz9SXs2bNOnLkyKBBgzZu3Lh8+fJJkyZpW55NWLVq1cMPPzx58uQjR464u7tv3rzZaDSWlZUNHz7cx8cnKCho586dO3fu7Nq1q9aVWruqqqqxY8dWVFQMGzbsxx9/9PHx2bp1q5OT05UrV+Li4qKjo11cXH755Zc9e/YwV3E948ePLygoOHjwYO/evV1cXLZv3+7l5ZWamhoXFzds2LCioqLc3Nxdu3apN2g+//zz77///rhx47799tsnnnhi4cKFgiC0ZhUVFadOnWq4p0uXLur/pSzLP/zwQ15e3vDhw/n1aC51arR+5Kcoyq5duzIyMuLi4iIiIrStzYZcvHhx37594eHhcXFx6t30Qojq6urvvvuuoqIiISGhyWffQCXL8p49e9LT0yMiIoYOHVp/LrCiomLbtm0mkykhIcHT01PbIq3Z0aNHa2tr61/2799fvQ68uLh427ZtLi4uY8eObThLf+jQoTNnzvTt27d+mQKCEADg0DhHCABwaAQhAMChEYQAAIdGEAIAHBpBCABwaAQhAMChEYQAAIdGEAIAHBpBCABwaAQhAMChEYQAAIf2f0N9fYn8POMFAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deUBVdf7/8c859172iyAIyCqoiDvuC4pLruOSqVmmZlaa9k1r5jc1ldO3cvq2f1umcUZtoxodtzS3+rqkqalRaYlbIoaoLIIgsi/3nvP74zYMIsIFL5zLvc/HX/cePpz79iP48vP5nM85kqqqAgAAZyVrXQAAAFoiCAEATo0gBAA4NYIQAODUCEIAgFMjCAEATo0gBAA4NYIQAODUCEIAgFMjCAEATk2DIExKSkpISGj+z3UMlZWVWpfgOOhMG6IzbYjOtCGTyVRvGw2C8OTJk7t3727+z3UMZWVlWpfgOOhMG6IzbYjOtBVFUcrLy+ttxtQoAMCpEYQAAKdGEAIAnBpBCABwagQhAMCp6a1v+sUXX2zYsMHDw+O//uu/YmNjb26wZ8+etWvXlpaW9u3bd+HChe7u7rarEwCAJmHtiHDTpk2PPPLIxIkTY2Jihg8ffvHixRoN9uzZM23atLi4uFmzZm3atGnhwoW2LhUAANuzdkT41ltvvfjiizNnzhRCHD16dNWqVS+99FL1Bl9//fWdd945b948IYSrq+v9999v81oBALA5q0aEqqr+8MMP8fHxlrfx8fGJiYk12sTFxX3//fc5OTmKonz55ZdDhgyp44TXvMIaVy4AALZl1YgwLy+voqLCz8/P8tbf3z8zM7NGm4kTJ+7bty8oKMjFxSUqKmrfvn23OtvFixf3myJHjhz5WwV6/XPPPderV69G1e90iouLJUnSugoHQWfaEJ1pQ3SmrSiKYk1PWhWEHh4eQoiqG9WUlZV5enrWaLNixYo9e/YkJycHBQW9+OKLU6ZMOXToUK0VBAYGepa1f3bms1VHYmNjvby8rKkEqqrSV7ZCZ9pQS+/MtWvXbtq0SesqfmM2m3U6ndZV2J0nn3yyX79+DfoWRVFKS0vrbWZVELq7u/v5+aWlpYWHhwsh0tLSwsJqzm1+/vnnDzzwQPv27YUQTz/9tJ+fX2ZmZnBw8M1nc3V1NfmE3DGqPf/hAWAn9u/f7+PjM3r0aK0LQe1WrFiRlJTU0CC0krUXy0yfPj0hIWHo0KFlZWVr165dunSpEKK8vHzt2rVTp041Go2hoaE//vijpfGPP/7o7u7u7+9/q7OZZJecUhHA9goAdqN3795333231lWgdjt37my6k1sbhEuXLh0xYkRcXFxOTk50dPS0adOEEAUFBQ888EBcXJzRaHzuuefGjx/fp0+foKCgI0eOvPfeey4uLrc6m8FUeqFIDXBnTAgA0Ji1QRgWFnbmzJmjR496eXl169bNctDPzy89PT0wMFAIERUVderUqV9++aWwsLBz584+Pj51nM2zPDetqEP/NgQhAEBjDbizjMFgGDhwYPUjsixXXwXU6/VVGVk3r7KrFwqt/2QAAJqKNvca9SzLTStSNfloAACq0yYIPUpzCEIAgD3QJgi9ynOZGgUA2AOtpkavXmBECAA2cujQoREjRlheR0REZGVl1WiQkJDw4IMP1nGGgwcPFhUVWV4nJibWfZvMeiUkJDzyyCO3c4bmpE0QGkylBlnklmvy4QDgaCorK69du2Z5/fTTTxuNxhoNysvLi4uL6zjDvffee+HCBcvr8PDwRYsW3U49paWlBQUFt3OG5tSAq0Ztq52XdKFQ9XNlBwUA1CI7O3vnzp1z5syxvM3Nzd22bdsDDzxgeZGSktK6det77rknJCSkxje6ublV3d5yz549+/fv79q1q6r+NglnNpv37t2bmJhoNpvj4+Mt48jdu3eXlJRs3Ljx8OHDI0aM8Pb2dnV1tbRXFGXjxo2nTp2KjIycOXOm5fiOHTs6der0ww8/nDp1Kj4+fsyYMXX8QUpLS9esWXPx4sXY2NgpU6ZYajt//vy6deuKioratWs3Y8YMHx+fnJyc1atXZ2VlBQcHT5kyxXIjs+ah2RPqI7wkrpcBgFvx8fH5wx/+cOLECcvbhISE7du3CyF27tx55syZ9u3b5+bm9unT5+ZZ0Mcee8wyOly5cuWCBQtCQkK+++67N9980/LVwsLCjz76qHXr1m3atFm0aNGqVatu/uhz5849//zzltezZ89+7733goODN2/ePGLECLPZLIR4991377rrrp9//tnPz2/OnDmWwmpVUVERFxe3c+fO4ODgV199dcGCBUKIrKysIUOGSJLUuXPn1NTU8+fPK4oSFxd3+fLlrl27FhYWHj169DZ7r0G0GxEaBdfLALBbOy6p75w0N9vHucpiwx1692r/JLu4uNxzzz2fffbZ66+/LoT49NNPLU+Bve++++677z5Lm5ycnPXr1y9ZsqTWcz7//POff/55XFycECI9Pd1y0MfH51//+pfldWxs7OLFixcsWDB69GgPD4/p06db9oJfuXLF0uD48eNffvnlxYsXvb2958+fHxMTs2XLlqlTpwohxo8f/9prrwkhysrKNm/ePHHixFprWLdunaIo69atkyRp2rRpERERTz31VEZGhp+f35NPPqnX//YHzs3NvXz58nPPPdeqVavGd2JjaRaEEV5SaiEjQgB2akAb6U89mu8REK464X7Tv8dz586dNGnSyy+/fOLEiaysrHHjxgkhTpw4sWTJkvT0dDc3t6tXr94qOXJycnJycvr37295O2jQIMtzZCsrK5944ondu3fLsmwwGLKzs+uo6tSpUz169PD29hZCyLI8ePDgkydPWoIwNjbW0iYkJOTIkSN1nCEuLs4yHerv79+pU6dTp06NGzeuTZs2bdu2nThx4t133/273/3Oz8/vvvvuCw0NHTdu3KRJk2bNmtWcz9/QckS4r+YzDQHAXvi7iVEhGl/E0K9fv4CAgN27d+/cuXP27NkGg0EIsXDhwgcffPChhx4SQixevFhRlFq/193dXVXViooKy3dVPY3o448/Tk5OPnnypIuLy9GjR8eOHVtHAR4eHtUfY1RSUmJ5Kp8Qwsqg8vDwqJ61paWlHh4ebm5u+/btS05O3rJly4IFC5YtW/bggw9+8MEHy5Yt2759+5tvvvnTTz+9/fbb1pzfJjRbI7RcLKPVpwNAizB79uwPP/xw7dq1999/v+VIdnZ2hw4dhBD5+flbtmy51Td6eXn17t3bMgtaUVHx+eefV317WFiY5aEICQkJVe19fHzy8vJqnKR///6//PLLyZMnhRBZWVm7du0aNmxYg+ofNmzYjh07LGdOTEzMyMjo06dPfn6+yWSKjo5+8skn77777tOnT5eWlhYXFwcHBy9YsOCJJ544ffp0gz7lNmk5NUoQAkDd5syZs3Tp0h49evTs2dNyZPHixTNmzBg8ePCvv/7avXv3Or53+fLlU6ZM2bRpU0ZGRrt27SwHZ86cOWTIkLFjxxYUFERHR1c1XrRo0bRp08LDw5ctW1Y13RocHPzuu++OGjWqb9++x44d+/3vf9/QJwIOGzbsgQcesNT/448/rlixws/Pb9u2bQsXLuzdu7fZbE5OTt6xY8fly5cHDx7cp08fNze3Y8eOffDBBw36lNskVV1T22zWrFmzY8eO1atX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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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stPHx+df//qXZTsmJmbRokXz588fMWKEh4fHlClTLNeCX7161dLg+PHjX3311aVLl7y9vefNmxcdHb158+ZJkyYJIcaMGfP6668LIUpKSjZt2jRu3Lhqa1i7dq2iKGvXrpUkafLkya1atXr66afT0tL8/Pyeeuopvf63Hzg7O/vKlSvPP/98s2bN6t+J9aVZELbykpLzGRECsFN9W0h/7Np4j4Bw1Qn3W/4ez549e/z48a+88srJkyczMjJGjx4thDh58uTixYtTU1Pd3NyuXbt2u+TIysrKysrq06eP5WX//v0tz5EtLy9/8sknd+3aJcuywWDIzMysoarTp0937drV29tbCCHL8oABA06dOmUJwpiYGEubkJCQw4cP13CE2NhYy3Sov79/+/btT58+PXr06BYtWrRs2XLcuHH33Xff3Xff7efnN3369NDQ0NGjR48fP37GjBmN+fwNLUeEe6s+0xAA7IW/mxgeovFJDL179w4ICNi1a9eOHTtmzpxpMBiEEAsWLHjooYcefvhhIcSiRYsURan2e93d3VVVLSsrs3xXxdOIPvnkk8TExFOnTrm4uBw9enTUqFE1FODh4VH5MUZFRUWWp/IJIawMKg8Pj8pZW1xc7OHh4ebmtnfv3sTExM2bN8+fP3/p0qUPPfTQhx9+uHTp0m3btr311ls//fTTO++8Y83xbUKzNULLyTJavTsANAkzZ8786KOP1qxZ8+CDD1r2ZGZmtm3bVgiRm5u7efPm232jl5dXjx49LLOgZWVlX3zxRcW3h4WFWR6KEB8fX9Hex8cnJyenykH69Onzyy+/nDp1SgiRkZGxc+fOwYMH16n+wYMHb9++3XLkhISEtLS0nj175ubmmkymqKiop5566r777jtz5kxxcXFhYWFwcPD8+fOffPLJM2fO1Old7pCWU6MEIQDUbNasWUuWLOnatWu3bt0sexYtWjR16tQBAwb8+uuvXbp0qeF7ly1bNnHixI0bN6alpbVu3dqyc9q0aQMHDhw1alReXl5UVFRF44ULF06ePDk8PHzp0qUV063BwcHvvffe8OHDe/XqdezYsd/97nd1fSLg4MGD58yZY6n/xx9/XL58uZ+f39atWxcsWNCjRw+z2ZyYmLh9+/YrV64MGDCgZ8+ebm5ux44d+/DDD+v0LndIqjinttGsXr16+/btq1at8vmsPPl+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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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edeuXbgWxRBubm63bt1qbGwkooaGhlu3bon/2cXOFNugMzth6tSpu3btIiJBEJKTk8UOnDRp0sWLF69cuUJE4hUX48aNI9x025RlZWWFh4cHBgY25dyaNWtGjx7N8/zUqVMLCgr69++/f//+b7/9duzYsdKWal5efvnl3Nzcr776Snw7d+7cs2fPDhs2LCUlJSkpacqUKdKWZxZ27ty5bNmyqVOnnj171tHR8eDBgwqFQqPRjBkzRq1We3p6Hj169OjRo3379pW6UlNXX1//0EMP1dbWjho16t///rdarU5NTbWxsblz5050dHRAQICdnd0vv/xy/PhxzFXcT2xsbFlZWUZGRnh4uJ2dXVpamkqlysnJiY6OHjVqVEVFRXFx8bFjx8QLNN94440NGzZMmjTpwIEDL7zwwtKlSwlBaMpqa2svXrzY/EifPn3Ef0ue5//1r3+VlJSMGTMG/z06SpwabRr5CYJw7Nix/Pz86OhoPz8/aWszI7m5uT/99JO3t3d0dLR4NT0RNTQ0/PDDD7W1tTExMe0++wZEPM8fP3781q1bfn5+I0eObFoLrK2tPXz4sF6vj4mJUSqV0hZpys6dO6fVapveDhw4UNwHXllZefjwYTs7u4ceeqj5LP3p06cvX74cERHRdJsCBCEAAFg1rBECAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBVQxACAIBV+3/Xflt9K1DALAAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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6dq1ay4uLvPmzevWrdv27dsfe+wxIho3btz7779PRFVVVdu2bZswYUKjNSQlJfE8n5SUxBibMmVKUFDQ66+/np+f7+HhsWTJErn83j+4qKjoxo0bb731lqura9s7sa0kC8JwV5arFfQ8ySUblAIANCnWi/0xquOWgLCTkX2D38dz5sxJSEh49913xbV9xo4dS0RnzpxZtGhRXl6eSqW6fft2U8lRWFhYWFhYu47soEGD0tLSiEin0y1evHjv3r0cxykUioZr6tWVmZkZFRXl4uJCRBzHDR48+OzZs2IQ9u7dW2wTEBBw5MiRZo4QFxcnng719PTs2rVrZmbm2LFjvby8/Pz8JkyYMHXq1PHjx3t4eMyYMaNTp05jx45NSEiYOXNmR66/IVkQqmTk68CulgthLnj0NgCYHU8VjQyQ+LdT//79vb299+7dm5KS8tRTTykUCiJasGDBM8888+yzzxLRwoULeb7xU2v29vaCINTU1IjfVbsa0VdffZWVlXX27FmlUpmenj5mzJhmCnBwcKi7jFFFRYWDg4O4bWRQOTg41M3ayspKBwcHlUq1f//+rKys7du3z58/f9myZc8888yXX365bNmyXbt2ffTRRydPnvz000+NOb5JSDkci3Chi7hMCADQtKeeeuqf//znd999N3v2bHFPQUFBly5diKikpGT79u1NfaOTk1Pfvn3Fs6A1NTU//PBD7bd37txZqVQS0fr162vbq9Xq4uLiegcZMGDAhQsXzp49S0QajWbPnj3Dhg1rVf3Dhg1LTk4Wj5yWlpafn9+vX7+SkhK9Xh8REbFkyZKpU6eeO3eusrLy7t27/v7+8+fPX7x48blz51r1Lg9IyiUBu6pZVqkwvjNGhAAAjZs1a9abb74ZFRUVHR0t7lm4cOG0adMGDx58+fLlXr16NfO9iYmJkydP3rp1a35+fu0isk8++WR8fPyYMWPKysoiIiJqG7/wwgtTpkwJDAxctmxZ7elWf3//zz//fOTIkTExMSdOnPjDH/7Q2hUBhw0bNnfuXLH+33//ffXq1R4eHjt37lywYEHfvn0NBkNWVlZycvKNGzcGDx7cr18/lUp14sSJL7/8slXv8oBY7T21HWbTpk3JyckbN278+zk+847wf3FYiLkVtFptwxlC0DboTBOy9M584YUXoqOjFyxYIHUhjSgtLVUoFLXnJIno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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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77///tq1ay4uLosWLerWrduuXbumTZtGROPHj3/rrbeIqKqqaufOnRMnTmy0hm3btvE8v23bNsbY9OnTg4KCXn755fz8fA8Pj+XLl8vl9/7BRUVFN27cWLFihaura9s7sa0kC8JwV5atFfQ8ySUblAIANCnGi/0lquO2gLCTkX2Dn8cLFiyIj49/4403xL19xo0bR0Tnzp1btmxZXl6eSqW6fft2U8lRWFhYWFhYu4/s4MGDU1JSiEin073wwgv79+/nOE6hUDTcU6+u9PT0qKgoFxcXIuI4bsiQIefPnxeDsE+fPmKbgICAY8eONXOG2NhY8XKop6dn165d09PTx40b5+Xl5efnN3HixBkzZkyYMMHDw2POnDmdOnUaN25cfHz83LlzO3L/DcmCUCUjXweWWy6EueDR2wBgdjxVNCpA4p9OAwYM8Pb23r9/f1JS0qOPPqpQKIhoyZIljz/++BNPPEFES5cu5fnGL63Z29sLglBTUyP+rdrdiD777LOMjIzz588rlcrU1NSxY8c2U4CDg0PdbYwqKiocHBzE10YGlYODQ92sraysdHBwUKlUBw8ezMjI2LVr1+LFi1etWvX4449/+umnq1at2rt377vvvnv69OkPPvjAmPObhJTDsQgXuozbhAAATXv00Uf/85//fPXVV/PnzxePFBQUdOnShYhKSkp27drV1F90cnLq16+feBW0pqbmm2++qf3rnTt3ViqVRLRp06ba9mq1uri4uN5JBg4ceOnSpfPnzxORRqPZt2/f8OHDW1X/8OHDExMTxTOnpKTk5+f379+/pKREr9dHREQsX758xowZFy5cqKysvHv3rr+//+LFi1944YULFy606qvcJym3BOyqZhmlwoTOGBECADRu3rx5r776alRUVO/evcUjS5cunTlz5pAhQ65evdqrV69m/m5CQsKUKVO+/fbb/Pz82k1kZ8+eHRcXN3bs2LKysoiIiNrGTz/99PTp0wMDA1etWlV7udXf3/+jjz4aNWpUdHT0qVOn/vSnP7V2R8Dhw4cvXLhQrP+3335bt26dh4fHnj17lixZ0q9fP4PBkJGRkZiYeOPGjSFDhvTv31+lUp06derTTz9t1Ve5T6x2Tm2H2bp1a2Ji4pYtW/51gU+/I/xfLDZibgWtVttwhRC0DTrThCy9M59++unevXsvWbJE6kIaUVpaqlAo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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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ffSRo6Nj/cmDBw/eddddYj/feeedhYWFFy9elK5Gy5CWllZeXj548ODly5d/+eWXFRUV4vlDhw6NGzdOPI6Pjz948KB0NVqMXr16CYKQlZVFROfPn5fL5QEBAUR08OBBdKYxxN+ETTXbgYcPH46OjhbvNePn5xcUFHT06FHC1KileO6552bOnCn+hNy4ccPLy0s87+zsbG9vf+PGDUmrswwrV67s2bPn2LFjG57Mz8+v70y5XO7u7o7ObFNOTo5CoZg5c6ZGo0lJSRk0aFB5eTnd+p3p7e1dUVGh1WolrdQCdO/efdOmTcOHDw8PD7/zzju/+eYbDw8PatKZN27cEHDzE6PV1dUVFxc36kC69eediLp163b9+nXCYhmL8Oqrr547d+6nn34SX8rl8oaPJDQYDPWLaKAleXl5n3zyya+//trovFwuNxgM9S91Oh06s00cxxUXF+/duzcqKoqIYmNj161bt2DBgobfmXq9njEml+M3TBvy8vISExPffffdkSNH/vTTT48++mhqamr37t0VCkXDzlQoFC0NfaApmUzGcVzDDhR/rlv6ece3qblbsmTJzp07Dxw4UH/rWF9fX/GvGCK6efNmXV2dj4+PdAVahuTk5JKSEnGq5Pr167W1tQkJCTt37vT19c3JyRHbVFZWajQadGabfH19iahv377iy759+165coVu/c7My8vz8PBQqVRSFWkptm/f3rt378cff5yIQkND161bt2PHjsTERF9f37y8PLFNXl6e2OdgJJlM1q1bt7y8vD59+hBRXl6e+HPdsFcbnsfUqFn78MMPN23atHfvXk9Pz/qTCQkJKSkpVVVVRLR169a4uDhjbq9u42bMmLF79+6VK1euXLly4sSJsbGxy5YtI6KEhIS9e/eWlZUR0fbt2/v06RMYGCh1seYuKirK39//2LFjRGQwGE6cOCGGYkJCwtatW8W1zd9++y32ohjDw8Pj2rVrdXV1RFRbW3vt2jXxh13sTLENOrMDpkyZ8u233xKRIAhbt24VOzA+Pv78+fPZ2dlEJO64GDVqFOGm2+bs3Llz/fr1CwoKqs+5Tz75JC4ujuf5KVOmXL9+vX///rt27dq2bdvIkSOlLdWyvPbaa5cvX96wYYP4cvbs2WfOnImJiUlJSUlKSpo0aZK05VmEb7755tlnn50yZcqZM2ccHR337NmjUCi0Wu2IESPUarW3t/ehQ4cOHToUEhIidaXmrqamZsyYMVVVVcOGDfvll1/UavW+ffuUSmVRUdHw4cMDAwNVKtXvv//+66+/Yq6iJePGjSspKUlNTe3Xr59KpTpw4ICLi0tOTs7w4cOHDRum0WgKCgoOHz4sbtB86623Vq9eHR8fv3v37kWLFi1YsIAQhOasqqrq/PnzDc/07t1b/L/kef7nn38uLCwcMWIEfjzaS5warR/5CYJw+PDhvLy84cOH+/v7S1ubBbl8+fKxY8d8fX2HDx8u7qYnotra2h9//LGqqmrs2LFtPvsGRDzP//rrr9euXfP39x86dGj9tcCqqqr9+/cbDIaxY8c6OztLW6Q5S0tL0+l09S8HDhworgMvKyvbv3+/SqUaM2ZMw1n6U6dOZWZmDhgwoP42BQhCAACwabhGCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANg1BCAAANu3/AwWVLQgIgmLwAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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o0dERITUxVq7/v37h4aGHj16lIhMJtPx48fFUBw3btyWLVvEtc1ffvklrkUxh0ajuX37dk1NDRFVV1ffvn1b/GEXO1Nsg85sg/Hjx3/55ZdEJAjCli1bxA5MTk6+ePHi1atXiUi84mLo0KGEm25bswsXLvTs2TMyMrI255YsWTJ48GCe58ePH5+dnd2rV6/vv/9+27ZtSUlJ0pZqW1555ZWbN2+uX79efDl9+vTTp08PGDAgLS0tNTX1gQcekLY8m7B58+Z58+aNHz/+9OnTrq6uO3fuVCgUWq12yJAharXaz8/vwIEDBw4ciIqKkrpSa1dVVXXvvffqdLpBgwb9/PPParV69+7dSqWysLAwMTExIiJCpVL99ttvhw8fxlxFU0aNGlVcXHzixImePXuqVKq9e/d6eHjcuHEjMTFx0KBBpaWl+fn5Bw8eFC/QfP3111etWpWcnLxjx44XX3xx7ty5hCC0Zjqd7uLFi3X3dOnSRfy/5Hn+p59+KigoGDJkCH48WkucGq0d+QmCcPDgwaysrMTExNDQUGlrsyE3b948evRoUFBQYmKieDU9EVVXV+/Zs0en040cObLFZ9+AiOf5w4cP3759OzQ0dODAgbXnAnU63Y8//mgymUaOHOnu7i5tkdbszJkzBoOh9mXfvn3FdeBlZWU//vijSqW69957687Snzx58vLly7179669TQGCEAAAHBrOEQIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgENDEAIAgEP7/6u23KikEi2EAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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T58+RHTz5k1Tg7Nnz37//ffZ2dlubm5PPPFERETEjh07HnroISIaO3bsW2+9RUTV1dXbt29/4IEHmqxh8+bNPM9v3ryZMTZp0qTg4OAlS5bk5uZ6enouXrxYKr39AxcVFd24cePFF1+se8xRZxItCENcWUG1UGUgZ9FKAABoVpw3+3tU5z0CwklCykZ/DJOSksaNG/fGG2/89ttv+fn5pr0tf/vtt6effjonJ0ehUNy6dau55CgsLCwsLKx7juyQIUNOnDhBRLW1tYsWLUpOTuY4TiaTNX6mXn3nz5+Piopyc3MjIo7jhg4dmpqaagrC6OhoU5vAwMBjx461cIb4+HjTdKiXl1fPnj3Pnz8/ZswYb29vf3//Bx54YPLkyffdd5+np+eMGTO6dOkyZsyYcePGzZw5szOfvyFaCkkYdXNll8uFKA223gYAq+OloMRAkf86xcbG+vj4JCcn7927d9asWTKZjIjmz58/Z86cuXPnEtHChQt5nm/ya5VKpSAINTU1pq+qexrR2rVr09PTU1NT5XL5qVOnRo8e3UIBzs7O9R9jVFVVVbfFpplB5ezsXD9rdTqds7OzQqE4cOBAenr6jh075s2b9+qrr86ZM2f16tWvvvrqrl273n333dOnT//3v/815/wWIdo1QiLq6Y7LhAAALZk1a9Znn322adOmRx991HSkoKCge/fuRFRaWrpjx47mvlClUsXExJhmQWtqar755pu6L+/atatcLieidevW1bVXq9XFxcUNTjJo0KCLFy+mpqYSUX5+/r59+0aMGNGm+keMGLF7927TmU+cOJGbmztgwIDS0lKDwRAeHr548eLJkyenpaXpdLrKysqAgIB58+YtWrQoLS2tTd/lDok5L4nLhAAALXvkkUf++c9/RkVF9evXz3Rk4cKFU6ZMGTp06JUrV/r27dvC13744YcPPvjgtm3bcnNzQ0JCTAenT5+ekJAwevTo8vLy8PDwusYLFiyYNGlSUFDQq6++WjfdGhAQsHz58sTExIEDB6akpPzv//5vW58IOGLEiMcee8xU/6+//vrJJ594enru3Llz/vz5MTExRqMxPT199+7dN27cGDp06IABAxQKRUpKyurVq9v0Xe4QEzp9p7ONGzfu3r17w4YN6zP45Bzhy7vwIOY2qKioaHyHELQPOtOCbL0zFyxY0K9fv/nz54tdSBPK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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deUBU5d4H8N9zZmGGYRl2BAXcQAERUTRFJRc0U7zlmpbaYqbdtO5N31u367Wst+W23Hq95lKZXtMyTS0lU1NzKZdyFxVwRUD2nRlgZs55/zhGyDrgwJnl+/lr5vhw+PU08OV5zjnPwwRBIAAAAEfFSV0AAACAlBCEAADg0BCEAADg0BCEAADg0BCEAADg0BCEAADg0BCEAADg0BCEAADg0BCEAADg0BCEAADg0CQIwnPnzq1du7b9v699MBgMUpdgP9CZFoTOtCB0pgUZjcZm20gQhBcuXNi7d2/7f1/7UFlZKXUJ9gOdaUHoTAtCZ1oKz/NVVVXNNsPUKAAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODRzg1AQhHfeeScmJiY+Pv67775rsM3HH388dOjQvn37zp07Nzc313JFAgAAtBVzg3D16tWff/75mjVrFi5cOHPmzOTk5DoNNm3a9MYbb7z11lvffPNNUVHRk08+aelSAQAALM/cIPz4448XL14cHR2dmJg4derU1atX12lw+vTphISEuLi4kJCQuXPnnjp1ytKlAgAAWJ5ZQcjz/MWLF/v37y++jY2NPXfuXJ0248ePP3To0NGjR2/evLlq1aopU6Y0ccIil06tKxcAAMCy5OY0KiwsNBqN7u7u4lsPD4/6lwAHDBgwbty40aNHu7q6uru7v/32242d7cqVKz9Wh3Tu3LnmyKpVqwYNGtTy4h1RRUUFY0zqKuwEOtOC0JkWhM60FJ7nzelJs4LQzc2NMVZRUSG+LS8v12q1ddq8/vrrFy9ezM7OdnZ2XrlyZUJCwuXLl2UyWf2zde3a1V3RY9/ifTVHgoODG2wJ9QmC4OLiInUVdgKdaUG23plfffXV1q1bpa7iDpPJhF+J9S1atCg2NrZFX8LzvF6vb7aZWUGoVCoDAgLS0tLEYVxqamrt8ZzoyJEjiYmJzs7ORPTII4/MmzcvOzs7MDCw/tkYY9UaX99OnVwU5nxzAIA2d/DgQa1Wm5CQIHUh0LCVK1eeO3eupUFoJrOCkIgee+yxZcuWjRw5sqioaMOGDStWrCAinU73xhtvLFy40NPTMzw8fNeuXfPmzXNyctq2bZunp6e/v39jZ5PxhrRSoY8Xxv4AYC1iYmImT54sdRXQsN27d7fdyc29a/Tll1+urKzs0KFDt27dJk6c+MADDxCRXq9ftmxZcXExES1ZsoTjuMDAwO7du7/22msbN25sYmjvqs9JKRYs8h8AAABwL8wdEbq7u+/du7egoECtVovzn0Tk5eVVVlZW83rXrl1VVVUVFRWenp5Nn81Nl5VS0uqaAQAALMbcIBR5eXk13cDJycnJyanZ87jpslNKMCIEAADpSbPWqGvF7cuYGgUAACsgTRC66bNTSwQkIQAASE6aIFQY9W5KyqxAFAIAgMQk24YpzJ1dLpbqmwMA2JWff/552LBh4uvg4ODs7Ow6DdauXdv0XgiHDx8uLy8XXx8/fnzw4MH3Us/atWufeeaZezlDe5IyCHG/DACARRgMhqKiIvH1Sy+95OrqWqeBeEt/E2d45JFHbty4Ib4OCgqaN2/evdSj1+tLS0vv5QztqWV3jVpQmBZBCADQqNzc3N27d8+YMUN8W1BQsGPHjscff1x8ceXKFU9Pz6lTp9ZfwEulUtUssPnjjz8ePHgwIiJC+P2uDJPJtH///uPHj5tMpqFDh4rjyL179+p0ui1btvzyyy/Dhg1zc3Oruf+f5/ktW7YkJyd37tx52rRp4vGkpKSwsLBff/01OTl56NCho0aNauI/RK/Xb9y4MT09PTo6+qGHHhJru3r16qZNm8rLy0NCQqZMmaLVavPy8jZs2JCdnR0QEPDQQw8FBQVZrCubI+mIEDeOAgA0QqvV/vWvfz1//rz4du3atTt37iSi3bt3X7p0qWvXrgUFBX379q0/C/rcc8+Jo8NVq1bNmTMnMDDw2LFj7733nvivZWVla9as8fT09PHxmTdvXv099YgoLS1tyZIl4mtxWbGAgIBt27YNGzbMZDIR0UcfffTwww+fOXPGy8trxowZYmENqq6ujouL2717d0BAwNtvvz1nzhwiys7OHjx4MGOsZ8+e169fv3r1Ks/zcXFxGRkZERERZWVlJ0+evMfeaxHJRoQ9tIRn6gHAaiXdEj68YGq3b+fE0eYRcnWtX8lKpXLq1Knr16//17/+RUT//e9/33jjDSKaPn369OnTxTZ5eXlff/31ggULGjznkiVLvvnmm7i4OCLKzMwUD2q12i+//FJ8HR0dPX/+/Dlz5iQkJDg7O0+aNCkyMpKIcnJyxAZnz579/vvv09PT3dzcnn766R49enz77bcTJkwgojFjxrzzzjtEVFlZuW3btnHjxjVYw6ZNm3ie37RpE2Ns4sSJwcHB//M//5OVleXl5bVo0SK5/M5/cEFBQUZGxuLFi2u2OWpPkgVhiAvLrRR0RnKWrAQAgEYN8GF/i2q/LSCcZKSu98tw1qxZiYmJb7755vnz57Ozs8W1Lc+fP79gwYLMzEyVSpWfn99YcuTl5eXl5dXsIztw4MDjx48TkcFgeOGFF/bu3ctxnEKhqL+nXm3JyclRUVFubm5ExHHcoEGDLly4IAZhdHS02CYwMPDo0aNNnCEuLk6cDvX29g4LC0tOTn7ggQd8fHw6dOgwbty4yZMnP/jgg15eXtOnT+/YseMDDzyQmJj46KOPtuf+G5KlEMeoiytLKxV6e2LpbQCwOt4qGhko8W+n2NhYX1/fvXv37t69+7HHHlMoFEQ0d+7cJ5988qmnniKi+fPn8zzf4Neq1WpBEKqrq8WvqtmN6PPPP09NTb1w4YJSqTx58uTo0aObKMDZ2bn2NkY6na5miU0zg8rZ2bl21ur1emdnZ5VKdeDAgdTU1G+//XbOnDlLly598sknP/3006VLl+7cufO99947ffr0v//9b3PObxGSXSMkoh5ahvVlAACa8Nhjj3322WdfffXVzJkzxSO5ubndunUjouLi4m+//baxL3RxcYmJiRFnQaurq7/55puaL+/UqZNSqSSitWvX1rTXarWFhYV1TtK/f//Lly9fuHCBiLKzs/fs2RMfH9+i+uPj45OSksQzHz9+PCsrq2/fvsXFxUajMTQ0dNGiRZMnT7548aJer6+oqAgICJgzZ84LL7xw8eLFFn2XeyTlvGSYOy4TAgA0ZcaMGa+88kpUVFTv3r3FI/Pnz58yZcqgQYOuXbvWq1evJr52+fLlDz300NatW7OyskJCQsSD06ZNGzx48OjRo0tLS0NDQ2saz5s3b+LEiUFBQUuXLq2Zbg0ICPjoo49GjhzZr1+/U6dO/eUvf2npjoDx8fGPP/64WP9vv/22cuVKLy+vHTt2zJ07NyYmxmQypaamJiUlZWRkDBo0qG/fviqV6tSpU59++mmLvss9YkK7r3S2cePGpKSkDRs2/DeN350hbBiGjZhboKysrP4TQtA66EwLsvXOnDdvXu/evefOnSt1IQ0oKSlRKBQ1c5JElJ6enpmZGRUVxXEcEanVaoPBUF5e7uHhQUR5eXleXl7iP1VUVIhPPri5uRmNRo1GQ0Tl5eUXLlwICAjo2LFjaWmpVqsVT2symUpLSzUaDWOsrKysZh+hkpIScT92b29v8Uh5eblSqRSHldXV1dXV1S4uLrVr1uv1BoNBvLhIRLm5uenp6aGhoTVHiouLU1JSVCpVeHi4OHmr0+lSUlKMRmN4eLhYZ22zZ88eOHCgOCFsPnGH+vpnq0PaESH7v+SGZ7cBAEBU/3aYoKCgOo/ZKRQKMQWJyMfHp+a4RqOpuV+m5tFAFxeX++67T3xdk4JEJJPJak5Sezc9d3f3OgPB2rFXk4i1qdVqtVpd89bX19fX17d2A61WO2DAgNpHnJ2d+/TpQ1KQ+BphCpbeBgAASUkZhO5K0sgpC0tvAwCAdKQMQrqz4qi0JQAAgEOTOAh7YMVRAACQlDWMCBGEAAAgGamDEM/UAwCApCRe6BPP1AOANZDJZG+99VY7P8fdGEEQavZRAtHNmzeHDBnSRieXOAg7u7IcPZbeBgCJvfrqq0888YTUVdxRe0lPqBEeHt5GZ5Y4f2SMOruwK6VCFJbeBgDpeHt71yybIjlbX6bH5kh8jZCwVT0AAEhK+iDs4U4pxVIXAQAAjkr6IMSIEAAAJGQFQeiOJygAAEAy0gchlt4GAAAJSR+EWiWp5ZStk7oOAABwSNIHIRFFerDzRRgTAgCABKwiCPt5s9/yEIQAACABqwjCvt7st3wEIQAASMAqgrCfD0aEAAAgDasIws6uTGcUsvVS1wEAAI7HKoKQEfX1ZicxOwoAAO3OKoKQMDsKAAASsZYgxIgQAAAkYS1B2M+b/ZrHS10FAAA4HGsJwiAXRkSZFRgUAgBAu2pZEJaUlOTn57dRKTF4mhAAANqduUHI8/zs2bM7d+4cGRk5ZsyY8vLyOg1WrlzJ7paZmdmiUvrhMiEAALQ7c4Nwy5Ythw4dunHjRmZmptFo/OCDD+o0mDt3rvC7999/f9CgQYGBgS0qBevLAABA+zM3CDds2PDEE0+4ubnJZLI///nPGzZsaKLxunXrnnrqqZaW0t+X+xVPUAAAQPuSm9nu2rVrM2fOFF+HhobeuHFDEATGWP2Wx44du3r16uTJkxs7Fc/z5eXl165dqzkSFBQkl8v91aTk2M1yIdilgdMCAAC0BXODsKysTK1Wi681Gk11dbVer3d2dq7fcs2aNVOnTnV1dW3sVNeuXdu/f/+IESPuVCCXL1++fODAgUTUx0N5OL3KsxOeo2hU/auz0GroTAtCZ1oQOtNSeJ5vcMBWh7lB6OvrW1JSIr4uKipydXVtMAX1ev3mzZt37tzZxKm6des2fvz4BidXB/jzFyvkj7nKzKzKMTXxRwa0FDrTgtCZFoTOtAie5/X65pexNvcaYVRU1IkTJ8TXJ06ciIqKarDZ119/7evrO2jQIDNPW0c/3C8DAADty9wgnDt37tq1a7///vvjx4+/9dZbzz77rHh87Nixe/bsqWn22WefzZ4925yhaINifdhv+QKSEAAA2o25U6P9+vX77LPP3n333aqqqoULF06fPl08Hhwc7OLiIr4uLS3t0KHDjBkzWl2Nt4rcFOxaqdDVDffLAABAezA3CIlowoQJEyZMqHPw448/rnnt5ua2adOmeyyonw/7LR9BCAAA7cRa1hqtgW0oAACgPVldEPbzZnisHgAA2o01BuGpfIFHFAIAQLuwuiD0cCIfNUstQRICAEB7sLogJDxNCAAA7cgagxD3ywAAQLuxxiAc4Mt+zkEQAgBAe7DGIIzzYzfKhFsVyEIAAGhz1hiEMkYPduK+vYkgBACANmeNQUhED4ewbTewGRMAALQ5Kw3CUYHcyXwhv1LqOgAAwN5ZaRCq5TQykEu6hUEhAAC0LSsNQiJ6OJhtu4HLhAAA0LasNwjHBXE/3eYrjFLXAQAAds16g9BdSQN82A+YHQUAgLZkvUFIRA+HcNvwEAUAALQlaw/C72/x1RgTAgBAm7HqIPRTU08t++k2BoUAANBWrDoISZwdxZP1AADQZqw9CCeGsO03eOzTCwAAbcTag7CzK/NRs2O5SEIAAGgT1h6EdOfJesyOAgBAm7CFIAzhvsESMwAA0DZsIAijvRgRnStEFgIAgOXZQBAS0dQu7L9pmB0FAADLs40gfCKU++IKb0AUAgCApdlGEIa6s1B3hl2ZAADA4mwjCInoiVDu81RcJgQAAAuzmSCc0oU7nM1n6ZCFAABgSTYThBo5TQjh1qchCAEAwJJsJgiJ6MlQbk0qVlsDAABLsqUgHOTHZIx+yUEUAgCAxdhSEBLR46HcmhTcOwoAABZjY0E4qzu39QZfZpC6DgAAsBc2FoR+ahragdt8HYNCAACwDBsLQiJ6MpR9noogBAAAy7C9IBzbibtaKlwuxi0zAABgAbYXhHKOHuvGrcUa3AAAYAm2F4RE9FQYty6VL8ctMwAAcM9sMgjD3NmIQO6jZAwKAQDgXsnNb5qRkbFv3z4PD48HHnhAqVQ22CY5OfnEiROurq7x8fE+Pj4WKrIBr/flBnxrnNeT83Rqu28CAAD2z9wR4bFjx6Kiog4fPvzee+/df//91dXV9dv84x//GDly5L59+zZt2vTBBx9YtM66OruyCSHce+dMbfpdAADA7pk7InzttdcWLVr08ssvG43GmJiYbdu2TZ06tXaD/fv3r1q16vz58/7+/m1QZwP+GcNFbzUuiJT5q9vnGwIAgB0ya0RYXV29Z8+eSZMmEZFcLh8/fvzOnTvrtPnyyy9nzpxZVVW1e/fu27dvW77SegKc2Yzu3FtnMCgEAIDWM2tEmJ2dzfN8YGCg+DYwMPDo0aN12ly7dq26uvrhhx8OCwvbs2fPf/7zn2nTpjV4tpKSkkuXLr355pviW47jpk+f3qFDh1ZUvzCcem2n53rwIS6t+GqbZDAYDAbcL2sZ6EwLQmdaEDrTUnieF4TmHzo3KwhNJhMRMcbEtzKZzGg01mlTWVlZVlZ26tQpuVz+3XffPfHEE1OnTuW4BkaclZWVlZWVhYWFNUdKSkp8fX3NqaQODwU9E8r+9wxbOdBR7iA1mUzi/w64d+hMC0JnWhA601IsGYTiZb/c3Nzg4GAiysnJCQgIqNMmICDA29tbLpcTUXx8fGFh4e3bt2sGkbX5+fn16dPnvffeM+dbN+t/+lDoZsP1SqeeWmaRE1o5g8GgUqmkrsJOoDMtCJ1pQehMS+F5Xq/XN9vMrGuEarV64MCBu3fvFt/u3r172LBhRGQymXJzc8W8HTFiRFpamtggJSXFycmpdYO8lnJX0l8jZa+dcpQRIQAAWJa5d42+8sorM2bMKCgouHTpUnZ29vTp04no2rVroaGheXl53t7eM2bM+OCDD55++unIyMjly5e/8sorCoWiLSv/w/wIrvvXxtMFQh8vhxgUAgCABZn7HOHYsWN3795dWVnZp0+f48ePu7i4EJGfn99nn33m6upKRBqN5vjx47169SoqKlqxYsXixYvbsOq7OcvpjX7cnMMmI4aFAADQQsycC4mWtXHjxqSkpA0bNlj2tGN+MN7fgftbb5tcNM58ZWVl4l8ecO/QmRaEzrQgdKaliNcINRpN083sJzZWDZa9d950EdszAQBAS9hPEAa5sNdiZE8dMpkQhQAAYDb7CUIimhfOuShoGXalAAAAs9lVEDKi1YNlb501XSnFqBAAAMxiV0FIRJ1d2d+iZE8fxvwoAACYxd6CkIheiOSMAq26hAlSAABonh0GIcdo9WDZP0+azhdiWAgAAM2wwyAkop5a9nGc7E97TbnNLzIHAAAOzT6DkIgmdeamdWUT9xmrMUUKAACNs9sgJKI3+sk6qNncI9jNBAAAGmXPQciI1gyVncwX8GQhAAA0xp6DkIhcFPTdKNlbZ027buHGGQAAaICdByERBbuwTcPlTxwyppYgCwEAoC77D0IiGuLP3o6Vjf7BdLMcWQgAAHcxd2NeW/d4KFdupPidpoPjZMEu2L8XAADucJQgJKLnwjkjTwm7TAfHyjs4S10NAABYB4eYGq3xQiT3TA9uWJIxBw/aAwAAETlaEBLRi724yV3YqF3GgiqpSwEAACvgcEFIRK/3lY0KZGN+MGIBNgAAcMQgJKJ3B8jGdGQDvjOeKcB9pAAADs1Bg5CIXusre7c/N/J74xdXsO4MAIDjcqC7Ruub1JkLdWcP7TVdKBLe7Cfj8FQFAIDjcdwRoSjKk534k/xErjB+j7HUIHU1AADQ7hw9CInIW0U/jJEHalj/7cYTebhkCADgWBCERERKjlYNlv1vP+5Pe4wv/WrCFoYAAI4DQfiHiZ25MxMUl4pp8A7j5WIMDQEAHAKC8C5+atqeIHsqjBu607gsmeeRhgAA9g5BWBcjeqYH98t4+aZr/JCdxvOFCEMAAHuGIGxYNzd2OFH+TA9u1C7j80dNZbihFADATiEIG8WIZnbnkicpKk3Uc4txy3XcQgMAYIcQhM3wdKJVg2Xr75f94zd+7G7j8VzMlAIA2BUEoVmGdWDnJsrHBXGPHDCN2mU8eBtxCABgJxCE5lJyNK8nlzpZPq0r9/QR09Cdxt0ZiEMAAJuHIGwZBUdPhHKXJsnn9eQWnTDFbDNuvMobcfUQAMBmIQhbQ8ZoWlfu3AT5/w2UfXmVD/rK8OopU3G11GUBAEDLIQjvyWB/tmOUfMcoeUoJdf/a8D8nTGklmC8FALAlCEIL6OvNvhwm+/VPckY0dKdxWJJxwxW+0iR1WQAAYAYEocWEuLJ3+svSpynmR3AbrvIdNxoWHDVhOwsAACvn0BvztgUFRxNCuAkhXHq58HmqMOugqcpEkzuzKV24vt7Y+RcAwOpgRNhWglzYkhju0iT59gSZgqNpB0zdvja+9Kvp5xzBhFEiAIDVaMGI8NSpUytWrKisrJw6deq4cePq/KtOp1u6dGnN2+HDh48aNcoyNdq4KE8W5Sl7ox+dKRC2XOf//LMpUyc82IkbF8RGd+TcFFLXBwDg2MwdEV67dm3YsGE9e/Z84IEHnnjiiaSkpDoN9Hr9v/71L4/fqdVqS5dq86K92Bv9ZGcmyE8+JB/gw9ak8B03GoYnGd86y/+WL2DLJwAASZg7IlyxYsWf/vSnv/71r0RUVFT0/vvvjx07tn6zv/3tb5aszk4FubBnw9mz4VyFkQ7eFvZk8rN+4nP0wohAbmQAG+LPemhxNREAoJ2YG4QnTpyYOXOm+Hro0KEvvfRSg80WLVrEcdzw4cNHjx5tmQLtmkZOD3ZiD3aSEVFmhbA3U9iXJfzvGV5vEuL8uCH+LM6PxXgxOa7kAgC0GXODMDs729PTU3zt7e1dUVFRWlrq5ub2x4nk8qeeeiokJKSwsHDmzJnz5s179dVXGzxVenr6vn37hg8fXvOFixcv7tOnT+v/I+yCO9GkAJoUQESUqaNf8rij+dxnl7kb5RTlIcR6Cf29+H5evDtfwRjGi5ZRUYHOtBh0pgWhMy2F53lzetLcIFSr1VVVVeLryspKxphKpardwN3d/ZNPPhFfx8fHJyQk/P3vf1cqlfVP5efnFxER8fLLL9cciY6OdnFxMbMSRxDmQmG+9AQREZUZ6Nc84Viu8HWG8OIpniOnfj5cX28W400xXixQg5+W1hMEAR88S0FnWhA601J4ntfr9c02MzcIO3XqlJ6eLr6+efOmn59fgyEnioyMrK6uLigo6NChQ/1/dXJy8vf3HzlypJnf2sG5Kmh4ABseIAaeLDm7/LLe+VSBsPyicCpf4Bj18WK9PFmkB4v0YOEeTCWTuGAAANtibhBOnDjxo48+euGFF5RK5bp16yZPniwe3759e1RUVJcuXfLy8jw9PWUyGRGtWbOmY8eO/v7+bVW1AwvSCBH+3MTOd97eqhDOFtCFImF3hvD+eT6tVAjSsJ5aFupOoe6sh5aFuTNvVZNnBABwbOYG4bRp07788svevXt7enrm5+cfOHBAPL5o0aLFixd36dJl06ZNb7zxRlhYWH5+fmlp6fr16zHH3Q46aVgnDY0LutPVBp5SS4TLxUJKCR3OFj5J4VNLBEbUzY11d2eh7qy7G3VzYx01zEdFuAcHAIDMD0InJ6cffvjh/PnzOp2ub9++CsWd58B//vlnV1dXInruuecSExPT09O1Wm1YWFgTE6fQdhQcRXiwCI+7/gTJq6QrpUJqiZBWImy/SVdL+SydkF9Jnk7kq2b+agp2YYP82CA/FuaOv10AwOG0YGUZxlhUVFSdg76+vjWvg4ODg4ODLVMXWI6PinxUbKDvXSEnEOXqKVcv3NbTlRJhX5bw2ileZxQG+XGD/dlj3Th/rIgAAI4Bi247KEbkpyY/NetFNCqQPRtORJRRIRzJFg7cFqK+Mfw9WvZcOIfpUwCwe/g9B3/oqGGPdOVWDZb9nCjfk8lHfmPck4mV3wDAziEIoQHd3dn3o+XvDuCeOWJK3GNML0ccAoDdQhBCoxKDuOSJ8t6ebPAOk94odTUAAG0DQQhNcZbTG/1kfb3Z6su81LUAALQJBCE07/V+3L/O8ToMCgHAHiEIoXmRHuw+X7YKg0IAsEcIQjDL0r7cu+dMGBQCgP1BEIJZIjxYnB+34hIGhQBgbxCEYK5XY7h/nTOVG6SuAwDAohCEYK4ID3Z/BwwKAcDeIAihBZbEcO+dN5VhUAgAdgRBCC0QrmXDA7iPL2JQCAD2A0EILfNaDPfvCxgUAoD9QBBCy4S6syH+3KZrGBQCgJ1AEEKLDfVnJ/OxDDcA2AkEIbRYby92tgBBCAB2AkEILRblyc4XCTyiEADsAoIQWkyrJG8Vu1aGJAQAe4AghNbo7cnOYHYUAOwCghBao7cnnS1EEAKAPUAQQmv09mJnC6QuAgDAEhCE0Bq9PRlGhABgHxCE0Bpd3FhJtVBUJXUdAAD3DEEIrcGIIj3YOQwKAcD2IQihlXp74cZRALAHCEJopXu5THijTMAlRgCwEghCaKV7CcKFJ3js5QQAVgJBCK0U5ckuFwuGlsfZzXLh25t8cXUb1AQA0HIIQmgltZw6aVhKSYsHhf+XzEd6sKIqTI0CgFVAEELrtWIbijIDrUvl/xHNYUQIAFYCQQit14rLhGtS+ISOXC9PhiAEACuBIITWa+mIkBdo2UX++QhOq2TFmBoFAOsgl7oAsGG9PelMS0aE397kfVV0ny8z8FRcTQIRa7viAADMgxEhtF5HDeMFytGb2/7DC/wLkRwRKThSclRhaMPaAADMhCCEexJl9saEp/KFa2X0cMidj5zWiRVXY3YUAKSHIIR7Yv79Mv++wD8fySl+/8RplYT7ZQDAGiAI4Z6Yeb/MbR3tTOefDP3j8+bhRNi8AgCsAYIQ7omZI8LlF02PdeM8nf44ojhy4QoAAB40SURBVFUSpkYBwBrgrlG4J+Ee7HqZUGkilazRNgaePknhj4y768OmVeJRQgCwCuaOCIuKiiZNmuTh4REaGrp9+/bGmvE8/8gjjyQkJFioPLB2So66ubGLRU2N7Y7kCMEurLv7Xc9KYGoUAKyEuSPChQsXchyXkZFx9OjRhx9+OCUlJSAgoH6zFStWXL169ebNmxYtEqxab092plCI8W70mcCd6fy4oLp/cuFmGQCwEmaNCHU63ZdffvnPf/5To9GMHDkyPj7+iy++qN/s5s2bK1asePXVVy1cI1i3Zu+X2ZkuJAbVjUksLgMAVsKsIExPTzcYDBEREeLbqKiolJSUOm0EQZgzZ87bb7/t4uJi4RrBujV9v0xKiVBuoGivekHohBEhAFgFs6ZGCwsLNRoNY3d+l7m7uycnJ9dp8+mnn/r6+o4bN+7gwYNNny01NXXjxo0bN26sOfL9998PGTKkJWU7roqKipr/EVaiu4qdyVfkl5Q3eL/M1jTZ6A6soryyznEVz+XrZOXlZi9L0wassDNtFzrTgtCZlsLzvDk9aVYQenp6lpeX8zzPcRwRlZSU+Pj41G5QVFS0ePHidevWnTx5MjU11Wg0njx5MiIiQqVS1T9baGjo9OnTN2zYYN5/CNxFEARrG3O7uNBAP+OuPOcZ3RqYYNiTY3yxl8zFpe4nwd9NKDeZXFyc6n9Ju7HCzrRd6EwLQmdaCs/zen3zf22bFYSdOnVSKpWXL18ODw8nogsXLsTFxdVuUFZW1rFjx1deeUV8XVZW9swzz2zdujUoKKhVxYONeaYn9945vn4QllTTqXxheEADf5F5OFERpkYBwAqYdY1Qo9FMnTr19ddf1+v1P/3004EDBx577DEiSktLe/TRR4koKCjot9+tXr3aw8Pjt99+Qwo6jnGduJvlVH/R0V23+KEdmHNDf27hrlEAsBLmPkf4/vvvV1VV+fv7P/300+vWrQsMDCQinU534cKFOi1dXV179+5t4TLBusk5eiqMfZbC1zm+85ZQ/8EJEe4aBQArYe5zhJ6enlu3bq1zsHfv3mfPnq1zMCYmZu/evRYoDWzK7DCu91bj2/1lmt8/UyaBdmfwb8c2/BlzV1K5kUwCyXBPAABICmuNgmV01LAh/tyXV/8YFP6cIwS5sI6ahoOOY+Qip1LMjgKA1BCEYDHP9OBWXfojCJPS+XGdmhruYUtCALAGCEKwmNEdWUEVncy/k2070hu9QCjC/TIAYA0QhGAxHKPZYdyqyzwRXSsTCqqEvo0vQEpEHkqsuw0A0kMQgiU9FcZtuc6XVNOOm0JiEMc1eSMMpkYBwBogCMGS/NQ0MoDbcIXfeYsfV2+h7TowNQoA1gBBCBY2tyf3f8n88VxhZEAzny6tkooxNQoAUkMQgoUNC2AC0WB/5qJopiWmRgHAGpj7QD2AmRjR//bjnOXNPyfvoaTUknaoCACgKQhCsLxJnc2aacCWhABgDTA1CpLRKglTowAgOQQhSEarZBgRAoDkEIQgGQ8nPFAPANJDEIJk8BwhAFgDBCFIBlsSAoA1QBCCZFwUZOCpyiR1HQDg2BCEICV3JZVgdhQAJIUgBClhcRkAkByCEKSE+2UAQHIIQpAStiQEAMkhCEFKmBoFAMkhCEFKmBoFAMkhCEFKWFwGACSHIAQpuStZCaZGAUBSCEKQEqZGAUByCEKQEu4aBQDJIQhBSrhrFAAkhyAEKWFqFAAkhyAEKeGuUQCQHIIQpKRVYmoUACSGIAQpeThRMUaEACApBCFIScmRjCOdUeo6AMCBIQhBYh5KVoR96gFAOghCkBhuHAUAaSEIQWJaJwQhAEgJQQgSw+IyACAtBCFIDIvLAIC0EIQgMVwjBABpIQhBYlolHiUEACkhCEFimBoFAGnJzW/K8/zZs2cFQYiOjua4BhK0uLg4JSVFJpP17NlTo9FYrkiwZ1olXS6WuggAcGDmBmF5efmoUaPKy8tlMplcLv/xxx/d3d1rNzhw4MCkSZN69OhRVVV148aN//73vw8++GAbFAz2BneNAoC0zJ0aXblypZOT0+nTp0+dOuXt7f2f//ynToOBAwfm5ub+/PPPv/3225IlS1588UVLlwr2CVOjACAtc4Nw8+bNM2fOlMlkjLFZs2Zt3ry5TgOVSiWTycTXHTp0YIxZskywX7hrFACkZe7U6K1bt0JCQsTXISEht27dqt+murr6n//8Z3Z29vnz51evXt3YqaqqqrKzs3/88ceaIwMGDHB1dW1B1WBHsCUhAEjL3CDU6/VKpVJ8rVKpdDpd/TaMsS5duri7ux87duzQoUODBw9u8FQ5OTnJyclvvvnmnQrk8sWLF/fp06flxTuiiooKOxttKwysqEpRXl7e/t/a/jpTQuhMC0JnWgrP8+b0pLlB6O/vX1hYKL7Oz8/39/ev30ahUMyZM4eIJkyYEBER8eyzz2q12vrNgoKCRowYsWHDBjO/NdQmCIKLi4vUVViSWqAyg8FZ48K1+w++/XWmhNCZFoTOtBSe5/V6fbPNzL1GGBsbe+TIEfH1kSNH+vfv30RjJycnM3MYQMZII6cyg9R1AICjMndEuGDBghEjRoSFhcnl8g8//PD7778Xj4eEhKxZs2b48OGrV68uKirq0aNHQUHBsmXLpk6dWuf5CoDGeDixoirBXYm/nABAAuYGYb9+/b777rvPPvtMEIRvvvlm0KBB4vFZs2Z17NiRiPr3779x48b169e7ubk9//zzjz76aFuVDHYHN44CgIRasLJMfHx8fHx8nYOvvfaa+CI6Ojo6OtpidYEjwZaEACAhrDUK0tMqWVEVnqkHAGkgCEF6HhgRAoB0EIQgPVwjBAAJIQhBelolK8bUKABIBEEI0sOIEAAkhCAE6TW73Gg1T6N2GS8WY9QIAJaHIATpNTsifOsMvy9LOHQbQQgAlocgBOk1vSXhuUJh+UXT36O5X/MQhABgeQhCkF4TI0IDT48fNL3TXzYhhDvRkiC8UCTc953RMvUBgF1rwcoyAG2kiWuEb5/lvVT0eChn5OlGuVBmIFeFWef84gp/GdcUAcAMGBGC9LTKhqdGLxQJy5JNa4bKGJGCoyhPdrrArGwTiL6+JpRWU5XJ0rUCgN1BEIL0XBRUaSIDf9dBI09PHjK9FSvrpLmzK0WsDzNzdvRYruAkowANy63EoBAAmoEgBOkxIncF/ZDBZ+n+yK13z/NaJT0Z9sdHNNabmXm/zKZr/LSunK+KcpvfkhMAHB2uEYJVmB8he/ccn1Ii6I0U6s66u7N9mfyvD8lrb1HY34f94yTf6Cl+xwu0+Zqwfyz3Sw6CEACahyAEq7AkhlsSwxFRcTWllggpJcJz4fJgl7u26u3mzkqqhbxK8lE1dapD2YKfmsLcmZ+a5egFIuz3CwBNQRCCddEqqb8P6+/TQHqx32dHH+zUVLZ9eZWf1pUjIl8V5Va2VZ0AYDdwjRBsSawPO5HX1OyogaetN/jJnRkR+apZrh43ywBAMxCEYEtifZq5X2ZvphDmzkJcxSDENUIAaB6CEGzJAN9m1pfZdI1/pOudT7WvCo9PAEDzEIRgS/zVpJKx62UNx1uliXak8xNC7lxB9FNTDkaEANAcBCHYmCZmR5PS+b7eLMD5ThBiahQAzIEgBBvTRBBuuiZM7fLHR9pXzfIqBcyNAkDTEIRgY/o3stBahZH2ZvIPh/zxkVZypJE3s+UvAACCEGxMP292qkAw1nuGYvsNfrA/83K66+Dvz9QDADQKQQg2xl1JHTXs0t1bLJkEWnHpznP0teEyIQA0C0EItifWm/2af1cQvnGal3NU+wKhyFeNJygAoBkIQrA9de6XOZQtrLps2jhMJqu38hqeoACAZiEIwfbUvl+msIpmHTStjZfXPDVRm4+K8nCNEACahCAE2xPtxVKKBb2RBKInDpke6cJGBTa8DLefmmHdbQBoGnafANvjJKOeWna2UDiSI2TrhC0jGv0Y+6owNQoAzUAQgk2K9WHLL/J7M/njf5IrGp/X8FWzXH3ze/kCgCPD1CjYpFgftuEKv3KwrM7mvXX4qrElIQA0AyNCsEkPduI+GUIPBTfzl5yfmuXocLMMADQFI0KwSX5qeiqs+U+vVklVPOmN7VARANgqBCHYOR8Vy8Mz9QDQOAQh2DlcJgSApiEIwc5hcRkAaBqCEOycr4rlYnEZAGgcghDsHDagAICmIQjBzmEDCgBoWgueIywtLV2/fn1OTs7o0aPj4uLq/KsgCMePHz9y5IhOp7vvvvtGjRpl0ToBWslXRWcLpC4CAKyYuSNCg8EwZMiQffv2qdXqCRMmfPXVV3Ua7NmzZ8aMGVlZWTzPz549e8GCBZYuFaA1fNW4RggATTF3RLh9+3aDwbBlyxaO47p06bJ06dJHHnmkdoPBgwenpKRwHEdEY8eOHTRo0DvvvKNWqy1fMkBL4K5RAGiauSPCAwcOjBo1Ssy5MWPGXLx4MTs7u3YDjUYj/isRMcbkcrlcjvXbQHq+KmrdNcKvrvIdNhiysEIbgL0zN6tu374dGxsrvnZzc1Or1VlZWf7+/vVbmkymhQsXzp8/X6FQNHiqnJyc06dPL1y4sObIrFmzunfv3sLKHVRlZWVjHQsNcmWUXynT6Su5eqtzN9aZ1Ty9fIrbk8X6etHy89WLeyMLm4dPpgWhMy2F53meb37/GXODkOO42qfjeV4mkzX4XWfPnq1QKF5//fXGTuXk5OTk5OTp6Sm+lclk7u7uDZ4N6pPJZOirFlHLyEVBpSaZl1Pdf2qwM7N0NO0geSrpl7GUraeE3dzLvckJXd4cfDItCJ1pKYwxSwZhQEDA7du3xdcFBQVVVVUBAQF12giC8Oc///nq1au7du1ycqr3W+d3Wq02PDz873//u5nfGmpTKBT4U7Gl/NTGQqPMv96GTfU78+Bt4dGfTLPD2D/7yDhGPhrq5Wn8LpOb3hUPGjUDn0wLQmdaCs/zRmPzi+6b++P94IMP7tq1q7Kykoi2bdvWv39/Hx8fIkpLS8vMzCQiQRCef/75M2fOJCUlaTSae6gcwMJ8VWY9U7/5Oj/9gGn9/bJXY2Q186jPhXP/ScbWvgD2zNwgHD16dJcuXYYPH/7ss8++9NJLS5cuFY//5S9/WbFiBRElJSUtW7aM5/kJEyYkJCQkJCRkZGS0VdUALWHmExRfXhU+uI8b1uGugeO4IC5LRyfzcZkQwG614BrhDz/8sGvXrry8vBdffLFr167i8TfffNPFxYWIYmNj9+7dW/tLaq4CAkjLz7wNKI7nCh/eV/dPQxmjeT255Rf5NUNxzQbAPrXgCQe5XJ6YmFjnYFRUlPjCz8/Pz8/PYnUBWI6PGetu3ygTBBKC6l1HJKI5PbiuXxve1st88VgsgD3CLQBg/8xZd/tYrjDQt+EfBw8nejiYW5OKK4UA9glBCPbPnMVljucJA3wbGA6K5kdwKy7xRkQhgD1CEIL981U1vwHFsVzhvsaDMNqLddTQjnQkIYAdQhCC/Wt2arSap/OFQl/vRoOQxOcoLiIIAewQghDsn5+a5TR5s8zpfCFMyzRN3jo2qTOXUkLnC/EcBYC9QRCC/XNXUjVP+sbXlzieJ/T3aWo4SEQKjp4O4z68gEEhgL1BEIJDaPoyYdMXCGv8tRf3Q4aAQSGAnUEQgkNo+jKhmUHoqqCXo7kXjpksWRkASA1BCA6hicVlcvVUXC2EujcfhEQ0tweXraMfMjAoBLAfCEJwCL6N3y9zNJe/z5eZFYNEco7eiuX+esyEZwoB7AaCEBxCExtQHM8VBvi04AdhfDAXqCEsNANgNxCE4BCa2IDCzAuEtb3bX7bkpKnUYInKAEBqCEJwCL6NXCM0CXSqoPlnJ+qI9mKjOnL/Oou7ZgDsAYIQHIJvIxtQXCgSApyZh1OLT/hmP27lJT69HHfNANg8BCE4hMbW3W7FvKgoUMPmhXP/+A1XCgFsXgv2IwSwXb5qanBEeCK3xfOiNf4WJeu11RixxRjjzWK8WYwX6+PN3BRk4CmvUsivpLxKKqwSYrxYV7dWfgsAaAcIQnAIPipWUEW8QNzdkXQsV5gf0cp5ERcFpU6WJxcJpwqEU/nC5mv8uUJBzlGFkbydyFvFvFXk6cQW/GLyVbOHQ9hDwVy0FxIRwOogCMEhKDhyVVBhFXmr/jhYamC3KoRIj9aHk4KjaC8W7cWeDCUiMglUZiCt8q42vCA7mitsv8FP2mfiBXo4hI0P4gb7MxkyEcA6IAjBUYh7UHir/sifk4VcjDeTW+5CuYzVTUEi4hjF+bE4P9m7A+hcofDtTeHF46ab5cLYTtz4YDa6I9f0rhcA0NbwIwiOQnyCIqLWkRP5rHV3yrRalCeL8mSL+3AZFcJ3N4VVl/gnDpoiPVlvTyaOLHt5MDV+KAHaF37mwFH4qtjhbCFcy/zUd478VsDmRkozQdlRw54NZ8+Gc2UGOpUvnC0UjuUKKy/xl0uEEBcW6cEiPVmEliI9WVdXS45ZAaA+BCE4iund2H+S+Q8vmNQy1seL+nizEwXc5y1ZXK0tuCoovgOL73Anjw08XS4WkouE80XCF1foQhGfqRN6uLNenizSg/X2YpEeFOCMq4sAloQgBEfxUDD3UDBHRDfKhDOFwul8YVqIqYOz1GXdTcFRL0/Wy5M98vsRnZEuFgvnCoXzhcLuDP5cocALFOHBempZuAcL17KeWgrUIBoBWg9BCA4nxJWFuLKHgqmsrPFN662Gs5z6ebN+3n9EXa6ekouFy8XChSLh25v8xSKhwkjd3Fh3d9bdjbq7s+5urKvbHzPAANA0BCGAjfFVk6+aDevwRzQWV9OVUiGtREgrpb2ZwopL/LVSQWekLm6siyvr4kohrqyzK4W4sBBX5qqQsHYAa4QgBLB5WmXdUSMRlRnoWplwrVS4VkZpJcLeTOF6Gd0oE5xkFOLKOmlYkAt10rCOGgpyYZ001MGZKXBXDjgkBCGAfXJVUG9P1tuz7uXD/Eq6US5kVAjp5ZReLpzMp1sVfHo55eoFTycK0LBAZ9ZRQ/7OLMCZ/NWsgzN1cCZfFW5eBbuFIARwLN4q8lbVHT4SkUCUraMsnZClE26VU45eOJZLOXo+S0fZOsqtFDydyFfFfNXUwZn5qMhbxfzU5KMiHxXzVpFWYK6S/PcA3DMEIQAQETGiDs7UwZn1pQbuQRWI8vSUWynk6um2TsirpBy9cK2U8iopv5LPq6RQV0XSmPavGsACEIQA0Dz2+0065CG+q6usTE/U8n0dAawAZv0BAMChIQgBAMChIQgBAMChIQhtzLvvvisIDey0Di1lMpk++OADqauwE+Xl5R9//LHUVdiJ3Nzczz//XOoq7MT169c3bdrUbDMEoY15++23jUYbWBjM+pWVlf373/+Wugo7cfv27U8++UTqKuzElStXNm7cKHUVduLcuXPbt29vthmCEAAAHBqCEAAAHBqCEAAAHJoED9TfvHlzx44dXbt2bf9vbQdMJlOPHj2krsIeCIJQXl6Oz6FFGI3G7OxsdKZFVFVVFRQUoDMtQqfTeXh4NNuMtf8tiDzPp6WlKRTYDKY1qqqqnJywfodloDMtCJ1pQehMSxEEwcvLS6vVNt1MgiAEAACwHrhGCAAADg1BCAAADg1BCAAADg1BCAAADg37EVovQRCOHz++f//+wsLCXr16TZs2TalUiv9UUFDw6aef5uTkjBkzJiEhQdo6bQvP8+vWrQsODh4+fLh4pLS0dPXq1VlZWcOGDUtMTJS2PBuSmpr61VdfFRUVRUVFzZo1i+M4Irpx48batWt1Ot2UKVP69esndY22oaioaN26dbdu3QoODp41a5a7u7t4PCUlZf369SaT6dFHH42MjJS2SGt2/fr1kydPFhYWTpkypfYNoqdPn/7qq69UKtWsWbO6dOkiHjQYDGvWrElJSYmKipoxY4ZMJiOMCK3Z9evXp02bVlxc3KlTp+XLl48ePZrneSKqqqoaNGhQcnJy586dZ82atX79eqkrtSXLli174YUX1qxZI741mUz333//sWPHunbt+vzzzy9btkza8mzFnj17+vfvX1JSEhISsn//fnH929u3b8fGxpaVlfn4+IwcOfLw4cNSl2kD9Hr9gAEDfv3116ioqJ9//nngwIFVVVVElJaWNmDAAMaYi4tLXFzcuXPnpK7USuXn58fExKxcufKZZ57Jzs6uOX78+PH4+HhPT8+qqqrY2Nhbt26Jx2fOnLlhw4bu3bsvX758wYIFd1oLYK2qq6uNRqP4uqioSC6XX7hwQRCEL774onfv3jzPC4KwZcuWHj16iK+hWdevX+/Vq9cLL7zw6KOPikd27tzZpUsXsZ/37t0bGBhoMBgkrdEGGAyGjh07btq0qc7xJUuWTJw4UXz91ltvjRs3rt1Lsz1Hjx51c3MzmUyCIBgMBmdn55MnTwqCMH/+/Kefflpss2jRolmzZklYpDWr+e1HRJcuXao5PnHixCVLloivH3300ZdfflkQhLS0NJVKVVhYKAjCrVu3VCpVdna2IAgYEVovhUIhDtuJyGAw8Dzv4uJCRIcOHRo5ciRjjIhGjRp1+fLlnJwcKQu1EYIgzJkz54MPPtBoNDUHDx48OHz4cLGf77///ry8vCtXrkhXo204d+5caWlpv379li9f/vnnn5eVlYnHDx06NGrUKPF1QkLCwYMHpavRZoSEhAiCkJqaSkSXLl2Sy+XBwcFEdPDgQXSmOcTfhPU12IGHDx/u27evuNZMx44du3TpcvToUcLUqK14/vnnp0yZIv6E3L5928fHRzzu6uqqVqtv374taXW2YdWqVZ06dRo5cmTtg9nZ2TWdKZfLPT090ZnNun79ukKhmDJlSnFxcVJSUp8+fUpLS+nuT6avr29ZWVl5ebmkldoAf3//jRs3xsXF9ejR4/777//666+9vLyoXmfevn1bwOInZquuri4oKKjTgXT3zzsR+fn5ZWVlEW6WsQmvvPLKxYsXDxw4IL6Vy+W1tyQ0mUw1N9FAYzIzMz/88MNffvmlznG5XG4ymWreGgwGdGazOI4rKCjYs2dPTEwMEQ0YMGDdunXz58+v/ck0Go2MMbkcv2GakZmZOWfOnHfeeWfo0KEHDhx48sknT5486e/vr1AoanemQqFobOgD9clkMo7janeg+HPd2M87PqbWbunSpTt27Ni/f3/N0rGBgYHiXzFElJOTU11dHRAQIF2BtuHbb78tLCwUp0qysrKqqqoSExN37NgRGBh4/fp1sU1FRUVxcTE6s1mBgYFEFB4eLr4NDw+/efMm3f3JzMzM9PLyUqlUUhVpK7Zt29atW7fZs2cTUWho6Lp167777rs5c+YEBgZmZmaKbTIzM8U+BzPJZDI/P7/MzMyePXsSUWZmpvhzXbtXax/H1KhVe//99zdu3Lhnzx5vb++ag4mJiUlJSTqdjoi2bNkyePBgc5ZXd3CTJ0/etWvXqlWrVq1aNWbMmAEDBrz55ptElJiYuGfPnpKSEiLatm1bz549O3fuLHWx1i4mJiYoKOjYsWNEZDKZfv31VzEUExMTt2zZIt7bvHnzZjyLYg4vL6+MjIzq6moiqqqqysjIEH/Yxc4U26AzW2H8+PGbN28mIkEQtmzZInZgQkLCpUuX0tLSiEh84iI+Pp6w6LY1u3jxYkRERJcuXWpy7sMPPxw8eDDP8+PHj8/KyoqMjPz++++3bt06dOhQaUu1Lf/4xz9u3LjxxRdfiG+nT59+9uzZ2NjYpKSktWvXjh07VtrybMLXX3+9YMGC8ePHnz17VqPR7N69W6FQlJeXDxkyRKvV+vr6Hjp06NChQ927d5e6UmtXWVk5YsQInU43aNCgI0eOaLXavXv3KpXK/Pz8uLi4zp07q1SqM2fO/PLLL5iraMyoUaMKCwtPnjwZERGhUqn279/v5uZ2/fr1uLi4QYMGFRcX5+bmHj58WHxA8/XXX//kk08SEhJ27dr18ssvz58/nxCE1kyn0126dKn2kW7duon/L3me/+mnn/Ly8oYMGYIfj5YSp0ZrRn6CIBw+fDgzMzMuLi4oKEja2mzIjRs3jh07FhgYGBcXJz5NT0RVVVX79u3T6XQjR45sdu8bEPE8/8svv2RkZAQFBQ0cOLDmWqBOp/vxxx9NJtPIkSNdXV2lLdKanTt3zmAw1LyNjo4W7wMvKSn58ccfVSrViBEjas/Snzp1KiUlpVevXjXLFCAIAQDAoeEaIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAODQEIQAAOLT/B0IdR9p0ME4eAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd2AUZd4H8N8zW7KbuukhgZACoYYSEiIERKQjwYIgHUVAUFHO13Kid3gWLGc9Dk+QQywgKIJIky6gdEINkAQIhDTSk002ZXfnef9YLobUTVgyW76fv2YnT2Z/PGzyzfPMzDOMc04AAACOSpC6AAAAACkhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKEhCAEAwKFJEIRnz55dtWpV67+vfdDr9VKXYD/QmRaEzrQgdKYFGQyGJttIEITnz5/ftWtX67+vfaioqJC6BPuBzrQgdKYFoTMtRRTFysrKJpthahQAABwaghAAABwaghAAABwaghAAABwaghAAAByauUHIOX///fejoqIGDRr0yy+/1Nvm888/v/fee/v06TN37tycnBzLFQkAAHC3mBuEy5Yt++qrr1auXPniiy9Omzbt/PnztRqsW7fu7bfffvfdd3/66afCwsKZM2daulQAAADLMzcI//Of//ztb3/r1atXfHz8xIkTv/zyy1oNTp06NWzYsLi4uJCQkLlz5yYkJFi6VAAAAMszKwhFUbxw4ULfvn1NL2NiYs6ePVurzYMPPnjgwIFDhw5du3btiy++mDBhQiMHLHRt17JyAQAALEtuTqOCggKDweDh4WF66enpWfcUYN++fceMGTNy5Eg3NzcPD4/333+/oaNdvnx5d1VIaGho9Z5ly5b179+/+cU7orKyMsaY1FXYCXSmBaEzLQidaSmiKJrTk2YFobu7O2OsrKzM9LK0tFSj0dRq89Zbb124cCE7O9vZ2fmLL74YNmzYpUuXZDJZ3aOFh4d7KDrv+due6j3t27evtyXUxTl3dXWVugo7gc60IFvvzLVr127YsEHqKm4xGo34lVjXSy+9FBMT06xvEUWxvLy8yWZmBaFSqQwMDExJSTEN45KTk2uO50x+//33+Ph4Z2dnInrsscfmzZuXnZ0dFBRU92iMsSoXP7927VwV5rw5AMBdt3//fo1GM2zYMKkLgfp98cUXZ8+ebW4QmsmsICSiqVOn/utf/xo6dGhhYeHq1av/85//EJFOp3v77bdffPFFLy+vrl27bt++fd68eU5OThs3bvTy8goICGjoaDJRn1zMo3ww9gcAaxEVFTV+/Hipq4D67dix4+4d3NyrRl999dWqqqqAgIAOHTqMGzdu5MiRRFReXr5kyZKioiIiWrRokUwmCwoK6tChw1tvvfX99983MrR3K7+ZXMwt8g8AAAC4E+aOCD08PHbu3FlQUKBSqUzzn0Tk7e2t1Wqrt7dt21ZZWVleXl73DGIt7rrMSwhCAACwAuYGoYmXl1fjDZycnJycnJo8jrsuO6m4We8MAABwV0iz1qhbWVZSEUaEAAAgPWmC0L08O6WEIwkBAEBy0gShwlDupqD0MkQhAABITLLHMHXyYElFUr05AIBd+eOPPwYPHmzabt++fXZ2dq0Gq1atavxZCAcPHiwtLTVtHz16dMCAAXdSz6pVq5566qk7OUJrkiwIO2sYLhwFALAIvV5fWFho2v7rX//q5uZWq0FlZWX16mD1mjhx4rVr10zbwcHB8+bNu5N6ysvLS0pK7uQIral5V41aUCcPhutlAAAakpOTs2PHjmnTpple5ufnb968+fHHHzdtXL582cvL67HHHqu7gJdKpapeYHP37t379+/v1q0b/99VGUajce/evUePHjUajffee69pHLlr1y6dTrd+/fpDhw4NHjzY3d29+vp/URTXr1+fmJgYGho6adIk0/6tW7d26tTp+PHjiYmJ99577/Dhwxv5h5SXl69ZsyYtLa1Xr14PPfSQqbYrV66sW7eutLQ0JCRkwoQJGo0mNzd39erV2dnZgYGBDz30UHBwsMW6simSTo1iRAgA0ACNRvPCCy+cO3fO9HLVqlVbtmwhoh07dly8eDE8PDw/P79Pnz51Z0GfffZZ0+hw2bJlc+bMCQoKOnLkyIcffmj6qlarXblypZeXl6+v77x585YvX173rVNSUhYtWmTanjp16pIlSwIDAzdu3Dh48GCj0UhEn3322cMPP3z69Glvb+9p06aZCqtXVVVVXFzcjh07AgMD33vvvTlz5hBRdnb2gAEDGGNdunRJTU29cuWKKIpxcXHp6endunXTarUnT568w95rFulGhBrCrYQAYLW23uCfnje22ts5CfTjELm6xq9kpVL52GOPffvttx988AERffPNN2+//TYRTZ48efLkyaY2ubm5P/zww3PPPVfvMRctWvTTTz/FxcURUUZGhmmnRqP5/vvvTdu9evWaP3/+nDlzhg0b5uzs/Oijj3bv3p2Ibt68aWpw5syZbdu2paWlubu7z549u3Pnzps2bXrkkUeIaNSoUaanDFVUVGzcuHHMmDH11rBu3TpRFNetW8cYGzduXPv27V9++eXMzExvb++XXnpJLr/1D87Pz09PT//b3/5W/Zij1iRZEIa4stwKXqonLL0NAFYo1pe90qP1HgHhJCN1nd/HM2bMiI+PX7x48blz57Kzs01rW547d+65557LyMhQqVR5eXkNJUdubm5ubm71c2T79et39OhRItLr9QsWLNi1a5cgCAqFou4z9WpKTEzs0aOHu7s7EQmC0L9///Pnz5uCsFevXqY2QUFBhw8fbuQIcXFxpulQHx+fTp06JSYmjhw50tfXt02bNmPGjBk/fvzo0aO9vb0nT57ctm3bkSNHxsfHT5kypTWfvyFZEAqMwt3Y5RLeyxtLbwOA1fFR0dAgiX87xcTE+Pn57dq1a8eOHVOnTlUoFEQ0d+7cmTNnPvnkk0Q0f/58URTr/V61Ws05r6qqMn1X9dOIvvrqq+Tk5PPnzyuVypMnT44YMaKRApydnWs+xkin01UvsWlmUDk7O9fM2vLycmdnZ5VKtW/fvuTk5E2bNs2ZM+fNN9+cOXPmihUr3nzzzS1btnz44YenTp365JNPzDm+RUh2jpCIOmtwmhAAoDFTp07973//u3bt2unTp5v25OTkdOjQgYiKioo2bdrU0De6urpGRUWZZkGrqqp++umn6m9v166dUqkkolWrVlW312g0BQUFtQ7St2/fS5cunT9/noiys7N37tw5aNCgZtU/aNCgrVu3mo589OjRzMzMPn36FBUVGQyGiIiIl156afz48RcuXCgvLy8rKwsMDJwzZ86CBQsuXLjQrHe5Q5KNCImokwddwq2EAAANmzZt2muvvdajR4+ePXua9syfP3/ChAn9+/e/evVqZGRkI9+7dOnShx56aMOGDZmZmSEhIaadkyZNGjBgwIgRI0pKSiIiIqobz5s3b9y4ccHBwW+++Wb1dGtgYOBnn302dOjQ6OjohISEv/zlL819IuCgQYMef/xxU/0nTpz44osvvL29N2/ePHfu3KioKKPRmJycvHXr1vT09P79+/fp00elUiUkJKxYsaJZ73KHGG/1lc7WrFmzdevW1atXf3tZ3H6DrxmMBzE3g1arrXuHELQMOtOCbL0z582b17Nn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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVzU1f4/8Pf5zMIAAwwMm+wiIoIiqKiJqRmamlhmoubWilrZte7Xun2r6/2Zt2yv27U0u26lX7dccin3hdwyNwQVMFc2QWBYB5iZz+f3x3iJWAcc+czyev7R4zMfDp85ngZenPM5n3OYIAgEAABgrzixKwAAACAmBCEAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1EYIwNTV15cqVHf++tkGn04ldBduBxjQjNKYZoTHNSK/Xt1pGhCBMS0vbu3dvx7+vbaiurha7CrYDjWlGaEwzQmOaC8/zNTU1rRbD0CgAANg1BCEAANg1BCEAANg1BCEAANg1BCEAANg1U4NQEIRFixbFxsYOHjz4xx9/bLLMV1999eCDD/bu3XvWrFkFBQXmqyQAAMD9YmoQLl26dOXKlStWrJg3b960adPS0tIaFFi/fv3ChQsXLVq0efPmkpKSZ5991txVBQAAMD9Tg/Drr7/++9//HhMTk5iYOGnSpGXLljUocPbs2eHDh8fHx4eEhMyaNevMmTPmrioAAID5mRSEPM9fvHgxLi7O+DIuLi41NbVBmccee+zIkSNHjx69fv36kiVLkpKSWrhgiTKwfdUFAAAwL6kphYqLi/V6vZubm/Glu7t741uA/fr1GzNmzKhRo1xcXNzc3D744IPmrnblypV9tSGdO3euO7N06dKBAwe2vfL2qLKykjEmdi1sBBrTjNCYZoTGNBee501pSZOC0NXVlTFWWVlpfFlRUaFSqRqUeffddy9evJifn+/k5LRkyZLhw4dfvnxZIpE0vlqXLl3cZBH739lfdyY4OLjJktCYIAhKpVLsWtgINKYZWXtjrlu3bvPmzWLX4i6DwYBfiY3NmzevbmDSRDzPa7XaVouZFIRyudzPzy8rK8vYjcvMzKzfnzP65ZdfEhMTnZyciGjixImzZ8/Oz8/39/dvfDXGWK2zt3dgoFJmypsDANx3hw8fVqlUw4cPF7si0LQlS5akpqa2NQhNZFIQEtHUqVP/9a9/JSQklJSUrFmz5uuvvyaiqqqqhQsX/s///I+Hh0dkZORPP/00e/ZsBweHLVu2qNVqX1/f5q4m4WszS4Xenuj7A4Cl6N2794QJE8SuBTRt9+7d9+/ips4affPNN2tra319fcPCwsaPHz9y5Egi0mq1//73vzUaDRHNnz9fIpH4+/uHhYW9++67a9eubaFr71J1O6NUMMs/AAAA4F6Y2iN0c3Pbs2dPcXGxQqEwjn8SkVqtLisrqzvetWtXTU2NVqttfAexAVdtHoIQAAAsgalBaOTh4dFyAQcHBwcHh1av41qVn1HapncGAAC4L8RZa9SlMi9Dgx4hAACIT5wgdK3KyygVeEQhAACITZwglBmqVXKWU4UkBAAAkYm2DVM3N7qsEevNAQBsytGjRx966CHjcXBwcH5+foMCK1eubHkvhJSUlIqKCuPxyZMnBw0adC/1Wbly5cyZM+/lCh1JvCBUMUwcBQAwC51OV1JSYjz+29/+5uLi0qBATU1N3epgTZo0adL169eNx0FBQbNnz76X+mi12rpnCixf22aNmlE3N4b5MgAAzSkoKNi9e/e0adOML4uKirZv3/70008bD65cueLh4TFx4sTGC3gpFIq6BTb37dt3+PDhqKgoQbj7+9ZgMBw4cODkyZMGg2Hw4MHGfuTevXurqqo2bdp07Nixhx56yNXVtW7+P8/zmzZtSk9P79y58+TJk43nd+7c2a1bt1OnTqWnpw8ePHjEiBEt/EO0Wu3atWtv3rwZExPz+OOPG+v2+++/r1+/vqKiIiQkJCkpSaVSFRYWrlmzJj8/38/P7/HHHw8KCjJbU7ZGtB5hBHqEAADNU6lUr7322oULF4wvV65cuWPHDiLavXv3pUuXunTpUlRU1KdPn8ajoC+//LKxd7h06dLk5GR/f/8TJ058/PHHxq+Wl5cvX77cw8PDy8tr9uzZ33zzTeO3zsrKmj9/vvF46tSpX375pZ+f35YtWx566CGDwUBEX3zxxbhx486dO6dWq6dNm2asWJNqa2vj4+N3797t5+e3aNGi5ORkIsrPzx80aBBjrHv37teuXfv99995no+Pj8/Ozo6KiiovLz99+vQ9tl6biNgjxD1CALBcO28Jn6cZOuztHDja+LDUsd6vZLlcPnHixO++++7DDz8kotWrVy9cuJCInnrqqaeeespYprCwcMOGDa+88kqT15w/f/4PP/wQHx9PRDk5OcaTKpXq//7v/4zHMTExc+bMSU5OHj58uJOT05NPPtmjRw8iun37trHA+fPnd+3adfPmTVdX1xdeeCEiImLbtm1PPPEEEY0aNcq4y1B1dfWWLVvGjBnTZB3Wr1/P8/z69esZY+PHjw8ODn799ddzc3PVavW8efOk0rv/4KKiouzs7Hfeeadum6OOJFoQBitZUY1QoSMsvQ0AFqi/F3sjuuO2gHCQkGOj38czZsxITEx87733Lly4kJ+fb1zb8sKFC6+88kpOTo5Cobhz505zyVFYWFhYWNivXz/jywceeODkyZNEpNPp5s6du3fvXo7jZDJZ4z316ktPT4+OjnZ1dSUijuMGDhyYlpZmDMKYmBhjGX9//+PHj7dwhfj4eONwqKenZ7du3dLT00eOHOnl5dWpU6cxY8ZMmDBh9OjRarX6qaeeCggIGDlyZGJi4pQpUzpy/w3RgpBj1MWVZZUJsWosvQ0AFsdTQQn+Iv92iouL8/b23rt37+7du6dOnSqTyYho1qxZzz777HPPPUdEc+bM4Xm+ye91dHQUBKG2ttb4XXW7Ea1YsSIzMzMtLU0ul58+ffqRRx5poQJOTk71tzGqqqqqW2LTxKBycnKqn7VardbJyUmhUBw8eDAzM3Pbtm3JyckLFix49tlnv/322wULFuzYsePjjz8+e/bsZ599Zsr1zUK0e4SE+TIAAK2ZOnXqf/7zn3Xr1k2fPt14pqCgICwsjIg0Gs22bdua+0alUtm7d2/jKGhtbe0PP/xQ9+2BgYFyuZyIVq5cWVdepVIVFxc3uEi/fv0uX76clpZGRPn5+Xv27BkyZEib6j9kyJCdO3car3zy5Mnc3Nw+ffpoNBq9Xh8eHj5v3rwJEyZcvHhRq9VWVlb6+fklJyfPnTv34sWLbXqXeyRaj5CIIlR0GfNlAACaN23atLfeeis6OrpXr17GM3PmzElKSho4cODVq1d79uzZwvcuXrz48ccf37x5c25ubkhIiPHk5MmTBw0a9Mgjj5SVlYWHh9cVnj179vjx44OCghYsWFA33Orn5/fFF18kJCT07dv3zJkzr776alt3BBwyZMjTTz9trP9vv/22ZMkStVq9ffv2WbNm9e7d22AwZGZm7ty5Mzs7e+DAgX369FEoFGfOnPn222/b9C73iNXNqe0wa9eu3blz55o1a76/wu+8JfzfQ9iIuQ3Ky8sbPyEE7YPGNCNrb8zZs2f36tVr1qxZYlekCaWlpTKZrG5Mkohu3ryZk5MTHR3NcRwROTo66nS6iooKd3d3IiosLFSr1cYvVVZWGp98cHV11ev1zs7ORFRRUZGWlubn5xcQEFBWVla3X5DBYCgrK3N2dmaMlZeX1+2yUFpaatyP3dPT03imoqJCLpcbu5W1tbW1tbVKpbJ+nbVarU6nM95cJKKCgoKbN2+Gh4fXndFoNBkZGQqFIjIy0jh4W1VVlZGRodfrIyMjjfWs7/nnn3/ggQeMA8KmM+5Q3/hqDYjZI+zmxj690PToNgAAGDWeDhMUFNTgMTuZTGZMQSLy8vKqO+/s7Fw3X6bu0UClUjlgwADjcf1d8yQSSd1F6u815Obm1qAjWD/26hKxPkdHR0dHx7qX3t7e3t7e9QuoVKr+/fvXP+Pk5BQbG0tiEPMeYYSKZZV1eIcUAACgHjGD0EVGLjLKrkQUAgCAaMQMQiKKcGMZeKweAADEI3IQdlMxTBwFAAARiR2EeJQQAABEZQFBiB4hAACIR8zHJ8j4TD3uEQKA2CQSyfvvv9/Bz3E3RxCEun2UwOjGjRsPPvjgfbq4yEEYrGR3sPQ2AIjtH//4xzPPPCN2Le6qv6Qn1ImMjLxPVxY5CDlGYVh6GwDE5unpWbdsiuisfZkeqyPyPULCfBkAABCV+EEYoaKMUrErAQAA9kr8IMTEUQAAEJFFBOFlDI0CAIBILCAIsfQ2AACIR/wgdJWRq4xh6W0AABCF+EFIRD3cKbVY7EoAAIBdsogg7OvFfitEjxAAAERgGUHoyU7fQRACAIAILCMIvdipQl7sWgAAgD2yiCAMdGZE2KoeAABEYBFBSER9PNlvGB0FAIAOZylB2NcLtwkBAEAEFhOEnhwmjgIAQMezlCCM88LQKAAAiMBSgtDHkRQSdr0cWQgAAB2qbRvzpqWlVVdXx8bGSiSSBl+qqampqqqqf8bV1bVxsRb09WSn7gghLtihFwAAOo6pQVhTU5OYmHjjxg1XV1etVnvgwAFvb+/6BX744Yd33nnHeKzVam/fvp2bm+vj42N6Vfp4stN3hAmdTf8OAACAe2Xq0Oj3339fVFR04cKFU6dORUVFffzxxw0KPPXUU7//18yZMxMSEtqUgmS8TYj5MgAA0LFMDcKNGzdOmTJFLpcT0TPPPLNhw4bmSgqC8N133z333HNtrUqcFzt9B/sxAQBAhzJ1aPTmzZudO98dtQwJCcnJyTEYDE3eAty/f39JScljjz3W3KVqamry8/P37dtXd6Z///4uLi4eDuTuwK6UCl3dcJsQAAA6iKlBqNVqHRwcjMcKhUKv19fW1jo6OjYuuXz58qlTp9YVbuz27dvp6envvfee8aVMJnv77bdjY2OJKEYl+yW7tpME6442q7KykjH8oWAeaEwzQmOaERrTXHieN6UlTQ1CX1/foqIi4/GdO3dUKlWTKajRaLZu3Xrs2LEWLhUUFPTwww+vWbOm8Zf6+/JpFdJnlG2Ya2pvBEFQKpVi18JGoDHNCI1pRmhMc+F5XqvVtlrM1HuE/fr1S0lJMR7/8ssv/fr1a7LY999/HxUVFRMTY+JlG8DGhAAA0MFM7RHOnj27X79+MTExnp6e//znP1evXm08HxMTM3/+/HHjxhlfLl++/IUXXmh3bfp6snNFgkEgCUYFAACgQ5gahBEREXv27FmyZEl1dfWKFStGjRplPJ+UlBQaGmo8LisrGzFixOTJk9tdGzc5+TqxjFIhUoUkBACAjtCGlWUGDBgwYMCABif/93//t+7Y1dV10aJF91ihvp7st0IEIQAAdBBLWWu0DjYmBACAjmRxQYj5MgAA0JEsLgh7q1lqsaDDk4QAANAhLC4IlTIKVrKLGnQKAQCgI1hcEBJW3wYAgA5kiUGI+TIAANBhLDEIH/Bhh/MQhAAA0BEsMQj7eLIKHV3GbUIAALj/LDEIGdFjwWzLDQQhAADcd5YYhEQ0LoTbch2PUAAAwH1noUE4pBO7Xi7cqkSnEAAA7i8LDUIJo0eDuK3XEYQAAHB/WWgQEtG4YIbRUQAAuN8sNwhHBHBni4TCarHrAQAANs1yg1AhoQR/bsdNdAoBAOA+stwgJKJxIWwLbhMCAMD9ZNFB+GggdziPL9eJXQ8AALBdFh2EbnIa6MN+zsboKAAA3C8WHYR098l6jI4CAMD9YulB+Hgw99Mtvtogdj0AAMBGWXoQejtSDw92MBedQgAAuC8sPQiJaFwwt+UGbhMCAMB9YQVB+EQI23aDN6BPCAAA94EVBGGIC/N3Yr/kIwkBAMD8rCAIiWhKGLc6C6OjAABgftYRhNPCuC038GQ9AACYn3UEobcjDe3EbbiKTiEAAJiZdQQhET0bzi3PRBACAICZWU0QjgxgNyrokgZTZgAAwJysJgilHE0PYyvRKQQAALOymiAkomfCudVZvA5RCAAA5mNNQdjVjXV1Y7tuIQkBAMBsrCkI6e6UGdwmBAAAs7GyIJwQyv2Sz+dViV0PAACwFVYWhM5SGt+Z++4KRkcBAMA8rCwIiejZcO4/GTyGRwEAwCysLwgHeDMpo2O3EYUAAGAG1heERPRsN+4/GRgdBQAAM7DKIJzelfvxBp9diU4hAADcK6sMQi8FzezOvXsWnUIAALhXUtOLbt26ddu2bWq1+sUXXwwNDW1coLa2dvny5cePH3dzc5s4cWJ8fLz56tnQvGhJ+Abdaz25bm7s/r0LAADYPFN7hGvWrHnxxRcfeughmUw2cODAkpKSBgUMBsPo0aM3bNgwePDg8PDwjIwMc1f1T1RymttDsuAMOoUAAHBPTO0Rfvjhhx999NGUKVOI6MyZM6tWrZo7d279AqtXr87Nzb1w4YJEIjF/NZvylx5c1w26c0VcjBqdQgAAaCeTeoSVlZWpqalDhw41vhw6dOixY8calNm/f/+ECRPWrVv39ttvb9261by1bJKzlP7WSzIfnUIAALgHJvUI8/PzicjT09P40svLKy8vr0GZa9euHTp0aOzYsT169HjzzTePHz/+wQcfNHm17OzslJSU8ePH152ZN29edHR0O2o/PZg+vyA7eLO2v6e9zCDVarUd1ue2eWhMM0JjmhEa01x4nheE1tPBpCBUKBREVFtb6+DgQETV1dWOjo4Nysjl8sjIyK+++oqI+vfv/8ADDyxYsMBYvgG1Wh0cHDxx4sS7NZBKw8PDjW/RVgqit2OFf6TKDo62yumv7aDT6drXVtAYGtOM0JhmhMY0F57na2pqWi1mUhD6+PjIZLKbN29GRUUR0a1btwICAhqUCQwMdHZ2Nh536dJFp9PduXPH39+/8dUcHR2DgoKSkpJMeetWzQinjy/oD+SxBH+7uFPIcRzH2Uvq329oTDNCY5oRGrODmdTWUqk0MTFxzZo1RFRVVbV58+Zx48YRUUVFxaZNm2pra4lowoQJKSkpOp2OiA4cOODj4+Pn53c/a36XhNH/68O9ecpgL2OjAABgVqb+0bFgwYKVK1eOHj26b9++UVFRo0ePJqK8vLwJEyaUlZUR0ejRoyMiImJjY8ePHz979uxvvvmGsQ7qoj3ZmeOJNl3DrBkAAGgzUx+fiIqKyszMPHHihLu7e+/evY0hFxISkpWV5eHhQUQSiWTTpk1nz57VaDTLli0znuwYjGjxQMm4vfqhnTgvjKsDAEBbtGFlGaVSmZCQUP+MTCYLCwurfyY2NtY89WqjAd5schfurycMq4diqhUAALSB7dyPXdhXcqJQ2HoDA6QAANAGthOETlJaOVgy5xhf0vpcWQAAgLtsJwiJaKAPGxvM5v1qELsiAABgNWwqCInow36SQ3nC7mw8TAEAACaxtSB0ltI3gySzjhrKdWJXBQAArIGtBSERDfNjCX7sDQyQAgCACWwwCIno4/6S3dnCmiuYQQoAAK2wzSB0k9OORyR/PWk4UYCbhQAA0BLbDEIi6q5iK4dIn9xvuFWJLAQAgGbZbBAS0cgA9nIk99geQ6Ve7KoAAIClsuUgJKK/9eJ6e7IZh7E3BQAANM3Gg5CI/j1QklMpLDyLiTMAANAE2w9ChYS2DJd+m8Gvv4osBACAhtqw+4T18nWk7SMkj/ykd5TQ2GDbz34AADCdXQQhEUV7sJ9GSkf+rJdw7NHADtoxGAAALJ8ddY9i1GzrcOnTh/U/3cLUGQAAuMuOgpCIBnizbcOlTx/RH8pDFgIAAJG9BSERDfRhPzwsnXhAn5KPLAQAAPsLQiIa5MtWDZE+uV+P3ZoAAMAeg5CIRgawLQnS51IMH5zHMxUAAHbNToOQiAb6sJNjJT9c5586aNBiDTYAAHtlv0FIRP7O7MgYqYyj+O36mxUYJgUAsEd2HYREpJDQyiGSCaFc/HbDcezZBABgf+w9CImIEb3Zi1sySPLEXv3fTxt0uGkIAGBPEIR3PRrIzj8hSy2mvlv1qcXoGgIA2AsE4R+8HWnrcMlfe3IJu/QfnOd5pCEAgB1AEDY0vSt34jHpjlv88J/0v5chDAEAbByCsAmhLuzQo9JHA7kBP+oXnuVrcdcQAMB2IQibJmH0Wk/u/BPSzFIhapN+bw66hgAAtglB2BI/J7Z6qOST/twLKYYZhw0FWrErBAAA5oYgbN3YYC79Sam3giI36eadNOQjDgEAbAiC0CTOUvqovyT9SZmEo+4bddMPGTCPBgDANiAI28DHkRbFSTImyPydqf82/fMphoxSxCEAgHVDELaZtyO9HyfJSpIFKdmQHfrH9hqwtSEAgPVCELaTuwP9PZa7MUk2PoTN/MXQZ6t+dRavx4MWAADWBkF4TxwkNL0rlzZe+nYMt/Qy33WjfuFZPqcSHUQAAKuBIDQDjtG4EO5oonTnI5IKvRC7RT/8J/3GazzW7wYAsHwIQnOKVLFFcZLrk2TTwrgv0/ngdbpXTxiOFwjoIQIAWCyp2BWwQU5Smt6Vm96VyywV1l0VXkgxlOvoyc4sqTPXz5sxsasHAAD1tS0IeZ7X6/Vyufw+1cbGhLuxv8eyv8dyFzXChqv8s0cMFXp6NJAlBnEP+TGFROz6AQBAm4ZG33rrLZVK5eXlNXHiRK224fIqxcXFHvW89957Zq2ndYtUsX/0lqQ/Kf15pCTEhb1/3uDzvW7cXsN/MvjcKoybAgCIydQe4c8//7x69eqMjAwPD4+RI0d+8sknb7/9dv0CgiBoNJqioiLjS4VCYeaa2oTuKtZdxV6P5opq6Kdb/I6bwhu/GnydWII/G+7PDfFlSpnYVQQAsDOm9ghXrVo1Y8aMTp06OTg4zJ07d/Xq1U0Wc/8vR0dH81XSBqkdaGoYt26YpGCqbOUQiY8j+yTV0GmtbvAO/TunDT9nC2U6sasIAGAfTO0RXrlyZcyYMcbjyMjIq1evGgwGieRPt7kEQfDz82OMDRs27KOPPvL19W3yUoIg1NbWlpSU1J1RqVTMXieRcIz6erK+nuzNXlyVnlLyhaO3+UXnDafvCGGu7EFfNtCbDfBmIS522j4AAPebqUGo0WiUSqXxWKlUGgyG8vJylUpVV8DZ2fnQoUN9+/a9ffv23LlzJ02adOjQoSYvdeXKlR9//HHfvn13ayCVfv/99/Hx8e3/R9iQeBXFq+j1bqTj6WwJd7yQrc3i/nqS0/NCX7UQpxainGof8KtUyXFn0QwqKyvt9i8ws0NjmhEa01x4njelJU0NQk9Pz9LSUuOxRqORy+Vubm71CygUiiFDhhBRaGjoV199FRgYWFJS4u7u3vhSXbt2ffLJJ9esWWPiW9utYa40LPjucXalcLJAOFEgfP678rnTnJeC9fZkfTxZb08Wq2ZeuCHbLoIg1P15B/cIjWlGaExz4Xm+8dTOxkwNwsjIyDNnzkyfPp2Izp4927179xZiVqfTMcY4Dk/rm02AMwvozMZ3pvLyKmelS2apcKZIOHNHeP8cn1osyDjq4c56erAodxbtwcLdmApPuAAAmMbUIExOTh41atSECRN8fX3ff//9F1980Xj+mWeemTJlSkJCwpEjRyoqKnr06FFQUPD666+PGjWqQZcRzIVjFKFiESr2VJe7Z3IqhXQNpRYLR28LSy7xGaWCk5Qi3Fg3FQt3Y+GuFO7GQl2ZHH+ZAAA0YmoQ9u/f//PPP3/ppZeqqqomT548c+ZM43me5wVBICK9Xv/RRx9dv35dpVINGzaswcMVcF/5OzN/Zxrh/0cfPadSyCilzFIhs1Q4mCtkldGtCqGTEwtzpa5uzN+J+TmRlyPr5Ei+TuSlYDJkJADYKyZ0+EKYa9eu3blzJ+4Rtk95ebmLi0s7vlHP0/UK4UoZZZUKeVVCnpYKtEK+lvKrqEwnxKpZvA+L9+EG+jAPB7PX2kK1uzGhMTSmGaExzcV4j9DZ2bnlYlhr1F5IOQpzZWGuNDKg4c3dch2dKBCO3ua/SDdMOSgEOLOXo7jkCE6CaWsAYAcQhEAuMhruz4b7S4jIINCvhcJbpwzLLvP/HigZ6IMwBAAbh1tD8CcSRg94swOPSv9fH27KIUPSfkM29hkGAJuGIISmJQZxaeOlXVyp9xb9ssvYYhgAbBaCEJrlLKX34yS/JErf+s2QVYp+IQDYJgQhtCLcjb0SJXn3LDqFAGCbEITQurk9uL05/GUNOoUAYIMQhNA6pYzmREkWnkOnEABsEIIQTPKXHtz+HP4SOoUAYHMQhGASZynN7SFZgDuFAGBzEIRgqpejuEO5/IVidAoBwKYgCMFUzlL6azTuFAKArUEQQhu81J07els4j04hANgQBCG0gaOUXuvB4ZlCALAlCEJom9ndueO3hVR0CgHAViAIoW0cpTQljG2/iSAEABuBIIQ2i1Wz80UIQgCwEQhCaLNeanYOQ6MAYCsQhNBm3dxYbqVQoRO7HgAA5oAghDaTMOquYmkl6BQCgC1AEEJ79FKzc7hNCAA2AUEI7dHLg+GxegCwDQhCaI8YTBwFAFuBIIT26KVmF0oEHlEIANYPQQjt4SojTwX7vQxJCABWD0EI7RSD24QAYBMQhNBOvdSEIAQAG4AghHbq5cHOF7Xze1dn8Z9ewBYWAGAREITQTu1+lJAXaMFZHvtXAICFQBBCO3V2YWU6obimzd+4/SZ/q0Ioqb0PdQIAaDsEIbQTI+rZrvkyn17gn4/gNDXoEQKARUAQQvv18mjzY/Vn7ghXy+mZcE6DHiEAWAYEIbRfOxZa+yyN/0sPzltBJW0fUwUAuB8QhNB+bV1oLbdK2HmLfzacUzkwTS2GRgHAIkjFrgBYsR7u7HKpUMuT3LQ/qBZf5KeGcR4OJBBpDaTnSYq/xABAbPg9BO3nKKUQJcvQmNS30+pp2WX+pUiOiBiRq4xKsbUvAFgABCHck15qU28Trr7CD/Thurkx40t3B1aCiaMAYAEQhHBPTJw4KhB9kca/2uOPz5tKTpg4CgCWAEEI96SXBztnQo/w54u3NfsAAB6aSURBVFuCjKMhnVjdGZWcNJg4CgAWAEEI98TEiaOfpRn+J/pPHzZ3B1aCiaMAYAHaEIRpaWlffPHFxo0ba2tbGtI6efLkjz/+eM8VA+vQyYkYo9yqliItt0o4fUeYGPqnDxt6hABgIUwNwq1btw4dOvTWrVuLFy8eMWIEzze9dcC1a9dGjx79/PPPm6+GYOmiW9uGYsdNYWQA1+ARC9wjBAALYWoQzp8//7PPPvv444/37Nlz8+bNPXv2NC4jCMKsWbNefPFFs9YQLF2rO/TuuCmMCWINTuKZegCwECYFYW5ubmpq6mOPPUZEcrl85MiRP//8c+Niy5YtCwoKSkhIMHMdwbK1/ASFVk+H8/gRAQ0/aegRAoCFMGllmdzcXKVS6erqanzZqVOntLS0xmU+++yzY8eOpaamtny14uLi9PT0f/7zn3VnJk6cGBgY2JZq26+amhq5XC52Lf6ku5IW3uFqavRNfnV3DuvlQUqqqfnzHUElR0XaZr+rY1hgY1ovNKYZoTHNhed5QWh95MmkIBQEocG1Gl969uzZ7777rru7uylXq62t1Wg0d2sglRoMBlOqAZYpwo1Ka4XLpRTh1sRXd2XT6IAmzqvkGBoFAItgUhD6+flVVlZWVFQolUoiun37dqdOneoXuHLlyp49exwcHDZs2FBYWFhWVpaUlPTFF180KGakVqtjY2M/+ugjs/wD7E1tba2Dg4PYtfgTB6LnuhlWXqXPBkgafEkg+ilHv2+0xMGh4T1CL2ehTGdwcBBztVsLbEzrhcY0IzSmufA8r9VqWy1m0j1Cf3//yMjInTt3EpFer9+zZ8/w4cOJqKam5urVq0Tk5+e3ffv25OTk5OTkxMREhUKRnJzs5tZUBwFsUXIE910WX9VomPPsHcFBQnXLqtXn7kDYpB4ALIGpf4/Pnz//5Zdfvnjx4smTJ9Vq9ahRo4jo9OnT8fHxgiA4OTnVzZGRyWRyuRxTZuxKkJIN8GYbrvJPh//pT6sdt4THgptIQTIOjWKtUQCwAKY+PpGUlLRr1y5nZ+dJkyYdOHBAIpEQUbdu3TZs2NCgZGRk5LfffmvmaoLFm9mdW3q54dOlO27yY4Ka/oyp5OgRAoBFaMMdmr59+/bt27f+GbVaPWHChAbFvLy8xo4da4aqgVV5NJCbc4w/c0fo7Xm3C5hXRVmlwiCfpnuEjlJiRFo9OWJPTAAQFdYaBfPgGD3XjVuW8UencOctfmQgJ2v+I4ZHCQHAEiAIwWxeiODWX+XL/rvd7o6bwpjApruDRlhcBgAsAYIQzMbXkYb5cWuv8ERUY6BDefzIwJY+YO5yKsG62wAgNgQhmNPMCO7rSzwR7c8VenkwdYuPQqkcMDQKAOJDEII5JfizagOdKBBamC9aB4vLAIAlQBCCOTGi57txSy7xu241seNEA+4OGBoFAPEhCMHMngnnNl3jpRx1V7UShJg1CgCWAM9wgZl5KujxEM5b0XpJlZwVaDE0CgAiQxCC+S0eKOFa6Q0SEanklFl6/2sDANAiBCGYn5tpO6lh1igAWALcIwTRuMtZCdbdBgCxIQhBNOgRAoAlQBCCaDBrFAAsAYIQROPugKFRABAfghBEo5JTmY6QhAAgLgQhiEbCyFFC5brWSwIA3D8IQhCTSs40GB0FAFEhCEFM7g5UgvkyACAqBCGISSUnDdbdBgBRIQhBTNikHgBEhyAEMWGTegAQHYIQxITFZQBAdAhCEJNKThgaBQBxIQhBTCo5Q48QAMSFIAQxuTvgHiEAiAxBCGLCutsAIDoEIYgJK8sAgOgQhCAmrCwDAKJDEIKYsLIMAIgOQQhiwsoyACA6BCGIyUVG1QbS8WLXAwDsGIIQxMSIXGVUituEACAeBCGIDKOjACAuBCGIDI8SAoC4EIQgMiwuAwDiQhCCyFRyDI0CgJgQhCAyPEoIAOJCEILIsLgMAIgLQQgic5OzUgyNAoB4EIQgMnc5JssAgJjaEITffvttXFxcnz59vv7668ZfzcrKSkpK6tWrV2xs7Msvv3znzh3zVRJsmcoBj08AgJikJpbbs2fPW2+9tXnzZplMNm7cuICAgMTExPoFGGNPPvlkVFRUbW3tO++888wzz2zfvv0+VBhsjUrOSmqwxhoAiMbUIPzqq69efvnl+Ph4Inr11Ve//vrrBkEYFhYWFhZmPJ47d+6MGTPMW1GwVe7oEQKAqEwdGk1PT+/bt6/xOC4u7sKFC43L8Dx/+vTplJSUTz75ZPr06WarI9g0rCwDAOIytUdYWFjo5uZmPFapVAUFBY3LVFdXz5w5U6PRSKXSDz/8sLlLZWVlbdu2rXPnznVnvv76a2NfE1pVUVEhdhXMTKZjxdXy8vLyjn9r22tMEaExzQiNaS48zzPGWi1mahC6urpWVlYaj8vLy93d3RuXcXJy+u2334ho+fLlI0eOvH79ukwma1wsLCzs4Ycf/uyzz+7WQCoNCAjgOMxfNZWLi4vYVTAnuRNpanVi/aNsrDHFhcY0IzSmWfA8r9VqWy1mavyEhoZmZmYajzMzM+v35xp74okncnNzCwsLm/wqY0ypVIb+V1BQEFLQnjlIiGOk1YtdDwCwV6Ym0LRp07755pvKysrq6uolS5ZMnTrVeH7+/PnGgDx37lxxcTER6XS6zz//PCQkpFOnTvep0mBjcJsQAERkahDOmDGjd+/eAQEBfn5+4eHhL7zwgvH8qlWrsrOziejXX3/t0qWLt7e3SqXat2/fli1bTBmZBSAidwdWgsVlAEAkpt4jlEqlK1asWLx4sSAIzs7OdeevX79uPEhOTk5OTtZoNE5OTnK53OwVBRuGdbcBQESmBqGRk5NTywVUKtU9VAbsFBaXAQARYZYKiM9dzkpqMDQKAOJAEIL40CMEABEhCEF8mDUKACJCEIL4VHKmwdAoAIgEQQjiM2WT+hWZPLYtBID7AUEI4mt1aHR/rvDcEcO+XOzWBADmhyAE8bU8NFquo+dTDMP82KlCDJ8CgPkhCEF8LQ+NvvGrYVgn9rdekl/bEoQlNfRRKnqQANA6BCGIr4WVZQ7mCT/eFD7uL4nzYmfvCAaTo3DdVf6TCwZz1RAAbBiCEMSncmCaptYardRTcoph2SCJuwO5yamTE7ukMTUJ1/3O36km04MTAOwWghDE5yajMh01zqw3fjUM8mWjAu+u3h7nZeptwpxKIb1EcJFRMSaaAkBrEIQgPilHjhIq1/3p5KE8YesN4dP+krozpgfh+qvC4yGcnxO7rUWXEABa0bZFtwHuky6uLHyDLkLFwt1YV1cW7kZ/PckviZe4O/xRpp8XW51l0vyX9Vf5hX0lv5cZCrRE7verzgBgGxCEYBHOjpNmVwqZpZRZKmSWCofyhImhbEzQn7a0jFGzyxqh2kAKSXOXISL6vUy4USEM82PfZrACrUCEfTEBoCUIQrAUAc4swJmG+TWbWwoJRajYuSJhgHdL2fZ/vwtJoZyEkY8j3dbeh4oCgG3BPUKwJv28WKtPE66/yk8M5YjIS8EKq3GPEABagSAEa9LqfJlLGqG0lgb6MCL0CAHAJAhCsCat9gjXXOEnd2HGkVNvRyqo7ph6AYAVQxCCNemuYre1QgvbUGy4JkzqcvdT7a0wTpYBAGgJghCsCccoVs1+u9N0vP1aKAgCxarvTqXB0CgAmAJBCFamX/O3Cddf5aeE/TGh1NsRD9QDQOsQhGBlmpsvwwu04aqQFPrHR9pFRkRUqe+wqgGAVUIQgpWJ82InC5tYXyYlX/BUUKTqT48YeuE2IQC0BkEIViZYyXiBsisbxtv3V+4+PlgfbhMCQKsQhGB9Go+O7ssRfs4WnuvW8PPs7UjoEQJAyxCEYH3ivLj6QVigpaePGFYMlngpGpb0cWR4lBAAWoYgBOtT/7F6XqCph/TPd2MJ/k0sQOqtwNAoALQCQQjWp58X++2OwAtERO+d42t5eie26Q0pvB0xWQYAWoHdJ8D6eDiQp4JllgqF1fTVJcNvj0slzWxH4e1IJws7tnIAYG0QhGCV+nmx3dnC5+n80kESP6dmd2XyVrACrUl7+QKA3cLQKFilOC8271dDUmeWGNTSZ9jHkQpwjxAAWoQgBKs0zI89EsAW9m1xr3qssgYAJsDQKFilXh5s+4jWP72eCtLUkp4nKf7kA4Bm4NcD2DIJI5WciprftgkAAEEINs4Ho6MA0CIEIdg4b8yXAYAWIQjBxnk7soJq9AgBoFkIQrBx2IACAFqGIAQb561ghbhHCADNa1sQZmVlpaSkVFVVNflVvV6fmpp64sSJ0tJSc9QNwAy80SMEgBa14TnCmTNn7tq1KywsLCMjY9euXTExMfW/eurUqdGjR/v6+rq6ul68eHHJkiUTJ040d20B2sxbQbhHCAAtMLVHeOLEia1bt549e/bgwYMvvfTSG2+80aCAj4/P0aNHL1y4cPTo0a+++io5OdlgMJi7tgBt5uPI0CMEgBaYGoSbNm0aM2aMp6cnEc2YMWPfvn0ajaZ+gaCgoPDwcONxnz59KioqqquxIyqIr92PT1wtF2YcNmj15q4QAFgYU4dGb9682aNHD+NxQECAVCrNyclRqVRNFl68ePGoUaOcnZ2b/Gp1dXV+fv7evXvrzvTr18/FxaUt1bZfPM/zPLZTaANPByqoFppstBYac8ctIfkX3lXO1lwxPBve7O4WUAefTDNCY5qLic1oahBWV1c7ODjUvZTL5c1NmVm5cuWWLVuOHTvW3KUKCgrS09Pff/9940uJRDJ//vwGdxyhOVqtViJpZaVpqI8RMUFeUKZVShveKWyyMQ0CfZAu+f6adO0gXbmO3jknnRRQ21GVtWL4ZJoRGtNceJ5nrPU/ZE0NQl9f36KiIuNxdXV1RUWFr69v42Lr1q1766239u/fHxAQ0NylgoKCHn744TVr1pj41lCfIAhKpVLsWlgZXyd9Befkq2z489C4Me9U05SDeh1Ppx6X+jjKBKK/ndOfrXB+0Bedwlbgk2lGaExz4Xleq2391oip9wj79euXkpJiPE5JSQkMDPTz82tQZvPmza+99tru3bsjIiLaVFeA+8rE24TnioTeW/T9vdm+0VIfRyIiRvRSJPfvixikArBlpgbhpEmTbt68+cYbb2zZsmXOnDlz58419twnTpy4cOFCIjp16tSkSZOGDh26c+fODz744IMPPiguLr6PFQcwmYmrrH2exr/Sg1vQR8LV6/5N78rty+FzKvEABoDNMjUIlUrlL7/8otVqN27c+MYbb7z66qvG848++mj//v2JyMHB4bXXXgsKCir5L9zsBQth4iprJwqER/wbDoG6yuipLtzSy/gwA9isNjxQ37lz53/9618NTk6fPt14EB0dHR0dbbZ6AZiPt6L1oVFNLeVVCZHuTdwLfCWKe3CH/n9jJApMXwCwRVhrFGyftyMraG250eO3hTgvJmlqTkxXN9bLg226hk4hgG1CEILt81ZQQWurO5ws5Ad4Nzs19OUoTJkBsFkIQrB9pvQITxQIA7yb/XF4NJAr1NKvhZgyA2CDEIRg+1qdLCMQ/Voo9PNqtkfIMZodyf07HZ1CABuEIATb12qP8JJGUDswb8eWLvJ8N27HLR7rdwPYHgQh2D61A5XpSNd8d+7Xgpa6g0YqOT3ZGc9RANggBCHYPo6R2oEKm3+m/kSB0MJMmTqvR3Nfphvat5cFAFgsBCHYBW9H1kKAHS8QHvBpPQjDXNm0MG7+GWy0CWBTEIRgF7wdm32ColJPV8uFaA+TltV+J1ay+TqfVoLpowC2A0EIdsHHkd1uZr7MyQIhRs3kpv0ouDvQm70kr/+KTiGA7UAQgl1oYZW1EwXCgNZmytT3UiT3exntyUGnEMBGIAjBLrTwBMXJQqG/CTNl6sg4WhTHvXrcoMcEUgCbgCAEu9DCPcKTBS0trtakcSGcrxOtzEISAtgCBCHYBW9F0z3Cq+WChLEA5zZvQP9xf8k7vxnKdOaoHACICkEIdqG5VdZOFAgDTXhworFYNUvw5z5OxawZAKvXhv0IAayXt2PTk2VOFrTtBmF978VxMZv1OZXU25P19mS9PJjTn3+eKnRUVCMEOjOune8AAB0BQQh2wVvBCppaWeZEgTChczvHRQKd2dFE6eF84cwdYUUmf0kjhCiZvzMV1VChlgqrBY6RSs70gvBYMDcumBvmxxywtS+A5UEQgl1wlJIDR5paUsn/OFltoPQSoY9n+/trESoWobr77Tqe0kuEfC15KshbQZ6Kux3Ea+XCluvC++cNTx0URgZy44LZyEDOVXZP/xwAMCMEIdgL4xMUKvkfsZeq4SJUzNFMPwQyjmLUTWRqZxf2Wk/2Wk+uQEvbbvCrs/gXUgwDvNnjIVxiUHvm6QCAeSEIwV4YbxOGu/1x5lQR19YHJ+6xAi9EcC9EcJV62p3N/3hD+PtpQ7CSDfJlMR4sRs0i3U1d4AYAzAhBCPbCW8GyKwWiP5LvVBE3LlSEDpmzlJ4I4Z4IIYMgOXZbOFEg7MsVPr7AXy0XurmxXh4syp31cGeR7hSsRH8R4L5DEIK9GNyJzTpqeOMUH6tmMWqKVbNf73AfDBAzaSSMHvRlD/rerUO1gdJKhPNFwkWNsC+HT9dQea0Q6c56erCe7qyHB4v2YGoHEesLYJsQhGAvXu3Bze3BXS0TzhYJZ4uEby7zgc58F1cL6nIpJNTXk/WtN3lHU0vpJYIxHTde4y8UC05S1tODotxZhBuLdGeRKuaOaAS4NwhCsCOMqIsr6+LKnuxMRFRermVk0TGiklO8D4uv98j/jQohvYTSS4QTBcJ/MvnLGsFRQhEqFubKurqxrq7U1Y2FuTIFntMAMBmCEMCaBCtZsJJGB/4RjTmVQkYpZZUJWaXC0duUWcpfKxc8FSzUhUJdWKgrC3Whzi6sswt1cmIW1P8FsBgIQgDr5u/M/J1pmN8fGccLlF0pXC2nq+XC1TJh1y26Xs5frxCKayhIyYKVFKxkQUoW5EyBShbgTEHOZnuGBMAa4eMPYGs4RkFKFqSkoZ3+1AOsNtCNCuFGBd0oF25VCgfzKLuSv1VJtyoEpYw6ObFAZ+rkxAKcyc+J+TkxXyfycyJvBZPioQ6waQhCAHuhkFA3N9bNjeo/Q2JUWE15VcKtSsqrEnIq6bc7Ql4Vn1dFeVVUWC2oHcjbkXVyIm8F83IkPyfmpSBPBfNSkI/jH2voAFgpfH4BgLwU5KVg0R7UOCN5gQqqqUAr5FVRQbVQqKXcKiG1mAq0fEE1FWjpTrUgYeQhd/Bx0qsV5KlgagdSK5iHA3k4kIfD3QNfR6bEwnJgkRCEANASjpGvI/k6Nh2TRhU6ul5UUSVxLqqmohrB+N9LGiquoZIavriGimvIS0HHx+IXDlgifC4B4F4pZRTsLLi4GGMSU1PByuAmOAAA2DUEIQAA2DUEIQAA2DUEoZX56KOPBKGJndahrQwGw6effip2LWxERUXFV199JXYtbERBQcGKFSvEroWNuHbt2vr161sthiC0MosWLdLr9WLXwhaUl5d/9tlnYtfCRuTl5S1btkzsWtiIK1eurF27Vuxa2IjU1NStW7e2WgxBCAAAdg1BCAAAdg1BCAAAdk2EB+pv3Lixffv2Ll26dPxb2wCDwRARESF2LWyBIAgVFRX4HJqFXq/Pz89HY5pFTU1NUVERGtMsqqqq3N3dWy3GOn4KIs/zWVlZMhmWHWyPmpoaBweL3kvWiqAxzQiNaUZoTHMRBEGtVqtUqpaLiRCEAAAAlgP3CAEAwK4hCAEAwK4hCAEAwK4hCAEAwK5hP0LLJQjCyZMnDxw4UFxc3LNnz8mTJ8vlcuOXioqKvv3229u3b48aNWr48OHi1tO68Dy/atWq4ODgYcOGGc+UlZV98803ubm5Dz30UGJiorjVsyKZmZnr1q0rKSmJjo6eMWMGx3FEdP369ZUrV1ZVVSUlJfXt21fsOlqHkpKSVatW3bp1Kzg4eMaMGW5ubsbzGRkZ3333ncFgmDJlSo8ePcStpCW7du3a6dOni4uLk5KS6k8QPXv27Lp16xQKxYwZM0JDQ40ndTrd8uXLMzIyoqOjp02bJpFICD1CS3bt2rXJkydrNJrAwMDFixc/8sgjPM8TUU1NzcCBA9PT0zt37jxjxozvvvtO7Jpaky+//HLu3LnLly83vjQYDEOHDj1x4kSXLl3+8pe/fPnll+JWz1rs2bOnX79+paWlISEhBw4cMK5/m5eXFxcXV15e7uXllZCQkJKSInY1rYBWq+3fv/+pU6eio6OPHj36wAMP1NTUEFFWVlb//v0ZY0qlMj4+PjU1VeyaWqg7d+707t17yZIlM2fOzM/Przt/8uTJIUOGeHh41NTUxMXF3bp1y3h++vTpa9as6dq16+LFi1955ZW7pQWwVLW1tXq93nhcUlIilUrT0tIEQfj+++979erF87wgCJs2bYqIiDAeQ6uuXbvWs2fPuXPnTpkyxXhmx44doaGhxnbeu3evv7+/TqcTtY5WQKfTBQQErF+/vsH5+fPnjx8/3nj8/vvvjxkzpsOrZn2OHz/u6upqMBgEQdDpdE5OTqdPnxYEYc6cOS+88IKxzLx582bMmCFiJS1Z3W8/Irp06VLd+fHjx8+fP994PGXKlDfffFMQhKysLIVCUVxcLAjCrVu3FApFfn6+IAjoEVoumUxm7LYTkU6n43leqVQS0ZEjRxISEhhjRDRixIjLly/fvn1bzIpaCUEQkpOTP/30U2dn57qThw8fHjZsmLGdhw4dWlhYeOXKFfHqaB1SU1PLysr69u27ePHiFStWlJeXG88fOXJkxIgRxuPhw4cfPnxYvDpajZCQEEEQMjMziejSpUtSqTQ4OJiIDh8+jMY0hfE3YWNNNmBKSkqfPn2Ma80EBASEhoYeP36cMDRqLf7yl78kJSUZf0Ly8vK8vLyM511cXBwdHfPy8kStnXVYunRpYGBgQkJC/ZP5+fl1jSmVSj08PNCYrbp27ZpMJktKStJoNDt37oyNjS0rK6M/fzK9vb3Ly8srKipErakV8PX1Xbt2bXx8fERExNChQzds2KBWq6lRY+bl5QlY/MRktbW1RUVFDRqQ/vzzTkQ+Pj65ubmEyTJW4a233rp48eLBgweNL6VSaf0tCQ0GQ90kGmhOTk7O559/fuzYsQbnpVKpwWCoe6nT6dCYreI4rqioaM+ePb179yai/v37r1q1as6cOfU/mXq9njEmleI3TCtycnKSk5M/+OCDwYMHHzx48Nlnnz19+rSvr69MJqvfmDKZrLmuDzQmkUg4jqvfgMaf6+Z+3vExtXQLFizYvn37gQMH6paO9ff3N/4VQ0S3b9+ura318/MTr4LWYdu2bcXFxcahktzc3JqamsTExO3bt/v7+1+7ds1YprKyUqPRoDFb5e/vT0SRkZHGl5GRkTdu3KA/fzJzcnLUarVCoRCrktZiy5YtYWFhzz//PBGFh4evWrXqxx9/TE5O9vf3z8nJMZbJyckxtjmYSCKR+Pj45OTkdO/enYhycnKMP9f1W7X+eQyNWrRPPvlk7dq1e/bs8fT0rDuZmJi4c+fOqqoqItq0adOgQYNMWV7dzk2YMOGnn35aunTp0qVLR40a1b9///fee4+IEhMT9+zZU1paSkRbtmzp3r17586dxa6spevdu3dQUNCJEyeIyGAwnDp1yhiKiYmJmzZtMs5t3rhxI55FMYVarc7Ozq6trSWimpqa7Oxs4w+7sTGNZdCY7TB27NiNGzcSkSAImzZtMjbg8OHDL126lJWVRUTGJy6GDBlCWHTbkl28eDEqKio0NLQu5z7//PNBgwbxPD927Njc3NwePXrs2rVr8+bNgwcPFreq1uXtt9++fv36999/b3z51FNPnT9/Pi4ubufOnStXrnz00UfFrZ5V2LBhwyuvvDJ27Njz5887Ozvv3r1bJpNVVFQ8+OCDKpXK29v7yJEjR44c6dq1q9g1tXTV1dUPP/xwVVXVwIEDf/nlF5VKtXfvXrlcfufOnfj4+M6dOysUinPnzh07dgxjFc0ZMWJEcXHx6dOno6KiFArFgQMHXF1dr127Fh8fP3DgQI1GU1BQkJKSYnxA89133122bNnw4cN/+umnN998c86cOYQgtGRVVVWXLl2qfyYsLMz4/5Ln+UOHDhUWFj744IP48Wgr49BoXc9PEISUlJScnJz4+PigoCBx62ZFrl+/fuLECX9///j4eOPT9ERUU1Ozf//+qqqqhISEVve+ASOe548dO5adnR0UFPTAAw/U3Qusqqrat2+fwWBISEhwcXERt5KWLDU1VafT1b2MiYkxzgMvLS3dt2+fQqF4+OGH64/SnzlzJiMjo2fPnnXLFCAIAQDAruEeIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2DUEIQAA2LX/D2BaacRqRlIFAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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9uxJRPn5+cYCZ86c2b59e2Zmpqur69NPPx0eHr558+bHHnuMiEaNGvXBBx8QUW1t7aZNm0aPHt1sHdauXcvz/Nq1axlj48aNCwwM/Nvf/paTk+Ph4fHqq69Kpbf/wcXFxbdu3XrrrbfqtznqSKIFYYAzK9YKVTrC0tsAYIHivNjfozpuCwgHCTk2+X08ffr0pKSkBQsWnDt3Li8v78EHHySic+fOPf/889nZ2QqFoqioqKXkKCwsLCws7N+/v/HlgAEDjh49SkQ6ne7FF1/ctWsXx3EymazpnnoNXbhwISoqytXVlYg4jouPjz9//rwxCPv06WMs4+/v//vvv7dyhYSEBONwqKenZ/fu3S9cuPDggw96eXl16tRp9OjREyZMeOihhzw8PKZMmdK5c+cHH3wwKSlp6tSpHbn/hmhByDEKdWVYehsALJOngkb4i/zbqV+/ft7e3rt27dqxY8fjjz8uk8mI6Jlnnpk5c+Zf/vIXIpo7dy7P881+r6OjoyAIdXV1xu+q343ou+++S09PP3/+vFwuT01NNS4c3RKlUtlwGyONRlO/xKaJQaVUKhtmbU1NjVKpVCgUe/fuTU9P37x586xZs+bPnz9z5sxly5bNnz9/69atH3300alTpz755BNTrm8Wot0jJDwvAwDQlscff/zbb79ds2bNE088YTxTUFAQGhpKRGVlZZs3b27pG52dnaOjo42joHV1dT/99FP9t3fp0kUulxNRSkpKfXmVSlVSUtLoIv3797906dL58+eJKC8vb+fOnUOGDGlX/YcMGbJt2zbjlY8ePZqTkxMTE1NWVqbX68PCwl599dUJEyZcvHixpqamurraz89v1qxZL7744sWLF9v1LndJtB4hEYWrCEEIANCKadOmvfHGG1FRUb179zaemTt3bnJycnx8/PXr13v16tXK9y5evHjs2LEbN27Mycmp30R28uTJAwcOHDlyZEVFRVhYWH3hOXPmjBs3LiAgYP78+fXDrX5+fp9++umIESNiY2NPnjz50ksvtXdHwCFDhsyYMcNY/xMnTnz11VceHh5btmx55plnoqOjDQZDenr6tm3bbt26FR8fHxMTo1AoTp48uWzZsna9y11i9c/UdpjVq1dv27Zt1apVq67yW7OEH4dhI+Z2qKysbDpDCO4MGtOMrL0x58yZ07t372eeeUbsijSjvLxcJpPVj0kSUWZmZnZ2dlRUFMdxROTo6KjT6aqqqtRqNREVFhZ6eHgYv1RdXW2c+eDq6qrX652cnIioqqrq/Pnzfn5+nTt3rqioqN8vyGAwVFRUODk5McYqKyvrd1koLy83bszu6elpPFNVVSWXy43dyrq6urq6Omdn54Z1rqmp0el0xpuLRFRQUJCZmRkWFlZ/pqys7PLlywqFokePHsbBW41Gc/nyZb1e36NHD2M9G3rqqacGDBhgHBA2nXGH+qZXa0TMHmF3FfvoXPOj2wAAYNT0cZiAgIBG0+xkMpkxBYnIy8ur/ryTk1P98zL1UwOdnZ3vu+8+43HDXfMkEkn9RRruNeTm5taoI9gw9uoTsSFHR0dHR8f6l97e3t7e3g0LqFSquLi4hmeUSmXfvn1JDCLfI8TS2wAAIC4xg9BFRlh6GwAAxCVmENLt52XErQIAANg1kYOwuxuW3gYAADGJH4SYQQEAACISOwix9DYAAIhKzOkTRBTuRpew9DYAiE0ikbz//vsdPI+7JYIg1O+jBEY3b94cNGjQPbq4yEEY4MxKsfQ2AIjtnXfeefLJJ8WuxW0Nl/SEej169LhHVxY5CDlGIVh6GwDE5unpWb9siuisfZkeqyPyPULC8zIAACAq8YMQS28DAICIxA/C7m4Mz8sAAIBYLCAIMYMCAADEYwFBiKW3AQBAPOIHoYuM1A4sC0tvAwCAGMQPQiLqpaZzJWJXAgAA7JJFBGGsFztRhB16AQBABJYRhJ7sRCGGRgEAQASWEoTHEIQAACAGiwhCfycm5SizClkIAAAdzSKCkIhiPbkTRQhCAADoaBYThF4sFUEIAAAdzmKC0JMdx21CAADocJYShP282IkiAUkIAAAdzFKC0EtBLjJ2vQJRCAAAHaodG/MaDIajR49qtdoBAwYoFIpGX62oqCgqKmp4pkuXLjJZOzaej/VkJ4qEEFfs0AsAAB3H1CDUaDSJiYk1NTVubm5ZWVkHDhzw8/NrWGDXrl3vv/++8biiouL69et5eXnt2vE51oudKBQmdjX9OwAAAO6WqUOj33//Pc/zx44d27t3b0JCwocfftiowLhx4078V3Jy8qhRo9qVgvTfHmG7vgUAAOAumRqEGzdunDx5slQqJaLHH39848aNLZXkef7777+fOXNme6sS68lOFmE/JgAA6FCmDo1mZWUFBAQYjwMCAnJycgwGg0QiaVpyx44dWq129OjRLV1Ko9FkZmauW7eu/szw4cPVarWbjLwc2aVSQ7gKtwlbxPM8z2OBcvNAY5oRGtOM0JjmYmIzmhqEWq22/skXuVxuMBh0Ol2zQfjtt98+8cQTrTwmU1JScvPmzbVr19afCQwM7NWrFxFFu0uP5PFBCnwCWtTwfwTcJTSmGaExzQiNaS48zwsmzMszNQh9fX3rHwotKipSq9VNHxwlouLi4q1bt548ebKVS3Xu3HnQoEGrVq1q+qX+PvzZCmGmspl8BSODwaBUKsWuhY1AY5oRGtOM0JjmwvN8TU1Nm8VMvUc4YMCAffv2GY/37dsXHx/fbLHvv/8+Ojq6R48eJl62EezHBAAAHczUHuGzzz4bHR3dvXt3T0/PBQsW1D8sExoaumDBguTkZOPLlJSUuXPn3nFtYjzZmRJBz5PUUib6AwCAjTM1cEJCQg4dOpSTk3Ps2LFNmzYNGzbMeP6FF17o2bOn8biysnLKlCkTJ06849q4yKiLE0srQ6cQAAA6SDtWlunVq9dnn33W6GTD/p+Li8vf//73u6yQcTZhL3c8OAoAAB3B4oYgYzCtHgAAOpDFBWE/LzwvAwAAHcfigrCPBztfKtRhJiEAAHQIiwtCpZRCXdn5EnQKAQCgI1hcEJJxt3rcJgQAgA5hiUEY48lSEYQAANAhLDEIE3zZ3hwEIQAAdARLDMLe7owX6BxuEwIAwL1niUFIRI8Esk03EYQAAHDPWWgQPhrEbbqBKRQAAHDPWWgQJviw/BrheiU6hQAAcG9ZaBByjJICuE03EIQAAHBvWWgQEkZHAQCgQ1huEA73Y2llQq5G7HoAAIBNs9wglHH0YGfu50x0CgEA4B6y3CAkokeDGEZHAQDgnrLoIHyoC3ekQCjVil0PAACwXRYdhEopDe3EbctCpxAAAO4Viw5Cuj06ikkUAABwr1h6ED4SyP2aw2v0YtcDAABslKUHoUpOsZ5sZzZGRwEA4J6w9CCk2zPrMToKAAD3hFUEIduaydehTwgAAPeAFQShn5KFubF9uegUAgCA+VlBEBLR46FcSjq6hAAAYH5WE4T/d4vHzHoAADA76whCNzmN6sytvoZOIQAAmJl1BCERzezOLcfoKAAAmJvVBOH9fqy8jk4V45EZAAAwJ6sJQkb0RDdu+WV0CgEAwJysJgiJaGYY+/EaX4Pl1gAAwHysKQg7O7FYL7b5JjqFAABgNtYUhEQ0MwyPzAAAgDlZWRCODeLOlAjXK/HIDAAAmIeVBaGco0ldue+voFMIAADmYWVBSERPdeeWXxYM6BMCAIA5WF8Q9nJn3o60JwdJCAAAZmB9QUhEf+nOfYsJhQAAYA5WGYRTQ7m9uXx6OTqFAABwt6wyCF1l9FJPybyT6BQCAMDdMjUIBUFYsmTJqFGjJk6ceOLEiWbLlJeXv/XWWyNHjnzssce2bdtmvko244VI7lCegKVHAQDgLklNLLdkyZJPP/10yZIlly5dSkxMTEtL8/X1bVigtrZ22LBh3bt3f/HFF2tra7Xae7t5oKOUXuvNvZ1q2PKAqf8EAACApkxNkU8//XThwoUjRowYMWLE7t27ly9f/o9//KNhgWXLlkml0h9//PEeVLJ5s8K5j8/x+3OFIZ1Yh70pAADYGJOGRisqKq5cuRIfH298GR8fn5qa2qjMoUOHRo0a9eGHH06fPn3x4sV6/T1fG1vG0dvR3Juphnv9RgAAYMNM6hEWFBQQkbu7u/Glh4dHfn5+ozI3b97ctWvXyy+/PH78+AULFqSmpi5fvrzZq2VkZPzyyy/R0dHGlxKJ5MMPP+zXr98d1H6sLy08Jf/PFc2ITvby4Ex1dTVj6AGbBxrTjNCYZoTGNBee501pSZOC0NnZmYhqamrkcjkRVVdXu7i4NCrj5OQ0cOBA43hpSEhIr169Fi9e7Ojo2PRqnTt3jouLe++99+rPREZGKhQKU2rS1Hv9+PfOcI90k9rJp0YQBOP/Drh7aEwzQmOaERrTXHier6mpabOYSUHo5eWlUCiuX7/et29fIsrIyAgICGhUJjAwUCq9fbVOnTrxPF9WVtZsEMpkMnd395iYGFPeuk2PBXP/OsdvzODHBVvlVBAAABCXSeEhkUiSk5O//vprIiopKdmwYcPEiROJqKysbNGiRbW1tUQ0derU3bt3V1ZWEtHGjRuDgoI6dep0L2t+GyOaHyN54wSvt5fBUQAAMCdTe1Hz58/ft29fVFRUREREUlLSsGHDiKiwsPCll16qqqoiomHDhj388MPdu3e/77773nnnnZUrV97DWv/ZA/6sk5K+xT6FAADQfqZOnwgMDLxw4cKlS5fUanV9Vy80NFSj0RjHPxljn3322ZtvvllSUhIaGlo/TNoxvkyQDNmmf6gL6+JkJ/cKAQDAPNpxX43juB49ejQc8GSMNboL6O3tHR4e3sEpSEThKja3h2T2IUylAACA9rGdB0xe680V1NAK7NkLAADtYTtBKOVo+WDJq0cN2dVYgBQAAExlO0FIRFHubE4E98xvGCAFAABT2VQQEtEbfSU3q2jNNQyQAgCASWwtCOUcrRgieemIIb/txQQAAABsLgiJqK8Hmx7GPXcYA6QAANA2GwxCInonWnKtQvjoHAZIAQCgDbYZhAoJbR0p+ew8vyUTWQgAAK2xzSAkIj8l25goeeqg4XwpZlMAAECLbDYIiSjWk30UJxmz01BYK3ZVAADAUtlyEBLRtFBuQjAbt1tfhyFSAABojo0HIRG930+idmBzsAwpAAA0x/aDkGP0w1DJsULh33iIFAAAmrD9ICQiFxltf1Cy5CK/5CKyEAAA/qSj90sSSxcntvdhydBtBglHs8PtIv4BAMAU9hKERBTgzHaOkty/zaCU0rRQZCEAABDZVRASUagr2/2QZPh2g4TRlBBkIQAA2FkQElGYG9s16nYWTuyKLAQAsHd2F4REFK5i20ZKRv2fvqwO9wsBAOydncZAHw92KEn6+QV+9iED5toDANgzOw1CIgpxZUfGSAtrafh2PTYvBACwW/YbhETkLKOfRkhGd+H6b9anFmFtbgAAe2TXQUhEjOjvvbl/9ece2qH/8RoGSQEA7I69B6FRcldux4PSd0/xU/YaSrVi1wYAADoQgvC2Ph7s5KPSAGfq+ZN+ayaGSQEA7AWC8A8KCS3sJ1k3XPLiEcPsQ4YqndgVAgCAew9B2FiCD0sdK63RU8x/9Ptz0TUEALBxCMJmuMnp+6GSD/tzT+w3zNiPDe4BAGwZgrBFjwRyaeOlQS7U8yfdp+d5Hp1DAABbhCBsjVJK70RLdo2SrsvgB23VnypGGAIA2BoEYdui3NnB0dIZ3bjROwyP7DIcK0QcAgDYDgShSThGT4dzGZOk44LY1L2GgVv0WzIx+x4AwBYgCNtBztET3biL46Uzu3MvH+UHb9VvzRTQPQQAsGoIwnaTcTQzjEsbL302gpt30hC5Qb/sMq81iF0tAAC4IwjCOyRhNCmESx0r/SJesvEGH7xW98/TfDGWZwMAsDYIwrt1vx/bPlK6a5T0WoUQulY3bZ9hXy7GSwEArAaC0Dwi1Wz5YEnGJNkgX/bSEUP39fp3ThoyqxCIAACWDkFoTio5zQrnTj0qXTlEkqOhPpv0D+3Qp6Tz2NECAMBiIQjviThv9vVASdZk2Yxu3NYsIXitbvQO/fdX+LI6sWsGAAB/Jm1X6evXr9fU1ERERHBc4wQVBKGsrKz+pUKhcHR0NEMFrZmTlJK7csldqUon2ZrJr8sQ5h7W9fNiDwdwSQEs1JWJXUEAADA5CPV6fXJycmpqqqurq0Qi2bVrl5eXV8MCJSUlnp6earXa+PKVV175xz/+YebKWi1nGU0K4SaFULVesjub35YlfHSWd5FRUgB7sAuX4MMUErGrCABgr0wNwnXr1l2+fDktLU2pVE6cOPGDDz746KOPGpVhjJWUlJi7hjbFSUqPBHKPBJJAdLJI2JopvHXCcL5UiPdhif5coj/r5c7QTwQA6Eim3iNcu3bt1KlTlUolET311FNr1qxptlhxcXHDAVJoCSOK8WTzornDY6RZk2Wzw7lrFcK43YZOq3TjfzUsOs+fKBL0WMQNAODeM7VHmJmZOXnyZONxSEhIbm6uTqeTyWQNy3Ac16dPn4qKitDQ0BUrVvTs2bPZS9XV1eXn5+/evdv4UiKRxMXFGSPWPrnJ6dEg7tEgIqLMKuFgnnAoX/j2Mp9ZJfT3Zgk+LM6L6+/NPBxEricAgE0yNQg1Go1CoTAeKxQKnuc1Go2bm1t9AVdX11u3bvn6+up0uldeeWXixIkXLlxo9lI5OTnnz59fsGBB/Zm33347JibmTv8JNkVNNMaHxvgQRVFZHTtSxB0vZh+e5lKLmY8jxbjzUS6GON/qXirBUYJJinerqqpK7CrYDjSmGaExzYXneWbC7SZTg9Db27v+/l9xcbGjo2PDFCQimUzm6+trPHjzzTc/++yz/Px8Hx+fppcKCgoaPnz4qlWrTHxru+VC1MWDJhARES9QWplwtFD4LZs2npamlQnBLizag0V7sj4eLMqduaO/eEdcXFzEroLtQGOaERrTLHier6mpabOYqUEYGxt7+PDhmTNnEtHhw4djY2NbKZydnS2RSFxdXU28OLSJYxSpZpFqNqGTzsVFoePpfKlwskg4WSz8dIM/XyI4SqmnmkW5sx5qFqFi3d0QjQAAJjE1COfMmRMbG3vffff5+vr+7//+7+eff248P2jQoBdeeGH8+PGbNm3KyMiIiIgoLi7+5z//OWPGDMwjvHdkHPX1YH092F/+eyazSrhQSudKhX05wldpfHq5IOMozI2Fu7FubqybK3VzY6GuTNm+iaMAALbP1N+LYWFh27dvX7x4sUaj+fjjj8eNG2c8n5iYGBAQQETBwcE7d+7cvXu3m5vbyy+/PGPGjHtUY2hWgDMLcKZRXf4YDc+voUtlQnq5cKVC+OEqXangr1UIngrWzZU6OzEvR/JTMm9H8nFkQc7UzQ3TNgDATjGhw3dKWL169bZt23CP8M5UVlbe8c0DXqCsauFaBWVrhMKa2//NrxHSK6iyToj34Qb6sgQfFuvJHOxjgv/dNCY0gsY0IzSmuRjvETo5ObVeDCNldoRjFOjMAp2JqHH3L0cj/JYv/JYvvPg7n1YmzAjj3o2RqHGXEQDsABbdBiIiPyWbEMwtuk9yfKw0c7KMiHps0C27zPOYowEAtg5BCI25O9AX8ZL/GyVdcYXvt1n/ewHCEABsGYIQmtfbnR0YLX2pJzfhV8PLRw1iVwcA4F5BEEKLGNHjodzF8dKfMoSj6BcCgI1CEEIbXGX0jz7cOyfRKQQA24QghLY9Gcall9PBPHQKAcAGIQihbTKO/tGHe/cUOoUAYIMQhGCSGWHczSo6gE4hANgcBCGYRMLo9d7c/+JOIQDYHAQhmGpaNy67mvblolMIADYFQQimkjB6oy/35gl0CgHApiAIoR2mhHDFWtqTg04hANgOBCG0g4TRm324t1LRKQQA24EghPaZFMKVaWkv7hQCgK1AEEL7SBhN6Mp+zebFrggAgHkgCKHderuzMyXoEQKAjUAQQrv18WBnisWuBACAmSAIod2CXFiVXiiqFbseAADmgCCEdmNEPdXsXClGRwHAFiAI4U70dmenixGEAGALEIRwJ3p7sDMIQgCwCQhCuBN9PPDgKADYCAQh3IlIFbtcLtRhMiEAWD8EIdwJRykFO7NLZegUAoDVQxDCHeqN0VEAsAkIQrhDd/PgKC+QDsOqAGAZEIRwh+7mwdH5pwyvH8cWFgBgERCEcIf6eNxhj7BGT4sv8vk1Zq8RAMCdQBDCHfJ1JClH2dXtzsIfrvIGgUq1uL8IABYBQQh3rrc7O1PSvm8RiBad5//aU1JWd2/qBADQTghCuHO92z86uuOWIOVobBAr1d6jSgEAtA+CEO7cHWxM+Mk5wytRnFpO6BECgIVAEMKda++DoxdKhbMlQnIwp3JgZXW4RwgAFgFBCHcu3I1lVQtVOlPLf3Kefy5S4iAhJynpedJiAgUAWAAEIdw5KUfhKnbBtI0JC2tp0w1+dvjtj5zKAaOjAGAREIRwV/qYfJvwyzR+fDDnqbj9UiXH6CgAWASp2BUA62biiqNaA32VZtj90B+fN5WcyvDgKABYAPQI4a6YuOLoj9f43u6sh4rVn1E7UFtHojIAAB6oSURBVCmGRgHAAiAI4a709mDnSgS+rSj89AL/Yk9JwzMqOSvD4jIAYAFMDUJBEFJSUqZOnfryyy9nZWW1UnL58uXvvvuuOeoGVkAlJ3cHdr2ytUi7VCYU19IDnVnDkypMJQQAy2BqEH788cfvv//+I488YjAYBg0aVFtb22yx33777fXXX//888/NV0OwdG3OJvw5U0gKZOzPJzE0CgAWwqQgNBgMixYt+uKLL5KTkxctWuTp6bl+/fqmxbRa7dy5c+fPn2/uSoJF6+NOrT8vszWTH92l8ScNQ6MAYCFMCsKsrKzs7OwhQ4YYXw4ZMuTIkSNNi7399tsTJkwIDw83ZwXB4vX2aG3p7RItnS0Rhvk16hBiHiEAWAqTpk/k5eW5uLjI5XLjS09Pz+PHjzcqc+rUqd27dx85cuTw4cOtXy0rK+vgwYOPPfZY/ZmXX365d+/e7am2/aqurmaNRxlF1k3BUgvlVVXNbzC46QY30Euir6mq+vN5Bc8VVkta+q6OYYGNab3QmGaExjQXnudNaUmTgtDR0VGr/WPOV21trVKpbFigrq5u5syZX3/9tUwma/NqXl5eQUFBkyZNMr7kOC4yMrLRBaElBoPB0toqUkkqB/5EheNg32Y+cDvz+bHBTKls/MHwdaVKsf8tFtiY1guNaUZoTHPheb5heLXEpCD09/evq6vLz8/38fEhoszMTH9//4YFbty4cfHiRWO21dbWlpSUhISE7N69Ozg4uOnVFApFly5dkpOTTfp3wJ9xHMdxFjfp5enu9M1lYahf44rpeNqVY/hkgITjGmek2kEo1zFx/y2W2ZhWCo1pRmjMDmZSW3t6eg4ZMmTlypVEVFxcvH379nHjxhFRUVHRmjVriCgkJCQvL+/EiRMnTpxYunSpWq0+ceJEQEDAPa06WI7pYdwvt/iCJsOcB/OEbq7MT9lMTxHTJwDAQpj6R8cHH3zwr3/9a+TIkTExMWPHju3fvz8RpaenT548mYgkEon6v1xcXBhjarVaIpG0dVWwESo5jQ3kUq7wjc5vzeRHBzT/GVM7sFI8NQoAFsDUtUb79+9/5cqVkydP+vj4REREGE/GxMTcvHmzUcm4uLimj9KAzXsmgpu8x/BKrz8Ngm7NEtbd33wQGnuEAhEeCQAAcbVj0W1XV9ehQ4c2POPg4NB0/FOhUAQGBt59zcC69PdiagfalS2M/O8KMpfKBI2eens0n3Qyjhw4qtaRc9vPVwEA3EO4HwtmMyucW3rpj9HRLZnCmIDWnlxWObBS7MQEAGJDEILZTAnh9ufy2dW3s62VG4RGauzEBAAWAEEIZuMso0kh3LLLAhGVaOl0sTC0U2t3ALG4DABYAgQhmNPscG7ZZV7P0y9Z/DA/TtnqPWi1HA+OAoD4EIRgTlHuLMCZtmXxW7OE0QFtPBCKqYQAYAkQhGBmz0RwX1zkd97iH+rSVhBiaBQALACCEMwsOZg7UyyEtLCgTENqOZXiYRkAEFs75hECmMJBQs9EcCp52xPlVQ4sswr3CAFAZAhCML/5MSatrqeS01kMjQKA2DA0CqJRYR4hAFgABCGIRo2VZQDAAiAIQTToEQKAJUAQgmgwjxAALAGCEESDLQkBwBIgCEE0rnLSGMiAKAQAUSEIQTSMyEVG5RgdBQBRIQhBTCo5K8ODowAgKgQhiEntgFXWAEBkCEIQEx4cBQDRIQhBTCo5K8ODowAgKgQhiEntQKXoEQKAqBCEICYMjQKA6BCEICYMjQKA6BCEICZsUg8AokMQgpiwST0AiA5BCGJSOWBCPQCIDEEIYsLDMgAgOgQhiAkrywCA6BCEICaVnDA0CgDiQhCCmFRyhqFRABAXghDEpJQSL1CtQex6AIAdQxCCyPC8DACIC0EIIsPiMgAgLgQhiAzrbgOAuBCEIDKVnMowgwIAxIMgBJFhcRkAEBeCEESG5UYBQFwIQhAZnhoFAHEhCEFkGBoFAHG1LwhLSkqKi4tb+qogCAUFBUVFRXddK7Aj6BECgLhMDUKdTjdp0qTu3btHRESMGzdOq218V+fIkSNeXl59+/aNiIgIDw8/duyYuasKtkmFe4QAICpTg/C7775LT0/Pysq6detWTk7O0qVLGxXo3r37pUuXsrOzCwoKxo8f/8wzz5i7qmCb1BgaBQBRmRqEP/zww9NPP61QKORy+ezZs1etWtWogFqt9vT0JCLG2IABA8rKysxcU7BRmEcIAOKSmlguIyMjLCzMeBwWFpaRkdG0TF1d3SeffKLRaLZs2fLRRx+1dCme56uqqq5fv15/JiAgQCo1tSZgY7CyDACIy9T4qaysdHR0NB47OTmVl5c3W6y0tLS0tLS6urqysrKlS12/fn3Pnj3Dhw83vpRIJF9++eV9993Xnmrbr6qqKrGrYGbSOlZaK2/lA3Pv2F5jigiNaUZoTHPheZ4x1mYxU4PQ29u7frSztLTUx8enaRm5XL5w4UIiOn78+ODBg8eNG+fs7Ny0WGho6JgxY5oOroKJXFxcxK6COTk6UYVe5+zi0van9R6wscYUFxrTjNCYZsHzfE1NTZvFTL1HGBUVdfz4cePxsWPHoqKiWikcEBBQW1tbW1tr4sXBnkk5UkioSid2PQDAXpnaI5wzZ86kSZMGDhwok8k++eSTb7/91nh+yJAhCxcuHDBgwPr16wVBCAsLKykp+eCDD0aMGGF8dgagTWo5K9UKLjJR+oQAYO9MDcLhw4cvWrRo/vz5giC8//77Dz30kPF8cHCwUqkkIk9PzyVLlty8edPZ2Xnw4MEvvfTSvaoy2ByVA5XVUYDY1QAA+9SOZzWnTp06derURidTUlKMB8OGDRs2bJi5qgV2BYvLAICIsNYoiE/twEqxST0AiARBCOJDjxAARIQgBPGpHbDcKACIBkEI4lPJCcuNAoBYEIQgPpWcYWgUAMSCIATxtbnuNi/QlL2GaxXoNQKA+SEIQXxtrru96Dz/4zV+by6CEADMD0EI4lPJWVnL0yfSy4X3zxhe6skdL0QQAoD5IQhBfMaVZZrFC/SXg4a3+komh3DH2hOEV8qFB/9Pb576AYBNwy6AIL5W5hF+eoHnBXquB6cX6Eq5UK0nJ9M+syuv8u0KTgCwW+gRgvhaWlnmaoWw4LRhxRAJx0jOUaSanS42NdvWXhfKtFTHm7WiAGCLEIQgPhcZ1RhI/+fQ4gX6ywHDm30koa63d6Xo78VM7OSlFgkGgXyVVFCDTiEAtAFBCOJjRK4yOlwgNNyV8IuLPE80N/KPj2g/L2bi8zJrr/OTujIfR1bQ9pacAGDvcI8QLMKMMG7uYcOVCsHDgYW5UTdX9tMN/nCSlGuwR2F/L/buqbbHOgWitdeF7SMlxwsNBdgcGgDagiAEi/DvOAkRCUSZVUJ6OaWXC48FS7u5/Wmr3jA3VlQrFGvJw6G1S/2WJ7jJKVLNvB1ZQY1AhP1+AaA1CEKwIIwo0JkFOlOifzPpxTGK8WTHC4UHO7eWbT9e5yeHcETk40j5GBoFgLbgHiFYkzaflzEI9FMGPyGYEdF/e4QAAK1BEII16efFjhe2dpvw1xwhyIUZHzT1VhDuEQJAmxCEYE36tdUjXHONn9T19qfax5Hlo0cIAG1BEII16ezEpIzdrGo+3up42pJ5e1yUiLwdCdMnAKBNCEKwMq3cJtyexfdSM3+nBkGIoVEAaAuCEKxMK9Pq11wTJoX88ZH2VrDCGgFjowDQOgQhWJmWglCjpx23+HHBf3ykHSSklFJpq1v+AgAgCMHK9PdiJ4sEQ5Mo3HyTj/dhjebaYwYFALQJQQhWxk1OnZQsrexP8cYL9GXa7Xn0DeE2IQC0CUEI1qd/k9HRBad5RtQ0CDGDAgDahCAE69PoNuHBPGFJmmH1MImkycpr3grMoACANiAIwfo0nFZfqqUn9huWDpTUz5poyNsRWxICQBsQhGB9+nqwS2VCjZ4EoicPGCZ2ZUkBzX+SvRUM9wgBoHXYfQKsj4OEIlTsdInwW76QqxHWDW/xY+zjSLtzOrJqAGB9EIRglfp5sSUX+V3Z/LFHpPKWxzW8HVlBTdt7+QKAPcPQKFil/l5s1VV+6UBJgHNrexNi+gQAtAk9QrBKo7pwywbTI4Ft/CXn48jyNXhYBgBagx4hWCUfR5oZ1vanVyUnLU81+g6oEQBYKwQh2DgvBSusRacQAFqEIAQb5+NI+ZhTDwAtQxCCjcPzMgDQOgQh2DhvBTagAIDWIAjBxmFoFABahyAEG4ctCQGgde2YR1hcXLxs2bK8vLwHH3xw5MiRjb6q1+v37dt36NAhjUYTFxf36KOPchxSFsTn7UinisWuBABYMFOzSqvVJiQknDt3rmvXrjNnzkxJSWlU4Ndff33llVd4nvf19X399deffvppM9cU4I7gHiEAtM7UHuFPP/0kl8tXrlzJGOvcufNrr702ffp0xv5Y3Wro0KGnT582Ht9///2xsbFffPGFo6Oj+asM0B53c49Qx5MM4xoAts7Un/IDBw6MGDHCmHyJiYnp6em5ubkNCzg4ONQf19TUODg4yGQyM1YU4M7c8ZaEyy7zPqt0WdXoTQLYOFN7hHl5eXFxccZjZ2dnpVKZm5vr5+fXtKROp/vrX//6yiuvSKXNXzw3N/fo0aNPPfVU/Zn/+Z//iYiIaGfN7VRtbS3+wmgXF6JirURTU8s1WZ27pcas0dOLx7nUYjbMR/j8bN38vsjCtuGTaUZoTHPheZ7n295/xtQglMlkev0fKzbq9Xq5XN60mMFgmD59upeX15tvvtnSpVxcXNzd3WNjY2/XQCrt1KkT/q+bSCaToa3aRUbkIuMreZmnosmXmmvMzCohea8Q5sYOJ7FcjTB4uzAvhlNIOqi21gufTDNCY5qLmYPQz88vJ+f2DqcFBQV1dXVNu4M8zz/55JPFxcWbN29u5f+is7Nzt27dnnnmGRPfGhqSSCQSCX4rt4+Po1BUx/k4Ne4SNm3MrZnC0wf1r/WWvNCTIyJXB4rx1K+/wWaYsMC3ncMn04zQmObCGGv4LEtLTP3xTkpK2rZtm0ajIaL169cnJCR4eHgQ0ZkzZ65fv05EgiA8++yzN27c2Lhxo0LR5G9vAPGYuMrayqv8c4cNmx+QGlPQaG4PyRcXsbUvgC0zNQiHDx/ep0+f+Pj4J554Yt68ef/85z+N5994443ly5cT0c8//7x06dKioqIhQ4bExsbGxsZmZmbeq1oDtIeJMyjWXxf+Hcf19/rT348jO7MKHf1egNuEADbL1KFRxth//vOf/fv3FxYWLly4sH5c9JNPPlEqlUQ0ePDgEydONPwWb29v89YV4M6YOIPiWCH/ZULjnwiO0bMR3OcX+AHeGKoCsE3tWFmG47hhw4Y1OtmtWzfjgVqtjomJMVu9AMzHlFXWrlYIDhLm3+Q+IhH9pTv37ilddjXX7FcBwNrhEQCwfabcIzxSINzn3XzOuchoYlfum8u4UwhgmxCEYPt8HKmgraHRowVCnFeLHb65kdzXl/g6RCGALUIQgu3zVrD8toZGW+kRElGEivVQsZ8ykIQANghBCLbPu60eYY2e0sqEvh6t3QJ8LpL7/AKCEMAGIQjB9vk4ttEjTC0SItXMsdVHx5ICuLwaOl6IeRQAtgZBCLbPRUY8UbW+xQJHC4W4lsdFjSSM5kRwH51DpxDA1iAIwS60Pqf+9wJhQFtBSETP9eCOFAiH8tApBLApCEKwC63fJmz9SZl6jlKaH8O9csyAJASwJQhCsAs+jtTSbcKsakHHC8EuJk2WnxbKGXhadx0DpAC2A0EIdsFbwVqaU3+kQBjgbeoPAsfoozjJa8f5WoPZ6gYA4kIQgl1oZU790YK2n5RpaEgn1tudfYapFAC2AkEIdsHLkRXUNj80auINwob+Hcf966zBlIW8AcDyIQjBLrS0AYWOpzMlQj/P9gVhiCubEsK9ewrDowC2AEEIdqGl6ROni4UQF+Ysa/cF34mWrM/gL5TiAVIAq4cgBLvQ0vQJU6bSN0vtQH+Pkvz9mIFHFAJYuXbsRwhgvVpaZe1IgTDc7w53GXwukvvpBu/2va6PB4v2YNGeLNqD+TuxolqhsJaKaoWiWirWUrQHG9qJSfE3J4ClQhCCXfBUUFkdGQSS/Dn1jhQIb/S5w4ySc/RbkrSsjk4WCSeLhR23hPdP8wW1gqeCeTqQp4J5KkjtQG+m8lfLhYe6cI8GsZGdOSV+5gAsDH4owS5IGKnkVFRLPo5/nCzSshKtEK66q33nVXK634/d32q3Mrta2HxTWJLGz9hvuN+PGxPIRgdwXoq7eVsAMBsEIdgL4+ioj+MfiXW8mPX3YncVg6bxd2LP9mDP9uBKtbQ9i998U/jrEV0vdzYmkHskgHVz64AqAECLEIRgL5o+L3O8mGvvDMK7pHagqaHc1FDSGiT7coX/3OTv387reKG3O+vjwfp4sN4erLsbkyAZAToQghDshbcj25DBKyRcbw/mIiMiOlHM/b2vOA+xOEhoZGc2srPkywS6VS2cKaEzxcKmG8K8k3x2tRCuYj1UrKeaRapZpJqCXDqi2wpgtxCEYC+ej+RWpPMvHzVcKBX8nFhfD3aimPX3Ej9iOjuxzk70cJfbNanWU1qZcL5EuFgmLL7IXyyjUq0QqWZR7qyXO+upZlHuzN1B3CoD2BQEIdiLAd5sgLeEiAwCXSoTThcL/VV6dwe52PVqzElKsZ4stsFiN2V1dL5EOFcqnC0R1lzjL5QKDhKKVLNwFYtUsXAV6+5G/k7iJzqAlUIQgt2RMIpUs0g1q6y0jjXSVHIa6MsG+v4RddnVQloZpZUJ50qFdRn8pTKhSkehrqybG+vmSqFuLMSFdXUlfyXjkI8AbUEQAlgffyfm70Qj/P9IuQodXS0XrlQIV8rpQK6Qks5fr6SiWiHImXV1pWAXFuTMAp0pyIUFOrOGc0gAAEEIYAtcZRTtyaL/vHp4rYEyKoXrlZRRKdyoFI4V0o1K/maVUKWnACfWxZk6O7FAZ+NNStbZifyUuPsI9ghBCGCzFBKKULEIFRH9KSA1erpZJdyqpqxqIauKfs8XsjX8rWrK0Qi1BvJXsk5K6uzEfBzJT8l8ldTJkXVSkpeCeaMrCbYIQQhgd5TS5gOSiGr0dKtayK2hW9VCQQ1lVwvnSihHw+fVUGGtUKIlLwV5KZif8vYacp4K5uNIXgpS8lwXg+ChYB4OhBuTYF0QhADwB0cpdXNj3dyoaUYSkZ6nwloqrBVyNFRYKxTVUkGNcL2CirSUXy0t1RmKa4USLXkoyMOBuTuQuwOpbx8wdwdSOZBazlRyUjuQSk6+SiwdABYBQQgAppJy1ElJnZQsyp0aJWVlpcbFxYWIeIGKtWRMxBItlWiFUi2VaIX0ciqro1ItX1ZHpVoqq6MP+3NTQ7ErB4gPQQgA5sSx28On/z2BTh9YOvw5BgAAdg1BCAAAdg1BCAAAdg1BaGX+9a9/CYIgdi1sgcFg+Pjjj8WuhY2oqqpasmSJ2LWwEQUFBd99953YtbARGRkZa9eubbMYgtDKLFy4UK/Xi10LW1BZWfnJJ5+IXQsbkZub+80334hdCxtx9erV1atXi10LG3H27Nn//Oc/bRZDEAIAgF1DEAIAgF1DEAIAgF0TYUL9zZs3t2zZEhIS0vFvbQMMBkN4eLjYtbAFgiBUVVXhc2gWer0+Ly8PjWkWWq22uLgYjWkWGo1GrVa3WYx1/COIPM9fuXJFJpN18PvaBq1W6+CAnXLMA41pRmhMM0JjmosgCB4eHiqVqvViIgQhAACA5cA9QgAAsGsIQgAAsGsIQgAAsGsIQgAAsGvYj9ByCYJw9OjRPXv2lJSU9OrVa/LkyXK53Pil4uLiZcuW5efnjxo1KjExUdx6Whee51esWBEYGHj//fcbz1RUVHz99dc5OTnDhg1LSkoSt3pWJD09fc2aNaWlpVFRUdOnT+c4johu3LiRkpKi0WiSk5NjY2PFrqN1KC0tXbFiRVZWVmBg4PTp093c3IznL1++vHLlSoPBMHXq1J49e4pbSUuWkZGRmppaUlKSnJzc8AHRU6dOrVmzRqFQTJ8+vWvXrsaTOp1u+fLlly9fjoqKmjZtmkQiIfQILVlGRsbkyZPLysq6dOmyePHikSNH8jxPRFqtNj4+/sKFC8HBwdOnT1+5cqXYNbUmn3/++Ysvvrh8+XLjS4PBMHTo0CNHjoSEhLzwwguff/65uNWzFjt37uzfv395eXlQUNCePXuM69/m5ub269evsrLSy8trxIgRBw8eFLuaVqCmpiYuLu748eNRUVG//fbbgAEDtFotEV25ciUuLo4x5uzsnJCQcPbsWbFraqGKioqio6O/+uqr2bNn5+Xl1Z8/evTokCFD3N3dtVptv379srKyjOefeOKJVatWdevWbfHixc8///zt0gJYqrq6Or1ebzwuLS2VSqXnz58XBOGHH37o3bs3z/OCIGzYsCE8PNx4DG3KyMjo1avXiy++OHXqVOOZrVu3du3a1djOu3bt8vf31+l0otbRCuh0us6dO69du7bR+Xnz5o0bN854/P77748ePbrDq2Z9fv/9d1dXV4PBIAiCTqdTKpWpqamCIMydO/fpp582lnn11VenT58uYiUtWf1vPyJKS0urPz9u3Lh58+YZj6dOnfr6668LgnDlyhWFQlFSUiIIQlZWlkKhyMvLEwQBPULLJZPJjN12ItLpdDzPOzs7E9GBAwdGjBjBGCOiBx544NKlS/n5+WJW1EoIgjBr1qyPP/7Yycmp/uT+/fvvv/9+YzsPHTq0sLDw6tWr4tXROpw9e7aioiI2Nnbx4sXfffddZWWl8fyBAwceeOAB43FiYuL+/fvFq6PVCAoKEgQhPT2diNLS0qRSaWBgIBHt378fjWkK42/CppptwIMHD8bExBjXmuncuXPXrl1///13wtCotXjhhReSk5ONPyG5ubleXl7G8y4uLo6Ojrm5uaLWzjosXbq0S5cuI0aMaHgyLy+vvjGlUqm7uzsas00ZGRkymSw5ObmsrGzbtm19+/atqKigP38yvb29Kysrq6qqRK2pFfD19V29enVCQkJ4ePjQoUPXrVvn4eFBTRozNzdXwOInJqurqysuLm7UgPTnn3ci8vHxycnJITwsYxXeeOONixcv7t271/hSKpU23JLQYDDUP0QDLcnOzl60aNHhw4cbnZdKpQaDof6lTqdDY7aJ47ji4uKdO3dGR0cTUVxc3IoVK+bOndvwk6nX6xljUil+w7QhOzt71qxZH3zwweDBg/fu3Ttz5szU1FRfX1+ZTNawMWUyWUtdH2hKIpFwHNewAY0/1y39vONjaunmz5+/ZcuWPXv21C8d6+/vb/wrhojy8/Pr6ur8/PzEq6B12Lx5c0lJiXGoJCcnR6vVJiUlbdmyxd/fPyMjw1imurq6rKwMjdkmf39/IurRo4fxZY8ePW7evEl//mRmZ2d7eHgoFAqxKmktNm3aFBoa+tRTTxFRWFjYihUrfv7551mzZvn7+2dnZxvLZGdnG9scTCSRSHx8fLKzsyMiIogoOzvb+HPdsFUbnsfQqEX797//vXr16p07d3p6etafTEpK2rZtm0ajIaINGzYMHDjQlOXV7dyECRN++eWXpUuXLl26dNSoUXFxcQsWLCCipKSknTt3lpeXE9GmTZsiIiKCg4PFrqyli46ODggIOHLkCBEZDIbjx48bQzEpKWnDhg3GZ5vXr1+PuSim8PDwuHXrVl1dHRFptdpbt24Zf9iNjWksg8a8A2PGjFm/fj0RCYKwYcMGYwMmJiampaVduXKFiIwzLoYMGUJYdNuSXbx4MTIysmvXrvU5t2jRooEDB/I8P2bMmJycnJ49e27fvn3jxo2DBw8Wt6rW5c0337xx48YPP/xgfDllypQzZ87069dv27ZtKSkpDz/8sLjVswrr1q17/vnnx4wZc+bMGScnpx07dshksqqqqkGDBqlUKm9v7wMHDhw4cKBbt25i19TS1dbWDh8+XKPRxMfHHzp0SKVS7dq1Sy6XFxUVJSQkBAcHKxSK06dPHz58GGMVLXnggQdKSkpSU1MjIyMVCsWePXtcXV0zMjISEhLi4+PLysoKCgoOHjxonKD57rvvfvPNN4mJib/88svrr78+d+5cQhBaMo1Gk5aW1vBMaGio8f8lz/P79u0rLCwcNGgQfjzayzg0Wt/zEwTh4MGD2dnZCQkJAQEB4tbNity4cePIkSP+/v4JCQnG2fREpNVqf/31V41GM2LEiDb3vgEjnucPHz5869atgICAAQMG1N8L1Gg0u3fvNhgMI0aMcHFxEbeSluzs2bM6na7+ZZ8+fYzPgZeXl+/evVuhUAwfPrzhKP3JkycvX77cq1ev+mUKEIQAAGDXcI8QAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADsGoIQAADs2v8DSJ95G8ppAO4AAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3xUVfo/8OfcmcnMpM5k0khCQiCEEkiAQICEqoQiRRFBQRBFQfitWFbZXdf16yriir2ggqLAIpGmSNOliJRFQaSFUJKAEEgjvUwyyZR7f39cNsbUSZjkTvm8//B15+bkzsNxkk/OLecwQRAIAADAVXFSFwAAACAlBCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0CYIwJSVl7dq1Hf++zsFkMkldgvNAZ9oQOtOG0Jk2ZDabW2wjQRCmpqbu27ev49/XOVRXV0tdgvNAZ9oQOtOG0Jm2wvN8TU1Ni81wahQAAFwaghAAAFwaghAAAFwaghAAAFwaghAAAFyatUEoCMLrr7/ev3//ESNGbN++vdE2H3/88fDhw/v37//444/n5+fbrkgAAID2Ym0Qrlq1au3atWvXrv3LX/4yd+7c1NTUeg02bdr06quvvvHGG99++21ZWdkjjzxi61IBAABsz9og/Pjjj//v//4vNjZ20qRJDzzwwKefflqvwenTp5OSkoYOHRoeHv7444+fPn3a1qUCAADYnlVByPP8xYsXBw0aJL4cOHDguXPn6rW5++67Dx8+fPTo0WvXrq1cufL+++9v5oAlnp3bVi4AAIBtya1pVFxcbDabfXx8xJdarbbhJcD4+PiJEyfeddddnp6ePj4+r7/+elNHu3z58n5jRERERO2eVatWJSQktL54V1RZWckYk7oKJ4HOtCF0pg2hM22F53lretKqIPT29maMVVZWii/1er1Wq63XZunSpRcvXszLy1Or1StXrkxKSkpLS5PJZA2P1q1bNx9Fzx9e/KF2T3h4eKMtoSFBEDw9PaWuwkmgM23I0Ttz48aN33zzjdRV3GKxWPArsaElS5bUnpi0Es/zBoOhxWZWBaGbm1twcHB6ero4jEtPT+/SpUu9Nv/9738nT56sVquJ6P7771+0aFFeXl5ISEjDozHGjB4BAZ07eyqseXMAgHZ36NAhjUaTlJQkdSHQuJUrV6akpLQ2CK1kVRAS0ezZsz/88MOkpKSSkpIvv/xy1apVRFRVVfXqq68+99xzvr6+vXv3/v777xctWqRUKrdt26bT6YKCgpo6mow3ppcJA/ww9gcAezFgwIDp06dLXQU0bs+ePe13cGvvGn3++edNJlNQUFBkZOR99903btw4IjIYDCtWrCgtLSWil156SSaThYSEREZGLl26NDk5uZmhvVfVzbQywSb/AAAAgNth7YjQx8dnz549xcXFKpXK3d1d3KnT6crLy2u3v/vuu5qaGoPBoNFomj+ad1UOghAAAOyBtUEo8vX1bb6BUqlUKpUtHse7Ku9SaaveGQAAoF1IM9eotyEPI0IAALAH0gShV2VuepnAIwoBAEBq0gShwlKtVbIblUhCAACQmGTLMPXwobQyqd4cAMCpHD16dPTo0eJ2eHh4Xl5evQZr166dN29eM0c4cuSIXq8Xt48fPz5s2LDbqWft2rWPP/747RyhI0kYhOxSKUaEAAA2YDKZSkpKxO2//e1vXl5e9RrU1NTUzg7WqAceeODatWvidlhY2KJFi26nHoPBUPtMgf1r3V2jNtTDh+F+GQCApuTn5+/Zs2fOnDniy6Kiop07dz788MPixuXLl319fe+///6GE3ipVKraCTb3799/6NCh6OhoQbj1+9ZisRw4cOD48eMWi2XEiBHiOHLfvn1VVVVbt2796aefRo8e7e3tXXv/P8/zW7duPX/+fERExMyZM8X9u3fv7tGjx4kTJ86fPz9ixIixY8c28w8xGAzJycnXr1/v16/fPffcI9Z25cqVTZs26fX6Ll26zJgxQ6PRFBQUbNiwIS8vLzg4+J577gkLC7NZV7ZEshFhTw1Lw4gQAKAJGo3mz3/+c+1SP2vXrt21axcR7dmz5+LFi926dSsqKoqLi2t4FvSJJ54QR4erVq1asGBBSEjIsWPH3nrrLfGrFRUVX3zxha+vr7+//6JFixquqUdEGRkZL730krgtTisWHBy8bdu20aNHWywWInr//fenTp165swZnU43Z84csbBGGY3GxMTEPXv2BAcHv/766wsWLCCivLy8YcOGMcZ69ep19erVK1eu8DyfmJiYlZUVHR1dUVFx8uTJ2+y9VpFwREiXcI0QAOzV7hvCe6mWDns7JUdb7pSr6/xKdnNzu//++9evX//GG28Q0b///e9XX32ViGbNmjVr1iyxTUFBwebNm5988slGj/nSSy99/fXXiYmJRJSdnS3u1Gg0X331lbjdr1+/xYsXL1iwICkpyd3d/b77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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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7MppgpCIno0SvriMIAQAAHtypiB8NEL4tZBfK8GUGQAAsBtnCkK1QFM7CWuuoFMIAAB240xBSETPRglfpXAr+oQAAGAnThaEPfxYiAftzkASAgCAfThZEBKmzAAAgF05XxBO7STszRTzquSuBwAAuATnC0IvFY0PF9ZeRacQAADswPmCkIjmRAmrLoqYMgMAAPfPKYMwoS0L8SB0CgEA4P41IQhNJtOJEyeuXr3aQJmysrJjx45duHBBFFs2pd4fqHgrWTRaW/RNAADA9dkahNeuXYuMjHz55ZdHjBgxY8YMzusYl/z6668jIiIWLFgwadKkhQsX2rWetQ0MZD396R+X0CkEAID7orSx3BtvvDFhwoRPPvmkpKSkV69eu3fvHjVqVM0CZ86cefHFF/fv39+3b18iqqiosH9l7/Zef0Xi95ZZkYK3qqXfCgAAXJZNPUKr1bp58+bZs2cTkY+Pz8SJE5OSkmqV+eKLL5566qlevXplZGSIoujh4WH/yt6tpz8bHiL873l0CgEAoPls6hHm5OQYjcYOHTpILzt06LBt27ZaZVJSUry8vKKionQ6XWFh4YYNGxISEuq8mslkys7O3rNnT/WZBx54wMvLqxm1/3N/IXarZX604K9pxncDAADYFoTSOKdarZZearXa8vLyWmWKioouXbp06tQpPz+/FStWTJ8+/fr164yxe6+WnZ19/vz59957r/rM22+/HRMT04zaBzIaH6p89xfLkt7uMm2mvLy8zlaFZkBj2hEa047QmPYiiqItLWlTELZt25aICgoKgoODiSg/P186U6tM7969/fz8iOipp5564YUXsrOzpfK1hIeHjxgxYt26dba8daPejaUe/zb/vo82zNMtPjec8+b1nuFeaEw7QmPaERrTXkRRrKysbLSYTfcIvby8oqOjDx8+LL08fPjwwIEDa5WJjY3Nzc2VjnNzcwVB0Ov1TalwMwV70OxI4S9ncKcQAACaw9bHJ1555ZVXX331u+++++CDD44ePTpr1iwiSk1NDQwMLCgoIKI5c+YcOXJk6dKle/bsmTdv3qxZs3Q6XcvVu6bX+iiSrovYsBcAAJrB1scnnnvuOY1Gs3r1aoPBcODAgaCgICLy9vaeMWOGRqMhosDAwIMHD37yySdHjx594okn5s+f34K1vptBQ4t6KX53xPqfh5VuMTwKAAD2w+p8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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVxU5f4H8O9zZoaZAQYGhh0FV0RQUEBN0dyXSqxbqamZ5lXTbnqrm966dfP+bO/afjPxtmilaZnlgqWWay5k7guCC6KCyDpsA8PMnPP743iJWAccOLN83q/7x5nDw5nH587w6XnO8zyHCYJAAAAAroqTugIAAABSQhACAIBLQxACAIBLQxACAIBLQxACAIBLQxACAIBLQxACAIBLQxACAIBLQxACAIBLQxACAIBLkyAIT506tWrVqvZ/X+dgMpmkroLzQGPaEBrThtCYNmQ2m5stI0EQnjlzZufOne3/vs6hqqpK6io4DzSmDaExbQiNaSs8zxuNxmaLYWgUAABcGoIQAABcGoIQAABcGoIQAABcGoIQAABcmrVBKAjCa6+91rdv3yFDhmzatKnBMsuXLx8yZEifPn0ee+yxvLw821USAACgrVgbhMnJyatXr169evWzzz47Y8aMM2fO1Cmwfv36V1555c0339y8eXNJScmjjz5q66oCAADYnrVBuHz58hdffDEmJuaee+556KGHVq5cWafA8ePHR40aNXDgwLCwsMcee+z48eO2rioAAIDtWRWEPM+npaX169dPfNmvX7/Tp0/XKXPvvffu27fvwIEDly9f/uijjyZPntzEBYs9O7auugAAALYlt6ZQUVGR2Wz29vYWX2q12vq3APv373/PPffcfffdGo3Gy8vrjTfeaOxqFy9e/Km6U+fOnWvOJCcnDxo0qOWVd0UVFRWMMalr4STQmDaExrQhNKat8DxvTUtaFYReXl6MsYqKCvFleXm5j49PnTIvvfTS+fPnc3Nz1Wp1cnLy6NGj09PTZTJZ/at17drVWxH58z9/Fl8qFIrQ0FCOw/xVqwiC4OnpKXUtnAQa04YcvTHXrVu3ceNGqWtxi8ViafCPp4tbtGhRzcCklXier6ysbLaYVUHo5uYWEhKSkZEhduMyMjI6depUp8wvv/wyfvx4tVpNRJMmTZo3b15ubm5oaGj9qzHGqj0CAjp29FRY8+YAAG1u7969Wq129OjRUlcEGrZixYpTp061NAitZFUQEtHDDz/8wQcfjB49uqio6Msvv0xOTiaiioqKl19+edGiRb6+vtHR0du2bZs3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Eqtj5/VClaWlvwcAANB61vYIb9y4ERAQIB4HBAQUFRUZjUalUlm/5Lp168LDw/v379/EpVJTU2fPnl1z5oknnoiMjCSi7hrut1xjgg4DpI2qqqpq6ZgzNAaNaUNoTBtCY9oKz/M83/xAo7VBqFAozGazeGw2mxljMpmswZKffvpp091BT09PX1/fhISEmjMBAQHi/+v9A4TjxTQwCPNlGqVQKPANsRU0pg2hMW0IjWkrNg7CkJCQnJwc8Tg7OzswMFAub+B309PTjx49umnTpiYupdFounfvPm/evPo/6ufPH8wTGotYICKZTIb2sRU0pg2hMW0IjWkrjDHGmu9ZWXuPMCkpacOGDYIgENGGDRsmTJggnj906FBeXl5NsY8//njChAn+/v4trzARJo4CAEC7szYI//znP+fn548aNWrSpEnffffd4sWLxfMPPfTQrl27xGOz2fzll1+2YppMjV4+LLNMKDO1+gIAAAAtY+3QqJeX15EjR3bu3FlVVbVy5UqtViue//7778PCwsRjs9m8devW+mvtrafgqLcvO1EoDMFtQgAAaBct2FlGpVIlJSXVOdm3b9/aBeLj42+zQuL+MghCAABoH/ay12gN3CYEAID2ZHdB2M+fHcETegEAoL3YXRBGerObBkFfLXU9AADANdhdEHKM+ujYUXQKAQCgXdhdEJI4OorbhAAA0C7sMQgT/BCEAADQTuwxCIeHcLtyeCMeQwEAAG3PHoMwUE29fNmuHHQKAQCgzdljEBLRn8K577LwkF4AAGhzdhqE93di31/hzYhCAABoY3YahJ00rKMnO3ATo6MAANC27DQICaOjAADQLuw3CO/vzL7NFNAlBACANmW/QRilZZ4KwgbcAADQpuw3CIno/k7suysYHQUAgDZk10H4p07chivoEQIAQBuy6yCM92NGC53TIwsBAKCt2HUQMqI/dWIbMxGEAADQVuw6CAmLKAAAoI3ZexAOCWI5FcLlMnQKAQCgTdh7EHKMksK57zFlBgAA2oa9ByFhdBQAANqSAwThqFB2rli4YZC6HgAA4IwcIAgVHI0P476+jE4hAADYngMEIRE9GsF9koEgBAAA23OMIBwazKos9FsBpswAAICNOUYQMrFTmI5OIQAA2JhjBCERPRrBfXOZN5ilrgcAADgXhwnCIDUNDGQbMtEpBAAAW3KYICSiP/fA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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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QgAAAOeBe4QAAODREIQAAODREIQAAODREIQAAODRsB+h8+Kcp6Sk7Ny5s7CwsHfv3vfff79arZY+VVBQsGLFips3b44dO3b06NHy1ulaRFH84osvIiMj77jjDulIaWnpJ598cuPGjREjRkyYMEHe8lxIenr6mjVrioqK4uLiZs+eLQgCEV2+fHnlypUVFRXTp08fMGCA3DW6hqKioi+++OLatWuRkZGzZ8/29/eXjqelpX311Vc2m+3BBx+MjY2Vt0hnlpmZefTo0cLCwunTp9ecIHr8+PE1a9ZotdrZs2d37txZOmixWD777LO0tLS4uLiZM2cqFArCiNCZZWZm3n///cXFxeHh4R9++OGdd94piiIRmUymwYMHp6amRkVFzZ49+6uvvpK7Ulfy/vvvP/3005999pn0oc1mGz58+MGDB7t06fLUU0+9//778pbnKrZt2zZw4MCSkpJOnTrt3LlTev5tdnZ2QkKC0WgMDg4eNWrUnj175C7TBVRWViYmJh4+fDguLm7fvn2DBg0ymUxElJGRkZiYyBjz8fFJSko6deqU3JU6qfz8/H79+n388cdz587NycmpPp6SkjJs2LDAwECTyZSQkHDt2jXp+KxZs77++uuuXbt++OGHTz755K3WHJyV2Wy2Wq3S66KiIqVSeebMGc75qlWr+vTpI4oi53zDhg3du3eXXkOTMjMze/fu/fTTTz/44IPSkf/973+dO3eW+nn79u1hYWEWi0XWGl2AxWLp2LHj2rVrax1/6aWXpkyZIr1esmTJ+PHj27w013PgwAE/Pz+bzcY5t1gsXl5eR48e5ZwvXLjwiSeekNo8++yzs2fPlrFIZ1b924+Izp07V318ypQpL730kvT6wQcffP755znnGRkZWq22sLCQc37t2jWtVpuTk8M5x4jQealUKmnYTkQWi0UURR8fHyLavXv3qFGjGGNENGbMmPPnz9+8eVPOQl0E53zOnDlLly719vauPrhr16477rhD6ufhw4fn5eVduHBBvhpdw6lTp0pLSwcMGPDhhx9+/vnnRqNROr579+4xY8ZIr0ePHr1r1y75anQZnTp14pynp6cT0blz55RKZWRkJBHt2rULnWkP6TdhXfV24J49e/r37y89a6Zjx46dO3c+cOAA4dKoq3jqqaemT58u/YRkZ2cHBwdLx319fXU6XXZ2tqzVuYbly5eHh4ePGjWq5sGcnJzqzlQqlYGBgejMJmVmZqpUqunTpxcXFycnJ/ft27e0tJR+/84MCQkxGo1lZWWyVuoC2rdvv3r16qSkpO7duw8fPnzdunUGg4HqdGZ2djbHw0/sZjabCwoKanUg/f7nnYjatWt348YNwmQZl/Diiy+ePXv2559/lj5UKpU1tyS02WzVk2igIVlZWf/617/2799f67hSqbTZbNUfWiwWdGaTBEEoKCjYtm1bv379iCgxMfGLL75YuHBhzXem1WpljCmV+A3ThKysrDlz5rz55ptDhw79+eefH3300aNHj7Zv316lUtXsTJVK1dDQB+pSKBSCINTsQOnnuqGfd7xNnd3ixYu3bNmyc+fO6kfHhoWFSX/FENHNmzfNZnNoaKh8BbqGzZs3FxYWSpdKbty4YTKZJkyYsGXLlrCwsMzMTKlNeXl5cXExOrNJYWFhRNSzZ0/pw549e165coV+/87MysoyGAxarVauIl3Fpk2boqOjH3/8cSKKiYn54osvvvvuuzlz5oSFhWVlZUltsrKypD4HOykUinbt2mVlZfXo0YOIsrKypJ/rmr1a8zgujTq1f/7zn6tXr962bVtQUFD1wQkTJiQnJ1dUVBDRhg0bhgwZYs/j1T3ctGnTfvjhh+XLly9fvnzs2LGJiYmvv/46EU2YMGHbtm0lJSVEtGnTph49ekRFRcldrLPr169fRETEwYMHichmsx0+fFgKxQkTJmzYsEGa27x+/XqsRbGHwWC4fv262WwmIpPJdP36demHXepMqQ06swUmTpy4fv16IuKcb9iwQerA0aNHnzt3LiMjg4ikFRfDhg0jPHTbmZ09e7ZXr16dO3euzrl//etfQ4YMEUVx4sSJN27ciI2N/f777zdu3Dh06FB5S3Utf/3rXy9fvrxq1SrpwwceeODkyZMJCQnJyckrV668++675S3PJaxbt+7JJ5+cOHHiyZMnvb29t27dqlKpysrKbr/9dr1eHxISsnv37t27d3ft2lXuSp1dVVXVyJEjKyoqBg8evHfvXr1ev337drVanZ+fn5SUFBUVpdVqT5w4sX//flyraMiYMWMKCwuPHj3aq1cvrVa7c+dOPz+/zMzMpKSkwYMHFxcX5+bm7tmzR1qg+corr/znP/8ZPXr0Dz/88Pzzzy9cuJAQhM6soqLi3LlzNY9ER0dL/1+KovjLL7/k5eXdfvvt+PFoLunSaPXIj3O+Z8+erKyspKSkiIgIeWtzIZcvXz548GBYWFhSUpK0mp6ITCbTTz/9VFFRMWrUqCb3vgGJKIr79++/fv16RETEoEGDqu8FVlRU7Nixw2azjRo1ytfXV94indmpU6csFkv1h/Hx8dI88JKSkh07dmi12pEjR9a8Sn/s2LG0tLTevXtXP6YAQQgAAB4N9wgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCjIQgBAMCj/X8pODRg+agKyQAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVxU5f4H8O9zZmGGZRgYGBQQXHEBFVFwQTPNrUyzvGJqpllut58t93ftl93btbzdttttuZZlqy1immlp2HVPzYUMd0VxARGQfRu22c75/XG8RKwDDpxZPu8/ep05PJx5eBr4+Dznec7DBEEgAAAAd8VJXQEAAAApIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtIQgBAMCtSRCEZ86cWbduXce/r2swm81SV8F1oDHtCI1pR2hMO7JYLC2WkSAIz507t3v37o5/X9dQU1MjdRVcBxrTjtCYdoTGtBee541GY4vFMDQKAABuDUEIAABuDUEIAABuDUEIAABuDUEIAABuzdYgFAThlVdeGTRo0KhRo77//vtGy7z33nujRo2Kjo5evHhxXl6e/SoJAADQXmwNwrVr137xxReff/75s88+O2/evHPnztUrsHHjxpdffvn111/ftm1bWVnZggUL7F1VAAAA+7M1CNesWfP8888PGDBg8uTJDz744IcfflivwMmTJ8eNGzd8+PCwsLDFixefPHnS3lUFAACwP5uC0Gq1pqamxsbGii9jY2PPnj1br8x999138ODBw4cPX7t27f333585c2YzFyzx7tK26gIAANiX3JZCJSUlFovF19dXfKnVavPz8+uViYuLmzx58j333OPj46PRaF577bWmrnblypU9pq7dunWrPbN27doRI0a0vvLuqLKykjEmdS1cBBrTjtCYdoTGtBee521pSZuCUKPRMMYqKyvFlxUVFX5+fvXKrFq16uLFi7m5uWq1eu3atePHj7906ZJMJmt4tR49evgq+ux9fq/4UqFQhISEcBzmr9pEEARvb2+pa+Ei0Jh25OyN+fXXX2/ZskXqWtxitVob/ePp5pYvX147MGkjnuerq6tbLGZTECqVypCQkLS0NLEbl5aW1rVr13plDh8+fO+996rVaiJKSEhYsmRJbm5uSEhIw6sxxkxeen2XLt4KW94cAKDdHThwQKvVjh8/XuqKQOM++OCDM2fOtDYIbWRTEBLRnDlz/v3vf48fP764uPirr75au3YtEVVWVr700kvLly/39/ePjIzcsWPH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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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KMbHxx88eDAvL69bt25Tp05Vq9XSl3Jzc1evXp2Zmfn444/HxsbKW6d9EQRh7dq1bdq0efTRR6UjRUVF//73v9PT04cOHTpmzBh5y7MjSUlJGzduzM/P7969+8yZMzmOI6Jbt26tWbOmrKxs0qRJvXv3lrtG+5Cfn7927do7d+60adNm5syZnp6e0vHExMRvvvmG5/np06d37dpV3iJtWUpKypkzZ/Ly8iZNmvTgBNFz585t3LhRq9XOnDmzXbt20sHKysqvvvoqMTGxe/fuTz/9tEKhIIwIbVlKSsrUqVMLCgqCg4NXrlw5YsQIQRCIyGg0RkdHJyQktG3bdubMmd98843cldqTTz75ZNGiRV999ZX0luf5IUOGnDhxon379i+++OInn3wib3n2Yu/evX379i0sLAwNDT148KD0/Nt79+716dOnuLjY19d3+PDhR48elbtMO1BeXt6vX79Tp05179792LFjAwYMMBqNRHT9+vV+/foxxtzc3GJiYi5evCh3pTYqJyenZ8+en3/++bx58zIyMqqOx8fHDx482Nvb22g09unT586dO9LxZ555Zt26dWFhYStXrly4cOH91iLYKpPJZDabpdf5+flKpfLy5cuiKH777beRkZGCIIiiuGXLloiICOk1NCglJaVbt26LFi2aPn26dGT37t3t2rWT+nnfvn2BgYGVlZWy1mgHKisrg4KCNm3aVO34kiVLJkyYIL1+5513Ro8e3eKl2Z9ff/3Vw8OD53lRFCsrK11cXM6cOSOK4oIFC55//nmpzeLFi2fOnCljkbas6rcfEV29erXq+IQJE5YsWSK9nj59+iuvvCKK4vXr17VabV5eniiKd+7c0Wq1GRkZoihiRGi7VCqVNGwnosrKSkEQ3NzciOjIkSPDhw9njBHRY489du3atczMTDkLtROiKM6dO/fDDz90dXWtOnj48OFHH31U6uchQ4ZkZ2ffuHFDvhrtw8WLF4uKinr37r1y5cqvv/66uLhYOn7kyJHHHntMeh0bG3v48GH5arQboaGhoigmJSUR0dWrV5VKZZs2bYjo8OHD6ExLSL8Ja6q1A48ePdqrVy/pWTNBQUHt2rX79ddfCZdG7cWLL744adIk6Sfk3r17vr6+0nF3d3edTnfv3j1Zq7MPq1atCg4OHj58+IMHMzIyqjpTqVR6e3ujMxuUkpKiUqkmTZpUUFAQFxfXo0ePoqIi+v0n08/Pr7i4uKSkRNZK7UCrVq3Wr18fExMTERExZMiQ7777zmAwUI3OvHfvnoiHn1jMZDLl5uZW60D6/c87Efn7+6enpxMmy9iFV1999cqVK4cOHZLeKpXKB7ck5Hm+ahIN1CUtLe3jjz8+fvx4teNKpZLn+aq3lZWV6MwGcRyXm5u7d+/enj17ElG/fv3Wrl27YMGCBz+ZZrOZMaZU4jdMA9LS0ubOnfvuu+8+8sgjhw4dmj179pkzZ1q1aqVSqR7sTJVKVdfQB2pSKBQcxz3YgdLPdV0/7/iY2rqlS5fu2rXr4MGDVY+ODQwMlP6KIaLMzEyTyRQQECBfgfZhx44deXl50qWS9PR0o9E4ZsyYXbt2BQYGpqSkSG1KS0sLCgrQmQ0KDAwkos6dO0tvO3fufPv2bfr9JzMtLc1gMGi1WrmKtBfbtm3r0KHDnDlziCg8PHzt2rU7d+6cO3duYGBgWlqa1CYtLU3qc7CQQqHw9/dPS0vr1KkTEaWlpUk/1w/26oPHcWnUpn3wwQfr16/fu3evj49P1cExY8bExcWVlZUR0ZYtWwYOHGjJ49Wd3MSJE3/88cdVq1atWrXq8ccf79ev37Jly4hozJgxe/fuLSwsJKJt27Z16tSpbdu2chdr63r27BkSEnLixAki4nn+1KlTUiiOGTNmy5Yt0tzmzZs3Yy2KJQwGw927d00mExEZjca7d+9KP+xSZ0pt0JlNMHbs2M2bNxORKIpbtmyROjA2Nvbq1avXr18nImnFxeDBgwkP3bZlV65c6dKlS7t27apy7uOPPx44cKAgCGPHjk1PT+/atesPP/ywdevWRx55RN5S7ctrr71269atb7/9Vno7bdq0Cxcu9OnTJy4ubs2aNU888YS85dmF7777buHChWPHjr1w4YKrq+uePXtUKlVJScmgQYP0er2fn9+RI0eOHDkSFhYmd6W2rqKiYtiwYWVlZdHR0b/88oter9+3b59arc7JyYmJiWnbtq1Wqz1//vzx48dxraIujz32WF5e3pkzZ7p06aLVag8ePOjh4ZGSkhITExMdHV1QUJCVlXX06FFpgeZbb731xRdfxMbG/vjjj6+88sqCBQsIQWjLysrKrl69+uCRDh06SP9fCoLw888/Z2dnDxo0CD8ejSVdGq0a+YmiePTo0bS0tJiYmJCQEHlrsyO3bt06ceJEYGBgTEyMtJqeiIxG44EDB8rKyoYPH97g3jcgEQTh+PHjd+/eDQkJGTBgQNW9wLKysv379/M8P3z4cHd3d3mLtGUXL16srKysehsVFSXNAy8sLNy/f79Wqx02bNiDV+nPnj2bmJjYrVu3qscUIAgBAMCp4R4hAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4NQQhAAA4tf8PdDnPgDU3GrIAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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ly9fvHhxQkKCq6vrgw8+2LdvXyLKz883Nzh//vy+fftu3brl6em5aNGiXr167dq164EHHiCi++67z3yXIZ1Ot3PnzkmTJjVaw9atW3me37p1K2NsxowZYWFhzz777O3bt9Vq9cqVK6XSO//g4uLi7OzsF198scXrsbQH0YIwxI1VGahMT6qW998DAHS0oX7suaiOuwWEi4SUDX4fL1iwYPLkya+++uovv/ySl5c3YcIEIvrll1+efPLJnJwchUJRVFTUVHIUFhYWFhbGxMSYnw4bNiw5OZmIDAbDihUrDh06xHGcTCZreE+9ui5evBgVFeXp6UlEHMfFxsampqaag7B///7mNiEhISdPnmzmFeLi4szTob6+vj179rx48eKECRP8/PyCgoImTZo0c+bM+++/X61WP/zww506dZowYcLkyZPnzp3bkfffEC0IiaiHF0srF2L8cOltALA5vgqKDxH5t9OQIUP8/f0PHTp04MCBefPmyWQyIlq6dOnChQsfe+wxIlq+fDnP841+r1KpFARBr9ebv6v2bkRffPFFWlpaamqqXC5PSUkxXzi6Ka6urnVvY1RdXe3q6mp+bGFQubq61s1arVbr6uqqUCiOHDmSlpa2a9euxYsXr1q1auHChZ9++umqVav27t371ltvnTt37p133rHk9a1CzLsA9sLCUQCAZs2bN++zzz7bsmXL/PnzzUcKCgq6d+9ORGVlZbt27WrqG93d3QcOHGieBdXr9d98803tt3fu3Nl8Lcx169bVtlepVCUlJfVeJCYm5sqVK6mpqUSUl5d38ODBkSNHtqr+kSNHJiYmml85OTn59u3bgwYNKisrMxqNPXr0WLly5cyZMy9duqTVaquqqoKDgxcvXrxixYpLly616l3ukpgjwp5e7CpOEwIANO2RRx554YUXoqKioqOjzUeWL18+a9as2NjYGzdu9OvXr5nvXbNmzbRp03bs2HH79u3am8jOmTNn+PDh48ePr6io6NGjR23jZcuWzZgxIzQ0dNWqVbXTrcHBwe+++258fPzgwYPPnj379NNPt/aOgCNHjnz00UfN9f/0008fffSRWq3es2fP0qVLBw4caDKZ0tLSEhMTs7OzY2NjBw0apFAozp49++mnn7bqXe4Sq11T22E2b96cmJi4adOmrzP4LdeFb+JxI+ZW0Gg0DXcIQdugM63I3jtz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Xl5ebWdKpVIfHx90ZosyMjJkMtmsWbPKysoSExMHDBhQUVFBv/9k+vv7azSayspKUSu1A4GBgZs3b46Li+vVq9eoUaO2bdumVqupQWfm5uYKuPiJxfR6fXFxcb0OpN//vBNRQEDA7du3CYtl7MILL7xw6dKlI0eOmJ9KpdK6tyQ0mUy1i2igKTk5Of/5z39OnDhR77hUKjWZTLVPDQYDOrNFHMcVFxcfPHhw4MCBRDR06NAvv/xy+fLldT+ZRqORMSaV4jdMC3JychYvXvz666/fe++9R44cWbhwYUpKSmBgoEwmq9uZMpmsqaEPNCSRSDiOq9uB5p/rpn7e8TG1datWrdqzZ8/hw4drLx0bEhJi/iuGiPLz8/V6fXBwsHgF2oddu3aVlJSYp0pu375dU1MzefLkPXv2hISEZGRkmNtUVVWVlZWhM1sUEhJCRJGRkeankZGRmZmZ9PtPZk5OjlqtVigUYhVpL3bu3Nm9e/fHH3+ciHr06PHll1/u3r178eLFISEhOTk55jY5OTnmPgcLSSSSgICAnJyc3r17E1FOTo7557pur9Y9jqlRm/bvf/978+bNBw8e9PX1rT04efLkxMTE6upqItq+ffvw4cMtuby6k5s5c+Z33323du3atWvX3nfffUOHDn311VeJaPLkyQcPHiwvLyeinTt39u7dOzw8XOxibd3AgQNDQ0NPnTpFRCaT6cyZM+ZQnDx58vbt281rm7/++mvsRbGEWq3Ozs7W6/VEVFNTk52dbf5hN3emuQ06sw2mTJny9ddfE5EgCNu3bzd3YEJCwuXLl9PT04nIvONi5MiRhItu27JLly716dOna9eutTn3n//8Z/jw4TzPT5ky5fbt23379t23b9+OHTvuvfdecUu1L3/7299u3ry5ceNG89OHH374/PnzQ4YMSUxMXLdu3cSJE8Utzy5s27btySefnDJlyvnz593c3A4cOCCTySorK0eMGKFSqfz9/Y8ePXr06NGIiAixK7V1Op1u7Nix1dXVsbGx//vf/1Qq1aFDh+RyeVFRUVxcXHh4uEKh+Pnnn0+cOIG5iqaMGzeupKQkJSWlT58+CoXi8OHDnp6eGRkZcXFxsbGxZWVlBQUFx44dM2/Q/Oc///nJJ58kJCR89913zz///PLlywlBaMuqq6svX75c90j37t3N/5c8z//444+FhYUjRozAj0drmadGa0d+giAcO3YsJycnLi4uNDRU3NrsyM2bN0+dOhUSEhIXF2feTU9ENTU1P/zwQ3V1dXx8fIv3vgEznudPnDiRnZ0dGho6bNiw2nOB1dXV33//vclkio+P9/DwELdIW3bhwgWDwVD7tH///uZ14OXl5d9//71CoRg7dmzdWfqzZ89evXq1X79+tZcpQBACAIBTwzlCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwaghCAABwav8PV7v5Paw24NQAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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aWlpI0eO1Gg0995772233UZERUVFYoOjR49u2rTpwoULWq32sccei4mJWb9+/eTJk4no7rvvFp8yVF9f/+23344dO7bJGtLT03meT09PZ4xNmTIlMjLy73//++XLl/V6/dy5c+Xyq//BpaWlly5devHFF1u9H0tHkCwIwzxZjZkMJtK1vv8eAOBWGxjAnou7dY+AUMnI44a/xw8//PC4cePeeOON48ePFxYWjh49moiOHz/+1FNP5efnq9XqK1euNJccJSUlJSUlAwYMEF8OGjQoIyODiMxm8zPPPLN161aO4xQKxY3P1LvWiRMn4uLitFotEXEcN3jw4MzMTDEI4+PjxTZhYWH79u1r4R2SkpLE6VB/f/8ePXqcOHFi9OjRAQEBISEhY8eOve+++8aMGaPX66dPnx4eHj569Ohx48Y98MADt/L5G5IFIRF192GnKoQBAbj1NgA4HH81pYRJ/NcpMTExMDBw69atmzdvfvDBBxUKBRE98cQTs2bNmj17NhHNmTOH5/kmv9fDw0MQBJPJJH5Xw9OIFi9efOrUqczMTKVSefDgQfHG0c3RaDTXPsaotrZWo9GIxzYGlUajuTZr6+rqNBqNWq3+6aefTp06tX79+rS0tHnz5s2aNevzzz+fN2/e999//5///Ofw4cPz58+35f3tQsqnAMZg4SgAQIsefPDBL774YuXKlQ899JB4pri4ODo6mogMBsP69eub+0YvL69+/fqJs6Amk2nNmjUN396pUyfxXphLlixpaK/T6crKyhq9yYABA06ePJmZmUlEhYWFW7ZsSU5OblP9ycnJGzduFN85IyPj8uXLCQkJBoPBYrF079597ty59913X1ZWVl1dXU1NTWhoaFpa2jPPPJOVldWmn3KTpBwR9vBhObhMCADQvBkzZvzzn/+Mi4vr06ePeGbOnDmpqamDBw8+d+5c7969W/jeBQsWTJw4ce3atZcvX254iOy0adOGDBkyatSoysrK7t27NzR+8sknp0yZEhERMW/evIbp1tDQ0A8++CAlJaV///6HDh3661//2tYnAiYnJz/yyCNi/b/99tsnn3yi1+s3bNjwxBNP9OvXz2q1njp1auPGjZcuXRo8eHBCQoJarT506NDnn3/epp9yk1jDmtpbZsWKFRs3bly+fPnqXP7rs8KaFDyIuQ2qqqpu3CEE7YPOtCNn78wn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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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ffqnn35qshiCEAAAnBqCEAAAnBqCEAAAnJoEC+qvXbu2efPmzp07t/1bOwCz2RwRESF1LRyBIAg6nQ6fQ6swmUw5OTloTKuorq4uLCxEY1pFZWWlt7d3k8VY209B5Hn+4sWLCgV2LWuJ6upqpVIpdS0cBBrTitCYVoTGtBZBELRarUajabyYBEEIAABgO3CPEAAAnBqCEAAAnBqCEAAAnBqCEAAAnBr2I7RdgiAcPXp07969RUVFvXr1mjx5sovLzX2sCwsLlyxZkpube999940cOVLaetoXnueXLVsWFhZ29913i2fKysoWL16clZU1fPjwcePGSVs9O3LhwoXVq1cXFxdHRUVNnTqV4zgiunr16tKlSysrKxMTE/v16yd1He1DcXHxsmXLbty4ERYWNnXqVC8vL/F8WlraihUrzGbzY4891rNnT2kracvS09OTk5OLiooSExNrTxA9efLk6tWrVSrV1KlTO3XqJJ40Go3ffvttWlpaVFTU448/LpPJCD1CW5aenj558uSSkpKQkJAFCxaMGjWK53kiqq6uHjRoUGpqaseOHadOnbpixQqpa2pP5s+f/8orr3z77bfiS7PZPGzYsCNHjnTu3Pnll1+eP3++tNWzFzt37oyLiystLe3QocPevXvF599mZ2fHxsaWl5f7+fmNGDHi4MGDUlfTDuj1+v79+x8/fjwqKurQoUMDBw6srq4moosXL/bv358x5u7uHh8ff/r0aalraqMKCgpiYmK+/vrr559/Picnp+b80aNH77rrLh8fn+rq6tjY2Bs3bojnn3jiiZUrV3bt2nXBggUzZ868WVoAW2UwGEwmk3hcXFwsl8tTUlIEQfj+++979+7N87wgCOvXr4+IiBCPoUnp6em9evV65ZVXHnvsMfHMli1bOnXqJLbzrl27goKCjEajpHW0A0ajMTg4eM2aNXXOz5o1a+LEieLxBx98cP/997d51exPUlKSp6en2WwWBMFoNLq6uiYnJwuCMGPGjOeee04s89prr02dOlXCStqymt9+RHTu3Lma8xMnTpw1a5Z4/Nhjj7355puCIFy8eFGlUhUVFQmCcOPGDZVKlZOTIwgCeoS2S6FQiN12IjIajTzPu7u7E9GBAwdGjBjBGCOie++99/z587m5uVJW1E4IgjBt2rRPP/3Uzc2t5uT+/fvvvvtusZ2HDRuWn59/6dIl6epoH06fPl1WVtavX78FCxZ899135eXl4vkDBw7ce++94vHIkSP3798vXR3tRocOHQRBuHDhAhGdO3dOLpeHhYUR0f79+9GYlhB/E96u3gY8ePBg3759xWfNBAcHd+rUKSkpiTA0ai9efvnlxMRE8SckOzvbz89PPO/h4aFWq7OzsyWtnX1YtGhRSEjIiBEjap/MycmpaUy5XO7j44PGbFJ6erpCoUhMTCwpKdm6dWt0dHRZWRnd+sn09/cvLy/X6XSS1tQOtGvXbtWqVfHx8REREcOGDVu7dq1Wq6XbGjM7O1vAw08sZjAYCgsL6zQg3frzTkQBAQFZWVmEyTJ24a233jp79uy+ffvEl3K5vPaWhGazuWYSDTQkMzPz888/P3z4cJ3zcrncbDbXvDQajWjMJnEcV1hYuHPnzpiYGCLq37//smXLZsyYUfuTaTKZGGNyOX7DNCEzM3PatGlz584dOnTovn37nn766eTk5Hbt2ikUitqNqVAoGur6wO1kMhnHcbUbUPy5bujnHR9TWzd79uzNmzfv3bu35tGxQUFB4l8xRJSbm2swGAIDA6WroH3YtGlTUVGROFSSlZVVXV09bty4zZs3BwUFpaeni2UqKipKSkrQmE0KCgoiosjISPFlZGTktWvX6NZPZmZmplarValUUlXSXmzcuLFLly7PPvssEYWHhy9btuznn3+eNm1aUFBQZmamWCYzM1Nsc7CQTCYLCAjIzMzs3r07EWVmZoo/17VbtfZ5DI3atE8++WTVqlU7d+709fWtOTlu3LitW7dWVlYS0fr16wcPHmzJ49WdXEJCwi+//LJo0aJFixbdd999/fv3nzNnDhGNGzdu586dpaWlRLRx48bu3bt37NhR6sraupiYmNDQ0CNHjhCR2Ww+fvy4GIrjxo1bv369OLd53bp1WItiCa1Wm5GRYTAYiKi6ujojI0P8YRcbUyyDxmyB8ePHr1u3jogEQVi/fr3YgCNHjjx37tzFixeJSFxxcddddxEeum3Lzp4926NHj06dOtXk3Oeffz548GCe58ePH5+VldWzZ89t27Zt2LBh6NCh0lbVvrz99ttXr179/vvvxZePPvroqVOnYmNjt27dunTp0rFjx0pbPbuwdu3amTNnjh8//tSpU25ubjt27FAoFDqdbsiQIRqNxt/f/8CBAwcOHOjatavUNbV1VVVV99xzT2Vl5aBBg3777TeNRrNr1y4XF5eCgoL4+PiOHTuqVKo//vjj8OHDGKtoyL333ltUVJScnNyjRw+VSrV3715PT8/09PT4+PhBgwaVlJTk5eUdPHhQXKD53nvvffPNNyNHjvzll1/efPPNGTNmEILQllVWVp47d672mS5duoj/L3me//XXX/Pz84cMGYIfj+YSh0Zren6CIBw8eDAzMzM+Pj40NFTautmRq1evHjlyJCgoKD4+XlxNT0TV1dV79uyprKwcMWJEk3vfgIjn+cOHD2dkZISGhg4cOLDmXmBlZeXu3bvNZvOIESM8PDykraQtO336tNForHnZ/tl2cgAAAHFJREFUp08fcR54aWnp7t27VSrVPffcU3uU/sSJE2lpab169ap5TAGCEAAAnBruEQIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFNDEAIAgFP7fzi4P6t+wmQ1AAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3wU1d4/8O+Z7am72WRJIxBqAiFAIJSEIkgQFZArGqUIPooIj4Jef5dH1MtV8drR61XxioqABemKNAEF6XBj6D1gKEkI6XWTLTPz+2MwQkjZhA2z5fP+w9fscLL55rjkwzlzzgwTRZEAAAC8FSd3AQAAAHJCEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFdDEAIAgFeTIQiPHj26ePHi2/99PYPNZpO7BM+BznQidKYToTOdyG63N9pGhiA8fvz41q1bb//39QzV1dVyl+A50JlOhM50InSmswiCYLFYGm2GqVEAAPBqCEIAAPBqCEIAAPBqCEIAAPBqCEIAAPBqjgahKIpvvvlmz549Bw4c+MMPP9TZZv78+QMGDOjRo8fUqVOvXr3qvCIBAABaiqNBuGDBgq+++mrJkiWzZ89+9NFHjx8/XqvB8uXL33jjjXnz5v3444/l5eWPPfaYs0sFAABwPkeD8JNPPpkzZ058fPy999778MMPf/bZZ7UaHDp0aNiwYf369YuKipo6deqhQ4ecXSoAAIDzORSEPM+fOnUqMTFRepmYmHjs2LFabe67776dO3fu3r37/Pnz//nPfx566KEG3rDYr3XzygUAAHAupSONiouL7XZ7YGCg9FKv1+fl5dVq06dPn3vvvffee+/19/cPCAh4++2363u3c+fO/WxtGx0dXXNmwYIFSUlJTS/eG1VWVjLG5K7CQ6AznQid6UToTGcRBMGRnnQoCAMCAhhjlZWV0suKigqDwVCrzdy5c0+fPp2bm6vT6T777LOUlJQzZ84oFIqb3619+/aBqphf5vwivVSpVBERERyH9asOEUXRz89P7io8BDrTidy9M5ctW7ZmzRq5q7iG5/k6f3l6uVmzZtVMTDpIEISqqqpGmzkUhGq1OiIi4uzZs9Iw7uzZs23btq3VZs+ePSNHjtTpdESUmpr65JNP5ubmRkRE3PxujDGrr8nUurWfypFvDgDQ4nbs2KHX61NSUuQuBOr26aefHj16tKlB6CCHgpCIJk6c+OGHH6akpBQVFX3zzTcLFiwgosrKytdee23WrFlGo7Fr164bN26cNm2aVqtdvXq10WgMDQ2t790UvOVsqZgQjLE/ALiKhISEBx98UO4qoG6bN29uuTd3dELyhRde4Hm+VatWHTt2TE1Nveuuu4iourr6P//5T1lZGRH94x//UKlUkZGR7dq1e/3117/77rsGhvYBVbmnS0Wn/AAAAAC3wtERYUBAwE8//VRSUqLRaKT5TyIyGo2lpaU1xxs2bLBarVVVVTXLaup9N/OVMyUIQgAAkJ+jQSjR6/UNN1Cr1Wq1utH3CTDnnilt0ncGAABoEfKs1QwwXzmNESEAALgAeYLQv/LKuTJRQBQCAIDc5AlCpWA1atnFCiQhAADITLZt7DGBhMuEAABOsWfPniFDhkjHbdq0yc3NrdVg8eLFDT8LYdeuXRUVFdLxgQMHBgwYcCv1LF68+Mknn7yVd7id5AtCPcNlQgAAp7DZbMXFxdLx7Nmz/f39azWwWCw1dwer08MPP3zhwgXpOCoqavr06bdST1VVlbSzzi00bdWoE3UOZMeKEYQAAHXLy8vbvHnzI488Ir0sLCxct27do48+Kh2cO3cuKCjooYceuvkGXlqttuYGmz///POOHTu6du0qitd+3/I8v23btgMHDvA8P2jQIGkcuXXrVrPZvGrVqr179w4ZMiQgIECj0UjtBUFYtWrViRMnoqOjx40bJ53fsGFD586d09LSTpw4MWjQoOHDhzfwg1RVVS1duvTSpUs9evQYM2aMVNv58+eXL19eUVHRtm3b1NRUvV6fn5//7bff5ubmhoeHjxkzJioqymld2RiMCAEAXJFer3/uuedqHvWzePHi9evXE9HmzZtPnTrVvn37wsLCXr163TwL+vTTT0ujwwULFkydOjUiImL//v3z5s2T/rS8vPzLL78MCgoKCQmZPn36zc/UI6KMjIyXX35ZOp44ceJHH30UHh7+/fffDxkyhOd5Ivr3v//9l7/85fDhw0aj8ZFHHpEKq5PVak1OTt68eXN4ePhbb701depUIsrNzR0wYABjLDY2NjMz8/z584IgJCcnZ2Vlde3atby8PD09/RZ7r0lkHBESghAAXNaGy+IHx/nb9u00HK28U6m77leyWq1+6KGHvv7663feeYeIvvrqq3/+859ENH78+PHjx0tt8vPzV6xYMXPmzDrf8+WXX169enVycjIRZWdnSyf1ev13330nHffo0WPGjBlTp05NSUnx8fF5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O4YOHSr18x133JGfn3/u3Dn5anQPR48eLSsr69279/z58xctWlReXi6d37lz5/Dhw6XjlJSUHTt2yFej22jbtq0oimfPniWiU6dOKZXKNm3aENGOHTvQmY6QfhPerM4O3LVrV69evaR7zURGRrZr127fvn2EqVF38cwzz6Smpkp/Q65cuRISEiKd9/f31+l0V65ckbU697BgwYLWrVsPGzbs+pO5ubk1nalUKoOCgtCZjcrMzFSpVKmpqSUlJRs2bOjZs2dZWRnd+Mk0mUzl5eUVFRWyVuoGQkNDly5dmpycHBMTc8cdd6xYscJoNNJNnXnlyhURNz9xmNVqLSwsrNWBdOPfdyJq1apVTk4OYbGMW3jppZdOnjy5fft26aVSqbz+kYQ8z9csooH6ZGdnf/DBB3v37q11XqlU8jxf89Jms6EzG8VxXGFh4ZYtWxISEoiob9++S5YsmTFjxvWfTLvdzhhTKvEbphHZ2dlTp059++23Bw0atH379sceeyw9PT00NFSlUl3fmSqVqr6hD9xMoVBwHHd9B0p/r+v7+46PqaubO3fuunXrtm3bVnPr2IiICOlfMUR09epVq9UaHh4uX4HuYe3atUVFRdJUSU5OjsViGTVq1Lp16yIiIjIzM6U2lZWVJSUl6MxGRUREEFGXLl2kl126dLl48SLd+MnMzs42Go1arVauIt3F999/36FDhylTphBRp06dlixZ8uOPP06dOjUiIiI7O1tqk52dLfU5OEihULRq1So7Ozs2NpaIsrOzpb/X1/fq9ecxNerS3nvvvaVLl27ZsiU4OLjm5KhRozZs2GA2m4lo1apVAwYMcOT26l7uwQcf3LRp04IFCxYsWHD33Xf37dv3jTfeIKJRo0Zt2bKltLSUiL7//vvY2Njo6Gi5i3V1CQkJUVFR+/fvJyKe59PS0qRQHDVq1KpVq6S1zStXrsReFEcYjcasrCyr1UpEFoslKytL+ssudabUBp3ZDKNHj165ciURiaK4atUqqQNTUlJOnTqVkZFBRNKOi8GDBxNuuu3KTp482bVr13bt2tXk3AcffDBgwABBEEaPHp2TkxMXF7dx48Y1a9YMGjRI3lLdy9///vcLFy5888030svx48cfOXIkMTFxw4YNixcvvvfee+Utzy2sWLFi5syZo0ePPnLkiK+v7+bNm1UqVUVFxcCBA/V6vclk2rlz586dOzt27Ch3pa6uurr6zjvvNJvNSUlJu3fv1uv1W7duVavVBQUFycnJ0dHRWq328OHDe/fuxVxFfYYPH15UVJSent61a1etVrtt27aAgIDMzMzk5OSkpKSSkpK8vLxdu3ZJGzRfe+21zz//PCUlZdOmTS+88MKMGTMIQejKzGbzqVOnrj/ToUMH6f+lIAi//vprfn7+wIED8dejqaSp0ZqRnyiKu3btys7OTk5OjoqKkrc2N3LhwoX9+/dHREQkJydLu+mJyGKx/PLLL2azediwYY0++wYkgiDs3bs3KysrKiqqf//+NdcCzWbzzz//zPP8sGHD/P395S3SsRGSSAAAAHxJREFUlR09etRms9W87NGjh7QOvLS09Oeff9ZqtXfeeef1s/QHDx48c+ZMt27dam5TgCAEAACvhmuEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1RCEAADg1f4/RGQj0mb81pUAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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c87Pnj1LRKdPn1YqlaGhoUT022+/oTMtIf0mbKzJDty7d+/gwYOltWa6du0aFhZ28OBBwqlRe/HII48kJiZKPyFXr1718/OT9nt4eLi4uFy9elXW6uzDqlWrunXrFh8fX39nTk5OXWcqlUofHx90ZqsyMjJUKlViYmJJScnWrVujo6PLysro+k+mv79/eXl5RUWFrJXagS5dunz22WdxcXF9+vQZN27cl19+qdfrqVFnXr16lWPxE4vV1tYWFhY26EC6/uediAICArKzswk3y9iFp59++tSpU7t375ZeKpXK+o8kNJvNdTfRQHOysrJWrFhx4MCBBvuVSqXZbK57aTQa0ZmtEgShsLBw+/btMTExRDRs2LB169YtXry4/ifTZDIxxpRK/IZpRVZW1oIFC/7zn/+MGTNm9+7d8+fPP3r0aJcuXVQqVf3OVKlUzQ19oDGFQiEIQv0OlH6um/t5x8fU1j3//PNbtmzZtWtX3dKxwcHB0l8xRJSbm1tbWxsUFCRfgfbhu+++Kyoqkk6VZGdn19TUJCQkbNmyJTg4OCMjQ2pTWVlZUlKCzmxVcHAwEfXr10962a9fv0uXLtH1n8ysrCy9Xq/VauUq0l588803ERERf/3rX4moV69e69at+/777xcsWBAcHJyVlSW1ycrKkvocLKRQKAICArKysvr27UtEWVlZ0s91/V6tvx+nRm3a66+//tlnn23fvt3X17duZ0JCwtatW6uqqoho06ZNo0aNsmR5dSc3c+bMn376adWqVatWrZo8efKwYcNeeuklIkpISNi+fXtpaSkRffPNN3379u3Ro4fcxdq6mJiYkJCQQ4cOEZHZbD5y5IgUigkJCZs2bZLubf7qq68wF8USer0+MzOztraWiGpqajIzM6UfdqkzpTbozHaYOnXqV199RUSc802bNkkdOHHixNOnT6enpxORNONi7NixhEW3bdmpU6f69+8fFhZWl3MrVqwYNWqUKIpTp07Nzs4eMGDAjz/++PXXX48ZM0beUu3LM888c/HixU8//VR6edddd/3xxx+xsbFbt25du3btbbfdJm95duHLL798+OGHp06d+scff7i5uW3btk2lUlVUVIwePVqn0/n7++/Zs2fPnj09e/aUu1JbV11dfdNNN1VVVY0cOXLfvn06nW7Hjh1qtbqgoCAuLq5Hjx5arfb48eMHDhzAuYrmTJo0qaio6OjRo/3799dqtbt27fL09MzIyIiLixs5cmRJSUleXt7evXulCZovvPDChx9+OHHixJ9++unJJ59cvHgxIQhtWVVV1enTp+vviYiIkP5biqL466+/5ufnjx49Gj8ebSWdGq0b+XHO9+7dm5WVFRcXFxISIm9tduTixYuHDh0KDg6Oi4uTZtMTUU1NzS+//FJVVRUfH9/qs29AIorigQMHMjMzQ0JCRowYUXctsKqqaufOnWazOT4+3sPDQ94ibVlKSorRaKx7GRUVJd0HXlpaunPnTq1We9NNN9U/S3/s2LG0tLSBAwfWLVOAIAQAAKeGa4QAAODUZXePJwAAAEJJREFUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODUEIQAAODU/j8BySUk+22MxAAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3wUZf4H8O8z21M2m2wKpJFCD4RQgwnSq4CHIqEowqGieGI5f1hPPdBD8byzIAKKAooISBEBEYJwgFLEIL1DQkivm55smfn9MRhD6gY2mS2f9+te95odnsx+87jJJ8/MPPMwQRAIAADAVXFSFwAAACAlBCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0BCEAALg0CYLw1KlTq1atav33dQ4mk0nqEpwHOtOG0Jk2hM60IbPZ3GQbCYLwzJkziYmJrf++zqGyslLqEpwHOtOG0Jk2hM60FZ7nq6qqmmyGU6MAAODSEIQAAODSEIQAAODSEIQAAODSEIQAAODSrA1CQRDefvvtnj173n333d999129bZYsWTJgwICYmJjZs2dnZ2fbrkgAAICWYm0QLl++/Msvv1y9evVLL700c+bMM2fO1Gqwfv36hQsXvvfee99//31JScmsWbNsXSoAAIDtWRuEn3zyyWuvvRYdHT127NgpU6Z8+umntRr8/vvvw4cP79+/f2ho6OzZs3///XdblwoAAGB7VgWhxWI5f/583759xZd9+/Y9ffp0rTZ/+ctfDhw48PPPP1+9enXp0qWTJ09u5ICFHiG3Vy4AAIBtya1pVFhYaDabvby8xJc6nS4nJ6dWm379+o0dO3bs2LGenp5arXbRokUNHe3KlSt7jGHh4eHVe5YvXx4XF9f84l1RWVkZY0zqKpwEOtOG0Jk2hM60FZ7nrelJq4JQq9UyxsrKysSXpaWl3t7etdosWLDgwoULWVlZGo3m008/HTFixMWLF2UyWd2jRUZGeik6//TaT+JLhUIRFBTEcbh/1SqCIHh4eEhdhZNAZ9qQo3fmunXrNm/eLHUVN1kslnp/ebq4efPmVZ+YtBLP8xUVFU02syoIlUplUFDQpUuXxGHcpUuXwsLCarX55Zdfxo0bp9FoiCghIeHxxx/PysoKCgqqezTGmNHd3z8kxENhzZsDALS4/fv363S6ESNGSF0I1G/ZsmWnTp1qbhBayaogJKKHHnroo48+GjFiREFBwZo1a5YvX05EZWVlb7755rx58/R6fVRU1A8//PDEE0+o1epNmzbp9fo2bdo0dDSZpepSkdDLF2N/ALAXvXr1mjRpktRVQP127drVcge39oTkyy+/bLFYAgICOnTokJCQMGrUKCKqrKxcunRpcXExEb3++usKhSI4ODgiIuJf//rXN99808jQXluRdaFIsMk3AAAAcCesHRFqtdoff/zRYDCoVCrx/CcR6fX6oqKi6u0dO3YYjcaKiorq22oaPFp55kUDghAAAKRnbRCKdDpd4w2USqVSqWzyONryrAtFzXpnAACAFiHNvZoYEQIAgJ2QJgg9yzIvFwsWRCEAAEhNmiCU80Y/NUstRRICAIDEJJvG3smLLhikenMAAKfyyy+/DBkyRNxu165dVlZWrQarVq1qfC2EgwcPlpaWittHjx4dMGDAndSzatWqxx9//E6O0JokC8LOOnYRMygAAGzBZDIVFhaK2y+99JKnp2etBlVVVdVPB6vXlClTUlJSxO3Q0NA5c+bcST0VFRXizDqH0Ly7Rm2okxc7XYggBACoX05Ozq5du6ZPny6+zM/P37Zt28yZM8WNK1eu+Pj4TJ48ue4DvNRqdfUDNvfs2bN///6oqChBuPn71mKx7N279+jRoxaLZeDAgeI4MjExsby8fOPGjYcOHRoyZIhWq1WpVGJ7nuc3btx49uzZ8PDwqVOnivt37NjRqVOnY8eOnT17duDAgSNHjmzkG6moqFi7dm1qampMTMyECRPE2q5evbp+/frS0tKwsLCEhASdTpebm/v1119nZWUFBgZOmDAhNDTUZl3ZFClHhBdw4ygAQAN0Ot3f//736qV+Vq1atX37diLatWvX+fPnIyMj8/Pze/fuXfcs6FNPPSWODpcvXz579uygoKAjR46899574r+WlJR88cUXPj4+fn5+c+bMqbumHhFdvnz5jTfeELcfeuihxYsXBwYGbtmyZciQIRaLhYg+/PDD++6778SJE3q9fvr06WJh9TIajfHx8bt27QoMDHznnXdmz55NRFlZWQMGDGCMdenSJTk5+erVqzzPx8fHp6WlRUVFlZSUJCUl3WHvNYtkI8LOOkIQAoDd2nFD+OCMpdXeTsXRt8Pkmhq/kpVK5eTJk7/66qt3332XiL788su33nqLiKZNmzZt2jSxTW5u7oYNG55++ul6j/nGG29s2rQpPj6eiNLT08WdOp3um2++EbdjYmLmzp07e/bsESNGuLm5PfDAA926dSOi7OxsscHJkyd/+OGH1NRUrVb72GOPde7ceevWrffffz8RjRkzRlxlqLKycsuWLePGjau3hvXr1/M8v379esbYxIkT27Vr98ILL2RkZOj1+nnz5snlN7/h/Pz8tLS01157rcnnsbQEyYIw0I2Vm8lgJF3T8+8BAFpbrB97Mbr1loBQyUhT5/fxjBkzxo8fv3DhwtOnT2dlZY0ePZqITp8+/fTTT6enp6vV6ry8vIaSIzc3Nzc3t1+/fuLLu+666+jRo0RkMpmeffbZxMREjuMUCkXdNfVqOnv2bHR0tFarJSKO4+Li4s6cOSMGYUxMjNgmKCjo8OHDjRwhPj5ePB3q6+vbqVOns2fPjh492s/Pr23btuPGjZs0adI999yj1+unTZsWHBw8evTo8ePHP/jgg625/oZkQUhEnXTsokGI9cejtwHA7viqaXiQxL+d+vbt6+/vn5iYuGvXroceekihUBDRE088MWvWrEceeYSI5s6dy/N8vV+r0WgEQTAajeJXVa9GtHLlykuXLp05c0apVCYlJYkPjm6Im5tbzWWMysvL3dzcxG0rg8rNza1m1lZUVLi5uanV6n379l26dGnr1q2zZ89esGDBrFmzVqxYsWDBgu3bt7/33nu///77+++/b83xbULKVQA7ezE8ehsAoBEPPfTQ559/vm7duocffljck5OT0759eyIyGAxbt25t6As9PDx69eolngU1Go2bNm2q/vKQkBDxWZirVq2qbq/T6QoKCmodpF+/fhcuXDhz5gwRZWVl7d69e9CgQc2qf9CgQTt27BCPfPTo0YyMjN69exsMBrPZ3LFjx3nz5k2aNOncuXMVFRVlZWWBgYGzZ89+9tlnz50716x3uUPSjwglLAAAwM5Nnz791VdfjY6O7tGjh7hn7ty5CQkJcXFx165d6969eyNfu2TJkgkTJmzevDkjI6N6EdmpU6cOGDBg1KhRxcXFHTt2rG48Z86ciRMnhoaGLliwoPp0a2Bg4Icffjh8+PA+ffocP378ueeea+6KgIMGDZo5c6ZY/2+//bZs2TK9Xr9t27YnnniiV69eFovl0qVLO3bsSEtLi4uL6927t1qtPn78+IoVK5r1LneIVd9T22rWrl27Y8eOr7/+elMy//VVYfNwLMTcDCUlJXVnCMHtQWfakKN35pw5c3r06PHEE09IXUg9ioqK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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3wUZf4H8O8z21M2m2waCaTSQwmBECDUSNFTEEWCdOUOBE88ztP72VH0wHYiBygoIlgQEFFA9CiidJDeIQQTSjrpyW6yZeb3x3Ahpm5gk9nyef/ha3byZPbL4yafPDPzzMMEQSAAAAB3xUldAAAAgJQQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NYkCMLTp0+vWrWq5d/XNZjNZqlLcB3oTDtCZ9oROtOOLBZLo20kCMKzZ8/u2LGj5d/XNVRUVEhdgutAZ9oROtOO0Jn2wvN8ZWVlo81wahQAANwaghAAANwaghAAANwaghAAANwaghAAANyarUEoCMKCBQt69OgxYMCA77//vs42S5cu7d+/f2xs7IwZM3JycuxXJAAAQHOxNQiXL1/++eefr169+vnnn3/sscfOnj1bo8G6devmz5//3nvvbd68ubS0dNq0afYuFQAAwP5sDcIPP/zwlVde6dat2/333//oo49+/PHHNRqcOHFi6NChffr0CQsLmzFjxokTJ+xdKgAAgP3ZFIRWq/XChQvx8fHiy/j4+DNnztRo8+CDD+7Zs2ffvn1Xrlz56KOPxo0b18ABC73a3Fm5AAAA9iW3pVFhYaHFYvHx8RFf6nS63NzcGm169+59//3333///d7e3lqt9u23367vaKmpqTtNEZGRkVV7li9f3q9fv6YX747Ky8sZY1JX4SLQmXaEzrQjdKa98DxvS0/aFIRarZYxVl5eLr4sKyvz9fWt0WbevHkXL17Mzs7WaDQff/zxsGHDLl26JJPJah8tOjraR9Hx51d+Fl8qFIrQ0FCOw/2rNhEEwcvLS+oqXAQ6046cvTPXrl27ceNGqau4xWq11vnL080999xzVScmbcTzvNFobLSZTUGoVCpDQ0NTUlLEYVxKSkpERESNNvv373/ggQc0Gg0RJScnP/HEE9nZ2aGhobWPxhgzeQYGtmnjpbDlzQEAmt3u3bt1Ot2wYcOkLgTqtmzZstOnTzc1CG1kUxAS0aRJk/7zn/8MHTq0sLDwyy+/XL58ORGVl5e/8cYbzz33nF6vj4mJ+fHHH2fOnKlWqzds2KDX64ODg+s7msxamVIsxPlj7A8AjiIuLm7s2LFSVwF127ZtW/Md3NYTki+88ILVag0ODm7btm1ycvKIESOIqKKi4qOPPiopKSGiV199VaFQtG7dOjIycv78+V9//XUDQ3utMftisWCXfwAAAMDdsHVEqNVq//vf/xYVFalUKvH8JxHp9fri4uKq7a1bt5pMJqPRWHVbTb1HM2RdKkIQAgCA9GwNQpFOp2u4gVKpVCqVjR5Ha8i+WNykdwYAAGgW0tyriREhAAA4CGmC0Ls863KJYEUUAgCA1KQJQjlvClCza2VIQgAAkJhk09g7+NDFIqneHADApezfv3/IkCHidnh4eHZ2do0Gq1atangthL1795aVlYnbhw8f7t+//93Us2rVqieeeOJujtCSJAvCjjp2CTMoAADswWw2FxYWitvPP/+8t7d3jQaVlZVVTwer06OPPpqeni5uh4WFzZo1627qMRqN4sw6p9C0u0btqIMPO1OIIAQAqFtubu62bdsmT54svszPz9+yZctjjz0mbqSmpvr5+Y0bN672A7zUanXVAzZ37ty5e/fumJgYQbj1+9Zqte7atevw4cNWq3XgwIHiOHLHjh0Gg2HDhg0HDhwYMmSIVqtVqVRie57nN2zYcO7cucjIyPHjx4v7t27d2qFDhyNHjpw7d27gwIHDhw9v4B9iNBrXrFlz7dq12NjY0aNHi7VduXJl3bp1ZWVlERERycnJOp0uLy/vq6++ys7ODgkJGT16dFhYmN26sjFSjggv4sZRAIB66HS6Z555pmqpn1WrVv3www9EtG3btgsXLkRHR+fn5/fs2bP2WdCnnnpKHB0uX758xowZoaGhhw4deu+998SvlpaWrly50s/PLyAgYNasWbXX1COiy5cvz507V9yeNGnS4sWLQ0JCvvvuuyFDhlitViJatGjRQw89dPLkSb1eP3nyZLGwOplMpsTExG3btoWEhLz11lszZswgouzs7P79+zPGOnXqlJaWduXKFZ7nExMTb9y4ERMTU1paeuzYsbvsvSaRbETYUUcIQgBwWFuvCx+ctbbY26k4+uYeuabar2SlUjlu3LgvvvjinXfeIaLPP//8zTffJKIJEyZMmDBBbJOXl7d+/fqnn366zmPOnTv322+/TUxMJKKMjAxxp06n+/rrr8Xt2NjY2bNnz5gxY9iwYR4eHo888kiX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1vYfnOOnd+C8FOSlIBNPJkygAAAHgCCEO6fkqK2WnbNtYcISM315mX+y862PnI+SinGZEAAcAIIQ7ortZ0eXX+D/1IZr7cnEl74qnB0FAIcgl7oAcG42Lkxo4WnJef77YbKqPTol4cZRAHAEGBHCXbFxRLg+jW+rpR56VrXHV4kbRwHAISAI4a6ICxM2moQfnOXndPnDhz3EmZUAACAASURBVE2nYphTDwCOwNYgFARh1apVEydO/Mc//nH9+vUGWq5cufKNN96wR23gBPQq0ipYWmlDkZZSLGSU0/1t/vBhw4gQAByErUH4/vvvL1iw4MEHH7RarQMGDDAajXU2279//4svvrh48WL7VQiOrtGzo5uvCaPCGcf+sFOnwjVCAHAINgWh1WpduHDhkiVLkpOTP/jgA39//w0bNtRuVllZOXv27Ndff93eRYJDi21sYcItV/mRYTU/aTolTo0CgEOwKQivX7+emZk5aNAg8eWgQYMOHTpUu9krr7ySnJzcsWNHexYIDq+7HztZ/3pMBZV0Ml8Y3IrV2O+rwqlRAHAINk2fyM7O9vb2ViqV4kt/f/8jR47UaHPixImff/750KFDBw4caPho165d27VrV1JSkviS47jXXnstNja2iZW7qfLycsZqhoq02mvYsTxlWVndZ8u/S+cGBMr4irKyP+5X89xNg6y+72oZDtiZzgudaUfoTHvhed6WnrQpCDUaTWXl7b/eKyoqPDw8qjcwmUzTpk375JNPFApFo0cLDAzs3Lnz888/X7WnS5cuNQ4I9bFarY7WVzEe5KfmjxRrBtUa9hHRthz+oSjm4VHzgxGspRKLxP8WB+xM54XOtCN0pr3wPF89vOpjUxCGhoaaTKacnJygoCAiunbtWmhoaPUG6enp58+fHzduHBFVVFQUFBRER0fv3LkzMjKy9tHUanVwcPCwYcNs+nfAH3Ecx3EON+nliY60/JIwJLRmYWaedmZa/9NPXrtkX5VQbGbS/lscszOdFDrTjtCZLcymvvb39x80aNDnn39ORPn5+T/++OOYMWOI6ObNm19//TURRUdHZ2dnHz169OjRo8uXL/f19T169GhYWFizlg6OY0o7bkcGn2moefPLr1lCBx8WrKnjWzB9AgAchK1/dLz99tvvvffeiBEj4uLiRo8e3bt3byJKSUmZMGECEclkMt//8fb2Zoz5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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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++CDD/bq1YuI8vPzxQanTp36+uuvs7Ozvb29H3vssdjY2C+//HLKlClEdO+994qrDNXU1Hz++ef3339/ozVs3ryZ5/nNmzczxqZOnRoREfHXv/71xo0ber1+8eLFcvmtf3BRUdH169efffbZFp/H0h4kC8IQLTNYqcRIviqpSgAAaNLAAPa33h23BIRKRpoGv4/nzp07ceLEZcuWnTlzJi8v75577iGiM2fOLFy4MCcnR61W37x5s6nkKCwsLCwsTExMFF8OHjw4NTWViMxm86JFi/bs2cNxnEKhaLimXl3nzp3r3bu3t7c3EXEcN2TIkLNnz4pB2LdvX7FNaGjo4cOHmzlCUlKSeDrU39+/e/fu586du+eeewICAjp16nT//fdPmzbtvvvu0+v1s2bN6ty58z333DNx4sTZs2d35PobkgUhEXXzYZfKhEGBePQ2ADgcfzWNCZX4t1NCQkJgYOCePXt27do1Z84chUJBRE888cT8+fN/+9vfEtGCBQt4nm/0ezUajSAIJpNJ/K7a1YjWr1+flpZ29uxZpVJ5/Phx8cHRTdFqtXWXMaqurtZqteK2jUGl1WrrZq3BYNBqtWq1+rvvvktLS/vyyy9TUlKWLl06f/789957b+nSpV999dWKFStOnDjx+uuv23J8u5ByFcBYH1wmBABozpw5c/7zn/98+umnDz/8sLinoKCgS5cuRFRaWvrll1829Y2enp7x8fHiWVCTyfTf//639tvDwsLEZ2Fu2LChtr1OpysuLq53kMTExIsXL549e5aI8vLydu/ePWLEiFbVP2LEiJ07d4pHTk1NvXHjRv/+/UtLSy0WS7du3RYvXjxt2rTz588bDIaqqqqQkJCUlJRFixadP3++Ve9yh6QcEXbXMTx6GwCgGQ899NDf//733r179+nTR9yzYMGC5OTkIUOGZGZm3nXXXc1879tvvz158uRt27bduHGjdhHZmTNnDh06dPz48eXl5d26datt/OSTT06dOjU8PHzp0qW1p1tDQkLeeOONMWPGDBgw4Oeff/7jH//Y2hUBR4wYMW/ePLH+n3766d1339Xr9Tt27HjiiSfi4+OtVmtaWtrOnTuvX78+ZMiQ/v37q9Xqn3/++b333mvVu9whVjuntsNs2rRp586dH3/88X+z+I8zhG1jsBBzK1RUVDS8QwjaBp1pR87emU8++WSf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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3xUVfo/8OfcKZmSMukhlRCIoYdACBAggAFhKWuBUF2KGsRdXHZdvj9ZZd0XuLp2QEGKCooiKIqIqFQFlCLSQ0kgBNIL6ZlJMuXe3x/Dxpg6CZPcKZ/3H77u3JzceThO8sk5txwmCAIBAAA4K07sAgAAAMSEIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKeGIAQAAKcmQhBevHhxy5Ytnf++jsFgMIhdguNAZ1oROtOK0JlWZDQaW20jQhCmpKQcOHCg89/XMdTU1IhdguNAZ1oROtOK0JnWwvN8bW1tq80wNQoAAE4NQQgAAE4NQQgAAE4NQQgAAE4NQQgAAE7N0iAUBOHll18eMGDAiBEjvvrqqybbrF27dvjw4dHR0cnJyQUFBdYrEgAAoKNYGoQbNmz46KOPPvzww2effXbevHkpKSkNGuzYseOll156/fXXv/7668rKygULFli7VAAAAOuzNAjXrVu3fPnyfv36TZw4ccaMGRs3bmzQ4Ny5c4mJiUOGDAkNDU1OTj537py1SwUAALA+i4LQZDJdvXo1NjbW/DI2NvbSpUsN2jz44INHjx796aef0tPT33333RkzZrRwwFLXkPaVCwAAYF1SSxqVlpYajUYPDw/zS41GU1hY2KBNbGzsxIkTJ06c6Obm5u7u/sorrzR3tBs3bhzUdw0PD6/bs2HDhmHDhrW9eGek1WoZY2JX4SDQmVaEzrQidKa18DxvSU9aFITu7u6MMa1Wa35ZVVXl6enZoM2KFSuuXbuWn5+vVCo3btw4duzY1NRUiUTS+GgREREesqhDyw+ZX8pksqCgII7D9asWEQTB1dVV7CocBDrTiuy9M7dv3/7ll1+KXcVdJpOpyV+eTm7p0qV1E5MW4nm+urq61WYWBaFcLg8KCkpLSzMP49LS0rp27dqgzc8//zxp0iSlUklESUlJCxcuzM/PDwoKanw0xphe7ecXEuIqs+TNAQA63JEjRzQazdixY8UuBJq2fv36ixcvtjUILWRREBLRnDlz1qxZk5iYWFpa+vHHH2/YsIGItFrtypUrly5d6u3t3bt372+//fbJJ59UKBQ7d+709vYOCAho7mgSU21auRDjg7E/ANiKmJiYadOmiV0FNG3fvn0dd3BLJySXLVtmMpkCAgJ69OiRlJT0wAMPEFFNTc27775bUVFBRP/6179kMllwcHB4ePjLL7/86aeftjC0d6/Ov1YuWOUfAAAAcC8sHRG6u7t///33FRUVMpnMPP9JRN7e3uXl5XXbe/fu1ev1tbW1bm5urRxNl5dahiAEAADxWRqEZu7u7i03kMvlcrm89eNo866Vt+mdAQAAOoQ412q6V+dfw4gQAABsgDhB6KbNu1EhmBCFAAAgNnGCUMrrfRUsswpJCAAAIhPtNvYoDV0rE+vNAQAcys8//zx69GjzdlhYWH5+foMGW7ZsaXkthGPHjlVVVZm3T506NXz48HupZ8uWLQsXLryXI3Qm0YLwPg+GOygAAKzCYDCUlpaat5999tnGl+7X1tbWPR2sSTNmzLh165Z5OzQ0dNGiRfdST3V1tfnOOrvQtqtGreg+D3axBEEIANC0wsLCffv2Pfroo+aXxcXFe/bsmTdvnnnjxo0bXl5e06dPb/wAL4VCUfeAzYMHDx45cqR3796CcPf3rclkOnz48KlTp0wm08iRI83jyAMHDuh0up07dx4/fnz06NHu7u4uLi7m9jzP79y58/Lly+Hh4TNnzjTv37t373333Xf69OnLly+PHDly3LhxLfxDqqurt23blpmZGR0d/eCDD5prS09P37FjR1VVVdeuXZOSkjQaTVFR0SeffJKfnx8YGPjggw+GhoZarStbI+LUKEvFiBAAoBkajebvf/973VI/W7Zs+eabb4ho3759V69ejYiIKC4uHjhwYONZ0L/85S/m0eGGDRuSk5ODgoJOnjz5+uuvm79aWVn5wQcfeHl5+fr6Llq0qPGaekR0/fr1F154wbw9Z86ct99+OzAwcNeuXaNHjzaZTES0evXqhx566Pz5897e3o8++qi5sCbp9fr4+Ph9+/YFBgb+97//TU5OJqL8/Pzhw4czxnr27JmRkZGens7zfHx8fHZ2du/evSsrK8+cOXOPvdcmoo0IozSEOygAwGbtzRJWpZg67e1cOPr8fqmy3q9kuVw+ffr0rVu3vvrqq0T00Ucfvfjii0Q0a9asWbNmmdsUFRV99tlnTz/9dJPHfOGFF7744ov4+HgiysnJMe/UaDSffvqpeTs6Onrx4sXJycljx45VqVRTp07t06cPERUUFJgbXLhw4dtvv83MzHR3d3/iiSeioqJ279798MMPE9GECRPMqwzV1NTs2rVr0qRJTdawY8cOnud37NjBGHvkkUfCwsL+7//+Lzc319vbe+nSpVLp3X9wcXFxdnb28uXL65Y56kyiBWGgilWbqLSWPF3EKgEAoFlxvuz/9eu8JSBcJKRs9Pt47ty5kydPfumlly5dupSfnz9+/HgiunTp0tNPP52Tk6NQKO7cudNcchQVFRUVFQ0ePNj8cujQoadOnSIig8GwZMmSAwcOcBwnk8kar6lX3+XLl/v162d+lArHccOGDUtJSTEHYXR0tLlNUFDQiRMnWjhCfHy8eTrUx8fnvvvuu3z58vjx4319fbt06TJp0qRp06b94Q9/8Pb2njVrVnBw8Pjx4ydPnjx79uzOXH9DtCAkokgPllouDPHDo7cBwOb4KCgxSOTfTrGxsX5+fgcOHNi3b9+cOXNkMhkRPfnkkwsWLHjssceIaPHixTzPN/m9SqVSEAS9Xm/+rrrViDZv3pyWlpaSkiKXy8+cOWN+cHRzVCpV/WWMdDqdSqUyb1sYVCqVqn7WVldXq1QqhULxww8/pKWl7d69Ozk5ecWKFQsWLHjvvfdWrFjxzTffvP766+fOnXvrrbcsOb5ViLkKYJQHThMCALRkzpw577///vbt2//0pz+Z9xQWFnbv3p2IysrKdu/e3dw3urq6xsTEmGdB9Xr9F198UfftISEh5mdhbtmypa69RqMpKSlpcJDBgwdfu3YtJSWFiPLz8/fv35+QkNCm+hMSEvbu3Ws+8qlTp3JzcwcOHFhWVmY0GiMjI5cuXTpt2rQrV65UV1drtdrAwMDk5OQlS5ZcuXKlTe9yj8QcEd6nYXj0NgBACx599NHnnnuuX79+/fv3N+9ZvHhxUlLSsGHDbt682bdv3xa+d+3atQ8++OCXX36Zm5tbt4jszJkzhw8f/sADD1RUVERGRtY1XrRo0SOPPBIaGrpixYq66dbAwMDVq1cnJiYOGjTo7Nmzf/vb39q6ImBCQsK8efPM9f/666/r16/39vbes2fPk08+GRMTYzKZ0tLS9u7dm52dPWzYsIEDByoUirNnz7733nttepd7xOquqe0027Zt27t37yeffPJFBv9JuvBlIhZiboPKyspWF/cAC6EzrcjeO3PRokX9+/d/8sknxS6kCeXl5TKZrG5OkogyMzNzcnL69evHcRwRKZVKg8FQVVXl6elJREVFRd7e3uYvabVa850P7u7uRqNRrVYTUVVVVUpKSmBgYHBwcEVFhUajMR/WZDJVVFSo1WrGWGVlpZeXV10B5oXZfXx8zHuqqqrqlljQ6/V6vd7V1bV+zdXV1QaDoW6dhsLCwszMzMjIyLo9ZWVlqampCoWiV69e5slbnU6XmppqNBp79eplrrO+xx9/fOjQoeYJYcuZV6hvfLQGxBwRRmnYtbKmZ7cBAMCs8eUwoaGhDW6zk8lk5hQkIl9f37r9arW67nqZulsDXV1dhwwZYt6uS0EikkgkdQepS0FzAQ0GgvVjr8lFh5RKZd2CfUTk5+fn5+dXv4FGo4mLi6u/R6VSDRgwgMQg5jnCHh7sVpVgQBQCAIB4xAxCOUdBKpZRidOEAAAgGjGDkHBbPQAAiE3sIPRgWKoeAABEJHIQ4g4KAAAQly2MCBGEAAAgGjFvnyCi+zQM5wgBQHQSieTll1/u5Pu4myMIQt06SmB2+/btESNGdNDBRQ5CXwUxoqIa8lWIWwgAOLV///vf8+fPF7uKu+o/0hPq9OrVq4OOLHIQ0t3b6gXfAPz5AwCi8fHxqXtsiujs/TE9dkfkc4T0vyAUuwoAAHBS4gfhfViDAgAAxCN+EOKeegAAEJH4QXgf7qkHAADxiB+E3dxYrk6oMYldBwAAOCXxg1DKUTc3lobThAAAIAbxg5CIor3Z2TsIQgAAEIFNBGGsDzuNIAQAADHYRhD6sl+LEIQAACACmwjCaG+WUirU4noZAADodDYRhCopdXdnKaUYFAIAQGeziSAkolhfdhqzowAA0OlsKAh/xfUyAADQ6WwlCAf5YEQIAAAisJUg7OfFblYKWqPYdQAAgJOxlSCUcdRLw84XY1AIAACdqg0L83711Vdr1qzR6/WzZs166qmnGnz1wIEDmzZtqr9nzZo1AQEBlh/ffL1MvD9W6AUAgM5jaRCeOXNm3rx5W7du9fLymjVrlpeX14wZM+o36Nat27Rp08zbhw4d+u677/z8/NpUyiAfdjAXI0IAAOhUlgbh+vXr582bN3nyZCL65z//uXbt2gZBGBERERERYd7+4IMP5s+fz3Ftm3eN9WUvX+Db9C0AAAD3yNKsunDhwuDBg83bcXFxFy5caK5lTk7OwYMH//SnP7W1lJ4alq8TyvRt/T4AAID2s3REWFhYqNFozNuenp6VlZU6nU6lUjVuuXnz5lGjRnXr1q25Q924cePrr78ODw+/W4FUunbt2qFDhxJRX438WKZ2lD/Ghc2qqqoSuwTHgc60InSmFaEzrYXnecZav+7E0iB0d3fX6XTm7aqqKrlcrlQqGzcTBGHLli0rV65s4VDdunUbM2bMW2+9VbcnNDRUKpUS0ZAA0xWtbLKbrVzLapvc3NzELsFxoDOtCJ1pRehMq+B5vrq6utVmlgZh165db9y4Yd6+ceNGWFhYkzH7448/FhcXP/jggy0ciuM4V1fXJoeMg3zYzlu4XgYAADqPpWOv2bNnb9mypbKy0mQyrVu3bvbs2eb9q1evvnz5cl2z999/f86cOU0OFi2BJ44CAEAnszQIp06dGh8fHx4eHhISQkTPPPOMef/atWuvXLli3i4vL9+1a9eCBQvaXU03d6Y1CAWtD2QBAACsw9KpUYlE8v7777/xxht6vb7+DYJpaWl12x4eHlqt9l6qYUQDfdivd4SJIbitHgAAOkPbLkvRaDRtvU2+rbBaPQAAdCabuz5zkC87XYTbJwAAoJPYXBDG+rBfMCIEAIDOYnNBGKRmMo5lViELAQCgM9hcEBLRIKxWDwAAncUmgxCr1QMAQGexxSAc7MtOFCIIAQCgM9hiECZ0YRdLhKIasesAAAAnYItBqJDQ2CDu69u4iQIAADqcLQYhET0UxnbdQhACAECHs9EgnBTK/VQglGORXgAA6GA2GoSuMhoRwPZmYVAIAAAdy0aDkIge7srtwtqEAADQwWw3CKeEcfuzea1R7DoAAMCh2W4QertQrC/bn43ZUQAA6EC2G4SE2VEAAOh4th2E4dzeLF6PMSEAAHQYmw7CACVFadgPuRgUAgBAR7HpICSih7tyX+LOegAA6DC2HoSPdGW7b/MmjAkBAKBj2HoQdnVjgSr2cwGSEAAAOoStByFhdhQAADqSPQRhOPsiQ8CQEAAAOoIdBGEvDXOVEdasBwCAjmAHQUhEsyO4j65jdhQAAKzPPoJwfiT7NJ3X4bmjAABgbfYRhEFqNsSP4ZIZAACwOvsIQiJ67D7u/VQEIQAAWJndBOGUUC61XLhejktmAADAmuwmCKUczenObU7DoBAAAKzJboKQiB6/j9ucxhsQhQAAYD32FISRHqy7B/suC0kIAABWY09BSESPRXLvp+E0IQAAWI2dBeH0btzxAj5XhywEAADrsLMgVErpka7ch9cRhAAAYB12FoRE9Nh93HvXeCQhAABYhf0FYawvc5fTkTxEIQAAWIH9BSERLYjk3sNTZgAAwBrsMgjndOf2Z/PpFRgUAgDAvbLLIPR0ob/2kfzrDAaFAABwrywNQp7n33zzzYSEhIceeuj48eNNtikpKVm6dOnw4cMnTZq0e/du6xXZhCV9uB/y+HPFGBQCAMA9kVrY7u23337vvfc2bdp09erVP/zhD5cvXw4KCqrfoLq6etSoUQMHDly5cmVNTY3R2LGLB6ql9M9oyfJfTd88YOk/AQAAoDFLU2TNmjVvvvlmfHx8fHz8d999t3nz5ueff75+g40bN6rV6s2bN3dAkU1bGMWtSuF/zBNGdWGd9qYAAOBgLJoaraiouHnz5pAhQ8wvhwwZcu7cuQZtjh8/Pnbs2BUrVsycOfONN97Q6/VWrrQRGUcvxHDP/2rq6DcCAAAHZtGIsKCggIg8PT3NL728vPLz8xu0yczMPHDgwHPPPTdv3rz//Oc/58+f37p1a5NHu3nz5nfffRcTE1O357XXXouLi2tH9X/0p9fOy7+4Xv1AF2eJQ61WyxhGwNaBzrQidKYVoTOthed5S3rSoiB0d3cnIp1OJ5fLiUir1Xp4eDRo4+rqmpCQ8MwzzxBRWFhY7969N2zYoFKpGh8tLCwsLi7uxRdfvFuBVNqrVy+ZTGZJJY29GMs/f4Z7qLuSc46PjSAIrq6uYlfhINCZVoTOtCJ0prXwPF9dXd1qM4uC0NfXV6VSpaenDxw4kIjS09PDwsIatOnatSvH3Z1o9ff353m+oqKiySCUSCReXl7mQ927KWHcKxf5T9P52d3t8lYQAAAQl0XhwXHc9OnT3333XSK6c+fOzp07Z8yYQUSlpaWvvPKKOW/nzJmzb9++srIyItq+fXtERERAQEBHVv6b/8ZKnj/D63FXIQAAtJ2lo6iVK1eePn06MjKyZ8+e06dPT0hIIKI7d+48++yzWq2WiBISEpKSkqKiogYMGPDqq69+/PHHHVj1740IYFEe9M5lJCEAALSZpbdPBAUFnT9//vbt225ubt7e3uadPXr0qH8q8tVXX122bFllZWVISEgnn+ldFy8Z8rVxUiiL9HCOU4UAAGAlbTivxhjr2rVrXQrW7az/0tPTMzQ0tPOvdwp3Y89FS+YdMZnwqBkAAGgLx7nA5C+9OLmE3sYEKQAAtIXjBCHHaPNIycsXTNfLMSoEAABLOU4QElG4G/tnf8lcTJACAIDFHCoIiWhxb0yQAgBAGzhaEGKCFAAA2sTRgpD+N0G64JjJiGEhAAC0xgGDkIgW9+Y8ZPT0CWd5EjcAALSbYwYhx+jTMdKfC4R3rmBUCAAALXHMICQiNxl9PU7y0nnT3iycLAQAgGY5bBASUZgr23m/dP4R4+VSZCEAADTNkYOQiIb5s9fjJFP2m4pqxC4FAABskoMHIRH9qQc3rRt75KAR6zQBAEBjjh+ERPTSIIm3C5uPJ84AAEAjThGEHKPtYyRleuGxoyYeWQgAAPU4RRASkYuEdt4vzdIKjx9DFgIAwG+cJQiJSCmlPeOktyqFJ5CFAADwP04UhESkktI3D0jTK4WFP+F0IQAAEDlbEBKRSkpfj5OmlApLTiALAQDA+YKQiNxl9P146dli4ZGDpkqD2NUAAIConDEIichDTj/8QRqiptivjNfKMDIEAHBeThqERCTlaPVQyd/7ciO+Me7JxM32AABOSip2ASJLjuJ6e7Lph01XSun/+nNM7HoAAKCTOe+IsE68Pzs5RbIzg592yHQHjyQFAHAyCEIiomA1OzZZGu5K/b/ENCkAgHNBEN6lkNBrcZKdiZJnTvFJh0yltWIXBAAAnQJB+DtD/diFh6RdVDRgl/FwLq4mBQBwfAjChpRSWj1Usn64ZN4R0+PHcNYQAMDBIQibNj6YXZ0mDVZTny8Mq1N4PJsUAMBRIQibpZbSv2Mk+ydIP8/gB+82ni5CGAIAOCAEYSv6ebFjk6WLenKT9xv/fNyUWYU4BABwKAjC1jGix+7jLk+VucsoZpfxsaOmtHLEIQCAg0AQWsrbhV6OlWTMkPXzYqP3mibvx2QpAIAjQBC2jZuM/tqHS0uSjgnkHjpoeuA74/4cAXkIAGC/EITtoZbS3/pwN6dLH4/inv/VFPW5cXUKX20UuywAAGg7BGH7yTmaFs6d+qP0nWGS77L57p8ZXzzH52gxPgQAsCcIwnvFiMYGse/HS/dNkOTqhP5fGiftM+66xRvwyFIAAHuAILSaPp5sXbwka6ZsegS35jIf8qlh6SnT+WIMEAEAbJqzr0dodUopPdqde7Q7d6NC2JLGTz1k4hhNC2fTwrlobyx3CABgcxCEHaW7O3txkOTFQXSuWPj8Jj/tkImIpoaziSHcUH8mQSYCANiGNgThkSNH3n777ZqamunTpz/66KMNvqrVav/+97/XvZw4ceKUKVOsU6OdG+DNBnhLXoqlc8XCl7f4p0+YMquE8SHcpBD2QDDn6SJ2fQAAzs3SIExNTZ08efLq1av9/f2feOIJpVI5derU+g1qamo2bdq0fv1688vAwEArV2r/zIm4ciBla4Vvs4RPbwoLfzL08WKJgWxsEBfnx2Q4YwsA0OksDcJ169YlJSXNnz+fiF544YVVq1Y1CEKz5ORka1bnoILVLDmKJUdRjUnyU75wMJdfctJ0vVwY2YUlBnLDA1h/LyZFKAIAdApLg/Ds2bMLFiwwbw8bNmzJkiWN2wiC8Pjjj0skktGjR0+fPp0xnAdrhUJCiUEsMUhCsXSnhg7n8odzhU2pfFaVMNiPDffn4v1ZnB9zk4ldKACA47I0CAsKCjw9Pc3bXl5e1dXV5eXlHh4edQ1kMtnSpUujo6NLSkqeffbZX3755c0332zyUBkZGd9///2AAQPuViCVvvrqq4MGDbqHf4UjcCGa4EsTfImISvXs1B3u5B32r1+5i6UsTE2DvPlBXvwgbz5EUiV2pY6jqgqdaTXoTCtCZ1oLz/OWDMksDUJXV9fq6mrztk6n4zhOrVbXb+Du7v7qq6+at2NjY4cPH/7SSy8pFIrGhwoODh48ePCLL75Yt6d3795NtnRabkSh3jTtPiIiI08XS4RTRcKpQuHdG0JWlbyfNzfAm8X4sAHerI8nzizeEzc3N7FLcBzoTCtCZ1oFz/N1ydUCS4MwNDQ0IyPDvJ2RkREYGCiVNvu93bt3NxqNZWVlAQEBjb8qk8m8vLwGDhxo4Vs7OSlHMT4sxoct6klElFNSdaNWfbZY+DFXePMSf7NS6KlhvTWsjxfr48l6e1KYK2akAQDawNIgnD59+sqVK5csWaJSqTZt2jR9+nTz/o8++mjw4MFRUVFZWVk+Pj5KpVIQhFWrVkVERDSZgnCP3GVCghdL6HI37XRGulImXCoRLpcKq3P4y2VUqRciPVikB7tPwyLdKdKD9fDAWUYAgGZZGoTTpk376quvIiMj3d3dVSrVunXrzPtXrly5fPnyqKioffv2PfPMM2FhYSUlJW5ubp9++mmH1Qy/UUlpkA8b5PPbKLC0ltLKhdRyIbVc+PIWpZXzaRWCh4x6eLAe7qy7B+vuTkEqFqCiACVT4YEKAOD0LP1FKJVKd+zYkZWVpdPpIiMj604/Xrp0SSaTEdHjjz8+derU7OxsjUYTFBSES0bF4ulCcX4szu93/Z+tFW5U0PVy4UaFsD2d8qv5fB3lVwuMqIuKhbrSUD821J8b5sdwgz8AOJu2jQhCQkIa7Kl/kYtGo9FoNFYoCqwtWM2C1TSqS8O/TrRGytMJNyroRAH/1iXTrCIhWM3iA9jCKG6gD/6UAQCngKkxp6aWUnd31t2dxgdLiMgk0MUS4XCuMHm/cXIo959BEh9czAsAjg6X3sNvJIwGeLNn+nLXk2RdVNTnC8PqFN6IhRUBwKEhCKEJain9O0ZyeKL0myx+4FfGn/KxqiIAOCwEITSrl4YdmCD91wDuwQPGohqxqwEA6BgIQmjFI+HcjAjutYsmsQsBAOgQCEJo3XPRkvdT+VwdJkgBwAEhCKF1XVQ0twf36kVcNgMADghBCBb5Z7Tkkxt8thaDQgBwNAhCsIiPgh67j3vpPAaFAOBoEIRgqaX9JJ/d5DMqMSgEAIeCIARLebvQol4YFAKAo0EQQhv8o69k920+rRyDQgBwHAhCaAMPOf2lt+Q/GBQCgANBEELbLOnDfZ/Np2JQCACOAkEIbeMuo9kR3K5bCEIAcBAIQmizGB92vhhBCAAOAkEIbRbtzS6UIAgBwEEgCKHNojxYZpVQZRC7DgAAa0AQQptJOeqpYSmlGBQCgCNAEEJ7RHvjNCEAOAgEIbRHfy+cJgQAB4EghPbAiBAAHAaCENqjvzdLKRV4RCEA2D8EIbSHu4z8FOx6BZIQAOweghDaCbOjAOAYEITQTv292QUEIQDYPwQhtFO0F51v74Wja6/wK89hCQsAsAkIQmindk+NGnh65QJ/HetXAIBtQBBCO4W6sloTFVa3+Rs/z+BLaoUyfQfUBADQdghCaL/+Xqwds6OrU/i/9OZK9RgRAoBNQBBC+7VjdvTHPKFMTzMjuLLaDioKAKBtEITQfu24cPStFP6Zvpy3C5ViahQAbAOCENqvrSPC6+XC8QJ+TndOI2dltZgaBQCbgCCE9uulYbeqBJ3R0vZvpfBP9eRUUnKVkYGnWlNHFgcAYBkEIbSfjKNID3bZsoUJS2ppx01+US+J+aWHnMoxOwoANgBBCPfE8tnRd6/yD4ZxAcq7LzUurAwXjgKADZCKXQDYNwsXJjTwtP4qv/cBSd0eTzmV4sJRALABGBHCPbFwRLgtne/tSf28WN0ejZxwTz0A2AIEIdyT/l7sYknrCxOuSuH/1kdSf4+nCyvFhaMAYAMsDUKe5995553JkycvXLjwxo0bLbRctWrVP/7xD2vUBnbA0/WLoPUAACAASURBVIW8FSy9xYUJr5YJxTU0LpjV34kRIQDYCEuD8OWXX964ceNTTz3l5+eXkJCg1WqbbHbo0KHXXnvto48+sl6FYOtaPU24+7YwJYyx3+/0xD31AGAbLApCo9H4zjvvrFmzZsKECStXrgwJCdmxY0fjZjqd7m9/+9uLL75o7SLBpkV7U8tBuCeTnxza8JOGe+oBwEZYFIRZWVkFBQXx8fHml8OHDz99+nTjZs8+++yCBQu6detmzQLB5vX3aul6maIaulwqjOrSYECIESEA2AqLbp/Iz893c3OTyWTml97e3unp6Q3anDhx4vTp02+99dZPP/3U8tFu3bp16NChMWPG1O154YUXBg4c2JaynZdWq2UNZxlFFqlkvxbJKquqmizrywxulL/EUF1l+P1+Bc/d0Uqqqtq+jJP12GBn2i90phWhM62F53lLetKiIFSr1TU1NXUvq6urXV1d6zeoqal54okntm3bJpFIGn13Q4GBgb179162bNndCqTS2NhYlUplSSUgCEKDzhddb1cKVBtPlasTg5r4wO0vMD3cjbm6ujTY38VDqLxtary/M9lgZ9ovdKYVoTOthef56urW/9q2KAiDg4MNBkNubm5gYCAR3bp1KyQkpH6DzMzMa9eujRo1ioiMRmNVVZWXl9fp06cjIiIaH00ulwcEBCQmJlry1mAXFkZx717lE4Ma/hlUa6LDufyG4bLG36KRE1ZiAgBbYNE5Qi8vr8TExA8++ICICgoKvv3226SkJPP2pk2biCgyMtJoNJaUlJSUlOzZs8fHx6ekpKTJFASHNCuCO5LHZ2sbnin8IU/o48V8FE18C84RAoCNsPT2iddee239+vXx8fH9+/efN29edHQ0EaWnpycnJ3dkeWAfXGU0I4J7L5VvsL/J60XNcNUoANgIS5812r9///T09JSUFD8/v7p50cGDB5eUlDRoGR8fn5aWZs0awR78uReX+K3puWiS1Qu+vZnCd+ObC0IqN5BAhEsCAEBcbXjEmouLy8CBA+ufHZRKpZ6eng2aSaVSjUZjnerAfvTUsO7utCfzt0HhuWJBylFPTdNJJ+VIKaFKQ5NfBADoPHjWKFjNop7cu1d/C8I9mcIfw1oa72F2FABsAYIQrObhcC6lREgrv5tte243e4LQDNfLAIAtQBCC1cg5mh/JbbjGE1GuTkivFOL9Wx4R4g4KABAfghCs6cme3IdpvM5IezKFCcGcrMXPl6cLK8Ui9QAgNgQhWFOoKxvqzz67ye+5zU8ObeWCUA0WqQcAG4AgBCt7sqdk9WX+WL4wPqSVT5enC5YkBADxIQjByiYEs3I9xfoyjbyVlrhqFABsgaU31ANYiGP0QgyntuCT5elCNyo6viAAgBYhCMH65vawaKYBV40CgC3A1CiIxtOFcNUoAIgOQQii0cgZLpYBANEhCEE0ni64fQIAxIcgBNFo5Lh9AgDEhyAE0Xi6sFLcPgEAYkMQgmjUUjLyVGsSuw4AcG4IQhCTh5zKMTsKAKJCEIKY8NxtABAdghDEhHvqAUB0CEIQE9bmBQDRIQhBTBo5LhwFAJEhCEFMWIkJAESHIAQxeWJtXgAQG4IQxKRxYWW4ahQARIUgBDHhKWsAIDoEIYgJz90GANEhCEFMGjmmRgFAZAhCEBNGhAAgOgQhiAnnCAFAdAhCEBNWYgIA0SEIQUwaOVUYCEkIACJCEIKYJIyUEqo0iF0HADgxBCGIDLOjACAuBCGIDNfLAIC4EIQgMtxBAQDiQhCCyHBPPQCIC0EIIsOIEADEhSAEkWElJgAQF4IQRIaVmABAXAhCEBmuGgUAcUktb3rs2LH3339fEIR58+aNHj26wVfz8vI2btx4/fp1juOGDRu2YMECuVxu1VLBMeEcIQCIy9IR4dmzZydOnDhs2LCEhISHHnro5MmTDRoUFBSYTKYpU6aMGzfu3Xff/fOf/2ztUsExaeSEqVEAEJGlI8LVq1cvXLgwOTmZiG7durVq1art27fXbxAdHR0dHW3e9vPzmz9/vnULBUflKWcYEQKAiCwdEf7yyy8jR440b48cOfLUqVPNtSwrK/viiy8SEhKsUB04AY0LzhECgJgsHRHm5+d7eXmZt318fPLz8xu30Wq1ISEhpaWlUVFRBw8ebO5QmZmZhw4dGjNmzN0KpNLly5cPGDCgjZU7Ka1WyxgTuwprkhuopMalqqqq89/a8TpTROhMK0JnWgvP85b0pKVBqFQqa2vvTmDV1NSoVKrGbdRqdUlJiVarXbFixYQJE86fP89xTYw4/f39e/fuvWzZsro90dHRrq6uFlbi5ARBcLC+ClJQucEgyj/K8TpTROhMK0JnWgvP89XV1a02szQIQ0JCMjMzzdu3b98OCQlprqVarV62bNmrr76al5cXFBTUuIGLi0tAQEBiYqKFbw2OTS0lk0C1JnKRiF0KADglS88RTp06devWrTzPC4Lw0UcfTZ061bx/+/btubm5RJSfn8/zvHnnt99+q9FoAgICOqJicDweuJUQAMRj6YjwySef/OKLL2JiYiQSCRH95S9/Me9fuHDhZ599FhgYuHHjxo0bN3bv3r2srCw/P3/r1q3mlgCtMj9321+JkyIAIAJLg9DNze348ePnz5/neT4mJqbu5F9qaqqnpycR/etf/5o/f/6tW7c0Gk2PHj0UCkVHlQwOB/fUA4CI2vBkGY7jYmJiGuysP/8ZEhLSwrlDgObgKWsAICI8axTE5+nCSmvxcBkAEAeCEMSHlZgAQEQIQhAfpkYBQEQIQhAfliQEABEhCEF8lkyNfp7Bl2PUCAAdAEEI4mv1udtH84UZh00Hc/jOqggAnAiCEMTnKW/pqlGtkRYcNY0IYL8UYfoUAKwPQQjia3lE+OwvphEB7LloSZuCsExPb1zCCBIAWocgBPG1cI7whzzhq9vCm3GSwb7s7B3BZHEUfprOv3bRZK0KAcCBIQhBfM1dNao1UvIx08bhEk8X8pBTFxW7WmZpEn6azt+pIcuDEwCcFoIQxKeRU4WBGmfW0lOmhC5sQsjdh3EP9rX0NGGWVrhaJrjJqLjGqoUCgCNCEIL4JIxUEqr4/WnCQ7nCt1nCG3G/rWEy2I+dKrQoCHfcFB7qygWqWGENhoQA0Io2PHQboOP08mShnxoiPVgPDxbpQT3c2fNn+I0jJB7y39oM9mXvp1p0/cun6fzrcZIb5aaCaurj2VE1A4BjQBCCTTgxRVpaS2nlQlqFkFomfJ0pJEdx44J+t0Jhfy92vVzQGUnV4sc2tVzI11FCANugZIXVAhGWOQSAliAIwVZ4ulCcH4vzaza3XCTU25OdvSMMD2gp27bd4GdEMI6Rv5IKqjugUABwLDhHCPYkzq/162W23xRmRnBE5Hd3RAgA0BIEIdiT2NYuHP31jmASaKAPI8KIEAAsgiAEexLXWhB+ms7PjmDmmVM/BeGqUQBoFYIQ7EkPD1ahFwqbGefxAn12U5gecfdT7a9kGBECQKsQhGBPGNFAH3b6TtPjvKP5gq+CemnuXkqDqVEAsASCEOzMYD/2S2HTdxN+ms7PjPjtI+2Pi2UAwAIIQrAzzT1ozcDTl7f4aeG/3VmhlJKUowpDJxYHAHYIQQh2Js6X+6VIaJyE+7KFnhrW1e13txj6K1mBDoNCAGgJghDsjJ+S3GTsRnnDeNuUys/o1vDzjNOEANAqBCHYn8azo++l8rcqhfmRDT/Pfgo8dxsAWoEgBPsz+PfPl0kpFf552rR9jETZ6ImBGBECQKsQhGB/6o8ItUZKOmR6Y4ikp6aJB5D6Kam5mw4BAMwQhGB/BvmwSyVCrYmIaNFPpuEB7NHuTX+S/ZSYGgWAVmD1CbA/Kil1d2eXSoXzxcK5YuHUH5v9GPsr6ce8ziwNAOwPghDs0mA/9n4q/0UGf3SStIXlCf2VrKDaorV8AcBpYWoU7NJgX7b+Kv/WEElUU6cG6/gpcI4QAFqBIAS7NCGYvREnmd3MqcE6/kpWgKesAUCLEIRgl4LU7O99W//0alyoxkQ1pk6oCADsFYIQHBkj8lGwIlw4CgDNQxCCg8M99QDQMgQhODgEIQC0DEEIDs5PgVUJAaAlCEJwcBgRAkDLEITg4PywTj0AtKgNT5bJysp655138vLyJkyYMHPmzAZf1el0e/bs+fnnn7VabVxc3Pz582UymVVLBWgPfyWdvSN2EQBgwywdEep0uuHDh1dXV48fP3758uXvvPNOgwbHjh3bsGFDRETEiBEj1q1bN3v2bGuXCtAeeO42ALTM0hHhjh07/Pz81qxZQ0Senp6LFi166qmnOO63HB07duwDDzxg3h48eHDfvn21Wq1arbZ6xQBtci/nCGtMpJBYtRoAsD2WjghPnjw5atQo83ZCQsLt27dzc3N/d6B6oVhUVKRWqxUKhZWKBGi/9l01KhC9dpH32mpIr8BoEsDBWToizMvLCw8PN2+rVCq1Wp2XlxccHNy4pU6ne/rpp5cvXy6RNP23dHZ29rFjxx5++OG6Pf/4xz/69evXxsqdlFarZaylx0xDA0qeSmpdyiurJI26rbnOLDewhSelhTX0cIiw6oLp5QHGzijUzuGTaUXoTGvhed6SnrQ0CBUKhV6vN28LgqDX61UqVeNmtbW1Dz/8cL9+/Z555pnmDuXt7R0WFjZjxoy7FUilPXv2bPJo0JjJZEJftZWH3FTNqfyUDfc32ZnnioXpPwhjutDOsVy+TojZza8cLHfHhV+twSfTitCZ1sLzfG1tbavNLA3C4ODgrKws83ZeXp7RaAwMDGzQRq/XJyUlubu7b968uf5MaQNKpTI0NDQpKcnCt4b6OI5roW+hSf5KvqiWBagb/mHYuDM/us4v/YVfM1QyvRtHRF3daUwgbUunp3qhz1uBT6YVoTM7maV9/fDDD3/zzTdlZWVE9Mknn4wePdrT05OIfvrpp5SUFCIymUxz587lOO6TTz6RSrHeL9gQPwUV1rTe7O3L/GsX+WOTpOYUNFvci3vnCo/zhAAOzNLEGj58+Lhx4wYOHBgVFfXrr79+88035v3//e9/o6OjX3zxxa+++mr79u0hISFRUVHmLx08eLDutCKAiPxV5lUJWzlV8E0m/3KsJNLjd80SujA5RwdyhHFBOGcD4JjaMHT78MMPL168eOfOnUGDBrm7u5t3vvfee3K5nIjGjx+fnp5ev32Tl9IAdD5L7qAQiE7fEeL8mki7xb25ty+bxgVhngPAMbXtZ7vxtZ0BAQHmDbVa3a1bN+sUBWBVltxBcaVU8HZhvk3d8jOnO/fcr6a0cqHBYBEAHAPOx4Lj81NSYWsjwhOFwtCmhoNE5CKhBZHcu1d561cGADYAQQiOz19JBa2NCE8WCkP9mx3w/bkX99F1vsJg7coAwAYgCMHx+StZq+cITxQIQ5oZERJRkJrdH8htvY5BIYADQhCC42v19olyPWVphb6eLZ0CXNybW32Zx40UAI4HQQiOz7+1JQlPFQkDfZi0xZ+GEQHMXUYHcpCEAI4GQQiOTyklGUfl+mYbnCxsaV60zl/7cC+eN1mzMgCwAQhCcAotr1N/ooBv7pLR+mZHcDVG2pmBM4UADgVBCE6hhXvqBaJfioQ4v9Z/FjhGr8dJ/u8XvgbDQgAHgiAEp+CvZM3dQXGtTPB0Yf6N1qZoUkIXFu3N1lzGoBDAcSAIwSm0cOHoCctOENZ5PY577aIpv72r3gOArUEQglNo4Z76k80/U6ZJ3dzY3B7cv89gehTAQSAIwSn4KVlzT1k7UdC2ICSi5wdIvrrNXyrBrRQAjgBBCE6huYtlKgx0q0ro69W2INTIafkAyZKTGBQCOAIEITgFPyUrrGliAHeqUIjxZrK2/xw82ZMrrKa9WRgUAtg9LLEGTqG5EeGpNl4pU0fC6NXBkr+fMqmlkgHezEN+rxUCgFgQhOAUmluS8EQh//h97ZwXmRDCztzhnv/VdKFE8FeyGG82wIcFqai4loqqhcIaulNDpbXCAB/2YBg3IoBJsJohgE1CEIJT0LhQjYlqTKSQ/LZTIDpVKLw/sv0nCJ4fwD0/gOMFSisXzhYL5+4IV0rJR0E+ChbnRr5KcpNxJwuFpadMt6qEiSHcg13ZuCBOhR87AFuCn0hwCozIV8EKq4VQ19/GZTcqmZucBVh2K30LOEZRGhalYbMimvjq/YHsuWguWyvsvi2svcLPO2IaGcBNCWOTQrl7f2sAuHcIQnAW5tOEoa6/7TldzLX1xol2C1azP/dif+7Flevpuyz+60zh//1i6OHB/hjGxfuzfl5Mg7OMACJBEIKz8FM2fLjML3e49l0pcy885DQjgpsRQQZecixf2JPJLzvNXywRfBWsnxfr70X9vFhfL9bNrZVloQDAWhCE4CyC1ez//WL6NotFe7Fob9bXi50u5p7sI9oVLDKOxgSyMYESIuIFulkpnC8WLpQIW28Il0v5HJ0Q6c56erK+nqyXJ/XzYuFuDFfbAHQEBCE4i1VDJKeLhPPFwvFCYd1VPrVc4Ij6e9tEuHCMuruz7u5savjdPdVGulomXCkTLpcK76cKKaV0p0bopWH9vFgfT9bLk0VpKERtE8UD2DsEITgLlZQSurCELnfDQ89TVnGVnLPRU3NKKcX4sBif36KuXE+XS4VLpUJKibAnk79aRlUGIUrDenmySA/W3Z26u7Me7sxVJmLVAHYJQQhOSs6Rn8KengvjIadh/myY/2/RWKana2XClTIhtUzYnk43KvjrFYKHjHp4sG5uLNyNdXOnbm4s3I0CVRg7AjQLQQhgrzRyGuLHGlzvk60VblRQRqVws1L4PosyKvmblUK5nsJcWZgrhbmxuxuuLFhNQWomxyU54PQQhAAOJVjNgtU0qsvv0rHaSLeqhNtVdLtKuF0pfJ9Nt6v4bC3lagVvBQWrWZCKhbhSFxULUlGQmnVRUaAKd3SAs0AQAjg+pZR6alhPDRH9LiAFonwdZVYJuTohW0u5OuFqKeXq+Fwd5eqEWhN1UbEuKvJXskAV+SqYn5K6qMhXwXwVFKBi7jgfCQ4BQQjgvBhRFxV1UbEGAWlWbaT8aiFPRwXVQq6OimqESyW0P5uKaviCaiqoFmpN5KNgPgryU5JGIgtwNXkryNuF1f3Xy4W8XDCyBFuHIASApimlFO7Gwt2oyZgkoloTFdUId2qooJqyy/RaxkpqhbRyobiQimv4O7VUWksltUKFnrxcyNOFaeTk6UIaOfN0IY2cNC7MQ0YecvKQMw85ucvJTUaecuYmIzxMADoTghAA2slFcveUJBFVepjc3JqOL16gkloqrRXK9FSqpzLzRi2V6oWsKirXU7meLzdQhZ4qDVSmFyr0JJeQm4xcpczThdRSUv9vWyUlpYQ85EwtI5WU3GSkljKFhDzkpJSSQkIecibjCHO20CYIQgDoWBy7uyLH/3a0fi+HzkiVBtIahdJaqjKQ1khVBqFMT1ojVRupVC9kaanaSJUGqjLytSYq11O1kWpMVKYXjDxVGMhFQiopqaVMzpF5iKmRE8dII2dE5OlCRKSRE2PkJmNSRlKO3GREdLexQkJKCZP8L1PVUpJLiIg85Yzot8bgGBCEAGBzVFJSSYmIkVvdvrbdClljomojVRkFA08VejIJVFpLPFG5XhAEKtMTEZXWEhFVGgSjQAaeqgxERBUGMvFUbRJqTGTkqdJARKQ1kt5EAlGZXiD6bb+cI7WMiEgpYeYVvurmdc1JbOYqZbL/jZZVUnL531pgCgkp/9eG0d2QJqLaWqlaydfPWo5Rg8Wf67ev328ukgb77o6VG+OIPOodwVVGMmedkUYQAoADUkhIISFPl8bxac1nC9SaSGckItIZhVqeiKjSQEb+d18iupvHZjoj1ZrubpvT2kwgKtXffcKD3kAVgpBm+O2NeIHK9b97a4GoTM/T79U/eMs7ie7+WVD38rloyTN9nTQJEYQAAO3kIrk7AmsqcetrW/pWVhrd3LBYZedx0vwHAAAwQxACAIBTQxACAIBTQxDamddee00Q7GnNBJtlMpnefPNNsatwEFVVVevWrRO7CgdRWFi4efNmsatwEBkZGTt27Gi1GYLQzvz3v/81Go2tt4PWVFZWvvXWW2JX4SDy8vI2bdokdhUO4saNG9u2bRO7Cgdx8eLFr776qtVmCEIAAHBqCEIAAHBqCEIAAHBqItxQf/v27T179kRERHT+WzsAk8kUFRUldhWOQBCEqqoqfA6twmg05ufnozOtora2tri4GJ1pFTqdztPTs9VmrPMvQeR5/vr16zIZnlnbHrW1tS4uLmJX4SDQmVaEzrQidKa1CILg7e2t0WhabiZCEAIAANgOnCMEAACnhiAEAACnhiAEAACnhiAEAACnhvUIbZcgCKdOnTp8+HBJSUnfvn1nzpwpl99do7q4uPi9994rKCiYMGHC2LFjxa3TvvA8/+GHH4aFhY0ZM8a8p6KiYuPGjbm5uaNHj548ebK45dmRtLS07du3l5aW9uvXb+7cuRzHEdGtW7e2bNmi0+mSkpIGDRokdo32obS09MMPP8zKygoLC5s7d66Hh4d5f2pq6tatW00m0+zZs/v06SNukbYsIyPjzJkzJSUlSUlJ9S8QPXfu3Pbt2xUKxdy5c7t162beaTAYPvjgg9TU1H79+j366KMSiYQwIrRlGRkZM2fOLCsrCwkJWbt27QMPPMDzPBHV1tYOGzbs8uXL4eHhc+fO3bp1q9iV2pO33357yZIlH3zwgfmlyWQaNWrUyZMnIyIi/vrXv7799tvilmcv9u/fP3jw4PLy8q5dux4+fNj8/Nu8vLzY2NjKykpfX9/ExMRjx46JXaYdqK6ujouLO336dL9+/X7++eehQ4fW1tYS0fXr1+Pi4hhjrq6u8fHxFy9eFLtSG3Xnzp2YmJj169cvXLgwPz+/bv+pU6cSEhK8vLxqa2tjY2OzsrLM+//0pz998sknPXr0WLt27dNPP323tQC2Sq/XG41G83ZpaalUKk1JSREE4eOPP+7fvz/P84Ig7Ny5MyoqyrwNrcrIyOjbt++SJUtmz55t3vPNN99069bN3M8HDhwICgoyGAyi1mgHDAZDcHDwjh07Gux/4YUXHnnkEfP2yy+/PGnSpE4vzf6cOHHC3d3dZDIJgmAwGFQq1ZkzZwRBWLx48RNPPGFus3Tp0rlz54pYpC2r++1HRFevXq3b/8gjj7zwwgvm7dmzZy9btkwQhOvXrysUipKSEkEQsrKyFApFfn6+IAgYEdoumUxmHrYTkcFg4Hne1dWViI4ePZqYmMgYI6Jx48Zdu3atoKBAzELthCAIycnJb775plqtrtt55MiRMWPGmPt51KhRRUVFN27cEK9G+3Dx4sWKiopBgwatXbt28+bNlZWV5v1Hjx4dN26ceXvs2LFHjhwRr0a70bVrV0EQ0tLSiOjq1atSqTQsLIyIjhw5gs60hPk3YWNNduCxY8cGDhxoftZMcHBwt27dTpw4QZgatRd//etfk5KSzD8heXl5vr6+5v1ubm5KpTIvL0/U6uzDhg0bQkJCEhMT6+/Mz8+v60ypVOrl5YXObFVGRoZMJktKSiorK9u7d++AAQMqKiro959MPz+/ysrKqqoqUSu1AwEBAdu2bYuPj4+Kiho1atRnn33m7e1NjTozLy9PwMNPLKbX64uLixt0IP3+552I/P39c3NzCRfL2IXnnnvuypUrP/zwg/mlVCqtvyShyWSqu4gGmpOTk7Nq1arjx4832C+VSk0mU91Lg8GAzmwVx3HFxcX79++PiYkhori4uA8//HDx4sX1P5lGo5ExJpXiN0wrcnJykpOTX3nllZEjR/7www8LFiw4c+ZMQECATCar35kymay5oQ80JpFIOI6r34Hmn+vmft7xMbV1K1as2LNnz+HDh+seHRsUFGT+K4aICgoK9Hp9YGCgeAXah927d5eUlJinSnJzc2traydPnrxnz56goKCMjAxzG61WW1ZWhs5sVVBQEBH16tXL/LJXr163b9+m338yc3JyvL29FQqFWEXai127dnXv3v3xxx8nosjIyA8//PDrr79OTk4OCgrKyckxt8nJyTH3OVhIIpH4+/vn5OT07NmTiHJycsw/1/V7tf5+TI3atDfeeGPbtm379+/38fGp2zl58uS9e/fqdDoi2rlz5/Dhwy15vLqTmzZt2nfffbdhw4YNGzZMmDAhLi7upZdeIqLJkyfv37+/vLyciHbt2tWzZ8/w8HCxi7V1MTExoaGhJ0+eJCKTyXT69GlzKE6ePHnnzp3ma5s///xz3ItiCW9v7+zsbL1eT0S1tbXZ2dnmH3ZzZ5rboDPbYcqUKZ9//jkRCYKwc+dOcweOHTv26tWr169fJyLzHRcJCQmEh27bsitXrvTu3btbt251Obdq1arhw4fzPD9lypTc3Nw+ffp8++23X3755ciRI8Ut1b48//zzt27d+vjjj80vZ82adeHChdjY2L17927ZsmXixInilmcXPvvss6effnrKlCkXLlxQq9X79u2TyWRVVVUjRozQaDR+fn5Hjx49evRojx49xK7U1tXU1Nx///06nW7YsGE//fSTRqM5cOCAXC6/c+dOfHx8eHi4QqE4f/788ePHMVfRnHHjxpWUlJw5c6Z3794KheLw4cPu7u4ZGRnx8fHDhg0rKysrLCw8duyY+QbNlStXbtq0aezYsd99992yZcsWL15MCEJbptPprl69Wn9P9+7dzf8veZ7/8ccfi4qKRowYgR+PtjJPjdaN/ARBOHbsWE5OTnx8fGhoqLi12ZFbt26dPHkyKCgoPj7efDc9EdXW1h46dEin0yUmJra69g2Y8Tx//Pjx7Ozs0NDQoUOH1p0L1Ol0Bw8eNJlMiYmJbm5u4hZpyy5evGgwGOpeRkdHm68DLy8vP3jwoEKhuP/+++vP0p89ezY1NbVv3751jylAEAIAgFPDWhjj3AAAAEhJREFUOUIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBqCEIAAHBq/x/r1bgz0zyiLQAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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MWLECE9Pz/Hjx/fs2ZOICgoKxAanTp3atm3b9evXfXx8nnzyyW7dum3evPn+++8notGjR4tPGaqpqdm0adN9993XaA0bNmzgeX7Dhg2MsQceeCA6Ovqf//xnbm5uQEDA888/L5ff/IFLSkqys7Nffvll62OO2pNkQRjmyaotVGYkPw+pSgAAaNKAIPY/ie33CAgPGakb/H08derUMWPGLFiw4MyZM/n5+XfffTcRnTlzZs6cOTk5OSqVqri4uKnkKCoqKioq6t+/v/gyJSXl8OHDRGQymZ555pmdO3dyHKdQKBo+U6+us2fPJiYmirdS4Thu0KBB6enpYhD27t1bbBMeHv7rr7828w6pqanidGhgYGDXrl3Pnj179913BwUFdejQ4b777pswYcI999wTEBAwZcqUiIiIu+++e8yYMQ899FB7Pn9DsiAkoi6+LKNCGBiMW28DgMMJVFFauMR/OyUnJwcHB+/cuXP79u0PP/ywQqEgopkzZ06fPv3xxx8notmzZ/M83+jXqtVqQRBqa2vFr7I+jejTTz/NzMxMT09XKpXHjh0TbxzdFE9Pz7qPMTIYDJ6enuKxjUHl6elZN2urq6s9PT1VKtXevXszMzM3b948Y8aM1157bfr06Z988slrr732/fffv/POOydOnHjvvfdseX+7kPIpgN18GWZHAQCa8fDDD//3v/9dv379o48+Kp4pLCyMi4sjovLy8s2bNzf1hRqNJikpSZwFra2t/frrr61fHhkZKd4Lc9WqVdb2Wq22tLS03pv079//woUL6enpRJSfn79jx45hw4a1qv5hw4Zt3bpVfOfDhw/n5ub27du3vLzcbDZ36dLl+eefnzBhwrlz56qrq/V6fVhY2IwZM5555plz58616rvcJilHhF1xvQwAQLMeeeSRl156KTExsVevXuKZ2bNnT5w4cdCgQVeuXElISGjma5csWTJu3LhvvvkmNzfX+hDZyZMnDx48eNSoUZWVlV26dLE2njVr1gMPPBAVFfXaa69Zp1vDwsI++OCDtLS0fv36HT9+/O9//3trnwg4bNiwadOmifX/9ttvS5cuDQgI2LJly8yZM5OSkiwWS2Zm5tatW7OzswcNGtS3b1+VSnX8+PFPPvmkVd/lNjHrNbXtZu3atVu3bv3iiy++zuK/uCx8k4YHMbdCVVVViw/3ABuhM+3I2Ttz1qxZvXr1mjlzptSFNKKiokKhUFjnJIno+vXrOTk5iYmJHMcRkVqtNplMOp3Oz8+PiIqKigICAsQ/0uv14s4HHx8fs9ns5eVFRDqdLj09PSwsLCIiorKyUqvVim9rsVgqKyu9vLwYY1VVVf7+/tYCxAezBwYGimd0Op31EQu1tbW1tbUajaZuzdXV1SaTyfqchsLCwuvXr3fp0sV6pry8PCMjQ6VSxcfHi5O3BoMhIyPDbDbHx8eLddb1xBNPpKSkiBPCthOfUN/w3eqRckTYTcsulDc+uw0AAKKGl8NERUXV22anUCjEFCSioKAg63kvLy/r9TLWrYEajWbgwIHisTUFiUgmk1nfxJqCYgH1BoJ1Y6/Rhw6p1WrrA/uIKDg4ODg4uG4DrVY7YMCAumc8PT379OlDUpByjbCzL7uqE0yIQgAAkI6UQajkKNyTXanCMiEAAEhGyiAkom5awqPqAQBAQlIHoS/Do+oBAEBCEgdhVy3DiBAAACTkCCNCBCEAAEhGyu0TdHMHBYIQACQmk8kWLlzYzvu4myIIgvU5SiC6du3akCFD2ujNJQ7CQBUxoqIaClJJWwgAuLVXX331sccek7qKm+re0hOs4uPj2+idJQ5C+n1QGBSKf/4AgGQCAwOtt02RnLPfpsfpSLxGSJgdBQAASUkfhF19cettAACQjPRBiEfVAwCAhKQPwq7YUw8AANKRPgg7ebNcg1BjkboOAABwS9IHoZyjTt4sE8uEAAAgBemDkIj6BLDjxQhCAACQgEMEYb9AdhRBCAAAUnCIIEwOYkeLEIQAACABhwjCPgHsXJlgxPUyAADQ7hwiCNVyivNh6WUYFAIAQHtziCAkon6YHQUAACk4ShBimRAAACThMEEYyH7DhaMAANDuHCUIE/zZlSpBb5a6DgAAcDOOEoQKjuK17GQJBoUAANCuWvFg3k2bNi1evLi2tnbKlCl/+9vf6v3pzp07V6xYUffM4sWLQ0NDbX9/cZkwNQRP6AUAgPZjaxD+9ttvjz322Oeff+7v7z9lyhR/f//JkyfXbdCpU6cJEyaIx7t37/7xxx+Dg4NbVUpyENuRjREhAAC0K1uDcOnSpdOmTbvvvvuI6F//+tdHH31ULwhjY2NjY2PF45UrV06bNo3jWjfvmhzEFpzkW/UlAAAAt8nWrDp9+nT//v3F4/79+586daqpltnZ2bt27Xr00UdbW0o3X5ZvEMprW/t1AAAAt87WEWFhYaFWqxWP/fz8qqqqDAaDp6dnw5affvrp8OHDO3Xq1NRbXbp0afPmzTExMTcrkMs/+uijlJQUIkrQKg7cMNwRgnFhk/R6PWNYRrUPdKYdoTPtCJ1pLzzP29KTtgahj4+PwWAQj3U6nVKpVKvVDZsJgrB69er58+c381adOnW666673nvvPeuZqKgouVxORANDLek6xX2xjnItqwMSBEGj0UhdhYtAZ9oROtOO0Jn2wvN8dXV1i81sDcKYmJiLFy+KxxcvXuzYsWOjMbt3796SkpK//OUvzbwVx3EajabRIWNyEPsqC9fLAABA+7F17DVlypRVq1ZVVlZaLJaPPvpoypQp4vn33nsvPT3d2mzlypUPP/xwo4NFW/QLxI3WAACgXdkahOPHjx8yZEhMTExERIRMJnvuuefE80uXLj1//rx4XFFRsWnTpunTp99yNZ18mN4k5Lc8kAUAALAPW6dGZTLZJ5988u6775pMpsDAQOv5jIwM67Gvr69er7+dahhR30B2rFi4NxILxQAA0B5ad1mKr69v3RRsC8lB7GgRrhoFAIB24nDXZ/YLYr9hmRAAANqLwwVhciA7giAEAID24nBBGO7FFBy7rkMWAgBAe3C4ICSifnhaPQAAtBdHDEI8rR4AANqNQwZhEDtYgCAEAID24IhBeEcHdqZMKKqRug4AAHADjhiEHjIaEc59dw27CQEAoM05YhAS0f0d2TdXEYQAANDmHDQI743kDuTjIb0AANDmHDQINQoa1oHbdgODQgAAaFsOGoR0c3YU144CAEDbctwgHNeR25XD681S1wEAAC7NcYNQq6TkILYjG7OjAADQhhw3CIno/o4cZkcBAKBNOXoQbrvB12JMCAAAbcahgzBETd21bE8uBoUAANBWHDoI6ebsKIaEAADQVhw/CNm3V3kzohAAANqGowdhR28WqWG/4GEUAADQNhw9CAmzowAA0JacIAgnxLCvrwoYEgIAQFtwgiDs4st8FHSkEFEIAAD25wRBSEQPxXFrLmF2FAAA7M85gnBaZ7b+Mm/AfUcBAMDenCMIw71YSjD7GpfMAACAvTlHEBLR4125/2YgCAEAwM6cJgjHRHGZFcKFclwyAwAA9uQ0QSjn6JE4bvVFDAoBAMCenCYIiejxrtyqTN6EKAQAAPtxpiDs4ss6+7JtN5CEAABgN84UhHTzkhksEwIAgN04WRBOjOF+LeRzDchCAACwDycLQrWcxsdwqzIRhAAAYB9OFoRE9HhX7pMMHkkIAAB24XxB2C+Q+SrppzxEIQAA2IHzBSGJg8ILuHYUAADswCmD8OE4bmcOf7ECg0IAALhdThmEWiU901P2ynEMCgEA4HbZGoQ8z7/zzjtDhgwZO3bsL7/80mibkpKS5557LjU1dfTo0d9++639imzE33tyB/KF48UYFAIAwG2R29jugw8++PTTTz/55JPz58/fc889Z8+ejYiIqNvAYDAMGzZs4MCBCxYsqKmpMZlMbVDtH9RyeqEX9+9jlm2jbP0RAAAAGrI1RT788MP3338/JSUlJSVl27ZtK1eufOWVV+o2WL58uY+PzyeffNIGRTZuRjfuvXR+b54wvANrt28KAAAuxqap0YqKiqysrAEDBogvBwwYcPLkyXptfv3117S0tFdffXXChAlvv/220Wi0c6UNKDh6NYl74YgF06MAAHDLbBoRFhYWEpGfn5/40t/fv6CgoF6b69ev79ixY968eTNnznz99ddPnjz5xRdfNPpuly9f/uGHH/r06WM989Zbbw0cOPAWqh8TTG+f8vgqQz86zF0unNHpdFKX4DrQmXaEzrQjdKa98DzPWMtThjYFoY+PDxEZDAalUklEer3e19e3XhuNRjN8+PBnnnmGiCIiIuLj41esWOHp6dnw3Tp27DhgwID58+eLL2UyWY8ePRQKhS2VNDQ/mf/XUW58FznnNvOj3t7eUpfgOtCZdoTOtCN0pl3wPF9dXd1iM5uCMCgoyNPT8/Lly3379iWiS5cuRUdH12vTsWNHjuOs7Xmer6ysbDQIZTKZv7+/+Fa3b0wU9+4Zfu1l/uE4p9wKAgAA0rIpPDiOmzRp0pIlS4ioqKho48aNkydPJqKysrIFCxaIefvII4/8+OOPZWVlRLR+/fq4uLjQ0NC2rPwP8/vKXj7GGy3t890AAMCl2DqKev3110+cOBEbG9utW7cpU6YMHTqUiEpKSl566SWDwUBEQ4cOnTJlSrdu3RISEt59992mFgjbwuBQFq+lD8+5yzIhAADYka3bJ8LCwk6cOHHjxg2NRmO9aiYuLk4Q/rhmc+HChS+88IJOpwsPD7d/pc1aMkiWvNl8TySL17rNUiEAANhD69bVIiMjrSnYKF9f3/ZPQSLq6M3mJcke32/BXgoAAGgV17nA5G/xnEZBH6RjghQAAFrBdYKQES0fLFt4ynKuHKNCAACwlesEIRHFeLNX+siewAQpAADYzKWCkIj+Fs8pZZggBQAAW7laEHKMPh0qW3jKch4TpAAAYANXC0KyTpD+bDFhWAgAAC1xwSAkor/FcwEebPZB3GwGAABa4JpByDFaO1z2a6Gw+CxGhQAA0BzXDEIi0ijou5GyN09Zvr+OxUIAAGiSywYhEUVr2Ma75NP3m9PLkIUAANA4Vw5CIhoUwv5vkGzsDktRjdSlAACAQ3LxICSiiZ24ybHs/l1mPKcJAAAacv0gJKLX+8qCVWwa7jgDAAANuEUQcozW3SmrqhWm7EUWAgDAn7hFEBKRkqOv0+RVJuHx/RYeWQgAAL9zlyAkIg8ZbbxLfkMvPPEzshAAAG5yoyAkIk85bRkpz6oSZhzAFCkAABC5WxASkaecvhspP18uzD6IcSEAALhfEBKRt4J+uFt+plT46y5LpUnqagAAQFLuGIRE5KOg3ffIu2sp+VszHtgEAODO3DQIiUjO0ZvJspf7cHdsNW++hntzAwC4KbnUBUjs4Tgu1oeN32U5USLMS5IxqesBAIB25r4jQquUYHbkL7IfbggP7MItSQEA3A6CkIgo3Ivtv0/exZd6fWP6FtOkAADuBEF4k4eM3kyWfZMmf+EIP3G3pdQodUEAANAuEIR/MjCYnfirvJMPJXxtxhN9AQDcAYKwPrWc3kyWrR4me/qgZdo+S2G11AUBAEBbQhA2Li2cnRsv7+hNCd+YPkjncUM2AABXhSBskqecXk2S/Xyf/PsbfP/N5iNFCEMAABeEIGxBF1+2Y7R8djz3lx3mpw5YsqoQhwAALgVB2DJGNK0Ld3a8IlBFyd+aH/3Jcg53ZQMAcBUIQlv5e9Ab/WRZkxR9A9nIHyxjdpgPFyIOAQCcHoKwdbwVNLcnlzlBPiKcm7DbkrbNvO2GgDwEAHBeCMJb4SmnOT24rEnyuT25105Yunxp/iCdrzZLXRYAALQegvDWyRiNieIOjZUvGyzbmcN32mB69bjlug7jQwAAZ4IgtIM7w9j3o+R77pWXGqnvt+bRP5q/yuJrcctSAABngCC0m+5atjhFdmOy4tHO3LLzfOQ607OHLMeKMUAEAHBo7v48QrtTyWhyLDc5lsuqElZl8lP2Wsw8jY9hEzpx/QLxuEMAAIeDEWFbifFm/9tXljFBvmmETCmjR36ydNpgfv6w5ac8wYxZUwAAh9GKEeGePXsWL15cXV09efLkadOm1ftTvV7/7LPPWl/ee++9Y8eOtUuJzi7RnyX6y17vS2dKhW+uCs8ftlypEkaEc/dFsdGRXICH1PUBALg3W4Pw/Pnz48aNW7JkSWho6GOPPaZWqx988MG6DWpqalasWLF06VLxZVhYmJ0rdX4J/izBn81L4vIMtO0G/81V4emDpm5alhbG0sK5QSFMifE5AEC7szUIP/7440mTJj3yyCNENG/evMWLF9cLQtGMGTPsWZ2L6uBJj3flHu9KRovsYKGwK4f/nyOWC+XCoBCWFs4NDmFJgUyBUAQAaBe2BuGJEyemT58uHqekpMydO7dhG0EQHnvsMY7jhg8f/tBDDzGGa0Na4CGj4R3Y8A6yN/pRmZH25vF7c4XPLvJXqoS+gWxwKEsN4VKCma9S6kIBAFyXrUFYUFDg5+cnHvv7+1dXV1dUVPj6+lobKBSKF198sXfv3iUlJS+//PKRI0cWL17c6FtduXLlhx9+SEpKsp555513+vfvf6s/gotQEI0MpJGBRIlUZWaHitihYrbgOHeilIV7Ur8Aoa8/nxzAR8v1+BeGvej16Ey7QWfaETrTXniet6UnbQ1CjUZTXX3zYe0Gg4HjOC8vr7oNfHx8FixYIB7369cvJSXlrbfeUqlUDd8qKipqwIAB8+fPt57p2bOnhwcuGvmDhuivWvprZyIii0Bny4QjRcKhQuHTLOFyhaKnP9cngCUFsqRAluDHPGRSl+u0BEHQaDRSV+Ei0Jl2hM60F57nrcnVDFuDMDo6+sqVK+LxlStXwsPD5fImvzYmJsZisZSXl4eGhjbyLeVyf3//vn372vit3ZyMidedsie6EhHll+ku13odLxYOFQofneMzK4U4H9bDjyX4sR5+lODPOmoYh39KAgDYzNYgnDRp0quvvjp37lwvL6/ly5dPmjRJPL9y5cqBAwfGx8dfv349ICDAy8uL5/lFixbFxcU1moJwm7zkQqofSw25mXVGC50rF86WCellwooLwtlyKqoWOvuyLr6siy91vXnAtFhlBABogq1BOH78+O+++65z584+Pj5arXbZsmXi+YULF7788svx8fG7du2aO3dudHR0cXFxYGDg+vXr26xm+IOHjPoEsD4Bf4wBq0yUUSFcrBAyKoStN4T30vmLFYKHjDr7sDgf1tmXxflQhBcLVlMHT+ajkLB2AACHYGsQymSyL774Ii8vT6/Xx8XFWc+fO3dOJpMR0fTp08ePH5+Tk+Pn54exoIS8FdQvkNW7nVtBNV2sEC5WCpcqhc3XKNfAF1ZTnkGo5SlYzWK8aUAQSw1hKSFcUCOrugAArqx19xrt0KFDvTMKxR9jCh8fHx8fHzsUBfYWoqYQNRscWn/xsMZChdVCZgUdLBQ+Ps8/us8SqmaDQtjM7lz/IKw0AoBbwE233ZpKRlEaFqWhtHBGxPECnS0T9uQK9++yjApnC5JlIWqpSwQAaGO4fwn8gWOU4M/m9uQyJsgjNdRjo+nV4xY8WBEAXBuCEBrhJadXk2QHx8oPFwp9vjH/lIenKgKAy0IQQpO6+LIf7pYvTObG7zIXtrwnFQDAKSEIoQVjo7mH4rj/nLZIXQgAQJtAEELLXuwtW5XJ5+gxQQoALghBCC0LVdP0Ltybp3DZDAC4IAQh2OR/esnWXeavVmFQCACuBkEINglU0YxuGBQCgAtCEIKt/tlLtukafwWDQgBwLQhCsJVWSbO6c/NPYFAIAC4FQQit8Peesu+v8xkVGBQCgOtAEEIr+Cppbk8ZBoUA4EoQhNA6c3pwO3P48+UYFAKAi0AQQut4K+ihOO7bawhCAHARCEJotaQAdrIEQQgALgJBCK3WK4CdQhACgKtAEEKrdfNlN/SCziR1HQAA9oAghFaTcxSvZWfKMCgEAFeAIIRb0RvLhADgKhCEcCuwTAgALgNBCLeitz87WYogBABXgCCEW5EYwNJLBQuiEACcH4IQboWPgkI92UXcdBQAnB+CEG4RrpcBANeAIIRb1MufncIyIQA4PwQh3KLeAXTLI8IPz/Kv4REWAOAYEIRwi255atTE01un+UtYXwQAx4AghFsU6cVMPBVUt/oLN1zhy2uFsloEIQA4BAQh3LpetzQoXHSGnx3Plde2RUUAAK2GIIRbdwuzo3tyBYOZJsVyZcY2KgoAoHUQhHDrbuHC0ffSLf9I5Pw9CCNCAHAQCEK4da0dEWZWCEeLhIdiOT8PVmbEGiEAOAQEIdy6eC27rhMMZlvbLzrDz+zOqeXkJSczT0ZLWxYHAGAbBCHcOjlHXXxZum0PJiw10ldZ/MzuMvGlr5IqMDsKAA4AQQi3xfbZ0SXn+Ps7cqHqmy/9PBh2UACAI5BLXQA4NxuvlzFaaOl5fuc9MusZrZLKceEoADgAjAjhttg4Ilx7me8VQPFaZj3j50FlmBoFAAeAIITb0iuAnSkV+Jai8P10/u89ZXXPaJWsHBeOAoADsDUILRbLokWL7rnnnsceeywjI6OZlij2pqQAACAASURBVIsWLfrHP/5hj9rACWiVFKhilyubi7SzZUJFLaWFs7onMSIEAAdhaxC+8cYbn3322bPPPhsTE3PHHXfodLpGm+3YsWPRokVr1qyxX4Xg6Hr5s5PNLhN+d10YG83Yn09qldhTDwAOwaYgNJlMS5Ys+eCDD9LS0l555ZWYmJj169c3bKbX6//xj3+88cYb9i4SHFqvADrV7DLhlmv8mKj6nzRMjQKAg7ApCLOzs4uKigYNGiS+TE1NPXbsWMNm//znP5988smOHTvasT5wfM1fL1NYTefKhaGh9QaEmBoFAEdh0/aJ/Px8b29vufxm44CAgEuXLtVrs2/fvuPHjy9evPjAgQPNv9vVq1d//PHHPn36iC85jnvnnXf69evXysrdVFOT0hLqomK/FSkrKqu4+mFHRPRNlmx4iKzWUFUv9VQ8V6SXV1UZ2qXGxjlgZzovdKYdoTPthed5Vn9ZphE2BaFGo6mpqbG+NBgM3t7edRtUV1f/v//3/7788kuZTNbgq+sLDw/v37///PnzrWfi4+PVanUzXwJ11et8ycV7U4TGfLhKMzK8kQ/c9gLL/bHM29uj3vkOvoLumkXyn0XyAlwJOtOO0Jl2wfN8dXXLD021KQgjIiLMZnNOTk54eDgRZWVlRUVF1W1w48aNjIyMIUOGEJHZbNbpdP7+/kePHo2NjW34bgqFwt/fv2/fvjb9HOAMZnbnPj7Hjwyv/88go4V+yuNXDFE0/BI/D8KTmADAEdi0Rujn5zdixIgVK1YQUW5u7rZt2x588EEiys/PX7JkCRF16dLFbDaXlpaWlpZu2bIlMDCwtLS00RQElzQlljtQwF/T1V8p3J0rJPqzQFUjX4KrRgHAQdi6feLtt99euXJlcnJy7969Z8yYkZiYSERXrlx5+umn27I8cA6ecpoSy/03g693fst1fkx0458xPIkJAByErfcaTUhIuHTp0oULF4KDg0NDQ8WTAwcOrKqqqtcyNTU1MzPTnjWCM5jVnbtzm/nlPjLF78EnEH1/Xdh1T+NBqFVSpYkEopYXsgEA2lIrbrGmVCoTExOtKUhEHMdpNJp6zeRyuVartU914Dy6aVlXX7b52h+DwuPFgkpGXX0bTzoZI7WMqkztVR8AQBNwr1Gwm1nduY/P/xGEW67z46KbG+9hdhQAHAGCEOzmrx25C+V09vfn9G65LjS1QCjC9TIA4AgQhGA3Co6md2UrMngiyjUI16qEQcHNjwixgwIApIcgBHua0Y37/CKvN9N314TRkZy82c+XVsnK8ZB6AJAaghDsKdKLpYZyG67wW67zY6JauCAUI0IAcAQIQrCzWd2599P5A/nCqIgWPl1YIwQAR4AgBDsbFcFqLDQgmPkqW2iJJzEBgCOwdUM9gI0Y0St9OC8bPll+HnSpsu0LAgBoFoIQ7O/hONvuYYs1QgBwAJgaBclolYSrRgFAcghCkIyfkmFECACSQxCCZLQeuGoUAKSHIATJ+CmxRggA0kMQgmS0HrizDABID0EIkvGSk5kno0XqOgDAvSEIQUpYJgQAySEIQUq47zYASA5BCFLCnnoAkByCEKSE+24DgOQQhCAlPw9WhvtuA4CkEIQgJYwIAUByCEKQEvbUA4DkEIQgJeypBwDJIQhBShgRAoDkEIQgJWyoBwDJIQhBSn5KXDUKABJDEIKUMCIEAMkhCEFKWCMEAMkhCEFKuGoUACSHIAQpaZVUaSIeUQgA0kEQgpRkjDxlVGWSug4AcGMIQpAYZkcBQFoIQpAYrpcBAGkhCEFi2EEBANJCEILEsKceAKSFIASJYUQIANJCEILEsEYIANJCEILEcNUoAEgLQQgSw4gQAKQlt73p7t27//vf//I8/9hjj40aNaren+bk5Hz00UcZGRkcxw0aNGjmzJkqlcqupYJrwhohAEjL1hHh0aNH77///lGjRo0ZM2bSpEm//PJLvQYlJSWenp6PPvro+PHjP/vss1mzZtm7VHBNuGoUAKRl64hw8eLFM2fOnDp1KhFdvHjxgw8+SE1NrdsgMTExMTFRPPbz85s2bZpd6wSXpVViRAgAUmrFiHDw4MHi8ZAhQ44ePdpUy4KCgnXr1t111112qA7cgJ8H1ggBQEq2jggLCgr8/f3F44CAgLy8vIZt9Hp9ZGRkZWVlXFzczp07m3qra9eu7d69+84777SemTdvXt++fVtTtvvS6/WMMamrsCeFicqMHjqdrv2/tet1poTQmXaEzrQXnudt6Ulbg9DT09NovPnv9urqao1G07CNl5dXaWlpbW3t66+/fvfdd585c4bjGhlxdujQoUePHi+++KL1TL9+/by8vGysxM0JgtBo5zuvCBWVm0yS/FCu15kSQmfaETrTXnier66ubrGZrUEYGRl59epV8fjq1auRkZFNtVQqlc8999z8+fPz8vLCw8MbbRAaGpqWlmbjtwbX5iknXiCjhTxkUpcCAG7J1jXCCRMmrFmzxmKx8Dy/evXqCRMmiOdXr16dnZ1NRNnZ2RaLRTz57bff+vv7h4aGtkXF4Hp8cb0MAEjH1iB86qmnLBZLQkJCr169ysvLn376afH8nDlzzp49S0Rr1qwJCwsbPHhwt27d/v3vf69du1Ymw7/wwSbYQQEAErJ1alSj0ezfvz89PV0QhISEBOvyY1ZWlre3NxH961//evLJJ69cueLr6xsbG6tQKNqqZHA52FMPABJqxZ1lGGMJCQn1TlovJSWioKCgoKAg+9QF7gR3WQMACeFeoyA9rQcrw323AUAiCEKQnp+SyjEiBACJIAhBen4eVIY1QgCQCIIQpKdVsnJcNQoAEkEQgvRsue/2mos8riwFgLaAIATptTg1uidXmLbPsiuHb6+KAMCNIAhBes1PjVaZ6ImfLXeGscOFmD4FAPtDEIL0mh8R/vOI5a4w9kIv2ZGiVgRhqZHmn8AIEgBahiAE6Wmb3j6xO1f4/rrw9gBZchA7XiKYbY62dZf5/ztnsVeFAODCEIQgPb8mNtRXmujx/ZZPhsi0SvJVUoQXO1du66Bw3WW+uIYsmEwFgJYgCEF6vkqqMhHfILSeO2QZHclGRdy8se2AIGbj7Og1nZBRIfgoqaTGvpUCgAtCEIL0ZIy85FRp+tPJ7dnC7lzhrf5/PMOkv81BuP6y8EBHLsyTFVRjSAgALWjFTbcB2k6fANbhC1OcD+viy7r4Umdf9r/H+U+HyrzrPMWkfzBbfsGmRcL1V/j3B8oyKyyFGBECQEsQhOAQ9t4rN5gps0LIrBAuVtJPucKcHtydYaxum0R/dqlS0JvJq9mP7blyobiGhoSykJsjQtZcawBwewhCcBSecuodwHoHNJlbSo4S/NnxYmFIaHPZtu4yPzmWcYxC1FRQ3QaFAoBrwRohOJP+QexwS8uEG64Ik2M5IgpWsUKsEQJASxCE4Ez6B7GjzQbh4UKBI+oTwIgoWE2FGBECQEsQhOBM+ge1cKO1dVd4cThIJE6NYkQIAC1AEIIzifNlerPQ1MofL9DGLGFy7M0VxBA1wxohALQIQQjOhBH1C2RHihrfRLE3T+igpi6+N4MwWEXYPgEALUIQgpNpZlv9ust/zIsSUYgaF8sAQMsQhOBk+gdzRxpbJqzlafM1fmKnP3ZWqOWk4KgCj/MFgGYhCMHJiCPChkn4ww2+px+L8PrTFsNgDAoBoCUIQnAyQSry82AXK+rH2/IL/KTY+p9n7KkHgBYhCMH5NNxWv+Qcn62nR+MaBiHuuw0ALUAQgvOpt63+dKnwv8ctX94lUze4YyAuHAWAFiEIwfnU3VavM9HE3Zb3U2RdfRu5ASn21ANAixCE4Hz6BrKzZYLRQkT01AFLWjib0mB1UBSsZrjLGgA0D0+fAOejllNnX3aqVPitSEgvEw6NbfJjHKKmPbntWRoAOB8EITil/kFs2Xn++xv8L2PkDZcGrYLVrLDGpmf5AoDbwtQoOKUBwWxlJv9hiizOp7lnE2L7BAC0CCNCcEqjI7gPB9HETi38Sw6PJASAFmFECE6pgyc9Hd/yp9fPg2osVGNph4oAwFkhCMHFBWFQCADNQhCCi8MyIQA0D0EILi5YjZvLAEBzEITg4nC7UQBoHoIQXBymRgGgeQhCcHHYQQEAzWvFPsKsrKxFixYVFxePHDly2rRpjP1pI7NOp/v6668PHDhQU1PTv3//J598UqVS2btagFYLVtOxYqmLAAAHZuuIUK/XDxkyRK1WT5gw4c0333z//ffrNTh48OCGDRv69es3evToNWvWTJ482d6lAtwKrBECQPNsHRGuW7cuIiLirbfeIiKNRvPEE0/MmTNHJpNZG4wYMWLkyJHicVJSUo8ePfR6vZeXl90rBmiV27lqtLyWtEq7VgMAjsfWEeGRI0eGDh0qHg8ZMuTGjRt5eXl1G9SdKc3NzfX29lar1faqEuCW3dqIkBfo9RN8yOemixUYTQK4OFtHhPn5+Z06dRKP1Wq1l5dXXl5eREREw5Y6nW727NmvvvoqxzWestevX9+9e/edd955swK5/JVXXundu3fri3dHer2+3uosNE8tUJnRo6JKJ2vQbU11ZomRPXlIbjDTlBjhvVOWt5LM7VGok8Mn047QmfbC87wtPWlrEKrVaqPRKB4LglBbW+vp6dmwWXV19dixY1NSUubOndvUWwUHB/fo0eOFF16wnklISGj03aAhi8WCvmotrdJi4DxDGsxQNNqZvxULk/YK90XS2/25ohqh1yb+jf5KX0yQtgSfTDtCZ9oLz/PW5GqGrUEYERFx/fp18Tg3N9dsNoeHh9drYzQa77///rCwsGXLljUTwiqVKjQ0dMSIETZ+a6iL47imhtrQlGA1X2xkHbzqfyYbdubyC/xLv/FLU2UPxHBEFKGhEeH0+WWa3QN93gJ8Mu0IndnObO3r8ePHf//99yUlJUS0evXqESNGaLVaItqzZ8/JkyeJqLa2duLEiV5eXqtWrap7EQ2A5GzcU7/oDL/0PH/kL3IxBUWze3D/d47HOiGAC7N1RJiSkvKXv/ylT58+cXFxFy5c2Lp1q3h+0aJFvXv37t2793fffffdd99FRUV17dpV/KNdu3bFxMS0SdUArfH79TItLBX8kM3P7yeL8f5Ts9QQ5qOgH28IoyOxZgPgmlqxoX758uWZmZkFBQV9+/a1zl+vWbNGoVAQ0ejRoy9fvly3faOX0gC0P1t2UPACHS0S+gc1knZ/i+c+PGcZHYmnWAO4ptb9bnfp0qVLly51z/j7+4sHXl5e1stKARxKiLrlu6ydLRNC1CywsbshTY7lXjxquVAudNNiUAjggrAeC64vWNXyGuGhQiEluPGc85DRE924j87z9q8MABwAghBcny176n8tFAY2EYRENKs798UlvqLW3pUBgANAEILrC1ZToS0jwpAmgzDMk42M4FZlYlAI4IIQhOD6Wtw+UV5L2XqhR7NLgLPjuf87x2MjBYDrQRCC6wtRs8IaoZkIO1QoJAcxebO/DYNCmJ8H/ZCNJARwNQhCcH0qGXlw1MwK36FCfkBjGyfq+XtPbv4JC5IQwMUgCMEtBDe7g+LXAmFQSMu/C5NiOV6g9ZexUgjgUhCE4BaaWSYUiI4WCwOavmTUihG9nyL7nyO8AY+jAHAhCEJwC82MCM+VCYEqFtTYVvqGUoLZwGD2XjoGhQCuA0EIbqGZEeGvhcJAGxYIrf7Tn3s/3ZJnsE9hACA5BCG4hRA1FdY0PiJsfgdhQzHe7PGu3L9/s9ipNACQGIIQ3EKwijU5Iixo7p4yjXqpt+zHbOFYMS4gBXAFCEJwC03dXKailm7ohQS/1gWht4LmJXH/OIxBIYArQBCCW2jqdqOHi4S+gS1spW/U4125UiN9ew1XzQA4PTxiDdxCU48kPNTsvbabIWP07gDZrF8sHhxLCmQh6tutEACkgiAEtxCiZgWGRkaEvxbwM7vf4rxIWjib1Z1blG45XiyoZKxPACUFsjBPVlxDJUahuIaKa4QSIyUFsHEduTvDmBLzLwAOCUEIbkGrJCNP1WZS1/nIC0RHioRVw249oJ5N4J5N4Ijomk44XiycKBFOlAiBKorSsKRACvTgtB50sEB446Rlyl5hZDg3LpqNjuR8lbf/AwGA3SAIwV0Eq1hhjRCt+WMiNLOSaZX2mdWM1rBoDftrx0b+KCWYPZfAFVbTluv8F5f5pw5YBgSzsdHcmChWtxgAkAqCENyFuKc+WvPHmaMlXKt2EN6OYDU93pV7vCtnMNOOHH7LNeH1E5YOajYmmg0O4XoFsFCsMgJIBEEI7qLhDoqjJdzA9gpCK085jYvmxkUTL8gOFwlbrvFvn7acLBHkHPXyZ70DWK8AFq9l3bXMQ9bOpQG4KQQhuIsoDXvusGXTVdY74GbeHCnh/pYg2eQkxyglmKUE34y7bL1wqpROlQibrwkLT/KXq4RIL9bTj3XXUoI/6+nHuvreyjYPAGgRghDcxfsDZadKhRMlwskSYe1l/kypwBEl+jvKKl2EF4vwonsjb9Zj4ulSpXC2TDhbRhuzhFeO8Tf0Qhcf1tOfJfix7lqK92Mx3kzmKOUDODEEIbgLDxn1D2L9f7+/tkWg7FKdgnPQKzgVHHXXsu5aNj7m5plqM50rF9LLhLNlwvILwvlyyqsWOvuwblrWxZc6+7DOvqyzDwu07TEaAGCFIAQ3JWPkr3Smm4Wq5dQ3kPUN/GMMWG2mjArhQrlwoULYni0sOcdfrBQEgTr7sk7eLMabOnmzGG8W401RGqbAtCpAExCEAM5KLSdxvbPuyRIjXaoQrlQJV6rocJGw7jKfpaM8gxCsYtHeFKNh0d4UrWGRXixSQ1FeTKOQqnwAR4EgBHApAR4UEMwG/Pm+cWaecgzCNR1drRKu6uhQofCVjs/W0zWdoOAowotFaaiDJwv3pDAvFu7JwjypgycLVhPWIMEdIAgBXJ+cE7f809DQ+slWZqRsvXBdT3kGIUdPx4uF7w18jp7yq4XiGgrwoBA1C/eiYDULVVOImgWpKNSThagpwIMFqQgXsoILQBACuDU/D/LzYAn+RFQ/I3mBCqqpoFrINVBhtZBfTdd0wm/FlG/gC6qpqEYoriFfJQWpWKCKtHJliJclQEVBKhagogAP8vdg/h7k50H+HkyFPZHgwBCEANA4jlEHT+rgyXoHUMOYFIn3Fi+uoetlRgOnKK6hgmrhfDmVGKnUyJfWUKlRKKslGSM/D+anJK0HaZXkp2RaD/JVkq+S+SrEk8xXSd4K8T+G27FCe0IQAsCtC1RRoIoRUZUX7+3d5Dyp3kxlRqHMSOW1VF5786CilvINQkYtVdRSWS1fUUtVJqoyUVWtUGkiXyVpFEwjJ42CtEry+v3YR0FqOXnJma+S1HLylJOPgqlkpFGQRkEKjvyUTM6RNy4CApshCAGgzXnJyUvOIrzEVzZdgVNeSzqToDOJIUp6s6A3k85EFbVUbaGyWiGriqotVG2milreyJPORDoTmXgqqxVMPOlMpJLdjEwlRz5KkjHSKokx8lMyItJ6ECPyVRLHyIMjT/kfJz3l5CEjBUcaOaPf21jD1VPOPDgiupm74AIQhADgiLRK0irrRmarL2CtNlONhXRmwcRTRS3xApUZiYjKagUiKjeSQDfP11hunrxSRURkMJPRQiaedGaefm8jhisRGcyCkSciqjKRmSf6PSkZ3SyYY2Sd2hXDWKSW/bFW6iEjz9/PKziqu4lFLWPMLPfw4MWXYirX5edR/yf1VjB5g+5p2Kzh96rLWr9IxpGP24yqEYQA4JrUclLLyc+jYYLaeVOImJQ8UUWtQES8QBW1N/+oxkLV5pvH1RahxnLz2Gghw+/nrRErMpiFKhMp2c27PWTrqZb/07cT47yuKhNvbnBziIbNGn6vugSi8to/3sWDo4yJCjfJQgQhAMBtsY7/AhoJ3bpsDeCqKrO3N57L1X4www0AAG4NQQgAAG4NQQgAAG4NQehk3n77bUFwpmcmOCyLxbJo0SKpq3AROp3uo48+kroKF1FYWPjpp59KXYWLyMrK2rBhQ4vNEIRO5s033zSbzS23g5ZUVVW99957UlfhIvLy8lasWCF1FS7i0qVLa9eulboKF3H69Olvv/22xWYIQgAAcGsIQgAAcGsIQgAAcGsSbKi/du3ali1bYmNj2/9buwCLxdKtWzepq3AFgiDodDp8Du3CbDbn5+ejM+3CaDSWlJSgM+3CYDD4+fm12Iy1/yWIPM9fvHhRoXCPW/fYm9Fo9PBo7B6C0HroTDtCZ9oROtNeBEEICAjQarXNN5MgCAEAABwH1ggBAMCtIQgBAMCtIQgBAMCtIQgBAMCt4XmEjksQhMOHD+/Zs6e0tDQhIWHy5MlK5c3nnpWUlHzyyScFBQWjR48eMWKEtHU6F57nV69eHR0dfeedd4pnKisrly9fnpubO3z48DFjxkhbnhPJzMxcv359WVlZYmLi1KlTOY4joqtXr65atcpgMEycOLFfv35S1+gcysrKVq9efePGjejo6KlTp/r6+ornMzIyPvvsM4vF8tBDD/Xs2VPaIh1ZVlbWsWPHSktLJ06cWPcC0RMnTqxfv16lUk2dOrVTp07iSZPJtHLlyoyMjMTExEceeUQmkxFGhI4sKytr8uTJ5eXlkZGRS5YsGTVqFM/zRGQ0GgcNGnT27NmYmJipU6d+9tlnUlfqTD788MNnnnlm5cqV4kuLxXLHHXccOnQoNjZ27ty5H374obTlOYsdO3b079+/oqKiY8eOe/bsEe9/m5eXl5ycXFVVFRQUlJaW9vPPP0tdphOorq4eMGDA0aNHExMTf/nll5SUFKPRSEQXL14cMGAAY0yj0aSmpp4+fVrqSh1UcXFxUlLS0qVLn3rqqfz8fOv5w4cPDxs2zN/f32g0Jicn37hxQzz/6KOPfvHFF507d16yZMmcOXNuthbAUdXW1prNZvG4rKxMLpenp6cLgvD555/36tWL53lBEDZu3NitWzfxGFqUlZWVkJDwzDPPPPTQQ+KZ77//vlOnTmI/79y5Mzw83GQySVqjEzCZTBERERs2bKh3ft68eQ888IB4vHDhwvvuu6/dS3M+v/76q4+Pj8ViEQTBZDJ5enoeO3ZMEITZs2c/+eSTYpvnn39+6tSpEhbpyKx/+xHR+fPnrecfeOCBefPmiccPPfTQiy++KAjCxYsXVSpVaWmpIAg3btxQqVT5+fmCIGBE6LgUCoU4bCcik8nE87xGoyGi/fv3p6WlMcaIaOTIkRcuXCgoKJCyUCchCMKMGTMWLVrk5eVlPblv374777xT7Oc77rijqKjo0qVL0tXoHE6fPl1ZWdmvX78lS5Z8+umnVVVV4vn9+/ePHDlSPB4xYsS+ffukq9FpdOzYURCEzMxMIjp//rxcLo+Ojiaiffv2oTNtIf5N2FCjHfjzzz/37dtXvNdMREREp06dfv31V8LUqLOYO3fuxIkTxd+QvLy8oKAg8by3t7darc7Ly5O0OuewbNmyyMjItLS0uifz8/OtnSmXy/39/dGZLcrKylIoFBMnTiwvL9+6dWufPn0qKyvpz5/M4ODgqqoqnU4naaVOIDQ0dO3atampqd26dbvjjju+/PLLgIAAatCZeXl5Am5+YrPa2tqSkpJ6HUh//n0nopCQkNzcXMLFMk7hpZdeOnfu3N69e8WXcrm87iMJLRaL9SIaaEpOTs77779/8ODBeuflcrnFYrG+NJlM6MwWcRxXUlKyY8eOpKQkIhowYMDq1atnz55d95NpNpsZY3I5/oZpQU5OzowZM/7zn/8MHTp0796906dPP3bsWGhoqEKhqNuZCoWiqaEPNCSTyTiOq9uB4u91U7/v+Jg6utdee23Lli179uyx3jo2PDxc/FcMERUUFNTW1oaFhUlXoHPYvHlzaWmpOFWSm5trNBrHjBmzZcuW8PDwrKwssY1ery8vL0dntig8PJyI4uPjxZfx8fHXrl2jP38yc3JyAgICVCqVVEU6i02bNsXFxT3xxBNE1KVLl9WrV3/33XczZswIDw/PyckR2+Tk5Ih9DjaSyWQhISE5OTndu3cnopycHPH3um6v1j2PqVGH9u67765du3bHjh2BgYHWk2PGjNm6davBYCCijRs3Dh482Jbbq7u5CRMm/PDDD8uWLVu2bNno0aMHDBiwYMECIhozZsyOHTsqKiqIaNOmTd27d4+JiZG6WEeXlJQUFRV16NAhIrJYLEePHhVDccyYMRs3bhSvbf7qq6+wF8UWAQEB2dnZtbW1RGQ0GrOzs8VfdrEzxTbozFswduzYr776iogEQdi4caPYgSNGjDh//vzFixeJSNxxMWzYMMJNtx3ZuXPnevTo0alTJ2vOvf/++4MHD+Z5fuzYsbm5uT179ty2bds333wzdOhQaUt1Lv/+97+vXr36+eefiy+nTJly6tSp5OTkrVu3rlq16t5775W2PKfw5ZdfzpkzZ+zYsadOnfLy8tq+fbtCodDpdEOGDNFqtcHBwfv379+/f3/nzp2lrtTR1dTU3HXXXQaDYdCgQQcOHNBqtTt37lQqlcXFxampqTExMSqV6uTJkwcPHsRcRVNGjhxZWlp67NixHj16qFSqPXv2+Pj4ZGVlpaamDho0qLy8vLCw8OeffxY3aL7++usrVqwYMWLEDz/88OKLL86ePZsQhI7MYDCcP3++7pm4uDjx/yXP8z/99FNRUdGQIUPw69Fa4tSodeQnCMLPP/+ck5OTmpoaFRUlbW1O5OrVq4cOHQoPD09NTRV30xOR0WjcvXu3wWBIS0tr8dk3IOJ5/uDBg9nZ2VFRUSkpKda1QIPBsGvXLovFkpaW5u3tLW2Rjuz06dMmk8n6snfv3uJ14BUVFbt27VKpVHfddVfdWfrjx49nZGQkJCRYb1OAIAQAALeGNUIAAHBrCEIAAHBrCEIAAHBrCEIAAHBrCEIAAHBrWqcifgAAACpJREFUCEIAAHBrCEIAAHBrCEIAAHBrCEIAAHBrCEIAAHBrCEIAAHBr/x/8zKhJpxQ9lQAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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4+PlrsIdcM4NBgM+hw5hsVgKCgrQmA5RW1tbUlKCxnQIo9EYEBDQ6mGs/acgiqJ45swZlarRunhgh9raWrXajnUAwQ5oTAdCYzoQGtNROOdBQUF6vb7lw2QIQgAAAOeBa4QAAODREIQAAODREIQAAODREIQAAODR8DxC58U5P3DgwK5du0pLS3v37j1lyhQvLy/pSyUlJR999FFhYeEtt9wyZswYeet0LaIofvrppzExMaNGjZL2VFZWfvDBB/n5+SNHjhw/fry85bmQzMzMtWvXlpWV9enTZ/r06YIgENH58+dXrVplNBonT548aNAguWt0DWVlZZ9++umFCxdiYmKmT5/u7+8v7c/IyPjss8+sVut9993Xq1cveYt0ZufOnTt06FBpaenkyZPrTxA9fPjw2rVrNRrN9OnTO3fuLO00m80rV67MyMjo06fP/fffr1AoCD1CZ3bu3LkpU6aUl5d37Nhx2bJlN998syiKRFRbWzt06NATJ07ExsZOnz79s88+k7tSV7J06dJ58+atXLlSemm1WkeMGLF///64uLgnn3xy6dKl8pbnKnbs2JGUlFRRUdGpU6ddu3ZJ699eunQpMTGxqqoqJCQkNTV1z549cpfpAkwmU3Jy8sGDB/v06fPLL78MGTKktraWiM6cOZOcnMwY0+l0KSkpx44dk7tSJ3X58uUBAwYsX7780UcfLSgosO0/cODA8OHDAwMDa2trExMTL1y4IO1/4IEHvvjii65duy5btmzu3LlXjubgrOrq6iwWi7RdVlamVCrT09M5559//nnfvn1FUeScb9iwIT4+XtqGVp07d653797z5s277777pD1bt27t3Lmz1M47d+6MjIw0m82y1ugCzGZzVFTUunXrGux/8cUXJ06cKG0vWrTotttua/fSXM+vv/7q5+dntVo552az2dvb+9ChQ5zzOXPmPPLII9IxTz/99PTp02Us0pnZ/voR0alTp2z7J06c+OKLL0rb991333PPPcc5P3PmjEajKS0t5ZxfuHBBo9EUFBRwztEjdF4qlUrqthOR2WwWRVGn0xHR7t27U1NTGWNEdNNNN50+fbqwsFDOQl0E53zWrFlvvvmmj4+PbefPP/88atQoqZ1HjBhRXFyclZUlX42u4dixY5WVlYMGDVq2bNknn3xSVVUl7d+9e/dNN90kbY8ZM+bnn3+Wr0aX0alTJ855ZmYmEZ06dUqpVMbExBDRzz//jMa0h/SXsLEmG3DPnj0DBw6U1pqJiorq3Lnzr7/+ShgadRVPPvnk5MmTpd+QS5cuhYSESPt9fX21Wu2lS5dkrc41rFixomPHjqmpqfV3FhQU2BpTqVQGBgaiMVt17tw5lUo1efLk8vLytLS0/v37V1ZW0l8/maGhoVVVVQaDQdZKXUB4ePiaNWtSUlLi4+NHjBjx1VdfBQUFUaPGvHTpEsfiJ3arq6srKSlp0ID01993IgoLC8vPzydMlnEJ//znP0+ePPnjjz9KL5VKZf1HElqtVtskGmhOXl7eW2+9tW/fvgb7lUql1Wq1vTSbzWjMVgmCUFJSsmPHjgEDBhBRcnLyp59+OmfOnPqfTIvFwhhTKvEXphV5eXmzZs16/fXXb7zxxh9//HHGjBmHDh0KDw9XqVT1G1OlUjXX9YHGFAqFIAj1G1D6vW7u9x0fU2e3cOHCLVu27Nq1y7Z0bGRkpPSvGCIqLCysq6uLiIiQr0DXsGnTptLSUmmoJD8/v7a2dvz48Vu2bImMjDx37px0THV1dXl5ORqzVZGRkUTUo0cP6WWPHj1ycnLor5/MvLy8oKAgjUYjV5GuYuPGjV26dJk5cyYRdevW7dNPP928efOsWbMiIyPz8vKkY/Ly8qQ2BzspFIqwsLC8vLyEhAQiysvLk36v67dq/f0YGnVq//nPf9asWbNjx47g4GDbzvHjx6elpRmNRiLasGHDsGHD7Fle3cNNmjRp27ZtK1asWLFixS233JKcnPzqq68S0fjx43fs2FFRUUFEGzduTEhIiI2NlbtYZzdgwIDo6Oj9+/cTkdVqPXjwoBSK48eP37BhgzS3ef369bgXxR5BQUEXL16sq6sjotra2osXL0q/7FJjSsegMa/C7bffvn79eiLinG/YsEFqwDFjxpw6derMmTNEJN1xMXz4cMKi287s5MmTPXv27Ny5sy3n3nrrrWHDhomiePvtt+fn5/fq1eu777775ptvbrzxRnlLdS3PP//8+fPnP//8c+nl1KlTjx49mpiYmJaWtmrVqnHjxslbnkv46quv5s6de/vttx89etTHx2f79u0qlcpgMNxwww16vT40NHT37t27d+/u2rWr3JU6u5qamtGjRxuNxqFDh+7du1ev1+/cudPLy+vy5cspKSmxsbEajebIkSP79u3DWEVzbrrpptLS0kOHDvXs2VOj0ezatcvPz+/cuXMpKSlDhw4tLy8vKiras2ePdIPmSy+99OGHH44ZM2bbtm3PPffcnDlzCEHozIxG46lTp+rv6dKli/TfUhTFn376qbi4+IYbbsCvR1tJQ6O2nh/nfM+ePXl5eSkpKdHR0fLW5kLOnz+/f//+yMjIlJQU6W56Iqqtrf3hhx+MRmNqamqrz74BiSiK+/btu3jxYnR09JAhQ2zXAo1G4/fff2+1WlNTU319feUt0pkdO3bMbDbbXvbr10+aB15RUfH9999rNJrRo0fXH6X/448/MjIyevfubVumAEEIAAAeDdcIv3luQgAAAEZJREFUAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAoyEIAQDAo/1/Sw7ubnGln6oAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3hUVf4/8M+5UzIpk0wyKZCENFpooSahCdJsgIsiKEWxYJRdEXW/uJafZS3YUHQVBXERG0qRIkYEFAUUYZEeSkIglCSkkDqTSTLlnt8fF8dI2iRMcqe8X4/PPjOXk5sPZyd5c8499x7GOScAAABvJchdAAAAgJwQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NVkCMIjR46sWLGi/b+vZ7BYLHKX4DnQmU6EznQidKYTWa3WZtvIEIQZGRnbtm1r/+/rGWpqauQuwXOgM50InelE6ExnEUWxtra22WaYGgUAAK+GIAQAAK+GIAQAAK+GIAQAAK+GIAQAAK/maBByzl955ZX+/ftfc801GzZsaLDN4sWLhw8f3q9fv7S0tMLCQucVCQAA0FYcDcIlS5Z8+umnn3zyyRNPPDFr1qyMjIwrGqxatWrBggULFy785ptvDAbDvffe6+xSAQAAnM/RIPzggw+eeeaZpKSk8ePHT5s27cMPP7yiwcGDB8eOHTt48OCYmJi0tLSDBw86u1QAAADncygIbTbbiRMnkpOTpbfJyclHjx69os2kSZN27tz5yy+/nD59+oMPPrjjjjuaOGFZQKfWlQsAAOBcSkcalZWVWa3WoKAg6a1OpysqKrqiTXJy8vjx48ePH6/VagMDA1977bXGzpadnf2DOS4+Pt5+ZOnSpUOHDm158d6oqqqKMSZ3FR4CnelE6EwnQmc6iyiKjvSkQ0EYGBjIGKuqqpLeGo3G4ODgK9q88MILJ0+eLCgo8PX1/fDDD8eNG5eZmalQKOqfrXPnzkGqxB+f+VF6q1KpoqKiBAHrVx3COQ8ICJC7Cg+BznQid+/Mr776at26dXJXcZnNZmvwl6eXmz9/vn1i0kGiKFZXVzfbzKEgVKvVUVFRWVlZ0jAuKysrLi7uija//vrrhAkTfH19iWjq1KkPPPBAQUFBVFRU/bMxxsz+4eGdOgWoHPnmAABtbseOHTqdbty4cXIXAg1bsmTJkSNHWhqEDnIoCIlo5syZ//nPf8aOHVtWVvb5558vXbqUiKqqql588cX58+fr9fpevXp99913Dz74oEajWbt2rV6v79ChQ2NnU9hqMyv4wFCM/QHAVQwYMGDKlClyVwEN27JlS9ud3NEJySeffNJms3Xo0KFr165Tp069/vrriaimpmbJkiWVlZVE9Oyzz6pUqujo6Pj4+FdeeeXLL79sYmgfWF2QWcGd8hcAAAC4Go6OCAMDA7///vvKykqVSiXNfxKRXq8vLy+3v05PTzebzbW1tVqttpmzmS5mliMIAQBAfo4GoSQwMLDpBmq1Wq1WN3+eqosnK1r0nQEAANqEPGs1A6sLTmJECAAALkCeINRWXcyu5DZEIQAAyE2eIFSK5jANO29EEgIAgMxku409UUcny+X65gAAHuXXX38dNWqU9Do2NragoOCKBitWrGh6L4Rdu3YZjUbp9d69e4cPH3419axYseKBBx64mjO0JxmDkJ3EHRQAAM5gsVjKysqk10888UT9pfu1tbX2p4M16I477jh79qz0OiYmZs6cOVdTT3V1tXRnnVto2apRJ+oexA6XIAgBABpWVFS0ZcuWO++8U3pbUlKyadOmu+++W3qRnZ0dEhJy++2313+Al0ajsT9g84cfftixY0evXr04v/z71mazbd++fe/evTabbcSIEdI4ctu2bSaTae3atbt37x41alRgYKCPj4/UXhTFtWvXHjt2LD4+ftq0adLx9PT07t2779u379ixYyNGjLjuuuua+ItUV1evXLny/Pnz/fr1mzRpklTb6dOnV61aZTQa4+Lipk6dqtPpiouLv/jii4KCgsjIyEmTJsXExDitK5sj24iwexBGhAAAjdLpdI899ph9q58VK1Z8++23RLRly5YTJ0507ty5pKRk4MCB9WdBH3roIWl0uHTp0rS0tKioqD179ixcuFD6U4PBsHz58pCQkLCwsDlz5tTfU4+ITp069dxzz0mvZ86c+e6770ZGRq5fv37UqFE2m42I3nnnnVtuueXQoUN6vf7OO++UCmuQ2WweNmzYli1bIiMjX3311bS0NCIqKCgYPnw4Y6xHjx45OTmnT58WRXHYsGG5ubm9evUyGAz79++/yt5rEdlGhIk6wj31AOCy0i/wtzNs7fbtfARaM0bpW+dXslqtvv322z/77LPXX3+diD799NOXXnqJiKZPnz59+nSpTXFx8erVqx9++OEGz/ncc899/fXXw4YNI6K8vDzpoE6n+/LLL6XX/fr1mzt3blpa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nekUJpMpODi42Was/ZcgiqJ46tQplQpPqG2N2tpaHx83eX6fy0NnOhE604nQmc7COdfr9TqdrulmMgQhAACA68A1QgAA8GoIQgAA8GoIQgAA8GoIQgAA8GrYj9B1cc737t27ffv20tLSPn36TJs2Ta2+vLN1SUnJRx99VFhYeOONN44bN07eOt2LKIqffPJJbGzs6NGjpSOVlZUffvhhfn7+qFGjJk6cKG95biQrK+urr74qKytLSkqaNWuWIAhEdPbs2RUrVphMpqlTpw4aNEjuGt1DWVnZJ598cuHChdjY2FmzZgUFBUnHMzMzP/vsM5vNNmPGjN69e8tbpCvLycnZv39/aWnp1KlT6y4QPXjw4FdffaXRaGbNmpWQkCAdtFgsy5cvz8zMTEpKuvPOOxUKBWFE6MpycnKmTZtWXl7eqVOnxYsXX3/99aIoElFtbe3QoUOPHTsWHx8/a9aszz77TO5K3cm77777yCOPLF++XHprs9muvfbaPXv2dO7ced68ee+++6685bmLrVu3pqSkVFRUxMXFbd++XXr+7cWLF5OTkw0GQ1hY2NixY3ft2iV3mW6guro6NTV13759SUlJv/7665AhQ2pra4no1KlTqampjLGAgIBhw4YdOXJE7kpd1KVLlwYMGLBkyZIHHnigoKDAfnzv3r0jR44MCQmpra1NTk6+cOGCdPyuu+764osvunbtunjx4ocffvhyaw6uymw2W61W6XVZWZlSqczIyOCcf/7553379hVFkXO+du3axMRE6TU0Kycnp0+fPo888siMGTOkI99++21CQoLUz9u2bYuKirJYLLLW6AYsFkt0dPSqVauuOP7cc89NnjxZev3KK69MmDCh3UtzP7/99ltgYKDNZuOcWywWPz+//fv3c87nzp17//33S23mz58/a9YsGYt0ZfbffkR04sQJ+/HJkyc/99xz0usZM2Y8+eSTnPNTp05pNJrS0lLO+YULFzQaTUFBAeccI0LXpVKppGE7EVksFlEUAwICiGjnzp1jx45ljBHRddddd/LkycLCQjkLdROc87S0tLfeesvf399+cMeOHaNHj5b6+dprry0uLs7OzpavRvdw5MiRysrKQYMGLV68+OOPPzYYDNLxnTt3XnfdddLrcePG7dixQ74a3UZcXBznPCsri4hOnDihVCpjY2OJaMeOHehMR0i/CetrsAN37do1cOBA6Vkz0dHRCQkJv/32G2Fq1F3Mmzdv6tSp0k/IxYsXw8LCpONardbX1/fixYuyVuceli5d2qlTp7Fjx9Y9WFBQYO9MpVIZEhKCzmxWTk6OSqWaOnVqeXl5enp6//79Kysr6a+fzPDwcIPBYDQaZa3UDXTo0GHlypXDhg1LTEy89tprV69erdfrqV5nXrx4kePhJw4zm80lJSVXdCD99eediCIiIvLz8wmLZdzC008/ffz48Z9++kl6q1Qq625JaLPZ7ItooDF5eXlvv/327t27rziuVCptNpv9rcViQWc2SxCEkpKSrVu3DhgwgIhSU1M/+eSTuXPn1v1kWq1WxphSid8wzcjLy0tLS3vttddGjBjx008/3Xvvvfv37+/QoYNKparbmSqVqrGhD9SnUCgEQajbgdLPdWM/7/iYuroXXnhh06ZN27dvtz86NioqSvpXDBEVFhaazebIyEj5CnQPGzduLC0tlaZK8vPza2trJ06cuGnTpqioqJycHKlNVVVVeXk5OrNZUVFRRNSzZ0/pbc+ePc+dO0d//WTm5eXp9XqNRiNXke5i/fr1Xbp0mT17NhF169btk08++eabb9LS0qKiovLy8qQ2eXl5Up+DgxQKRURERF5eXo8ePYgoLy9P+rmu26t1j2Nq1KW9+eabK1eu3Lp1a2hoqP3gxIkT09PTTSYTEa1du3b48OGOPF7dy02ZMmXz5s1Lly5dunTpjTfemJqaumDBAiKaOHHi1q1bKyoqiGj9+vU9evSIj4+Xu1hXN2DAgJiYmD179hCRzWbbt2+fFIoTJ05cu3attLZ5zZo1uBfFEXq9Pjc312w2E1FtbW1ubq70wy51ptQGndkKN99885o1a4iIc7527VqpA8eNG3fixIlTp04RkXTHxciRIwkP3XZlx48f79WrV0JCgj3n3n777eHDh4uiePPNN+fn5/fu3fu7775bt27diBEj5C3Vvfy///f/zp49+/nnn0tvp0+ffvjw4eTk5PT09BUrVowfP17e8tzC6tWrH3744Ztvvvnw4cP+/v5btmxRqVRGo/Gaa67R6XTh4eE7d+7cuXNn165d5a7U1dXU1IwZM8ZkMg0dOvSXX37R6XTbtm1Tq9WXLl0aNmxYfHy8RqM5dOjQ7t27MVfRmOuuu660tHT//v29evXSaDTbt28PDAzMyckZNmzY0KFDy8vLi4qKdu3aJd2g+eKLLy5btmzcuHGbN29+8skn586dSwhCV2YymU6cOFH3SJcuXaT/L0VR/Pnnn4uLi6+55hr8eLSUNDVqH/lxznft2pWXlzds2LCYmBh5a3MjZ8+e3bNnT1RU1LBhw6S76Ymotrb2xx9/NJlMY8eObXbvG5CIorh79+7c3NyYmJghQ4bYrwWaTKYffvjBZrONHTtWq9XKW6QrO3LkiMVisb/t16+ftA68oqLihx9+0Gg0Y8aMqTtLf+DAgczMzD59+tgfU4AgBAAAr4ZrhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQW7ZiRQAAACNJREFUhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NUQhAAA4NX+Pxms6LvqtYkTAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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Xq9vuZkMQQgAAOA4cI4QAADcGoIQAADcGoIQAADcGoIQAADcGp5H6Lg45/v27du+fXtJSUm/fv2mT5+uVl95CnVxcfEHH3xQUFBw4403Jicny1uncxFFcdWqVVFRUddff720p6Ki4r333svLyxszZszkyZPlLc+JZGZmfv7556WlpQkJCampqYIgENHZs2dXrlxpNBpTUlKGDBkid43OobS0dNWqVRcuXIiKikpNTfX19ZX2nz59+pNPPrFYLHfddVffvn3lLdKR5eTkHDx4sKSkJCUlpf4FoocPH/788881Gk1qampsbKy002QyffTRR6dPn05ISLj77rsVCgVhROjIcnJypk+fXlZW1rVr16VLl95www2iKBJRbW3t8OHDjx8/HhMTk5qa+sknn8hdqTN56623HnnkkY8++kh6abFYrrvuur1798bFxS1YsOCtt96StzxnsWXLlqSkpPLy8ujo6O3bt0vr3166dCkxMbGysjIoKGjcuHG7d++Wu0wnUF1dPXTo0AMHDiQkJPz888/Dhg2rra0loqysrKFDhzLGdDrdiBEjMjIy5K7UQV2+fHnQoEHLli176KGH8vPzrfv37ds3evRof3//2traxMTECxcuSPvvueee1atXd+/efenSpfPnz7/SmoOjqqurM5vN0nZpaalSqTx27Bjn/NNPP+3fv78oipzzdevW9erVS9qGVuXk5PTr1++RRx656667pD3ffPNNbGys1M9bt24NDw83mUyy1ugETCZTREREWlpag/2LFi2aOnWqtP3iiy9OmjSp00tzPnv27PHx8bFYLJxzk8nk6el58OBBzvm8efMefPBBqc3ChQtTU1NlLNKRWX/7EdHJkyet+6dOnbpo0SJp+6677nryySc551lZWRqNpqSkhHN+4cIFjUaTn5/POceI0HGpVCpp2E5EJpNJFEWdTkdEu3btGjduHGOMiMaPH3/q1KmCggI5C3USnPPZs2e/9tprXl5e1p07d+68/vrrpX6+7rrrioqKsrOz5avROWRkZFRUVAwZMmTp0qUrVqyorKyU9u/atWv8+PHSdnJy8s6dO+Wr0WlER0dzzjMzM4no5MmTSqUyKiqKiHbu3InOtIX0m7CxJjtw9+7dgwcPltaaiYiIiI2N3bNnD2Fq1FksWLAgJSVF+gm5dOlSUFCQtN/b21ur1V66dEnW6pzD8uXLu3btOm7cuPo78/PzrZ2pVCr9/f3Rma3KyclRqVQpKSllZWXp6ekDBw6sqKigv34yg4ODKysrDQaDrJU6gdDQ0DVr1owYMaJXr17XXXfd2rVrAwICqFFnXrp0iWPxE5vV1dUVFxc36ED66887EYWEhOTl5REulnEKTz311IkTJ3bs2CG9VCqV9R9JaLFYrBfRQHNyc3Nff/31X375pcF+pVJpsVisL00mEzqzVYIgFBcXb9myZdCgQUQ0dOjQVatWzZs3r/4n02w2M8aUSvyGaUVubu7s2bP/97//jRo1aseOHbNmzTp48GBoaKhKparfmSqVqrmhDzSmUCgEQajfgdLPdXM/7/iYOrrnnntu06ZN27dvty4dGx4eLv0VQ0QFBQV1dXVhYWHyFegcNm7cWFJSIk2V5OXl1dbWTp48edOmTeHh4Tk5OVKbqqqqsrIydGarwsPDiahPnz7Syz59+pw7d47++snMzc0NCAjQaDRyFeksNmzY0K1btwceeICIevTosWrVqq+//nr27Nnh4eG5ublSm9zcXKnPwUYKhSIkJCQ3N7d3795ElJubK/1c1+/V+vsxNerQXn311TVr1mzZsiUwMNC6c/Lkyenp6UajkYjWrVs3cuRIW5ZXd3PTpk377rvvli9fvnz58htvvHHo0KEvvPACEU2ePHnLli3l5eVEtGHDht69e8fExMhdrKMbNGhQZGTk3r17ichisRw4cEAKxcmTJ69bt066tvmLL77AvSi2CAgIuHjxYl1dHRHV1tZevHhR+mGXOlNqg85sh5tvvvmLL74gIs75unXrpA5MTk4+efJkVlYWEUl3XIwePZqw6LYjO3HiRHx8fGxsrDXnXn/99ZEjR4qiePPNN+fl5fXt2/fbb79dv379qFGj5C3VufzrX/86e/bsp59+Kr2cMWPGkSNHEhMT09PTV65cOXHiRHnLcwpr166dP3/+zTfffOTIES8vr82bN6tUKoPBcO211+r1+uDg4F27du3atat79+5yV+roampqxo4dazQahw8f/tNPP+n1+q1bt6rV6suXL48YMSImJkaj0fz222+//PIL5iqaM378+JKSkoMHD8bHx2s0mu3bt/v4+OTk5IwYMWL48OFlZWWFhYW7d++WbtB8/vnn33///eTk5O++++7JJ5+cN28eIQgdmdFoPHnyZP093bp1k/6/FEXxxx9/LCoquvbaa/Hj0VbS1Kh15Mc53717d25u7ogRIyIjI+WtzYmcPXt279694eHhI0aMkO6mJ6La2toffvjBaDSOGzeu1WffgEQUxV9++eXixYuRkZHDhg2zngs0Go3btm2zWCzjxo3z9vaWt0hHlpGRYTKZrC8HDBggXQdeXl6+bds2jUYzduzY+rP0hw4dOn36dL9+/azLFCAIAQDAreEcIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuDUEIQAAuLX/D6olAP7puTyRAAAAAElFTkSuQmCC", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd2BUxf428O+cLdlNNsluOiSk0msoCZKAiBThIogiKO1iQZD7CrYfXr3qVfFevVZsKLGCCEoRRIwKKAgqRUQggEASOuk92Wyy7cz7x+IaUzdhk7Pl+fx19mRydhg2eTJzZs4wzjkBAAB4K0HqCgAAAEgJQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF5NgiDMyMhYuXJlx7+vZzCbzVJXwXOgMZ0IjelEaEwnslgsLZaRIAiPHz++Y8eOjn9fz1BbWyt1FTwHGtOJ0JhOhMZ0FlEUjUZji8UwNAoAAF4NQQgAAF4NQQgAAF4NQQgAAF4NQQgAAF7N0SDknD///PMDBw4cMWLEF1980WiZ5cuXDx8+PDExcf78+QUFBc6rJAAAQHtxNAhXrFjx8ccfr1q16tFHH507d+7x48frFVi3bt1zzz338ssvf/nll1VVVXfddZezqwoAAOB8jgbhO++88+STT/bv33/ixIkzZsx499136xU4fPjwmDFjrrnmmujo6Pnz5x8+fNjZVQUAAHA+h4LQarWePHkyKSnJ9jIpKenYsWP1ykyZMmXPnj0//fTTmTNn3nnnndtvv72ZC5ZpurStugAAAM4ld6RQWVmZxWIJDAy0vdRqtYWFhfXKJCUlTZw4ceLEif7+/gEBAS+88EJTV8vOzv7OFBsXF2c/k5aWlpKS0vrKe6Pq6mrGmNS18BBoTCdCYzoRGtNZRFF0pCUdCsKAgADGWHV1te2lXq/X6XT1yixduvTUqVP5+flqtfrdd98dO3bs6dOnZTJZw6slJCQEKnp+/+T3tpcKhSIyMlIQMH/VIZxzjUYjdS08BBrTidy9MT/77LNNmzZJXYsrrFZro788vdySJUvsA5MOEkWxpqamxWIOBaFSqYyMjMzMzLR14zIzM2NjY+uV+fnnn2+88Ua1Wk1E06dPX7BgQX5+fmRkZMOrMcZMfmFhXbpoFI68OQBAu9u9e7dWqx07dqzUFYHGrVixIiMjo7VB6CCHgpCIZs+e/cYbb4wZM6asrOyTTz5JS0sjourq6meffXbJkiXBwcF9+vT5+uuv7733XpVKtXHjxuDg4IiIiCbfVTSeruCDQ9D3BwBXMWjQoGnTpkldC2jctm3b2u/ijg5IPvbYY1arNSIiolu3btOnT7/hhhuIqLa2dsWKFZWVlUT073//W6FQREVFxcXFPf/8859++mkzXXt/Q/7pCu6UfwAAAMDVcLRHGBAQ8O2331ZWVioUCtv4JxEFBweXl5fbj9PT000mk9Fo9Pf3b+FqhrzT5QhCAACQnqNBaBMQENB8AaVSqVQqW75Odd6pila9MwAAQLuQZq5mgCHvFHqEAADgAqQJQn9DfnYltyIKAQBAatIEoVw0harYRT2SEAAAJCbZMvaeWjpVLtWbAwB4lJ9//nnUqFG245iYmPz8/HoFVq5c2fxeCD/++KNer7cdHzhwYPjw4VdTn5UrVy5YsOBqrtCRJAxCdgorKAAAnMFsNpeVldmOH3300YZT941Go/3pYI26/fbbz58/bzuOjo5euHDh1dSnpqbGtrLOLbRu1qgT9QhkR0sQhAAAjSssLNy2bducOXNsL0tKSrZu3XrHHXfYDrKzs4OCgm677baGD/BSqVT2B2x+9913u3fv7tOnD+dXft9ardadO3ceOHDAarVee+21tn7kjh07DAbDxo0b9+7dO2rUqICAAB8fH1t5URQ3btx44sSJuLi4GTNm2M6np6f36NHj4MGDJ06cuPbaa8eNG9fMP6Smpmbt2rUXL15MTEycMmWKrW5nzpxZt26dXq+PjY2dPn26VqstKipas2ZNfn5+586dp0yZEh0d7bSmbIlkPcIegegRAgA0SavVPvTQQ/atflauXPnVV18R0bZt206ePJmQkFBSUjJ48OCGo6D33XefrXeYlpY2f/78yMjI/fv3v/zyy7avVlVVffjhh0FBQaGhoQsXLmy4px4RZWVlPfXUU7bj2bNnv/nmm507d968efOoUaOsVisRvf766zfffPORI0eCg4PnzJljq1ijTCZTamrqtm3bOnfu/L///W/+/PlElJ+fP3z4cMZYr169zp07d+bMGVEUU1NTL1++3KdPn6qqqkOHDl1l67WKZD3CnlrCCgoAcFnpl/hrx60d9nY+Am0YLVfX+ZWsVCpvu+221atXv/jii0T08ccf/+c//yGimTNnzpw501amqKho/fr1ixcvbvSaTz311Oeff56amkpEOTk5tpNarfbTTz+1HScmJi5atGj+/Pljx471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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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xo3z9va+66674uPjiejy5ctSg6NHj3711Vfnz5/XarUPPvhg7969t2zZcueddxLRhAkTpKcMVVdXb9q0adKkSc3WsG7dOlEU161bxxibNm1aZGTkX//61/z8/ICAgAULFiiVdf/g4uLiixcvPvPMM/WPOepMsgVhqDertlKpmfSecpUAANCiYUHsb/077xEQngryavL7ePbs2ZMnT37xxRczMzMLCgpuvfVWIsrMzJw/f35eXp5arb5y5UpLyVFUVFRUVDR06FDp5YgRIw4cOEBEtbW1jz/++I4dOwRBUKlUTZ+p19CJEyf69+8v3UpFEISkpKTjx49LQThw4ECpTVhY2L59+1o5QnJysjQdGhgY2KtXrxMnTtx6661BQUFdu3adNGnS3XfffdtttwUEBMyYMSM8PPzWW2+dPHnyzJkzO/P5G7IFIRH18mOny/jwYNx6GwAcTqCaxobJ/NspMTExODh4x44d27ZtS01NValURPTwww/PmTNn7ty5RDRv3jxRFJv9Xi8vL855TU2N9F31TyP68MMPs7Kyjh8/7uHhcejQIenG0S3x9vZu+BijyspKb29vadvGoPL29m6YtVVVVd7e3mq1+rvvvsvKytqyZUtaWtrixYvnzJnz3nvvLV68+Msvv3z11VePHDmyZMkSW45vF3I+BbC3jmF2FACgFampqe+///6nn376hz/8QdpTWFjYvXt3IjIYDFu2bGnpGzUazeDBg6VZ0Jqamo0bN9Z/e7du3aR7Ya5cubK+vU6nKykpaXSQoUOHnjp16vjx40RUUFCwffv2G2+8sV3133jjjRkZGdKRDxw4kJ+fP2TIEIPBYLFYevbsuWDBgrvvvvuXX36pqqoymUyhoaFpaWmPP/74L7/80q53uU7yjwhlLAAAwMHNmjXr6aef7t+//4ABA6Q98+bNS0lJSUpK+vXXX/v169fK9y5btmzq1Kmff/55fn5+/UNkp0+fPnLkyFtuuaW8vLxnz571jR955JFp06ZFREQsXry4fro1NDT0jTfeGDt2bEJCwuHDh5944on2PhHwxhtvvO+++6T6//e//y1fvjwgIGDr1q0PP/zw4MGDrVZrVlZWRkbGxYsXk5KShgwZolarDx8+/N5777XrXa4Tq7+mttOsXbs2IyNjzZo1G3PFj3P4pnF4EHM7VFRUtPlwD7AROtOOnL0zH3nk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TMy+ffsIU6PO4rHHHktJSZF+Qi5duhQUFCTt9/X19fLyunTpkqzVOYf09PRu3bqNHTu24c6CgoL6zlQqlf7+/ujMNuXm5qpUqpSUFIPBkJGRMWjQoPLycrr6kxkcHFxRUWE0GmWt1Al06dJl7dq1ycnJvXv3vummm9avXx8QEEBNOvPSpUscNz+xWU1NTXFxcaMOpKt/3okoJCQkPz+fcLGMU3j66ad/+eWX7777TnqpVCobPpLQarXWX0QDLcnLy1u6dOnevXsb7VcqlVartf5lbW0tOrNNgiAUFxdv37598ODBRDRs2LBVq1bNmzev4SfTYrEwxpRK/IZpQ15eXlpa2ssvvzxq1Kjvvvtuzpw5hw4d6tKli0qlatiZKpWqpaEPNKVQKARBaNiB0s91Sz/v+Jg6usWLF2/dunXXrl31t44NCwuT/oohosuXL9fU1ISGhspXoHPYsmVLSUmJNFWSn59vNpsnT568devWsLCw3NxcqY3JZDIYDOjMNoWFhRFRXFyc9DIuLu7cuXN09SczLy8vICBArVbLVaSz2LRpU/fu3R944AEi6tmz56pVq7744ou0tLSwsLC8vDypTV5entTnYCOFQhESEpKXl9enTx8iysvLk36uG/Zqw/2YGnVor7322tq1a7dv3x4YGFi/c/LkyRkZGZWVlUS0YcOGkSNH2nJ7dTd39913f/311+np6enp6RMmTBg2bNiLL75IRJMnT96+fXtZWRkRbdq0qU+fPtHR0XIX6+gGDx4cERGxf/9+IrJarQcPHpRCcfLkyRs2bJCubf7ss8+wFsUWAQEBFy9erKmpISKz2Xzx4kXph13qTKkNOvMaTJky5bPPPiMizvmGDRukDhw3btzJkyezs7OJSFpxceONNxJuuu3Ifvnll759+8bExNTn3NKlS0eOHCmK4pQpU/Lz8+Pj47/66qvPP/981KhR8pbqXP7xj3+cPXv2448/ll7OmDHj6NGjiYmJGRkZK1eunDhxorzlOYX169fPnz9/ypQpR48e9fHx2bZtm0qlMhqNN9xwg06nCw4O3rNnz549e3r06CF3pY6uurp6zJgxlZWVSUlJ//3vf3U63Y4dOzw8PK5cuZKcnBwdHa1Wq3/++ee9e/dirqIl48ePLykpOXToUN++fdVq9a5du7RabW5ubnJyclJSksFgKCws/OGHH6QFms8///yKFSvGjRv39ddfL1y4cN68eYQgdGSVlZUnT55suKd79+7S/0tRFL///vuioqIbbrgBPx7tJU2N1o/8OOc//PBDXl5ecnJyRESEvLU5kbNnz+7fvz8sLCw5OVlaTU9EZrP522+/raysHDt2bJvPvgGJKIp79+69ePFiRETEiBEj6s8FVlZW7ty502q1jh071tfXV94iHdmxY8dqa2vrXw4cOFC6DrysrGznzp1qtXrMmDENZ+kPHz58+vTpfv361d+mAEEIAABuDecIAQDArSEIAQDArSEIAQDArSEIAQDArSEIAQDArSEIAQDArSEIAQDArSEIAQDArSEIAQDA9L19dAAAABNJREFUrSEIAQDArSEIAQDArf0/RvkKaNBZcdUAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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Wenv799sMdb+UxB5ns/KylIo7H5uHdRiNpu9vLykroWbQGM6EBrTgdCYjiIIQmBgoE6na7qYBEEIAADgPHCPEAAAPBqCEAAAPBqCEAAAPBqCEAAAPBr2I3RegiAcPHhw165dJSUlffv2nThxolJ5Y3Oz4uLiTz75JD8//9577x05cqS09XQtPM+vXLmyc+fOd911l3imoqLio48+ys3NvfPOO1NTU6WtngvJzMxcu3ZtaWlpXFzctGnTOI4jokuXLq1YsaKysnLChAkJCQlS19E1lJaWrly58urVq507d542bZqfn594/ty5c1988YXNZps8eXKfPn2kraQzy87OPnz4cElJyYQJE2pPED169OjatWtVKtW0adOio6PFkxaL5dNPPz137lxcXNzUqVNlMhmhR+jMsrOzJ06cWFZW1qlTpyVLlowaNYrneSIym81JSUmnTp2KioqaNm3aF198IXVNXckHH3zw3HPPffrpp+JLm812xx13HDhwICYmZvbs2R988IG01XMV27dvHzRoUHl5eZcuXXbt2iU+//b69euJiYl6vT44ODglJWXv3r1SV9MFmEymwYMHHzp0KC4u7tdffx06dKjZbCairKyswYMHM8Y0Gk1ycvKJEyekrqmTKioqio+PX7Zs2YwZM/Ly8mrOHzx4cPjw4QEBAWazOTEx8erVq+L5Rx55ZPXq1d26dVuyZMmzzz57o7QAzqq6utpqtYrHpaWlcrk8IyNDEIRVq1b169eP53lBEDZs2NCzZ0/xGJqVnZ3dt2/f5557bvLkyeKZ7777Ljo6WmznHTt2hIeHWywWSevoAiwWS0RExLp16+qcnzdv3vjx48XjBQsWjBkzpt2r5nr279+v1WptNpsgCBaLxdvb+/Dhw4IgzJo168knnxTLzJ07d9q0aRJW0pnV/PYjojNnztScHz9+/Lx588TjyZMnv/jii4IgZGVlqVSqkpISQRCuXr2qUqny8vIEQUCP0HkpFAqx205EFouF53mNRkNEe/bsSUlJYYwR0d1333327Nn8/HwpK+oiBEFIS0tbtGiRj49Pzcndu3ffddddYjvfcccdhYWF58+fl66OruHEiRMVFRUJCQlLliz57LPP9Hq9eH7Pnj133323eDxy5Mjdu3dLV0eX0aVLF0EQMjMziejMmTNyubxz585EtHv3bjSmPcTfhPU12IB79+4dOHCg+KyZiIiI6Ojo/fv3E4ZGXcXs2bMnTJgg/oRcv349ODhYPO/r66tWq69fvy5p7VxDenp6p06dUlJSap/My8uraUy5XB4QEIDGbFZ2drZCoZgwYUJZWdnWrVsHDBhQUVFBN38yQ0JC9Hq9wWCQtKYuIDQ0dM2aNcnJyT179rzjjju++uqrwMBAqteY169fF/DwE7tVV1cXFxfXaUC6+eediDp06JCbm0uYLOMSXnrppdOnT//888/iS7lcXntLQpvNVjOJBhqTk5Pz3nvv7du3r855uVxus9lqXlosFjRmsziOKy4u3r59e3x8PBENHjx45cqVs2bNqv3JtFqtjDG5HL9hmpGTk5OWlvbWW2/dfvvtP//88/Tp0w8fPhwaGqpQKGo3pkKhaKzrA/XJZDKO42o3oPhz3djPOz6mzm7+/PlbtmzZtWtXzaNjw8PDxb9iiCg/P7+6ujosLEy6CrqGzZs3l5SUiEMlubm5ZrM5NTV1y5Yt4eHh2dnZYhmj0VhWVobGbFZ4eDgR9e7dW3zZu3fvy5cv082fzJycnMDAQJVKJVUlXcWmTZu6du36xBNPEFH37t1Xrlz57bffpqWlhYeH5+TkiGVycnLENgc7yWSyDh065OTk9OrVi4hycnLEn+varVr7PIZGndq77767Zs2a7du3BwUF1ZxMTU3dunVrZWUlEW3YsGHYsGH2PF7dwz344IM//PBDenp6enr6vffeO3jw4DfeeIOIUlNTt2/fXl5eTkSbNm3q1atXVFSU1JV1dvHx8ZGRkQcOHCAim8126NAhMRRTU1M3bNggzm1ev3491qLYIzAw8Nq1a9XV1URkNpuvXbsm/rCLjSmWQWO2wtixY9evX09EgiBs2LBBbMCRI0eeOXMmKyuLiMQVF8OHDyc8dNuZnT59OjY2Njo6uibn3nvvvWHDhvE8P3bs2Nzc3D59+nz//fcbN268/fbbpa2qa3n55ZcvXbq0atUq8eWkSZOOHz+emJi4devWFStWjB49WtrquYSvvvrq2WefHTt27PHjx318fLZt26ZQKAwGw2233abT6UJCQvbs2bNnz55u3bpJXVNnV1VVNWLEiMrKyqSkpF9++UWn0+3YsUOpVBYVFSUnJ0dFRalUqmPHju3btw9jFY25++67S0pKDh8+HBsbq1Kpdu3apdVqs7Ozk5OTk5KSysrKCgoK9u7dKy7QfO211z7++OORI0f+8MMPL7744qxZswhB6MwqKyvPnDlT+0zXrl3F/5c8z//3v/8tLCy87bbb8OPRUuLQaE3PTxCEvXv35uTkJCcnR0ZGSls3F3Lp0qUDBw6Eh4cnJyeLq+mJyGw2//TTT5WVlSkpKc3ufQMinuf37dt37dq1yMjIoUOH1twLrKys3Llzp81mS0lJ8fX1lbaSzuzEiRMWi6XmZf/+/cV54OXl5Tt37lSpVCNGjKg9Sn/kyJFz58717du35jEFCEIAAPBouEcIAAAeDUEIAAAeDUEIAAAeDUEIAAAeDUEIAAAeDUEIAAAeDUEIAAAe9V9wnQAAAB9JREFUDUEIAAAeDUEIAAAeDUEIAAAeDUEIAAAe7f8D70XwGB5n0jYAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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fER7Ni5SGNeBRTd/p08EIQCAm/Nt+Elno9HeBhzw7q/ECSVG2pMj/nid/zNFPDFJ3tz+YQQhAAC4tkAVTe0sTO3cwm/H+hAAAODREIQAAODREIQAAODREIQu5u233+b8bsdZARFZrdb33ntP6irchF6v//e//y11FW6ioKDgq6++kroKN5GZmblhw4YmT0MQupi33nrLYrE0fR40pby8/J///KfUVbiJ3Nzczz77TOoq3ERGRsa6deukrsJNnDt37vvvv2/yNAQhAAB4NAQhAAB4NAQhAAB4NAkm1GdlZSUnJ3fp0qXt39oNWK3WHj16SF2FO+Cc6/V6fA4dwmKx5OXl4WY6hNFoLCoqws10iMrKysDAwCZPY20/BFEUxcuXLysU2N2kJYxGo0qlkroKN4Gb6UC4mQ6Em+konHOtVqvRaBo/TYIgBAAAcB54RggAAB4NQQgAAB4NQQgAAB4NQQgAAB4N+xE6L875sWPHfv755+Li4r59+06fPl2prN5usqio6PPPP8/Pzx83btyYMWOkrdO1iKK4atWqjh073nvvvbYjZWVln3766Y0bN0aPHj1hwgRpy3Mh6enp69evLykpiY2NnTVrliAIRHT16tWVK1dWVlZOnTp10KBBUtfoGkpKSlatWnXt2rWOHTvOmjUrICDAdvzSpUurV6+2Wq2PPvponz59pC3SmWVmZp48ebK4uHjq1Km1B4iePn16/fr1arV61qxZnTtX71VoNpu//PLLS5cuxcbGzpw5UyaTEVqEziwzM3P69Ok6na5Dhw7Lly9/4IEHRFEkIqPROGzYsNTU1Ojo6FmzZq1evVrqSl3JRx99tHDhwi+//NL2pdVqHTVq1NGjR7t06fKXv/zlo48+krY8V7F79+7BgweXlpZ26tTp559/tq1/m5ubGx8fX15eHhISkpSUdPDgQanLdAEGgyEhIeH48eOxsbGHDh0aOnSo0WgkosuXLyckJDDGfH19ExMTz507J3WlTurmzZsDBgz45JNPnnrqqby8vJrjx44dGzlyZFBQkNFojI+Pv3btmu34448/vnbt2m7dui1fvvyZZ56pPpuDszKZTBaLxfa6pKRELpenpKRwztesWdOvXz9RFDnnGzdu7NGjh+01NCkzM7Nv374LFy589NFHbUe2bdvWuXNn233es2dPRESE2WyWtEYXYDabIyMjN2zYUOf44sWLJ0+ebHu9dOnS8ePHt3lprufIkSP+/v5Wq5Vzbjabvb29T548yTlfsGDB3LlzbecsWrRo1qxZEhbpzGp++xFRWlpazfHJkycvXrzY9vrRRx996aWXOOeXL19Wq9XFxcWc82vXrqnV6ry8PM45WoTOS6FQ2JrtRGQ2m0VR9PX1JaIDBw4kJSUxxojo/vvvv3jxYn5+vpSFugjO+bx589577z0fH5+ag/v377/33ntt93nUqFGFhYUZGRnS1egazp07V1ZWNmjQoOXLl3/11Vfl5eW24wcOHLj//vttr8eMGbN//37panQZnTp14pynp6cTUVpamlwu79ixIxHt378fN9Mett+Ed6r3Bh48eHDgwIG2tWYiIyM7d+585MgRQteoq/jLX/4ydepU209Ibm5uSEiI7bifn5+Xl1dubq6k1bmGFStWdOjQISkpqfbBvLy8mpspl8uDgoJwM5uUmZmpUCimTp2q0+m2b9/ev3//srIyuv2TGRoaWl5ertfrJa3UBbRr127dunWJiYk9evQYNWrUt99+q9Vq6Y6bmZuby7H4id1MJlNRUVGdG0i3/7wTUVhY2I0bNwiDZVzCK6+8cuHChX379tm+lMvltbcktFqtNYNooCE5OTnvv//+4cOH6xyXy+VWq7XmS7PZjJvZJEEQioqKdu/ePWDAACJKSEhYtWrVggULan8yLRYLY0wux2+YJuTk5MybN2/ZsmUjRozYt2/fnDlzTp482a5dO4VCUftmKhSKhpo+cCeZTCYIQu0baPu5bujnHR9TZ7dkyZLk5OSff/65ZunYiIgI2/9iiCg/P99kMoWHh0tXoGvYunVrcXGxravkxo0bRqNxwoQJycnJERERmZmZtnMqKip0Oh1uZpMiIiKIqFevXrYve/XqlZWVRbd/MnNycrRarVqtlqpIV7Fly5auXbs++eSTRBQTE7Nq1aoffvhh3rx5EREROTk5tnNycnJs9xzsJJPJwsLCcnJyevbsSUQ5OTm2n+vad7X2cXSNOrV333133bp1u3fvDg4Orjk4YcKE7du3V1ZWEtHGjRuHDx9uz/LqHm7KlCk7d+5csWLFihUrxo0bl5CQ8OabbxLRhAkTdu/eXVpaSkRbtmzp2bNndHS01MU6uwEDBkRFRR09epSIrFbr8ePHbaE4YcKEjRs32sY2f/fdd5iLYg+tVnv9+nWTyURERqPx+vXrth922820nYOb2QITJ0787rvviIhzvnHjRtsNHDNmTFpa2uXLl4nINuNi5MiRhEW3ndmFCxd69+7duXPnmpx7//33hw8fLorixIkTb9y40adPnx07dmzevHnEiBHSlupa/u///u/q1atr1qyxfTljxoyzZ8/Gx8dv37595cqVf/jDH6QtzyV8++23zzzzzMSJE8+ePevj47Nr1y6FQqHX6++55x6NRhMaGnrgwIEDBw5069ZN6kqdXVVV1X333VdZWTls2LBff/1Vo9Hs2bNHqVTevHkzMTExOjparVafOXPm8OHD6KtoyP33319cXHzy5MnevXur1eqff/7Z398/MzMzMTFx2LBhOp2uoKDg4MGDtgmaf//73z/77LMxY8bs3LnzpZdeWrBgASEInVllZWVaWlrtI127drX9W4qi+MsvvxQWFt5zzz348WguW9doTcuPc37w4MGcnJzExMSoqChpa3MhV69ePXr0aERERGJiom02PREZjca9e/dWVlYmJSU1ufcN2IiiePjw4evXr0dFRQ0dOrTmWWBlZeVPP/1ktVqTkpL8/PykLdKZnTt3zmw213wZFxdnGwdeWlr6008/qdXq++67r3Yv/alTpy5dutS3b9+aZQoQhAAA4NHwjBAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADwaghAAADza/wfS7ydLinTKXgAAAABJRU5ErkJggg==", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3xUVdoH8OfcmclM+iSTQnqjhJbQIwRBNDQliLqgoAgqIOyKuvu+rPq6LLvsrq4KurZVXFFYBAGRIkSlCALSRHoJIaGTkF4nk0y597x/DMYYUiZhkjvl9/34x8zNzc3DcciPc+455zLOOQEAALgrQe4CAAAA5IQgBAAAt4YgBAAAt4YgBAAAt4YgBAAAt4YgBAAAt4YgBAAAt4YgBAAAt4YgBAAAt4YgBAAAtyZDEJ48eXLZsmUd/3Ndg9lslrsE14HGtCM0ph2hMe3IYrG0eI4MQXj69Ont27d3/M91DbW1tXKX4DrQmHaExrQjNKa9SJJkNBpbPA1DowAA4NYQhAAA4NYQhAAA4NYQhAAA4NYQhAAA4NZsDUJJkl555ZU+ffoMHTp048aNjZ7z3nvvpaamJicnz5w5s6CgwH5FAgAAtBdbg3DJkiUrVqxYsWLF//3f/02fPv3UqVMNTli9evWrr7765ptvbtmyRa/XP/HEE/YuFQAAwP5sDcIPPvhg/vz5vXv3vvfeex955JGPPvqowQnHjx9PS0tLSUmJioqaOXPm8ePH7V0qAACA/dkUhKIoZmZmDhw40Pp24MCBp0+fbnDOhAkT9uzZs3fv3pycnA8++OCRRx5p5oJlPlFtKxcAAMC+lLacVFZWZrFY/P39rW+1Wm1hYWGDcwYOHHjfffelp6f7+vr6+vq+/vrrTV0tJydnhyk2Li6u7siSJUuGDBnS+uLdUXV1NWNM7ipcBBrTjtCYdoTGtBdJkmxpSZuC0M/PjzFWXV1tfVtVVRUQENDgnIULF547d+7GjRuenp4fffRRWlra+fPnFQrFrVdLSEjwVyV+N/+7mxUolZGRkYKA+as24Zz7+PjIXYWLQGPakbM35urVq9evXy93FTeJotjoL083N2/evLqBSRtJklRTU9PiaTYFoYeHR0RExPnz563duOzs7Pr9Oat9+/aNGzfO09OTiCZNmvT000/n5+dHRETcejXGmMk7JCQqykdlyw8HAGh3u3fv1mq1I0eOlLsQaNyHH3548uTJ1gahjWwKQiJ67LHH3nnnnbS0tLKyss8++8w6Waa6unrhwoV//OMfdTpdz549MzIyZs+erdFo1q1bFxQU1KlTpyZ/qmTMquD9g9D3BwBH0a9fv4kTJ8pdBTRu69at7XdxWwckX3rpJUmSOnXq1KVLl0mTJo0ePZqIamtrlyxZUllZSUQLFixQq9WRkZFxcXGvvvrq559/3kzX3rf6xrlybpc/AAAAwO2wtUfo5+f3zTffVFZWqlQq6/gnEel0uvLycuvrwMDALVu2mEwmo9Ho6+vbwtUM+VkVCEIAAJCfrUFo5efn1/wJHh4eHh4eLV/HkHeuvFU/GQAAoF3IM1fTz3DjHHqEAADgAOQKwvwLlVxEFAIAgNzkCUKFZA71ZJerkIQAACAz2ZaxJ2rpXIVcPxwAwKXs27dvxIgR1tcxMTH5+fkNTli2bNmTTz7ZzBX27t2r1+utrw8dOjR06NDbqWfZsmVPP/307VyhI8kXhP4MKygAAOzCbDaXlZVZX7/44ou3Tt03Go11u4M16pFHHrl8+bL1dXR09Jw5c26nnpqaGuvKOqfQulmjdtRNy44UIwgBABpXWFi4devWqVOnWt+WlJRs3rx5+vTp1hc5OTmBgYEPP/zwrRt4aTSaug02d+zYsXv37p49e3J+8/etKIo7d+48dOiQKIrDhg2z9iO3b99uMBjWrVu3f//+ESNG+Pn5qdVq6/mSJK1bt+7MmTNxcXGTJ0+2Hs/IyOjWrdvhw4fPnDkzbNiwUaNGNfMHqampWbVq1dWrV/v06TNhwgRrbRcuXFizZo1er4+NjZ00aZJWqy0qKlq5cmV+fn54ePiECROio6Pt1pQtQY8QAMARabXaP/zhD3UPf122bNmWLVuIaOvWrZmZmQkJCSUlJf379791FPSZZ56x9g6XLFkya9asiIiIgwcPLlq0yPrVqqqqTz75JDAwMDg4eM6cObc+U4+IsrOzFyxYYH392GOPvfvuu+Hh4Rs2bBgxYoQoikT09ttvP/DAA8ePH9fpdFOnTrUW1iiTyZSamrp169bw8PB//vOfs2bNIqL8/PyhQ4cyxrp3737p0qULFy5IkpSamnr9+vWePXtWVVUdOXLkNluvVWTrESZqEYQA4LgyrvF/nRY77MepBfriHqVnvV/JHh4eDz/88IoVK6wP8/nvf//797//nYimTJkyZcoU6zlFRUVr16599tlnG73mggULvvzyy9TUVCLKzc21HtRqtZ9//rn1dZ8+febOnTtr1qyRI0d6eXn95je/6dWrFxEVFBRYTzhx4sTXX3999epVPz+/mTNnJiYmbtq06cEHHySisWPHvvbaa0RUW1u7YcOGcePGNVrDmjVrJElas2YNY+yhhx6KiYn54x//mJeXp9Pp5s2bp1Te/AOXlJRcv359/vz5dY856kiyBWGoJ4mcSoykU8tVAgBAk1KC2QtJHfcICLWCPG/5fTxt2rT09PRXXnnl1KlT+fn5Y8aMIaJTp049++yzubm5Go2muLi4qeQoKioqKioaNGiQ9e3gwYMPHTpERGaz+fnnn9++fbsgCCqV6tZn6tV35syZpKQk61YqgiAMGTLk9OnT1iDs06eP9ZyIiIgDBw40c4XU1FTrcGhQUFC3bt3OnDkzZsyY4ODgsLCwcePGTZw48d5779XpdFOmTImMjBwzZkx6evqjjz7akc/fkC0IiaibPztXzlNDsfU2ADicIA2lRcj822ngwIEhISHbt2/funXrY489plKpiGj27NlPPvnkU089RURz586VJKnR7/X09OScm0wm63fVPY3o008/PX/+/OnTpz08PI4cOWLdOLopXl5e9R9jZDAYvLy8rK9tDCovL6/6WVtTU+Pl5aXRaHbt2nX+/PlNmzbNmjVr4cKFTz755Mcff7xw4cItW7YsWrTo2LFjb731li3Xtws5nwKI0VEAgOY99thjS5cuXb169eOPP249UlhY2LlzZyIqLy/ftGlTU9/o4+PTr18/6yioyWT68ssv6749KirKuhfmsmXL6s7XarWlpaUNLjJo0KBz586dPn2aiPLz87dt2zZ8+PBW1T98+PCMjAzrlQ8dOpSXl9e/f//y8nKLxdK1a9d58+ZNnDjx7NmzNTU11dXV4eHhs2bNev7558+ePduqn3KbZO4RYuttAIBmTJ069eWXX05KSkpOTrYemTt37qRJk4YMGXLx4sXevXs3873vv//+hAkT1q9fn5eXFxsbaz04efLkoUOHjh49urKysmvXrnUnz5kz56GHHoqOjl64cGHdcGt4ePjbb7+dlpY2YMCAo0eP/v73v2/tEwGHDx8+ffp0a/0//fTThx9+qNPpNm/ePHv27H79+omieP78+YyMjOvXrw8ZMqR///4ajebo0aMff/xxq37KbWJ1c2o7zKpVqzIyMlauXLnpirQ0i381Cg9iboWqqqoWH+4BNkJj2pGzN+acOXOSk5Nnz54t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", - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "execute_result", - "data": { - "text/plain": "trained Machine; does not cache data\n model: ProbabilisticIteratedModel(model = NeuralNetworkClassifier(builder = MLP(hidden = (5, 4), …), …), …)\n args: \n 1:\tSource @012 ⏎ Table{AbstractVector{Continuous}}\n 2:\tSource @753 ⏎ AbstractVector{Multiclass{3}}\n" - }, - "metadata": {}, - "execution_count": 5 - } - ], - "cell_type": "code", - "source": [ - "mach = machine(iterated_model, X, y)\n", - "fit!(mach, force=true)" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using Literate #src" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "---\n", - "\n", - "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" - ], - "metadata": {} - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/dev/workflow examples/Live Training/live-training/index.html b/dev/workflow examples/Live Training/live-training/index.html deleted file mode 100644 index a6d43b67..00000000 --- a/dev/workflow examples/Live Training/live-training/index.html +++ /dev/null @@ -1,38 +0,0 @@ - -Live Training · MLJFlux

Incremental Training with MLJFlux

Julia version is assumed to be 1.10.*

Basic Imports

using MLJ               # Has MLJFlux models
-using Flux              # For more flexibility
-import RDatasets        # Dataset source
-using Plots             # For training plot

Loading and Splitting the Data

iris = RDatasets.dataset("datasets", "iris");
-y, X = unpack(iris, ==(:Species), colname -> true, rng=123);
-X = Float32.(X);      # To be compatible with type of network network parameters
-nothing #hide

Instantiating the model

Now let's construct our model. This follows a similar setup to the one followed in the Quick Start.

NeuralNetworkClassifier = @load NeuralNetworkClassifier pkg=MLJFlux
-
-clf = NeuralNetworkClassifier(
-    builder=MLJFlux.MLP(; hidden=(5,4), σ=Flux.relu),
-    optimiser=Flux.ADAM(0.01),
-    batch_size=8,
-    epochs=50,
-    rng=42
-    )

Now let's wrap this in an iterated model. We will use a callback that makes a plot for validation losses each iteration.

stop_conditions = [
-    Step(1),            # Repeatedly train for one iteration
-    NumberLimit(100),   # Don't train for more than 100 iterations
-]
-
-validation_losses =  []
-gr(reuse=true)                  # use the same window for plots
-function plot_loss(loss)
-    push!(validation_losses, loss)
-    display(plot(validation_losses, label="validation loss", xlim=(1, 100)))
-   sleep(.01)                   # to catch up with the plots while they are being generated
-end
-
-callbacks = [ WithLossDo(plot_loss),]
-
-iterated_model = IteratedModel(model=clf,
-                               resampling=Holdout(),    # Split the data internally into 0.7 training and 0.3 validation
-                               measures=log_loss,
-                               iteration_parameter=:(epochs),
-                               controls=vcat(stop_conditions, callbacks),
-                               retrain=true                  # no need to retrain on all data at the end
-                               )

Live Training

Simply fitting the model is all we need

mach = machine(iterated_model, X, y)
-fit!(mach, force=true)
using Literate #src

This page was generated using Literate.jl.