From e7004af9a90688b18fc9b15145ec9ad6812a05af Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 27 Mar 2024 14:33:25 +0000 Subject: [PATCH] build based on b45e603 --- stable | 2 +- v0.5 | 2 +- v0.5.30/404.html | 21 + .../api/Accelerator_Support/LuxAMDGPU.html | 24 ++ v0.5.30/api/Accelerator_Support/LuxCUDA.html | 24 ++ .../Accelerator_Support/LuxDeviceUtils.html | 28 ++ v0.5.30/api/Building_Blocks/LuxCore.html | 25 ++ v0.5.30/api/Building_Blocks/LuxLib.html | 27 ++ .../Building_Blocks/WeightInitializers.html | 78 ++++ .../api/Domain_Specific_Modeling/Boltz.html | 27 ++ v0.5.30/api/Lux/contrib.html | 125 ++++++ v0.5.30/api/Lux/layers.html | 80 ++++ v0.5.30/api/Lux/switching_frameworks.html | 48 +++ v0.5.30/api/Lux/utilities.html | 26 ++ .../Testing_Functionality/LuxTestUtils.html | 41 ++ ...celerator_Support_LuxAMDGPU.md.qoeTbLKY.js | 1 + ...ator_Support_LuxAMDGPU.md.qoeTbLKY.lean.js | 1 + ...Accelerator_Support_LuxCUDA.md.D46lK8Gh.js | 1 + ...erator_Support_LuxCUDA.md.D46lK8Gh.lean.js | 1 + ...ator_Support_LuxDeviceUtils.md.BXWwkWYm.js | 5 + ...Support_LuxDeviceUtils.md.BXWwkWYm.lean.js | 1 + ...api_Building_Blocks_LuxCore.md.CXlTipX8.js | 2 + ...uilding_Blocks_LuxCore.md.CXlTipX8.lean.js | 1 + .../api_Building_Blocks_LuxLib.md.B6OT9gA7.js | 4 + ...Building_Blocks_LuxLib.md.B6OT9gA7.lean.js | 1 + ...g_Blocks_WeightInitializers.md.6GPvJ2xM.js | 55 +++ ...cks_WeightInitializers.md.6GPvJ2xM.lean.js | 1 + ...ain_Specific_Modeling_Boltz.md.KvKJdetm.js | 4 + ...pecific_Modeling_Boltz.md.KvKJdetm.lean.js | 1 + v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.js | 102 +++++ .../api_Lux_contrib.md.DdRrnWLR.lean.js | 1 + v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.js | 57 +++ .../assets/api_Lux_layers.md.BLLg0WBY.lean.js | 1 + ...pi_Lux_switching_frameworks.md.D8TUetx8.js | 25 ++ ...x_switching_frameworks.md.D8TUetx8.lean.js | 1 + .../assets/api_Lux_utilities.md.Dh0D4iq-.js | 3 + .../api_Lux_utilities.md.Dh0D4iq-.lean.js | 1 + ..._Functionality_LuxTestUtils.md.DiE0Lkt7.js | 18 + ...tionality_LuxTestUtils.md.DiE0Lkt7.lean.js | 1 + v0.5.30/assets/app.DXm91Kyx.js | 7 + .../chunks/@localSearchIndexroot.C58gNy8P.js | 1 + .../chunks/VPLocalSearchBox.D20U0MDo.js | 13 + v0.5.30/assets/chunks/framework.BfjuC5t1.js | 17 + v0.5.30/assets/chunks/theme.BUqgOrlt.js | 7 + v0.5.30/assets/ecosystem.md.CmsIcYxR.js | 1 + v0.5.30/assets/ecosystem.md.CmsIcYxR.lean.js | 1 + v0.5.30/assets/index.md.B9NbXpl6.js | 1 + v0.5.30/assets/index.md.B9NbXpl6.lean.js | 1 + .../inter-italic-cyrillic-ext.5XJwZIOp.woff2 | Bin 0 -> 28332 bytes .../inter-italic-cyrillic.D6csxwjC.woff2 | Bin 0 -> 17824 bytes .../inter-italic-greek-ext.CHOfFY1k.woff2 | Bin 0 -> 12188 bytes .../assets/inter-italic-greek.9J96vYpw.woff2 | Bin 0 -> 23264 bytes .../inter-italic-latin-ext.BGcWXLrn.woff2 | Bin 0 -> 63552 bytes .../assets/inter-italic-latin.DbsTr1gm.woff2 | Bin 0 -> 46048 bytes .../inter-italic-vietnamese.DHNAd7Wr.woff2 | Bin 0 -> 8784 bytes .../inter-roman-cyrillic-ext.DxP3Awbn.woff2 | Bin 0 -> 26600 bytes .../inter-roman-cyrillic.CMhn1ESj.woff2 | Bin 0 -> 16780 bytes .../inter-roman-greek-ext.D0mI3NpI.woff2 | Bin 0 -> 11808 bytes .../assets/inter-roman-greek.JvnBZ4YD.woff2 | Bin 0 -> 21776 bytes .../inter-roman-latin-ext.ZlYT4o7i.woff2 | Bin 0 -> 59608 bytes .../assets/inter-roman-latin.Bu8hRsVA.woff2 | Bin 0 -> 42464 bytes .../inter-roman-vietnamese.ClpjcLMQ.woff2 | Bin 0 -> 8492 bytes .../introduction_citation.md.B4ZpJtEk.js | 16 + .../introduction_citation.md.B4ZpJtEk.lean.js | 1 + .../assets/introduction_index.md.BGT8f-rY.js | 88 ++++ .../introduction_index.md.BGT8f-rY.lean.js | 1 + .../introduction_overview.md.CYVQehqb.js | 1 + .../introduction_overview.md.CYVQehqb.lean.js | 1 + .../introduction_resources.md.jcqOsVfN.js | 1 + ...introduction_resources.md.jcqOsVfN.lean.js | 1 + .../assets/manual_debugging.md.Cng6aRvr.js | 121 ++++++ .../manual_debugging.md.Cng6aRvr.lean.js | 1 + ...anual_dispatch_custom_input.md.Ln2h9dji.js | 58 +++ ..._dispatch_custom_input.md.Ln2h9dji.lean.js | 1 + ...l_freezing_model_parameters.md.B_lUuLCd.js | 59 +++ ...ezing_model_parameters.md.B_lUuLCd.lean.js | 1 + .../manual_gpu_management.md.DUY-sneY.js | 26 ++ .../manual_gpu_management.md.DUY-sneY.lean.js | 1 + .../assets/manual_interface.md.ypfbSQ9y.js | 92 ++++ .../manual_interface.md.ypfbSQ9y.lean.js | 1 + .../manual_migrate_from_flux.md.CGt97TpW.js | 75 ++++ ...nual_migrate_from_flux.md.CGt97TpW.lean.js | 1 + .../manual_weight_initializers.md._StOXcgy.js | 30 ++ ...al_weight_initializers.md._StOXcgy.lean.js | 1 + v0.5.30/assets/results.Dao8ZugC.gif | Bin 0 -> 611004 bytes v0.5.30/assets/style.B9VjKpNY.css | 1 + ...ced_1_GravitationalWaveForm.md.CwWPFlQf.js | 303 +++++++++++++ ..._GravitationalWaveForm.md.CwWPFlQf.lean.js | 1 + ...tutorials_beginner_1_Basics.md.sRzg70M2.js | 239 +++++++++++ ...ials_beginner_1_Basics.md.sRzg70M2.lean.js | 1 + ...eginner_2_PolynomialFitting.md.d77bE0Yd.js | 116 +++++ ...er_2_PolynomialFitting.md.d77bE0Yd.lean.js | 1 + ...orials_beginner_3_SimpleRNN.md.SS1AvA0i.js | 381 +++++++++++++++++ ...s_beginner_3_SimpleRNN.md.SS1AvA0i.lean.js | 1 + ...als_beginner_4_SimpleChains.md.CoBtejGc.js | 115 +++++ ...eginner_4_SimpleChains.md.CoBtejGc.lean.js | 1 + v0.5.30/assets/tutorials_index.md.jZj6-Wv9.js | 1 + .../tutorials_index.md.jZj6-Wv9.lean.js | 1 + ...ls_intermediate_1_NeuralODE.md.BYoRK3MI.js | 253 +++++++++++ ...termediate_1_NeuralODE.md.BYoRK3MI.lean.js | 1 + ...s_intermediate_2_BayesianNN.md.Di-SHgr7.js | 197 +++++++++ ...ermediate_2_BayesianNN.md.Di-SHgr7.lean.js | 1 + ...als_intermediate_3_HyperNet.md.DFqj-uR3.js | 206 +++++++++ ...ntermediate_3_HyperNet.md.DFqj-uR3.lean.js | 1 + v0.5.30/ecosystem.html | 24 ++ v0.5.30/favicon-16x16.png | Bin 0 -> 555 bytes v0.5.30/favicon-32x32.png | Bin 0 -> 1158 bytes v0.5.30/favicon.ico | Bin 0 -> 15406 bytes v0.5.30/hashmap.json | 1 + v0.5.30/index.html | 24 ++ v0.5.30/introduction/citation.html | 39 ++ v0.5.30/introduction/index.html | 111 +++++ v0.5.30/introduction/overview.html | 24 ++ v0.5.30/introduction/resources.html | 24 ++ v0.5.30/lux-logo-dark.svg | 38 ++ v0.5.30/lux-logo.svg | 38 ++ v0.5.30/manual/debugging.html | 144 +++++++ v0.5.30/manual/dispatch_custom_input.html | 81 ++++ v0.5.30/manual/freezing_model_parameters.html | 82 ++++ v0.5.30/manual/gpu_management.html | 49 +++ v0.5.30/manual/interface.html | 115 +++++ v0.5.30/manual/migrate_from_flux.html | 98 +++++ v0.5.30/manual/weight_initializers.html | 53 +++ v0.5.30/siteinfo.js | 1 + .../advanced/1_GravitationalWaveForm.html | 326 ++++++++++++++ v0.5.30/tutorials/beginner/1_Basics.html | 262 ++++++++++++ .../beginner/2_PolynomialFitting.html | 139 ++++++ v0.5.30/tutorials/beginner/3_SimpleRNN.html | 404 ++++++++++++++++++ .../tutorials/beginner/4_SimpleChains.html | 138 ++++++ v0.5.30/tutorials/index.html | 24 ++ .../tutorials/intermediate/1_NeuralODE.html | 276 ++++++++++++ .../tutorials/intermediate/2_BayesianNN.html | 220 ++++++++++ .../tutorials/intermediate/3_HyperNet.html | 229 ++++++++++ versions.js | 2 +- 134 files changed, 6278 insertions(+), 3 deletions(-) create mode 100644 v0.5.30/404.html create mode 100644 v0.5.30/api/Accelerator_Support/LuxAMDGPU.html create mode 100644 v0.5.30/api/Accelerator_Support/LuxCUDA.html create mode 100644 v0.5.30/api/Accelerator_Support/LuxDeviceUtils.html create mode 100644 v0.5.30/api/Building_Blocks/LuxCore.html create mode 100644 v0.5.30/api/Building_Blocks/LuxLib.html create mode 100644 v0.5.30/api/Building_Blocks/WeightInitializers.html create mode 100644 v0.5.30/api/Domain_Specific_Modeling/Boltz.html create mode 100644 v0.5.30/api/Lux/contrib.html create mode 100644 v0.5.30/api/Lux/layers.html create mode 100644 v0.5.30/api/Lux/switching_frameworks.html create mode 100644 v0.5.30/api/Lux/utilities.html create mode 100644 v0.5.30/api/Testing_Functionality/LuxTestUtils.html create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.js create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.lean.js create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.js create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.lean.js create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.js create mode 100644 v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.lean.js create mode 100644 v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.js create mode 100644 v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.lean.js create mode 100644 v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.js create mode 100644 v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.lean.js create mode 100644 v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.js create mode 100644 v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.lean.js create mode 100644 v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.js create mode 100644 v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.lean.js create mode 100644 v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.js create mode 100644 v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.lean.js create mode 100644 v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.js create mode 100644 v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.lean.js create mode 100644 v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.js create mode 100644 v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.lean.js create mode 100644 v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.js create mode 100644 v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.lean.js create mode 100644 v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.js create mode 100644 v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.lean.js create mode 100644 v0.5.30/assets/app.DXm91Kyx.js create mode 100644 v0.5.30/assets/chunks/@localSearchIndexroot.C58gNy8P.js create mode 100644 v0.5.30/assets/chunks/VPLocalSearchBox.D20U0MDo.js create mode 100644 v0.5.30/assets/chunks/framework.BfjuC5t1.js create mode 100644 v0.5.30/assets/chunks/theme.BUqgOrlt.js create mode 100644 v0.5.30/assets/ecosystem.md.CmsIcYxR.js create mode 100644 v0.5.30/assets/ecosystem.md.CmsIcYxR.lean.js create mode 100644 v0.5.30/assets/index.md.B9NbXpl6.js create mode 100644 v0.5.30/assets/index.md.B9NbXpl6.lean.js create mode 100644 v0.5.30/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 create mode 100644 v0.5.30/assets/inter-italic-cyrillic.D6csxwjC.woff2 create mode 100644 v0.5.30/assets/inter-italic-greek-ext.CHOfFY1k.woff2 create mode 100644 v0.5.30/assets/inter-italic-greek.9J96vYpw.woff2 create mode 100644 v0.5.30/assets/inter-italic-latin-ext.BGcWXLrn.woff2 create mode 100644 v0.5.30/assets/inter-italic-latin.DbsTr1gm.woff2 create mode 100644 v0.5.30/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 create mode 100644 v0.5.30/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 create mode 100644 v0.5.30/assets/inter-roman-cyrillic.CMhn1ESj.woff2 create mode 100644 v0.5.30/assets/inter-roman-greek-ext.D0mI3NpI.woff2 create mode 100644 v0.5.30/assets/inter-roman-greek.JvnBZ4YD.woff2 create mode 100644 v0.5.30/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 create mode 100644 v0.5.30/assets/inter-roman-latin.Bu8hRsVA.woff2 create mode 100644 v0.5.30/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 create mode 100644 v0.5.30/assets/introduction_citation.md.B4ZpJtEk.js create mode 100644 v0.5.30/assets/introduction_citation.md.B4ZpJtEk.lean.js create mode 100644 v0.5.30/assets/introduction_index.md.BGT8f-rY.js create mode 100644 v0.5.30/assets/introduction_index.md.BGT8f-rY.lean.js create mode 100644 v0.5.30/assets/introduction_overview.md.CYVQehqb.js create mode 100644 v0.5.30/assets/introduction_overview.md.CYVQehqb.lean.js create mode 100644 v0.5.30/assets/introduction_resources.md.jcqOsVfN.js create mode 100644 v0.5.30/assets/introduction_resources.md.jcqOsVfN.lean.js create mode 100644 v0.5.30/assets/manual_debugging.md.Cng6aRvr.js create mode 100644 v0.5.30/assets/manual_debugging.md.Cng6aRvr.lean.js create mode 100644 v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.js create mode 100644 v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.lean.js create mode 100644 v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.js create mode 100644 v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.lean.js create mode 100644 v0.5.30/assets/manual_gpu_management.md.DUY-sneY.js create mode 100644 v0.5.30/assets/manual_gpu_management.md.DUY-sneY.lean.js create mode 100644 v0.5.30/assets/manual_interface.md.ypfbSQ9y.js create mode 100644 v0.5.30/assets/manual_interface.md.ypfbSQ9y.lean.js create mode 100644 v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.js create mode 100644 v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.lean.js create mode 100644 v0.5.30/assets/manual_weight_initializers.md._StOXcgy.js create mode 100644 v0.5.30/assets/manual_weight_initializers.md._StOXcgy.lean.js create mode 100644 v0.5.30/assets/results.Dao8ZugC.gif create mode 100644 v0.5.30/assets/style.B9VjKpNY.css create mode 100644 v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.js create mode 100644 v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.lean.js create mode 100644 v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.js create mode 100644 v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.lean.js create mode 100644 v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.js create mode 100644 v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.lean.js create mode 100644 v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.js create mode 100644 v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.lean.js create mode 100644 v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.js create mode 100644 v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.lean.js create mode 100644 v0.5.30/assets/tutorials_index.md.jZj6-Wv9.js create mode 100644 v0.5.30/assets/tutorials_index.md.jZj6-Wv9.lean.js create mode 100644 v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.js create mode 100644 v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.lean.js create mode 100644 v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.js create mode 100644 v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.lean.js create mode 100644 v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.js create mode 100644 v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.lean.js create mode 100644 v0.5.30/ecosystem.html create mode 100644 v0.5.30/favicon-16x16.png create mode 100644 v0.5.30/favicon-32x32.png create mode 100644 v0.5.30/favicon.ico create mode 100644 v0.5.30/hashmap.json create mode 100644 v0.5.30/index.html create mode 100644 v0.5.30/introduction/citation.html create mode 100644 v0.5.30/introduction/index.html create mode 100644 v0.5.30/introduction/overview.html create mode 100644 v0.5.30/introduction/resources.html create mode 100644 v0.5.30/lux-logo-dark.svg create mode 100644 v0.5.30/lux-logo.svg create mode 100644 v0.5.30/manual/debugging.html create mode 100644 v0.5.30/manual/dispatch_custom_input.html create mode 100644 v0.5.30/manual/freezing_model_parameters.html create mode 100644 v0.5.30/manual/gpu_management.html create mode 100644 v0.5.30/manual/interface.html create mode 100644 v0.5.30/manual/migrate_from_flux.html create mode 100644 v0.5.30/manual/weight_initializers.html create mode 100644 v0.5.30/siteinfo.js create mode 100644 v0.5.30/tutorials/advanced/1_GravitationalWaveForm.html create mode 100644 v0.5.30/tutorials/beginner/1_Basics.html create mode 100644 v0.5.30/tutorials/beginner/2_PolynomialFitting.html create mode 100644 v0.5.30/tutorials/beginner/3_SimpleRNN.html create mode 100644 v0.5.30/tutorials/beginner/4_SimpleChains.html create mode 100644 v0.5.30/tutorials/index.html create mode 100644 v0.5.30/tutorials/intermediate/1_NeuralODE.html create mode 100644 v0.5.30/tutorials/intermediate/2_BayesianNN.html create mode 100644 v0.5.30/tutorials/intermediate/3_HyperNet.html diff --git a/stable b/stable index ce6fd3da9..7c687c1d7 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.5.29 \ No newline at end of file +v0.5.30 \ No newline at end of file diff --git a/v0.5 b/v0.5 index ce6fd3da9..7c687c1d7 120000 --- a/v0.5 +++ b/v0.5 @@ -1 +1 @@ -v0.5.29 \ No newline at end of file +v0.5.30 \ No newline at end of file diff --git a/v0.5.30/404.html b/v0.5.30/404.html new file mode 100644 index 000000000..a760cd1e0 --- /dev/null +++ b/v0.5.30/404.html @@ -0,0 +1,21 @@ + + + + + + 404 | Lux.jl Documentation + + + + + + + + + + +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Accelerator_Support/LuxAMDGPU.html b/v0.5.30/api/Accelerator_Support/LuxAMDGPU.html new file mode 100644 index 000000000..5129e3085 --- /dev/null +++ b/v0.5.30/api/Accelerator_Support/LuxAMDGPU.html @@ -0,0 +1,24 @@ + + + + + + LuxAMDGPU | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxAMDGPU

LuxAMDGPU is meant to be used as a trigger package for all AMDGPU dependencies in Lux. Users requiring AMDGPU support should install LuxAMDGPU and load it alongside Lux.

Index

API

# LuxAMDGPU.functionalMethod.
julia
functional()

Check if LuxAMDGPU is functional.

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Accelerator_Support/LuxCUDA.html b/v0.5.30/api/Accelerator_Support/LuxCUDA.html new file mode 100644 index 000000000..09592cf63 --- /dev/null +++ b/v0.5.30/api/Accelerator_Support/LuxCUDA.html @@ -0,0 +1,24 @@ + + + + + + LuxCUDA | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxCUDA

LuxCUDA is meant to be used as a trigger package for all CUDA dependencies in Lux. Users requiring CUDA support should install LuxCUDA and load it alongside Lux.

Index

API Reference

# LuxCUDA.functionalMethod.
julia
functional()

Check if LuxCUDA is functional.

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Accelerator_Support/LuxDeviceUtils.html b/v0.5.30/api/Accelerator_Support/LuxDeviceUtils.html new file mode 100644 index 000000000..eaa4b39d3 --- /dev/null +++ b/v0.5.30/api/Accelerator_Support/LuxDeviceUtils.html @@ -0,0 +1,28 @@ + + + + + + LuxDeviceUtils | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxDeviceUtils

LuxDeviceUtils.jl is a lightweight package defining rules for transferring data across devices. Most users should directly use Lux.jl instead.

Index

Preferences

# LuxDeviceUtils.gpu_backend!Function.
julia
gpu_backend!() = gpu_backend!("")
+gpu_backend!(backend) = gpu_backend!(string(backend))
+gpu_backend!(backend::AbstractLuxGPUDevice)
+gpu_backend!(backend::String)

Creates a LocalPreferences.toml file with the desired GPU backend.

If backend == "", then the gpu_backend preference is deleted. Otherwise, backend is validated to be one of the possible backends and the preference is set to backend.

If a new backend is successfully set, then the Julia session must be restarted for the change to take effect.

source


Data Transfer

# LuxDeviceUtils.cpu_deviceFunction.
julia
cpu_device() -> LuxCPUDevice()

Return a LuxCPUDevice object which can be used to transfer data to CPU.

source


# LuxDeviceUtils.gpu_deviceFunction.
julia
gpu_device(device_id::Union{Nothing, Int}=nothing;
+    force_gpu_usage::Bool=false) -> AbstractLuxDevice()

Selects GPU device based on the following criteria:

  1. If gpu_backend preference is set and the backend is functional on the system, then that device is selected.

  2. Otherwise, an automatic selection algorithm is used. We go over possible device backends in the order specified by supported_gpu_backends() and select the first functional backend.

  3. If no GPU device is functional and force_gpu_usage is false, then cpu_device() is invoked.

  4. If nothing works, an error is thrown.

Arguments

  • device_id::Union{Nothing, Int}: The device id to select. If nothing, then we return the last selected device or if none was selected then we run the autoselection and choose the current device using CUDA.device() or AMDGPU.device() or similar. If Int, then we select the device with the given id. Note that this is 1-indexed, in contrast to the 0-indexed CUDA.jl. For example, id = 4 corresponds to CUDA.device!(3).

Warning

device_id is only applicable for CUDA and AMDGPU backends. For Metal and CPU backends, device_id is ignored and a warning is printed.

Keyword Arguments

  • force_gpu_usage::Bool: If true, then an error is thrown if no functional GPU device is found.

source


Miscellaneous

# LuxDeviceUtils.reset_gpu_device!Function.
julia
reset_gpu_device!()

Resets the selected GPU device. This is useful when automatic GPU selection needs to be run again.

source


# LuxDeviceUtils.supported_gpu_backendsFunction.
julia
supported_gpu_backends() -> Tuple{String, ...}

Return a tuple of supported GPU backends.

Warning

This is not the list of functional backends on the system, but rather backends which Lux.jl supports.

Danger

Metal.jl support is extremely experimental and most things are not expected to work.

source


# LuxDeviceUtils.default_device_rngFunction.
julia
default_device_rng(::AbstractLuxDevice)

Returns the default RNG for the device. This can be used to directly generate parameters and states on the device using WeightInitializers.jl.

source


# LuxDeviceUtils.get_deviceFunction.
julia
get_device(x::AbstractArray) -> AbstractLuxDevice

Returns the device of the array x. Trigger Packages must be loaded for this to return the correct device.

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Building_Blocks/LuxCore.html b/v0.5.30/api/Building_Blocks/LuxCore.html new file mode 100644 index 000000000..10583ddb1 --- /dev/null +++ b/v0.5.30/api/Building_Blocks/LuxCore.html @@ -0,0 +1,25 @@ + + + + + + LuxCore | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxCore

LuxCore.jl defines the abstract layers for Lux. Allows users to be compatible with the entirely of Lux.jl without having such a heavy dependency. If you are depending on Lux.jl directly, you do not need to depend on LuxCore.jl (all the functionality is exported via Lux.jl).

Index

Abstract Types

# LuxCore.AbstractExplicitLayerType.
julia
abstract type AbstractExplicitLayer

Abstract Type for all Lux Layers

Users implementing their custom layer, must implement

  • initialparameters(rng::AbstractRNG, layer::CustomAbstractExplicitLayer) – This returns a NamedTuple containing the trainable parameters for the layer.

  • initialstates(rng::AbstractRNG, layer::CustomAbstractExplicitLayer) – This returns a NamedTuple containing the current state for the layer. For most layers this is typically empty. Layers that would potentially contain this include BatchNorm, LSTM, GRU etc.

Optionally:

  • parameterlength(layer::CustomAbstractExplicitLayer) – These can be automatically calculated, but it is recommended that the user defines these.

  • statelength(layer::CustomAbstractExplicitLayer) – These can be automatically calculated, but it is recommended that the user defines these.

See also AbstractExplicitContainerLayer

source


# LuxCore.AbstractExplicitContainerLayerType.
julia
abstract type AbstractExplicitContainerLayer{layers} <: AbstractExplicitLayer

Abstract Container Type for certain Lux Layers. layers is a tuple containing fieldnames for the layer, and constructs the parameters and states using those.

Users implementing their custom layer can extend the same functions as in AbstractExplicitLayer.

Tip

Advanced structure manipulation of these layers post construction is possible via Functors.fmap. For a more flexible interface, we recommend using Lux.Experimental.@layer_map.

source


General

# LuxCore.applyFunction.
julia
apply(model, x, ps, st)

In most cases this function simply calls model(x, ps, st). However, it is still recommended to call apply instead of model(x, ps, st) directly. Some of the reasons for this include:

  1. For certain types of inputs x, we might want to perform preprocessing before calling model. For eg, if x is an Array of ReverseDiff.TrackedReals this can cause significant regressions in model(x, ps, st) (since it won't hit any of the BLAS dispatches). In those cases, we would automatically convert x to a ReverseDiff.TrackedArray.

  2. Certain user defined inputs need to be applied to specific layers but we want the datatype of propagate through all the layers (even unsupported ones). In these cases, we can unpack the input in apply and pass it to the appropriate layer and then repack it before returning. See the Lux manual on Custom Input Types for a motivating example.

source


# LuxCore.stateless_applyFunction.
julia
stateless_apply(model, x, ps)

Calls apply and only returns the first argument. This function requires that model has an empty state of NamedTuple(). Behavior of other kinds of models are undefined and it is the responsibility of the user to ensure that the model has an empty state.

source


# LuxCore.check_fmap_conditionFunction.
julia
check_fmap_condition(cond, tmatch, x) -> Bool

fmaps into the structure x and see if cond is statisfied for any of the leaf elements.

Arguments

  • cond - A function that takes a single argument and returns a Bool.

  • tmatch - A shortcut to check if x is of type tmatch. Can be disabled by passing nothing.

  • x - The structure to check.

Returns

A Boolean Value

source


# LuxCore.contains_lux_layerFunction.
julia
contains_lux_layer(l) -> Bool

Check if the structure l is a Lux AbstractExplicitLayer or a container of such a layer.

source


# LuxCore.display_nameFunction.
julia
display_name(layer::AbstractExplicitLayer)

Printed Name of the layer. If the layer has a field name that is used, else the type name is used.

source


# LuxCore.replicateFunction.
julia
replicate(rng::AbstractRNG)

Creates a copy of the rng state depending on its type.

source


# LuxCore.setupFunction.
julia
setup(rng::AbstractRNG, layer)

Shorthand for getting the parameters and states of the layer l. Is equivalent to (initialparameters(rng, l), initialstates(rng, l)).

Warning

This function is not pure, it mutates rng.

source


Parameters

# LuxCore.initialparametersFunction.
julia
initialparameters(rng::AbstractRNG, layer)

Generate the initial parameters of the layer l.

source


# LuxCore.parameterlengthFunction.
julia
parameterlength(layer)

Return the total number of parameters of the layer l.

source


States

# LuxCore.initialstatesFunction.
julia
initialstates(rng::AbstractRNG, layer)

Generate the initial states of the layer l.

source


# LuxCore.statelengthFunction.
julia
statelength(layer)

Return the total number of states of the layer l.

source


# LuxCore.testmodeFunction.
julia
testmode(st::NamedTuple)

Make all occurances of training in state stVal(false).

source


# LuxCore.trainmodeFunction.
julia
trainmode(st::NamedTuple)

Make all occurances of training in state stVal(true).

source


# LuxCore.update_stateFunction.
julia
update_state(st::NamedTuple, key::Symbol, value;
+    layer_check=_default_layer_check(key))

Recursively update all occurances of the key in the state st with the value.

source


Layer size

Warning

These specifications have been added very recently and most layers currently do not implement them.

# LuxCore.inputsizeFunction.
julia
inputsize(layer)

Return the input size of the layer.

source


# LuxCore.outputsizeFunction.
julia
outputsize(layer, x, rng)

Return the output size of the layer. If outputsize(layer) is defined, that method takes precedence, else we compute the layer output to determine the final size.

The fallback implementation of this function assumes the inputs were batched, i.e., if any of the outputs are Arrays, with ndims(A) > 1, it will return size(A)[1:(end - 1)]. If this behavior is undesirable, provide a custom outputsize(layer, x, rng) implementation).

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Building_Blocks/LuxLib.html b/v0.5.30/api/Building_Blocks/LuxLib.html new file mode 100644 index 000000000..58d3b5a00 --- /dev/null +++ b/v0.5.30/api/Building_Blocks/LuxLib.html @@ -0,0 +1,27 @@ + + + + + + LuxLib | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxLib

Backend for Lux.jl

Index

Dropout

# LuxLib.alpha_dropoutFunction.
julia
alpha_dropout(rng::AbstractRNG, x, p, ::Val{training})
+alpha_dropout(rng::AbstractRNG, x, p, ::Val{training}, α, A, B)

Alpha Dropout: Dropout ensuring that the mean and variance of the output remains same as the input. For details see [1]. Use the second call signature to avoid recomputing the constants for a fixed dropout probability.

Arguments

  • rng: Random number generator

  • x: Input Array

  • p: Probability of an element to be dropped out

  • Val(training): If true then dropout is applied on x with probability p. Else, x is returned

  • α: -1.7580993408473766. Computed at limit x tends to infinity, selu(x) = -λβ = α

  • A: Scaling factor for the mean

  • B: Scaling factor for the variance

Returns

  • Output Array after applying alpha dropout

  • Updated state for the random number generator

References

[1] Klambauer, Günter, et al. "Self-normalizing neural networks." Advances in neural information processing systems 30 (2017).

source


# LuxLib.dropoutFunction.
julia
dropout(rng::AbstractRNG, x, p, ::Val{training}, invp; dims)
+dropout(rng::AbstractRNG, x, mask, p, ::Val{training}, ::Val{update_mask}, invp;
+        dims)

Dropout: Simple Way to prevent Neural Networks for Overfitting. For details see [1].

Arguments

  • rng: Random number generator

  • x: Input Array

  • mask: Dropout Mask. If not used then it is constructed automatically

  • p: Probability of an element to be dropped out

  • Val(training): If true then dropout is applied on x with probability p along dims. Else, x is returned

  • Val(update_mask): If true then the mask is generated and used. Else, the mask provided is directly used

  • invp: Inverse of the probability

Keyword Arguments

  • dims: Dimensions along which dropout is applied

  • invp: Inverse of the probability (1p)

Returns

  • Output Array after applying dropout

  • Dropout Mask (if training == false, the returned value is meaningless)

  • Updated state for the random number generator

References

[1] Srivastava, Nitish, et al. "Dropout: a simple way to prevent neural networks from overfitting." The journal of machine learning research 15.1 (2014): 1929-1958.

source


Normalization

# LuxLib.batchnormFunction.
julia
batchnorm(x, scale, bias, running_mean, running_var; momentum, epsilon, training)

Batch Normalization. For details see [1].

Batch Normalization computes the mean and variance for each D1×...×DN2×1×DN input slice and normalises the input accordingly.

Arguments

  • x: Input to be Normalized

  • scale: Scale factor (γ) (can be nothing)

  • bias: Bias factor (β) (can be nothing)

  • running_mean: Running mean (can be nothing)

  • running_var: Running variance (can be nothing)

Keyword Arguments

  • momentum: Momentum for updating running mean and variance

  • epsilon: Value added to the denominator for numerical stability

  • training: Set to Val(true) if running in training mode

Returns

Normalized Array of same size as x. And a Named Tuple containing the updated running mean and variance.

Performance Considerations

If the input array is 2D, 4D, or 5D CuArray with element types Float16, Float32 and Float64, then the CUDNN code path will be used. In all other cases, a broadcasting fallback is used which is not highly optimized.

References

[1] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." International conference on machine learning. PMLR, 2015.

source


# LuxLib.groupnormFunction.
julia
groupnorm(x, scale, bias; groups, epsilon)

Group Normalization. For details see [1].

This op is similar to batch normalization, but statistics are shared across equally-sized groups of channels and not shared across batch dimension. Thus, group normalization does not depend on the batch composition and does not require maintaining internal state for storing statistics.

Arguments

  • x: Input to be Normalized

  • scale: Scale factor (γ) (can be nothing)

  • bias: Bias factor (β) (can be nothing)

Keyword Arguments

  • groups: Number of groups

  • epsilon: Value added to the denominator for numerical stability

Returns

The normalized array is returned.

Performance Considerations

The most common case of this Op – x is a 4D array – is optimized using KernelAbstractions and has a fast custom backwards pass implemented. All other cases have a fallback implementation which is not especially optimized.

We have tested the code path for Float16 and it works, but gradient accumulation is extremely fragile. Hence, for Float16 inputs, it uses the fallback implementation.

If the batch size is small (< 16), then the fallback implementation will be faster than the KA version. However, this customization is not possible using the direct groupnorm interface.

References

[1] Wu, Yuxin, and Kaiming He. "Group normalization." Proceedings of the European conference on computer vision (ECCV). 2018.

source


# LuxLib.instancenormFunction.
julia
instancenorm(x, scale, bias; epsilon, training)

Instance Normalization. For details see [1].

Instance Normalization computes the mean and variance for each D1×...×DN2×1×1 input slice and normalises the input accordingly.

Arguments

  • x: Input to be Normalized (must be atleast 3D)

  • scale: Scale factor (γ) (can be nothing)

  • bias: Bias factor (β) (can be nothing)

Keyword Arguments

  • epsilon: Value added to the denominator for numerical stability

  • training: Set to Val(true) if running in training mode

Returns

Normalized Array of same size as x. And a Named Tuple containing the updated running mean and variance.

References

[1] Ulyanov, Dmitry, Andrea Vedaldi, and Victor Lempitsky. "Instance normalization: The missing ingredient for fast stylization." arXiv preprint arXiv:1607.08022 (2016).

source


# LuxLib.layernormFunction.
julia
layernorm(x, scale, bias; dims, epsilon)

Layer Normalization. For details see [1].

Given an input array x, this layer computes

y=xE[x]Var[x]+ϵγ+β

Arguments

  • x: Input to be Normalized

  • scale: Scale factor (γ) (can be nothing)

  • bias: Bias factor (β) (can be nothing)

Keyword Arguments

  • dims: Dimensions along which the mean and std of x is computed

  • epsilon: Value added to the denominator for numerical stability

Returns

Normalized Array of same size as x.

References

[1] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. "Layer normalization." arXiv preprint arXiv:1607.06450 (2016).

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Building_Blocks/WeightInitializers.html b/v0.5.30/api/Building_Blocks/WeightInitializers.html new file mode 100644 index 000000000..860671083 --- /dev/null +++ b/v0.5.30/api/Building_Blocks/WeightInitializers.html @@ -0,0 +1,78 @@ + + + + + + WeightInitializers | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

WeightInitializers

This package is a light dependency providing common weight initialization schemes for deep learning models.

Index

API Reference

Main Functions

# WeightInitializers.glorot_normalFunction.
julia
glorot_normal([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain = 1) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers drawn from a normal distribution with standard deviation gain * sqrt(2 / (fan_in + fan_out)). This method is described in [1] and also known as Xavier initialization.

References

[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010.

source


# WeightInitializers.glorot_uniformFunction.
julia
glorot_uniform([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain = 1) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers drawn from a uniform distribution on the interval [x,x], where x = gain * sqrt(6 / (fan_in + fan_out)). This method is described in [1] and also known as Xavier initialization.

References

[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010.

source


# WeightInitializers.identity_initFunction.
julia
identity_init([::AbstractRNG=_default_rng()], [T=Float32], size...; gain::Number=1,
+    shift::Union{Integer, Tuple{Integer, Integer}}=0) -> AbstractArray{T}

Constructs an array that aims to provide an identity mapping when used as parameters in most layers of a neural network. The identity mapping is scaled by the gain parameter.

Behavior

  • 1D: Returns a Vector of zeros (useful for biases in layers where input_size == output_size).

  • 2D: Returns an identity matrix (useful for fully connected layers with equal input and output sizes).

  • More than 2D: Returns a tensor where the central slice along the last two dimensions is an identity matrix, and the rest are zeros (useful for convolutional layers, simulating an identity convolution).

Caveats

  • Not all layers will result in an identity mapping when using this initializer. Exceptions include recurrent and normalization layers.

  • Layers must have input_size == output_size for a perfect identity mapping. In cases where this condition is not met, the function pads extra dimensions with zeros.

  • For convolutional layers to achieve an identity mapping, kernel sizes must be odd, and appropriate padding must be applied to ensure the output feature maps are the same size as the input feature maps.

Arguments

  • rng::AbstractRNG: An optional random number generator, included for consistency with other initializers but ignored since the output is deterministic.

  • T::Type{<:Number}: The numeric type of the array elements.

  • size...: The dimensions of the array to be initialized.

  • gain::Number=1: A scaling factor applied to the identity mapping.

  • shift::Union{Integer, Tuple{Integer, Integer}}=0: An integer or a tuple specifying the circular shift applied to the output array.

Returns

  • AbstractArray{T}: An array initialized to represent an identity mapping, scaled by gain and optionally shifted by shift.

Examples

julia
using Random
+
+# Identity matrix for fully connected layer
+identity_matrix = identity_init(MersenneTwister(123), Float32, 5, 5)
+
+# Identity tensor for convolutional layer
+identity_tensor = identity_init(MersenneTwister(123),
+    Float32,        # Bias initialization
+    3,
+    3,
+    5,        # Matrix multiplication
+    5;
+    gain=1.5,
+    shift=(1, 0))

source


# WeightInitializers.kaiming_normalFunction.
julia
kaiming_normal([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain =T(2)) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers taken from a normal distribution standard deviation gain / sqrt(fan_in)

References

[1] He, Kaiming, et al. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." Proceedings of the IEEE international conference on computer vision. 2015.

source


# WeightInitializers.kaiming_uniformFunction.
julia
kaiming_uniform([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain =T(2)) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers drawn from a uniform distribution on the interval [-x, x], where x = gain * sqrt(3/fan_in).

References

[1] He, Kaiming, et al. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." Proceedings of the IEEE international conference on computer vision. 2015.

source


# WeightInitializers.sparse_initFunction.
julia
sparse_init([::AbstractRNG=_default_rng()], [T=Float32], dims::Integer...;
+    sparsity::Number, std::Number=0.01) -> AbstractArray{T}

Creates a sparsely initialized weight matrix with a specified proportion of zeroed elements, using random numbers drawn from a normal distribution for the non-zero elements. This method is introduced in [^Martens2010]. Note: The sparsity parameter controls the proportion of the matrix that will be zeroed. For example, a sparsity of 0.3 means that approximately 30% of the elements will be set to zero. The non-zero elements are distributed according to a normal distribution, scaled by the std parameter.

Arguments

  • rng::AbstractRNG: The random number generator to use.

  • T::Type{<:Number}: The numeric type of the elements in the returned array.

  • dims::Integer...: The dimensions of the weight matrix to be generated.

  • sparsity::Number: The proportion of elements to be zeroed. Must be between 0 and 1.

  • std::Number=0.01: The standard deviation of the normal distribution before applying gain.

Returns

  • AbstractArray{T}: A sparsely initialized weight matrix of dimensions dims and type T.

Examples

julia
using Random
+
+# Initialize a 5x5 sparsely initialized matrix with 30% sparsity
+rng = MersenneTwister(123)
+matrix = sparse_init(rng, Float32, 5, 5; sparsity=0.3, std=0.01)
5×5 Matrix{Float64}:
+  0.0          0.00273815    0.00592403   0.0          0.0
+  0.00459416  -0.000754831  -0.00888936  -0.0077507    0.0
+  0.0         -0.00194229    0.0          0.0         -0.00468489
+  0.0114265    0.0           0.0         -0.00734886   0.00277726
+ -0.00396679   0.0           0.00327215  -0.0071741   -0.00880897

References

[^Martens2010] Martens, J, "Deep learning via Hessian-free optimization" Proceedings of the 27th International Conference on International Conference on Machine Learning. 2010.

source


# WeightInitializers.truncated_normalFunction.
julia
truncated_normal([::AbstractRNG=_default_rng()], [T=Float32], size...; mean = 0,
+    std = 1, lo = -2, hi = 2) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size where each element is drawn from a truncated normal distribution. The numbers are distributed like filter(x -> lo ≤ x ≤ hi, mean .+ std .* randn(100)).

source


# WeightInitializers.orthogonalFunction.
julia
orthogonal([::AbstractRNG=_default_rng()], [T=Float32], dims::Integer...;
+    gain = 1)  -> AbstractArray{T, length(dims)}

Return an AbstractArray{T} of the given dimensions (dims) which is a (semi) orthogonal matrix, as described in [^Saxe14]

The function constructs an orthogonal or semi-orthogonal matrix depending on the specified dimensions. For two dimensions, it returns a matrix where dims = (rows, cols). For more than two dimensions, it computes an orthogonal matrix of size prod(dims[1:(end - 1)]) by dims[end] before reshaping it to the original dimensions.

Cannot construct a vector, i.e., length(dims) == 1 is forbidden.

Arguments

  • rng::AbstractRNG: Random number generator.

  • T::Type{<:Real}: The type of the elements in the array.

  • dims::Integer...: The dimensions of the array.

  • gain::Number: Scaling factor for the elements of the orthogonal matrix.

References

[^Saxe14] Saxe, McClelland, Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks", ICLR 2014, https://arxiv.org/abs/1312.6120

source


Commonly Used Wrappers

# WeightInitializers.zeros16Function.
julia
zeros16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones16Function.
julia
ones16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand16Function.
julia
rand16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn16Function.
julia
randn16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zeros32Function.
julia
zeros32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones32Function.
julia
ones32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand32Function.
julia
rand32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn32Function.
julia
randn32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zeros64Function.
julia
zeros64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones64Function.
julia
ones64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand64Function.
julia
rand64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn64Function.
julia
randn64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC16Function.
julia
zerosC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC16Function.
julia
onesC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC16Function.
julia
randC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC16Function.
julia
randnC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC32Function.
julia
zerosC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC32Function.
julia
onesC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC32Function.
julia
randC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC32Function.
julia
randnC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC64Function.
julia
zerosC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC64Function.
julia
onesC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC64Function.
julia
randC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC64Function.
julia
randnC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing random numbers from a standard normal distribution.

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Domain_Specific_Modeling/Boltz.html b/v0.5.30/api/Domain_Specific_Modeling/Boltz.html new file mode 100644 index 000000000..634d802cd --- /dev/null +++ b/v0.5.30/api/Domain_Specific_Modeling/Boltz.html @@ -0,0 +1,27 @@ + + + + + + Boltz | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

Boltz

Accelerate ⚡ your ML research using pre-built Deep Learning Models with Lux.

Index

Computer Vision Models

Classification Models: Native Lux Models

MODEL NAMEFUNCTIONNAMEPRETRAINEDTOP 1 ACCURACY (%)TOP 5 ACCURACY (%)
VGGvgg:vgg1167.3587.91
VGGvgg:vgg1368.4088.48
VGGvgg:vgg1670.2489.80
VGGvgg:vgg1971.0990.27
VGGvgg:vgg11_bn69.0988.94
VGGvgg:vgg13_bn69.6689.49
VGGvgg:vgg16_bn72.1191.02
VGGvgg:vgg19_bn72.9591.32
Vision Transformervision_transformer:tiny🚫
Vision Transformervision_transformer:small🚫
Vision Transformervision_transformer:base🚫
Vision Transformervision_transformer:large🚫
Vision Transformervision_transformer:huge🚫
Vision Transformervision_transformer:giant🚫
Vision Transformervision_transformer:gigantic🚫

Building Blocks

# Boltz.ClassTokensType.
julia
ClassTokens(dim; init=Lux.zeros32)

Appends class tokens to an input with embedding dimension dim for use in many vision transformer namels.

source


# Boltz.MultiHeadAttentionType.
julia
MultiHeadAttention(in_planes::Int, number_heads::Int; qkv_bias::Bool=false,
+                   attention_dropout_rate::T=0.0f0,
+                   projection_dropout_rate::T=0.0f0) where {T}

Multi-head self-attention layer

source


# Boltz.ViPosEmbeddingType.
julia
ViPosEmbedding(embedsize, npatches;
+               init = (rng, dims...) -> randn(rng, Float32, dims...))

Positional embedding layer used by many vision transformer-like namels.

source


# Boltz.transformer_encoderFunction.
julia
transformer_encoder(in_planes, depth, number_heads; mlp_ratio = 4.0f0, dropout = 0.0f0)

Transformer as used in the base ViT architecture. (reference).

Arguments

  • in_planes: number of input channels

  • depth: number of attention blocks

  • number_heads: number of attention heads

  • mlp_ratio: ratio of MLP layers to the number of input channels

  • dropout_rate: dropout rate

source


# Boltz.vggFunction.
julia
vgg(imsize; config, inchannels, batchnorm = false, nclasses, fcsize, dropout)

Create a VGG model (reference).

Arguments

  • imsize: input image width and height as a tuple

  • config: the configuration for the convolution layers

  • inchannels: number of input channels

  • batchnorm: set to true to use batch normalization after each convolution

  • nclasses: number of output classes

  • fcsize: intermediate fully connected layer size (see Metalhead._vgg_classifier_layers)

  • dropout: dropout level between fully connected layers

source


Non-Public API

# Boltz._seconddimmeanFunction.
julia
_seconddimmean(x)

Computes the mean of x along dimension 2

source


# Boltz._fast_chunkFunction.
julia
_fast_chunk(x::AbstractArray, ::Val{n}, ::Val{dim})

Type-stable and faster version of MLUtils.chunk

source


# Boltz._flatten_spatialFunction.
julia
_flatten_spatial(x::AbstractArray{T, 4})

Flattens the first 2 dimensions of x, and permutes the remaining dimensions to (2, 1, 3)

source


# Boltz._vgg_blockFunction.
julia
_vgg_block(input_filters, output_filters, depth, batchnorm)

A VGG block of convolution layers (reference).

Arguments

  • input_filters: number of input feature maps

  • output_filters: number of output feature maps

  • depth: number of convolution/convolution + batch norm layers

  • batchnorm: set to true to include batch normalization after each convolution

source


# Boltz._vgg_classifier_layersFunction.
julia
_vgg_classifier_layers(imsize, nclasses, fcsize, dropout)

Create VGG classifier (fully connected) layers (reference).

Arguments

  • imsize: tuple (width, height, channels) indicating the size after the convolution layers (see Metalhead._vgg_convolutional_layers)

  • nclasses: number of output classes

  • fcsize: input and output size of the intermediate fully connected layer

  • dropout: the dropout level between each fully connected layer

source


# Boltz._vgg_convolutional_layersFunction.
julia
_vgg_convolutional_layers(config, batchnorm, inchannels)

Create VGG convolution layers (reference).

Arguments

  • config: vector of tuples (output_channels, num_convolutions) for each block (see Metalhead._vgg_block)

  • batchnorm: set to true to include batch normalization after each convolution

  • inchannels: number of input channels

source


Classification Models: Imported from Metalhead.jl

Tip

You need to load Flux and Metalhead before using these models.

MODEL NAMEFUNCTIONNAMEPRETRAINEDTOP 1 ACCURACY (%)TOP 5 ACCURACY (%)
AlexNetalexnet:alexnet54.4877.72
ResNetresnet:resnet18🚫68.0888.44
ResNetresnet:resnet34🚫72.1390.91
ResNetresnet:resnet50🚫74.5592.36
ResNetresnet:resnet101🚫74.8192.36
ResNetresnet:resnet152🚫77.6393.84
ConvMixerconvmixer:small🚫
ConvMixerconvmixer:base🚫
ConvMixerconvmixer:large🚫
DenseNetdensenet:densenet121🚫
DenseNetdensenet:densenet161🚫
DenseNetdensenet:densenet169🚫
DenseNetdensenet:densenet201🚫
GoogleNetgooglenet:googlenet🚫
MobileNetmobilenet:mobilenet_v1🚫
MobileNetmobilenet:mobilenet_v2🚫
MobileNetmobilenet:mobilenet_v3_small🚫
MobileNetmobilenet:mobilenet_v3_large🚫
ResNeXTresnext:resnext50🚫
ResNeXTresnext:resnext101🚫
ResNeXTresnext:resnext152🚫

These models can be created using <FUNCTION>(<NAME>; pretrained = <PRETRAINED>)

Preprocessing

All the pretrained models require that the images be normalized with the parameters mean = [0.485f0, 0.456f0, 0.406f0] and std = [0.229f0, 0.224f0, 0.225f0].

+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Lux/contrib.html b/v0.5.30/api/Lux/contrib.html new file mode 100644 index 000000000..50713cd85 --- /dev/null +++ b/v0.5.30/api/Lux/contrib.html @@ -0,0 +1,125 @@ + + + + + + Experimental Features | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

Experimental Features

All features listed on this page are experimental which means:

  1. No SemVer Guarantees. We use code here to iterate fast and most users should wait for these features to be marked non-experimental.

  2. Expect edge-cases and report them. It will help us move these features out of experimental sooner.

  3. None of the features are exported.

Warning

Starting v"0.5.2" all Experimental features need to be accessed via Lux.Experimental.<feature>. Direct access via Lux.<feature> will be removed in v"0.6".

Index

Training

Helper Functions making it easier to train Lux.jl models.

Lux.Training is meant to be simple and provide extremely basic functionality. We provide basic building blocks which can be seamlessly composed to create complex training pipelines.

# Lux.Experimental.TrainStateType.
julia
TrainState

Training State containing:

  • model: Lux model.

  • parameters: Trainable Variables of the model.

  • states: Non-trainable Variables of the model.

  • optimizer_state: Optimizer State.

  • step: Number of updates of the parameters made.

source


# Lux.Experimental.compute_gradientsFunction.
julia
compute_gradients(ad::ADTypes.AbstractADType, objective_function::Function, data,
+    ts::TrainState)

Compute the gradients of the objective function wrt parameters stored in ts.

Arguments

  • ad: Backend (from ADTypes.jl) used to compute the gradients.

  • objective_function: Objective function. The function must take 4 inputs – model, parameters, states and data. The function must return 3 values – loss, updated_state, and any computed statistics.

  • data: Data used to compute the gradients.

  • ts: Current Training State. See TrainState.

Return

A 4-Tuple containing:

  • grads: Computed Gradients.

  • loss: Loss from the objective function.

  • stats: Any computed statistics from the objective function.

  • ts: Updated Training State.

source


# Lux.Experimental.apply_gradientsFunction.
julia
apply_gradients(ts::TrainState, grads)

Update the parameters stored in ts using the gradients grads.

Arguments

  • ts: TrainState object.

  • grads: Gradients of the loss function wrt ts.params.

Returns

Updated TrainState object.

source


Parameter Freezing

Info

In the long term, this will be supported via Optimisers.jl.

# Lux.Experimental.FrozenLayerType.
julia
FrozenLayer(l::AbstractExplicitLayer, which_params::Union{Tuple, Nothing})

Freeze the parameters with name which_params of the layer l.

Tip

It is always recommended to use the Lux.Experimental.freeze function instead of directly using the FrozenLayer constructor.

Warning

There are no checks for which_params. For example, if the original layer has parameters named (:weight, :bias), and which_paramsis set to(:myweight,) then none of the parameters are frozen and no error is thrown.

Arguments

  • l: Lux AbstractExplicitLayer.

  • which_params: Parameter Names to be Frozen. Can be set to nothing, in which case all parameters are frozen.

Input

  • x: Input to the layer l.

Returns

  • Output of the inner layer l

  • Updated State

Parameters

  • Parameters of the layer l excluding which_params.

States

  • frozen_params: Parameters that are frozen, i.e., which_params.

  • states: The state of the inner layer l.

Note on Internal Layer Implementation

The inner layer should work with NamedTuple parameters. In order to support custom parameter types, users need to implement Lux._merge(::CustomParamType, ::NamedTuple).

Example

julia
m = Lux.Experimental.FrozenLayer(Dense(2 => 2), (:weight,))

See also Lux.Experimental.freeze, Lux.Experimental.unfreeze.

source


# Lux.Experimental.freezeFunction.
julia
freeze(l::AbstractExplicitLayer, which_params::Union{Tuple, Nothing} = nothing)

Constructs a version of l with which_params frozen. If which_params is nothing, then all parameters are frozen.

source

julia
freeze(l::AbstractExplicitLayer, ps, st::NamedTuple,
+       which_params::Union{Tuple, Nothing} = nothing)

Construct a Lux.Experimental.FrozenLayer for l with the current parameters and states. If which_params is nothing, then all parameters are frozen.

source


# Lux.Experimental.unfreezeFunction.
julia
unfreeze(l::FrozenLayer)

Unfreezes the layer l.

source

julia
unfreeze(l::FrozenLayer, ps, st::NamedTuple)

Unwraps a Lux.Experimental.FrozenLayer l with the current parameters and states.

source


For detailed usage example look at the manual page.

Map over Layer

# Lux.Experimental.layer_mapFunction.
julia
layer_map(f::Function, l::AbstractExplicitLayer, ps, st::NamedTuple,
+          name::String="model")

Map the function f over the model l, with the parameters ps and states st. This is different from Functors.fmap since it zips the layers, parameters, and states and invokes the function on all of them together.

Call Signature for f

  • Must take 4 inputs – AbstractExplicitLayer, Corresponding Parameters, Corresponding States, and the name of the layer.

  • Must return a tuple of 3 elements – AbstractExplicitLayer, new parameters and the new states.

Tip

We recommend using the macro Lux.@layer_map instead of this function. It automatically sets the name of the layer to be the variable name.

Example

julia
using Lux, Random, Setfield
+
+c = Parallel(+; chain=Chain(; dense_1=Dense(2 => 3), bn=BatchNorm(3),
+                              dense_2=Dense(3 => 5)),
+             dense_3=Dense(5 => 1))
+
+rng = Random.default_rng()
+ps, st = Lux.setup(rng, c)
+
+# Makes parameters of Dense Layers inside Chain zero
+function zero_dense_params(l, ps, st, name)
+    if l isa Dense
+        println("zeroing params of $name")
+        @set! ps.weight = zero.(ps.weight)
+        @set! ps.bias = zero.(ps.bias)
+    end
+    return l, ps, st
+end
+
+Lux.layer_map(zero_dense_params, c, ps, st)

source


# Lux.Experimental.@layer_mapMacro.
julia
@layer_map func layer ps st

See the documentation of Lux.Experimental.layer_map for more details. This macro eliminates the need to the set the layer name, and uses the variable name as the starting point.

Example

julia
using Lux, Random, Setfield
+
+c = Parallel(+; chain=Chain(; dense_1=Dense(2 => 3), bn=BatchNorm(3),
+                              dense_2=Dense(3 => 5)),
+             dense_3=Dense(5 => 1))
+
+rng = Random.default_rng()
+ps, st = Lux.setup(rng, c)
+
+# Makes parameters of Dense Layers inside Chain zero
+function zero_dense_params(l, ps, st, name)
+    if l isa Dense
+        println("zeroing params of $name")
+        @set! ps.weight = zero.(ps.weight)
+        @set! ps.bias = zero.(ps.bias)
+    end
+    return l, ps, st
+end
+
+Lux.@layer_map zero_dense_params c ps st

source


Debugging Functionality

Model not working properly! Here are some functionalities to help you debug you Lux model.

# Lux.Experimental.@debug_modeMacro.
julia
@debug_mode layer kwargs...

Recurses into the layer and replaces the inner most non Container Layers with a Lux.Experimental.DebugLayer.

See Lux.Experimental.DebugLayer for details about the Keyword Arguments.

source


# Lux.Experimental.DebugLayerType.
julia
DebugLayer(layer::AbstractExplicitLayer; nan_check::Symbol=:both,
+    error_check::Bool=true, location::String="")

Danger

This layer is only meant to be used for debugging. If used for actual training or inference, will lead to extremely bad performance.

A wrapper over Lux layers that adds checks for NaNs and errors. This is useful for debugging.

Arguments

  • layer: The layer to be wrapped.

Keyword Arguments

  • nan_check: Whether to check for NaNs in the input, parameters, and states. Can be :both, :forward, :backward, or :none.

  • error_check: Whether to check for errors in the layer. If true, will throw an error if the layer fails.

  • location: The location of the layer. Use Lux.Experimental.@debug_mode to construct this layer to populate this value correctly.

Inputs

  • x: The input to the layer.

Outputs

  • y: The output of the layer.

  • st: The updated states of the layer.

If nan_check is enabled and NaNs are detected then a DomainError is thrown. If error_check is enabled, then any errors in the layer are thrown with useful information to track where the error originates.

Warning

nan_check for the backward mode only works with ChainRules Compatible Reverse Mode AD Tools currently.

See Lux.Experimental.@debug_mode to construct this layer.

source


Tied Parameters

# Lux.Experimental.share_parametersFunction.
julia
share_parameters(ps, sharing)
+share_parameters(ps, sharing, new_parameters)

Updates the parameters in ps with a common set of parameters new_parameters that are shared between each list in the nested list sharing. (That was kind of a mouthful, the example should make it clear).

Arguments

  • ps: Original parameters.

  • sharing: A nested list of lists of accessors of ps which need to shate the parameters (See the example for details). (Each list in the list must be disjoint)

  • new_parameters: If passed the length of new_parameters must be equal to the length of sharing. For each vector in sharing the corresponding parameter in new_parameters will be used. (If not passed, the parameters corresponding to the first element of each vector in sharing will be used).

Returns

Updated Parameters having the same structure as ps.

Example

julia
model = Chain(; d1=Dense(2 => 4, tanh),
+    d3=Chain(; l1=Dense(4 => 2), l2=Dense(2 => 4)), d2=Dense(4 => 2))
+
+ps, st = Lux.setup(Xoshiro(0), model)
+
+# share parameters of (d1 and d3.l1) and (d3.l2 and d2)
+ps = Lux.share_parameters(ps, (("d3.l2", "d1"), ("d2", "d3.l1")))

source


Compact Layer API

# Lux.Experimental.@compactMacro.
julia
@compact(kw...) do x
+    ...
+end
+@compact(forward::Function; name=nothing, dispatch=nothing, parameters...)

Creates a layer by specifying some parameters, in the form of keywords, and (usually as a do block) a function for the forward pass. You may think of @compact as a specialized let block creating local variables that are trainable in Lux. Declared variable names may be used within the body of the forward function. Note that unlike typical Lux models, the forward function doesn't need to explicitly manage states.

Reserved Kwargs:

  1. name: The name of the layer.

  2. dispatch: The constructed layer has the type Lux.Experimental.CompactLuxLayer{dispatch} which can be used for custom dispatches.

Examples

Here is a linear model:

julia
using Lux, Random
+import Lux.Experimental: @compact
+
+r = @compact(w=rand(3)) do x
+    return w .* x
+end
+ps, st = Lux.setup(Xoshiro(0), r)
+r([1, 1, 1], ps, st)  # x is set to [1, 1, 1].

Here is a linear model with bias and activation:

julia
d_in = 5
+d_out = 7
+d = @compact(W=randn(d_out, d_in), b=zeros(d_out), act=relu) do x
+    y = W * x
+    return act.(y .+ b)
+end
+ps, st = Lux.setup(Xoshiro(0), d)
+d(ones(5, 10), ps, st) # 7×10 Matrix as output.
+
+ps_dense = (; weight=ps.W, bias=ps.b)
+first(d([1, 2, 3, 4, 5], ps, st)) 
+first(Dense(d_in => d_out, relu)([1, 2, 3, 4, 5], ps_dense, NamedTuple())) # Equivalent to a dense layer

Finally, here is a simple MLP:

julia
n_in = 1
+n_out = 1
+nlayers = 3
+
+model = @compact(w1=Dense(n_in, 128),
+    w2=[Dense(128, 128) for i in 1:nlayers], w3=Dense(128, n_out), act=relu) do x
+    embed = act(w1(x))
+    for w in w2
+        embed = act(w(embed))
+    end
+    out = w3(embed)
+    return out
+end
+
+ps, st = Lux.setup(Xoshiro(0), model)
+
+model(randn(n_in, 32), ps, st)  # 1×32 Matrix as output.

We can train this model just like any Lux model:

julia
using Optimisers, Zygote
+
+x_data = collect(-2.0f0:0.1f0:2.0f0)'
+y_data = 2 .* x_data .- x_data .^ 3
+optim = Optimisers.setup(Adam(), ps)
+
+for epoch in 1:1000
+    loss, gs = Zygote.withgradient(
+        ps -> sum(abs2, first(model(x_data, ps, st)) .- y_data), ps)
+    @show epoch, loss
+    Optimisers.update!(optim, ps, gs[1])
+end

You may also specify a name for the model, which will be used instead of the default printout, which gives a verbatim representation of the code used to construct the model:

julia
model = @compact(w=rand(3), name="Linear(3 => 1)") do x
+    return sum(w .* x)
+end
+
+println(model)  # "Linear(3 => 1)()"

This can be useful when using @compact to hierarchically construct complex models to be used inside a Chain.

Type Stability

If your input function f is type-stable but the generated model is not type stable, it should be treated as a bug. We will appreciate issues if you find such cases.

Parameter Count

Array Parameter don't print the number of parameters on the side. However, they do account for the total number of parameters printed at the bottom.

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Lux/layers.html b/v0.5.30/api/Lux/layers.html new file mode 100644 index 000000000..1ec8b6142 --- /dev/null +++ b/v0.5.30/api/Lux/layers.html @@ -0,0 +1,80 @@ + + + + + + Built-In Layers | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

Built-In Layers

Index

Containers

# Lux.BranchLayerType.
julia
BranchLayer(layers...)
+BranchLayer(; name=nothing, layers...)

Takes an input x and passes it through all the layers and returns a tuple of the outputs.

Arguments

  • Layers can be specified in two formats:
    • A list of N Lux layers

    • Specified as N keyword arguments.

Keyword Arguments

  • name: Name of the layer (optional)

Inputs

  • x: Will be directly passed to each of the layers

Returns

  • Tuple: (layer_1(x), layer_2(x), ..., layer_N(x)) (naming changes if using the kwargs API)

  • Updated state of the layers

Parameters

  • Parameters of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

States

  • States of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

Comparison with Parallel

This is slightly different from Parallel(nothing, layers...)

  • If the input is a tuple, Parallel will pass each element individually to each layer.

  • BranchLayer essentially assumes 1 input comes in and is branched out into N outputs.

Example

An easy way to replicate an input to an NTuple is to do

julia
l = BranchLayer(NoOpLayer(), NoOpLayer(), NoOpLayer())

source


# Lux.ChainType.
julia
Chain(layers...; name=nothing, disable_optimizations::Bool = false)
+Chain(; layers..., name=nothing, disable_optimizations::Bool = false)

Collects multiple layers / functions to be called in sequence on a given input.

Arguments

  • Layers can be specified in two formats:
    • A list of N Lux layers

    • Specified as N keyword arguments.

Keyword Arguments

  • disable_optimizations: Prevents any structural optimization

  • name: Name of the layer (optional)

Inputs

Input x is passed sequentially to each layer, and must conform to the input requirements of the internal layers.

Returns

  • Output after sequentially applying all the layers to x

  • Updated model states

Parameters

  • Parameters of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

States

  • States of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

Optimizations

Performs a few optimizations to generate reasonable architectures. Can be disabled using keyword argument disable_optimizations.

  • All sublayers are recursively optimized.

  • If a function f is passed as a layer and it doesn't take 3 inputs, it is converted to a WrappedFunction(f) which takes only one input.

  • If the layer is a Chain, it is flattened.

  • NoOpLayers are removed.

  • If there is only 1 layer (left after optimizations), then it is returned without the Chain wrapper.

  • If there are no layers (left after optimizations), a NoOpLayer is returned.

Miscellaneous Properties

  • Allows indexing. We can access the ith layer using m[i]. We can also index using ranges or arrays.

Example

julia
c = Chain(Dense(2, 3, relu), BatchNorm(3), Dense(3, 2))

source


# Lux.PairwiseFusionType.
julia
PairwiseFusion(connection, layers...; name=nothing)
+PairwiseFusion(connection; name=nothing, layers...)
x1 → layer1 → y1 ↘
+                  connection → layer2 → y2 ↘
+              x2 ↗                          connection → y3
+                                        x3 ↗

Arguments

  • connection: Takes 2 inputs and combines them

  • layers: AbstractExplicitLayers. Layers can be specified in two formats:

    • A list of N Lux layers

    • Specified as N keyword arguments.

Keyword Arguments

  • name: Name of the layer (optional)

Inputs

Layer behaves differently based on input type:

  1. If the input x is a tuple of length N + 1, then the layers must be a tuple of length N. The computation is as follows
julia
y = x[1]
+for i in 1:N
+    y = connection(x[i + 1], layers[i](y))
+end
  1. Any other kind of input
julia
y = x
+for i in 1:N
+    y = connection(x, layers[i](y))
+end

Returns

  • See Inputs section for how the return value is computed

  • Updated model state for all the contained layers

Parameters

  • Parameters of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

States

  • States of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

source


# Lux.ParallelType.
julia
Parallel(connection, layers...; name=nothing)
+Parallel(connection; name=nothing, layers...)

Create a layer which passes an input to each path in layers, before reducing the output with connection.

Arguments

  • connection: An N-argument function that is called after passing the input through each layer. If connection = nothing, we return a tuple Parallel(nothing, f, g)(x, y) = (f(x), g(y))

  • Layers can be specified in two formats:

    • A list of N Lux layers

    • Specified as N keyword arguments.

Keyword Arguments

  • name: Name of the layer (optional)

Inputs

  • x: If x is not a tuple, then return is computed as connection([l(x) for l in layers]...). Else one is passed to each layer, thus Parallel(+, f, g)(x, y) = f(x) + g(y).

Returns

  • See the Inputs section for how the output is computed

  • Updated state of the layers

Parameters

  • Parameters of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

States

  • States of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

See also SkipConnection which is Parallel with one identity.

source


# Lux.SkipConnectionType.
julia
SkipConnection(layer, connection; name=nothing)

Create a skip connection which consists of a layer or Chain of consecutive layers and a shortcut connection linking the block's input to the output through a user-supplied 2-argument callable. The first argument to the callable will be propagated through the given layer while the second is the unchanged, "skipped" input.

The simplest "ResNet"-type connection is just SkipConnection(layer, +).

Arguments

  • layer: Layer or Chain of layers to be applied to the input

  • connection:

    • A 2-argument function that takes layer(input) and the input OR

    • An AbstractExplicitLayer that takes (layer(input), input) as input

Keyword Arguments

  • name: Name of the layer (optional)

Inputs

  • x: Will be passed directly to layer

Returns

  • Output of connection(layer(input), input)

  • Updated state of layer

Parameters

  • Parameters of layer OR

  • If connection is an AbstractExplicitLayer, then NamedTuple with fields :layers and :connection

States

  • States of layer OR

  • If connection is an AbstractExplicitLayer, then NamedTuple with fields :layers and :connection

See Parallel for a more general implementation.

source


# Lux.RepeatedLayerType.
julia
RepeatedLayer(model; repeats::Val = Val(10), input_injection::Val = Val(false))

Iteratively applies model for repeats number of times. The initial input is passed into the model repeatedly if input_injection = Val(true). This layer unrolls the computation, however, semantically this is same as:

  1. input_injection = Val(false)
julia
res = x
+for i in 1:repeats
+    res, st = model(res, ps, st)
+end
  1. input_injection = Val(true)
julia
res = x
+for i in 1:repeats
+    res, st = model((res, x), ps, st)
+end

It is expected that repeats will be a reasonable number below 20, beyond that compile times for gradients might be unreasonably high.

Arguments

  • model must be an AbstractExplicitLayer

Keyword Arguments

  • repeats: Number of times to apply the model

  • input_injection: If true, then the input is passed to the model along with the output

Inputs

  • x: Input as described above

Returns

  • Output is computed by as described above

  • Updated state of the model

Parameters

  • Parameters of model

States

  • State of model

source


Convolutional Layers

# Lux.ConvType.
julia
Conv(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+     activation=identity; init_weight=glorot_uniform, init_bias=zeros32, stride=1,
+     pad=0, dilation=1, groups=1, use_bias=true)

Standard convolutional layer.

Image data should be stored in WHCN order (width, height, channels, batch). In other words, a 100 x 100 RGB image would be a 100 x 100 x 3 x 1 array, and a batch of 50 would be a 100 x 100 x 3 x 50 array. This has N = 2 spatial dimensions, and needs a kernel size like (5, 5), a 2-tuple of integers. To take convolutions along N feature dimensions, this layer expects as input an array with ndims(x) == N + 2, where size(x, N + 1) == in_chs is the number of input channels, and size(x, ndims(x)) is the number of observations in a batch.

Warning

Frameworks like Pytorch perform cross-correlation in their convolution layers

Arguments

  • k: Tuple of integers specifying the size of the convolutional kernel. Eg, for 2D convolutions length(k) == 2

  • in_chs: Number of input channels

  • out_chs: Number of input and output channels

  • activation: Activation Function

Keyword Arguments

  • init_weight: Controls the initialization of the weight parameter

  • init_bias: Controls the initialization of the bias parameter

  • stride: Should each be either single integer, or a tuple with N integers

  • dilation: Should each be either single integer, or a tuple with N integers

  • pad: Specifies the number of elements added to the borders of the data array. It can be

    • a single integer for equal padding all around,

    • a tuple of N integers, to apply the same padding at begin/end of each spatial dimension,

    • a tuple of 2*N integers, for asymmetric padding, or

    • the singleton SamePad(), to calculate padding such that size(output,d) == size(x,d) / stride (possibly rounded) for each spatial dimension.

    • Periodic padding can achieved by pre-empting the layer with a WrappedFunction(x -> NNlib.circular_pad(x, N_pad; dims=pad_dims))

  • groups: Expected to be an Int. It specifies the number of groups to divide a convolution into (set groups = in_chs for Depthwise Convolutions). in_chs and out_chs must be divisible by groups.

  • use_bias: Trainable bias can be disabled entirely by setting this to false.

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Inputs

  • x: Data satisfying ndims(x) == N + 2 && size(x, N - 1) == in_chs, i.e. size(x) = (I_N, ..., I_1, C_in, N)

Returns

  • Output of the convolution y of size (O_N, ..., O_1, C_out, N) where
Oi=Ii+pi+p(i+N)%|p|di×(ki1)si+1
  • Empty NamedTuple()

Parameters

  • weight: Convolution kernel

  • bias: Bias (present if use_bias=true)

source


# Lux.ConvTransposeType.
julia
ConvTranspose(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+              activation=identity; init_weight=glorot_uniform, init_bias=zeros32,
+              stride=1, pad=0, dilation=1, groups=1, use_bias=true)

Standard convolutional transpose layer.

Arguments

  • k: Tuple of integers specifying the size of the convolutional kernel. Eg, for 2D convolutions length(k) == 2

  • in_chs: Number of input channels

  • out_chs: Number of input and output channels

  • activation: Activation Function

Keyword Arguments

  • init_weight: Controls the initialization of the weight parameter

  • init_bias: Controls the initialization of the bias parameter

  • stride: Should each be either single integer, or a tuple with N integers

  • dilation: Should each be either single integer, or a tuple with N integers

  • pad: Specifies the number of elements added to the borders of the data array. It can be

    • a single integer for equal padding all around,

    • a tuple of N integers, to apply the same padding at begin/end of each spatial dimension,

    • a tuple of 2*N integers, for asymmetric padding, or

    • the singleton SamePad(), to calculate padding such that size(output,d) == size(x,d) * stride (possibly rounded) for each spatial dimension.

  • groups: Expected to be an Int. It specifies the number of groups to divide a convolution into (set groups = in_chs for Depthwise Convolutions). in_chs and out_chs must be divisible by groups.

  • use_bias: Trainable bias can be disabled entirely by setting this to false.

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Inputs

  • x: Data satisfying ndims(x) == N + 2 && size(x, N - 1) == in_chs, i.e. size(x) = (I_N, ..., I_1, C_in, N)

Returns

  • Output of the convolution transpose y of size (O_N, ..., O_1, C_out, N) where

  • Empty NamedTuple()

Parameters

  • weight: Convolution Transpose kernel

  • bias: Bias (present if use_bias=true)

source


# Lux.CrossCorType.
julia
CrossCor(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+         activation=identity; init_weight=glorot_uniform, init_bias=zeros32, stride=1,
+         pad=0, dilation=1, use_bias=true)

Cross Correlation layer.

Image data should be stored in WHCN order (width, height, channels, batch). In other words, a 100 x 100 RGB image would be a 100 x 100 x 3 x 1 array, and a batch of 50 would be a 100 x 100 x 3 x 50 array. This has N = 2 spatial dimensions, and needs a kernel size like (5, 5), a 2-tuple of integers. To take convolutions along N feature dimensions, this layer expects as input an array with ndims(x) == N + 2, where size(x, N + 1) == in_chs is the number of input channels, and size(x, ndims(x)) is the number of observations in a batch.

Arguments

  • k: Tuple of integers specifying the size of the convolutional kernel. Eg, for 2D convolutions length(k) == 2

  • in_chs: Number of input channels

  • out_chs: Number of input and output channels

  • activation: Activation Function

Keyword Arguments

  • init_weight: Controls the initialization of the weight parameter

  • init_bias: Controls the initialization of the bias parameter

  • stride: Should each be either single integer, or a tuple with N integers

  • dilation: Should each be either single integer, or a tuple with N integers

  • pad: Specifies the number of elements added to the borders of the data array. It can be

    • a single integer for equal padding all around,

    • a tuple of N integers, to apply the same padding at begin/end of each spatial dimension,

    • a tuple of 2*N integers, for asymmetric padding, or

    • the singleton SamePad(), to calculate padding such that size(output,d) == size(x,d) / stride (possibly rounded) for each spatial dimension.

  • use_bias: Trainable bias can be disabled entirely by setting this to false.

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Inputs

  • x: Data satisfying ndims(x) == N + 2 && size(x, N - 1) == in_chs, i.e. size(x) = (I_N, ..., I_1, C_in, N)

Returns

  • Output of the convolution y of size (O_N, ..., O_1, C_out, N) where
Oi=Ii+pi+p(i+N)%|p|di×(ki1)si+1
  • Empty NamedTuple()

Parameters

  • weight: Convolution kernel

  • bias: Bias (present if use_bias=true)

source


Dropout Layers

# Lux.AlphaDropoutType.
julia
AlphaDropout(p::Real)

AlphaDropout layer.

Arguments

  • p: Probability of Dropout
    • if p = 0 then NoOpLayer is returned.

    • if p = 1 then WrappedLayer(Base.Fix1(broadcast, zero)) is returned.

Inputs

  • x: Must be an AbstractArray

Returns

  • x with dropout mask applied if training=Val(true) else just x

  • State with updated rng

States

  • rng: Pseudo Random Number Generator

  • training: Used to check if training/inference mode

Call Lux.testmode to switch to test mode.

See also Dropout, VariationalHiddenDropout

source


# Lux.DropoutType.
julia
Dropout(p; dims=:)

Dropout layer.

Arguments

  • p: Probability of Dropout (if p = 0 then NoOpLayer is returned)

Keyword Arguments

  • To apply dropout along certain dimension(s), specify the dims keyword. e.g. Dropout(p; dims = 3) will randomly zero out entire channels on WHCN input (also called 2D dropout).

Inputs

  • x: Must be an AbstractArray

Returns

  • x with dropout mask applied if training=Val(true) else just x

  • State with updated rng

States

  • rng: Pseudo Random Number Generator

  • training: Used to check if training/inference mode

Call Lux.testmode to switch to test mode.

See also AlphaDropout, VariationalHiddenDropout

source


# Lux.VariationalHiddenDropoutType.
julia
VariationalHiddenDropout(p; dims=:)

VariationalHiddenDropout layer. The only difference from Dropout is that the mask is retained until Lux.update_state(l, :update_mask, Val(true)) is called.

Arguments

  • p: Probability of Dropout (if p = 0 then NoOpLayer is returned)

Keyword Arguments

  • To apply dropout along certain dimension(s), specify the dims keyword. e.g. VariationalHiddenDropout(p; dims = 3) will randomly zero out entire channels on WHCN input (also called 2D dropout).

Inputs

  • x: Must be an AbstractArray

Returns

  • x with dropout mask applied if training=Val(true) else just x

  • State with updated rng

States

  • rng: Pseudo Random Number Generator

  • training: Used to check if training/inference mode

  • mask: Dropout mask. Initilly set to nothing. After every run, contains the mask applied in that call

  • update_mask: Stores whether new mask needs to be generated in the current call

Call Lux.testmode to switch to test mode.

See also AlphaDropout, Dropout

source


Pooling Layers

# Lux.AdaptiveMaxPoolType.
julia
AdaptiveMaxPool(out::NTuple)

Adaptive Max Pooling layer. Calculates the necessary window size such that its output has size(y)[1:N] == out.

Arguments

  • out: Size of the first N dimensions for the output

Inputs

  • x: Expects as input an array with ndims(x) == N+2, i.e. channel and batch dimensions, after the N feature dimensions, where N = length(out).

Returns

  • Output of size (out..., C, N)

  • Empty NamedTuple()

See also MaxPool, AdaptiveMeanPool.

source


# Lux.AdaptiveMeanPoolType.
julia
AdaptiveMeanPool(out::NTuple)

Adaptive Mean Pooling layer. Calculates the necessary window size such that its output has size(y)[1:N] == out.

Arguments

  • out: Size of the first N dimensions for the output

Inputs

  • x: Expects as input an array with ndims(x) == N+2, i.e. channel and batch dimensions, after the N feature dimensions, where N = length(out).

Returns

  • Output of size (out..., C, N)

  • Empty NamedTuple()

See also MeanPool, AdaptiveMaxPool.

source


# Lux.GlobalMaxPoolType.
julia
GlobalMaxPool()

Global Max Pooling layer. Transforms (w,h,c,b)-shaped input into (1,1,c,b)-shaped output, by performing max pooling on the complete (w,h)-shaped feature maps.

Inputs

  • x: Data satisfying ndims(x) > 2, i.e. size(x) = (I_N, ..., I_1, C, N)

Returns

  • Output of the pooling y of size (1, ..., 1, C, N)

  • Empty NamedTuple()

See also MaxPool, AdaptiveMaxPool, GlobalMeanPool

source


# Lux.GlobalMeanPoolType.
julia
GlobalMeanPool()

Global Mean Pooling layer. Transforms (w,h,c,b)-shaped input into (1,1,c,b)-shaped output, by performing mean pooling on the complete (w,h)-shaped feature maps.

Inputs

  • x: Data satisfying ndims(x) > 2, i.e. size(x) = (I_N, ..., I_1, C, N)

Returns

  • Output of the pooling y of size (1, ..., 1, C, N)

  • Empty NamedTuple()

See also MeanPool, AdaptiveMeanPool, GlobalMaxPool

source


# Lux.MaxPoolType.
julia
MaxPool(window::NTuple; pad=0, stride=window)

Max pooling layer, which replaces all pixels in a block of size window with the maximum value.

Arguments

  • window: Tuple of integers specifying the size of the window. Eg, for 2D pooling length(window) == 2

Keyword Arguments

  • stride: Should each be either single integer, or a tuple with N integers

  • pad: Specifies the number of elements added to the borders of the data array. It can be

    • a single integer for equal padding all around,

    • a tuple of N integers, to apply the same padding at begin/end of each spatial dimension,

    • a tuple of 2*N integers, for asymmetric padding, or

    • the singleton SamePad(), to calculate padding such that size(output,d) == size(x,d) / stride (possibly rounded) for each spatial dimension.

Inputs

  • x: Data satisfying ndims(x) == N + 2, i.e. size(x) = (I_N, ..., I_1, C, N)

Returns

  • Output of the pooling y of size (O_N, ..., O_1, C, N) where
Oi=Ii+pi+p(i+N)%|p|di×(ki1)si+1
  • Empty NamedTuple()

See also Conv, MeanPool, GlobalMaxPool, AdaptiveMaxPool

source


# Lux.MeanPoolType.
julia
MeanPool(window::NTuple; pad=0, stride=window)

Mean pooling layer, which replaces all pixels in a block of size window with the mean value.

Arguments

  • window: Tuple of integers specifying the size of the window. Eg, for 2D pooling length(window) == 2

Keyword Arguments

  • stride: Should each be either single integer, or a tuple with N integers

  • pad: Specifies the number of elements added to the borders of the data array. It can be

    • a single integer for equal padding all around,

    • a tuple of N integers, to apply the same padding at begin/end of each spatial dimension,

    • a tuple of 2*N integers, for asymmetric padding, or

    • the singleton SamePad(), to calculate padding such that size(output,d) == size(x,d) / stride (possibly rounded) for each spatial dimension.

Inputs

  • x: Data satisfying ndims(x) == N + 2, i.e. size(x) = (I_N, ..., I_1, C, N)

Returns

  • Output of the pooling y of size (O_N, ..., O_1, C, N) where
Oi=Ii+pi+p(i+N)%|p|di×(ki1)si+1
  • Empty NamedTuple()

See also Conv, MaxPool, GlobalMeanPool, AdaptiveMeanPool

source


Recurrent Layers

# Lux.GRUCellType.
julia
GRUCell((in_dims, out_dims)::Pair{<:Int,<:Int}; use_bias=true, train_state::Bool=false,
+        init_weight::Tuple{Function,Function,Function}=(glorot_uniform, glorot_uniform,
+                                                        glorot_uniform),
+        init_bias::Tuple{Function,Function,Function}=(zeros32, zeros32, zeros32),
+        init_state::Function=zeros32)

Gated Recurrent Unit (GRU) Cell

r=σ(Wir×x+Whr×hprev+bhr)z=σ(Wiz×x+Whz×hprev+bhz)n=tanh(Win×x+bin+r(Whn×hprev+bhn))hnew=(1z)n+zhprev

Arguments

  • in_dims: Input Dimension

  • out_dims: Output (Hidden State) Dimension

  • use_bias: Set to false to deactivate bias

  • train_state: Trainable initial hidden state can be activated by setting this to true

  • init_bias: Initializer for bias. Must be a tuple containing 3 functions

  • init_weight: Initializer for weight. Must be a tuple containing 3 functions

  • init_state: Initializer for hidden state

Inputs

  • Case 1a: Only a single input x of shape (in_dims, batch_size), train_state is set to false - Creates a hidden state using init_state and proceeds to Case 2.

  • Case 1b: Only a single input x of shape (in_dims, batch_size), train_state is set to true - Repeats hidden_state from parameters to match the shape of x and proceeds to Case 2.

  • Case 2: Tuple (x, (h, )) is provided, then the output and a tuple containing the updated hidden state is returned.

Returns

  • Tuple containing

    • Output hnew of shape (out_dims, batch_size)

    • Tuple containing new hidden state hnew

  • Updated model state

Parameters

  • weight_i: Concatenated Weights to map from input space {Wir,Wiz,Win}.

  • weight_h: Concatenated Weights to map from hidden space {Whr,Whz,Whn}.

  • bias_i: Bias vector (bin; not present if use_bias=false).

  • bias_h: Concatenated Bias vector for the hidden space {bhr,bhz,bhn} (not present if use_bias=false).

  • hidden_state: Initial hidden state vector (not present if train_state=false) {bhr,bhz,bhn}.

States

  • rng: Controls the randomness (if any) in the initial state generation

source


# Lux.LSTMCellType.
julia
LSTMCell(in_dims => out_dims; use_bias::Bool=true, train_state::Bool=false,
+         train_memory::Bool=false,
+         init_weight=(glorot_uniform, glorot_uniform, glorot_uniform, glorot_uniform),
+         init_bias=(zeros32, zeros32, ones32, zeros32), init_state=zeros32,
+         init_memory=zeros32)

Long Short-Term (LSTM) Cell

i=σ(Wii×x+Whi×hprev+bi)f=σ(Wif×x+Whf×hprev+bf)g=tanh(Wig×x+Whg×hprev+bg)o=σ(Wio×x+Who×hprev+bo)cnew=fcprev+ighnew=otanh(cnew)

Arguments

  • in_dims: Input Dimension

  • out_dims: Output (Hidden State & Memory) Dimension

  • use_bias: Set to false to deactivate bias

  • train_state: Trainable initial hidden state can be activated by setting this to true

  • train_memory: Trainable initial memory can be activated by setting this to true

  • init_bias: Initializer for bias. Must be a tuple containing 4 functions

  • init_weight: Initializer for weight. Must be a tuple containing 4 functions

  • init_state: Initializer for hidden state

  • init_memory: Initializer for memory

Inputs

  • Case 1a: Only a single input x of shape (in_dims, batch_size), train_state is set to false, train_memory is set to false - Creates a hidden state using init_state, hidden memory using init_memory and proceeds to Case 2.

  • Case 1b: Only a single input x of shape (in_dims, batch_size), train_state is set to true, train_memory is set to false - Repeats hidden_state vector from the parameters to match the shape of x, creates hidden memory using init_memory and proceeds to Case 2.

  • Case 1c: Only a single input x of shape (in_dims, batch_size), train_state is set to false, train_memory is set to true - Creates a hidden state using init_state, repeats the memory vector from parameters to match the shape of x and proceeds to Case 2.

  • Case 1d: Only a single input x of shape (in_dims, batch_size), train_state is set to true, train_memory is set to true - Repeats the hidden state and memory vectors from the parameters to match the shape of x and proceeds to Case 2.

  • Case 2: Tuple (x, (h, c)) is provided, then the output and a tuple containing the updated hidden state and memory is returned.

Returns

  • Tuple Containing

    • Output hnew of shape (out_dims, batch_size)

    • Tuple containing new hidden state hnew and new memory cnew

  • Updated model state

Parameters

  • weight_i: Concatenated Weights to map from input space {Wii,Wif,Wig,Wio}.

  • weight_h: Concatenated Weights to map from hidden space {Whi,Whf,Whg,Who}

  • bias: Bias vector (not present if use_bias=false)

  • hidden_state: Initial hidden state vector (not present if train_state=false)

  • memory: Initial memory vector (not present if train_memory=false)

States

  • rng: Controls the randomness (if any) in the initial state generation

source


# Lux.RNNCellType.
julia
RNNCell(in_dims => out_dims, activation=tanh; bias::Bool=true,
+        train_state::Bool=false, init_bias=zeros32, init_weight=glorot_uniform,
+        init_state=ones32)

An Elman RNNCell cell with activation (typically set to tanh or relu).

hnew=activation(weightih×x+weighthh×hprev+bias)

Arguments

  • in_dims: Input Dimension

  • out_dims: Output (Hidden State) Dimension

  • activation: Activation function

  • bias: Set to false to deactivate bias

  • train_state: Trainable initial hidden state can be activated by setting this to true

  • init_bias: Initializer for bias

  • init_weight: Initializer for weight

  • init_state: Initializer for hidden state

Inputs

  • Case 1a: Only a single input x of shape (in_dims, batch_size), train_state is set to false - Creates a hidden state using init_state and proceeds to Case 2.

  • Case 1b: Only a single input x of shape (in_dims, batch_size), train_state is set to true - Repeats hidden_state from parameters to match the shape of x and proceeds to Case 2.

  • Case 2: Tuple (x, (h, )) is provided, then the output and a tuple containing the updated hidden state is returned.

Returns

  • Tuple containing

    • Output hnew of shape (out_dims, batch_size)

    • Tuple containing new hidden state hnew

  • Updated model state

Parameters

  • weight_ih: Maps the input to the hidden state.

  • weight_hh: Maps the hidden state to the hidden state.

  • bias: Bias vector (not present if use_bias=false)

  • hidden_state: Initial hidden state vector (not present if train_state=false)

States

  • rng: Controls the randomness (if any) in the initial state generation

source


# Lux.RecurrenceType.
julia
Recurrence(cell;
+    ordering::AbstractTimeSeriesDataBatchOrdering=BatchLastIndex(),
+    return_sequence::Bool=false)

Wraps a recurrent cell (like RNNCell, LSTMCell, GRUCell) to automatically operate over a sequence of inputs.

Warning

This is completely distinct from Flux.Recur. It doesn't make the cell stateful, rather allows operating on an entire sequence of inputs at once. See StatefulRecurrentCell for functionality similar to Flux.Recur.

Arguments

  • cell: A recurrent cell. See RNNCell, LSTMCell, GRUCell, for how the inputs/outputs of a recurrent cell must be structured.

Keyword Arguments

  • return_sequence: If true returns the entire sequence of outputs, else returns only the last output. Defaults to false.

  • ordering: The ordering of the batch and time dimensions in the input. Defaults to BatchLastIndex(). Alternatively can be set to TimeLastIndex().

Inputs

  • If x is a
    • Tuple or Vector: Each element is fed to the cell sequentially.

    • Array (except a Vector): It is spliced along the penultimate dimension and each slice is fed to the cell sequentially.

Returns

  • Output of the cell for the entire sequence.

  • Update state of the cell.

Parameters

  • Same as cell.

States

  • Same as cell.

Tip

Frameworks like Tensorflow have special implementation of MultiRNNCell to handle sequentially composed RNN Cells. In Lux, one can simple stack multiple Recurrence blocks in a Chain to achieve the same.

Chain(
+    Recurrence(RNNCell(inputsize => latentsize); return_sequence=true),
+    Recurrence(RNNCell(latentsize => latentsize); return_sequence=true),
+    :
+    x -> stack(x; dims=2)
+)

For some discussion on this topic, see https://github.com/LuxDL/Lux.jl/issues/472.

source


# Lux.StatefulRecurrentCellType.
julia
StatefulRecurrentCell(cell)

Wraps a recurrent cell (like RNNCell, LSTMCell, GRUCell) and makes it stateful.

Tip

This is very similar to Flux.Recur

To avoid undefined behavior, once the processing of a single sequence of data is complete, update the state with Lux.update_state(st, :carry, nothing).

Arguments

  • cell: A recurrent cell. See RNNCell, LSTMCell, GRUCell, for how the inputs/outputs of a recurrent cell must be structured.

Inputs

  • Input to the cell.

Returns

  • Output of the cell for the entire sequence.

  • Update state of the cell and updated carry.

Parameters

  • Same as cell.

States

  • NamedTuple containing:
    • cell: Same as cell.

    • carry: The carry state of the cell.

source


Linear Layers

# Lux.BilinearType.
julia
Bilinear((in1_dims, in2_dims) => out, activation=identity; init_weight=glorot_uniform,
+         init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)
+Bilinear(in12_dims => out, activation=identity; init_weight=glorot_uniform,
+         init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)

Create a fully connected layer between two inputs and an output, and otherwise similar to Dense. Its output, given vectors x & y, is another vector z with, for all i in 1:out:

z[i] = activation(x' * W[i, :, :] * y + bias[i])

If x and y are matrices, then each column of the output z = B(x, y) is of this form, with B the Bilinear layer.

Arguments

  • in1_dims: number of input dimensions of x

  • in2_dims: number of input dimensions of y

  • in12_dims: If specified, then in1_dims = in2_dims = in12_dims

  • out: number of output dimensions

  • activation: activation function

Keyword Arguments

  • init_weight: initializer for the weight matrix (weight = init_weight(rng, out_dims, in1_dims, in2_dims))

  • init_bias: initializer for the bias vector (ignored if use_bias=false)

  • use_bias: Trainable bias can be disabled entirely by setting this to false

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Input

  • A 2-Tuple containing

    • x must be an AbstractArray with size(x, 1) == in1_dims

    • y must be an AbstractArray with size(y, 1) == in2_dims

  • If the input is an AbstractArray, then x = y

Returns

  • AbstractArray with dimensions (out_dims, size(x, 2))

  • Empty NamedTuple()

Parameters

  • weight: Weight Matrix of size (out_dims, in1_dims, in2_dims)

  • bias: Bias of size (out_dims, 1) (present if use_bias=true)

source


# Lux.DenseType.
julia
Dense(in_dims => out_dims, activation=identity; init_weight=glorot_uniform,
+      init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)

Create a traditional fully connected layer, whose forward pass is given by: y = activation.(weight * x .+ bias)

Arguments

  • in_dims: number of input dimensions

  • out_dims: number of output dimensions

  • activation: activation function

Keyword Arguments

  • init_weight: initializer for the weight matrix (weight = init_weight(rng, out_dims, in_dims))

  • init_bias: initializer for the bias vector (ignored if use_bias=false)

  • use_bias: Trainable bias can be disabled entirely by setting this to false

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Input

  • x must be an AbstractArray with size(x, 1) == in_dims

Returns

  • AbstractArray with dimensions (out_dims, ...) where ... are the dimensions of x

  • Empty NamedTuple()

Parameters

  • weight: Weight Matrix of size (out_dims, in_dims)

  • bias: Bias of size (out_dims, 1) (present if use_bias=true)

source


# Lux.EmbeddingType.
julia
Embedding(in_dims => out_dims; init_weight=randn32)

A lookup table that stores embeddings of dimension out_dims for a vocabulary of size in_dims.

This layer is often used to store word embeddings and retrieve them using indices.

Warning

Unlike Flux.Embedding, this layer does not support using OneHotArray as an input.

Arguments

  • in_dims: number of input dimensions

  • out_dims: number of output dimensions

Keyword Arguments

  • init_weight: initializer for the weight matrix (weight = init_weight(rng, out_dims, in_dims))

Input

  • Integer OR

  • Abstract Vector of Integers OR

  • Abstract Array of Integers

Returns

  • Returns the embedding corresponding to each index in the input. For an N dimensional input, an N + 1 dimensional output is returned.

  • Empty NamedTuple()

source


# Lux.ScaleType.
julia
Scale(dims, activation=identity; init_weight=ones32, init_bias=zeros32, bias::Bool=true)

Create a Sparsely Connected Layer with a very specific structure (only Diagonal Elements are non-zero). The forward pass is given by: y = activation.(weight .* x .+ bias)

Arguments

  • dims: size of the learnable scale and bias parameters.

  • activation: activation function

Keyword Arguments

  • init_weight: initializer for the weight matrix (weight = init_weight(rng, out_dims, in_dims))

  • init_bias: initializer for the bias vector (ignored if use_bias=false)

  • use_bias: Trainable bias can be disabled entirely by setting this to false

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

Input

  • x must be an Array of size (dims..., B) or (dims...[0], ..., dims[k]) for k ≤ size(dims)

Returns

  • Array of size (dims..., B) or (dims...[0], ..., dims[k]) for k ≤ size(dims)

  • Empty NamedTuple()

Parameters

  • weight: Weight Array of size (dims...)

  • bias: Bias of size (dims...)

source


Misc. Helper Layers

# Lux.FlattenLayerType.
julia
FlattenLayer(N = nothing)

Flattens the passed array into a matrix.

Arguments

  • N: Flatten the first N dimensions of the input array. If nothing, then all dimensions (except) are flattened. Note that the batch dimension is never flattened.

Inputs

  • x: AbstractArray

Returns

  • AbstractMatrix of size (:, size(x, ndims(x)))

  • Empty NamedTuple()

source


# Lux.MaxoutType.
julia
Maxout(layers...)
+Maxout(; layers...)
+Maxout(f::Function, n_alts::Int)

This contains a number of internal layers, each of which receives the same input. Its output is the elementwise maximum of the the internal layers' outputs.

Maxout over linear dense layers satisfies the univeral approximation theorem. See [1].

See also Parallel to reduce with other operators.

Arguments

  • Layers can be specified in three formats:
    • A list of N Lux layers

    • Specified as N keyword arguments.

    • A no argument function f and an integer n_alts which specifies the number of layers.

Inputs

  • x: Input that is passed to each of the layers

Returns

  • Output is computed by taking elementwise max of the outputs of the individual layers.

  • Updated state of the layers

Parameters

  • Parameters of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

States

  • States of each layer wrapped in a NamedTuple with fields = layer_1, layer_2, ..., layer_N (naming changes if using the kwargs API)

References

[1] Goodfellow, Warde-Farley, Mirza, Courville & Bengio "Maxout Networks" https://arxiv.org/abs/1302.4389

source


# Lux.NoOpLayerType.
julia
NoOpLayer()

As the name suggests does nothing but allows pretty printing of layers. Whatever input is passed is returned.

source


# Lux.ReshapeLayerType.
julia
ReshapeLayer(dims)

Reshapes the passed array to have a size of (dims..., :)

Arguments

  • dims: The new dimensions of the array (excluding the last dimension).

Inputs

  • x: AbstractArray of any shape which can be reshaped in (dims..., size(x, ndims(x)))

Returns

  • AbstractArray of size (dims..., size(x, ndims(x)))

  • Empty NamedTuple()

source


# Lux.SelectDimType.
julia
SelectDim(dim, i)

Return a view of all the data of the input x where the index for dimension dim equals i. Equivalent to view(x,:,:,...,i,:,:,...) where i is in position d.

Arguments

  • dim: Dimension for indexing

  • i: Index for dimension dim

Inputs

  • x: AbstractArray that can be indexed with view(x,:,:,...,i,:,:,...)

Returns

  • view(x,:,:,...,i,:,:,...) where i is in position d

  • Empty NamedTuple()

source


# Lux.WrappedFunctionType.
julia
WrappedFunction(f)

Wraps a stateless and parameter less function. Might be used when a function is added to Chain. For example, Chain(x -> relu.(x)) would not work and the right thing to do would be Chain((x, ps, st) -> (relu.(x), st)). An easier thing to do would be Chain(WrappedFunction(Base.Fix1(broadcast, relu)))

Arguments

  • f::Function: A stateless and parameterless function

Inputs

  • x: s.t hasmethod(f, (typeof(x),)) is true

Returns

  • Output of f(x)

  • Empty NamedTuple()

source


Normalization Layers

# Lux.BatchNormType.
julia
BatchNorm(chs::Integer, activation=identity; init_bias=zeros32, init_scale=ones32,
+          affine=true, track_stats=true, epsilon=1f-5, momentum=0.1f0,
+          allow_fast_activation::Bool=true)

Batch Normalization layer.

BatchNorm computes the mean and variance for each D1×...×DN2×1×DN input slice and normalises the input accordingly.

Arguments

  • chs: Size of the channel dimension in your data. Given an array with N dimensions, call the N-1th the channel dimension. For a batch of feature vectors this is just the data dimension, for WHCN images it's the usual channel dimension.

  • activation: After normalization, elementwise activation activation is applied.

Keyword Arguments

  • If track_stats=true, accumulates mean and variance statistics in training phase that will be used to renormalize the input in test phase.

  • epsilon: a value added to the denominator for numerical stability

  • momentum: the value used for the running_mean and running_var computation

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

  • If affine=true, it also applies a shift and a rescale to the input through to learnable per-channel bias and scale parameters.

    • init_bias: Controls how the bias is initiliazed

    • init_scale: Controls how the scale is initiliazed

Inputs

  • x: Array where size(x, N - 1) = chs and ndims(x) > 2

Returns

  • y: Normalized Array

  • Update model state

Parameters

  • affine=true

    • bias: Bias of shape (chs,)

    • scale: Scale of shape (chs,)

  • affine=false - Empty NamedTuple()

States

  • Statistics if track_stats=true

    • running_mean: Running mean of shape (chs,)

    • running_var: Running variance of shape (chs,)

  • Statistics if track_stats=false

    • running_mean: nothing

    • running_var: nothing

  • training: Used to check if training/inference mode

Use Lux.testmode during inference.

Example

julia
m = Chain(Dense(784 => 64), BatchNorm(64, relu), Dense(64 => 10), BatchNorm(10))

Warning

Passing a batch size of 1, during training will result in NaNs.

See also BatchNorm, InstanceNorm, LayerNorm, WeightNorm

source


# Lux.GroupNormType.
julia
GroupNorm(chs::Integer, groups::Integer, activation=identity; init_bias=zeros32,
+          init_scale=ones32, affine=true, epsilon=1f-5,
+          allow_fast_activation::Bool=true)

Group Normalization layer.

Arguments

  • chs: Size of the channel dimension in your data. Given an array with N dimensions, call the N-1th the channel dimension. For a batch of feature vectors this is just the data dimension, for WHCN images it's the usual channel dimension.

  • groups is the number of groups along which the statistics are computed. The number of channels must be an integer multiple of the number of groups.

  • activation: After normalization, elementwise activation activation is applied.

Keyword Arguments

  • epsilon: a value added to the denominator for numerical stability

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

  • If affine=true, it also applies a shift and a rescale to the input through to learnable per-channel bias and scale parameters.

    • init_bias: Controls how the bias is initiliazed

    • init_scale: Controls how the scale is initiliazed

Inputs

  • x: Array where size(x, N - 1) = chs and ndims(x) > 2

Returns

  • y: Normalized Array

  • Update model state

Parameters

  • affine=true

    • bias: Bias of shape (chs,)

    • scale: Scale of shape (chs,)

  • affine=false - Empty NamedTuple()

States

  • training: Used to check if training/inference mode

Use Lux.testmode during inference.

Example

julia
m = Chain(Dense(784 => 64), GroupNorm(64, 4, relu), Dense(64 => 10), GroupNorm(10, 5))

See also GroupNorm, InstanceNorm, LayerNorm, WeightNorm

source


# Lux.InstanceNormType.
julia
InstanceNorm(chs::Integer, activation=identity; init_bias=zeros32, init_scale=ones32,
+             affine=true, epsilon=1f-5, allow_fast_activation::Bool=true)

Instance Normalization. For details see [1].

Instance Normalization computes the mean and variance for each D1×...×DN2×1×1` input slice and normalises the input accordingly.

Arguments

  • chs: Size of the channel dimension in your data. Given an array with N dimensions, call the N-1th the channel dimension. For a batch of feature vectors this is just the data dimension, for WHCN images it's the usual channel dimension.

  • activation: After normalization, elementwise activation activation is applied.

Keyword Arguments

  • epsilon: a value added to the denominator for numerical stability

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

  • If affine=true, it also applies a shift and a rescale to the input through to learnable per-channel bias and scale parameters.

    • init_bias: Controls how the bias is initiliazed

    • init_scale: Controls how the scale is initiliazed

Inputs

  • x: Array where size(x, N - 1) = chs and ndims(x) > 2

Returns

  • y: Normalized Array

  • Update model state

Parameters

  • affine=true

    • bias: Bias of shape (chs,)

    • scale: Scale of shape (chs,)

  • affine=false - Empty NamedTuple()

States

  • training: Used to check if training/inference mode

Use Lux.testmode during inference.

Example

julia
m = Chain(Dense(784 => 64), InstanceNorm(64, relu), Dense(64 => 10), InstanceNorm(10, 5))

References

[1] Ulyanov, Dmitry, Andrea Vedaldi, and Victor Lempitsky. "Instance normalization: The missing ingredient for fast stylization." arXiv preprint arXiv:1607.08022 (2016).

See also BatchNorm, GroupNorm, LayerNorm, WeightNorm

source


# Lux.LayerNormType.
julia
LayerNorm(shape::NTuple{N, Int}, activation=identity; epsilon=1f-5, dims=Colon(),
+          affine::Bool=true, init_bias=zeros32, init_scale=ones32,)

Computes mean and standard deviation over the whole input array, and uses these to normalize the whole array. Optionally applies an elementwise affine transformation afterwards.

Given an input array x, this layer computes

y=xE[x]Var[x]+ϵγ+β

where γ & β are trainable parameters if affine=true.

Warning

As of v0.5.0, the doc used to say affine::Bool=false, but the code actually had affine::Bool=true as the default. Now the doc reflects the code, so please check whether your assumptions about the default (if made) were invalid.

Arguments

  • shape: Broadcastable shape of input array excluding the batch dimension.

  • activation: After normalization, elementwise activation activation is applied.

Keyword Arguments

  • allow_fast_activation: If true, then certain activations can be approximated with a faster version. The new activation function will be given by NNlib.fast_act(activation)

  • epsilon: a value added to the denominator for numerical stability.

  • dims: Dimensions to normalize the array over.

  • If affine=true, it also applies a shift and a rescale to the input through to learnable per-channel bias and scale parameters.

    • init_bias: Controls how the bias is initiliazed

    • init_scale: Controls how the scale is initiliazed

Inputs

  • x: AbstractArray

Returns

  • y: Normalized Array

  • Empty NamedTuple()

Parameters

  • affine=false: Empty NamedTuple()

  • affine=true

    • bias: Bias of shape (shape..., 1)

    • scale: Scale of shape (shape..., 1)

source


# Lux.WeightNormType.
julia
WeightNorm(layer::AbstractExplicitLayer, which_params::NTuple{N,Symbol},
+           dims::Union{Tuple,Nothing}=nothing)

Applies weight normalization to a parameter in the given layer.

w=gvv

Weight normalization is a reparameterization that decouples the magnitude of a weight tensor from its direction. This updates the parameters in which_params (e.g. weight) using two parameters: one specifying the magnitude (e.g. weight_g) and one specifying the direction (e.g. weight_v).

Arguments

  • layer whose parameters are being reparameterized

  • which_params: parameter names for the parameters being reparameterized

  • By default, a norm over the entire array is computed. Pass dims to modify the dimension.

Inputs

  • x: Should be of valid type for input to layer

Returns

  • Output from layer

  • Updated model state of layer

Parameters

  • normalized: Parameters of layer that are being normalized

  • unnormalized: Parameters of layer that are not being normalized

States

  • Same as that of layer

source


Upsampling

# Lux.PixelShuffleFunction.
julia
PixelShuffle(r::Int)

Pixel shuffling layer with upscale factor r. Usually used for generating higher resolution images while upscaling them.

See NNlib.pixel_shuffle for more details.

PixelShuffle is not a Layer, rather it returns a WrappedFunction with the function set to Base.Fix2(pixel_shuffle, r)

Arguments

  • r: Upscale factor

Inputs

  • x: For 4D-arrays representing N images, the operation converts input size(x) == (W, H, r² x C, N) to output of size (r x W, r x H, C, N). For D-dimensional data, it expects ndims(x) == D + 2 with channel and batch dimensions, and divides the number of channels by rᴰ.

Returns

  • Output of size (r x W, r x H, C, N) for 4D-arrays, and (r x W, r x H, ..., C, N) for D-dimensional data, where D = ndims(x) - 2

source


# Lux.UpsampleType.
julia
Upsample(mode = :nearest; [scale, size]) 
+Upsample(scale, mode = :nearest)

Upsampling Layer.

Layer Construction

Option 1

  • mode: Set to :nearest, :linear, :bilinear or :trilinear

Exactly one of two keywords must be specified:

  • If scale is a number, this applies to all but the last two dimensions (channel and batch) of the input. It may also be a tuple, to control dimensions individually.

  • Alternatively, keyword size accepts a tuple, to directly specify the leading dimensions of the output.

Option 2

  • If scale is a number, this applies to all but the last two dimensions (channel and batch) of the input. It may also be a tuple, to control dimensions individually.

  • mode: Set to :nearest, :bilinear or :trilinear

Currently supported upsampling modes and corresponding NNlib's methods are:

  • :nearest -> NNlib.upsample_nearest

  • :bilinear -> NNlib.upsample_bilinear

  • :trilinear -> NNlib.upsample_trilinear

Inputs

  • x: For the input dimensions look into the documentation for the corresponding NNlib function
    • As a rule of thumb, :nearest should work with arrays of arbitrary dimensions

    • :bilinear works with 4D Arrays

    • :trilinear works with 5D Arrays

Returns

  • Upsampled Input of size size or of size (I_1 x scale[1], ..., I_N x scale[N], C, N)

  • Empty NamedTuple()

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Lux/switching_frameworks.html b/v0.5.30/api/Lux/switching_frameworks.html new file mode 100644 index 000000000..569352fa0 --- /dev/null +++ b/v0.5.30/api/Lux/switching_frameworks.html @@ -0,0 +1,48 @@ + + + + + + Switching between Deep Learning Frameworks | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

Switching between Deep Learning Frameworks

Flux Models to Lux Models

Flux.jl has been around in the Julia ecosystem for a long time and has a large userbase, hence we provide a way to convert Flux models to Lux models.

Tip

Accessing these functions require manually loading Flux, i.e., using Flux must be present somewhere in the code for these to be used.

# Adapt.adaptMethod.
julia
Adapt.adapt(from::FromFluxAdaptor, L)

Adapt a Flux model L to Lux model. See FromFluxAdaptor for more details.

source


# Lux.FromFluxAdaptorType.
julia
FromFluxAdaptor(preserve_ps_st::Bool=false, force_preserve::Bool=false)

Convert a Flux Model to Lux Model.

Warning

This always ingores the active field of some of the Flux layers. This is almost never going to be supported.

Keyword Arguments

  • preserve_ps_st: Set to true to preserve the states and parameters of the layer. This attempts the best possible way to preserve the original model. But it might fail. If you need to override possible failures, set force_preserve to true.

  • force_preserve: Some of the transformations with state and parameters preservation haven't been implemented yet, in these cases, if force_transform is false a warning will be printed and a core Lux layer will be returned. Else, it will create a FluxLayer.

Example

julia
import Flux
+using Adapt, Lux, Metalhead, Random
+
+m = ResNet(18)
+m2 = adapt(FromFluxAdaptor(), m.layers) # or FromFluxAdaptor()(m.layers)
+
+x = randn(Float32, 224, 224, 3, 1);
+
+ps, st = Lux.setup(Random.default_rng(), m2);
+
+m2(x, ps, st)

source


# Lux.FluxLayerType.
julia
FluxLayer(layer)

Serves as a compatibility layer between Flux and Lux. This uses Optimisers.destructure API internally.

Warning

Lux was written to overcome the limitations of destructure + Flux. It is recommended to rewrite your l in Lux instead of using this layer.

Warning

Introducing this Layer in your model will lead to type instabilities, given the way Optimisers.destructure works.

Arguments

  • layer: Flux layer

Parameters

  • p: Flattened parameters of the layer

source


Lux Models to Simple Chains

SimpleChains.jl provides a way to train Small Neural Networks really fast on CPUs. See this blog post for more details. This section describes how to convert Lux models to SimpleChains models while preserving the layer interface.

Tip

Accessing these functions require manually loading SimpleChains, i.e., using SimpleChains must be present somewhere in the code for these to be used.

# Adapt.adaptMethod.
julia
Adapt.adapt(from::ToSimpleChainsAdaptor, L::AbstractExplicitLayer)

Adapt a Flux model to Lux model. See ToSimpleChainsAdaptor for more details.

source


# Lux.ToSimpleChainsAdaptorType.
julia
ToSimpleChainsAdaptor()

Adaptor for converting a Lux Model to SimpleChains. The returned model is still a Lux model, and satisfies the AbstractExplicitLayer interfacem but all internal calculations are performed using SimpleChains.

Warning

There is no way to preserve trained parameters and states when converting to SimpleChains.jl.

Warning

Any kind of initialization function is not preserved when converting to SimpleChains.jl.

Arguments

  • input_dims: Tuple of input dimensions excluding the batch dimension. These must be of static type as SimpleChains expects.

Example

julia
import SimpleChains: static
+using Adapt, Lux, Random
+
+lux_model = Chain(Conv((5, 5), 1 => 6, relu), MaxPool((2, 2)),
+    Conv((5, 5), 6 => 16, relu), MaxPool((2, 2)), FlattenLayer(3),
+    Chain(Dense(256 => 128, relu), Dense(128 => 84, relu), Dense(84 => 10)))
+
+adaptor = ToSimpleChainsAdaptor((static(28), static(28), static(1)))
+
+simple_chains_model = adapt(adaptor, lux_model) # or adaptor(lux_model)
+
+ps, st = Lux.setup(Random.default_rng(), simple_chains_model)
+x = randn(Float32, 28, 28, 1, 1)
+
+simple_chains_model(x, ps, st)

source


# Lux.SimpleChainsLayerType.
julia
SimpleChainsLayer(layer)

Wraps a SimpleChains layer into a Lux layer. All operations are performed using SimpleChains but the layer satisfies the AbstractExplicitLayer interface.

Arguments

  • layer: SimpleChains layer

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Lux/utilities.html b/v0.5.30/api/Lux/utilities.html new file mode 100644 index 000000000..e1d55373f --- /dev/null +++ b/v0.5.30/api/Lux/utilities.html @@ -0,0 +1,26 @@ + + + + + + Utilities | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

Utilities

Index

Device Management / Data Transfer

# Lux.cpuFunction.
julia
cpu(x)

Transfer x to CPU.

Warning

This function has been deprecated. Use cpu_device instead.

source


# Lux.gpuFunction.
julia
gpu(x)

Transfer x to GPU determined by the backend set using Lux.gpu_backend!.

Warning

This function has been deprecated. Use gpu_device instead. Using this function inside performance critical code will cause massive slowdowns due to type inference failure.

source


Warning

For detailed API documentation on Data Transfer check out the LuxDeviceUtils.jl

Weight Initialization

Warning

For API documentation on Initialization check out the WeightInitializers.jl

Miscellaneous Utilities

# Lux.foldl_initFunction.
julia
foldl_init(op, x)
+foldl_init(op, x, init)

Exactly same as foldl(op, x; init) in the forward pass. But, gives gradients wrt init in the backward pass.

source


# Lux.istrainingFunction.
julia
istraining(::Val{training})
+istraining(st::NamedTuple)

Returns true if training is true or if st contains a training field with value true. Else returns false.

Method undefined if st.training is not of type Val.

source


# Lux.multigateFunction.
julia
multigate(x::AbstractArray, ::Val{N})

Split up x into N equally sized chunks (along dimension 1).

source


Updating Floating Point Precision

By default, Lux uses Float32 for all parameters and states. To update the precision simply pass the parameters / states / arrays into one of the following functions.

# Lux.f16Function.
julia
f16(m)

Converts the eltype of m floating point values to Float16. Recurses into structs marked with Functors.@functor.

source


# Lux.f32Function.
julia
f32(m)

Converts the eltype of m floating point values to Float32. Recurses into structs marked with Functors.@functor.

source


# Lux.f64Function.
julia
f64(m)

Converts the eltype of m floating point values to Float64. Recurses into structs marked with Functors.@functor.

source


Stateful Layer

# Lux.StatefulLuxLayerType.
julia
StatefulLuxLayer(model, ps, st; st_fixed_type = Val(true))

Warning

This is not a Lux.AbstractExplicitLayer

A convenience wrapper over Lux layers which stores the parameters and states internally. Most users should not be using this version. This comes handy when Lux internally uses the @compact to construct models and in SciML codebases where propagating state might involving Boxing.

For a motivating example, see the Neural ODE tutorial.

Arguments

  • model: A Lux layer

  • ps: The parameters of the layer. This can be set to nothing, if the user provides the parameters on function call

  • st: The state of the layer

Keyword Arguments

  • st_fixed_type: If Val(true), then the type of the state is fixed, i.e., typeof(last(model(x, ps, st))) == st. If this is not the case, then st_fixed_type must be set to Val(false). If st_fixed_type is set to Val(false), then type stability is not guaranteed.

Inputs

  • x: The input to the layer

  • ps: The parameters of the layer. Optional, defaults to s.ps

Outputs

  • y: The output of the layer

source


Truncated Stacktraces

# Lux.disable_stacktrace_truncation!Function.
julia
disable_stacktrace_truncation!(; disable::Bool=true)

An easy way to update TruncatedStacktraces.VERBOSE without having to load it manually.

Effectively does TruncatedStacktraces.VERBOSE[] = disable

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/api/Testing_Functionality/LuxTestUtils.html b/v0.5.30/api/Testing_Functionality/LuxTestUtils.html new file mode 100644 index 000000000..93ffc1484 --- /dev/null +++ b/v0.5.30/api/Testing_Functionality/LuxTestUtils.html @@ -0,0 +1,41 @@ + + + + + + LuxTestUtils | Lux.jl Documentation + + + + + + + + + + + + + +
Skip to content

LuxTestUtils

Warning

This is a testing package. Hence, we don't use features like weak dependencies to reduce load times. It is recommended that you exclusively use this package for testing and not add a dependency to it in your main package Project.toml.

Implements utilities for testing gradient correctness and dynamic dispatch of Lux.jl models.

Index

Testing using JET.jl

# LuxTestUtils.@jetMacro.
julia
@jet f(args...) call_broken=false opt_broken=false

Run JET tests on the function f with the arguments args.... If JET fails to compile or julia version is < 1.7, then the macro will be a no-op.

Keyword Arguments

  • call_broken: Marks the test_call as broken.

  • opt_broken: Marks the test_opt as broken.

All additional arguments will be forwarded to @JET.test_call and @JET.test_opt.

TIP

Instead of specifying target_modules with every call, you can set preferences for target_modules using Preferences.jl. For example, to set target_modules to (Lux, LuxLib) we can run:

julia
using Preferences
+
+set_preferences!(Base.UUID("ac9de150-d08f-4546-94fb-7472b5760531"),
+    "target_modules" => ["Lux", "LuxLib"])

Example

julia
using LuxTestUtils
+
+@testset "Showcase JET Testing" begin
+    @jet sum([1, 2, 3]) target_modules=(Base, Core)
+
+    @jet sum(1, 1) target_modules=(Base, Core) opt_broken=true
+end

source


Gradient Correctness

# LuxTestUtils.@test_gradientsMacro.
julia
@test_gradients f args... [kwargs...]

Compare the gradients computed by Zygote.jl (Reverse Mode AD) against:

  • Tracker.jl (Reverse Mode AD)

  • ReverseDiff.jl (Reverse Mode AD)

  • ForwardDiff.jl (Forward Mode AD)

  • FiniteDifferences.jl (Finite Differences)

TIP

This function is completely compatible with Test.jl

Arguments

  • f: The function to test.

  • args...: Inputs to f wrt which the gradients are computed.

Keyword Arguments

  • gpu_testing: Disables ForwardDiff, ReverseDiff and FiniteDifferences tests. (Default: false)

  • soft_fail: If true, the test will not fail if any of the gradients are incorrect, instead it will show up as broken. (Default: false)

  • skip_(tracker|reverse_diff|forward_diff|finite_differences): Skip the corresponding gradient computation and check. (Default: false)

  • large_arrays_skip_(forward_diff|finite_differences): Skip the corresponding gradient computation and check for large arrays. (Forward Mode and Finite Differences are not efficient for large arrays.) (Default: true)

  • large_array_length: The length of the array above which the gradient computation is considered large. (Default: 25)

  • max_total_array_size: Treat as large array if the total size of all arrays is greater than this value. (Default: 100)

  • (tracker|reverse_diff|forward_diff|finite_differences)_broken: Mark the corresponding gradient test as broken. (Default: false)

Keyword Arguments for check_approx

  • atol: Absolute tolerance for gradient comparisons. (Default: 0.0)

  • rtol: Relative tolerance for gradient comparisons. (Default: atol > 0 ? 0.0 : √eps(typeof(atol)))

  • nans: Whether or not NaNs are considered equal. (Default: false)

Example

julia
using LuxTestUtils
+
+x = randn(10)
+
+@testset "Showcase Gradient Testing" begin
+    @test_gradients sum abs2 x
+
+    @test_gradients prod x
+end

source


+ + + + \ No newline at end of file diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.js b/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.js new file mode 100644 index 000000000..e4b9da11a --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a4 as o}from"./chunks/framework.BfjuC5t1.js";const P=JSON.parse('{"title":"LuxAMDGPU","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxAMDGPU.md","filePath":"api/Accelerator_Support/LuxAMDGPU.md","lastUpdated":null}'),i={name:"api/Accelerator_Support/LuxAMDGPU.md"},r=o('

LuxAMDGPU

LuxAMDGPU is meant to be used as a trigger package for all AMDGPU dependencies in Lux. Users requiring AMDGPU support should install LuxAMDGPU and load it alongside Lux.

Index

API

# LuxAMDGPU.functionalMethod.
julia
functional()

Check if LuxAMDGPU is functional.

source


',7),l=[r];function s(d,n,c,u,p,h){return t(),a("div",null,l)}const A=e(i,[["render",s]]);export{P as __pageData,A as default}; diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.lean.js b/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.lean.js new file mode 100644 index 000000000..bccbb055e --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxAMDGPU.md.qoeTbLKY.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a4 as o}from"./chunks/framework.BfjuC5t1.js";const P=JSON.parse('{"title":"LuxAMDGPU","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxAMDGPU.md","filePath":"api/Accelerator_Support/LuxAMDGPU.md","lastUpdated":null}'),i={name:"api/Accelerator_Support/LuxAMDGPU.md"},r=o("",7),l=[r];function s(d,n,c,u,p,h){return t(),a("div",null,l)}const A=e(i,[["render",s]]);export{P as __pageData,A as default}; diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.js b/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.js new file mode 100644 index 000000000..8382e2991 --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a4 as o}from"./chunks/framework.BfjuC5t1.js";const A=JSON.parse('{"title":"LuxCUDA","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxCUDA.md","filePath":"api/Accelerator_Support/LuxCUDA.md","lastUpdated":null}'),i={name:"api/Accelerator_Support/LuxCUDA.md"},r=o('

LuxCUDA

LuxCUDA is meant to be used as a trigger package for all CUDA dependencies in Lux. Users requiring CUDA support should install LuxCUDA and load it alongside Lux.

Index

API Reference

# LuxCUDA.functionalMethod.
julia
functional()

Check if LuxCUDA is functional.

source


',7),n=[r];function l(s,c,d,u,p,h){return t(),a("div",null,n)}const _=e(i,[["render",l]]);export{A as __pageData,_ as default}; diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.lean.js b/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.lean.js new file mode 100644 index 000000000..cf7e412b8 --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxCUDA.md.D46lK8Gh.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a4 as o}from"./chunks/framework.BfjuC5t1.js";const A=JSON.parse('{"title":"LuxCUDA","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxCUDA.md","filePath":"api/Accelerator_Support/LuxCUDA.md","lastUpdated":null}'),i={name:"api/Accelerator_Support/LuxCUDA.md"},r=o("",7),n=[r];function l(s,c,d,u,p,h){return t(),a("div",null,n)}const _=e(i,[["render",l]]);export{A as __pageData,_ as default}; diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.js b/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.js new file mode 100644 index 000000000..077e3fdcd --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.js @@ -0,0 +1,5 @@ +import{_ as e,c as i,o as s,a4 as a}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"LuxDeviceUtils","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxDeviceUtils.md","filePath":"api/Accelerator_Support/LuxDeviceUtils.md","lastUpdated":null}'),t={name:"api/Accelerator_Support/LuxDeviceUtils.md"},l=a(`

LuxDeviceUtils

LuxDeviceUtils.jl is a lightweight package defining rules for transferring data across devices. Most users should directly use Lux.jl instead.

Index

Preferences

# LuxDeviceUtils.gpu_backend!Function.
julia
gpu_backend!() = gpu_backend!("")
+gpu_backend!(backend) = gpu_backend!(string(backend))
+gpu_backend!(backend::AbstractLuxGPUDevice)
+gpu_backend!(backend::String)

Creates a LocalPreferences.toml file with the desired GPU backend.

If backend == "", then the gpu_backend preference is deleted. Otherwise, backend is validated to be one of the possible backends and the preference is set to backend.

If a new backend is successfully set, then the Julia session must be restarted for the change to take effect.

source


Data Transfer

# LuxDeviceUtils.cpu_deviceFunction.
julia
cpu_device() -> LuxCPUDevice()

Return a LuxCPUDevice object which can be used to transfer data to CPU.

source


# LuxDeviceUtils.gpu_deviceFunction.
julia
gpu_device(device_id::Union{Nothing, Int}=nothing;
+    force_gpu_usage::Bool=false) -> AbstractLuxDevice()

Selects GPU device based on the following criteria:

  1. If gpu_backend preference is set and the backend is functional on the system, then that device is selected.

  2. Otherwise, an automatic selection algorithm is used. We go over possible device backends in the order specified by supported_gpu_backends() and select the first functional backend.

  3. If no GPU device is functional and force_gpu_usage is false, then cpu_device() is invoked.

  4. If nothing works, an error is thrown.

Arguments

Warning

device_id is only applicable for CUDA and AMDGPU backends. For Metal and CPU backends, device_id is ignored and a warning is printed.

Keyword Arguments

source


Miscellaneous

# LuxDeviceUtils.reset_gpu_device!Function.
julia
reset_gpu_device!()

Resets the selected GPU device. This is useful when automatic GPU selection needs to be run again.

source


# LuxDeviceUtils.supported_gpu_backendsFunction.
julia
supported_gpu_backends() -> Tuple{String, ...}

Return a tuple of supported GPU backends.

Warning

This is not the list of functional backends on the system, but rather backends which Lux.jl supports.

Danger

Metal.jl support is extremely experimental and most things are not expected to work.

source


# LuxDeviceUtils.default_device_rngFunction.
julia
default_device_rng(::AbstractLuxDevice)

Returns the default RNG for the device. This can be used to directly generate parameters and states on the device using WeightInitializers.jl.

source


# LuxDeviceUtils.get_deviceFunction.
julia
get_device(x::AbstractArray) -> AbstractLuxDevice

Returns the device of the array x. Trigger Packages must be loaded for this to return the correct device.

source


`,21),d=[l];function n(c,r,o,p,h,u){return s(),i("div",null,d)}const v=e(t,[["render",n]]);export{g as __pageData,v as default}; diff --git a/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.lean.js b/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.lean.js new file mode 100644 index 000000000..091c09472 --- /dev/null +++ b/v0.5.30/assets/api_Accelerator_Support_LuxDeviceUtils.md.BXWwkWYm.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as s,a4 as a}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"LuxDeviceUtils","description":"","frontmatter":{},"headers":[],"relativePath":"api/Accelerator_Support/LuxDeviceUtils.md","filePath":"api/Accelerator_Support/LuxDeviceUtils.md","lastUpdated":null}'),t={name:"api/Accelerator_Support/LuxDeviceUtils.md"},l=a("",21),d=[l];function n(c,r,o,p,h,u){return s(),i("div",null,d)}const v=e(t,[["render",n]]);export{g as __pageData,v as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.js b/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.js new file mode 100644 index 000000000..b3b836c6d --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.js @@ -0,0 +1,2 @@ +import{_ as e,c as a,o as i,a4 as s}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"LuxCore","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/LuxCore.md","filePath":"api/Building_Blocks/LuxCore.md","lastUpdated":null}'),t={name:"api/Building_Blocks/LuxCore.md"},r=s(`

LuxCore

LuxCore.jl defines the abstract layers for Lux. Allows users to be compatible with the entirely of Lux.jl without having such a heavy dependency. If you are depending on Lux.jl directly, you do not need to depend on LuxCore.jl (all the functionality is exported via Lux.jl).

Index

Abstract Types

# LuxCore.AbstractExplicitLayerType.
julia
abstract type AbstractExplicitLayer

Abstract Type for all Lux Layers

Users implementing their custom layer, must implement

Optionally:

See also AbstractExplicitContainerLayer

source


# LuxCore.AbstractExplicitContainerLayerType.
julia
abstract type AbstractExplicitContainerLayer{layers} <: AbstractExplicitLayer

Abstract Container Type for certain Lux Layers. layers is a tuple containing fieldnames for the layer, and constructs the parameters and states using those.

Users implementing their custom layer can extend the same functions as in AbstractExplicitLayer.

Tip

Advanced structure manipulation of these layers post construction is possible via Functors.fmap. For a more flexible interface, we recommend using Lux.Experimental.@layer_map.

source


General

# LuxCore.applyFunction.
julia
apply(model, x, ps, st)

In most cases this function simply calls model(x, ps, st). However, it is still recommended to call apply instead of model(x, ps, st) directly. Some of the reasons for this include:

  1. For certain types of inputs x, we might want to perform preprocessing before calling model. For eg, if x is an Array of ReverseDiff.TrackedReals this can cause significant regressions in model(x, ps, st) (since it won't hit any of the BLAS dispatches). In those cases, we would automatically convert x to a ReverseDiff.TrackedArray.

  2. Certain user defined inputs need to be applied to specific layers but we want the datatype of propagate through all the layers (even unsupported ones). In these cases, we can unpack the input in apply and pass it to the appropriate layer and then repack it before returning. See the Lux manual on Custom Input Types for a motivating example.

source


# LuxCore.stateless_applyFunction.
julia
stateless_apply(model, x, ps)

Calls apply and only returns the first argument. This function requires that model has an empty state of NamedTuple(). Behavior of other kinds of models are undefined and it is the responsibility of the user to ensure that the model has an empty state.

source


# LuxCore.check_fmap_conditionFunction.
julia
check_fmap_condition(cond, tmatch, x) -> Bool

fmaps into the structure x and see if cond is statisfied for any of the leaf elements.

Arguments

Returns

A Boolean Value

source


# LuxCore.contains_lux_layerFunction.
julia
contains_lux_layer(l) -> Bool

Check if the structure l is a Lux AbstractExplicitLayer or a container of such a layer.

source


# LuxCore.display_nameFunction.
julia
display_name(layer::AbstractExplicitLayer)

Printed Name of the layer. If the layer has a field name that is used, else the type name is used.

source


# LuxCore.replicateFunction.
julia
replicate(rng::AbstractRNG)

Creates a copy of the rng state depending on its type.

source


# LuxCore.setupFunction.
julia
setup(rng::AbstractRNG, layer)

Shorthand for getting the parameters and states of the layer l. Is equivalent to (initialparameters(rng, l), initialstates(rng, l)).

Warning

This function is not pure, it mutates rng.

source


Parameters

# LuxCore.initialparametersFunction.
julia
initialparameters(rng::AbstractRNG, layer)

Generate the initial parameters of the layer l.

source


# LuxCore.parameterlengthFunction.
julia
parameterlength(layer)

Return the total number of parameters of the layer l.

source


States

# LuxCore.initialstatesFunction.
julia
initialstates(rng::AbstractRNG, layer)

Generate the initial states of the layer l.

source


# LuxCore.statelengthFunction.
julia
statelength(layer)

Return the total number of states of the layer l.

source


# LuxCore.testmodeFunction.
julia
testmode(st::NamedTuple)

Make all occurances of training in state stVal(false).

source


# LuxCore.trainmodeFunction.
julia
trainmode(st::NamedTuple)

Make all occurances of training in state stVal(true).

source


# LuxCore.update_stateFunction.
julia
update_state(st::NamedTuple, key::Symbol, value;
+    layer_check=_default_layer_check(key))

Recursively update all occurances of the key in the state st with the value.

source


Layer size

Warning

These specifications have been added very recently and most layers currently do not implement them.

# LuxCore.inputsizeFunction.
julia
inputsize(layer)

Return the input size of the layer.

source


# LuxCore.outputsizeFunction.
julia
outputsize(layer, x, rng)

Return the output size of the layer. If outputsize(layer) is defined, that method takes precedence, else we compute the layer output to determine the final size.

The fallback implementation of this function assumes the inputs were batched, i.e., if any of the outputs are Arrays, with ndims(A) > 1, it will return size(A)[1:(end - 1)]. If this behavior is undesirable, provide a custom outputsize(layer, x, rng) implementation).

source


`,46),o=[r];function l(d,n,p,c,h,u){return i(),a("div",null,o)}const g=e(t,[["render",l]]);export{k as __pageData,g as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.lean.js b/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.lean.js new file mode 100644 index 000000000..3cf28564a --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_LuxCore.md.CXlTipX8.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as i,a4 as s}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"LuxCore","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/LuxCore.md","filePath":"api/Building_Blocks/LuxCore.md","lastUpdated":null}'),t={name:"api/Building_Blocks/LuxCore.md"},r=s("",46),o=[r];function l(d,n,p,c,h,u){return i(),a("div",null,o)}const g=e(t,[["render",l]]);export{k as __pageData,g as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.js b/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.js new file mode 100644 index 000000000..b84be3131 --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.js @@ -0,0 +1,4 @@ +import{_ as n,c as o,m as t,a as e,a4 as a,o as s}from"./chunks/framework.BfjuC5t1.js";const j3=JSON.parse('{"title":"LuxLib","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/LuxLib.md","filePath":"api/Building_Blocks/LuxLib.md","lastUpdated":null}'),i={name:"api/Building_Blocks/LuxLib.md"},l=a(`

LuxLib

Backend for Lux.jl

Index

Dropout

# LuxLib.alpha_dropoutFunction.
julia
alpha_dropout(rng::AbstractRNG, x, p, ::Val{training})
+alpha_dropout(rng::AbstractRNG, x, p, ::Val{training}, α, A, B)

Alpha Dropout: Dropout ensuring that the mean and variance of the output remains same as the input. For details see [1]. Use the second call signature to avoid recomputing the constants for a fixed dropout probability.

Arguments

Returns

References

[1] Klambauer, Günter, et al. "Self-normalizing neural networks." Advances in neural information processing systems 30 (2017).

source


`,7),r={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},d=t("a",{id:"LuxLib.dropout",href:"#LuxLib.dropout"},"#",-1),Q=t("b",null,[t("u",null,"LuxLib.dropout")],-1),p=t("i",null,"Function",-1),h=a(`
julia
dropout(rng::AbstractRNG, x, p, ::Val{training}, invp; dims)
+dropout(rng::AbstractRNG, x, mask, p, ::Val{training}, ::Val{update_mask}, invp;
+        dims)

Dropout: Simple Way to prevent Neural Networks for Overfitting. For details see [1].

Arguments

Keyword Arguments

`,5),c=t("li",null,[t("p",null,[t("code",null,"dims"),e(": Dimensions along which dropout is applied")])],-1),T=t("code",null,"invp",-1),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-1.091ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.8ex",height:"3.048ex",role:"img",focusable:"false",viewBox:"0 -864.9 795.7 1347.1","aria-hidden":"true"},g=a('',1),_=[g],x=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mfrac",null,[t("mn",null,"1"),t("mi",null,"p")])])],-1),b=a('

Returns

References

[1] Srivastava, Nitish, et al. "Dropout: a simple way to prevent neural networks from overfitting." The journal of machine learning research 15.1 (2014): 1929-1958.

source

',5),k=t("br",null,null,-1),w=t("h2",{id:"Normalization",tabindex:"-1"},[e("Normalization "),t("a",{class:"header-anchor",href:"#Normalization","aria-label":'Permalink to "Normalization {#Normalization}"'},"​")],-1),L={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},f=t("a",{id:"LuxLib.batchnorm",href:"#LuxLib.batchnorm"},"#",-1),y=t("b",null,[t("u",null,"LuxLib.batchnorm")],-1),v=t("i",null,"Function",-1),H=a('
julia
batchnorm(x, scale, bias, running_mean, running_var; momentum, epsilon, training)

Batch Normalization. For details see [1].

',2),V={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},M={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.07ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 11080.9 891","aria-hidden":"true"},C=a('',1),D=[C],E=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mi",null,"N")])])],-1),A=t("p",null,[t("strong",null,"Arguments")],-1),Z=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),S=t("code",null,"scale",-1),j={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},I=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),B=[I],N=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),z=t("code",null,"nothing",-1),R=t("code",null,"bias",-1),P={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},G=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),J=[G],O=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),K=t("code",null,"nothing",-1),X=t("li",null,[t("p",null,[t("code",null,"running_mean"),e(": Running mean (can be "),t("code",null,"nothing"),e(")")])],-1),U=t("li",null,[t("p",null,[t("code",null,"running_var"),e(": Running variance (can be "),t("code",null,"nothing"),e(")")])],-1),$=a('

Keyword Arguments

Returns

Normalized Array of same size as x. And a Named Tuple containing the updated running mean and variance.

Performance Considerations

If the input array is 2D, 4D, or 5D CuArray with element types Float16, Float32 and Float64, then the CUDNN code path will be used. In all other cases, a broadcasting fallback is used which is not highly optimized.

References

[1] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." International conference on machine learning. PMLR, 2015.

source

',9),W=t("br",null,null,-1),Y={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},t1=t("a",{id:"LuxLib.groupnorm",href:"#LuxLib.groupnorm"},"#",-1),e1=t("b",null,[t("u",null,"LuxLib.groupnorm")],-1),a1=t("i",null,"Function",-1),o1=a('
julia
groupnorm(x, scale, bias; groups, epsilon)

Group Normalization. For details see [1].

This op is similar to batch normalization, but statistics are shared across equally-sized groups of channels and not shared across batch dimension. Thus, group normalization does not depend on the batch composition and does not require maintaining internal state for storing statistics.

Arguments

',4),s1=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),n1=t("code",null,"scale",-1),i1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},l1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},r1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),d1=[r1],Q1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),p1=t("code",null,"nothing",-1),h1=t("code",null,"bias",-1),c1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},m1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),u1=[m1],g1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),_1=t("code",null,"nothing",-1),x1=a('

Keyword Arguments

Returns

The normalized array is returned.

Performance Considerations

The most common case of this Op – x is a 4D array – is optimized using KernelAbstractions and has a fast custom backwards pass implemented. All other cases have a fallback implementation which is not especially optimized.

We have tested the code path for Float16 and it works, but gradient accumulation is extremely fragile. Hence, for Float16 inputs, it uses the fallback implementation.

If the batch size is small (< 16), then the fallback implementation will be faster than the KA version. However, this customization is not possible using the direct groupnorm interface.

References

[1] Wu, Yuxin, and Kaiming He. "Group normalization." Proceedings of the European conference on computer vision (ECCV). 2018.

source

',11),b1=t("br",null,null,-1),k1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},w1=t("a",{id:"LuxLib.instancenorm",href:"#LuxLib.instancenorm"},"#",-1),L1=t("b",null,[t("u",null,"LuxLib.instancenorm")],-1),f1=t("i",null,"Function",-1),y1=a('
julia
instancenorm(x, scale, bias; epsilon, training)

Instance Normalization. For details see [1].

',2),v1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"22.72ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10042 891","aria-hidden":"true"},V1=a('',1),M1=[V1],C1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("mn",null,"1")])],-1),D1=t("p",null,[t("strong",null,"Arguments")],-1),E1=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized (must be atleast 3D)")])],-1),A1=t("code",null,"scale",-1),Z1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},S1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},j1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),F1=[j1],I1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),B1=t("code",null,"nothing",-1),N1=t("code",null,"bias",-1),z1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},R1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},P1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),q1=[P1],G1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),J1=t("code",null,"nothing",-1),O1=a('

Keyword Arguments

Returns

Normalized Array of same size as x. And a Named Tuple containing the updated running mean and variance.

References

[1] Ulyanov, Dmitry, Andrea Vedaldi, and Victor Lempitsky. "Instance normalization: The missing ingredient for fast stylization." arXiv preprint arXiv:1607.08022 (2016).

source

',7),K1=t("br",null,null,-1),X1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},U1=t("a",{id:"LuxLib.layernorm",href:"#LuxLib.layernorm"},"#",-1),$1=t("b",null,[t("u",null,"LuxLib.layernorm")],-1),W1=t("i",null,"Function",-1),Y1=a('
julia
layernorm(x, scale, bias; dims, epsilon)

Layer Normalization. For details see [1].

',2),t3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},e3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.294ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 572 453","aria-hidden":"true"},a3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D465",d:"M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z",style:{"stroke-width":"3"}})])])],-1),o3=[a3],s3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"x")])],-1),n3={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},i3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.76ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.034ex",height:"6.063ex",role:"img",focusable:"false",viewBox:"0 -1460 11064.9 2680","aria-hidden":"true"},l3=a('',1),r3=[l3],d3=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"y"),t("mo",null,"="),t("mfrac",null,[t("mrow",null,[t("mi",null,"x"),t("mo",null,"−"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",{mathvariant:"double-struck"},"E")]),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]")]),t("msqrt",null,[t("mi",null,"V"),t("mi",null,"a"),t("mi",null,"r"),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]"),t("mo",null,"+"),t("mi",null,"ϵ")])]),t("mo",null,"∗"),t("mi",null,"γ"),t("mo",null,"+"),t("mi",null,"β")])],-1),Q3=t("p",null,[t("strong",null,"Arguments")],-1),p3=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),h3=t("code",null,"scale",-1),c3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},m3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),u3=[m3],g3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),_3=t("code",null,"nothing",-1),x3=t("code",null,"bias",-1),b3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},w3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),L3=[w3],f3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),y3=t("code",null,"nothing",-1),v3=a('

Keyword Arguments

Returns

Normalized Array of same size as x.

References

[1] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. "Layer normalization." arXiv preprint arXiv:1607.06450 (2016).

source

',7),H3=t("br",null,null,-1);function V3(M3,C3,D3,E3,A3,Z3){return s(),o("div",null,[l,t("div",r,[d,e(" "),Q,e(" — "),p,e(". "),h,t("ul",null,[c,t("li",null,[t("p",null,[T,e(": Inverse of the probability ("),t("mjx-container",m,[(s(),o("svg",u,_)),x]),e(")")])])]),b]),k,w,t("div",L,[f,e(" "),y,e(" — "),v,e(". "),H,t("p",null,[e("Batch Normalization computes the mean and variance for each "),t("mjx-container",V,[(s(),o("svg",M,D)),E]),e(" input slice and normalises the input accordingly.")]),A,t("ul",null,[Z,t("li",null,[t("p",null,[S,e(": Scale factor ("),t("mjx-container",j,[(s(),o("svg",F,B)),N]),e(") (can be "),z,e(")")])]),t("li",null,[t("p",null,[R,e(": Bias factor ("),t("mjx-container",P,[(s(),o("svg",q,J)),O]),e(") (can be "),K,e(")")])]),X,U]),$]),W,t("div",Y,[t1,e(" "),e1,e(" — "),a1,e(". "),o1,t("ul",null,[s1,t("li",null,[t("p",null,[n1,e(": Scale factor ("),t("mjx-container",i1,[(s(),o("svg",l1,d1)),Q1]),e(") (can be "),p1,e(")")])]),t("li",null,[t("p",null,[h1,e(": Bias factor ("),t("mjx-container",c1,[(s(),o("svg",T1,u1)),g1]),e(") (can be "),_1,e(")")])])]),x1]),b1,t("div",k1,[w1,e(" "),L1,e(" — "),f1,e(". "),y1,t("p",null,[e("Instance Normalization computes the mean and variance for each "),t("mjx-container",v1,[(s(),o("svg",H1,M1)),C1]),e(" input slice and normalises the input accordingly.")]),D1,t("ul",null,[E1,t("li",null,[t("p",null,[A1,e(": Scale factor ("),t("mjx-container",Z1,[(s(),o("svg",S1,F1)),I1]),e(") (can be "),B1,e(")")])]),t("li",null,[t("p",null,[N1,e(": Bias factor ("),t("mjx-container",z1,[(s(),o("svg",R1,q1)),G1]),e(") (can be "),J1,e(")")])])]),O1]),K1,t("div",X1,[U1,e(" "),$1,e(" — "),W1,e(". "),Y1,t("p",null,[e("Given an input array "),t("mjx-container",t3,[(s(),o("svg",e3,o3)),s3]),e(", this layer computes")]),t("mjx-container",n3,[(s(),o("svg",i3,r3)),d3]),Q3,t("ul",null,[p3,t("li",null,[t("p",null,[h3,e(": Scale factor ("),t("mjx-container",c3,[(s(),o("svg",T3,u3)),g3]),e(") (can be "),_3,e(")")])]),t("li",null,[t("p",null,[x3,e(": Bias factor ("),t("mjx-container",b3,[(s(),o("svg",k3,L3)),f3]),e(") (can be "),y3,e(")")])])]),v3]),H3])}const F3=n(i,[["render",V3]]);export{j3 as __pageData,F3 as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.lean.js b/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.lean.js new file mode 100644 index 000000000..e50c50642 --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_LuxLib.md.B6OT9gA7.lean.js @@ -0,0 +1 @@ +import{_ as n,c as o,m as t,a as e,a4 as a,o as s}from"./chunks/framework.BfjuC5t1.js";const j3=JSON.parse('{"title":"LuxLib","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/LuxLib.md","filePath":"api/Building_Blocks/LuxLib.md","lastUpdated":null}'),i={name:"api/Building_Blocks/LuxLib.md"},l=a("",7),r={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},d=t("a",{id:"LuxLib.dropout",href:"#LuxLib.dropout"},"#",-1),Q=t("b",null,[t("u",null,"LuxLib.dropout")],-1),p=t("i",null,"Function",-1),h=a("",5),c=t("li",null,[t("p",null,[t("code",null,"dims"),e(": Dimensions along which dropout is applied")])],-1),T=t("code",null,"invp",-1),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-1.091ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.8ex",height:"3.048ex",role:"img",focusable:"false",viewBox:"0 -864.9 795.7 1347.1","aria-hidden":"true"},g=a("",1),_=[g],x=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mfrac",null,[t("mn",null,"1"),t("mi",null,"p")])])],-1),b=a("",5),k=t("br",null,null,-1),w=t("h2",{id:"Normalization",tabindex:"-1"},[e("Normalization "),t("a",{class:"header-anchor",href:"#Normalization","aria-label":'Permalink to "Normalization {#Normalization}"'},"​")],-1),L={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},f=t("a",{id:"LuxLib.batchnorm",href:"#LuxLib.batchnorm"},"#",-1),y=t("b",null,[t("u",null,"LuxLib.batchnorm")],-1),v=t("i",null,"Function",-1),H=a("",2),V={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},M={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.07ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 11080.9 891","aria-hidden":"true"},C=a("",1),D=[C],E=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mi",null,"N")])])],-1),A=t("p",null,[t("strong",null,"Arguments")],-1),Z=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),S=t("code",null,"scale",-1),j={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},I=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),B=[I],N=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),z=t("code",null,"nothing",-1),R=t("code",null,"bias",-1),P={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},G=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),J=[G],O=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),K=t("code",null,"nothing",-1),X=t("li",null,[t("p",null,[t("code",null,"running_mean"),e(": Running mean (can be "),t("code",null,"nothing"),e(")")])],-1),U=t("li",null,[t("p",null,[t("code",null,"running_var"),e(": Running variance (can be "),t("code",null,"nothing"),e(")")])],-1),$=a("",9),W=t("br",null,null,-1),Y={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},t1=t("a",{id:"LuxLib.groupnorm",href:"#LuxLib.groupnorm"},"#",-1),e1=t("b",null,[t("u",null,"LuxLib.groupnorm")],-1),a1=t("i",null,"Function",-1),o1=a("",4),s1=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),n1=t("code",null,"scale",-1),i1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},l1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},r1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),d1=[r1],Q1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),p1=t("code",null,"nothing",-1),h1=t("code",null,"bias",-1),c1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},m1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),u1=[m1],g1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),_1=t("code",null,"nothing",-1),x1=a("",11),b1=t("br",null,null,-1),k1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},w1=t("a",{id:"LuxLib.instancenorm",href:"#LuxLib.instancenorm"},"#",-1),L1=t("b",null,[t("u",null,"LuxLib.instancenorm")],-1),f1=t("i",null,"Function",-1),y1=a("",2),v1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"22.72ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10042 891","aria-hidden":"true"},V1=a("",1),M1=[V1],C1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("mn",null,"1")])],-1),D1=t("p",null,[t("strong",null,"Arguments")],-1),E1=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized (must be atleast 3D)")])],-1),A1=t("code",null,"scale",-1),Z1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},S1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},j1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),F1=[j1],I1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),B1=t("code",null,"nothing",-1),N1=t("code",null,"bias",-1),z1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},R1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},P1=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),q1=[P1],G1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),J1=t("code",null,"nothing",-1),O1=a("",7),K1=t("br",null,null,-1),X1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},U1=t("a",{id:"LuxLib.layernorm",href:"#LuxLib.layernorm"},"#",-1),$1=t("b",null,[t("u",null,"LuxLib.layernorm")],-1),W1=t("i",null,"Function",-1),Y1=a("",2),t3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},e3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.294ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 572 453","aria-hidden":"true"},a3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D465",d:"M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z",style:{"stroke-width":"3"}})])])],-1),o3=[a3],s3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"x")])],-1),n3={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},i3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.76ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.034ex",height:"6.063ex",role:"img",focusable:"false",viewBox:"0 -1460 11064.9 2680","aria-hidden":"true"},l3=a("",1),r3=[l3],d3=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"y"),t("mo",null,"="),t("mfrac",null,[t("mrow",null,[t("mi",null,"x"),t("mo",null,"−"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",{mathvariant:"double-struck"},"E")]),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]")]),t("msqrt",null,[t("mi",null,"V"),t("mi",null,"a"),t("mi",null,"r"),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]"),t("mo",null,"+"),t("mi",null,"ϵ")])]),t("mo",null,"∗"),t("mi",null,"γ"),t("mo",null,"+"),t("mi",null,"β")])],-1),Q3=t("p",null,[t("strong",null,"Arguments")],-1),p3=t("li",null,[t("p",null,[t("code",null,"x"),e(": Input to be Normalized")])],-1),h3=t("code",null,"scale",-1),c3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},m3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),u3=[m3],g3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),_3=t("code",null,"nothing",-1),x3=t("code",null,"bias",-1),b3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},w3=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),L3=[w3],f3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),y3=t("code",null,"nothing",-1),v3=a("",7),H3=t("br",null,null,-1);function V3(M3,C3,D3,E3,A3,Z3){return s(),o("div",null,[l,t("div",r,[d,e(" "),Q,e(" — "),p,e(". "),h,t("ul",null,[c,t("li",null,[t("p",null,[T,e(": Inverse of the probability ("),t("mjx-container",m,[(s(),o("svg",u,_)),x]),e(")")])])]),b]),k,w,t("div",L,[f,e(" "),y,e(" — "),v,e(". "),H,t("p",null,[e("Batch Normalization computes the mean and variance for each "),t("mjx-container",V,[(s(),o("svg",M,D)),E]),e(" input slice and normalises the input accordingly.")]),A,t("ul",null,[Z,t("li",null,[t("p",null,[S,e(": Scale factor ("),t("mjx-container",j,[(s(),o("svg",F,B)),N]),e(") (can be "),z,e(")")])]),t("li",null,[t("p",null,[R,e(": Bias factor ("),t("mjx-container",P,[(s(),o("svg",q,J)),O]),e(") (can be "),K,e(")")])]),X,U]),$]),W,t("div",Y,[t1,e(" "),e1,e(" — "),a1,e(". "),o1,t("ul",null,[s1,t("li",null,[t("p",null,[n1,e(": Scale factor ("),t("mjx-container",i1,[(s(),o("svg",l1,d1)),Q1]),e(") (can be "),p1,e(")")])]),t("li",null,[t("p",null,[h1,e(": Bias factor ("),t("mjx-container",c1,[(s(),o("svg",T1,u1)),g1]),e(") (can be "),_1,e(")")])])]),x1]),b1,t("div",k1,[w1,e(" "),L1,e(" — "),f1,e(". "),y1,t("p",null,[e("Instance Normalization computes the mean and variance for each "),t("mjx-container",v1,[(s(),o("svg",H1,M1)),C1]),e(" input slice and normalises the input accordingly.")]),D1,t("ul",null,[E1,t("li",null,[t("p",null,[A1,e(": Scale factor ("),t("mjx-container",Z1,[(s(),o("svg",S1,F1)),I1]),e(") (can be "),B1,e(")")])]),t("li",null,[t("p",null,[N1,e(": Bias factor ("),t("mjx-container",z1,[(s(),o("svg",R1,q1)),G1]),e(") (can be "),J1,e(")")])])]),O1]),K1,t("div",X1,[U1,e(" "),$1,e(" — "),W1,e(". "),Y1,t("p",null,[e("Given an input array "),t("mjx-container",t3,[(s(),o("svg",e3,o3)),s3]),e(", this layer computes")]),t("mjx-container",n3,[(s(),o("svg",i3,r3)),d3]),Q3,t("ul",null,[p3,t("li",null,[t("p",null,[h3,e(": Scale factor ("),t("mjx-container",c3,[(s(),o("svg",T3,u3)),g3]),e(") (can be "),_3,e(")")])]),t("li",null,[t("p",null,[x3,e(": Bias factor ("),t("mjx-container",b3,[(s(),o("svg",k3,L3)),f3]),e(") (can be "),y3,e(")")])])]),v3]),H3])}const F3=n(i,[["render",V3]]);export{j3 as __pageData,F3 as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.js b/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.js new file mode 100644 index 000000000..69e7aaa0e --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.js @@ -0,0 +1,55 @@ +import{_ as n,c as t,m as i,a as s,a4 as a,o as e}from"./chunks/framework.BfjuC5t1.js";const j=JSON.parse('{"title":"WeightInitializers","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/WeightInitializers.md","filePath":"api/Building_Blocks/WeightInitializers.md","lastUpdated":null}'),l={name:"api/Building_Blocks/WeightInitializers.md"},h=a(`

WeightInitializers

This package is a light dependency providing common weight initialization schemes for deep learning models.

Index

API Reference

Main Functions

# WeightInitializers.glorot_normalFunction.
julia
glorot_normal([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain = 1) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers drawn from a normal distribution with standard deviation gain * sqrt(2 / (fan_in + fan_out)). This method is described in [1] and also known as Xavier initialization.

References

[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010.

source


`,8),r={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},p=i("a",{id:"WeightInitializers.glorot_uniform",href:"#WeightInitializers.glorot_uniform"},"#",-1),k=i("b",null,[i("u",null,"WeightInitializers.glorot_uniform")],-1),d=i("i",null,"Function",-1),o=a(`
julia
glorot_uniform([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain = 1) -> AbstractArray{T, length(size)}
`,1),g=i("code",null,"AbstractArray{T}",-1),c=i("code",null,"size",-1),E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.612ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2922.7 1000","aria-hidden":"true"},u=a('',1),b=[u],F=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mo",{stretchy:"false"},"["),i("mo",null,"−"),i("mi",null,"x"),i("mo",null,","),i("mi",null,"x"),i("mo",{stretchy:"false"},"]")])],-1),C=i("code",null,"x = gain * sqrt(6 / (fan_in + fan_out))",-1),m=i("p",null,[i("strong",null,"References")],-1),A=i("p",null,[s('[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." '),i("em",null,"Proceedings of the thirteenth international conference on artificial intelligence and statistics"),s(". 2010.")],-1),z=i("p",null,[i("a",{href:"https://github.com/LuxDL/WeightInitializers.jl/blob/v0.1.7/src/initializers.jl#L22-L36",target:"_blank",rel:"noreferrer"},"source")],-1),f=a(`
# WeightInitializers.identity_initFunction.
julia
identity_init([::AbstractRNG=_default_rng()], [T=Float32], size...; gain::Number=1,
+    shift::Union{Integer, Tuple{Integer, Integer}}=0) -> AbstractArray{T}

Constructs an array that aims to provide an identity mapping when used as parameters in most layers of a neural network. The identity mapping is scaled by the gain parameter.

Behavior

Caveats

Arguments

Returns

Examples

julia
using Random
+
+# Identity matrix for fully connected layer
+identity_matrix = identity_init(MersenneTwister(123), Float32, 5, 5)
+
+# Identity tensor for convolutional layer
+identity_tensor = identity_init(MersenneTwister(123),
+    Float32,        # Bias initialization
+    3,
+    3,
+    5,        # Matrix multiplication
+    5;
+    gain=1.5,
+    shift=(1, 0))

source


# WeightInitializers.kaiming_normalFunction.
julia
kaiming_normal([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain =T(2)) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers taken from a normal distribution standard deviation gain / sqrt(fan_in)

References

[1] He, Kaiming, et al. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." Proceedings of the IEEE international conference on computer vision. 2015.

source


# WeightInitializers.kaiming_uniformFunction.
julia
kaiming_uniform([::AbstractRNG=_default_rng()], [T=Float32], size...;
+    gain =T(2)) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size containing random numbers drawn from a uniform distribution on the interval [-x, x], where x = gain * sqrt(3/fan_in).

References

[1] He, Kaiming, et al. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." Proceedings of the IEEE international conference on computer vision. 2015.

source


# WeightInitializers.sparse_initFunction.
julia
sparse_init([::AbstractRNG=_default_rng()], [T=Float32], dims::Integer...;
+    sparsity::Number, std::Number=0.01) -> AbstractArray{T}

Creates a sparsely initialized weight matrix with a specified proportion of zeroed elements, using random numbers drawn from a normal distribution for the non-zero elements. This method is introduced in [^Martens2010]. Note: The sparsity parameter controls the proportion of the matrix that will be zeroed. For example, a sparsity of 0.3 means that approximately 30% of the elements will be set to zero. The non-zero elements are distributed according to a normal distribution, scaled by the std parameter.

Arguments

Returns

Examples

julia
using Random
+
+# Initialize a 5x5 sparsely initialized matrix with 30% sparsity
+rng = MersenneTwister(123)
+matrix = sparse_init(rng, Float32, 5, 5; sparsity=0.3, std=0.01)
5×5 Matrix{Float64}:
+  0.0          0.00273815    0.00592403   0.0          0.0
+  0.00459416  -0.000754831  -0.00888936  -0.0077507    0.0
+  0.0         -0.00194229    0.0          0.0         -0.00468489
+  0.0114265    0.0           0.0         -0.00734886   0.00277726
+ -0.00396679   0.0           0.00327215  -0.0071741   -0.00880897

References

[^Martens2010] Martens, J, "Deep learning via Hessian-free optimization" Proceedings of the 27th International Conference on International Conference on Machine Learning. 2010.

source


# WeightInitializers.truncated_normalFunction.
julia
truncated_normal([::AbstractRNG=_default_rng()], [T=Float32], size...; mean = 0,
+    std = 1, lo = -2, hi = 2) -> AbstractArray{T, length(size)}

Return an AbstractArray{T} of the given size where each element is drawn from a truncated normal distribution. The numbers are distributed like filter(x -> lo ≤ x ≤ hi, mean .+ std .* randn(100)).

source


# WeightInitializers.orthogonalFunction.
julia
orthogonal([::AbstractRNG=_default_rng()], [T=Float32], dims::Integer...;
+    gain = 1)  -> AbstractArray{T, length(dims)}

Return an AbstractArray{T} of the given dimensions (dims) which is a (semi) orthogonal matrix, as described in [^Saxe14]

The function constructs an orthogonal or semi-orthogonal matrix depending on the specified dimensions. For two dimensions, it returns a matrix where dims = (rows, cols). For more than two dimensions, it computes an orthogonal matrix of size prod(dims[1:(end - 1)]) by dims[end] before reshaping it to the original dimensions.

Cannot construct a vector, i.e., length(dims) == 1 is forbidden.

Arguments

References

[^Saxe14] Saxe, McClelland, Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks", ICLR 2014, https://arxiv.org/abs/1312.6120

source


Commonly Used Wrappers

# WeightInitializers.zeros16Function.
julia
zeros16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones16Function.
julia
ones16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand16Function.
julia
rand16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn16Function.
julia
randn16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float16, length(size)}

Return an AbstractArray{Float16} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zeros32Function.
julia
zeros32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones32Function.
julia
ones32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand32Function.
julia
rand32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn32Function.
julia
randn32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float32, length(size)}

Return an AbstractArray{Float32} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zeros64Function.
julia
zeros64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.ones64Function.
julia
ones64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.rand64Function.
julia
rand64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randn64Function.
julia
randn64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{Float64, length(size)}

Return an AbstractArray{Float64} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC16Function.
julia
zerosC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC16Function.
julia
onesC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC16Function.
julia
randC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC16Function.
julia
randnC16([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF16, length(size)}

Return an AbstractArray{ComplexF16} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC32Function.
julia
zerosC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC32Function.
julia
onesC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC32Function.
julia
randC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC32Function.
julia
randnC32([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF32, length(size)}

Return an AbstractArray{ComplexF32} of the given size containing random numbers from a standard normal distribution.

source


# WeightInitializers.zerosC64Function.
julia
zerosC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing an AbstractArray of zeros.

source


# WeightInitializers.onesC64Function.
julia
onesC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing an AbstractArray of ones.

source


# WeightInitializers.randC64Function.
julia
randC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing random numbers from a uniform distribution.

source


# WeightInitializers.randnC64Function.
julia
randnC64([::AbstractRNG=_default_rng()], size...;
+    kwargs...) -> AbstractArray{ComplexF64, length(size)}

Return an AbstractArray{ComplexF64} of the given size containing random numbers from a standard normal distribution.

source


`,62);function v(_,D,I,W,x,B){return e(),t("div",null,[h,i("div",r,[p,s(" "),k,s(" — "),d,s(". "),o,i("p",null,[s("Return an "),g,s(" of the given "),c,s(" containing random numbers drawn from a uniform distribution on the interval "),i("mjx-container",E,[(e(),t("svg",y,b)),F]),s(", where "),C,s(". This method is described in [1] and also known as Xavier initialization.")]),m,A,z]),f])}const L=n(l,[["render",v]]);export{j as __pageData,L as default}; diff --git a/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.lean.js b/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.lean.js new file mode 100644 index 000000000..8974bf28e --- /dev/null +++ b/v0.5.30/assets/api_Building_Blocks_WeightInitializers.md.6GPvJ2xM.lean.js @@ -0,0 +1 @@ +import{_ as n,c as t,m as i,a as s,a4 as a,o as e}from"./chunks/framework.BfjuC5t1.js";const j=JSON.parse('{"title":"WeightInitializers","description":"","frontmatter":{},"headers":[],"relativePath":"api/Building_Blocks/WeightInitializers.md","filePath":"api/Building_Blocks/WeightInitializers.md","lastUpdated":null}'),l={name:"api/Building_Blocks/WeightInitializers.md"},h=a("",8),r={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},p=i("a",{id:"WeightInitializers.glorot_uniform",href:"#WeightInitializers.glorot_uniform"},"#",-1),k=i("b",null,[i("u",null,"WeightInitializers.glorot_uniform")],-1),d=i("i",null,"Function",-1),o=a("",1),g=i("code",null,"AbstractArray{T}",-1),c=i("code",null,"size",-1),E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.612ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2922.7 1000","aria-hidden":"true"},u=a("",1),b=[u],F=i("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[i("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[i("mo",{stretchy:"false"},"["),i("mo",null,"−"),i("mi",null,"x"),i("mo",null,","),i("mi",null,"x"),i("mo",{stretchy:"false"},"]")])],-1),C=i("code",null,"x = gain * sqrt(6 / (fan_in + fan_out))",-1),m=i("p",null,[i("strong",null,"References")],-1),A=i("p",null,[s('[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks." '),i("em",null,"Proceedings of the thirteenth international conference on artificial intelligence and statistics"),s(". 2010.")],-1),z=i("p",null,[i("a",{href:"https://github.com/LuxDL/WeightInitializers.jl/blob/v0.1.7/src/initializers.jl#L22-L36",target:"_blank",rel:"noreferrer"},"source")],-1),f=a("",62);function v(_,D,I,W,x,B){return e(),t("div",null,[h,i("div",r,[p,s(" "),k,s(" — "),d,s(". "),o,i("p",null,[s("Return an "),g,s(" of the given "),c,s(" containing random numbers drawn from a uniform distribution on the interval "),i("mjx-container",E,[(e(),t("svg",y,b)),F]),s(", where "),C,s(". This method is described in [1] and also known as Xavier initialization.")]),m,A,z]),f])}const L=n(l,[["render",v]]);export{j as __pageData,L as default}; diff --git a/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.js b/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.js new file mode 100644 index 000000000..1df788554 --- /dev/null +++ b/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.js @@ -0,0 +1,4 @@ +import{_ as t,c as e,o as i,a4 as l}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"Boltz","description":"","frontmatter":{},"headers":[],"relativePath":"api/Domain_Specific_Modeling/Boltz.md","filePath":"api/Domain_Specific_Modeling/Boltz.md","lastUpdated":null}'),s={name:"api/Domain_Specific_Modeling/Boltz.md"},a=l(`

Boltz

Accelerate ⚡ your ML research using pre-built Deep Learning Models with Lux.

Index

Computer Vision Models

Classification Models: Native Lux Models

MODEL NAMEFUNCTIONNAMEPRETRAINEDTOP 1 ACCURACY (%)TOP 5 ACCURACY (%)
VGGvgg:vgg1167.3587.91
VGGvgg:vgg1368.4088.48
VGGvgg:vgg1670.2489.80
VGGvgg:vgg1971.0990.27
VGGvgg:vgg11_bn69.0988.94
VGGvgg:vgg13_bn69.6689.49
VGGvgg:vgg16_bn72.1191.02
VGGvgg:vgg19_bn72.9591.32
Vision Transformervision_transformer:tiny🚫
Vision Transformervision_transformer:small🚫
Vision Transformervision_transformer:base🚫
Vision Transformervision_transformer:large🚫
Vision Transformervision_transformer:huge🚫
Vision Transformervision_transformer:giant🚫
Vision Transformervision_transformer:gigantic🚫

Building Blocks

# Boltz.ClassTokensType.
julia
ClassTokens(dim; init=Lux.zeros32)

Appends class tokens to an input with embedding dimension dim for use in many vision transformer namels.

source


# Boltz.MultiHeadAttentionType.
julia
MultiHeadAttention(in_planes::Int, number_heads::Int; qkv_bias::Bool=false,
+                   attention_dropout_rate::T=0.0f0,
+                   projection_dropout_rate::T=0.0f0) where {T}

Multi-head self-attention layer

source


# Boltz.ViPosEmbeddingType.
julia
ViPosEmbedding(embedsize, npatches;
+               init = (rng, dims...) -> randn(rng, Float32, dims...))

Positional embedding layer used by many vision transformer-like namels.

source


# Boltz.transformer_encoderFunction.
julia
transformer_encoder(in_planes, depth, number_heads; mlp_ratio = 4.0f0, dropout = 0.0f0)

Transformer as used in the base ViT architecture. (reference).

Arguments

source


# Boltz.vggFunction.
julia
vgg(imsize; config, inchannels, batchnorm = false, nclasses, fcsize, dropout)

Create a VGG model (reference).

Arguments

source


Non-Public API

# Boltz._seconddimmeanFunction.
julia
_seconddimmean(x)

Computes the mean of x along dimension 2

source


# Boltz._fast_chunkFunction.
julia
_fast_chunk(x::AbstractArray, ::Val{n}, ::Val{dim})

Type-stable and faster version of MLUtils.chunk

source


# Boltz._flatten_spatialFunction.
julia
_flatten_spatial(x::AbstractArray{T, 4})

Flattens the first 2 dimensions of x, and permutes the remaining dimensions to (2, 1, 3)

source


# Boltz._vgg_blockFunction.
julia
_vgg_block(input_filters, output_filters, depth, batchnorm)

A VGG block of convolution layers (reference).

Arguments

source


# Boltz._vgg_classifier_layersFunction.
julia
_vgg_classifier_layers(imsize, nclasses, fcsize, dropout)

Create VGG classifier (fully connected) layers (reference).

Arguments

source


# Boltz._vgg_convolutional_layersFunction.
julia
_vgg_convolutional_layers(config, batchnorm, inchannels)

Create VGG convolution layers (reference).

Arguments

source


Classification Models: Imported from Metalhead.jl

Tip

You need to load Flux and Metalhead before using these models.

MODEL NAMEFUNCTIONNAMEPRETRAINEDTOP 1 ACCURACY (%)TOP 5 ACCURACY (%)
AlexNetalexnet:alexnet54.4877.72
ResNetresnet:resnet18🚫68.0888.44
ResNetresnet:resnet34🚫72.1390.91
ResNetresnet:resnet50🚫74.5592.36
ResNetresnet:resnet101🚫74.8192.36
ResNetresnet:resnet152🚫77.6393.84
ConvMixerconvmixer:small🚫
ConvMixerconvmixer:base🚫
ConvMixerconvmixer:large🚫
DenseNetdensenet:densenet121🚫
DenseNetdensenet:densenet161🚫
DenseNetdensenet:densenet169🚫
DenseNetdensenet:densenet201🚫
GoogleNetgooglenet:googlenet🚫
MobileNetmobilenet:mobilenet_v1🚫
MobileNetmobilenet:mobilenet_v2🚫
MobileNetmobilenet:mobilenet_v3_small🚫
MobileNetmobilenet:mobilenet_v3_large🚫
ResNeXTresnext:resnext50🚫
ResNeXTresnext:resnext101🚫
ResNeXTresnext:resnext152🚫

These models can be created using <FUNCTION>(<NAME>; pretrained = <PRETRAINED>)

Preprocessing

All the pretrained models require that the images be normalized with the parameters mean = [0.485f0, 0.456f0, 0.406f0] and std = [0.229f0, 0.224f0, 0.225f0].

`,37),d=[a];function n(r,o,c,g,h,p){return i(),e("div",null,d)}const u=t(s,[["render",n]]);export{k as __pageData,u as default}; diff --git a/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.lean.js b/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.lean.js new file mode 100644 index 000000000..5dd614bbb --- /dev/null +++ b/v0.5.30/assets/api_Domain_Specific_Modeling_Boltz.md.KvKJdetm.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i,a4 as l}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"Boltz","description":"","frontmatter":{},"headers":[],"relativePath":"api/Domain_Specific_Modeling/Boltz.md","filePath":"api/Domain_Specific_Modeling/Boltz.md","lastUpdated":null}'),s={name:"api/Domain_Specific_Modeling/Boltz.md"},a=l("",37),d=[a];function n(r,o,c,g,h,p){return i(),e("div",null,d)}const u=t(s,[["render",n]]);export{k as __pageData,u as default}; diff --git a/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.js b/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.js new file mode 100644 index 000000000..783116932 --- /dev/null +++ b/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.js @@ -0,0 +1,102 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"Experimental Features","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/contrib.md","filePath":"api/Lux/contrib.md","lastUpdated":null}'),t={name:"api/Lux/contrib.md"},n=e(`

Experimental Features

All features listed on this page are experimental which means:

  1. No SemVer Guarantees. We use code here to iterate fast and most users should wait for these features to be marked non-experimental.

  2. Expect edge-cases and report them. It will help us move these features out of experimental sooner.

  3. None of the features are exported.

Warning

Starting v"0.5.2" all Experimental features need to be accessed via Lux.Experimental.<feature>. Direct access via Lux.<feature> will be removed in v"0.6".

Index

Training

Helper Functions making it easier to train Lux.jl models.

Lux.Training is meant to be simple and provide extremely basic functionality. We provide basic building blocks which can be seamlessly composed to create complex training pipelines.

# Lux.Experimental.TrainStateType.
julia
TrainState

Training State containing:

source


# Lux.Experimental.compute_gradientsFunction.
julia
compute_gradients(ad::ADTypes.AbstractADType, objective_function::Function, data,
+    ts::TrainState)

Compute the gradients of the objective function wrt parameters stored in ts.

Arguments

Return

A 4-Tuple containing:

source


# Lux.Experimental.apply_gradientsFunction.
julia
apply_gradients(ts::TrainState, grads)

Update the parameters stored in ts using the gradients grads.

Arguments

Returns

Updated TrainState object.

source


Parameter Freezing

Info

In the long term, this will be supported via Optimisers.jl.

# Lux.Experimental.FrozenLayerType.
julia
FrozenLayer(l::AbstractExplicitLayer, which_params::Union{Tuple, Nothing})

Freeze the parameters with name which_params of the layer l.

Tip

It is always recommended to use the Lux.Experimental.freeze function instead of directly using the FrozenLayer constructor.

Warning

There are no checks for which_params. For example, if the original layer has parameters named (:weight, :bias), and which_paramsis set to(:myweight,) then none of the parameters are frozen and no error is thrown.

Arguments

Input

Returns

Parameters

States

Note on Internal Layer Implementation

The inner layer should work with NamedTuple parameters. In order to support custom parameter types, users need to implement Lux._merge(::CustomParamType, ::NamedTuple).

Example

julia
m = Lux.Experimental.FrozenLayer(Dense(2 => 2), (:weight,))

See also Lux.Experimental.freeze, Lux.Experimental.unfreeze.

source


# Lux.Experimental.freezeFunction.
julia
freeze(l::AbstractExplicitLayer, which_params::Union{Tuple, Nothing} = nothing)

Constructs a version of l with which_params frozen. If which_params is nothing, then all parameters are frozen.

source

julia
freeze(l::AbstractExplicitLayer, ps, st::NamedTuple,
+       which_params::Union{Tuple, Nothing} = nothing)

Construct a Lux.Experimental.FrozenLayer for l with the current parameters and states. If which_params is nothing, then all parameters are frozen.

source


# Lux.Experimental.unfreezeFunction.
julia
unfreeze(l::FrozenLayer)

Unfreezes the layer l.

source

julia
unfreeze(l::FrozenLayer, ps, st::NamedTuple)

Unwraps a Lux.Experimental.FrozenLayer l with the current parameters and states.

source


For detailed usage example look at the manual page.

Map over Layer

# Lux.Experimental.layer_mapFunction.
julia
layer_map(f::Function, l::AbstractExplicitLayer, ps, st::NamedTuple,
+          name::String="model")

Map the function f over the model l, with the parameters ps and states st. This is different from Functors.fmap since it zips the layers, parameters, and states and invokes the function on all of them together.

Call Signature for f

Tip

We recommend using the macro Lux.@layer_map instead of this function. It automatically sets the name of the layer to be the variable name.

Example

julia
using Lux, Random, Setfield
+
+c = Parallel(+; chain=Chain(; dense_1=Dense(2 => 3), bn=BatchNorm(3),
+                              dense_2=Dense(3 => 5)),
+             dense_3=Dense(5 => 1))
+
+rng = Random.default_rng()
+ps, st = Lux.setup(rng, c)
+
+# Makes parameters of Dense Layers inside Chain zero
+function zero_dense_params(l, ps, st, name)
+    if l isa Dense
+        println("zeroing params of $name")
+        @set! ps.weight = zero.(ps.weight)
+        @set! ps.bias = zero.(ps.bias)
+    end
+    return l, ps, st
+end
+
+Lux.layer_map(zero_dense_params, c, ps, st)

source


# Lux.Experimental.@layer_mapMacro.
julia
@layer_map func layer ps st

See the documentation of Lux.Experimental.layer_map for more details. This macro eliminates the need to the set the layer name, and uses the variable name as the starting point.

Example

julia
using Lux, Random, Setfield
+
+c = Parallel(+; chain=Chain(; dense_1=Dense(2 => 3), bn=BatchNorm(3),
+                              dense_2=Dense(3 => 5)),
+             dense_3=Dense(5 => 1))
+
+rng = Random.default_rng()
+ps, st = Lux.setup(rng, c)
+
+# Makes parameters of Dense Layers inside Chain zero
+function zero_dense_params(l, ps, st, name)
+    if l isa Dense
+        println("zeroing params of $name")
+        @set! ps.weight = zero.(ps.weight)
+        @set! ps.bias = zero.(ps.bias)
+    end
+    return l, ps, st
+end
+
+Lux.@layer_map zero_dense_params c ps st

source


Debugging Functionality

Model not working properly! Here are some functionalities to help you debug you Lux model.

# Lux.Experimental.@debug_modeMacro.
julia
@debug_mode layer kwargs...

Recurses into the layer and replaces the inner most non Container Layers with a Lux.Experimental.DebugLayer.

See Lux.Experimental.DebugLayer for details about the Keyword Arguments.

source


# Lux.Experimental.DebugLayerType.
julia
DebugLayer(layer::AbstractExplicitLayer; nan_check::Symbol=:both,
+    error_check::Bool=true, location::String="")

Danger

This layer is only meant to be used for debugging. If used for actual training or inference, will lead to extremely bad performance.

A wrapper over Lux layers that adds checks for NaNs and errors. This is useful for debugging.

Arguments

Keyword Arguments

Inputs

Outputs

If nan_check is enabled and NaNs are detected then a DomainError is thrown. If error_check is enabled, then any errors in the layer are thrown with useful information to track where the error originates.

Warning

nan_check for the backward mode only works with ChainRules Compatible Reverse Mode AD Tools currently.

See Lux.Experimental.@debug_mode to construct this layer.

source


Tied Parameters

# Lux.Experimental.share_parametersFunction.
julia
share_parameters(ps, sharing)
+share_parameters(ps, sharing, new_parameters)

Updates the parameters in ps with a common set of parameters new_parameters that are shared between each list in the nested list sharing. (That was kind of a mouthful, the example should make it clear).

Arguments

Returns

Updated Parameters having the same structure as ps.

Example

julia
model = Chain(; d1=Dense(2 => 4, tanh),
+    d3=Chain(; l1=Dense(4 => 2), l2=Dense(2 => 4)), d2=Dense(4 => 2))
+
+ps, st = Lux.setup(Xoshiro(0), model)
+
+# share parameters of (d1 and d3.l1) and (d3.l2 and d2)
+ps = Lux.share_parameters(ps, (("d3.l2", "d1"), ("d2", "d3.l1")))

source


Compact Layer API

# Lux.Experimental.@compactMacro.
julia
@compact(kw...) do x
+    ...
+end
+@compact(forward::Function; name=nothing, dispatch=nothing, parameters...)

Creates a layer by specifying some parameters, in the form of keywords, and (usually as a do block) a function for the forward pass. You may think of @compact as a specialized let block creating local variables that are trainable in Lux. Declared variable names may be used within the body of the forward function. Note that unlike typical Lux models, the forward function doesn't need to explicitly manage states.

Reserved Kwargs:

  1. name: The name of the layer.

  2. dispatch: The constructed layer has the type Lux.Experimental.CompactLuxLayer{dispatch} which can be used for custom dispatches.

Examples

Here is a linear model:

julia
using Lux, Random
+import Lux.Experimental: @compact
+
+r = @compact(w=rand(3)) do x
+    return w .* x
+end
+ps, st = Lux.setup(Xoshiro(0), r)
+r([1, 1, 1], ps, st)  # x is set to [1, 1, 1].

Here is a linear model with bias and activation:

julia
d_in = 5
+d_out = 7
+d = @compact(W=randn(d_out, d_in), b=zeros(d_out), act=relu) do x
+    y = W * x
+    return act.(y .+ b)
+end
+ps, st = Lux.setup(Xoshiro(0), d)
+d(ones(5, 10), ps, st) # 7×10 Matrix as output.
+
+ps_dense = (; weight=ps.W, bias=ps.b)
+first(d([1, 2, 3, 4, 5], ps, st)) 
+first(Dense(d_in => d_out, relu)([1, 2, 3, 4, 5], ps_dense, NamedTuple())) # Equivalent to a dense layer

Finally, here is a simple MLP:

julia
n_in = 1
+n_out = 1
+nlayers = 3
+
+model = @compact(w1=Dense(n_in, 128),
+    w2=[Dense(128, 128) for i in 1:nlayers], w3=Dense(128, n_out), act=relu) do x
+    embed = act(w1(x))
+    for w in w2
+        embed = act(w(embed))
+    end
+    out = w3(embed)
+    return out
+end
+
+ps, st = Lux.setup(Xoshiro(0), model)
+
+model(randn(n_in, 32), ps, st)  # 1×32 Matrix as output.

We can train this model just like any Lux model:

julia
using Optimisers, Zygote
+
+x_data = collect(-2.0f0:0.1f0:2.0f0)'
+y_data = 2 .* x_data .- x_data .^ 3
+optim = Optimisers.setup(Adam(), ps)
+
+for epoch in 1:1000
+    loss, gs = Zygote.withgradient(
+        ps -> sum(abs2, first(model(x_data, ps, st)) .- y_data), ps)
+    @show epoch, loss
+    Optimisers.update!(optim, ps, gs[1])
+end

You may also specify a name for the model, which will be used instead of the default printout, which gives a verbatim representation of the code used to construct the model:

julia
model = @compact(w=rand(3), name="Linear(3 => 1)") do x
+    return sum(w .* x)
+end
+
+println(model)  # "Linear(3 => 1)()"

This can be useful when using @compact to hierarchically construct complex models to be used inside a Chain.

Type Stability

If your input function f is type-stable but the generated model is not type stable, it should be treated as a bug. We will appreciate issues if you find such cases.

Parameter Count

Array Parameter don't print the number of parameters on the side. However, they do account for the total number of parameters printed at the bottom.

source


`,41),h=[n];function l(p,k,r,d,o,E){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; diff --git a/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.lean.js b/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.lean.js new file mode 100644 index 000000000..2411f1cb2 --- /dev/null +++ b/v0.5.30/assets/api_Lux_contrib.md.DdRrnWLR.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"Experimental Features","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/contrib.md","filePath":"api/Lux/contrib.md","lastUpdated":null}'),t={name:"api/Lux/contrib.md"},n=e("",41),h=[n];function l(p,k,r,d,o,E){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; diff --git a/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.js b/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.js new file mode 100644 index 000000000..ade011358 --- /dev/null +++ b/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.js @@ -0,0 +1,57 @@ +import{_ as Q,c as s,m as t,a,a4 as e,o as i}from"./chunks/framework.BfjuC5t1.js";const q4=JSON.parse('{"title":"Built-In Layers","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/layers.md","filePath":"api/Lux/layers.md","lastUpdated":null}'),l={name:"api/Lux/layers.md"},T=e(`

Built-In Layers

Index

Containers

# Lux.BranchLayerType.
julia
BranchLayer(layers...)
+BranchLayer(; name=nothing, layers...)

Takes an input x and passes it through all the layers and returns a tuple of the outputs.

Arguments

Keyword Arguments

Inputs

Returns

Parameters

States

Comparison with Parallel

This is slightly different from Parallel(nothing, layers...)

  • If the input is a tuple, Parallel will pass each element individually to each layer.

  • BranchLayer essentially assumes 1 input comes in and is branched out into N outputs.

Example

An easy way to replicate an input to an NTuple is to do

julia
l = BranchLayer(NoOpLayer(), NoOpLayer(), NoOpLayer())

source


# Lux.ChainType.
julia
Chain(layers...; name=nothing, disable_optimizations::Bool = false)
+Chain(; layers..., name=nothing, disable_optimizations::Bool = false)

Collects multiple layers / functions to be called in sequence on a given input.

Arguments

Keyword Arguments

Inputs

Input x is passed sequentially to each layer, and must conform to the input requirements of the internal layers.

Returns

Parameters

States

Optimizations

Performs a few optimizations to generate reasonable architectures. Can be disabled using keyword argument disable_optimizations.

Miscellaneous Properties

Example

julia
c = Chain(Dense(2, 3, relu), BatchNorm(3), Dense(3, 2))

source


# Lux.PairwiseFusionType.
julia
PairwiseFusion(connection, layers...; name=nothing)
+PairwiseFusion(connection; name=nothing, layers...)
x1 → layer1 → y1 ↘
+                  connection → layer2 → y2 ↘
+              x2 ↗                          connection → y3
+                                        x3 ↗

Arguments

Keyword Arguments

Inputs

Layer behaves differently based on input type:

  1. If the input x is a tuple of length N + 1, then the layers must be a tuple of length N. The computation is as follows
julia
y = x[1]
+for i in 1:N
+    y = connection(x[i + 1], layers[i](y))
+end
  1. Any other kind of input
julia
y = x
+for i in 1:N
+    y = connection(x, layers[i](y))
+end

Returns

Parameters

States

source


# Lux.ParallelType.
julia
Parallel(connection, layers...; name=nothing)
+Parallel(connection; name=nothing, layers...)

Create a layer which passes an input to each path in layers, before reducing the output with connection.

Arguments

Keyword Arguments

Inputs

Returns

Parameters

States

See also SkipConnection which is Parallel with one identity.

source


# Lux.SkipConnectionType.
julia
SkipConnection(layer, connection; name=nothing)

Create a skip connection which consists of a layer or Chain of consecutive layers and a shortcut connection linking the block's input to the output through a user-supplied 2-argument callable. The first argument to the callable will be propagated through the given layer while the second is the unchanged, "skipped" input.

The simplest "ResNet"-type connection is just SkipConnection(layer, +).

Arguments

Keyword Arguments

Inputs

Returns

Parameters

States

See Parallel for a more general implementation.

source


# Lux.RepeatedLayerType.
julia
RepeatedLayer(model; repeats::Val = Val(10), input_injection::Val = Val(false))

Iteratively applies model for repeats number of times. The initial input is passed into the model repeatedly if input_injection = Val(true). This layer unrolls the computation, however, semantically this is same as:

  1. input_injection = Val(false)
julia
res = x
+for i in 1:repeats
+    res, st = model(res, ps, st)
+end
  1. input_injection = Val(true)
julia
res = x
+for i in 1:repeats
+    res, st = model((res, x), ps, st)
+end

It is expected that repeats will be a reasonable number below 20, beyond that compile times for gradients might be unreasonably high.

Arguments

Keyword Arguments

Inputs

Returns

Parameters

States

source


Convolutional Layers

`,17),o={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},n=t("a",{id:"Lux.Conv",href:"#Lux.Conv"},"#",-1),d=t("b",null,[t("u",null,"Lux.Conv")],-1),r=t("i",null,"Type",-1),p=e(`
julia
Conv(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+     activation=identity; init_weight=glorot_uniform, init_bias=zeros32, stride=1,
+     pad=0, dilation=1, groups=1, use_bias=true)

Standard convolutional layer.

Image data should be stored in WHCN order (width, height, channels, batch). In other words, a 100 x 100 RGB image would be a 100 x 100 x 3 x 1 array, and a batch of 50 would be a 100 x 100 x 3 x 50 array. This has N = 2 spatial dimensions, and needs a kernel size like (5, 5), a 2-tuple of integers. To take convolutions along N feature dimensions, this layer expects as input an array with ndims(x) == N + 2, where size(x, N + 1) == in_chs is the number of input channels, and size(x, ndims(x)) is the number of observations in a batch.

Warning

Frameworks like Pytorch perform cross-correlation in their convolution layers

Arguments

Keyword Arguments

Inputs

Returns

`,12),h={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},c=e('',1),g=[c],u=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),k=e('

Parameters

source

',4),y=e(`
# Lux.ConvTransposeType.
julia
ConvTranspose(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+              activation=identity; init_weight=glorot_uniform, init_bias=zeros32,
+              stride=1, pad=0, dilation=1, groups=1, use_bias=true)

Standard convolutional transpose layer.

Arguments

Keyword Arguments

Inputs

Returns

Parameters

source


`,3),f={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},L=t("a",{id:"Lux.CrossCor",href:"#Lux.CrossCor"},"#",-1),b=t("b",null,[t("u",null,"Lux.CrossCor")],-1),x=t("i",null,"Type",-1),_=e(`
julia
CrossCor(k::NTuple{N,Integer}, (in_chs => out_chs)::Pair{<:Integer,<:Integer},
+         activation=identity; init_weight=glorot_uniform, init_bias=zeros32, stride=1,
+         pad=0, dilation=1, use_bias=true)

Cross Correlation layer.

Image data should be stored in WHCN order (width, height, channels, batch). In other words, a 100 x 100 RGB image would be a 100 x 100 x 3 x 1 array, and a batch of 50 would be a 100 x 100 x 3 x 50 array. This has N = 2 spatial dimensions, and needs a kernel size like (5, 5), a 2-tuple of integers. To take convolutions along N feature dimensions, this layer expects as input an array with ndims(x) == N + 2, where size(x, N + 1) == in_chs is the number of input channels, and size(x, ndims(x)) is the number of observations in a batch.

Arguments

Keyword Arguments

Inputs

Returns

`,11),w={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},E=e('',1),M=[E],C=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),D=e('

Parameters

source

',4),v=e('

Dropout Layers

# Lux.AlphaDropoutType.
julia
AlphaDropout(p::Real)

AlphaDropout layer.

Arguments

Inputs

Returns

States

Call Lux.testmode to switch to test mode.

See also Dropout, VariationalHiddenDropout

source


# Lux.DropoutType.
julia
Dropout(p; dims=:)

Dropout layer.

Arguments

Keyword Arguments

Inputs

Returns

States

Call Lux.testmode to switch to test mode.

See also AlphaDropout, VariationalHiddenDropout

source


# Lux.VariationalHiddenDropoutType.
julia
VariationalHiddenDropout(p; dims=:)

VariationalHiddenDropout layer. The only difference from Dropout is that the mask is retained until Lux.update_state(l, :update_mask, Val(true)) is called.

Arguments

Keyword Arguments

Inputs

Returns

States

Call Lux.testmode to switch to test mode.

See also AlphaDropout, Dropout

source


Pooling Layers

# Lux.AdaptiveMaxPoolType.
julia
AdaptiveMaxPool(out::NTuple)

Adaptive Max Pooling layer. Calculates the necessary window size such that its output has size(y)[1:N] == out.

Arguments

Inputs

Returns

See also MaxPool, AdaptiveMeanPool.

source


# Lux.AdaptiveMeanPoolType.
julia
AdaptiveMeanPool(out::NTuple)

Adaptive Mean Pooling layer. Calculates the necessary window size such that its output has size(y)[1:N] == out.

Arguments

Inputs

Returns

See also MeanPool, AdaptiveMaxPool.

source


# Lux.GlobalMaxPoolType.
julia
GlobalMaxPool()

Global Max Pooling layer. Transforms (w,h,c,b)-shaped input into (1,1,c,b)-shaped output, by performing max pooling on the complete (w,h)-shaped feature maps.

Inputs

Returns

See also MaxPool, AdaptiveMaxPool, GlobalMeanPool

source


# Lux.GlobalMeanPoolType.
julia
GlobalMeanPool()

Global Mean Pooling layer. Transforms (w,h,c,b)-shaped input into (1,1,c,b)-shaped output, by performing mean pooling on the complete (w,h)-shaped feature maps.

Inputs

Returns

See also MeanPool, AdaptiveMeanPool, GlobalMaxPool

source


',17),Z={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},F=t("a",{id:"Lux.MaxPool",href:"#Lux.MaxPool"},"#",-1),A=t("b",null,[t("u",null,"Lux.MaxPool")],-1),V=t("i",null,"Type",-1),N=e('
julia
MaxPool(window::NTuple; pad=0, stride=window)

Max pooling layer, which replaces all pixels in a block of size window with the maximum value.

Arguments

Keyword Arguments

Inputs

Returns

',10),j={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},B={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},S=e('',1),R=[S],I=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),P=e('

See also Conv, MeanPool, GlobalMaxPool, AdaptiveMaxPool

source

',3),z=t("br",null,null,-1),O={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},G=t("a",{id:"Lux.MeanPool",href:"#Lux.MeanPool"},"#",-1),W=t("b",null,[t("u",null,"Lux.MeanPool")],-1),X=t("i",null,"Type",-1),U=e('
julia
MeanPool(window::NTuple; pad=0, stride=window)

Mean pooling layer, which replaces all pixels in a block of size window with the mean value.

Arguments

Keyword Arguments

Inputs

Returns

',10),q={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},K=e('',1),$=[K],Y=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),t1=e('

See also Conv, MaxPool, GlobalMeanPool, AdaptiveMeanPool

source

',3),a1=t("br",null,null,-1),e1=t("h2",{id:"Recurrent-Layers",tabindex:"-1"},[a("Recurrent Layers "),t("a",{class:"header-anchor",href:"#Recurrent-Layers","aria-label":'Permalink to "Recurrent Layers {#Recurrent-Layers}"'},"​")],-1),s1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},i1=t("a",{id:"Lux.GRUCell",href:"#Lux.GRUCell"},"#",-1),Q1=t("b",null,[t("u",null,"Lux.GRUCell")],-1),l1=t("i",null,"Type",-1),T1=e(`
julia
GRUCell((in_dims, out_dims)::Pair{<:Int,<:Int}; use_bias=true, train_state::Bool=false,
+        init_weight::Tuple{Function,Function,Function}=(glorot_uniform, glorot_uniform,
+                                                        glorot_uniform),
+        init_bias::Tuple{Function,Function,Function}=(zeros32, zeros32, zeros32),
+        init_state::Function=zeros32)

Gated Recurrent Unit (GRU) Cell

`,2),o1={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},n1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-5.146ex"},xmlns:"http://www.w3.org/2000/svg",width:"51.473ex",height:"11.422ex",role:"img",focusable:"false",viewBox:"0 -2774.4 22750.9 5048.7","aria-hidden":"true"},d1=e('',1),r1=[d1],p1=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[t("mtr",null,[t("mtd",null,[t("mi",null,"r")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"r")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"z")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"z")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"n")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"tanh"),t("mo",{"data-mjx-texclass":"NONE"},"⁡"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",null,"+"),t("mi",null,"r"),t("mo",null,"⋅"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{stretchy:"false"},")"),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mo",{stretchy:"false"},"("),t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"z"),t("mo",{stretchy:"false"},")"),t("mo",null,"⋅"),t("mi",null,"n"),t("mo",null,"+"),t("mi",null,"z"),t("mo",null,"⋅"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])])])])])])],-1),h1=e("

Arguments

Inputs

Returns

",5),m1=t("p",null,"Tuple containing",-1),c1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},g1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},u1=e('',1),k1=[u1],y1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),f1=t("code",null,"(out_dims, batch_size)",-1),L1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},x1=e('',1),_1=[x1],w1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),H1=t("li",null,[t("p",null,"Updated model state")],-1),E1=t("p",null,[t("strong",null,"Parameters")],-1),M1=t("code",null,"weight_i",-1),C1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},D1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"15.326ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6774.2 1000","aria-hidden":"true"},v1=e('',1),Z1=[v1],F1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),A1=t("code",null,"weight_h",-1),V1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"16.435ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 7264.2 1000","aria-hidden":"true"},j1=e('',1),B1=[j1],S1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),R1=t("code",null,"bias_i",-1),I1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.67ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1180.2 851.8","aria-hidden":"true"},z1=e('',1),O1=[z1],G1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])])])],-1),W1=t("code",null,"use_bias=false",-1),X1=t("code",null,"bias_h",-1),U1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"12.939ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 5719.2 1000","aria-hidden":"true"},J1=e('',1),K1=[J1],$1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),Y1=t("code",null,"use_bias=false",-1),t2=t("code",null,"hidden_state",-1),a2=t("code",null,"train_state=false",-1),e2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"12.939ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 5719.2 1000","aria-hidden":"true"},i2=e('',1),Q2=[i2],l2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),T2=t("p",null,[t("strong",null,"States")],-1),o2=t("ul",null,[t("li",null,[t("code",null,"rng"),a(": Controls the randomness (if any) in the initial state generation")])],-1),n2=t("p",null,[t("a",{href:"https://github.com/LuxDL/Lux.jl/blob/b45e6037be239361965386d26ebb1d675fc1560b/src/layers/recurrent.jl#L494",target:"_blank",rel:"noreferrer"},"source")],-1),d2=t("br",null,null,-1),r2={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},p2=t("a",{id:"Lux.LSTMCell",href:"#Lux.LSTMCell"},"#",-1),h2=t("b",null,[t("u",null,"Lux.LSTMCell")],-1),m2=t("i",null,"Type",-1),c2=e(`
julia
LSTMCell(in_dims => out_dims; use_bias::Bool=true, train_state::Bool=false,
+         train_memory::Bool=false,
+         init_weight=(glorot_uniform, glorot_uniform, glorot_uniform, glorot_uniform),
+         init_bias=(zeros32, zeros32, ones32, zeros32), init_state=zeros32,
+         init_memory=zeros32)

Long Short-Term (LSTM) Cell

`,2),g2={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},u2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-8.146ex"},xmlns:"http://www.w3.org/2000/svg",width:"40.257ex",height:"17.424ex",role:"img",focusable:"false",viewBox:"0 -4100.7 17793.6 7701.4","aria-hidden":"true"},k2=e('',1),y2=[k2],f2=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[t("mtr",null,[t("mtd",null,[t("mi",null,"i")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"i")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"i")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"f")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"f")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"f")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"f")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"g")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"t"),t("mi",null,"a"),t("mi",null,"n"),t("mi",null,"h"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"g")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"g")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"g")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"o")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"o")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"o")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"o")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"f"),t("mo",null,"⋅"),t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("mi",null,"i"),t("mo",null,"⋅"),t("mi",null,"g")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"o"),t("mo",null,"⋅"),t("mi",null,"t"),t("mi",null,"a"),t("mi",null,"n"),t("mi",null,"h"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])]),t("mo",{stretchy:"false"},")")])])])])],-1),L2=e("

Arguments

Inputs

Returns

",5),b2=t("p",null,"Tuple Containing",-1),x2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},w2=e('',1),H2=[w2],E2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),M2=t("code",null,"(out_dims, batch_size)",-1),C2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},D2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},v2=e('',1),Z2=[v2],F2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),A2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.018ex",height:"1.357ex",role:"img",focusable:"false",viewBox:"0 -442 1776.1 599.8","aria-hidden":"true"},N2=e('',1),j2=[N2],B2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),S2=t("li",null,[t("p",null,"Updated model state")],-1),R2=t("p",null,[t("strong",null,"Parameters")],-1),I2=t("code",null,"weight_i",-1),P2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},z2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.667ex"},xmlns:"http://www.w3.org/2000/svg",width:"19.753ex",height:"2.364ex",role:"img",focusable:"false",viewBox:"0 -750 8730.9 1045","aria-hidden":"true"},O2=e('',1),G2=[O2],W2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"i")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"f")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"g")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"o")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),X2=t("code",null,"weight_h",-1),U2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.667ex"},xmlns:"http://www.w3.org/2000/svg",width:"21.231ex",height:"2.364ex",role:"img",focusable:"false",viewBox:"0 -750 9384.3 1045","aria-hidden":"true"},J2=e('',1),K2=[J2],$2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"i")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"f")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"g")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"o")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),Y2=e("
  • bias: Bias vector (not present if use_bias=false)

  • hidden_state: Initial hidden state vector (not present if train_state=false)

  • memory: Initial memory vector (not present if train_memory=false)

  • ",3),t3=t("p",null,[t("strong",null,"States")],-1),a3=t("ul",null,[t("li",null,[t("code",null,"rng"),a(": Controls the randomness (if any) in the initial state generation")])],-1),e3=t("p",null,[t("a",{href:"https://github.com/LuxDL/Lux.jl/blob/b45e6037be239361965386d26ebb1d675fc1560b/src/layers/recurrent.jl#L308",target:"_blank",rel:"noreferrer"},"source")],-1),s3=t("br",null,null,-1),i3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},Q3=t("a",{id:"Lux.RNNCell",href:"#Lux.RNNCell"},"#",-1),l3=t("b",null,[t("u",null,"Lux.RNNCell")],-1),T3=t("i",null,"Type",-1),o3=e(`
    julia
    RNNCell(in_dims => out_dims, activation=tanh; bias::Bool=true,
    +        train_state::Bool=false, init_bias=zeros32, init_weight=glorot_uniform,
    +        init_state=ones32)

    An Elman RNNCell cell with activation (typically set to tanh or relu).

    `,2),n3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.65ex"},xmlns:"http://www.w3.org/2000/svg",width:"57.143ex",height:"2.347ex",role:"img",focusable:"false",viewBox:"0 -750 25257.3 1037.2","aria-hidden":"true"},r3=e('',1),p3=[r3],h3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])]),t("mo",null,"="),t("mi",null,"a"),t("mi",null,"c"),t("mi",null,"t"),t("mi",null,"i"),t("mi",null,"v"),t("mi",null,"a"),t("mi",null,"t"),t("mi",null,"i"),t("mi",null,"o"),t("mi",null,"n"),t("mo",{stretchy:"false"},"("),t("mi",null,"w"),t("mi",null,"e"),t("mi",null,"i"),t("mi",null,"g"),t("mi",null,"h"),t("msub",null,[t("mi",null,"t"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"h")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("mi",null,"w"),t("mi",null,"e"),t("mi",null,"i"),t("mi",null,"g"),t("mi",null,"h"),t("msub",null,[t("mi",null,"t"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"h")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("mi",null,"b"),t("mi",null,"i"),t("mi",null,"a"),t("mi",null,"s"),t("mo",{stretchy:"false"},")")])],-1),m3=e("

    Arguments

    Inputs

    Returns

    ",5),c3=t("p",null,"Tuple containing",-1),g3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},k3=e('',1),y3=[k3],f3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),L3=t("code",null,"(out_dims, batch_size)",-1),b3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},_3=e('',1),w3=[_3],H3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),E3=t("li",null,[t("p",null,"Updated model state")],-1),M3=e('

    Parameters

    States

    source

    ',5),C3=e(`
    # Lux.RecurrenceType.
    julia
    Recurrence(cell;
    +    ordering::AbstractTimeSeriesDataBatchOrdering=BatchLastIndex(),
    +    return_sequence::Bool=false)

    Wraps a recurrent cell (like RNNCell, LSTMCell, GRUCell) to automatically operate over a sequence of inputs.

    Warning

    This is completely distinct from Flux.Recur. It doesn't make the cell stateful, rather allows operating on an entire sequence of inputs at once. See StatefulRecurrentCell for functionality similar to Flux.Recur.

    Arguments

    Keyword Arguments

    Inputs

    Returns

    Parameters

    States

    Tip

    Frameworks like Tensorflow have special implementation of MultiRNNCell to handle sequentially composed RNN Cells. In Lux, one can simple stack multiple Recurrence blocks in a Chain to achieve the same.

    Chain(
    +    Recurrence(RNNCell(inputsize => latentsize); return_sequence=true),
    +    Recurrence(RNNCell(latentsize => latentsize); return_sequence=true),
    +    :
    +    x -> stack(x; dims=2)
    +)

    For some discussion on this topic, see https://github.com/LuxDL/Lux.jl/issues/472.

    source


    # Lux.StatefulRecurrentCellType.
    julia
    StatefulRecurrentCell(cell)

    Wraps a recurrent cell (like RNNCell, LSTMCell, GRUCell) and makes it stateful.

    Tip

    This is very similar to Flux.Recur

    To avoid undefined behavior, once the processing of a single sequence of data is complete, update the state with Lux.update_state(st, :carry, nothing).

    Arguments

    Inputs

    Returns

    Parameters

    States

    source


    Linear Layers

    # Lux.BilinearType.
    julia
    Bilinear((in1_dims, in2_dims) => out, activation=identity; init_weight=glorot_uniform,
    +         init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)
    +Bilinear(in12_dims => out, activation=identity; init_weight=glorot_uniform,
    +         init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)

    Create a fully connected layer between two inputs and an output, and otherwise similar to Dense. Its output, given vectors x & y, is another vector z with, for all i in 1:out:

    z[i] = activation(x' * W[i, :, :] * y + bias[i])

    If x and y are matrices, then each column of the output z = B(x, y) is of this form, with B the Bilinear layer.

    Arguments

    Keyword Arguments

    Input

    Returns

    Parameters

    source


    # Lux.DenseType.
    julia
    Dense(in_dims => out_dims, activation=identity; init_weight=glorot_uniform,
    +      init_bias=zeros32, use_bias::Bool=true, allow_fast_activation::Bool=true)

    Create a traditional fully connected layer, whose forward pass is given by: y = activation.(weight * x .+ bias)

    Arguments

    Keyword Arguments

    Input

    Returns

    Parameters

    source


    # Lux.EmbeddingType.
    julia
    Embedding(in_dims => out_dims; init_weight=randn32)

    A lookup table that stores embeddings of dimension out_dims for a vocabulary of size in_dims.

    This layer is often used to store word embeddings and retrieve them using indices.

    Warning

    Unlike Flux.Embedding, this layer does not support using OneHotArray as an input.

    Arguments

    Keyword Arguments

    Input

    Returns

    source


    # Lux.ScaleType.
    julia
    Scale(dims, activation=identity; init_weight=ones32, init_bias=zeros32, bias::Bool=true)

    Create a Sparsely Connected Layer with a very specific structure (only Diagonal Elements are non-zero). The forward pass is given by: y = activation.(weight .* x .+ bias)

    Arguments

    Keyword Arguments

    Input

    Returns

    Parameters

    source


    Misc. Helper Layers

    # Lux.FlattenLayerType.
    julia
    FlattenLayer(N = nothing)

    Flattens the passed array into a matrix.

    Arguments

    Inputs

    Returns

    source


    # Lux.MaxoutType.
    julia
    Maxout(layers...)
    +Maxout(; layers...)
    +Maxout(f::Function, n_alts::Int)

    This contains a number of internal layers, each of which receives the same input. Its output is the elementwise maximum of the the internal layers' outputs.

    Maxout over linear dense layers satisfies the univeral approximation theorem. See [1].

    See also Parallel to reduce with other operators.

    Arguments

    Inputs

    Returns

    Parameters

    States

    References

    [1] Goodfellow, Warde-Farley, Mirza, Courville & Bengio "Maxout Networks" https://arxiv.org/abs/1302.4389

    source


    # Lux.NoOpLayerType.
    julia
    NoOpLayer()

    As the name suggests does nothing but allows pretty printing of layers. Whatever input is passed is returned.

    source


    # Lux.ReshapeLayerType.
    julia
    ReshapeLayer(dims)

    Reshapes the passed array to have a size of (dims..., :)

    Arguments

    Inputs

    Returns

    source


    # Lux.SelectDimType.
    julia
    SelectDim(dim, i)

    Return a view of all the data of the input x where the index for dimension dim equals i. Equivalent to view(x,:,:,...,i,:,:,...) where i is in position d.

    Arguments

    Inputs

    Returns

    source


    # Lux.WrappedFunctionType.
    julia
    WrappedFunction(f)

    Wraps a stateless and parameter less function. Might be used when a function is added to Chain. For example, Chain(x -> relu.(x)) would not work and the right thing to do would be Chain((x, ps, st) -> (relu.(x), st)). An easier thing to do would be Chain(WrappedFunction(Base.Fix1(broadcast, relu)))

    Arguments

    Inputs

    Returns

    source


    Normalization Layers

    `,28),D3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},v3=t("a",{id:"Lux.BatchNorm",href:"#Lux.BatchNorm"},"#",-1),Z3=t("b",null,[t("u",null,"Lux.BatchNorm")],-1),F3=t("i",null,"Type",-1),A3=e(`
    julia
    BatchNorm(chs::Integer, activation=identity; init_bias=zeros32, init_scale=ones32,
    +          affine=true, track_stats=true, epsilon=1f-5, momentum=0.1f0,
    +          allow_fast_activation::Bool=true)

    Batch Normalization layer.

    `,2),V3=t("code",null,"BatchNorm",-1),N3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},j3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"23.059ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10192.1 891","aria-hidden":"true"},B3=e('',1),S3=[B3],R3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mi",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mi",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mi",null,"×"),t("mn",null,"1"),t("mi",null,"×"),t("msub",null,[t("mi",null,"D"),t("mi",null,"N")])])],-1),I3=e('

    Arguments

    Keyword Arguments

    Inputs

    Returns

    Parameters

    States

    Use Lux.testmode during inference.

    Example

    julia
    m = Chain(Dense(784 => 64), BatchNorm(64, relu), Dense(64 => 10), BatchNorm(10))

    Warning

    Passing a batch size of 1, during training will result in NaNs.

    See also BatchNorm, InstanceNorm, LayerNorm, WeightNorm

    source

    ',18),P3=e(`
    # Lux.GroupNormType.
    julia
    GroupNorm(chs::Integer, groups::Integer, activation=identity; init_bias=zeros32,
    +          init_scale=ones32, affine=true, epsilon=1f-5,
    +          allow_fast_activation::Bool=true)

    Group Normalization layer.

    Arguments

    Keyword Arguments

    Inputs

    Returns

    Parameters

    States

    Use Lux.testmode during inference.

    Example

    julia
    m = Chain(Dense(784 => 64), GroupNorm(64, 4, relu), Dense(64 => 10), GroupNorm(10, 5))

    See also GroupNorm, InstanceNorm, LayerNorm, WeightNorm

    source


    `,3),z3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},O3=t("a",{id:"Lux.InstanceNorm",href:"#Lux.InstanceNorm"},"#",-1),G3=t("b",null,[t("u",null,"Lux.InstanceNorm")],-1),W3=t("i",null,"Type",-1),X3=e(`
    julia
    InstanceNorm(chs::Integer, activation=identity; init_bias=zeros32, init_scale=ones32,
    +             affine=true, epsilon=1f-5, allow_fast_activation::Bool=true)

    Instance Normalization. For details see [1].

    `,2),U3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"22.72ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10042 891","aria-hidden":"true"},J3=e('',1),K3=[J3],$3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("mn",null,"1")])],-1),Y3=e('

    Arguments

    Keyword Arguments

    Inputs

    Returns

    Parameters

    States

    Use Lux.testmode during inference.

    Example

    julia
    m = Chain(Dense(784 => 64), InstanceNorm(64, relu), Dense(64 => 10), InstanceNorm(10, 5))

    References

    [1] Ulyanov, Dmitry, Andrea Vedaldi, and Victor Lempitsky. "Instance normalization: The missing ingredient for fast stylization." arXiv preprint arXiv:1607.08022 (2016).

    See also BatchNorm, GroupNorm, LayerNorm, WeightNorm

    source

    ',19),t4=t("br",null,null,-1),a4={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},e4=t("a",{id:"Lux.LayerNorm",href:"#Lux.LayerNorm"},"#",-1),s4=t("b",null,[t("u",null,"Lux.LayerNorm")],-1),i4=t("i",null,"Type",-1),Q4=e(`
    julia
    LayerNorm(shape::NTuple{N, Int}, activation=identity; epsilon=1f-5, dims=Colon(),
    +          affine::Bool=true, init_bias=zeros32, init_scale=ones32,)

    Computes mean and standard deviation over the whole input array, and uses these to normalize the whole array. Optionally applies an elementwise affine transformation afterwards.

    `,2),l4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.294ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 572 453","aria-hidden":"true"},o4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D465",d:"M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z",style:{"stroke-width":"3"}})])])],-1),n4=[o4],d4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"x")])],-1),r4={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},p4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.76ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.034ex",height:"6.063ex",role:"img",focusable:"false",viewBox:"0 -1460 11064.9 2680","aria-hidden":"true"},h4=e('',1),m4=[h4],c4=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"y"),t("mo",null,"="),t("mfrac",null,[t("mrow",null,[t("mi",null,"x"),t("mo",null,"−"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",{mathvariant:"double-struck"},"E")]),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]")]),t("msqrt",null,[t("mi",null,"V"),t("mi",null,"a"),t("mi",null,"r"),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]"),t("mo",null,"+"),t("mi",null,"ϵ")])]),t("mo",null,"∗"),t("mi",null,"γ"),t("mo",null,"+"),t("mi",null,"β")])],-1),g4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},k4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),y4=[k4],f4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),L4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},x4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),_4=[x4],w4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),H4=t("code",null,"affine=true",-1),E4=e('

    Warning

    As of v0.5.0, the doc used to say affine::Bool=false, but the code actually had affine::Bool=true as the default. Now the doc reflects the code, so please check whether your assumptions about the default (if made) were invalid.

    Arguments

    Keyword Arguments

    Inputs

    Returns

    Parameters

    source

    ',12),M4=t("br",null,null,-1),C4={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},D4=t("a",{id:"Lux.WeightNorm",href:"#Lux.WeightNorm"},"#",-1),v4=t("b",null,[t("u",null,"Lux.WeightNorm")],-1),Z4=t("i",null,"Type",-1),F4=e(`
    julia
    WeightNorm(layer::AbstractExplicitLayer, which_params::NTuple{N,Symbol},
    +           dims::Union{Tuple,Nothing}=nothing)

    Applies weight normalization to a parameter in the given layer.

    `,2),A4={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},V4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.172ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.071ex",height:"4.704ex",role:"img",focusable:"false",viewBox:"0 -1119 4451.6 2079","aria-hidden":"true"},N4=e('',1),j4=[N4],B4=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"w"),t("mo",null,"="),t("mi",null,"g"),t("mfrac",null,[t("mi",null,"v"),t("mrow",null,[t("mo",{"data-mjx-texclass":"ORD"},"∥"),t("mi",null,"v"),t("mo",{"data-mjx-texclass":"ORD"},"∥")])])])],-1),S4=e('

    Weight normalization is a reparameterization that decouples the magnitude of a weight tensor from its direction. This updates the parameters in which_params (e.g. weight) using two parameters: one specifying the magnitude (e.g. weight_g) and one specifying the direction (e.g. weight_v).

    Arguments

    Inputs

    Returns

    Parameters

    States

    source

    ',12),R4=e(`

    Upsampling

    # Lux.PixelShuffleFunction.
    julia
    PixelShuffle(r::Int)

    Pixel shuffling layer with upscale factor r. Usually used for generating higher resolution images while upscaling them.

    See NNlib.pixel_shuffle for more details.

    PixelShuffle is not a Layer, rather it returns a WrappedFunction with the function set to Base.Fix2(pixel_shuffle, r)

    Arguments

    Inputs

    Returns

    source


    # Lux.UpsampleType.
    julia
    Upsample(mode = :nearest; [scale, size]) 
    +Upsample(scale, mode = :nearest)

    Upsampling Layer.

    Layer Construction

    Option 1

    Exactly one of two keywords must be specified:

    Option 2

    Currently supported upsampling modes and corresponding NNlib's methods are:

    Inputs

    Returns

    source


    `,6);function I4(P4,z4,O4,G4,W4,X4){return i(),s("div",null,[T,t("div",o,[n,a(" "),d,a(" — "),r,a(". "),p,t("mjx-container",h,[(i(),s("svg",m,g)),u]),k]),y,t("div",f,[L,a(" "),b,a(" — "),x,a(". "),_,t("mjx-container",w,[(i(),s("svg",H,M)),C]),D]),v,t("div",Z,[F,a(" "),A,a(" — "),V,a(". "),N,t("mjx-container",j,[(i(),s("svg",B,R)),I]),P]),z,t("div",O,[G,a(" "),W,a(" — "),X,a(". "),U,t("mjx-container",q,[(i(),s("svg",J,$)),Y]),t1]),a1,e1,t("div",s1,[i1,a(" "),Q1,a(" — "),l1,a(". "),T1,t("mjx-container",o1,[(i(),s("svg",n1,r1)),p1]),h1,t("ul",null,[t("li",null,[m1,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",c1,[(i(),s("svg",g1,k1)),y1]),a(" of shape "),f1])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",L1,[(i(),s("svg",b1,_1)),w1])])])])]),H1]),E1,t("ul",null,[t("li",null,[t("p",null,[M1,a(": Concatenated Weights to map from input space "),t("mjx-container",C1,[(i(),s("svg",D1,Z1)),F1]),a(".")])]),t("li",null,[t("p",null,[A1,a(": Concatenated Weights to map from hidden space "),t("mjx-container",V1,[(i(),s("svg",N1,B1)),S1]),a(".")])]),t("li",null,[t("p",null,[R1,a(": Bias vector ("),t("mjx-container",I1,[(i(),s("svg",P1,O1)),G1]),a("; not present if "),W1,a(").")])]),t("li",null,[t("p",null,[X1,a(": Concatenated Bias vector for the hidden space "),t("mjx-container",U1,[(i(),s("svg",q1,K1)),$1]),a(" (not present if "),Y1,a(").")])]),t("li",null,[t("p",null,[t2,a(": Initial hidden state vector (not present if "),a2,a(") "),t("mjx-container",e2,[(i(),s("svg",s2,Q2)),l2]),a(".")])])]),T2,o2,n2]),d2,t("div",r2,[p2,a(" "),h2,a(" — "),m2,a(". "),c2,t("mjx-container",g2,[(i(),s("svg",u2,y2)),f2]),L2,t("ul",null,[t("li",null,[b2,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",x2,[(i(),s("svg",_2,H2)),E2]),a(" of shape "),M2])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",C2,[(i(),s("svg",D2,Z2)),F2]),a(" and new memory "),t("mjx-container",A2,[(i(),s("svg",V2,j2)),B2])])])])]),S2]),R2,t("ul",null,[t("li",null,[t("p",null,[I2,a(": Concatenated Weights to map from input space "),t("mjx-container",P2,[(i(),s("svg",z2,G2)),W2]),a(".")])]),t("li",null,[t("p",null,[X2,a(": Concatenated Weights to map from hidden space "),t("mjx-container",U2,[(i(),s("svg",q2,K2)),$2])])]),Y2]),t3,a3,e3]),s3,t("div",i3,[Q3,a(" "),l3,a(" — "),T3,a(". "),o3,t("p",null,[t("mjx-container",n3,[(i(),s("svg",d3,p3)),h3])]),m3,t("ul",null,[t("li",null,[c3,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",g3,[(i(),s("svg",u3,y3)),f3]),a(" of shape "),L3])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",b3,[(i(),s("svg",x3,w3)),H3])])])])]),E3]),M3]),C3,t("div",D3,[v3,a(" "),Z3,a(" — "),F3,a(". "),A3,t("p",null,[V3,a(" computes the mean and variance for each "),t("mjx-container",N3,[(i(),s("svg",j3,S3)),R3]),a(" input slice and normalises the input accordingly.")]),I3]),P3,t("div",z3,[O3,a(" "),G3,a(" — "),W3,a(". "),X3,t("p",null,[a("Instance Normalization computes the mean and variance for each "),t("mjx-container",U3,[(i(),s("svg",q3,K3)),$3]),a("` input slice and normalises the input accordingly.")]),Y3]),t4,t("div",a4,[e4,a(" "),s4,a(" — "),i4,a(". "),Q4,t("p",null,[a("Given an input array "),t("mjx-container",l4,[(i(),s("svg",T4,n4)),d4]),a(", this layer computes")]),t("mjx-container",r4,[(i(),s("svg",p4,m4)),c4]),t("p",null,[a("where "),t("mjx-container",g4,[(i(),s("svg",u4,y4)),f4]),a(" & "),t("mjx-container",L4,[(i(),s("svg",b4,_4)),w4]),a(" are trainable parameters if "),H4,a(".")]),E4]),M4,t("div",C4,[D4,a(" "),v4,a(" — "),Z4,a(". "),F4,t("mjx-container",A4,[(i(),s("svg",V4,j4)),B4]),S4]),R4])}const J4=Q(l,[["render",I4]]);export{q4 as __pageData,J4 as default}; diff --git a/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.lean.js b/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.lean.js new file mode 100644 index 000000000..a6103ffc0 --- /dev/null +++ b/v0.5.30/assets/api_Lux_layers.md.BLLg0WBY.lean.js @@ -0,0 +1 @@ +import{_ as Q,c as s,m as t,a,a4 as e,o as i}from"./chunks/framework.BfjuC5t1.js";const q4=JSON.parse('{"title":"Built-In Layers","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/layers.md","filePath":"api/Lux/layers.md","lastUpdated":null}'),l={name:"api/Lux/layers.md"},T=e("",17),o={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},n=t("a",{id:"Lux.Conv",href:"#Lux.Conv"},"#",-1),d=t("b",null,[t("u",null,"Lux.Conv")],-1),r=t("i",null,"Type",-1),p=e("",12),h={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},c=e("",1),g=[c],u=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),k=e("",4),y=e("",3),f={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},L=t("a",{id:"Lux.CrossCor",href:"#Lux.CrossCor"},"#",-1),b=t("b",null,[t("u",null,"Lux.CrossCor")],-1),x=t("i",null,"Type",-1),_=e("",11),w={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},E=e("",1),M=[E],C=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),D=e("",4),v=e("",17),Z={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},F=t("a",{id:"Lux.MaxPool",href:"#Lux.MaxPool"},"#",-1),A=t("b",null,[t("u",null,"Lux.MaxPool")],-1),V=t("i",null,"Type",-1),N=e("",10),j={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},B={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},S=e("",1),R=[S],I=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),P=e("",3),z=t("br",null,null,-1),O={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},G=t("a",{id:"Lux.MeanPool",href:"#Lux.MeanPool"},"#",-1),W=t("b",null,[t("u",null,"Lux.MeanPool")],-1),X=t("i",null,"Type",-1),U=e("",10),q={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.148ex"},xmlns:"http://www.w3.org/2000/svg",width:"45.995ex",height:"5.686ex",role:"img",focusable:"false",viewBox:"0 -1563.5 20329.9 2513","aria-hidden":"true"},K=e("",1),$=[K],Y=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("msub",null,[t("mi",null,"O"),t("mi",null,"i")]),t("mo",null,"="),t("mrow",{"data-mjx-texclass":"INNER"},[t("mo",{"data-mjx-texclass":"OPEN"},"⌊"),t("mfrac",null,[t("mrow",null,[t("msub",null,[t("mi",null,"I"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mi",null,"i")]),t("mo",null,"+"),t("msub",null,[t("mi",null,"p"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mo",{stretchy:"false"},"("),t("mi",null,"i"),t("mo",null,"+"),t("mi",null,"N"),t("mo",{stretchy:"false"},")"),t("mi",{mathvariant:"normal"},"%"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),t("mi",null,"p"),t("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|")])]),t("mo",null,"−"),t("msub",null,[t("mi",null,"d"),t("mi",null,"i")]),t("mo",null,"×"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"k"),t("mi",null,"i")]),t("mo",null,"−"),t("mn",null,"1"),t("mo",{stretchy:"false"},")")]),t("msub",null,[t("mi",null,"s"),t("mi",null,"i")])]),t("mo",null,"+"),t("mn",null,"1"),t("mo",{"data-mjx-texclass":"CLOSE"},"⌋")])])],-1),t1=e("",3),a1=t("br",null,null,-1),e1=t("h2",{id:"Recurrent-Layers",tabindex:"-1"},[a("Recurrent Layers "),t("a",{class:"header-anchor",href:"#Recurrent-Layers","aria-label":'Permalink to "Recurrent Layers {#Recurrent-Layers}"'},"​")],-1),s1={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},i1=t("a",{id:"Lux.GRUCell",href:"#Lux.GRUCell"},"#",-1),Q1=t("b",null,[t("u",null,"Lux.GRUCell")],-1),l1=t("i",null,"Type",-1),T1=e("",2),o1={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},n1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-5.146ex"},xmlns:"http://www.w3.org/2000/svg",width:"51.473ex",height:"11.422ex",role:"img",focusable:"false",viewBox:"0 -2774.4 22750.9 5048.7","aria-hidden":"true"},d1=e("",1),r1=[d1],p1=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[t("mtr",null,[t("mtd",null,[t("mi",null,"r")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"r")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"z")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"z")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"n")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"tanh"),t("mo",{"data-mjx-texclass":"NONE"},"⁡"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",null,"+"),t("mi",null,"r"),t("mo",null,"⋅"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{stretchy:"false"},")"),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mo",{stretchy:"false"},"("),t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"z"),t("mo",{stretchy:"false"},")"),t("mo",null,"⋅"),t("mi",null,"n"),t("mo",null,"+"),t("mi",null,"z"),t("mo",null,"⋅"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])])])])])])],-1),h1=e("",5),m1=t("p",null,"Tuple containing",-1),c1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},g1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},u1=e("",1),k1=[u1],y1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),f1=t("code",null,"(out_dims, batch_size)",-1),L1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},x1=e("",1),_1=[x1],w1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),H1=t("li",null,[t("p",null,"Updated model state")],-1),E1=t("p",null,[t("strong",null,"Parameters")],-1),M1=t("code",null,"weight_i",-1),C1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},D1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"15.326ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6774.2 1000","aria-hidden":"true"},v1=e("",1),Z1=[v1],F1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),A1=t("code",null,"weight_h",-1),V1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},N1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"16.435ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 7264.2 1000","aria-hidden":"true"},j1=e("",1),B1=[j1],S1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),R1=t("code",null,"bias_i",-1),I1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.67ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1180.2 851.8","aria-hidden":"true"},z1=e("",1),O1=[z1],G1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"n")])])])],-1),W1=t("code",null,"use_bias=false",-1),X1=t("code",null,"bias_h",-1),U1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"12.939ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 5719.2 1000","aria-hidden":"true"},J1=e("",1),K1=[J1],$1=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),Y1=t("code",null,"use_bias=false",-1),t2=t("code",null,"hidden_state",-1),a2=t("code",null,"train_state=false",-1),e2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"12.939ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 5719.2 1000","aria-hidden":"true"},i2=e("",1),Q2=[i2],l2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"r")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"z")])]),t("mo",null,","),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"n")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),T2=t("p",null,[t("strong",null,"States")],-1),o2=t("ul",null,[t("li",null,[t("code",null,"rng"),a(": Controls the randomness (if any) in the initial state generation")])],-1),n2=t("p",null,[t("a",{href:"https://github.com/LuxDL/Lux.jl/blob/b45e6037be239361965386d26ebb1d675fc1560b/src/layers/recurrent.jl#L494",target:"_blank",rel:"noreferrer"},"source")],-1),d2=t("br",null,null,-1),r2={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},p2=t("a",{id:"Lux.LSTMCell",href:"#Lux.LSTMCell"},"#",-1),h2=t("b",null,[t("u",null,"Lux.LSTMCell")],-1),m2=t("i",null,"Type",-1),c2=e("",2),g2={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},u2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-8.146ex"},xmlns:"http://www.w3.org/2000/svg",width:"40.257ex",height:"17.424ex",role:"img",focusable:"false",viewBox:"0 -4100.7 17793.6 7701.4","aria-hidden":"true"},k2=e("",1),y2=[k2],f2=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[t("mtr",null,[t("mtd",null,[t("mi",null,"i")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"i")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"i")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"f")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"f")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"f")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"f")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"g")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"t"),t("mi",null,"a"),t("mi",null,"n"),t("mi",null,"h"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"g")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"g")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"g")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("mi",null,"o")]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"σ"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"o")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"o")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("msub",null,[t("mi",null,"b"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"o")])]),t("mo",{stretchy:"false"},")")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"f"),t("mo",null,"⋅"),t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("mi",null,"i"),t("mo",null,"⋅"),t("mi",null,"g")])]),t("mtr",null,[t("mtd",null,[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])]),t("mtd",null,[t("mi"),t("mo",null,"="),t("mi",null,"o"),t("mo",null,"⋅"),t("mi",null,"t"),t("mi",null,"a"),t("mi",null,"n"),t("mi",null,"h"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])]),t("mo",{stretchy:"false"},")")])])])])],-1),L2=e("",5),b2=t("p",null,"Tuple Containing",-1),x2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},w2=e("",1),H2=[w2],E2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),M2=t("code",null,"(out_dims, batch_size)",-1),C2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},D2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},v2=e("",1),Z2=[v2],F2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),A2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.018ex",height:"1.357ex",role:"img",focusable:"false",viewBox:"0 -442 1776.1 599.8","aria-hidden":"true"},N2=e("",1),j2=[N2],B2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"c"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),S2=t("li",null,[t("p",null,"Updated model state")],-1),R2=t("p",null,[t("strong",null,"Parameters")],-1),I2=t("code",null,"weight_i",-1),P2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},z2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.667ex"},xmlns:"http://www.w3.org/2000/svg",width:"19.753ex",height:"2.364ex",role:"img",focusable:"false",viewBox:"0 -750 8730.9 1045","aria-hidden":"true"},O2=e("",1),G2=[O2],W2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"i")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"f")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"g")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"o")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),X2=t("code",null,"weight_h",-1),U2={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q2={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.667ex"},xmlns:"http://www.w3.org/2000/svg",width:"21.231ex",height:"2.364ex",role:"img",focusable:"false",viewBox:"0 -750 9384.3 1045","aria-hidden":"true"},J2=e("",1),K2=[J2],$2=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",{fence:"false",stretchy:"false"},"{"),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"i")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"f")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"g")])]),t("mo",null,","),t("msub",null,[t("mi",null,"W"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"o")])]),t("mo",{fence:"false",stretchy:"false"},"}")])],-1),Y2=e("",3),t3=t("p",null,[t("strong",null,"States")],-1),a3=t("ul",null,[t("li",null,[t("code",null,"rng"),a(": Controls the randomness (if any) in the initial state generation")])],-1),e3=t("p",null,[t("a",{href:"https://github.com/LuxDL/Lux.jl/blob/b45e6037be239361965386d26ebb1d675fc1560b/src/layers/recurrent.jl#L308",target:"_blank",rel:"noreferrer"},"source")],-1),s3=t("br",null,null,-1),i3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},Q3=t("a",{id:"Lux.RNNCell",href:"#Lux.RNNCell"},"#",-1),l3=t("b",null,[t("u",null,"Lux.RNNCell")],-1),T3=t("i",null,"Type",-1),o3=e("",2),n3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.65ex"},xmlns:"http://www.w3.org/2000/svg",width:"57.143ex",height:"2.347ex",role:"img",focusable:"false",viewBox:"0 -750 25257.3 1037.2","aria-hidden":"true"},r3=e("",1),p3=[r3],h3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])]),t("mo",null,"="),t("mi",null,"a"),t("mi",null,"c"),t("mi",null,"t"),t("mi",null,"i"),t("mi",null,"v"),t("mi",null,"a"),t("mi",null,"t"),t("mi",null,"i"),t("mi",null,"o"),t("mi",null,"n"),t("mo",{stretchy:"false"},"("),t("mi",null,"w"),t("mi",null,"e"),t("mi",null,"i"),t("mi",null,"g"),t("mi",null,"h"),t("msub",null,[t("mi",null,"t"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"h")])]),t("mo",null,"×"),t("mi",null,"x"),t("mo",null,"+"),t("mi",null,"w"),t("mi",null,"e"),t("mi",null,"i"),t("mi",null,"g"),t("mi",null,"h"),t("msub",null,[t("mi",null,"t"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"h"),t("mi",null,"h")])]),t("mo",null,"×"),t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"p"),t("mi",null,"r"),t("mi",null,"e"),t("mi",null,"v")])]),t("mo",null,"+"),t("mi",null,"b"),t("mi",null,"i"),t("mi",null,"a"),t("mi",null,"s"),t("mo",{stretchy:"false"},")")])],-1),m3=e("",5),c3=t("p",null,"Tuple containing",-1),g3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},k3=e("",1),y3=[k3],f3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),L3=t("code",null,"(out_dims, batch_size)",-1),b3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.357ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.342ex",height:"1.927ex",role:"img",focusable:"false",viewBox:"0 -694 1919.1 851.8","aria-hidden":"true"},_3=e("",1),w3=[_3],H3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"h"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"n"),t("mi",null,"e"),t("mi",null,"w")])])])],-1),E3=t("li",null,[t("p",null,"Updated model state")],-1),M3=e("",5),C3=e("",28),D3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},v3=t("a",{id:"Lux.BatchNorm",href:"#Lux.BatchNorm"},"#",-1),Z3=t("b",null,[t("u",null,"Lux.BatchNorm")],-1),F3=t("i",null,"Type",-1),A3=e("",2),V3=t("code",null,"BatchNorm",-1),N3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},j3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"23.059ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10192.1 891","aria-hidden":"true"},B3=e("",1),S3=[B3],R3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mi",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mi",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mi",null,"×"),t("mn",null,"1"),t("mi",null,"×"),t("msub",null,[t("mi",null,"D"),t("mi",null,"N")])])],-1),I3=e("",18),P3=e("",3),z3={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},O3=t("a",{id:"Lux.InstanceNorm",href:"#Lux.InstanceNorm"},"#",-1),G3=t("b",null,[t("u",null,"Lux.InstanceNorm")],-1),W3=t("i",null,"Type",-1),X3=e("",2),U3={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q3={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.471ex"},xmlns:"http://www.w3.org/2000/svg",width:"22.72ex",height:"2.016ex",role:"img",focusable:"false",viewBox:"0 -683 10042 891","aria-hidden":"true"},J3=e("",1),K3=[J3],$3=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"D"),t("mn",null,"1")]),t("mo",null,"×"),t("mo",null,"."),t("mo",null,"."),t("mo",null,"."),t("mo",null,"×"),t("msub",null,[t("mi",null,"D"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"N"),t("mo",null,"−"),t("mn",null,"2")])]),t("mo",null,"×"),t("mn",null,"1"),t("mo",null,"×"),t("mn",null,"1")])],-1),Y3=e("",19),t4=t("br",null,null,-1),a4={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},e4=t("a",{id:"Lux.LayerNorm",href:"#Lux.LayerNorm"},"#",-1),s4=t("b",null,[t("u",null,"Lux.LayerNorm")],-1),i4=t("i",null,"Type",-1),Q4=e("",2),l4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},T4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.294ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 572 453","aria-hidden":"true"},o4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D465",d:"M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z",style:{"stroke-width":"3"}})])])],-1),n4=[o4],d4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"x")])],-1),r4={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},p4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.76ex"},xmlns:"http://www.w3.org/2000/svg",width:"25.034ex",height:"6.063ex",role:"img",focusable:"false",viewBox:"0 -1460 11064.9 2680","aria-hidden":"true"},h4=e("",1),m4=[h4],c4=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"y"),t("mo",null,"="),t("mfrac",null,[t("mrow",null,[t("mi",null,"x"),t("mo",null,"−"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",{mathvariant:"double-struck"},"E")]),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]")]),t("msqrt",null,[t("mi",null,"V"),t("mi",null,"a"),t("mi",null,"r"),t("mo",{stretchy:"false"},"["),t("mi",null,"x"),t("mo",{stretchy:"false"},"]"),t("mo",null,"+"),t("mi",null,"ϵ")])]),t("mo",null,"∗"),t("mi",null,"γ"),t("mo",null,"+"),t("mi",null,"β")])],-1),g4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.489ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.229ex",height:"1.486ex",role:"img",focusable:"false",viewBox:"0 -441 543 657","aria-hidden":"true"},k4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FE",d:"M31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249Z",style:{"stroke-width":"3"}})])])],-1),y4=[k4],f4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"γ")])],-1),L4={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.281ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -705 566 899","aria-hidden":"true"},x4=t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D6FD",d:"M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z",style:{"stroke-width":"3"}})])])],-1),_4=[x4],w4=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"β")])],-1),H4=t("code",null,"affine=true",-1),E4=e("",12),M4=t("br",null,null,-1),C4={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},D4=t("a",{id:"Lux.WeightNorm",href:"#Lux.WeightNorm"},"#",-1),v4=t("b",null,[t("u",null,"Lux.WeightNorm")],-1),Z4=t("i",null,"Type",-1),F4=e("",2),A4={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},V4={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.172ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.071ex",height:"4.704ex",role:"img",focusable:"false",viewBox:"0 -1119 4451.6 2079","aria-hidden":"true"},N4=e("",1),j4=[N4],B4=t("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[t("mi",null,"w"),t("mo",null,"="),t("mi",null,"g"),t("mfrac",null,[t("mi",null,"v"),t("mrow",null,[t("mo",{"data-mjx-texclass":"ORD"},"∥"),t("mi",null,"v"),t("mo",{"data-mjx-texclass":"ORD"},"∥")])])])],-1),S4=e("",12),R4=e("",6);function I4(P4,z4,O4,G4,W4,X4){return i(),s("div",null,[T,t("div",o,[n,a(" "),d,a(" — "),r,a(". "),p,t("mjx-container",h,[(i(),s("svg",m,g)),u]),k]),y,t("div",f,[L,a(" "),b,a(" — "),x,a(". "),_,t("mjx-container",w,[(i(),s("svg",H,M)),C]),D]),v,t("div",Z,[F,a(" "),A,a(" — "),V,a(". "),N,t("mjx-container",j,[(i(),s("svg",B,R)),I]),P]),z,t("div",O,[G,a(" "),W,a(" — "),X,a(". "),U,t("mjx-container",q,[(i(),s("svg",J,$)),Y]),t1]),a1,e1,t("div",s1,[i1,a(" "),Q1,a(" — "),l1,a(". "),T1,t("mjx-container",o1,[(i(),s("svg",n1,r1)),p1]),h1,t("ul",null,[t("li",null,[m1,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",c1,[(i(),s("svg",g1,k1)),y1]),a(" of shape "),f1])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",L1,[(i(),s("svg",b1,_1)),w1])])])])]),H1]),E1,t("ul",null,[t("li",null,[t("p",null,[M1,a(": Concatenated Weights to map from input space "),t("mjx-container",C1,[(i(),s("svg",D1,Z1)),F1]),a(".")])]),t("li",null,[t("p",null,[A1,a(": Concatenated Weights to map from hidden space "),t("mjx-container",V1,[(i(),s("svg",N1,B1)),S1]),a(".")])]),t("li",null,[t("p",null,[R1,a(": Bias vector ("),t("mjx-container",I1,[(i(),s("svg",P1,O1)),G1]),a("; not present if "),W1,a(").")])]),t("li",null,[t("p",null,[X1,a(": Concatenated Bias vector for the hidden space "),t("mjx-container",U1,[(i(),s("svg",q1,K1)),$1]),a(" (not present if "),Y1,a(").")])]),t("li",null,[t("p",null,[t2,a(": Initial hidden state vector (not present if "),a2,a(") "),t("mjx-container",e2,[(i(),s("svg",s2,Q2)),l2]),a(".")])])]),T2,o2,n2]),d2,t("div",r2,[p2,a(" "),h2,a(" — "),m2,a(". "),c2,t("mjx-container",g2,[(i(),s("svg",u2,y2)),f2]),L2,t("ul",null,[t("li",null,[b2,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",x2,[(i(),s("svg",_2,H2)),E2]),a(" of shape "),M2])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",C2,[(i(),s("svg",D2,Z2)),F2]),a(" and new memory "),t("mjx-container",A2,[(i(),s("svg",V2,j2)),B2])])])])]),S2]),R2,t("ul",null,[t("li",null,[t("p",null,[I2,a(": Concatenated Weights to map from input space "),t("mjx-container",P2,[(i(),s("svg",z2,G2)),W2]),a(".")])]),t("li",null,[t("p",null,[X2,a(": Concatenated Weights to map from hidden space "),t("mjx-container",U2,[(i(),s("svg",q2,K2)),$2])])]),Y2]),t3,a3,e3]),s3,t("div",i3,[Q3,a(" "),l3,a(" — "),T3,a(". "),o3,t("p",null,[t("mjx-container",n3,[(i(),s("svg",d3,p3)),h3])]),m3,t("ul",null,[t("li",null,[c3,t("ul",null,[t("li",null,[t("p",null,[a("Output "),t("mjx-container",g3,[(i(),s("svg",u3,y3)),f3]),a(" of shape "),L3])]),t("li",null,[t("p",null,[a("Tuple containing new hidden state "),t("mjx-container",b3,[(i(),s("svg",x3,w3)),H3])])])])]),E3]),M3]),C3,t("div",D3,[v3,a(" "),Z3,a(" — "),F3,a(". "),A3,t("p",null,[V3,a(" computes the mean and variance for each "),t("mjx-container",N3,[(i(),s("svg",j3,S3)),R3]),a(" input slice and normalises the input accordingly.")]),I3]),P3,t("div",z3,[O3,a(" "),G3,a(" — "),W3,a(". "),X3,t("p",null,[a("Instance Normalization computes the mean and variance for each "),t("mjx-container",U3,[(i(),s("svg",q3,K3)),$3]),a("` input slice and normalises the input accordingly.")]),Y3]),t4,t("div",a4,[e4,a(" "),s4,a(" — "),i4,a(". "),Q4,t("p",null,[a("Given an input array "),t("mjx-container",l4,[(i(),s("svg",T4,n4)),d4]),a(", this layer computes")]),t("mjx-container",r4,[(i(),s("svg",p4,m4)),c4]),t("p",null,[a("where "),t("mjx-container",g4,[(i(),s("svg",u4,y4)),f4]),a(" & "),t("mjx-container",L4,[(i(),s("svg",b4,_4)),w4]),a(" are trainable parameters if "),H4,a(".")]),E4]),M4,t("div",C4,[D4,a(" "),v4,a(" — "),Z4,a(". "),F4,t("mjx-container",A4,[(i(),s("svg",V4,j4)),B4]),S4]),R4])}const J4=Q(l,[["render",I4]]);export{q4 as __pageData,J4 as default}; diff --git a/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.js b/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.js new file mode 100644 index 000000000..970d58807 --- /dev/null +++ b/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.js @@ -0,0 +1,25 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.BfjuC5t1.js";const E=JSON.parse('{"title":"Switching between Deep Learning Frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/switching_frameworks.md","filePath":"api/Lux/switching_frameworks.md","lastUpdated":null}'),t={name:"api/Lux/switching_frameworks.md"},l=e(`

    Switching between Deep Learning Frameworks

    Flux Models to Lux Models

    Flux.jl has been around in the Julia ecosystem for a long time and has a large userbase, hence we provide a way to convert Flux models to Lux models.

    Tip

    Accessing these functions require manually loading Flux, i.e., using Flux must be present somewhere in the code for these to be used.

    # Adapt.adaptMethod.
    julia
    Adapt.adapt(from::FromFluxAdaptor, L)

    Adapt a Flux model L to Lux model. See FromFluxAdaptor for more details.

    source


    # Lux.FromFluxAdaptorType.
    julia
    FromFluxAdaptor(preserve_ps_st::Bool=false, force_preserve::Bool=false)

    Convert a Flux Model to Lux Model.

    Warning

    This always ingores the active field of some of the Flux layers. This is almost never going to be supported.

    Keyword Arguments

    Example

    julia
    import Flux
    +using Adapt, Lux, Metalhead, Random
    +
    +m = ResNet(18)
    +m2 = adapt(FromFluxAdaptor(), m.layers) # or FromFluxAdaptor()(m.layers)
    +
    +x = randn(Float32, 224, 224, 3, 1);
    +
    +ps, st = Lux.setup(Random.default_rng(), m2);
    +
    +m2(x, ps, st)

    source


    # Lux.FluxLayerType.
    julia
    FluxLayer(layer)

    Serves as a compatibility layer between Flux and Lux. This uses Optimisers.destructure API internally.

    Warning

    Lux was written to overcome the limitations of destructure + Flux. It is recommended to rewrite your l in Lux instead of using this layer.

    Warning

    Introducing this Layer in your model will lead to type instabilities, given the way Optimisers.destructure works.

    Arguments

    Parameters

    source


    Lux Models to Simple Chains

    SimpleChains.jl provides a way to train Small Neural Networks really fast on CPUs. See this blog post for more details. This section describes how to convert Lux models to SimpleChains models while preserving the layer interface.

    Tip

    Accessing these functions require manually loading SimpleChains, i.e., using SimpleChains must be present somewhere in the code for these to be used.

    # Adapt.adaptMethod.
    julia
    Adapt.adapt(from::ToSimpleChainsAdaptor, L::AbstractExplicitLayer)

    Adapt a Flux model to Lux model. See ToSimpleChainsAdaptor for more details.

    source


    # Lux.ToSimpleChainsAdaptorType.
    julia
    ToSimpleChainsAdaptor()

    Adaptor for converting a Lux Model to SimpleChains. The returned model is still a Lux model, and satisfies the AbstractExplicitLayer interfacem but all internal calculations are performed using SimpleChains.

    Warning

    There is no way to preserve trained parameters and states when converting to SimpleChains.jl.

    Warning

    Any kind of initialization function is not preserved when converting to SimpleChains.jl.

    Arguments

    Example

    julia
    import SimpleChains: static
    +using Adapt, Lux, Random
    +
    +lux_model = Chain(Conv((5, 5), 1 => 6, relu), MaxPool((2, 2)),
    +    Conv((5, 5), 6 => 16, relu), MaxPool((2, 2)), FlattenLayer(3),
    +    Chain(Dense(256 => 128, relu), Dense(128 => 84, relu), Dense(84 => 10)))
    +
    +adaptor = ToSimpleChainsAdaptor((static(28), static(28), static(1)))
    +
    +simple_chains_model = adapt(adaptor, lux_model) # or adaptor(lux_model)
    +
    +ps, st = Lux.setup(Random.default_rng(), simple_chains_model)
    +x = randn(Float32, 28, 28, 1, 1)
    +
    +simple_chains_model(x, ps, st)

    source


    # Lux.SimpleChainsLayerType.
    julia
    SimpleChainsLayer(layer)

    Wraps a SimpleChains layer into a Lux layer. All operations are performed using SimpleChains but the layer satisfies the AbstractExplicitLayer interface.

    Arguments

    source


    `,19),n=[l];function p(h,r,k,d,o,c){return a(),i("div",null,n)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; diff --git a/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.lean.js b/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.lean.js new file mode 100644 index 000000000..43d3ef818 --- /dev/null +++ b/v0.5.30/assets/api_Lux_switching_frameworks.md.D8TUetx8.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.BfjuC5t1.js";const E=JSON.parse('{"title":"Switching between Deep Learning Frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/switching_frameworks.md","filePath":"api/Lux/switching_frameworks.md","lastUpdated":null}'),t={name:"api/Lux/switching_frameworks.md"},l=e("",19),n=[l];function p(h,r,k,d,o,c){return a(),i("div",null,n)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; diff --git a/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.js b/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.js new file mode 100644 index 000000000..671034510 --- /dev/null +++ b/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.js @@ -0,0 +1,3 @@ +import{_ as e,c as i,o as a,a4 as t}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"Utilities","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/utilities.md","filePath":"api/Lux/utilities.md","lastUpdated":null}'),s={name:"api/Lux/utilities.md"},l=t(`

    Utilities

    Index

    Device Management / Data Transfer

    # Lux.cpuFunction.
    julia
    cpu(x)

    Transfer x to CPU.

    Warning

    This function has been deprecated. Use cpu_device instead.

    source


    # Lux.gpuFunction.
    julia
    gpu(x)

    Transfer x to GPU determined by the backend set using Lux.gpu_backend!.

    Warning

    This function has been deprecated. Use gpu_device instead. Using this function inside performance critical code will cause massive slowdowns due to type inference failure.

    source


    Warning

    For detailed API documentation on Data Transfer check out the LuxDeviceUtils.jl

    Weight Initialization

    Warning

    For API documentation on Initialization check out the WeightInitializers.jl

    Miscellaneous Utilities

    # Lux.foldl_initFunction.
    julia
    foldl_init(op, x)
    +foldl_init(op, x, init)

    Exactly same as foldl(op, x; init) in the forward pass. But, gives gradients wrt init in the backward pass.

    source


    # Lux.istrainingFunction.
    julia
    istraining(::Val{training})
    +istraining(st::NamedTuple)

    Returns true if training is true or if st contains a training field with value true. Else returns false.

    Method undefined if st.training is not of type Val.

    source


    # Lux.multigateFunction.
    julia
    multigate(x::AbstractArray, ::Val{N})

    Split up x into N equally sized chunks (along dimension 1).

    source


    Updating Floating Point Precision

    By default, Lux uses Float32 for all parameters and states. To update the precision simply pass the parameters / states / arrays into one of the following functions.

    # Lux.f16Function.
    julia
    f16(m)

    Converts the eltype of m floating point values to Float16. Recurses into structs marked with Functors.@functor.

    source


    # Lux.f32Function.
    julia
    f32(m)

    Converts the eltype of m floating point values to Float32. Recurses into structs marked with Functors.@functor.

    source


    # Lux.f64Function.
    julia
    f64(m)

    Converts the eltype of m floating point values to Float64. Recurses into structs marked with Functors.@functor.

    source


    Stateful Layer

    # Lux.StatefulLuxLayerType.
    julia
    StatefulLuxLayer(model, ps, st; st_fixed_type = Val(true))

    Warning

    This is not a Lux.AbstractExplicitLayer

    A convenience wrapper over Lux layers which stores the parameters and states internally. Most users should not be using this version. This comes handy when Lux internally uses the @compact to construct models and in SciML codebases where propagating state might involving Boxing.

    For a motivating example, see the Neural ODE tutorial.

    Arguments

    Keyword Arguments

    Inputs

    Outputs

    source


    Truncated Stacktraces

    # Lux.disable_stacktrace_truncation!Function.
    julia
    disable_stacktrace_truncation!(; disable::Bool=true)

    An easy way to update TruncatedStacktraces.VERBOSE without having to load it manually.

    Effectively does TruncatedStacktraces.VERBOSE[] = disable

    source


    `,32),o=[l];function r(d,n,c,p,u,h){return a(),i("div",null,o)}const g=e(s,[["render",r]]);export{k as __pageData,g as default}; diff --git a/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.lean.js b/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.lean.js new file mode 100644 index 000000000..4fab30bdc --- /dev/null +++ b/v0.5.30/assets/api_Lux_utilities.md.Dh0D4iq-.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as a,a4 as t}from"./chunks/framework.BfjuC5t1.js";const k=JSON.parse('{"title":"Utilities","description":"","frontmatter":{},"headers":[],"relativePath":"api/Lux/utilities.md","filePath":"api/Lux/utilities.md","lastUpdated":null}'),s={name:"api/Lux/utilities.md"},l=t("",32),o=[l];function r(d,n,c,p,u,h){return a(),i("div",null,o)}const g=e(s,[["render",r]]);export{k as __pageData,g as default}; diff --git a/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.js b/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.js new file mode 100644 index 000000000..ccede3d2b --- /dev/null +++ b/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.js @@ -0,0 +1,18 @@ +import{_ as s,c as i,o as e,a4 as a}from"./chunks/framework.BfjuC5t1.js";const u=JSON.parse('{"title":"LuxTestUtils","description":"","frontmatter":{},"headers":[],"relativePath":"api/Testing_Functionality/LuxTestUtils.md","filePath":"api/Testing_Functionality/LuxTestUtils.md","lastUpdated":null}'),t={name:"api/Testing_Functionality/LuxTestUtils.md"},n=a(`

    LuxTestUtils

    Warning

    This is a testing package. Hence, we don't use features like weak dependencies to reduce load times. It is recommended that you exclusively use this package for testing and not add a dependency to it in your main package Project.toml.

    Implements utilities for testing gradient correctness and dynamic dispatch of Lux.jl models.

    Index

    Testing using JET.jl

    # LuxTestUtils.@jetMacro.
    julia
    @jet f(args...) call_broken=false opt_broken=false

    Run JET tests on the function f with the arguments args.... If JET fails to compile or julia version is < 1.7, then the macro will be a no-op.

    Keyword Arguments

    All additional arguments will be forwarded to @JET.test_call and @JET.test_opt.

    TIP

    Instead of specifying target_modules with every call, you can set preferences for target_modules using Preferences.jl. For example, to set target_modules to (Lux, LuxLib) we can run:

    julia
    using Preferences
    +
    +set_preferences!(Base.UUID("ac9de150-d08f-4546-94fb-7472b5760531"),
    +    "target_modules" => ["Lux", "LuxLib"])

    Example

    julia
    using LuxTestUtils
    +
    +@testset "Showcase JET Testing" begin
    +    @jet sum([1, 2, 3]) target_modules=(Base, Core)
    +
    +    @jet sum(1, 1) target_modules=(Base, Core) opt_broken=true
    +end

    source


    Gradient Correctness

    # LuxTestUtils.@test_gradientsMacro.
    julia
    @test_gradients f args... [kwargs...]

    Compare the gradients computed by Zygote.jl (Reverse Mode AD) against:

    TIP

    This function is completely compatible with Test.jl

    Arguments

    Keyword Arguments

    Keyword Arguments for check_approx

    Example

    julia
    using LuxTestUtils
    +
    +x = randn(10)
    +
    +@testset "Showcase Gradient Testing" begin
    +    @test_gradients sum abs2 x
    +
    +    @test_gradients prod x
    +end

    source


    `,11),l=[n];function r(p,o,d,h,k,c){return e(),i("div",null,l)}const E=s(t,[["render",r]]);export{u as __pageData,E as default}; diff --git a/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.lean.js b/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.lean.js new file mode 100644 index 000000000..77b29ee7d --- /dev/null +++ b/v0.5.30/assets/api_Testing_Functionality_LuxTestUtils.md.DiE0Lkt7.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as e,a4 as a}from"./chunks/framework.BfjuC5t1.js";const u=JSON.parse('{"title":"LuxTestUtils","description":"","frontmatter":{},"headers":[],"relativePath":"api/Testing_Functionality/LuxTestUtils.md","filePath":"api/Testing_Functionality/LuxTestUtils.md","lastUpdated":null}'),t={name:"api/Testing_Functionality/LuxTestUtils.md"},n=a("",11),l=[n];function r(p,o,d,h,k,c){return e(),i("div",null,l)}const E=s(t,[["render",r]]);export{u as __pageData,E as default}; diff --git a/v0.5.30/assets/app.DXm91Kyx.js b/v0.5.30/assets/app.DXm91Kyx.js new file mode 100644 index 000000000..a7a0aef8d --- /dev/null +++ b/v0.5.30/assets/app.DXm91Kyx.js @@ -0,0 +1,7 @@ +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = [] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} +import{j as o,a8 as p,a9 as u,aa as l,ab as c,ac as f,ad as d,ae as m,af as h,ag as g,ah as A,Y as P,d as _,u as v,l as R,z as w,ai as y,aj as C,ak as E,a7 as b}from"./chunks/framework.BfjuC5t1.js";import{R as T}from"./chunks/theme.BUqgOrlt.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(T),S=_({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return R(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&y(),C(),E(),s.setup&&s.setup(),()=>b(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=L(),a=D();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return h(S)}function L(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),__vite__mapDeps([]))),o&&(e=!1),r},s.NotFound)}o&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{j as createApp}; diff --git a/v0.5.30/assets/chunks/@localSearchIndexroot.C58gNy8P.js b/v0.5.30/assets/chunks/@localSearchIndexroot.C58gNy8P.js new file mode 100644 index 000000000..5091d7a4d --- /dev/null +++ b/v0.5.30/assets/chunks/@localSearchIndexroot.C58gNy8P.js @@ -0,0 +1 @@ +const e='{"documentCount":181,"nextId":181,"documentIds":{"0":"/v0.5.30/api/Accelerator_Support/LuxAMDGPU#LuxAMDGPU","1":"/v0.5.30/api/Accelerator_Support/LuxAMDGPU#Index","2":"/v0.5.30/api/Accelerator_Support/LuxAMDGPU#API","3":"/v0.5.30/api/Accelerator_Support/LuxCUDA#LuxCUDA","4":"/v0.5.30/api/Accelerator_Support/LuxCUDA#Index","5":"/v0.5.30/api/Accelerator_Support/LuxCUDA#API-Reference","6":"/v0.5.30/api/Accelerator_Support/LuxDeviceUtils#LuxDeviceUtils-API","7":"/v0.5.30/api/Accelerator_Support/LuxDeviceUtils#Index","8":"/v0.5.30/api/Accelerator_Support/LuxDeviceUtils#Preferences","9":"/v0.5.30/api/Accelerator_Support/LuxDeviceUtils#Data-Transfer","10":"/v0.5.30/api/Accelerator_Support/LuxDeviceUtils#Miscellaneous","11":"/v0.5.30/api/Building_Blocks/LuxCore#LuxCore","12":"/v0.5.30/api/Building_Blocks/LuxCore#Index","13":"/v0.5.30/api/Building_Blocks/LuxCore#Abstract-Types","14":"/v0.5.30/api/Building_Blocks/LuxCore#General","15":"/v0.5.30/api/Building_Blocks/LuxCore#Parameters","16":"/v0.5.30/api/Building_Blocks/LuxCore#States","17":"/v0.5.30/api/Building_Blocks/LuxCore#Layer-size","18":"/v0.5.30/api/Building_Blocks/LuxLib#LuxLib","19":"/v0.5.30/api/Building_Blocks/LuxLib#Index","20":"/v0.5.30/api/Building_Blocks/LuxLib#Dropout","21":"/v0.5.30/api/Building_Blocks/LuxLib#Normalization","22":"/v0.5.30/api/Building_Blocks/WeightInitializers#WeightInitializers-API","23":"/v0.5.30/api/Building_Blocks/WeightInitializers#Index","24":"/v0.5.30/api/Building_Blocks/WeightInitializers#API-Reference","25":"/v0.5.30/api/Building_Blocks/WeightInitializers#Main-Functions","26":"/v0.5.30/api/Building_Blocks/WeightInitializers#Commonly-Used-Wrappers","27":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Boltz","28":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Index","29":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Computer-Vision-Models","30":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Classification-Models:-Native-Lux-Models","31":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Building-Blocks","32":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Non-Public-API","33":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Classification-Models:-Imported-from-Metalhead.jl","34":"/v0.5.30/api/Domain_Specific_Modeling/Boltz#Preprocessing","35":"/v0.5.30/api/Lux/contrib#Experimental-Features","36":"/v0.5.30/api/Lux/contrib#Index","37":"/v0.5.30/api/Lux/contrib#Training","38":"/v0.5.30/api/Lux/contrib#Parameter-Freezing","39":"/v0.5.30/api/Lux/contrib#Map-over-Layer","40":"/v0.5.30/api/Lux/contrib#Debugging-Functionality","41":"/v0.5.30/api/Lux/contrib#Tied-Parameters","42":"/v0.5.30/api/Lux/contrib#Compact-Layer-API","43":"/v0.5.30/api/Lux/switching_frameworks#Switching-between-Deep-Learning-Frameworks","44":"/v0.5.30/api/Lux/switching_frameworks#flux-to-lux-migrate-api","45":"/v0.5.30/api/Lux/switching_frameworks#Lux-Models-to-Simple-Chains","46":"/v0.5.30/api/Lux/layers#Built-In-Layers","47":"/v0.5.30/api/Lux/layers#Index","48":"/v0.5.30/api/Lux/layers#Containers","49":"/v0.5.30/api/Lux/layers#Convolutional-Layers","50":"/v0.5.30/api/Lux/layers#Dropout-Layers","51":"/v0.5.30/api/Lux/layers#Pooling-Layers","52":"/v0.5.30/api/Lux/layers#Recurrent-Layers","53":"/v0.5.30/api/Lux/layers#Linear-Layers","54":"/v0.5.30/api/Lux/layers#Misc.-Helper-Layers","55":"/v0.5.30/api/Lux/layers#Normalization-Layers","56":"/v0.5.30/api/Lux/layers#Upsampling","57":"/v0.5.30/api/Lux/utilities#Utilities","58":"/v0.5.30/api/Lux/utilities#Index","59":"/v0.5.30/api/Lux/utilities#Device-Management-/-Data-Transfer","60":"/v0.5.30/api/Lux/utilities#Weight-Initialization","61":"/v0.5.30/api/Lux/utilities#Miscellaneous-Utilities","62":"/v0.5.30/api/Lux/utilities#Updating-Floating-Point-Precision","63":"/v0.5.30/api/Lux/utilities#Stateful-Layer","64":"/v0.5.30/api/Lux/utilities#Truncated-Stacktraces","65":"/v0.5.30/api/Testing_Functionality/LuxTestUtils#LuxTestUtils","66":"/v0.5.30/api/Testing_Functionality/LuxTestUtils#Index","67":"/v0.5.30/api/Testing_Functionality/LuxTestUtils#Testing-using-JET.jl","68":"/v0.5.30/api/Testing_Functionality/LuxTestUtils#Gradient-Correctness","69":"/v0.5.30/introduction/citation#Citation","70":"/v0.5.30/introduction/overview#Why-we-wrote-Lux?","71":"/v0.5.30/introduction/overview#Design-Principles","72":"/v0.5.30/introduction/overview#Why-use-Lux-over-Flux?","73":"/v0.5.30/introduction/overview#Why-not-use-Lux-(and-Julia-for-traditional-Deep-Learning-in-general)-?","74":"/v0.5.30/introduction/#getting-started","75":"/v0.5.30/introduction/#Installation","76":"/v0.5.30/introduction/#Quickstart","77":"/v0.5.30/introduction/#Defining-Custom-Layers","78":"/v0.5.30/introduction/#Additional-Packages","79":"/v0.5.30/introduction/#GPU-Support","80":"/v0.5.30/introduction/resources#Resources-to-Get-Started","81":"/v0.5.30/manual/dispatch_custom_input#Dispatching-on-Custom-Input-Types","82":"/v0.5.30/manual/dispatch_custom_input#Which-function-should-participate-in-dispatch?","83":"/v0.5.30/manual/dispatch_custom_input#Concrete-Example","84":"/v0.5.30/manual/dispatch_custom_input#Time-Dependent-Chain-Implementation","85":"/v0.5.30/manual/dispatch_custom_input#Running-the-TDChain","86":"/v0.5.30/manual/dispatch_custom_input#Writing-the-Correct-Dispatch-Rules","87":"/v0.5.30/manual/dispatch_custom_input#Using-the-Same-Input-for-Non-TD-Models","88":"/v0.5.30/manual/debugging#Debugging-Lux-Models","89":"/v0.5.30/manual/debugging#Incorrect-Model-Specification:-Dimension-Mismatch-Problems","90":"/v0.5.30/manual/debugging#Tracking-down-NaNs","91":"/v0.5.30/manual/debugging#Conclusion","92":"/v0.5.30/manual/freezing_model_parameters#freezing-model-parameters","93":"/v0.5.30/manual/freezing_model_parameters#Freezing-Layers-of-a-Particular-Kind","94":"/v0.5.30/manual/freezing_model_parameters#Freezing-by-Layer-Name","95":"/v0.5.30/manual/freezing_model_parameters#Freezing-Part-of-the-Parameters","96":"/v0.5.30/manual/freezing_model_parameters#Freezing-Part-of-a-Chain","97":"/v0.5.30/manual/gpu_management#GPU-Management","98":"/v0.5.30/manual/gpu_management#Automatic-Backend-Management-(Recommended-Approach)","99":"/v0.5.30/manual/gpu_management#Manual-Backend-Management","100":"/v0.5.30/manual/interface#lux-interface","101":"/v0.5.30/manual/interface#Layer-Interface","102":"/v0.5.30/manual/interface#Singular-Layer","103":"/v0.5.30/manual/interface#Container-Layer","104":"/v0.5.30/manual/interface#Parameter-Interface","105":"/v0.5.30/manual/interface#State-Interface","106":"/v0.5.30/manual/weight_initializers#Initializing-Weights","107":"/v0.5.30/manual/weight_initializers#Quick-examples","108":"/v0.5.30/manual/migrate_from_flux#migrate-from-flux","109":"/v0.5.30/manual/migrate_from_flux#Implementing-Custom-Layers","110":"/v0.5.30/manual/migrate_from_flux#Certain-Important-Implementation-Details","111":"/v0.5.30/manual/migrate_from_flux#Training/Inference-Mode","112":"/v0.5.30/manual/migrate_from_flux#Can-we-still-use-Flux-Layers?","113":"/v0.5.30/tutorials/beginner/1_Basics#Julia-and-Lux-for-the-Uninitiated","114":"/v0.5.30/tutorials/beginner/1_Basics#Arrays","115":"/v0.5.30/tutorials/beginner/1_Basics#CUDA-Arrays","116":"/v0.5.30/tutorials/beginner/1_Basics#(Im)mutability","117":"/v0.5.30/tutorials/beginner/1_Basics#Managing-Randomness","118":"/v0.5.30/tutorials/beginner/1_Basics#Automatic-Differentiation","119":"/v0.5.30/tutorials/beginner/1_Basics#Gradients","120":"/v0.5.30/tutorials/beginner/1_Basics#Jacobian-Vector-Product","121":"/v0.5.30/tutorials/beginner/1_Basics#Vector-Jacobian-Product","122":"/v0.5.30/tutorials/beginner/1_Basics#Linear-Regression","123":"/v0.5.30/tutorials/beginner/1_Basics#Appendix","124":"/v0.5.30/tutorials/beginner/4_SimpleChains#MNIST-Classification-with-SimpleChains","125":"/v0.5.30/tutorials/beginner/4_SimpleChains#Package-Imports","126":"/v0.5.30/tutorials/beginner/4_SimpleChains#Loading-MNIST","127":"/v0.5.30/tutorials/beginner/4_SimpleChains#Define-the-Model","128":"/v0.5.30/tutorials/beginner/4_SimpleChains#Helper-Functions","129":"/v0.5.30/tutorials/beginner/4_SimpleChains#Define-the-Training-Loop","130":"/v0.5.30/tutorials/beginner/4_SimpleChains#Finally-Training-the-Model","131":"/v0.5.30/tutorials/beginner/4_SimpleChains#Appendix","132":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Training-a-Simple-LSTM","133":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Package-Imports","134":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Dataset","135":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Creating-a-Classifier","136":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Defining-Accuracy,-Loss-and-Optimiser","137":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Training-the-Model","138":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Saving-the-Model","139":"/v0.5.30/tutorials/beginner/3_SimpleRNN#Appendix","140":"/v0.5.30/tutorials/intermediate/1_NeuralODE#MNIST-Classification-using-Neural-ODEs","141":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Package-Imports","142":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Loading-MNIST","143":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Define-the-Neural-ODE-Layer","144":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Create-and-Initialize-the-Neural-ODE-Layer","145":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Define-Utility-Functions","146":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Training","147":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Alternate-Implementation-using-Stateful-Layer","148":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Train-the-new-Stateful-Neural-ODE","149":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Type-Stability","150":"/v0.5.30/tutorials/intermediate/1_NeuralODE#Appendix","151":"/v0.5.30/tutorials/intermediate/3_HyperNet#Training-a-HyperNetwork-on-MNIST-and-FashionMNIST","152":"/v0.5.30/tutorials/intermediate/3_HyperNet#Package-Imports","153":"/v0.5.30/tutorials/intermediate/3_HyperNet#Loading-Datasets","154":"/v0.5.30/tutorials/intermediate/3_HyperNet#Implement-a-HyperNet-Layer","155":"/v0.5.30/tutorials/intermediate/3_HyperNet#Create-and-Initialize-the-HyperNet","156":"/v0.5.30/tutorials/intermediate/3_HyperNet#Define-Utility-Functions","157":"/v0.5.30/tutorials/intermediate/3_HyperNet#Training","158":"/v0.5.30/tutorials/intermediate/3_HyperNet#Appendix","159":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Fitting-a-Polynomial-using-MLP","160":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Package-Imports","161":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Dataset","162":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Neural-Network","163":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Optimizer","164":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Loss-Function","165":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Training","166":"/v0.5.30/tutorials/beginner/2_PolynomialFitting#Appendix","167":"/v0.5.30/tutorials/intermediate/2_BayesianNN#Bayesian-Neural-Network","168":"/v0.5.30/tutorials/intermediate/2_BayesianNN#Generating-data","169":"/v0.5.30/tutorials/intermediate/2_BayesianNN#Building-the-Neural-Network","170":"/v0.5.30/tutorials/intermediate/2_BayesianNN#Prediction-Visualization","171":"/v0.5.30/tutorials/intermediate/2_BayesianNN#Appendix","172":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Training-a-Neural-ODE-to-Model-Gravitational-Waveforms","173":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Package-Imports","174":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Define-some-Utility-Functions","175":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Simulating-the-True-Model","176":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Defiing-a-Neural-Network-Model","177":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Setting-Up-for-Training-the-Neural-Network","178":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Training-the-Neural-Network","179":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Visualizing-the-Results","180":"/v0.5.30/tutorials/advanced/1_GravitationalWaveForm#Appendix"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,26],"1":[1,1,3],"2":[1,1,11],"3":[1,1,26],"4":[1,1,3],"5":[2,1,11],"6":[1,1,21],"7":[1,1,12],"8":[1,1,49],"9":[2,1,119],"10":[1,1,85],"11":[1,1,38],"12":[1,1,26],"13":[2,1,102],"14":[1,1,196],"15":[1,1,22],"16":[1,1,47],"17":[2,1,78],"18":[1,1,5],"19":[1,1,8],"20":[1,1,150],"21":[1,1,253],"22":[1,1,16],"23":[1,1,35],"24":[2,1,1],"25":[2,3,362],"26":[3,3,84],"27":[1,1,14],"28":[1,1,17],"29":[3,1,1],"30":[4,3,54],"31":[2,3,121],"32":[3,5,94],"33":[6,3,82],"34":[1,8,23],"35":[2,1,68],"36":[1,2,18],"37":[1,2,110],"38":[2,2,141],"39":[3,2,122],"40":[2,2,131],"41":[2,2,97],"42":[3,2,235],"43":[5,1,1],"44":[4,5,171],"45":[5,5,151],"46":[3,1,1],"47":[1,3,42],"48":[1,3,304],"49":[2,3,228],"50":[2,3,117],"51":[2,3,155],"52":[2,3,325],"53":[2,3,188],"54":[3,3,215],"55":[2,3,309],"56":[1,3,153],"57":[1,1,1],"58":[1,1,15],"59":[4,1,54],"60":[2,1,12],"61":[2,1,60],"62":[4,1,48],"63":[2,1,100],"64":[2,1,26],"65":[1,1,47],"66":[1,1,5],"67":[4,1,90],"68":[2,1,130],"69":[1,1,67],"70":[5,1,63],"71":[2,5,58],"72":[6,5,179],"73":[13,5,37],"74":[2,1,1],"75":[1,2,34],"76":[1,2,217],"77":[3,2,153],"78":[2,2,36],"79":[2,2,17],"80":[4,1,54],"81":[5,1,1],"82":[7,5,35],"83":[2,5,39],"84":[4,7,72],"85":[3,7,53],"86":[5,7,48],"87":[8,7,46],"88":[3,1,76],"89":[6,3,155],"90":[3,3,189],"91":[1,3,50],"92":[3,1,27],"93":[6,3,116],"94":[4,3,56],"95":[5,3,44],"96":[5,3,68],"97":[2,1,71],"98":[6,2,90],"99":[3,2,44],"100":[2,1,83],"101":[2,2,1],"102":[2,3,230],"103":[2,3,137],"104":[2,2,145],"105":[2,2,46],"106":[2,1,134],"107":[2,2,64],"108":[5,1,67],"109":[3,5,163],"110":[4,5,1],"111":[3,9,48],"112":[7,5,33],"113":[6,1,68],"114":[1,6,285],"115":[2,7,94],"116":[3,6,109],"117":[2,6,130],"118":[2,6,96],"119":[1,8,71],"120":[3,8,153],"121":[3,8,66],"122":[2,6,317],"123":[1,6,172],"124":[4,1,33],"125":[2,4,16],"126":[2,4,60],"127":[3,4,63],"128":[2,4,40],"129":[4,4,65],"130":[4,4,117],"131":[1,4,118],"132":[4,1,38],"133":[2,4,13],"134":[1,4,95],"135":[3,4,158],"136":[5,4,62],"137":[3,4,305],"138":[3,4,46],"139":[1,4,172],"140":[5,1,24],"141":[2,5,24],"142":[2,5,64],"143":[5,5,95],"144":[7,5,60],"145":[3,5,43],"146":[1,5,209],"147":[5,5,53],"148":[6,5,62],"149":[2,5,170],"150":[1,5,172],"151":[7,1,1],"152":[2,7,19],"153":[2,7,41],"154":[4,7,45],"155":[5,7,42],"156":[3,7,47],"157":[1,7,142],"158":[1,7,172],"159":[5,1,16],"160":[2,5,13],"161":[1,5,273],"162":[2,5,36],"163":[1,5,18],"164":[2,5,51],"165":[1,5,189],"166":[1,5,172],"167":[3,1,65],"168":[2,3,104],"169":[4,3,544],"170":[2,3,174],"171":[1,3,118],"172":[8,1,21],"173":[2,8,18],"174":[4,8,201],"175":[4,8,125],"176":[5,8,1347],"177":[7,8,324],"178":[4,8,1250],"179":[3,8,85],"180":[1,8,172]},"averageFieldLength":[2.7237569060773494,3.3314917127071815,105.94475138121543],"storedFields":{"0":{"title":"LuxAMDGPU","titles":[]},"1":{"title":"Index","titles":["LuxAMDGPU"]},"2":{"title":"API","titles":["LuxAMDGPU"]},"3":{"title":"LuxCUDA","titles":[]},"4":{"title":"Index","titles":["LuxCUDA"]},"5":{"title":"API Reference","titles":["LuxCUDA"]},"6":{"title":"LuxDeviceUtils","titles":[]},"7":{"title":"Index","titles":["LuxDeviceUtils"]},"8":{"title":"Preferences","titles":["LuxDeviceUtils"]},"9":{"title":"Data Transfer","titles":["LuxDeviceUtils"]},"10":{"title":"Miscellaneous","titles":["LuxDeviceUtils"]},"11":{"title":"LuxCore","titles":[]},"12":{"title":"Index","titles":["LuxCore"]},"13":{"title":"Abstract Types","titles":["LuxCore"]},"14":{"title":"General","titles":["LuxCore"]},"15":{"title":"Parameters","titles":["LuxCore"]},"16":{"title":"States","titles":["LuxCore"]},"17":{"title":"Layer size","titles":["LuxCore"]},"18":{"title":"LuxLib","titles":[]},"19":{"title":"Index","titles":["LuxLib"]},"20":{"title":"Dropout","titles":["LuxLib"]},"21":{"title":"Normalization","titles":["LuxLib"]},"22":{"title":"WeightInitializers","titles":[]},"23":{"title":"Index","titles":["WeightInitializers"]},"24":{"title":"API Reference","titles":["WeightInitializers"]},"25":{"title":"Main Functions","titles":["WeightInitializers","API Reference"]},"26":{"title":"Commonly Used Wrappers","titles":["WeightInitializers","API Reference"]},"27":{"title":"Boltz","titles":[]},"28":{"title":"Index","titles":["Boltz"]},"29":{"title":"Computer Vision Models","titles":[]},"30":{"title":"Classification Models: Native Lux Models","titles":["Computer Vision Models"]},"31":{"title":"Building Blocks","titles":["Computer Vision Models"]},"32":{"title":"Non-Public API","titles":["Computer Vision Models","Building Blocks"]},"33":{"title":"Classification Models: Imported from Metalhead.jl","titles":["Computer Vision Models"]},"34":{"title":"Preprocessing","titles":["Computer Vision Models","Classification Models: Imported from Metalhead.jl"]},"35":{"title":"Experimental Features","titles":[]},"36":{"title":"Index","titles":["Experimental Features"]},"37":{"title":"Training","titles":["Experimental Features"]},"38":{"title":"Parameter Freezing","titles":["Experimental Features"]},"39":{"title":"Map over Layer","titles":["Experimental Features"]},"40":{"title":"Debugging Functionality","titles":["Experimental Features"]},"41":{"title":"Tied Parameters","titles":["Experimental Features"]},"42":{"title":"Compact Layer API","titles":["Experimental Features"]},"43":{"title":"Switching between Deep Learning Frameworks","titles":[]},"44":{"title":"Flux Models to Lux Models","titles":["Switching between Deep Learning Frameworks"]},"45":{"title":"Lux Models to Simple Chains","titles":["Switching between Deep Learning Frameworks"]},"46":{"title":"Built-In Layers","titles":[]},"47":{"title":"Index","titles":["Built-In Layers"]},"48":{"title":"Containers","titles":["Built-In Layers"]},"49":{"title":"Convolutional Layers","titles":["Built-In Layers"]},"50":{"title":"Dropout Layers","titles":["Built-In Layers"]},"51":{"title":"Pooling Layers","titles":["Built-In Layers"]},"52":{"title":"Recurrent Layers","titles":["Built-In Layers"]},"53":{"title":"Linear Layers","titles":["Built-In Layers"]},"54":{"title":"Misc. Helper Layers","titles":["Built-In Layers"]},"55":{"title":"Normalization Layers","titles":["Built-In Layers"]},"56":{"title":"Upsampling","titles":["Built-In Layers"]},"57":{"title":"Utilities","titles":[]},"58":{"title":"Index","titles":["Utilities"]},"59":{"title":"Device Management / Data Transfer","titles":["Utilities"]},"60":{"title":"Weight Initialization","titles":["Utilities"]},"61":{"title":"Miscellaneous Utilities","titles":["Utilities"]},"62":{"title":"Updating Floating Point Precision","titles":["Utilities"]},"63":{"title":"Stateful Layer","titles":["Utilities"]},"64":{"title":"Truncated Stacktraces","titles":["Utilities"]},"65":{"title":"LuxTestUtils","titles":[]},"66":{"title":"Index","titles":["LuxTestUtils"]},"67":{"title":"Testing using JET.jl","titles":["LuxTestUtils"]},"68":{"title":"Gradient Correctness","titles":["LuxTestUtils"]},"69":{"title":"Citation","titles":[]},"70":{"title":"Why we wrote Lux?","titles":[]},"71":{"title":"Design Principles","titles":["Why we wrote Lux?"]},"72":{"title":"Why use Lux over Flux?","titles":["Why we wrote Lux?"]},"73":{"title":"Why not use Lux (and Julia for traditional Deep Learning in general) ?","titles":["Why we wrote Lux?"]},"74":{"title":"Getting Started","titles":[]},"75":{"title":"Installation","titles":["Getting Started"]},"76":{"title":"Quickstart","titles":["Getting Started"]},"77":{"title":"Defining Custom Layers","titles":["Getting Started"]},"78":{"title":"Additional Packages","titles":["Getting Started"]},"79":{"title":"GPU Support","titles":["Getting Started"]},"80":{"title":"Resources to Get Started","titles":[]},"81":{"title":"Dispatching on Custom Input Types","titles":[]},"82":{"title":"Which function should participate in dispatch?","titles":["Dispatching on Custom Input Types"]},"83":{"title":"Concrete Example","titles":["Dispatching on Custom Input Types"]},"84":{"title":"Time-Dependent Chain Implementation","titles":["Dispatching on Custom Input Types","Concrete Example"]},"85":{"title":"Running the TDChain","titles":["Dispatching on Custom Input Types","Concrete Example"]},"86":{"title":"Writing the Correct Dispatch Rules","titles":["Dispatching on Custom Input Types","Concrete Example"]},"87":{"title":"Using the Same Input for Non-TD Models","titles":["Dispatching on Custom Input Types","Concrete Example"]},"88":{"title":"Debugging Lux Models","titles":[]},"89":{"title":"Incorrect Model Specification: Dimension Mismatch Problems","titles":["Debugging Lux Models"]},"90":{"title":"Tracking down NaNs","titles":["Debugging Lux Models"]},"91":{"title":"Conclusion","titles":["Debugging Lux Models"]},"92":{"title":"Freezing Model Parameters","titles":[]},"93":{"title":"Freezing Layers of a Particular Kind","titles":["Freezing Model Parameters"]},"94":{"title":"Freezing by Layer Name","titles":["Freezing Model Parameters"]},"95":{"title":"Freezing Part of the Parameters","titles":["Freezing Model Parameters"]},"96":{"title":"Freezing Part of a Chain","titles":["Freezing Model Parameters"]},"97":{"title":"GPU Management","titles":[]},"98":{"title":"Automatic Backend Management (Recommended Approach)","titles":["GPU Management"]},"99":{"title":"Manual Backend Management","titles":["GPU Management"]},"100":{"title":"Lux Interface","titles":[]},"101":{"title":"Layer Interface","titles":["Lux Interface"]},"102":{"title":"Singular Layer","titles":["Lux Interface","Layer Interface"]},"103":{"title":"Container Layer","titles":["Lux Interface","Layer Interface"]},"104":{"title":"Parameter Interface","titles":["Lux Interface"]},"105":{"title":"State Interface","titles":["Lux Interface"]},"106":{"title":"Initializing Weights","titles":[]},"107":{"title":"Quick examples","titles":["Initializing Weights"]},"108":{"title":"Migrating from Flux to Lux","titles":[]},"109":{"title":"Implementing Custom Layers","titles":["Migrating from Flux to Lux"]},"110":{"title":"Certain Important Implementation Details","titles":["Migrating from Flux to Lux"]},"111":{"title":"Training/Inference Mode","titles":["Migrating from Flux to Lux","Certain Important Implementation Details"]},"112":{"title":"Can we still use Flux Layers?","titles":["Migrating from Flux to Lux"]},"113":{"title":"Julia & Lux for the Uninitiated","titles":[]},"114":{"title":"Arrays","titles":["Julia & Lux for the Uninitiated"]},"115":{"title":"CUDA Arrays","titles":["Julia & Lux for the Uninitiated","Arrays"]},"116":{"title":"(Im)mutability","titles":["Julia & Lux for the Uninitiated"]},"117":{"title":"Managing Randomness","titles":["Julia & Lux for the Uninitiated"]},"118":{"title":"Automatic Differentiation","titles":["Julia & Lux for the Uninitiated"]},"119":{"title":"Gradients","titles":["Julia & Lux for the Uninitiated","Automatic Differentiation"]},"120":{"title":"Jacobian-Vector Product","titles":["Julia & Lux for the Uninitiated","Automatic Differentiation"]},"121":{"title":"Vector-Jacobian Product","titles":["Julia & Lux for the Uninitiated","Automatic Differentiation"]},"122":{"title":"Linear Regression","titles":["Julia & Lux for the Uninitiated"]},"123":{"title":"Appendix","titles":["Julia & Lux for the Uninitiated"]},"124":{"title":"MNIST Classification with SimpleChains","titles":[]},"125":{"title":"Package Imports","titles":["MNIST Classification with SimpleChains"]},"126":{"title":"Loading MNIST","titles":["MNIST Classification with SimpleChains"]},"127":{"title":"Define the Model","titles":["MNIST Classification with SimpleChains"]},"128":{"title":"Helper Functions","titles":["MNIST Classification with SimpleChains"]},"129":{"title":"Define the Training Loop","titles":["MNIST Classification with SimpleChains"]},"130":{"title":"Finally Training the Model","titles":["MNIST Classification with SimpleChains"]},"131":{"title":"Appendix","titles":["MNIST Classification with SimpleChains"]},"132":{"title":"Training a Simple LSTM","titles":[]},"133":{"title":"Package Imports","titles":["Training a Simple LSTM"]},"134":{"title":"Dataset","titles":["Training a Simple LSTM"]},"135":{"title":"Creating a Classifier","titles":["Training a Simple LSTM"]},"136":{"title":"Defining Accuracy, Loss and Optimiser","titles":["Training a Simple LSTM"]},"137":{"title":"Training the Model","titles":["Training a Simple LSTM"]},"138":{"title":"Saving the Model","titles":["Training a Simple LSTM"]},"139":{"title":"Appendix","titles":["Training a Simple LSTM"]},"140":{"title":"MNIST Classification using Neural ODEs","titles":[]},"141":{"title":"Package Imports","titles":["MNIST Classification using Neural ODEs"]},"142":{"title":"Loading MNIST","titles":["MNIST Classification using Neural ODEs"]},"143":{"title":"Define the Neural ODE Layer","titles":["MNIST Classification using Neural ODEs"]},"144":{"title":"Create and Initialize the Neural ODE Layer","titles":["MNIST Classification using Neural ODEs"]},"145":{"title":"Define Utility Functions","titles":["MNIST Classification using Neural ODEs"]},"146":{"title":"Training","titles":["MNIST Classification using Neural ODEs"]},"147":{"title":"Alternate Implementation using Stateful Layer","titles":["MNIST Classification using Neural ODEs"]},"148":{"title":"Train the new Stateful Neural ODE","titles":["MNIST Classification using Neural ODEs"]},"149":{"title":"Type Stability","titles":["MNIST Classification using Neural ODEs"]},"150":{"title":"Appendix","titles":["MNIST Classification using Neural ODEs"]},"151":{"title":"Training a HyperNetwork on MNIST and FashionMNIST","titles":[]},"152":{"title":"Package Imports","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"153":{"title":"Loading Datasets","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"154":{"title":"Implement a HyperNet Layer","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"155":{"title":"Create and Initialize the HyperNet","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"156":{"title":"Define Utility Functions","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"157":{"title":"Training","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"158":{"title":"Appendix","titles":["Training a HyperNetwork on MNIST and FashionMNIST"]},"159":{"title":"Fitting a Polynomial using MLP","titles":[]},"160":{"title":"Package Imports","titles":["Fitting a Polynomial using MLP"]},"161":{"title":"Dataset","titles":["Fitting a Polynomial using MLP"]},"162":{"title":"Neural Network","titles":["Fitting a Polynomial using MLP"]},"163":{"title":"Optimizer","titles":["Fitting a Polynomial using MLP"]},"164":{"title":"Loss Function","titles":["Fitting a Polynomial using MLP"]},"165":{"title":"Training","titles":["Fitting a Polynomial using MLP"]},"166":{"title":"Appendix","titles":["Fitting a Polynomial using MLP"]},"167":{"title":"Bayesian Neural Network","titles":[]},"168":{"title":"Generating data","titles":["Bayesian Neural Network"]},"169":{"title":"Building the Neural Network","titles":["Bayesian Neural Network"]},"170":{"title":"Prediction Visualization","titles":["Bayesian Neural Network"]},"171":{"title":"Appendix","titles":["Bayesian Neural Network"]},"172":{"title":"Training a Neural ODE to Model Gravitational Waveforms","titles":[]},"173":{"title":"Package Imports","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"174":{"title":"Define some Utility Functions","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"175":{"title":"Simulating the True Model","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"176":{"title":"Defiing a Neural Network Model","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"177":{"title":"Setting Up for Training the Neural Network","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"178":{"title":"Training the Neural Network","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"179":{"title":"Visualizing the Results","titles":["Training a Neural ODE to Model Gravitational Waveforms"]},"180":{"title":"Appendix","titles":["Training a Neural ODE to Model Gravitational Waveforms"]}},"dirtCount":0,"index":[["π",{"2":{"174":2,"175":1}}],["∈",{"2":{"174":1}}],["↦",{"2":{"174":1}}],["ϕ̇",{"2":{"175":2,"176":2}}],["ϕ",{"2":{"174":5,"175":1,"176":1}}],["χ̇",{"2":{"175":2,"176":2}}],["χ",{"2":{"174":4,"175":4,"176":2}}],["θ|x",{"2":{"170":2}}],["θ",{"2":{"169":2,"170":9,"177":2}}],["│",{"2":{"149":2}}],["─",{"2":{"149":2}}],["÷",{"2":{"134":4}}],["\\t",{"2":{"130":60,"146":108,"148":27,"157":86,"165":6}}],["~",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"169":2,"180":1}}],["×",{"2":{"123":1,"131":1,"134":2,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["×dn−2×1×1`",{"2":{"55":1}}],["×dn−2×1×1",{"2":{"21":1}}],["×dn−2×1×dn",{"2":{"21":1,"55":1}}],["∥22we",{"2":{"122":1}}],["⟶∑i=1k12∥yi−fw",{"2":{"122":1}}],["∂",{"2":{"121":1}}],["∇f",{"2":{"119":3}}],["∇offending",{"2":{"90":2}}],["`θ`",{"2":{"170":1}}],["`x`",{"2":{"170":1}}],["`nothing`s",{"2":{"146":1}}],["`namedtuple`",{"2":{"104":2}}],["`carry`",{"2":{"135":2}}],["`iterators",{"2":{"135":1}}],["`eachslice`",{"2":{"135":1}}],["`global",{"2":{"122":1}}],["`pb",{"2":{"122":2}}],["`ps",{"2":{"103":1}}],["`optimisers",{"2":{"122":1}}],["`∇`",{"2":{"119":1}}],["`a`",{"2":{"109":3}}],["`b`",{"2":{"109":2}}],["`denselayerparameters`",{"2":{"104":2}}],["`model",{"2":{"103":1}}],["`st`",{"2":{"103":1,"122":1,"176":2}}],["`st",{"2":{"103":1}}],["`",{"2":{"102":1,"103":1,"119":1}}],["`lstm",{"2":{"135":1}}],["`local",{"2":{"122":1}}],["`lux``",{"2":{"115":1}}],["`linear",{"2":{"103":2}}],["`l",{"2":{"102":1}}],["δ",{"2":{"90":3}}],["└──",{"2":{"149":2}}],["└",{"2":{"89":1,"122":1,"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["┌",{"2":{"89":1,"122":1,"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["$loss",{"2":{"122":1}}],["$i",{"2":{"117":2,"122":1,"170":1}}],["$",{"2":{"77":2}}],["$name",{"2":{"39":2}}],["||",{"2":{"122":1,"165":1}}],["|",{"2":{"77":11,"89":5,"90":13}}],["|>",{"2":{"76":2,"98":2,"99":3,"122":1,"137":5,"144":2,"154":2,"156":2,"157":2,"165":1}}],["|p|−di×",{"2":{"49":2,"51":2}}],["√",{"2":{"174":2}}],["√eps",{"2":{"68":1}}],["√t",{"2":{"25":2}}],["⋅n+z⋅hprevarguments",{"2":{"52":1}}],["↗",{"2":{"48":2}}],["↘",{"2":{"48":2}}],["→",{"2":{"48":5}}],["≈∑θ∼p",{"2":{"170":1}}],["≈",{"2":{"42":1,"98":1,"99":1,"117":2}}],["znver2",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["zback",{"2":{"121":1}}],["zenodo",{"2":{"69":3}}],["zeroing",{"2":{"39":2}}],["zero",{"2":{"25":3,"39":10,"50":3,"53":1,"114":1,"136":1}}],["zeroed",{"2":{"25":3}}],["zeros",{"2":{"25":3,"26":6,"114":1,"168":1,"169":1}}],["zerosc64",{"2":{"23":1,"26":1}}],["zerosc32",{"2":{"23":1,"26":1}}],["zerosc16",{"2":{"23":1,"26":1}}],["zeros64",{"2":{"23":1,"26":1}}],["zeros32",{"2":{"23":1,"26":1,"31":1,"52":6,"85":2,"102":1,"149":30,"165":2,"176":3}}],["zeros16",{"2":{"23":1,"26":1}}],["z",{"2":{"53":3,"169":2,"170":8}}],["z=σ",{"2":{"52":1}}],["zygotevjp",{"2":{"149":6}}],["zygote",{"2":{"42":2,"68":1,"76":3,"77":2,"90":2,"108":2,"109":2,"113":1,"116":1,"118":3,"119":4,"121":8,"122":1,"125":1,"132":1,"133":1,"141":1,"152":1,"160":1,"165":1}}],["zips",{"2":{"39":1}}],["quadrupole",{"2":{"174":10}}],["quadratic",{"2":{"161":1,"165":1}}],["quantiles",{"2":{"169":1}}],["questions",{"2":{"80":3,"118":1}}],["quick",{"0":{"107":1},"2":{"113":1}}],["quickstart",{"0":{"76":1},"2":{"80":1}}],["quite",{"2":{"70":1,"116":1,"118":1}}],["quot",{"2":{"8":2,"20":4,"21":8,"25":12,"35":4,"48":4,"54":2,"55":2,"76":4,"109":4}}],["qkv",{"2":{"31":1}}],["🚫",{"2":{"30":7,"33":20}}],["987636218547931e",{"2":{"178":1}}],["987597f",{"2":{"176":1}}],["985538050191626e",{"2":{"178":1}}],["9856906f",{"2":{"176":1}}],["9832140137146786e",{"2":{"178":1}}],["983766760539752e",{"2":{"178":1}}],["9830559f",{"2":{"176":1}}],["98837348812216e",{"2":{"178":1}}],["988359f",{"2":{"176":1}}],["988118f",{"2":{"176":1}}],["9895952805709688e",{"2":{"178":1}}],["989011599154583e",{"2":{"178":1}}],["989989041478042e",{"2":{"178":1}}],["9896846f",{"2":{"176":1}}],["989124f",{"2":{"176":1}}],["986555927642713e",{"2":{"178":1}}],["9863697148027907e",{"2":{"178":1}}],["9868286f",{"2":{"176":1}}],["9866022f",{"2":{"176":1}}],["9815384f",{"2":{"176":1}}],["981339",{"2":{"114":1}}],["9846375721966646",{"2":{"161":1}}],["98",{"2":{"157":1}}],["96678992593451e",{"2":{"178":1}}],["966804f",{"2":{"176":1}}],["9668715",{"2":{"93":1,"96":1}}],["9616254089313873e",{"2":{"178":1}}],["9616336f",{"2":{"176":1}}],["964007422418125e",{"2":{"178":1}}],["9646762f",{"2":{"176":1}}],["963734905775995e",{"2":{"178":1}}],["9639992f",{"2":{"176":1}}],["967454739947039e",{"2":{"178":1}}],["967846113538016e",{"2":{"178":1}}],["967811",{"2":{"115":1}}],["96700066089494e",{"2":{"178":1}}],["9679318f",{"2":{"176":1}}],["967744f",{"2":{"176":1}}],["9677",{"2":{"169":1}}],["962714f",{"2":{"176":1}}],["9623",{"2":{"169":1}}],["9624",{"2":{"169":1}}],["9602",{"2":{"169":1}}],["96062994",{"2":{"161":2}}],["968140346623821e",{"2":{"178":1}}],["9687086f",{"2":{"176":1}}],["968982f",{"2":{"176":1}}],["9682665790685976",{"2":{"161":1}}],["968504",{"2":{"161":2}}],["96s",{"2":{"130":1}}],["979819332627229e",{"2":{"178":1}}],["979409f",{"2":{"176":1}}],["975628454852906e",{"2":{"178":1}}],["975649",{"2":{"115":1}}],["9714225f",{"2":{"176":1}}],["9717128546307235e",{"2":{"178":1}}],["9717",{"2":{"169":1}}],["97755042751728e",{"2":{"178":1}}],["9779605f",{"2":{"176":1}}],["97772916365376",{"2":{"161":1}}],["972371987127045e",{"2":{"178":1}}],["972325245945651e",{"2":{"178":1}}],["9727156303778913e",{"2":{"178":1}}],["9726623f",{"2":{"176":1}}],["9729712f",{"2":{"176":1}}],["972598f",{"2":{"176":1}}],["974486053781748e",{"2":{"178":1}}],["9742826094773044e",{"2":{"178":1}}],["9742292519472466",{"2":{"161":1}}],["974759f",{"2":{"176":1}}],["9741706f",{"2":{"176":1}}],["9762977f",{"2":{"176":1}}],["9767696f",{"2":{"176":1}}],["976644569052881e",{"2":{"178":1}}],["9766699015845924",{"2":{"117":4}}],["97667",{"2":{"114":1}}],["97",{"2":{"169":1}}],["9783498813733602",{"2":{"161":1}}],["9956939078962535e",{"2":{"178":1}}],["991262578096234e",{"2":{"178":1}}],["997599039109328e",{"2":{"178":1}}],["9977986f",{"2":{"176":1}}],["990460054425742e",{"2":{"178":1}}],["990559f",{"2":{"176":1}}],["9901416f",{"2":{"176":1}}],["9985210584265498e",{"2":{"178":1}}],["998288f",{"2":{"176":1}}],["998001",{"2":{"76":6}}],["99",{"2":{"169":2}}],["9930802717826603",{"2":{"161":1}}],["992126",{"2":{"161":2}}],["9999954f",{"2":{"76":1}}],["999998f",{"2":{"76":1}}],["999999f",{"2":{"76":2}}],["999",{"2":{"76":6,"163":1,"165":8}}],["9",{"2":{"76":12,"93":2,"96":2,"114":1,"126":1,"129":1,"130":2,"137":7,"142":1,"146":46,"148":10,"153":2,"157":2,"163":1,"165":9,"169":4,"176":73,"178":95}}],["935652982223644e",{"2":{"178":1}}],["939284245162795e",{"2":{"178":1}}],["9304502691390684e",{"2":{"178":1}}],["9302507f",{"2":{"176":1}}],["932562375070117e",{"2":{"178":1}}],["932835f",{"2":{"176":1}}],["9379003376799704e",{"2":{"178":1}}],["93761f",{"2":{"176":1}}],["9370079",{"2":{"161":2}}],["938874f",{"2":{"176":1}}],["933663432767605e",{"2":{"178":1}}],["933275229578696e",{"2":{"178":1}}],["933173f",{"2":{"176":1}}],["9338",{"2":{"169":1}}],["9348",{"2":{"169":1}}],["93",{"2":{"33":1,"157":2}}],["926604877050693e",{"2":{"178":1}}],["926506f",{"2":{"176":1}}],["925007726550458e",{"2":{"178":1}}],["925097f",{"2":{"176":1}}],["924058141592579e",{"2":{"178":1}}],["924316208794128e",{"2":{"178":1}}],["924124f",{"2":{"176":1}}],["923485219942257e",{"2":{"178":1}}],["923768f",{"2":{"176":1}}],["9235f",{"2":{"176":1}}],["927561015540892e",{"2":{"178":1}}],["927554f",{"2":{"176":1}}],["927118554106664e",{"2":{"178":1}}],["927829728875734e",{"2":{"178":1}}],["9276631f",{"2":{"176":1}}],["9273913f",{"2":{"176":1}}],["928932193967629e",{"2":{"178":1}}],["928703f",{"2":{"176":1}}],["9287179111905346",{"2":{"161":1}}],["9286264f",{"2":{"176":1}}],["9286413f",{"2":{"176":1}}],["9283",{"2":{"169":1}}],["9296919748814573",{"2":{"161":1}}],["92913383",{"2":{"161":2}}],["921786307209035e",{"2":{"178":1}}],["9215069197227447e",{"2":{"178":1}}],["92155594",{"2":{"119":4}}],["9213074f",{"2":{"176":1}}],["9212",{"2":{"169":1}}],["921",{"2":{"77":1}}],["92",{"2":{"33":2,"157":1}}],["953914111772107e",{"2":{"178":1}}],["957538508861785e",{"2":{"178":1}}],["9578145f",{"2":{"176":1}}],["9550665631964246e",{"2":{"178":1}}],["951374018955726e",{"2":{"178":1}}],["9511655f",{"2":{"176":1}}],["9517",{"2":{"169":1}}],["9540133f",{"2":{"176":1}}],["9548744f",{"2":{"176":1}}],["9541",{"2":{"169":1}}],["9586103449089304e",{"2":{"178":1}}],["9586248f",{"2":{"176":1}}],["9589010225158635e",{"2":{"178":1}}],["95876258051809e",{"2":{"178":1}}],["9587626f",{"2":{"176":1}}],["9588346f",{"2":{"176":1}}],["9584",{"2":{"169":1}}],["9507226194240974",{"2":{"161":1}}],["95s",{"2":{"130":3}}],["95972",{"2":{"98":2}}],["95",{"2":{"30":1}}],["948652245398976e",{"2":{"178":1}}],["94854f",{"2":{"176":1}}],["94631180635115e",{"2":{"178":1}}],["946187f",{"2":{"176":1}}],["940452914619832e",{"2":{"178":1}}],["940673727242762e",{"2":{"178":1}}],["9401973f",{"2":{"176":1}}],["9405848223512736",{"2":{"117":4}}],["940585",{"2":{"114":1}}],["9430767592073575e",{"2":{"178":1}}],["9431841981110864e",{"2":{"178":1}}],["9431986f",{"2":{"176":1}}],["943161f",{"2":{"176":1}}],["9436797",{"2":{"122":1}}],["942851806640524e",{"2":{"178":1}}],["9428443f",{"2":{"176":1}}],["9424",{"2":{"169":1}}],["9448911559007385e",{"2":{"178":1}}],["9445750834336582e",{"2":{"178":1}}],["944340620763597e",{"2":{"178":1}}],["944733f",{"2":{"176":1}}],["9444225f",{"2":{"176":1}}],["944188f",{"2":{"176":1}}],["9440",{"2":{"169":1}}],["9499",{"2":{"169":1}}],["9411",{"2":{"169":1}}],["9417175810509869",{"2":{"161":1}}],["94s",{"2":{"130":6}}],["94fb",{"2":{"67":1}}],["94",{"2":{"30":1,"130":1,"157":2}}],["9091078170073337e",{"2":{"178":1}}],["907058841123349e",{"2":{"178":1}}],["903453407028585e",{"2":{"178":1}}],["903920388070612e",{"2":{"178":1}}],["9038015f",{"2":{"176":1}}],["906899175661163e",{"2":{"178":1}}],["9068267920931062",{"2":{"161":1}}],["906928f",{"2":{"176":1}}],["904286704786649e",{"2":{"178":1}}],["90403389486311e",{"2":{"178":1}}],["904172f",{"2":{"176":1}}],["904175f",{"2":{"176":1}}],["904329f",{"2":{"176":1}}],["900922637414417e",{"2":{"178":1}}],["900179866297774e",{"2":{"178":1}}],["90075832970615e",{"2":{"178":1}}],["900068f",{"2":{"176":1}}],["90055f",{"2":{"176":1}}],["9008333f",{"2":{"176":1}}],["9008",{"2":{"169":1}}],["9059",{"2":{"169":1}}],["9055119",{"2":{"161":2}}],["9080088282844027",{"2":{"161":1}}],["9088315",{"2":{"93":1,"96":1}}],["90s",{"2":{"130":1}}],["901982831267487e",{"2":{"178":1}}],["9010273188596704",{"2":{"161":1}}],["901",{"2":{"77":1}}],["90",{"2":{"30":1,"33":1,"157":4}}],["91884728601028e",{"2":{"178":1}}],["918961237923293e",{"2":{"178":1}}],["9189931240717726e",{"2":{"178":1}}],["9189849f",{"2":{"176":1}}],["918918",{"2":{"106":1}}],["91164707028623e",{"2":{"178":1}}],["9114601f",{"2":{"176":1}}],["911429094488635",{"2":{"161":1}}],["919472f",{"2":{"176":1}}],["917089850016113e",{"2":{"178":1}}],["9178594f",{"2":{"176":1}}],["917969f",{"2":{"176":1}}],["9172984f",{"2":{"176":1}}],["9165310846895345e",{"2":{"178":1}}],["9165167f",{"2":{"176":1}}],["9166793344639054",{"2":{"161":1}}],["910221374320468e",{"2":{"178":1}}],["910352f",{"2":{"176":1}}],["910820824989613",{"2":{"161":1}}],["913717213815875e",{"2":{"178":1}}],["91384f",{"2":{"176":1}}],["9135",{"2":{"169":1}}],["9136",{"2":{"169":1}}],["9123675448444001",{"2":{"161":1}}],["91s",{"2":{"146":1}}],["91",{"2":{"30":3,"33":1,"122":1,"157":1}}],["734488292599335e",{"2":{"178":1}}],["734474f",{"2":{"176":1}}],["7365865f",{"2":{"176":1}}],["732914151749008e",{"2":{"178":1}}],["732571317579523e",{"2":{"178":1}}],["732586f",{"2":{"176":1}}],["7326232f",{"2":{"176":1}}],["735608697743877e",{"2":{"178":1}}],["7356087f",{"2":{"176":1}}],["7353",{"2":{"169":1}}],["7333",{"2":{"169":1}}],["7335",{"2":{"169":1}}],["733409783966572",{"2":{"161":1}}],["739455f",{"2":{"176":1}}],["7396",{"2":{"169":1}}],["7397",{"2":{"169":1}}],["73",{"2":{"157":1}}],["73844851250885",{"2":{"161":1}}],["73806",{"2":{"115":1}}],["738356",{"2":{"114":1}}],["759638658565189e",{"2":{"178":1}}],["7593879f",{"2":{"176":1}}],["752279765248412e",{"2":{"178":1}}],["7516937468067382e",{"2":{"178":1}}],["755268f",{"2":{"176":1}}],["754007331532779e",{"2":{"178":1}}],["7544174f",{"2":{"176":1}}],["754145700236098",{"2":{"161":1}}],["7530056f",{"2":{"176":1}}],["75333",{"2":{"146":1}}],["7565600800322707",{"2":{"161":1}}],["750",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["75",{"2":{"121":1,"157":4,"169":1,"175":1,"176":2,"179":4}}],["7580993408473766",{"2":{"20":1}}],["791681151079214e",{"2":{"178":1}}],["791582f",{"2":{"176":1}}],["7978846f",{"2":{"176":1}}],["799474f",{"2":{"176":1}}],["798178761314311e",{"2":{"178":1}}],["798015150689254e",{"2":{"178":1}}],["7986750677022e",{"2":{"178":1}}],["7984697f",{"2":{"176":1}}],["7984426f",{"2":{"176":1}}],["7988979",{"2":{"93":1}}],["79333",{"2":{"148":1}}],["793159",{"2":{"114":1}}],["79",{"2":{"130":1}}],["7618349028651443e",{"2":{"178":1}}],["761656f",{"2":{"176":1}}],["762877856099075e",{"2":{"178":1}}],["7621252f",{"2":{"176":1}}],["7636186067648297e",{"2":{"178":1}}],["763488f",{"2":{"176":1}}],["768360097489355e",{"2":{"178":1}}],["7644",{"2":{"169":1}}],["7648",{"2":{"169":1}}],["760862f",{"2":{"176":1}}],["7602",{"2":{"169":1}}],["76022f",{"2":{"76":1}}],["76000",{"2":{"148":1}}],["76",{"2":{"121":1,"130":1,"157":3}}],["766438437094556e",{"2":{"178":1}}],["7661235f",{"2":{"176":1}}],["766729f",{"2":{"176":1}}],["766979f",{"2":{"176":1}}],["7669",{"2":{"169":1}}],["7663454774622869",{"2":{"161":1}}],["76667",{"2":{"146":3}}],["7666331",{"2":{"93":1}}],["7668784",{"2":{"104":2}}],["76769f",{"2":{"76":1}}],["785451295318533e",{"2":{"178":1}}],["7859569202523714e",{"2":{"178":1}}],["785182f",{"2":{"176":1}}],["785651f",{"2":{"176":1}}],["7855483f",{"2":{"176":1}}],["78153261569533e",{"2":{"178":1}}],["781402f",{"2":{"176":1}}],["7817315740767116",{"2":{"117":1}}],["786228753190584e",{"2":{"178":1}}],["7868586653043936e",{"2":{"178":1}}],["7866389f",{"2":{"176":1}}],["78667",{"2":{"146":4}}],["7867922f",{"2":{"176":1}}],["789190050134396e",{"2":{"178":1}}],["789723502719685e",{"2":{"178":1}}],["789651f",{"2":{"176":1}}],["789500663251252",{"2":{"161":1}}],["7823874945736187e",{"2":{"178":1}}],["7827394f",{"2":{"176":1}}],["7824995f",{"2":{"176":1}}],["7829663021691418",{"2":{"161":1}}],["78296",{"2":{"146":1}}],["78226817",{"2":{"102":1}}],["78",{"2":{"130":1,"157":3}}],["780718584663334e",{"2":{"178":1}}],["78074",{"2":{"148":1}}],["7806792f",{"2":{"176":1}}],["78000",{"2":{"146":3,"148":1}}],["78000563",{"2":{"103":1}}],["7808904",{"2":{"69":2}}],["7843226672134975e",{"2":{"178":1}}],["784395639158907e",{"2":{"178":1}}],["7843891f",{"2":{"176":1}}],["784604f",{"2":{"176":1}}],["784",{"2":{"55":3,"144":1,"149":4,"155":1}}],["7×10",{"2":{"42":1}}],["7",{"2":{"42":1,"67":1,"76":7,"116":3,"123":3,"127":1,"130":2,"131":1,"137":7,"139":3,"146":6,"148":1,"150":3,"157":2,"158":3,"161":5,"166":3,"169":5,"171":1,"176":91,"178":91,"180":3}}],["742366454399268e",{"2":{"178":1}}],["7420755f",{"2":{"176":1}}],["7434796193989666e",{"2":{"178":1}}],["7432466f",{"2":{"176":1}}],["7495322056308855e",{"2":{"178":1}}],["7496443f",{"2":{"176":1}}],["7484823f",{"2":{"176":1}}],["7480315",{"2":{"161":2}}],["741108333123053e",{"2":{"178":1}}],["741722111524122e",{"2":{"178":1}}],["741731f",{"2":{"176":1}}],["741042f",{"2":{"176":1}}],["741347639508506",{"2":{"161":1}}],["7409806058285545e",{"2":{"178":1}}],["7401575",{"2":{"161":2}}],["74000",{"2":{"146":1}}],["7402",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["7465",{"2":{"169":1}}],["7468008914093891",{"2":{"117":4}}],["746801",{"2":{"114":1}}],["74694291453392",{"2":{"117":4}}],["746943",{"2":{"114":1}}],["7472b5760531",{"2":{"67":1}}],["74",{"2":{"33":2,"130":2,"157":1}}],["7748336147079163e",{"2":{"178":1}}],["7747216f",{"2":{"176":1}}],["7746656838366666",{"2":{"117":1}}],["773211709524491e",{"2":{"178":1}}],["7739081980902574e",{"2":{"178":1}}],["7736758f",{"2":{"176":1}}],["7733535276924052",{"2":{"117":4}}],["773354",{"2":{"114":1}}],["772921f",{"2":{"176":1}}],["772386f",{"2":{"176":1}}],["772447f",{"2":{"176":1}}],["77878587905397e",{"2":{"178":1}}],["7788999500159933e",{"2":{"178":1}}],["778504f",{"2":{"176":1}}],["77852",{"2":{"146":1}}],["7786277f",{"2":{"176":1}}],["7783",{"2":{"169":1}}],["7777",{"2":{"169":1}}],["7711",{"2":{"169":1}}],["7715",{"2":{"169":1}}],["77165353",{"2":{"161":2}}],["770061535735622e",{"2":{"178":1}}],["770460759065174e",{"2":{"178":1}}],["7702",{"2":{"169":1}}],["7702484835053167",{"2":{"161":1}}],["7707",{"2":{"169":1}}],["7795275",{"2":{"161":2}}],["77926",{"2":{"146":2}}],["7764200452097264e",{"2":{"178":1}}],["7765425f",{"2":{"176":1}}],["776598",{"2":{"114":2}}],["7766",{"2":{"114":1}}],["77",{"2":{"33":2}}],["7218015030562925e",{"2":{"178":1}}],["7218908f",{"2":{"176":1}}],["72697730794587e",{"2":{"178":1}}],["7267500046794955e",{"2":{"178":1}}],["7267588f",{"2":{"176":1}}],["726744f",{"2":{"176":1}}],["725272136367971e",{"2":{"178":1}}],["725545f",{"2":{"176":1}}],["7271956201550424e",{"2":{"178":1}}],["7272024f",{"2":{"176":1}}],["7277",{"2":{"169":1}}],["7227947757592813e",{"2":{"178":1}}],["7229595742887346e",{"2":{"178":1}}],["7228747f",{"2":{"176":1}}],["7223847f",{"2":{"176":1}}],["729256116887287e",{"2":{"178":1}}],["729489f",{"2":{"176":1}}],["729033f",{"2":{"176":1}}],["723165616577822e",{"2":{"178":1}}],["723620038833896e",{"2":{"178":1}}],["7232323f",{"2":{"176":1}}],["7237308297251812",{"2":{"117":1}}],["72373",{"2":{"114":1}}],["723731",{"2":{"114":2}}],["724961964848815e",{"2":{"178":1}}],["7242764176536686e",{"2":{"178":1}}],["7248395f",{"2":{"176":1}}],["724509f",{"2":{"176":1}}],["724099",{"2":{"106":1}}],["728622945346778e",{"2":{"178":1}}],["7286",{"2":{"169":1}}],["7284236770750803",{"2":{"161":1}}],["72000",{"2":{"146":1}}],["72s",{"2":{"130":1}}],["72",{"2":{"30":2,"33":2,"130":2,"157":1}}],["718283141408786e",{"2":{"178":1}}],["718319527208828",{"2":{"161":1}}],["717873f",{"2":{"176":1}}],["7165725434877764e",{"2":{"178":1}}],["7165354",{"2":{"161":2}}],["716612f",{"2":{"176":1}}],["710742654238543e",{"2":{"178":1}}],["7106899179346915e",{"2":{"178":1}}],["710873f",{"2":{"176":1}}],["7104237",{"2":{"93":1}}],["715184f",{"2":{"176":1}}],["7130490009744172e",{"2":{"178":1}}],["7131364302980244e",{"2":{"178":1}}],["7131715f",{"2":{"176":1}}],["7131452f",{"2":{"176":1}}],["71333",{"2":{"146":3,"148":1}}],["714957330141975e",{"2":{"178":1}}],["7144235f",{"2":{"176":1}}],["714576065648294e",{"2":{"178":1}}],["7145",{"2":{"169":1}}],["71437216",{"2":{"120":1,"121":2}}],["71s",{"2":{"146":1}}],["711329",{"2":{"106":1}}],["71",{"2":{"30":1,"122":1,"130":1,"157":4}}],["700325920780472e",{"2":{"178":1}}],["700035f",{"2":{"176":1}}],["706687491621391e",{"2":{"178":1}}],["7063782f",{"2":{"176":1}}],["7095695f",{"2":{"176":1}}],["7093213401368348",{"2":{"161":1}}],["702819178230204e",{"2":{"178":1}}],["70251f",{"2":{"176":1}}],["70296",{"2":{"148":1}}],["708018f",{"2":{"176":1}}],["70866144",{"2":{"161":2}}],["7055343813336912e",{"2":{"178":1}}],["7051257f",{"2":{"176":1}}],["70593",{"2":{"146":1}}],["7035",{"2":{"169":1}}],["70390546",{"2":{"93":1}}],["7048862544448803",{"2":{"161":1}}],["70427s",{"2":{"157":1}}],["707791502237676e",{"2":{"178":1}}],["7071366793328487e",{"2":{"178":1}}],["7072892f",{"2":{"176":1}}],["70741",{"2":{"146":1}}],["707534",{"2":{"114":1}}],["7014029067791572e",{"2":{"178":1}}],["7011944f",{"2":{"176":1}}],["701588",{"2":{"106":1}}],["701",{"2":{"77":1}}],["70",{"2":{"30":1,"157":1}}],["8697572701351324e",{"2":{"178":1}}],["8686171215320368e",{"2":{"178":1}}],["86815",{"2":{"146":1}}],["863057698951943e",{"2":{"178":1}}],["86370",{"2":{"146":1}}],["860495f",{"2":{"176":1}}],["8601828553599953",{"2":{"117":1}}],["862825f",{"2":{"176":1}}],["8657123039017627e",{"2":{"178":1}}],["8657123f",{"2":{"176":1}}],["8657137f",{"2":{"176":1}}],["86593",{"2":{"146":2}}],["8670",{"2":{"169":1}}],["86197186332639e",{"2":{"178":1}}],["861739f",{"2":{"176":1}}],["8618",{"2":{"169":1}}],["8615",{"2":{"169":1}}],["86614174",{"2":{"161":2}}],["822022082404726e",{"2":{"178":1}}],["829695899865612e",{"2":{"178":1}}],["829287f",{"2":{"176":1}}],["823328f",{"2":{"176":1}}],["82370",{"2":{"146":1}}],["827763660900955e",{"2":{"178":1}}],["8277554f",{"2":{"176":1}}],["8273",{"2":{"169":1}}],["820345670040062e",{"2":{"178":1}}],["820798825457177e",{"2":{"178":1}}],["820607f",{"2":{"176":1}}],["8200258902651266",{"2":{"161":1}}],["82000",{"2":{"146":4,"148":2}}],["824429240293579e",{"2":{"178":1}}],["824237f",{"2":{"176":1}}],["8241",{"2":{"169":1}}],["8255",{"2":{"169":1}}],["82519",{"2":{"146":2}}],["82561636",{"2":{"93":1}}],["82667",{"2":{"146":2,"148":1}}],["82",{"2":{"130":4,"157":1}}],["82s",{"2":{"130":1,"146":1}}],["8567883300781978e",{"2":{"178":1}}],["85630",{"2":{"146":1}}],["854098993415589e",{"2":{"178":1}}],["854975f",{"2":{"176":1}}],["85481",{"2":{"146":1}}],["853987f",{"2":{"176":1}}],["85333",{"2":{"146":2}}],["852763628187465e",{"2":{"178":1}}],["852755f",{"2":{"176":1}}],["8529",{"2":{"169":1}}],["8520467822193756",{"2":{"161":1}}],["85",{"2":{"130":4,"157":1}}],["850177486641925e",{"2":{"178":1}}],["850088f",{"2":{"176":1}}],["8506",{"2":{"169":1}}],["850",{"2":{"127":1}}],["8576513349182378",{"2":{"161":1}}],["85704",{"2":{"148":1}}],["857257",{"2":{"115":1}}],["857126",{"2":{"115":1}}],["8573820474674845",{"2":{"114":1}}],["8c79",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["838356162296618e",{"2":{"178":1}}],["8382036f",{"2":{"176":1}}],["830162795172779e",{"2":{"178":1}}],["830005f",{"2":{"176":1}}],["8306",{"2":{"169":1}}],["832724304684747e",{"2":{"178":1}}],["8322835406517704e",{"2":{"178":1}}],["832622f",{"2":{"176":1}}],["8320108f",{"2":{"176":1}}],["83589974243825e",{"2":{"178":1}}],["8355905f",{"2":{"176":1}}],["8353388",{"2":{"93":1}}],["8398131667590425e",{"2":{"178":1}}],["8398154f",{"2":{"176":1}}],["839504f",{"2":{"176":1}}],["8391",{"2":{"169":1}}],["8393",{"2":{"114":1}}],["8393034",{"2":{"114":1}}],["839303",{"2":{"114":2}}],["833026219703481",{"2":{"161":1}}],["833518",{"2":{"115":1}}],["83415248232083e",{"2":{"178":1}}],["834219f",{"2":{"176":1}}],["8346457",{"2":{"161":2}}],["83485f",{"2":{"76":1}}],["83",{"2":{"130":5}}],["83s",{"2":{"130":1}}],["836",{"2":{"127":1}}],["8",{"2":{"76":8,"114":2,"116":4,"127":1,"130":2,"134":1,"137":8,"146":5,"148":1,"157":2,"161":1,"163":1,"165":4,"169":4,"176":78,"178":75}}],["843923196491998e",{"2":{"178":1}}],["8453891273199884e",{"2":{"178":1}}],["8455012f",{"2":{"176":1}}],["847905802303613e",{"2":{"178":1}}],["8479058f",{"2":{"176":1}}],["844625f",{"2":{"176":1}}],["8442135f",{"2":{"176":1}}],["84444",{"2":{"148":1}}],["841101886935429e",{"2":{"178":1}}],["8411604862788284e",{"2":{"178":1}}],["841141f",{"2":{"176":1}}],["8415",{"2":{"169":1}}],["84148",{"2":{"146":1}}],["8462913756395639",{"2":{"161":1}}],["8425196",{"2":{"161":2}}],["840170920005323e",{"2":{"178":1}}],["8400239055481803e",{"2":{"178":1}}],["8400455f",{"2":{"176":1}}],["84000",{"2":{"146":1}}],["8409338f",{"2":{"176":1}}],["84074",{"2":{"146":3}}],["84",{"2":{"33":1,"45":2,"77":1,"127":4,"130":5,"157":1}}],["818632723978417e",{"2":{"178":1}}],["8185434f",{"2":{"176":1}}],["810161801895931e",{"2":{"178":1}}],["81037",{"2":{"146":1}}],["819092f",{"2":{"176":1}}],["8199294436184201",{"2":{"161":1}}],["8143643970444945e",{"2":{"178":1}}],["8142917855357026e",{"2":{"178":1}}],["814063f",{"2":{"176":1}}],["814016f",{"2":{"176":1}}],["814495f",{"2":{"176":1}}],["8144",{"2":{"169":1}}],["8179611f",{"2":{"176":1}}],["8110",{"2":{"169":1}}],["8110236",{"2":{"161":2}}],["8167106912177227e",{"2":{"178":1}}],["8160",{"2":{"169":1}}],["816280759896085",{"2":{"161":1}}],["81662f",{"2":{"76":1}}],["81333",{"2":{"146":3}}],["812",{"2":{"122":1}}],["81",{"2":{"33":1,"76":6,"122":1,"130":1,"157":4}}],["800594146283569e",{"2":{"178":1}}],["8008025630753797",{"2":{"161":1}}],["805957f",{"2":{"176":1}}],["809752f",{"2":{"176":1}}],["809456",{"2":{"114":1}}],["803318398477016e",{"2":{"178":1}}],["8034304f",{"2":{"176":1}}],["8031496",{"2":{"161":2}}],["80741",{"2":{"146":2,"148":1}}],["80889",{"2":{"146":1}}],["80882f",{"2":{"76":1}}],["8060464086990835e",{"2":{"178":1}}],["806805023551872e",{"2":{"178":1}}],["80667",{"2":{"146":3,"148":1}}],["806523",{"2":{"122":1}}],["801726652450645e",{"2":{"178":1}}],["8011788202541421",{"2":{"161":1}}],["8016562",{"2":{"86":1}}],["801",{"2":{"77":1}}],["80",{"2":{"30":1,"123":1,"130":3,"139":1,"150":1,"157":2,"158":1,"166":1,"168":1,"180":1}}],["899342734955543e",{"2":{"178":1}}],["899427f",{"2":{"176":1}}],["899766",{"2":{"114":1}}],["894572105309916e",{"2":{"178":1}}],["8943287402204494e",{"2":{"178":1}}],["8943165f",{"2":{"176":1}}],["8942063f",{"2":{"176":1}}],["8980878f",{"2":{"176":1}}],["8979652809521424e",{"2":{"178":1}}],["8972862806322315",{"2":{"161":1}}],["8976378",{"2":{"161":2}}],["896366021967646e",{"2":{"178":1}}],["8969636f",{"2":{"176":1}}],["8969011895086174",{"2":{"161":1}}],["896093f",{"2":{"176":1}}],["896",{"2":{"127":1}}],["8935247",{"2":{"93":1}}],["89",{"2":{"30":2,"130":1}}],["881288632313899e",{"2":{"178":1}}],["881170775975113e",{"2":{"178":1}}],["8811017f",{"2":{"176":1}}],["8883087537894795e",{"2":{"178":1}}],["8881644f",{"2":{"176":1}}],["886618084169345e",{"2":{"178":1}}],["886614f",{"2":{"176":1}}],["8849925238607527e",{"2":{"178":1}}],["8840798f",{"2":{"176":1}}],["8838037926986118e",{"2":{"178":1}}],["8835",{"2":{"169":1}}],["889110084245857e",{"2":{"178":1}}],["889421073401694e",{"2":{"178":1}}],["8892682f",{"2":{"176":1}}],["8895436f",{"2":{"176":1}}],["8893",{"2":{"169":1}}],["8808615f",{"2":{"176":1}}],["88000",{"2":{"148":1}}],["8850651f",{"2":{"176":1}}],["885",{"2":{"130":1}}],["88",{"2":{"30":2,"33":1,"157":4}}],["8789323529485844e",{"2":{"178":1}}],["8786994f",{"2":{"176":1}}],["8710416109675e",{"2":{"178":1}}],["8791362649300245e",{"2":{"178":1}}],["8790112f",{"2":{"176":1}}],["8739767246117575e",{"2":{"178":1}}],["87350838026452e",{"2":{"178":1}}],["8738874f",{"2":{"176":1}}],["875502834504688e",{"2":{"178":1}}],["8751785329092656e",{"2":{"178":1}}],["8750406823709946e",{"2":{"178":1}}],["875602f",{"2":{"176":1}}],["8754493f",{"2":{"176":1}}],["876086405363789e",{"2":{"178":1}}],["8760274731300263e",{"2":{"178":1}}],["876047f",{"2":{"176":1}}],["876042f",{"2":{"176":1}}],["876639819719384e",{"2":{"178":1}}],["876832f",{"2":{"176":1}}],["874554912902037e",{"2":{"178":1}}],["874979f",{"2":{"176":1}}],["8744295f",{"2":{"176":1}}],["8741",{"2":{"169":1}}],["8740157",{"2":{"161":2}}],["87407",{"2":{"146":1}}],["870969f",{"2":{"176":1}}],["8704",{"2":{"169":1}}],["87037",{"2":{"148":1}}],["87s",{"2":{"146":1}}],["87778787425581e",{"2":{"178":1}}],["877887f",{"2":{"176":1}}],["87704",{"2":{"146":3}}],["877497",{"2":{"120":2,"121":2}}],["87",{"2":{"30":1,"89":1,"130":2,"157":1}}],["✅",{"2":{"30":8,"33":1}}],["⚡",{"2":{"27":1}}],["^2",{"2":{"175":2,"176":1}}],["^",{"2":{"42":1,"77":1,"174":2}}],["^saxe14",{"2":{"25":2}}],["^martens2010",{"2":{"25":2}}],["≤",{"2":{"25":2,"53":2}}],["5g",{"2":{"165":1}}],["5gb",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["585965390548024e",{"2":{"178":1}}],["585115557038457e",{"2":{"178":1}}],["5851314",{"2":{"165":1}}],["5851955365208916",{"2":{"161":1}}],["584691828754987e",{"2":{"178":1}}],["584804f",{"2":{"176":1}}],["581324318981226e",{"2":{"178":1}}],["5811576091851305e",{"2":{"178":1}}],["5817138187136965e",{"2":{"178":1}}],["581487f",{"2":{"176":1}}],["583041571692478e",{"2":{"178":1}}],["5835478342386437e",{"2":{"178":1}}],["583537046650304e",{"2":{"178":1}}],["5835740998076307e",{"2":{"178":1}}],["5835829f",{"2":{"176":1}}],["5838387f",{"2":{"176":1}}],["5838617f",{"2":{"176":1}}],["583724f",{"2":{"176":1}}],["586005f",{"2":{"176":1}}],["5828546f",{"2":{"176":1}}],["582739f",{"2":{"176":1}}],["5826",{"2":{"169":1}}],["5826772",{"2":{"161":2}}],["5802782879406165e",{"2":{"178":1}}],["5802695f",{"2":{"176":1}}],["5800473f",{"2":{"176":1}}],["5805399434794658",{"2":{"161":1}}],["5892481295457608",{"2":{"161":1}}],["58721",{"2":{"114":1}}],["58720636",{"2":{"114":1}}],["58720636f0",{"2":{"114":1}}],["587206",{"2":{"114":2}}],["597936184525612e",{"2":{"178":1}}],["597749f",{"2":{"176":1}}],["596403084302646e",{"2":{"178":1}}],["596612f",{"2":{"176":1}}],["599388666974163e",{"2":{"178":1}}],["59981734875745e",{"2":{"178":1}}],["5992895f",{"2":{"176":1}}],["5985377908932743e",{"2":{"178":1}}],["595301866045517e",{"2":{"178":1}}],["5950694f",{"2":{"176":1}}],["5957",{"2":{"169":1}}],["590277655620708e",{"2":{"178":1}}],["5902816f",{"2":{"176":1}}],["590545715049844e",{"2":{"178":1}}],["5905511",{"2":{"161":2}}],["5903535f",{"2":{"176":1}}],["5932",{"2":{"169":1}}],["5919335",{"2":{"165":1}}],["59s",{"2":{"146":1}}],["5949539",{"2":{"122":1}}],["5fs",{"2":{"157":1}}],["5f",{"2":{"137":3,"146":2}}],["5f0",{"2":{"93":1,"96":1,"136":1,"168":12}}],["5799352725113988e",{"2":{"178":1}}],["5791984f",{"2":{"122":1}}],["5747502522860244e",{"2":{"178":1}}],["573348773018575e",{"2":{"178":1}}],["573557f",{"2":{"176":1}}],["576830727569789e",{"2":{"178":1}}],["5767315f",{"2":{"176":1}}],["5761396334948753",{"2":{"161":1}}],["577739912311878e",{"2":{"178":1}}],["5776145f",{"2":{"176":1}}],["577843f",{"2":{"176":1}}],["577181",{"2":{"114":1}}],["5718",{"2":{"174":2}}],["5713",{"2":{"169":1}}],["5757608251401417e",{"2":{"178":1}}],["57578707",{"2":{"122":1}}],["575863f",{"2":{"176":1}}],["5755",{"2":{"169":1}}],["57s",{"2":{"130":1}}],["563978734533861e",{"2":{"178":1}}],["563826f",{"2":{"176":1}}],["566278850645178e",{"2":{"178":1}}],["5662591600023589",{"2":{"161":1}}],["5669435f",{"2":{"176":1}}],["560977708009373e",{"2":{"178":1}}],["560769f",{"2":{"176":1}}],["56055",{"2":{"114":1}}],["5697686f",{"2":{"176":1}}],["5613",{"2":{"169":1}}],["5617763080815885",{"2":{"161":1}}],["5624336795805126e",{"2":{"178":1}}],["562178f",{"2":{"176":1}}],["5629",{"2":{"169":1}}],["56263",{"2":{"137":1}}],["5648949",{"2":{"165":1}}],["56594235",{"2":{"165":1}}],["56",{"2":{"157":3}}],["5672",{"2":{"169":1}}],["5675557670686644",{"2":{"117":1}}],["56779",{"2":{"114":1}}],["567794",{"2":{"114":2}}],["523866298604078e",{"2":{"178":1}}],["523670449804695e",{"2":{"178":1}}],["5233795f",{"2":{"176":1}}],["529884638642367e",{"2":{"178":1}}],["5294745f",{"2":{"176":1}}],["521463371540164e",{"2":{"178":1}}],["521594f",{"2":{"176":1}}],["5224354f",{"2":{"176":1}}],["5224755",{"2":{"122":1}}],["520004628907118e",{"2":{"178":1}}],["520957f",{"2":{"176":1}}],["520239616672976",{"2":{"161":1}}],["528500230468802e",{"2":{"178":1}}],["5282093f",{"2":{"176":1}}],["5281",{"2":{"69":2}}],["5256145600285591e",{"2":{"178":1}}],["5250838017271136e",{"2":{"178":1}}],["5250322f",{"2":{"176":1}}],["5251731f",{"2":{"176":1}}],["524511247321899e",{"2":{"178":1}}],["524324f",{"2":{"176":1}}],["524008",{"2":{"114":1}}],["5263379038769733e",{"2":{"178":1}}],["5261",{"2":{"169":1}}],["5266",{"2":{"169":1}}],["5260752",{"2":{"165":1}}],["52",{"2":{"169":2}}],["5277",{"2":{"169":1}}],["527559",{"2":{"161":2}}],["5×3",{"2":{"114":8,"115":1}}],["5×5",{"2":{"25":1,"114":3}}],["539231921423221e",{"2":{"178":1}}],["5340",{"2":{"169":1}}],["5379029302584267e",{"2":{"178":1}}],["5379262f",{"2":{"176":1}}],["5374796087707215e",{"2":{"178":1}}],["537716f",{"2":{"176":1}}],["537271f",{"2":{"176":1}}],["5375",{"2":{"169":1}}],["5370978",{"2":{"122":1}}],["530427f",{"2":{"176":1}}],["5300",{"2":{"169":1}}],["530702919645007e",{"2":{"178":1}}],["5307",{"2":{"169":1}}],["5301",{"2":{"169":1}}],["5350",{"2":{"169":1}}],["5317",{"2":{"169":1}}],["53158027",{"2":{"93":2,"96":2}}],["5330",{"2":{"169":1}}],["533871im",{"2":{"106":1}}],["53",{"2":{"90":1,"157":2,"169":1}}],["511150892033518e",{"2":{"178":1}}],["5175235881113238e",{"2":{"178":1}}],["5172509f",{"2":{"176":1}}],["516213631275628e",{"2":{"178":1}}],["516303f",{"2":{"176":1}}],["5164032",{"2":{"122":1}}],["510741f",{"2":{"176":1}}],["51019937",{"2":{"122":1}}],["5144961880325354e",{"2":{"178":1}}],["514423809681148e",{"2":{"178":1}}],["5140506f",{"2":{"176":1}}],["5143841f",{"2":{"176":1}}],["51515f",{"2":{"176":1}}],["513892487012006e",{"2":{"178":1}}],["5139",{"2":{"169":1}}],["5133",{"2":{"169":1}}],["5198125f",{"2":{"176":1}}],["5198015",{"2":{"122":1}}],["51968503",{"2":{"161":2}}],["518616266452973e",{"2":{"178":1}}],["5184637f",{"2":{"176":1}}],["518",{"2":{"123":1}}],["51",{"2":{"89":1,"122":1,"165":1}}],["512",{"2":{"77":3}}],["5023506306285124e",{"2":{"178":1}}],["5023467f",{"2":{"176":1}}],["509748841870187e",{"2":{"178":1}}],["509940014327816e",{"2":{"178":1}}],["509033f",{"2":{"176":1}}],["509549f",{"2":{"176":1}}],["50963",{"2":{"146":2}}],["505891230786999e",{"2":{"178":1}}],["5058187f",{"2":{"176":1}}],["5056565749805115e",{"2":{"178":1}}],["5052479f",{"2":{"176":1}}],["5051",{"2":{"169":1}}],["5075481338853033e",{"2":{"178":1}}],["507356f",{"2":{"176":1}}],["50741",{"2":{"146":1}}],["5049489024114195e",{"2":{"178":1}}],["5049095f",{"2":{"176":1}}],["5049",{"2":{"169":1}}],["5047223947023354",{"2":{"161":1}}],["508686f",{"2":{"176":1}}],["50863314",{"2":{"122":1}}],["50849473",{"2":{"165":1}}],["5000×30×1",{"2":{"169":1}}],["5000",{"2":{"169":5}}],["500",{"2":{"134":2}}],["50622",{"2":{"137":1}}],["5062956",{"2":{"122":1}}],["506485",{"2":{"115":1}}],["503186",{"2":{"115":1}}],["501502710715354e",{"2":{"178":1}}],["501913f",{"2":{"176":1}}],["5013011f",{"2":{"176":1}}],["5012",{"2":{"169":1}}],["5016103617397162e",{"2":{"178":1}}],["5016",{"2":{"169":1}}],["501",{"2":{"77":1}}],["50",{"2":{"49":4,"130":8,"157":3,"165":1,"169":2}}],["551146137483005e",{"2":{"178":1}}],["5511811",{"2":{"161":2}}],["553353125548059e",{"2":{"178":1}}],["55354f",{"2":{"176":1}}],["5532",{"2":{"114":1}}],["5524204764910925e",{"2":{"178":1}}],["5522899f",{"2":{"176":1}}],["5527",{"2":{"169":1}}],["557869828989134e",{"2":{"178":1}}],["5576777f",{"2":{"176":1}}],["55730057",{"2":{"122":1}}],["5561",{"2":{"169":1}}],["5561461874821676",{"2":{"161":1}}],["5544688796856879",{"2":{"161":1}}],["559390809804468e",{"2":{"178":1}}],["559493f",{"2":{"176":1}}],["5599",{"2":{"169":1}}],["55998546",{"2":{"165":1}}],["5590551",{"2":{"161":2}}],["5595843665394066",{"2":{"117":1}}],["550",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["5583162",{"2":{"122":1}}],["55591752995915e",{"2":{"178":1}}],["555814030697972e",{"2":{"178":1}}],["555243283046649e",{"2":{"178":1}}],["555229f",{"2":{"176":1}}],["555578342959509e",{"2":{"178":1}}],["5557747f",{"2":{"176":1}}],["5557365f",{"2":{"176":1}}],["5553797706980106",{"2":{"117":1}}],["5554656",{"2":{"93":1}}],["55",{"2":{"33":1,"130":1}}],["5455885078912935e",{"2":{"178":1}}],["5455973f",{"2":{"176":1}}],["54863054661333e",{"2":{"178":1}}],["5483396f",{"2":{"176":1}}],["548237f",{"2":{"176":1}}],["548969f",{"2":{"176":1}}],["546161133883859e",{"2":{"178":1}}],["5462085255925074e",{"2":{"178":1}}],["5462173f",{"2":{"176":1}}],["546571f",{"2":{"176":1}}],["5499685383050703e",{"2":{"178":1}}],["54916126058287e",{"2":{"178":1}}],["5496958f",{"2":{"176":1}}],["5494141",{"2":{"76":1}}],["547411341803254e",{"2":{"178":1}}],["54710484138598e",{"2":{"178":1}}],["5471847f",{"2":{"176":1}}],["547716f",{"2":{"176":1}}],["5470",{"2":{"169":1}}],["5476424498276177",{"2":{"117":4}}],["547642",{"2":{"114":1}}],["540841f",{"2":{"176":1}}],["540",{"2":{"149":4}}],["54s",{"2":{"148":1}}],["54452",{"2":{"115":1}}],["541064",{"2":{"98":2}}],["54",{"2":{"33":1,"123":2,"139":2,"150":2,"157":2,"158":2,"166":2,"169":2,"180":2}}],["5x5",{"2":{"25":1}}],["5",{"2":{"25":7,"30":1,"33":1,"35":1,"39":4,"42":4,"45":4,"49":4,"55":7,"69":1,"76":14,"84":5,"86":1,"96":1,"97":1,"98":1,"106":6,"114":29,"115":2,"116":3,"120":3,"122":7,"123":2,"127":9,"130":2,"137":7,"139":2,"146":4,"147":2,"148":1,"149":24,"150":2,"157":2,"158":2,"161":8,"165":2,"166":2,"168":4,"169":18,"170":1,"174":4,"175":2,"176":735,"178":687,"179":3,"180":2}}],["5d",{"2":{"21":1,"56":1,"177":1}}],["6562542714540895e",{"2":{"178":1}}],["656955858682703e",{"2":{"178":1}}],["656956f",{"2":{"176":1}}],["6563535f",{"2":{"176":1}}],["6508766208710216e",{"2":{"178":1}}],["6507185f",{"2":{"176":1}}],["650456f",{"2":{"176":1}}],["654852809560827e",{"2":{"178":1}}],["654441678177726e",{"2":{"178":1}}],["6542092f",{"2":{"176":1}}],["6546853",{"2":{"76":1}}],["65254034917068e",{"2":{"178":1}}],["652526f",{"2":{"176":1}}],["652911103319343e",{"2":{"178":1}}],["652911f",{"2":{"176":1}}],["652013f",{"2":{"176":1}}],["6520",{"2":{"169":1}}],["6571",{"2":{"169":1}}],["6591533520776037",{"2":{"161":1}}],["6537",{"2":{"169":1}}],["6535434",{"2":{"161":2}}],["65333",{"2":{"146":1}}],["65",{"2":{"157":4}}],["6554612490727632e",{"2":{"178":1}}],["655143f",{"2":{"176":1}}],["6556698f",{"2":{"176":1}}],["6556360448565952",{"2":{"117":1}}],["655881",{"2":{"114":1}}],["6294288956579837e",{"2":{"178":1}}],["6293895f",{"2":{"176":1}}],["6257205572562293e",{"2":{"178":1}}],["6238286792196844e",{"2":{"178":1}}],["623602693754153e",{"2":{"178":1}}],["623619802120242e",{"2":{"178":1}}],["6235957f",{"2":{"176":1}}],["623581f",{"2":{"176":1}}],["6234446f",{"2":{"176":1}}],["62395f",{"2":{"76":1}}],["6200796619726213e",{"2":{"178":1}}],["620661696084314e",{"2":{"178":1}}],["6203121f",{"2":{"176":1}}],["620589f",{"2":{"176":1}}],["6208",{"2":{"169":1}}],["6274885954248864e",{"2":{"178":1}}],["6274991143463677",{"2":{"161":1}}],["627792131726496e",{"2":{"178":1}}],["6273517273907963e",{"2":{"178":1}}],["6273632f",{"2":{"176":1}}],["6276277f",{"2":{"176":1}}],["6287",{"2":{"169":1}}],["6215870033126495",{"2":{"161":1}}],["621958",{"2":{"114":1}}],["624326981268932e",{"2":{"178":1}}],["624383955429775",{"2":{"117":1}}],["624384",{"2":{"114":1}}],["624178651617007e",{"2":{"178":1}}],["624112f",{"2":{"176":1}}],["624094f",{"2":{"176":1}}],["6247",{"2":{"169":1}}],["6248666914928798",{"2":{"161":1}}],["6226278f",{"2":{"176":1}}],["6220472",{"2":{"161":2}}],["622865",{"2":{"115":1}}],["62",{"2":{"130":1,"157":10}}],["62625877100596",{"2":{"114":1}}],["6098174746802816e",{"2":{"178":1}}],["609589246928112e",{"2":{"178":1}}],["609585f",{"2":{"176":1}}],["6095266f",{"2":{"176":1}}],["60422963212703e",{"2":{"178":1}}],["60452f",{"2":{"176":1}}],["60281667731119e",{"2":{"178":1}}],["60294497",{"2":{"122":1}}],["6057756462149665e",{"2":{"178":1}}],["605758659203735e",{"2":{"178":1}}],["6056736f",{"2":{"176":1}}],["60535f",{"2":{"176":1}}],["6069172251884462e",{"2":{"178":1}}],["6068446f",{"2":{"176":1}}],["6064",{"2":{"169":1}}],["603625506730367e",{"2":{"178":1}}],["6035586175374077e",{"2":{"178":1}}],["603549365892236e",{"2":{"178":1}}],["603789679714524e",{"2":{"178":1}}],["603711f",{"2":{"176":1}}],["6038585f",{"2":{"176":1}}],["6030723f",{"2":{"176":1}}],["6039422f",{"2":{"176":1}}],["6084",{"2":{"169":1}}],["6075373706400867e",{"2":{"178":1}}],["607562f",{"2":{"176":1}}],["60725267778643e",{"2":{"178":1}}],["60721f",{"2":{"76":1}}],["6074382f",{"2":{"176":1}}],["6070",{"2":{"169":1}}],["6009650468376435e",{"2":{"178":1}}],["600226f",{"2":{"176":1}}],["600",{"2":{"166":1,"180":1}}],["60s",{"2":{"146":1}}],["60",{"2":{"130":1}}],["601256f",{"2":{"176":1}}],["6013",{"2":{"169":1}}],["601",{"2":{"77":1}}],["610411035879564e",{"2":{"178":1}}],["6101554f",{"2":{"176":1}}],["6101978",{"2":{"76":1}}],["618102235067694e",{"2":{"178":1}}],["6180001f",{"2":{"176":1}}],["6150345400787905e",{"2":{"178":1}}],["615466f",{"2":{"176":1}}],["6191660394305017e",{"2":{"178":1}}],["619291f",{"2":{"176":1}}],["616499f",{"2":{"176":1}}],["6172396f",{"2":{"176":1}}],["6173",{"2":{"169":1}}],["612562515123608e",{"2":{"178":1}}],["612950627344092e",{"2":{"178":1}}],["6126414f",{"2":{"176":1}}],["6123",{"2":{"169":1}}],["6120",{"2":{"25":1}}],["6143304814989134e",{"2":{"178":1}}],["6143286",{"2":{"93":1}}],["614626f",{"2":{"176":1}}],["61417323",{"2":{"161":2}}],["61",{"2":{"122":1,"130":5}}],["61324424",{"2":{"122":1}}],["644175433505005e",{"2":{"178":1}}],["644431f",{"2":{"176":1}}],["648838303619153e",{"2":{"178":1}}],["648911f",{"2":{"176":1}}],["6417112338565525e",{"2":{"178":1}}],["645587063908374e",{"2":{"178":1}}],["645485f",{"2":{"176":1}}],["6456672129067134e",{"2":{"178":1}}],["6456693",{"2":{"161":2}}],["6456584f",{"2":{"176":1}}],["6456416023530093",{"2":{"117":1}}],["642733490895133e",{"2":{"178":1}}],["6427433f",{"2":{"176":1}}],["6428454274902315e",{"2":{"178":1}}],["642200316326408e",{"2":{"178":1}}],["6429665f",{"2":{"176":1}}],["6424328f",{"2":{"176":1}}],["6472",{"2":{"169":1}}],["6409",{"2":{"169":1}}],["649894381512534e",{"2":{"178":1}}],["6498983f",{"2":{"176":1}}],["6491794f",{"2":{"176":1}}],["6496",{"2":{"169":1}}],["6494",{"2":{"169":1}}],["646368f",{"2":{"176":1}}],["646559494382461e",{"2":{"178":1}}],["646594573628806e",{"2":{"178":1}}],["6465",{"2":{"169":1}}],["646440085736948",{"2":{"161":1}}],["6438360803492721",{"2":{"161":1}}],["64",{"2":{"55":9,"123":2,"131":2,"139":2,"150":2,"155":2,"158":2,"166":2,"169":1,"171":2,"180":2}}],["639141554368278e",{"2":{"178":1}}],["639267f",{"2":{"176":1}}],["6381275007925054e",{"2":{"178":1}}],["638258f",{"2":{"176":1}}],["636661037635938e",{"2":{"178":1}}],["636652f",{"2":{"176":1}}],["632844671472133e",{"2":{"178":1}}],["6326525f",{"2":{"176":1}}],["633182863707405e",{"2":{"178":1}}],["6333824f",{"2":{"176":1}}],["63307f",{"2":{"76":1}}],["630430780572467e",{"2":{"178":1}}],["6304347f",{"2":{"176":1}}],["6307765771014e",{"2":{"178":1}}],["6308886f",{"2":{"176":1}}],["6358",{"2":{"169":1}}],["635090436697959",{"2":{"161":1}}],["6377",{"2":{"169":1}}],["6343574599006666e",{"2":{"178":1}}],["6342583f",{"2":{"176":1}}],["6340362477836592",{"2":{"117":1}}],["634549",{"2":{"106":1}}],["63",{"2":{"33":1}}],["662169743560146e",{"2":{"178":1}}],["662256609488611e",{"2":{"178":1}}],["662216581117524e",{"2":{"178":1}}],["662209f",{"2":{"176":1}}],["662465f",{"2":{"176":1}}],["6616160305246882e",{"2":{"178":1}}],["6616243f",{"2":{"176":1}}],["661768f",{"2":{"176":1}}],["6610567f",{"2":{"176":1}}],["6619406f",{"2":{"176":1}}],["660766344111685e",{"2":{"178":1}}],["660268234323378e",{"2":{"178":1}}],["6605536932576863e",{"2":{"178":1}}],["6600687f",{"2":{"176":1}}],["66000",{"2":{"146":2}}],["6606558f",{"2":{"176":1}}],["663567542704249e",{"2":{"178":1}}],["6634425f",{"2":{"176":1}}],["663036",{"2":{"115":1}}],["6677620032421246e",{"2":{"178":1}}],["6678346f",{"2":{"176":1}}],["6674",{"2":{"169":1}}],["667572185253954",{"2":{"161":1}}],["6669",{"2":{"169":1}}],["666965",{"2":{"106":1}}],["66667",{"2":{"146":1,"148":1}}],["66",{"2":{"30":1,"130":1,"157":1}}],["694335068663901e",{"2":{"178":1}}],["694493f",{"2":{"176":1}}],["6980601816385334e",{"2":{"178":1}}],["698323804024227",{"2":{"161":1}}],["692194324444572e",{"2":{"178":1}}],["6922031f",{"2":{"176":1}}],["691454606079752e",{"2":{"178":1}}],["6913481771491425e",{"2":{"178":1}}],["691387f",{"2":{"176":1}}],["69171f",{"2":{"176":1}}],["6977842f",{"2":{"176":1}}],["6954",{"2":{"169":1}}],["6937",{"2":{"169":1}}],["690259777836923e",{"2":{"178":1}}],["6901933f",{"2":{"176":1}}],["6901005f",{"2":{"176":1}}],["690087f",{"2":{"176":1}}],["6909",{"2":{"169":2}}],["690492107796345",{"2":{"161":1}}],["6965624404632386",{"2":{"161":1}}],["69630",{"2":{"146":2}}],["69",{"2":{"30":2,"84":1,"157":1}}],["689984967070993e",{"2":{"178":1}}],["687340829338635e",{"2":{"178":1}}],["687611",{"2":{"106":1}}],["686404129065536e",{"2":{"178":1}}],["684615903553573e",{"2":{"178":1}}],["68468636",{"2":{"122":1}}],["684138878494626e",{"2":{"178":1}}],["6840724f",{"2":{"176":1}}],["68235294145288e",{"2":{"178":1}}],["6824847039266858e",{"2":{"178":1}}],["682745226330068e",{"2":{"178":1}}],["6822305f",{"2":{"176":1}}],["6826072f",{"2":{"176":1}}],["6829777f",{"2":{"176":1}}],["6828",{"2":{"169":1}}],["681806659489127e",{"2":{"178":1}}],["681807f",{"2":{"176":1}}],["681728",{"2":{"115":1}}],["680510923966967e",{"2":{"178":1}}],["6804965f",{"2":{"176":1}}],["6808",{"2":{"169":1}}],["680748",{"2":{"93":1}}],["6888",{"2":{"169":1}}],["6835",{"2":{"169":1}}],["6830945313415872",{"2":{"117":1}}],["6850394",{"2":{"161":2}}],["685079",{"2":{"114":1}}],["68s",{"2":{"146":1}}],["68",{"2":{"30":1,"33":1,"130":1,"157":2}}],["672804507212121e",{"2":{"178":1}}],["672894f",{"2":{"176":1}}],["679508920209203e",{"2":{"178":1}}],["6790069248396125e",{"2":{"178":1}}],["6790734f",{"2":{"176":1}}],["67909",{"2":{"114":1}}],["67908657",{"2":{"114":1}}],["679087",{"2":{"114":2}}],["675251f",{"2":{"176":1}}],["675739f",{"2":{"176":1}}],["677660529568793e",{"2":{"178":1}}],["6776220912718907",{"2":{"117":1}}],["6771653",{"2":{"161":2}}],["67861",{"2":{"114":1}}],["671014",{"2":{"106":1}}],["670317006038299e",{"2":{"178":1}}],["6703088f",{"2":{"176":1}}],["670562696408242e",{"2":{"178":1}}],["670577f",{"2":{"176":1}}],["6705545",{"2":{"93":1}}],["67094",{"2":{"106":1}}],["67016f",{"2":{"76":1}}],["67",{"2":{"30":1,"130":1}}],["6",{"2":{"25":1,"35":1,"45":2,"76":12,"97":1,"114":2,"116":3,"122":1,"127":5,"130":2,"137":7,"146":6,"148":1,"157":2,"161":6,"169":10,"170":6,"175":2,"176":157,"178":155}}],["−x",{"2":{"25":1}}],["+=",{"2":{"128":2,"145":2,"156":2,"169":1}}],["++",{"2":{"89":1}}],["+ϵ∗γ+βwhere",{"2":{"55":1}}],["+ϵ∗γ+βarguments",{"2":{"21":1}}],["+",{"2":{"25":3,"32":1,"39":2,"42":1,"44":1,"48":5,"49":7,"51":2,"53":4,"56":1,"102":2,"114":4,"122":3,"134":2,"136":1,"161":1,"168":4,"169":1,"174":13,"175":1,"176":2}}],["ylabel=",{"2":{"161":1,"165":1,"168":1,"175":1,"176":1,"179":2}}],["y=x2−2x",{"2":{"161":1}}],["y=x−e",{"2":{"21":1,"55":1}}],["yi∈rm",{"2":{"122":1}}],["yi",{"2":{"122":1}}],["yes",{"2":{"71":1,"100":1}}],["year",{"2":{"69":2}}],["yet",{"2":{"44":1}}],["y3",{"2":{"48":1}}],["y2",{"2":{"48":1,"168":2}}],["y1",{"2":{"48":1,"168":2}}],["y",{"2":{"40":1,"42":4,"48":8,"49":3,"51":6,"53":10,"55":4,"63":1,"76":1,"77":4,"86":4,"90":2,"102":3,"103":4,"120":2,"122":18,"126":6,"128":10,"129":2,"134":4,"135":5,"136":25,"137":10,"142":6,"145":10,"146":4,"153":4,"154":2,"156":12,"157":4,"161":5,"164":2,"165":5,"168":1,"174":6,"176":3}}],["yoshua",{"2":{"25":2}}],["your",{"2":{"27":1,"42":1,"44":2,"55":4,"65":1,"88":2,"90":1,"100":1,"102":2,"103":2,"104":3,"112":2,"138":1}}],["you",{"2":{"11":2,"33":1,"40":2,"42":3,"44":1,"65":1,"67":1,"69":2,"75":2,"76":1,"78":1,"88":3,"89":2,"90":2,"91":1,"94":1,"100":3,"102":7,"103":4,"104":5,"106":1,"108":2,"112":2,"114":1,"115":3,"116":1,"118":1,"120":1,"132":1,"138":1,"146":2,"162":1,"176":1}}],["yuxin",{"2":{"21":1}}],["2f",{"2":{"129":2,"157":4}}],["2fs",{"2":{"129":1,"146":1}}],["2×4",{"2":{"116":1}}],["2×2",{"2":{"114":1}}],["2×5",{"2":{"106":6}}],["234145849406738e",{"2":{"178":1}}],["23414856",{"2":{"122":1}}],["2374078904182701e",{"2":{"178":1}}],["2373991f",{"2":{"176":1}}],["233789868738397e",{"2":{"178":1}}],["23371002",{"2":{"165":1}}],["233977f",{"2":{"176":1}}],["236264338629764e",{"2":{"178":1}}],["23622048",{"2":{"161":2}}],["236077f",{"2":{"176":1}}],["231992717471553e",{"2":{"178":1}}],["2319966f",{"2":{"176":1}}],["2319",{"2":{"169":1}}],["231723",{"2":{"106":1}}],["2380",{"2":{"169":1}}],["23",{"2":{"137":7}}],["23038",{"2":{"137":1}}],["23095794",{"2":{"122":1}}],["23095",{"2":{"114":1}}],["230954",{"2":{"114":2}}],["239535f",{"2":{"176":1}}],["2390",{"2":{"169":1}}],["239756",{"2":{"115":1}}],["239414",{"2":{"106":1}}],["263863515808677e",{"2":{"178":1}}],["263042397392838e",{"2":{"178":1}}],["263702063515544e",{"2":{"178":1}}],["2634935f",{"2":{"176":1}}],["26928f",{"2":{"176":1}}],["26402165f",{"2":{"176":1}}],["26637932249765e",{"2":{"178":1}}],["2667532285363746e",{"2":{"178":1}}],["266174801152644e",{"2":{"178":1}}],["2661748f",{"2":{"176":1}}],["266906f",{"2":{"176":1}}],["26293f",{"2":{"176":1}}],["268821437220784e",{"2":{"178":1}}],["268952f",{"2":{"176":1}}],["2680036f",{"2":{"176":1}}],["2686",{"2":{"169":1}}],["2684",{"2":{"169":1}}],["268165780092538",{"2":{"161":1}}],["26821",{"2":{"137":1}}],["2670081005678974e",{"2":{"178":1}}],["26771653",{"2":{"161":2}}],["26756f",{"2":{"76":1}}],["26s",{"2":{"146":1}}],["26005",{"2":{"137":1}}],["260171",{"2":{"106":1}}],["26137677",{"2":{"122":1}}],["265644300546716e",{"2":{"178":1}}],["265653f",{"2":{"176":1}}],["26588",{"2":{"137":1}}],["265788",{"2":{"106":1}}],["265372",{"2":{"106":1}}],["2`",{"2":{"103":1}}],["2970164f",{"2":{"176":1}}],["29761198",{"2":{"165":1}}],["298345491610604e",{"2":{"178":1}}],["2983089493510066e",{"2":{"178":1}}],["2988877f",{"2":{"176":1}}],["2985036f",{"2":{"176":1}}],["298501f",{"2":{"176":1}}],["292402891806152e",{"2":{"178":1}}],["2920554f",{"2":{"176":1}}],["292002",{"2":{"106":1}}],["29233f",{"2":{"176":1}}],["2922",{"2":{"169":1}}],["291453f",{"2":{"176":1}}],["2915",{"2":{"169":1}}],["2917257031868047e",{"2":{"178":1}}],["2917",{"2":{"169":1}}],["2918885",{"2":{"122":1}}],["296735838519333e",{"2":{"178":1}}],["296775f",{"2":{"176":1}}],["296582526044495e",{"2":{"178":1}}],["296301463849755e",{"2":{"178":1}}],["296341f",{"2":{"176":1}}],["29639f",{"2":{"176":1}}],["296372",{"2":{"106":1}}],["296496",{"2":{"114":1}}],["2998",{"2":{"169":1}}],["2992126",{"2":{"161":2}}],["29924855",{"2":{"93":1}}],["29943",{"2":{"137":1}}],["29955",{"2":{"106":1}}],["29",{"2":{"85":1,"130":1,"169":2}}],["2nd",{"2":{"84":1}}],["2152495382789145e",{"2":{"178":1}}],["2152413f",{"2":{"176":1}}],["21587563",{"2":{"122":1}}],["213399571336061e",{"2":{"178":1}}],["213277f",{"2":{"176":1}}],["2139119971536336",{"2":{"161":1}}],["2166248236216557e",{"2":{"178":1}}],["2169157f",{"2":{"176":1}}],["2164802f",{"2":{"176":1}}],["2162",{"2":{"169":1}}],["2143",{"2":{"169":1}}],["212380636360881e",{"2":{"178":1}}],["2122553f",{"2":{"176":1}}],["2126",{"2":{"169":1}}],["2126899641074972",{"2":{"161":1}}],["21213293699653427",{"2":{"161":1}}],["2125984",{"2":{"161":2}}],["211490258140586e",{"2":{"178":1}}],["211482f",{"2":{"176":1}}],["211150630517336e",{"2":{"178":1}}],["2110256f",{"2":{"176":1}}],["211",{"2":{"149":4}}],["2108",{"2":{"169":1}}],["210",{"2":{"149":12}}],["21s",{"2":{"130":1}}],["21",{"2":{"122":1,"123":1,"137":7,"139":1,"150":1,"157":1,"158":1,"166":1,"180":1}}],["217705075053717e",{"2":{"178":1}}],["21778254",{"2":{"165":1}}],["21756552",{"2":{"122":1}}],["21738f",{"2":{"76":1}}],["2193",{"2":{"169":1}}],["2197981041108443",{"2":{"114":1}}],["21984956",{"2":{"77":1}}],["254931812081441e",{"2":{"178":1}}],["254892884413106e",{"2":{"178":1}}],["254659f",{"2":{"176":1}}],["2538523267575744e",{"2":{"178":1}}],["253200317374982e",{"2":{"178":1}}],["253048f",{"2":{"176":1}}],["251678622168931e",{"2":{"178":1}}],["252255f",{"2":{"176":1}}],["252702",{"2":{"106":1}}],["2551640546472034e",{"2":{"178":1}}],["2552883298919666e",{"2":{"178":1}}],["255361f",{"2":{"176":1}}],["2550454f",{"2":{"176":1}}],["2595202f",{"2":{"176":1}}],["2592442312985069e",{"2":{"178":1}}],["2592",{"2":{"169":1}}],["25919",{"2":{"137":1}}],["258207611188304e",{"2":{"178":1}}],["2580206f",{"2":{"176":1}}],["2589",{"2":{"169":1}}],["258118446989299",{"2":{"161":1}}],["25s",{"2":{"146":6}}],["2504148812771212e",{"2":{"178":1}}],["25046515",{"2":{"122":1}}],["250578862277114e",{"2":{"178":1}}],["25055695",{"2":{"120":1,"121":1}}],["2507218408227132e",{"2":{"178":1}}],["2501702f",{"2":{"176":1}}],["250",{"2":{"165":2,"170":1,"175":1}}],["257926362306835e",{"2":{"178":1}}],["257647070013419e",{"2":{"178":1}}],["257237f",{"2":{"176":1}}],["257",{"2":{"76":1}}],["25",{"2":{"68":1,"114":1,"123":2,"131":1,"137":8,"139":2,"150":2,"157":4,"158":2,"166":2,"169":3,"171":1,"175":1,"176":2,"179":4,"180":2}}],["2560113968739265",{"2":{"161":1}}],["256",{"2":{"45":1,"76":4,"77":1,"127":2,"155":2}}],["209254442072207e",{"2":{"178":1}}],["209155f",{"2":{"176":1}}],["2061612577673057e",{"2":{"178":1}}],["206476",{"2":{"106":1}}],["2035",{"2":{"169":1}}],["2037",{"2":{"169":1}}],["204550091874262e",{"2":{"178":1}}],["2043876267849151e",{"2":{"178":1}}],["2043876f",{"2":{"176":1}}],["20475f",{"2":{"176":1}}],["20472442",{"2":{"161":2}}],["20445547",{"2":{"122":1}}],["200",{"2":{"149":12}}],["2000",{"2":{"126":1}}],["20744",{"2":{"137":1}}],["2025065573329291e",{"2":{"178":1}}],["2021",{"2":{"172":1}}],["2024",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["202380112462474e",{"2":{"178":1}}],["202372f",{"2":{"176":1}}],["2023",{"2":{"69":2}}],["20849374",{"2":{"122":1}}],["20881107",{"2":{"93":1}}],["20548",{"2":{"106":1}}],["20",{"2":{"48":1,"76":1,"114":2,"122":3,"137":7,"144":5,"149":24,"169":6}}],["20136",{"2":{"137":1}}],["20114",{"2":{"114":1}}],["201145",{"2":{"114":2}}],["201",{"2":{"77":1,"149":12,"165":1}}],["2010",{"2":{"25":3}}],["2016",{"2":{"21":2,"55":1}}],["2018",{"2":{"21":1}}],["2015",{"2":{"21":1,"25":2}}],["2014",{"2":{"20":1,"25":1}}],["2017",{"2":{"20":1}}],["2885456945411235e",{"2":{"178":1}}],["2881521f",{"2":{"176":1}}],["288182f",{"2":{"176":1}}],["287773693085625e",{"2":{"178":1}}],["287123114749126e",{"2":{"178":1}}],["2835534750604354e",{"2":{"178":1}}],["283396",{"2":{"106":1}}],["2809531983142202e",{"2":{"178":1}}],["280962f",{"2":{"176":1}}],["2857880932878122e",{"2":{"178":1}}],["2865585548833235e",{"2":{"178":1}}],["2865668f",{"2":{"176":1}}],["286226457697843e",{"2":{"178":1}}],["286832961381729e",{"2":{"178":1}}],["286829f",{"2":{"176":1}}],["286847f",{"2":{"176":1}}],["286154f",{"2":{"176":1}}],["2823031f",{"2":{"176":1}}],["2890108900859864",{"2":{"161":1}}],["2896425232872755",{"2":{"161":1}}],["2812518842985035",{"2":{"161":1}}],["281053",{"2":{"106":1}}],["28s",{"2":{"146":1}}],["28412",{"2":{"137":1}}],["28",{"2":{"45":4,"127":2,"130":1,"149":2,"153":4}}],["2=dense",{"2":{"39":2}}],["222576492975152e",{"2":{"178":1}}],["222159000315467e",{"2":{"178":1}}],["2221734f",{"2":{"176":1}}],["2223435f",{"2":{"176":1}}],["2212533332661305e",{"2":{"178":1}}],["2212389f",{"2":{"176":1}}],["22152",{"2":{"137":1}}],["2269193200768884e",{"2":{"178":1}}],["226215143104288e",{"2":{"178":1}}],["2266863f",{"2":{"176":1}}],["226735f",{"2":{"176":1}}],["2265244f",{"2":{"176":1}}],["22614014",{"2":{"122":1}}],["2275757f",{"2":{"176":1}}],["227513",{"2":{"106":1}}],["227007853937703e",{"2":{"178":1}}],["2270",{"2":{"169":1}}],["220362072567235e",{"2":{"178":1}}],["220362f",{"2":{"176":1}}],["2208",{"2":{"169":1}}],["220",{"2":{"149":4}}],["22589041778535e",{"2":{"178":1}}],["225808f",{"2":{"176":1}}],["225184186013564e",{"2":{"178":1}}],["225309299964217e",{"2":{"178":1}}],["225",{"2":{"120":2,"121":1,"135":1,"143":1,"149":12}}],["225f0",{"2":{"34":1}}],["229779",{"2":{"98":2}}],["229f0",{"2":{"34":1}}],["22",{"2":{"96":1,"137":7,"169":1,"174":14}}],["224877475321225e",{"2":{"178":1}}],["224875f",{"2":{"176":1}}],["224",{"2":{"44":2}}],["224f0",{"2":{"34":1}}],["275818346017579e",{"2":{"178":1}}],["275173960504754e",{"2":{"178":1}}],["2755905",{"2":{"161":2}}],["272676705521143e",{"2":{"178":1}}],["272404f",{"2":{"176":1}}],["2761087f",{"2":{"176":1}}],["278077f",{"2":{"176":1}}],["27112718170935e",{"2":{"178":1}}],["271127f",{"2":{"176":1}}],["2715",{"2":{"169":1}}],["277446432755613e",{"2":{"178":1}}],["27792472429886e",{"2":{"178":1}}],["2777765479984303e",{"2":{"178":1}}],["2777765f",{"2":{"176":1}}],["277536f",{"2":{"176":1}}],["2775146f",{"2":{"176":1}}],["27704597",{"2":{"122":1}}],["270861428393781e",{"2":{"178":1}}],["2702",{"2":{"169":1}}],["270117709011731",{"2":{"161":1}}],["2736783911255665e",{"2":{"178":1}}],["2733169472004439e",{"2":{"178":1}}],["2734788f",{"2":{"176":1}}],["2732",{"2":{"169":1}}],["2738635064414512",{"2":{"161":1}}],["27s",{"2":{"146":1}}],["27993",{"2":{"115":1}}],["27",{"2":{"30":1,"130":1,"157":1,"169":2}}],["27th",{"2":{"25":1}}],["240187704971275e",{"2":{"178":1}}],["240287f",{"2":{"176":1}}],["2449034311313e",{"2":{"178":1}}],["244247690256669e",{"2":{"178":1}}],["2448952f",{"2":{"176":1}}],["2440945",{"2":{"161":2}}],["2483372642958471e",{"2":{"178":1}}],["2483024f",{"2":{"176":1}}],["248557183487831e",{"2":{"178":1}}],["24840451781786e",{"2":{"178":1}}],["24846265f",{"2":{"176":1}}],["248445f",{"2":{"176":1}}],["2424723430490129e",{"2":{"178":1}}],["24242708",{"2":{"165":1}}],["242881f",{"2":{"176":1}}],["2434090029220385e",{"2":{"178":1}}],["243972f",{"2":{"176":1}}],["2439428212858357",{"2":{"161":1}}],["243284f",{"2":{"176":1}}],["2435",{"2":{"169":1}}],["2493",{"2":{"169":1}}],["2494508100897751",{"2":{"161":1}}],["2419372753805",{"2":{"161":1}}],["24159",{"2":{"137":1}}],["24s",{"2":{"146":2}}],["24",{"2":{"30":1,"84":2,"123":2,"130":2,"131":2,"137":7,"139":2,"150":2,"158":2,"166":2,"169":2,"171":2,"180":2}}],["2",{"2":{"25":5,"32":3,"35":1,"38":2,"39":2,"41":4,"42":5,"45":4,"48":14,"49":15,"51":8,"52":11,"53":2,"54":2,"55":3,"56":3,"67":1,"76":11,"77":4,"84":1,"85":1,"89":13,"90":27,"93":3,"94":2,"95":2,"96":3,"98":2,"99":1,"102":2,"103":12,"104":2,"106":8,"108":6,"109":6,"114":20,"115":1,"116":4,"117":3,"119":1,"120":1,"123":6,"126":1,"127":10,"130":2,"131":3,"134":5,"135":1,"137":8,"138":1,"139":6,"142":1,"143":1,"144":1,"146":6,"148":1,"149":42,"150":6,"155":1,"156":1,"157":4,"158":6,"161":14,"162":1,"164":1,"165":20,"166":6,"168":2,"169":34,"171":3,"174":50,"175":8,"176":99,"178":104,"180":6}}],["2d",{"2":{"21":1,"25":2,"49":3,"50":2,"51":2,"129":2}}],["β",{"2":{"21":4,"55":1}}],["γ",{"2":{"21":4,"55":1}}],["λβ",{"2":{"20":1}}],["α",{"2":{"20":3,"170":3}}],["know",{"2":{"89":1,"120":1,"176":1}}],["known",{"2":{"25":2}}],["knet",{"2":{"70":1}}],["k",{"2":{"49":9,"53":4,"122":1,"143":2,"147":2}}],["kw",{"2":{"42":1}}],["kwargs",{"2":{"26":24,"40":1,"42":1,"48":9,"54":2,"68":1,"106":2,"107":2,"129":1,"143":4,"146":2,"147":4}}],["ki−1",{"2":{"49":2,"51":2}}],["kind",{"0":{"93":1},"2":{"41":1,"45":1,"48":1,"89":1,"93":1}}],["kinds",{"2":{"14":1}}],["kiros",{"2":{"21":1}}],["kaiming",{"2":{"21":1,"23":2,"25":4,"106":6}}],["ka",{"2":{"21":1}}],["keith",{"2":{"172":1}}],["keep",{"2":{"111":1}}],["kept",{"2":{"108":1}}],["kernel",{"2":{"25":1,"49":8}}],["kernelabstractions",{"2":{"21":1}}],["keys",{"2":{"84":1,"105":2}}],["key",{"2":{"16":3}}],["keywords",{"2":{"42":1,"56":1,"107":1}}],["keyword",{"2":{"9":1,"20":1,"21":4,"40":2,"44":1,"48":11,"49":3,"50":4,"51":2,"52":1,"53":4,"54":1,"55":4,"56":1,"63":1,"67":1,"68":2,"107":1}}],["klambauer",{"2":{"20":1}}],["vcat",{"2":{"134":1,"174":1}}],["vjp",{"2":{"118":3,"121":5,"165":3}}],["voila",{"2":{"89":1}}],["vocabulary",{"2":{"53":1}}],["v0",{"2":{"55":1,"69":1,"96":1,"97":2,"147":1}}],["v",{"2":{"35":2,"55":1,"119":4,"120":6,"121":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"174":21,"180":1}}],["v3",{"2":{"33":2}}],["v2",{"2":{"33":1}}],["v1",{"2":{"33":1,"75":1}}],["vgg19",{"2":{"30":2}}],["vgg16",{"2":{"30":2}}],["vgg13",{"2":{"30":2}}],["vgg11",{"2":{"30":2}}],["vgg",{"2":{"28":4,"30":16,"31":3,"32":11}}],["vec",{"2":{"120":2,"135":1,"143":2,"154":1}}],["vectors",{"2":{"52":1,"53":1,"55":3,"117":6,"167":1}}],["vector",{"0":{"120":1,"121":1},"2":{"25":2,"32":1,"41":2,"52":12,"53":5,"72":1,"114":4,"117":2,"118":5,"119":1,"120":3,"121":5,"122":1,"138":1,"143":3,"146":1,"169":4,"170":1,"174":1}}],["vedaldi",{"2":{"21":1,"55":1}}],["verbose",{"2":{"64":2}}],["verbatim",{"2":{"42":1}}],["versioninfo",{"2":{"123":3,"131":3,"139":3,"150":3,"158":3,"166":3,"171":3,"180":3}}],["version",{"2":{"21":1,"32":1,"38":1,"49":3,"53":3,"55":4,"63":1,"67":1,"69":1,"83":1,"102":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["very",{"2":{"17":1,"52":1,"53":1,"76":1,"88":1,"89":1,"90":2,"108":1,"109":1,"113":1,"114":1,"174":1,"178":1}}],["visualizing",{"0":{"179":1}}],["visualization",{"0":{"170":1}}],["visualize",{"2":{"161":1,"170":1,"179":1}}],["vision",{"0":{"29":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":1},"2":{"21":1,"25":2,"30":14,"31":2}}],["virtual",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["viewaxis",{"2":{"149":64}}],["views",{"2":{"143":2,"174":1}}],["view",{"2":{"54":4,"116":1,"169":1,"170":1}}],["vit",{"2":{"31":1}}],["viposembedding",{"2":{"28":1,"31":1}}],["victor",{"2":{"21":1,"55":1}}],["via",{"2":{"11":1,"13":1,"25":1,"35":2,"38":1,"72":2,"78":2,"117":1,"119":4,"120":1,"169":1}}],["various",{"2":{"72":1,"78":1}}],["variationalhiddendropout",{"2":{"47":1,"50":5}}],["variable",{"2":{"39":2,"42":1,"122":2,"169":1}}],["variables=dev",{"2":{"137":1,"157":1}}],["variables=identity",{"2":{"129":1}}],["variables",{"2":{"37":2,"42":1,"72":2,"76":1,"169":1,"174":1}}],["variance",{"2":{"20":2,"21":6,"55":4,"169":1}}],["var",{"2":{"21":3,"55":4,"89":2,"90":2,"93":1,"96":1,"120":3,"121":6,"122":1,"123":1,"131":1,"135":1,"139":1,"143":1,"149":14,"150":1,"158":1,"166":1,"171":1,"180":1}}],["validate",{"2":{"137":1}}],["validated",{"2":{"8":1}}],["validation",{"2":{"134":1,"137":51}}],["valid",{"2":{"55":1,"102":1}}],["val",{"2":{"16":2,"20":8,"21":2,"32":2,"48":7,"50":1,"61":3,"63":4,"89":1,"90":2,"93":2,"96":2,"120":1,"121":1,"134":4,"135":1,"137":2,"149":6}}],["valued",{"2":{"119":1}}],["values",{"2":{"37":1,"62":3,"146":1,"164":1}}],["value",{"2":{"14":1,"16":2,"20":1,"21":4,"40":1,"48":1,"51":2,"55":5,"61":1,"68":1,"90":1,"120":4,"121":2,"122":14,"134":1,"169":1,"170":4}}],["hₓ",{"2":{"174":4}}],["h₊",{"2":{"174":4}}],["h12",{"2":{"174":12}}],["h11",{"2":{"174":12}}],["h22",{"2":{"174":12}}],["hcat",{"2":{"169":1}}],["hmc",{"2":{"169":2}}],["hn",{"2":{"154":6}}],["hnew",{"2":{"52":6}}],["hnew=activation",{"2":{"52":1}}],["hnew=",{"2":{"52":1}}],["hypernet",{"0":{"154":1,"155":1},"2":{"154":6,"155":1}}],["hypernetwork",{"0":{"151":1},"1":{"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1}}],["home",{"2":{"104":1}}],["hosts",{"2":{"78":1}}],["hold",{"2":{"71":1,"76":1}}],["how",{"2":{"45":1,"48":2,"52":2,"55":8,"72":1,"88":1,"90":2,"92":1,"102":1,"104":1,"109":1,"114":2,"120":1,"124":1,"167":1,"169":1,"170":1}}],["however",{"2":{"14":1,"21":1,"42":1,"48":1,"70":1,"91":1,"116":2,"118":1,"143":1,"174":1,"176":2}}],["hh",{"2":{"52":1}}],["h",{"2":{"51":4,"52":6,"56":4,"126":1,"142":1,"154":2,"174":14}}],["huge",{"2":{"30":1}}],["human",{"2":{"25":2}}],["https",{"2":{"25":1,"52":1,"54":1,"69":1,"120":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"174":2,"180":1}}],["helper",{"0":{"54":1,"128":1},"2":{"37":1,"170":1}}],["help",{"2":{"35":1,"40":1,"88":1}}],["here",{"2":{"35":1,"40":1,"42":3,"70":1,"83":1,"103":1,"114":3,"120":2,"122":1,"168":1,"169":2}}],["height",{"2":{"31":1,"32":1,"49":2}}],["head",{"2":{"31":1,"135":1}}],["heads",{"2":{"31":4}}],["heavy",{"2":{"11":1}}],["hessian",{"2":{"25":1}}],["he",{"2":{"21":1,"25":2}}],["hence",{"2":{"21":1,"44":1,"65":1,"109":1,"111":1,"117":1,"118":1,"130":1,"143":1,"176":1}}],["hidden",{"2":{"52":37,"135":6,"169":1}}],["highest",{"2":{"170":1}}],["higher",{"2":{"56":1}}],["high",{"2":{"48":1,"114":1,"120":1}}],["highly",{"2":{"21":1}}],["hierarchically",{"2":{"42":1}}],["hi",{"2":{"25":2}}],["hinton",{"2":{"21":1}}],["hit",{"2":{"14":1}}],["hamiltonian",{"2":{"169":2}}],["happens",{"2":{"89":1}}],["hard",{"2":{"90":1,"102":1,"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["harder",{"2":{"72":1,"88":1}}],["hardware",{"2":{"71":1}}],["hand",{"2":{"114":1}}],["handy",{"2":{"63":1}}],["handles",{"2":{"72":1}}],["handle",{"2":{"52":1,"97":1,"143":1,"169":1}}],["had",{"2":{"55":1,"118":1}}],["haven",{"2":{"44":1}}],["have",{"2":{"17":1,"21":2,"25":1,"52":1,"54":1,"72":1,"80":1,"89":1,"90":2,"91":2,"100":1,"102":1,"103":1,"104":1,"108":2,"112":1,"115":1,"116":1,"117":1,"118":3,"135":3,"155":1,"169":1,"170":2,"174":1}}],["having",{"2":{"11":1,"41":1,"64":1}}],["hasmethod",{"2":{"54":1}}],["has",{"2":{"14":3,"21":1,"38":1,"42":1,"44":2,"49":2,"51":2,"59":2,"70":1,"88":1,"89":4,"97":1,"103":1,"114":2,"118":1,"169":1,"172":1,"176":1}}],["x~",{"2":{"170":1}}],["x~|θ",{"2":{"170":1}}],["x~|x",{"2":{"170":1}}],["xs",{"2":{"168":1,"169":3}}],["xlogy",{"2":{"136":3}}],["xlabel=",{"2":{"161":1,"165":1,"168":1,"175":1,"176":1,"179":2}}],["xla",{"2":{"73":2}}],["x86",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["xi∈rn",{"2":{"122":1}}],["xi",{"2":{"122":2}}],["xt0s",{"2":{"168":5}}],["xt1s",{"2":{"168":5}}],["xt",{"2":{"86":1,"87":1}}],["x3",{"2":{"48":1}}],["x3c",{"2":{"13":1,"49":6,"52":2,"84":2,"86":2,"102":1,"103":1,"109":1,"119":1,"135":1,"143":2,"147":2,"149":2,"154":4,"174":2}}],["x2s",{"2":{"168":8}}],["x26",{"2":{"69":1,"77":2,"122":2,"123":4,"131":4,"139":4,"150":4,"158":4,"166":4,"171":4,"174":4,"180":4}}],["x2",{"2":{"48":1,"168":2,"170":18}}],["x1s",{"2":{"168":8}}],["x1",{"2":{"48":1,"168":2,"170":18}}],["xoshiro",{"2":{"41":1,"42":3,"77":1,"89":1,"93":1,"96":1,"117":3,"137":1,"157":1,"176":1}}],["xavier",{"2":{"25":4}}],["x",{"2":{"10":2,"14":12,"17":2,"20":12,"21":16,"25":7,"32":5,"38":1,"40":1,"42":14,"44":2,"45":2,"48":24,"49":39,"50":9,"51":18,"52":19,"53":15,"54":21,"55":14,"56":14,"59":4,"61":5,"63":2,"68":3,"76":3,"77":8,"82":3,"84":9,"85":2,"86":9,"89":4,"90":9,"93":3,"96":2,"98":4,"99":9,"102":6,"103":5,"104":7,"108":6,"109":10,"114":7,"115":4,"116":4,"119":7,"120":10,"121":2,"122":16,"126":6,"128":4,"129":2,"134":6,"135":8,"136":5,"137":8,"142":6,"143":7,"145":4,"146":4,"147":2,"149":9,"153":4,"154":4,"156":6,"157":4,"161":9,"165":8,"168":1,"169":5,"170":4,"174":6,"178":2}}],["378553166108842e",{"2":{"178":1}}],["378829f",{"2":{"176":1}}],["3778444f",{"2":{"176":1}}],["370268812227703e",{"2":{"178":1}}],["3701696f",{"2":{"176":1}}],["3700787",{"2":{"161":2}}],["3799033f",{"2":{"176":1}}],["3796476868238477e",{"2":{"178":1}}],["3796",{"2":{"121":1}}],["3750",{"2":{"169":1}}],["3718",{"2":{"169":1}}],["37481",{"2":{"137":1}}],["37433",{"2":{"137":1}}],["37s",{"2":{"130":1,"146":2,"148":1}}],["317471810979716e",{"2":{"178":1}}],["317239f",{"2":{"176":1}}],["3171",{"2":{"169":1}}],["3195",{"2":{"169":1}}],["3151",{"2":{"169":1}}],["31s",{"2":{"146":1,"148":1}}],["31",{"2":{"122":1}}],["3129",{"2":{"169":1}}],["31218112",{"2":{"122":1}}],["31236076",{"2":{"122":1}}],["3869965453516974e",{"2":{"178":1}}],["3867254517356232e",{"2":{"178":1}}],["3860",{"2":{"121":1}}],["3850267614707524e",{"2":{"178":1}}],["3850005",{"2":{"120":1,"121":2}}],["38185465807251e",{"2":{"178":1}}],["38187847",{"2":{"93":1}}],["381102711455937e",{"2":{"178":1}}],["3817555f",{"2":{"176":1}}],["3810637f",{"2":{"176":1}}],["3875793556877868e",{"2":{"178":1}}],["3875706f",{"2":{"176":1}}],["3870004f",{"2":{"176":1}}],["3834746853351565e",{"2":{"178":1}}],["3835867f",{"2":{"176":1}}],["38321",{"2":{"137":1}}],["3849017f",{"2":{"176":1}}],["380996731094503e",{"2":{"178":1}}],["3808046f",{"2":{"176":1}}],["38000",{"2":{"146":1}}],["388105f",{"2":{"176":1}}],["3884",{"2":{"169":1}}],["388262941181445e",{"2":{"178":1}}],["3882",{"2":{"169":1}}],["38861245182183696",{"2":{"161":1}}],["38s",{"2":{"148":1}}],["38",{"2":{"130":1}}],["382971",{"2":{"106":1}}],["392990434219423e",{"2":{"178":1}}],["392999f",{"2":{"176":1}}],["3928535736040505e",{"2":{"178":1}}],["3994327679736175e",{"2":{"178":1}}],["399058755421144e",{"2":{"178":1}}],["3990675f",{"2":{"176":1}}],["399843f",{"2":{"176":1}}],["397311286910648e",{"2":{"178":1}}],["3973195f",{"2":{"176":1}}],["397001f",{"2":{"176":1}}],["397126f",{"2":{"176":1}}],["3979575",{"2":{"165":1}}],["3967105140345805e",{"2":{"178":1}}],["396711f",{"2":{"176":1}}],["396478418980086e",{"2":{"178":1}}],["396323",{"2":{"106":1}}],["3901264f",{"2":{"176":1}}],["390894017904274e",{"2":{"178":1}}],["3908119f",{"2":{"176":1}}],["39085856",{"2":{"165":1}}],["390769f",{"2":{"176":1}}],["395724791089245e",{"2":{"178":1}}],["3957913f",{"2":{"176":1}}],["3957",{"2":{"169":1}}],["393517461257629e",{"2":{"178":1}}],["393291f",{"2":{"176":1}}],["39328107",{"2":{"165":1}}],["39370078",{"2":{"161":2}}],["398784074717275e",{"2":{"178":1}}],["3980378243437745",{"2":{"161":1}}],["3981135",{"2":{"93":1}}],["39s",{"2":{"148":1}}],["349408855980382e",{"2":{"178":1}}],["349409f",{"2":{"176":1}}],["342122152382682e",{"2":{"178":1}}],["342262583220846e",{"2":{"178":1}}],["342413f",{"2":{"176":1}}],["342352f",{"2":{"176":1}}],["34254",{"2":{"114":1}}],["34253937",{"2":{"114":1}}],["342539",{"2":{"114":2}}],["348930360048908e",{"2":{"178":1}}],["3489697f",{"2":{"176":1}}],["348038684230833e",{"2":{"178":1}}],["348348f",{"2":{"176":1}}],["344085085115635e",{"2":{"178":1}}],["344093f",{"2":{"176":1}}],["3442",{"2":{"169":1}}],["34443143",{"2":{"122":1}}],["34761065",{"2":{"165":1}}],["3401778372270137e",{"2":{"178":1}}],["3400253f",{"2":{"176":1}}],["34073487813889014",{"2":{"161":1}}],["340686im",{"2":{"106":1}}],["34s",{"2":{"146":3}}],["3413506",{"2":{"122":1}}],["3410565",{"2":{"103":1}}],["345883186235264e",{"2":{"178":1}}],["3452674684080424e",{"2":{"178":1}}],["345725f",{"2":{"176":1}}],["3457679",{"2":{"122":1}}],["345059f",{"2":{"176":1}}],["3450",{"2":{"169":1}}],["34535396",{"2":{"122":1}}],["3435405763798376e",{"2":{"178":1}}],["34351700231383653",{"2":{"117":1}}],["3438133f",{"2":{"176":1}}],["34383082",{"2":{"93":1}}],["3432",{"2":{"169":1}}],["3×2",{"2":{"98":2}}],["338564503110973e",{"2":{"178":1}}],["3385826",{"2":{"161":2}}],["3387975f",{"2":{"176":1}}],["3318218f",{"2":{"176":1}}],["3375410095351004e",{"2":{"178":1}}],["3379346f",{"2":{"176":1}}],["3374",{"2":{"122":1}}],["330881294676601e",{"2":{"178":1}}],["330256f",{"2":{"176":1}}],["330572f",{"2":{"176":1}}],["33070865",{"2":{"161":2}}],["3364",{"2":{"169":1}}],["3367",{"2":{"169":1}}],["3361",{"2":{"169":1}}],["3333333333333335",{"2":{"169":1}}],["332077356688684e",{"2":{"178":1}}],["3322350480467481",{"2":{"161":1}}],["3324716507588617",{"2":{"161":1}}],["3343752660206305",{"2":{"161":1}}],["33s",{"2":{"146":2,"148":1}}],["33",{"2":{"76":2,"130":3}}],["3=dense",{"2":{"39":2}}],["365618527335629e",{"2":{"178":1}}],["364065598271848e",{"2":{"178":1}}],["3646266f",{"2":{"176":1}}],["360500830340939e",{"2":{"178":1}}],["367715313397303e",{"2":{"178":1}}],["367595312779148e",{"2":{"178":1}}],["3675914f",{"2":{"176":1}}],["367971f",{"2":{"176":1}}],["361922948273493e",{"2":{"178":1}}],["3610381677146602e",{"2":{"178":1}}],["361162f",{"2":{"176":1}}],["3617234f",{"2":{"176":1}}],["3612266f",{"2":{"176":1}}],["3634",{"2":{"169":1}}],["3637494708272655",{"2":{"161":1}}],["36222202",{"2":{"165":1}}],["36220473",{"2":{"161":2}}],["36s",{"2":{"146":1}}],["369545428856913e",{"2":{"178":1}}],["369676f",{"2":{"176":1}}],["369386593776045",{"2":{"161":1}}],["36939",{"2":{"137":1}}],["3691778381831775",{"2":{"117":1}}],["369178",{"2":{"114":2}}],["36918",{"2":{"114":1}}],["36",{"2":{"33":2,"169":1}}],["329851411471181e",{"2":{"178":1}}],["32997919745033e",{"2":{"178":1}}],["32442960482532e",{"2":{"178":1}}],["3244555335373996e",{"2":{"178":1}}],["3244516f",{"2":{"176":1}}],["326320500207757e",{"2":{"178":1}}],["32647",{"2":{"137":1}}],["3251165672921795e",{"2":{"178":1}}],["32512",{"2":{"77":1}}],["3253722f",{"2":{"176":1}}],["3259",{"2":{"169":1}}],["3286806289109545e",{"2":{"178":1}}],["328481f",{"2":{"176":1}}],["3283",{"2":{"169":1}}],["328542256257643",{"2":{"161":1}}],["328706",{"2":{"106":1}}],["321",{"2":{"149":4}}],["321506",{"2":{"106":1}}],["3204024863198634e",{"2":{"178":1}}],["320796f",{"2":{"176":1}}],["320",{"2":{"149":4}}],["32097",{"2":{"137":1}}],["32s",{"2":{"146":1,"148":2}}],["32",{"2":{"30":1,"42":1,"77":1,"89":1,"90":1,"127":1,"155":2,"162":1,"169":1,"176":4}}],["3586697972516312e",{"2":{"178":1}}],["3586666549750098e",{"2":{"178":1}}],["3586554f",{"2":{"176":1}}],["358428f",{"2":{"176":1}}],["35817",{"2":{"114":1}}],["354429068712e",{"2":{"178":1}}],["3543066f",{"2":{"176":1}}],["35419345",{"2":{"122":1}}],["3564003f",{"2":{"176":1}}],["35653266",{"2":{"93":1}}],["355939486742737e",{"2":{"178":1}}],["355991145820394e",{"2":{"178":1}}],["35585f",{"2":{"176":1}}],["3558386f",{"2":{"176":1}}],["35556",{"2":{"137":1}}],["359195440759037e",{"2":{"178":1}}],["3599415f",{"2":{"176":1}}],["3599f",{"2":{"76":1}}],["3590033f",{"2":{"176":1}}],["35374007",{"2":{"165":1}}],["35s",{"2":{"146":1,"148":1}}],["3576447",{"2":{"122":1}}],["357408",{"2":{"106":1}}],["35790488",{"2":{"93":1}}],["3512846951414083e",{"2":{"178":1}}],["3512321285234095e",{"2":{"178":1}}],["351799861829582e",{"2":{"178":1}}],["3511593f",{"2":{"176":1}}],["351902f",{"2":{"176":1}}],["3514407f",{"2":{"176":1}}],["35149138733595564",{"2":{"117":4}}],["351491",{"2":{"114":1}}],["351662",{"2":{"106":1}}],["35181466",{"2":{"93":1}}],["35",{"2":{"30":1,"169":2}}],["3d",{"2":{"21":1,"137":1,"157":2,"165":1}}],["3078352458537016e",{"2":{"178":1}}],["3070866",{"2":{"161":2}}],["3080348f",{"2":{"176":1}}],["300883382399852e",{"2":{"178":1}}],["300398731141527e",{"2":{"178":1}}],["3009662f",{"2":{"176":1}}],["3006254f",{"2":{"176":1}}],["3057169819360422e",{"2":{"178":1}}],["3053092059964766e",{"2":{"178":1}}],["305556828788522e",{"2":{"178":1}}],["3055656f",{"2":{"176":1}}],["3054113f",{"2":{"176":1}}],["3093",{"2":{"169":1}}],["30s",{"2":{"146":3}}],["302660306291173e",{"2":{"178":1}}],["3028075f",{"2":{"176":1}}],["302869f",{"2":{"176":1}}],["3027",{"2":{"169":1}}],["30215",{"2":{"114":1}}],["3020351",{"2":{"93":1}}],["3065",{"2":{"169":1}}],["306575im",{"2":{"106":1}}],["3069779",{"2":{"165":1}}],["306641",{"2":{"106":1}}],["306147",{"2":{"106":1}}],["301165801911046e",{"2":{"178":1}}],["301",{"2":{"76":1,"77":1}}],["30",{"2":{"20":1,"25":2,"169":1}}],["3",{"2":{"9":1,"25":5,"32":1,"37":1,"39":7,"42":8,"44":1,"45":1,"48":4,"49":4,"50":2,"52":2,"67":1,"76":5,"77":3,"84":3,"85":1,"87":1,"89":12,"90":7,"93":4,"96":6,"98":1,"99":1,"102":1,"104":1,"114":23,"115":2,"116":3,"117":7,"123":3,"126":1,"127":2,"129":1,"130":3,"135":1,"137":7,"139":3,"142":1,"144":2,"146":5,"148":1,"149":35,"150":4,"157":3,"158":4,"161":7,"164":1,"166":3,"169":26,"170":1,"174":12,"175":1,"176":95,"178":90,"180":3}}],["4x",{"2":{"130":1}}],["466273409779281e",{"2":{"178":1}}],["4665827f",{"2":{"176":1}}],["463411231593561e",{"2":{"178":1}}],["463886399288879e",{"2":{"178":1}}],["46312f",{"2":{"176":1}}],["464006203341562e",{"2":{"178":1}}],["4640456f",{"2":{"176":1}}],["464567",{"2":{"161":2}}],["4600",{"2":{"169":1}}],["4605012716399809",{"2":{"161":1}}],["4679802362124905e",{"2":{"178":1}}],["467878f",{"2":{"176":1}}],["4678",{"2":{"169":1}}],["46754",{"2":{"137":1}}],["465219665997806e",{"2":{"178":1}}],["46513f",{"2":{"176":1}}],["4651",{"2":{"169":1}}],["46597028",{"2":{"122":1}}],["4627",{"2":{"169":1}}],["46",{"2":{"130":1}}],["461908",{"2":{"114":1}}],["474836811741688e",{"2":{"178":1}}],["478211789393522e",{"2":{"178":1}}],["4781724f",{"2":{"176":1}}],["4761874f",{"2":{"176":1}}],["4767",{"2":{"169":1}}],["473465701036349e",{"2":{"178":1}}],["4736269133794072e",{"2":{"178":1}}],["473175f",{"2":{"176":1}}],["4738594f",{"2":{"176":1}}],["475024f",{"2":{"176":1}}],["4754",{"2":{"169":1}}],["4714913419702998e",{"2":{"178":1}}],["471882905929094e",{"2":{"178":1}}],["47168754730061e",{"2":{"178":1}}],["4713332f",{"2":{"176":1}}],["4715736f",{"2":{"176":1}}],["47192f",{"2":{"176":1}}],["47100115",{"2":{"122":1}}],["47932569051327e",{"2":{"178":1}}],["479314858608428e",{"2":{"178":1}}],["4793175f",{"2":{"176":1}}],["479990356138734e",{"2":{"178":1}}],["47999f",{"2":{"176":1}}],["479181",{"2":{"122":1}}],["4708530312086873",{"2":{"161":1}}],["4777113357978367e",{"2":{"178":1}}],["4771482605049232e",{"2":{"178":1}}],["477401f",{"2":{"176":1}}],["477503322811628e",{"2":{"178":1}}],["4775028f",{"2":{"176":1}}],["4775569f",{"2":{"176":1}}],["4770485f",{"2":{"176":1}}],["4778283273281008",{"2":{"161":1}}],["477",{"2":{"149":2}}],["47",{"2":{"127":2,"130":2}}],["4726",{"2":{"169":1}}],["47289538",{"2":{"93":1}}],["472",{"2":{"52":1}}],["412655721426998e",{"2":{"178":1}}],["4113997991150856e",{"2":{"178":1}}],["4113784056119665e",{"2":{"178":1}}],["411364f",{"2":{"176":1}}],["4116554f",{"2":{"176":1}}],["41120994",{"2":{"76":1}}],["4172878088748843e",{"2":{"178":1}}],["4172796f",{"2":{"176":1}}],["417941888661596e",{"2":{"178":1}}],["41794f",{"2":{"176":1}}],["417531226401265e",{"2":{"178":1}}],["419302f",{"2":{"176":1}}],["4191668f",{"2":{"176":1}}],["4131764538385097e",{"2":{"178":1}}],["413669897497975e",{"2":{"178":1}}],["4130239f",{"2":{"176":1}}],["41303",{"2":{"106":1}}],["413545f",{"2":{"176":1}}],["4143722839640925e",{"2":{"178":1}}],["4143723f",{"2":{"176":1}}],["414769",{"2":{"114":1}}],["4100",{"2":{"169":1}}],["4104",{"2":{"169":1}}],["41s",{"2":{"146":1}}],["41633183224602e",{"2":{"178":1}}],["4165874f",{"2":{"176":1}}],["416",{"2":{"127":1}}],["41",{"2":{"122":1,"157":1,"169":2}}],["4th",{"2":{"94":1}}],["422657059687666e",{"2":{"178":1}}],["422913f",{"2":{"176":1}}],["422918",{"2":{"114":1}}],["424068875340751e",{"2":{"178":1}}],["424831f",{"2":{"176":1}}],["42453378",{"2":{"93":1}}],["423667892875199e",{"2":{"178":1}}],["423925f",{"2":{"176":1}}],["423556f",{"2":{"176":1}}],["42308333113261615",{"2":{"161":1}}],["4261145f",{"2":{"176":1}}],["4264",{"2":{"169":1}}],["4253720196827494e",{"2":{"178":1}}],["4257706817214027e",{"2":{"178":1}}],["4259894708870824e",{"2":{"178":1}}],["4252414f",{"2":{"176":1}}],["42526972",{"2":{"122":1}}],["4256181f",{"2":{"176":1}}],["425698",{"2":{"106":1}}],["42519686",{"2":{"161":2}}],["42",{"2":{"106":2}}],["42747158",{"2":{"93":1}}],["436880725043461e",{"2":{"178":1}}],["4344437f",{"2":{"176":1}}],["430424585530198e",{"2":{"178":1}}],["430688170961995e",{"2":{"178":1}}],["4306217f",{"2":{"176":1}}],["4303254f",{"2":{"176":1}}],["4325022544369584e",{"2":{"178":1}}],["4326014f",{"2":{"176":1}}],["432314175789525e",{"2":{"178":1}}],["4323224f",{"2":{"176":1}}],["43237",{"2":{"137":1}}],["4379839097267536e",{"2":{"178":1}}],["4379878f",{"2":{"176":1}}],["4372475f",{"2":{"176":1}}],["4370893f",{"2":{"176":1}}],["4376",{"2":{"169":1}}],["437349571312617e",{"2":{"178":1}}],["4373",{"2":{"165":1}}],["4396068206428336",{"2":{"161":1}}],["43af",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["4319346874291314",{"2":{"114":1}}],["433908986496139e",{"2":{"178":1}}],["4339816f",{"2":{"176":1}}],["4337",{"2":{"169":1}}],["4330709",{"2":{"161":2}}],["43333",{"2":{"146":2}}],["433656",{"2":{"106":1}}],["433884",{"2":{"98":2}}],["43324f",{"2":{"76":1}}],["4389",{"2":{"54":1}}],["4588208534933488e",{"2":{"178":1}}],["4505294277351263e",{"2":{"178":1}}],["4505294f",{"2":{"176":1}}],["45414851684613733",{"2":{"161":1}}],["454679",{"2":{"106":1}}],["45468387",{"2":{"93":1}}],["4546",{"2":{"67":1}}],["452401424624867",{"2":{"161":1}}],["4566929",{"2":{"161":2}}],["456f0",{"2":{"34":1}}],["45",{"2":{"157":1}}],["45329624",{"2":{"165":1}}],["45325348",{"2":{"102":1}}],["45333",{"2":{"146":1}}],["4550",{"2":{"169":1}}],["45518",{"2":{"137":1}}],["4552384158732863",{"2":{"117":4}}],["455238",{"2":{"114":1}}],["4593922",{"2":{"119":4}}],["459019",{"2":{"114":1}}],["459193",{"2":{"98":2}}],["45758f",{"2":{"76":1}}],["444572804581578e",{"2":{"178":1}}],["44476f",{"2":{"176":1}}],["442505710068212e",{"2":{"178":1}}],["4426583f",{"2":{"176":1}}],["446177558872437e",{"2":{"178":1}}],["4467295f",{"2":{"176":1}}],["4463697f",{"2":{"176":1}}],["448145400269038e",{"2":{"178":1}}],["448106f",{"2":{"176":1}}],["4488101521328277",{"2":{"117":1}}],["441599077672971e",{"2":{"178":1}}],["441595f",{"2":{"176":1}}],["4411341655644033e",{"2":{"178":1}}],["4411342f",{"2":{"176":1}}],["4456815f",{"2":{"176":1}}],["4455589694285724e",{"2":{"178":1}}],["4455414277695585e",{"2":{"178":1}}],["4455326f",{"2":{"176":1}}],["4455",{"2":{"169":1}}],["44099776872094e",{"2":{"178":1}}],["44098f",{"2":{"76":1}}],["440886f",{"2":{"176":1}}],["4432009549384312e",{"2":{"178":1}}],["4439",{"2":{"169":1}}],["443",{"2":{"150":1,"158":1}}],["44s",{"2":{"130":2,"146":1}}],["44746",{"2":{"114":1}}],["44",{"2":{"33":1,"130":1,"169":1}}],["499545453250801e",{"2":{"178":1}}],["4996348f",{"2":{"176":1}}],["494051979764576e",{"2":{"178":1}}],["49406f",{"2":{"176":1}}],["492609051636674e",{"2":{"178":1}}],["492918f",{"2":{"176":1}}],["495960480438479e",{"2":{"178":1}}],["490909267886745e",{"2":{"178":1}}],["4904729532047025e",{"2":{"178":1}}],["49069f",{"2":{"176":1}}],["4907054f",{"2":{"176":1}}],["491944075073239e",{"2":{"178":1}}],["4913006206934854e",{"2":{"178":1}}],["4912613f",{"2":{"176":1}}],["4910674f",{"2":{"176":1}}],["493302626234313e",{"2":{"178":1}}],["4932683793275775e",{"2":{"178":1}}],["4932766f",{"2":{"176":1}}],["4935731027201774e",{"2":{"178":1}}],["4935935f",{"2":{"176":1}}],["4938404778911087e",{"2":{"178":1}}],["4934506f",{"2":{"176":1}}],["4939525f",{"2":{"176":1}}],["493641443881164",{"2":{"161":1}}],["4988",{"2":{"169":1}}],["49825558",{"2":{"165":1}}],["49852",{"2":{"148":1}}],["496193f",{"2":{"176":1}}],["496063",{"2":{"161":2}}],["49630",{"2":{"146":1}}],["49782f",{"2":{"76":1}}],["49",{"2":{"30":1,"77":1,"130":2,"157":1,"162":1,"169":2}}],["482936980343263e",{"2":{"178":1}}],["48217305f",{"2":{"176":1}}],["484754549107743e",{"2":{"178":1}}],["48404032",{"2":{"122":1}}],["484056",{"2":{"106":1}}],["487058338794814e",{"2":{"178":1}}],["4872453f",{"2":{"176":1}}],["48716235",{"2":{"122":1}}],["48372019291711e",{"2":{"178":1}}],["48392f",{"2":{"176":1}}],["4838621",{"2":{"165":1}}],["4805797018080755e",{"2":{"178":1}}],["4805715f",{"2":{"176":1}}],["4809451664102274e",{"2":{"178":1}}],["4804484f",{"2":{"176":1}}],["480290270498576e",{"2":{"178":1}}],["4802",{"2":{"169":1}}],["4863042f",{"2":{"176":1}}],["486214",{"2":{"106":1}}],["489067422460228e",{"2":{"178":1}}],["489051f",{"2":{"176":2}}],["489203329073166e",{"2":{"178":1}}],["489175809105353e",{"2":{"178":1}}],["4891",{"2":{"169":1}}],["4899126",{"2":{"122":1}}],["4818970835409752e",{"2":{"178":1}}],["481218f",{"2":{"176":1}}],["48114290312426095",{"2":{"161":1}}],["48137343",{"2":{"93":1}}],["4882259809725193e",{"2":{"178":1}}],["488868f",{"2":{"176":1}}],["4880",{"2":{"169":1}}],["4887378757184528",{"2":{"161":1}}],["48818898",{"2":{"161":2}}],["4850607f",{"2":{"176":1}}],["4857",{"2":{"169":1}}],["485316325260262e",{"2":{"178":1}}],["4853",{"2":{"169":1}}],["485896im",{"2":{"106":1}}],["485f0",{"2":{"34":1}}],["48",{"2":{"30":1,"33":1,"123":3,"130":5,"131":3,"139":3,"150":3,"158":3,"166":3,"171":3,"180":3}}],["40711799268775e",{"2":{"178":1}}],["407016f",{"2":{"176":1}}],["40292601834721e",{"2":{"178":1}}],["40229",{"2":{"114":1}}],["4083042752643364e",{"2":{"178":1}}],["4080487f",{"2":{"176":1}}],["4081",{"2":{"169":1}}],["405605f",{"2":{"176":1}}],["405292f",{"2":{"176":1}}],["4051151",{"2":{"119":4}}],["4008492614810506e",{"2":{"178":1}}],["40088427",{"2":{"122":1}}],["4004848f",{"2":{"176":1}}],["4006407f",{"2":{"176":1}}],["40320631568984e",{"2":{"178":1}}],["403153f",{"2":{"176":1}}],["40357",{"2":{"137":1}}],["40gb",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["406858920637707e",{"2":{"178":1}}],["4068233",{"2":{"122":1}}],["40667",{"2":{"148":1}}],["406f0",{"2":{"34":1}}],["4047360819198803e",{"2":{"178":1}}],["40473",{"2":{"114":1}}],["404728",{"2":{"114":2}}],["401875695877283",{"2":{"161":1}}],["4015749",{"2":{"161":2}}],["40102",{"2":{"98":2}}],["401",{"2":{"77":1}}],["40",{"2":{"30":1,"130":1}}],["4d",{"2":{"21":2,"56":3}}],["4",{"2":{"9":1,"31":1,"32":1,"37":2,"39":1,"41":4,"42":2,"52":2,"55":1,"76":1,"84":8,"86":1,"87":6,"93":5,"96":10,"102":1,"103":2,"108":8,"109":4,"114":15,"116":5,"119":2,"123":6,"127":1,"129":1,"130":2,"137":10,"139":6,"146":4,"148":1,"149":22,"150":5,"153":1,"157":3,"158":5,"161":6,"164":1,"166":6,"168":9,"169":14,"174":7,"175":1,"176":104,"178":95,"180":6}}],["0f4",{"2":{"175":1}}],["0f",{"2":{"129":1,"144":2,"157":1}}],["0f0",{"2":{"31":4,"42":2,"77":2,"86":2,"87":1,"90":1,"134":2,"143":2,"147":2,"161":2,"168":4,"175":1}}],["0+1",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["0+550",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["066239849824373e",{"2":{"178":1}}],["066031f",{"2":{"176":1}}],["0660",{"2":{"169":1}}],["06575883215773011",{"2":{"177":1}}],["06594",{"2":{"137":1}}],["067204009277854e",{"2":{"178":1}}],["067384127151951e",{"2":{"178":1}}],["067376f",{"2":{"176":1}}],["06746675f",{"2":{"176":1}}],["0671647f",{"2":{"176":1}}],["063113164599101e",{"2":{"178":1}}],["063013f",{"2":{"176":1}}],["063303f",{"2":{"176":1}}],["063386f",{"2":{"176":1}}],["06383",{"2":{"137":1}}],["064584059755521e",{"2":{"178":1}}],["06450",{"2":{"21":1}}],["06425595915170446",{"2":{"177":1}}],["064893f",{"2":{"176":1}}],["062606370286228e",{"2":{"178":1}}],["062640717536254e",{"2":{"178":1}}],["0626495f",{"2":{"176":1}}],["0627314f",{"2":{"176":1}}],["0619",{"2":{"169":1}}],["069519f",{"2":{"176":1}}],["06955",{"2":{"137":1}}],["06925",{"2":{"137":1}}],["06",{"2":{"130":3}}],["06026341",{"2":{"122":1}}],["0608437",{"2":{"106":1}}],["0x1911b814c02405e8",{"2":{"117":1}}],["0x8c49bc52dc8a77ea",{"2":{"117":1}}],["0x84df7ccd14e8a7b8",{"2":{"93":1,"96":1}}],["0x48d73dc42d195740",{"2":{"117":1}}],["0xdb2fa90498613fdf",{"2":{"117":1}}],["0xd36a58e0d4ae463e",{"2":{"93":1,"96":1}}],["0x22a21880af5dc689",{"2":{"93":1,"96":1,"117":1}}],["0x727006748bb9e892",{"2":{"93":1,"96":1}}],["0x7c071df294e77583",{"2":{"93":1,"96":1}}],["05331917019944852",{"2":{"177":1}}],["053499201452751846",{"2":{"177":1}}],["053010890392771556",{"2":{"177":1}}],["05391791",{"2":{"76":1}}],["05188106697558526",{"2":{"177":1}}],["051918238954459836",{"2":{"177":1}}],["0519113712665473",{"2":{"161":1}}],["05197",{"2":{"137":1}}],["0555567203375304e",{"2":{"178":1}}],["055946769355377436",{"2":{"177":1}}],["055852146956217485",{"2":{"177":1}}],["05546518394540094",{"2":{"177":1}}],["0554674f",{"2":{"176":1}}],["0550",{"2":{"169":1}}],["0551181",{"2":{"161":2}}],["05",{"2":{"169":1}}],["05286401786344559",{"2":{"177":1}}],["05287s",{"2":{"157":1}}],["05245167905094164",{"2":{"177":1}}],["05250722342833319",{"2":{"177":1}}],["05225496995452235",{"2":{"177":1}}],["052223130646726956",{"2":{"177":1}}],["05228",{"2":{"137":1}}],["050445547472268e",{"2":{"178":1}}],["05040555779361737",{"2":{"177":1}}],["05079059928416e",{"2":{"178":1}}],["050901076175073945",{"2":{"177":1}}],["05050337220632601",{"2":{"177":1}}],["050644402047554236",{"2":{"177":1}}],["050668f",{"2":{"176":1}}],["0500354f",{"2":{"176":1}}],["05002",{"2":{"137":1}}],["050862882",{"2":{"76":1}}],["054853353369269e",{"2":{"178":1}}],["054837231555989026",{"2":{"177":1}}],["05401544627420644",{"2":{"177":1}}],["05400660035342886",{"2":{"177":1}}],["05450738977182879",{"2":{"177":1}}],["05420462270255706",{"2":{"177":1}}],["054302679477350145",{"2":{"177":1}}],["054321035831595324",{"2":{"161":1}}],["054700333055434175",{"2":{"177":1}}],["054768f",{"2":{"176":1}}],["05475043416740677",{"2":{"177":1}}],["05475",{"2":{"137":1}}],["0549554f",{"2":{"176":1}}],["05449",{"2":{"137":1}}],["05994",{"2":{"137":1}}],["0594993",{"2":{"122":1}}],["0566429163756406e",{"2":{"178":1}}],["0566036f",{"2":{"176":1}}],["05661944",{"2":{"122":1}}],["0569873f",{"2":{"176":1}}],["05657739601024536",{"2":{"117":1}}],["057154982672157e",{"2":{"178":1}}],["057053796843751e",{"2":{"178":1}}],["057005208",{"2":{"120":1,"121":1}}],["057342f",{"2":{"176":1}}],["05775",{"2":{"137":1}}],["05779423",{"2":{"93":1}}],["05758927",{"2":{"165":1}}],["05758",{"2":{"137":1}}],["057823665",{"2":{"93":1,"96":1}}],["045551282049059e",{"2":{"178":1}}],["04503937218323815",{"2":{"177":1}}],["045981405841294294",{"2":{"177":1}}],["040619015798842875",{"2":{"177":1}}],["04015436535793723",{"2":{"177":1}}],["0426162731007075e",{"2":{"178":1}}],["042502139586782596",{"2":{"177":1}}],["0427238357065267",{"2":{"177":1}}],["0428158f",{"2":{"176":1}}],["04204s",{"2":{"157":1}}],["04854762140980133",{"2":{"177":1}}],["0485",{"2":{"169":1}}],["04946935076603893",{"2":{"177":1}}],["049323788875630895",{"2":{"177":1}}],["04964345",{"2":{"165":1}}],["049985105882301",{"2":{"161":1}}],["049256783",{"2":{"122":1}}],["047553654773248e",{"2":{"178":1}}],["047274058078849e",{"2":{"178":1}}],["047244094",{"2":{"161":2}}],["0479619737149416",{"2":{"177":1}}],["047938884837366906",{"2":{"177":1}}],["04797944252126462",{"2":{"177":1}}],["0474872f",{"2":{"176":1}}],["047490627",{"2":{"76":1}}],["047399f",{"2":{"176":1}}],["04s",{"2":{"146":1}}],["04135375329743446",{"2":{"177":1}}],["04139",{"2":{"137":1}}],["041733947747754976",{"2":{"177":1}}],["04145",{"2":{"137":1}}],["044250878457183e",{"2":{"178":1}}],["04482024983889405",{"2":{"177":1}}],["044889237694299845",{"2":{"177":1}}],["044353f",{"2":{"176":1}}],["0440257f",{"2":{"176":1}}],["04409",{"2":{"137":1}}],["04416im",{"2":{"106":1}}],["04301460045508618",{"2":{"177":1}}],["043319256945682e",{"2":{"178":1}}],["043314705833896336",{"2":{"177":1}}],["04332",{"2":{"137":1}}],["043197f",{"2":{"176":1}}],["04395",{"2":{"137":1}}],["043883",{"2":{"114":1}}],["046195700297032e",{"2":{"178":1}}],["0465057213069404",{"2":{"177":1}}],["04655",{"2":{"137":1}}],["04644819440068384",{"2":{"177":1}}],["04621f",{"2":{"176":1}}],["046225582753114294",{"2":{"161":1}}],["04628f",{"2":{"76":1}}],["046897847",{"2":{"122":1}}],["035733811956914e",{"2":{"178":1}}],["0357426f",{"2":{"176":1}}],["03549058692942278",{"2":{"177":1}}],["035294008",{"2":{"165":1}}],["03553",{"2":{"137":1}}],["0355555",{"2":{"114":1}}],["03f0",{"2":{"163":1}}],["03702853083260528",{"2":{"177":1}}],["0370046468920306",{"2":{"161":1}}],["037937f",{"2":{"176":1}}],["0376",{"2":{"169":1}}],["03762182",{"2":{"122":1}}],["0338250226807328",{"2":{"177":1}}],["03384",{"2":{"137":1}}],["033276169354516875",{"2":{"177":1}}],["0339",{"2":{"169":1}}],["033642",{"2":{"165":1}}],["03352s",{"2":{"157":1}}],["0364818425938837",{"2":{"177":1}}],["03644347334895938",{"2":{"177":1}}],["03625s",{"2":{"157":1}}],["03666",{"2":{"137":1}}],["03093541376814808",{"2":{"177":1}}],["030974995521538738",{"2":{"177":1}}],["03022588244507418",{"2":{"177":1}}],["030805824695545894",{"2":{"161":1}}],["03016s",{"2":{"157":1}}],["03066s",{"2":{"157":1}}],["03060s",{"2":{"157":1}}],["03049s",{"2":{"157":1}}],["03007s",{"2":{"157":1}}],["03070",{"2":{"137":1}}],["0380784828722702e",{"2":{"178":1}}],["0380619906002633e",{"2":{"178":1}}],["03806268827600256",{"2":{"177":1}}],["038901287974353e",{"2":{"178":1}}],["03858428047507269",{"2":{"177":1}}],["03869619541269424",{"2":{"177":1}}],["03860s",{"2":{"157":1}}],["0382655f",{"2":{"176":1}}],["038743f",{"2":{"176":1}}],["03839s",{"2":{"157":1}}],["03252435619257789",{"2":{"177":1}}],["0328",{"2":{"169":1}}],["03281s",{"2":{"157":1}}],["0326",{"2":{"169":1}}],["032704772846244",{"2":{"161":1}}],["03203",{"2":{"137":1}}],["03219",{"2":{"137":1}}],["034846679863281424",{"2":{"177":1}}],["0340",{"2":{"169":1}}],["03446",{"2":{"137":1}}],["034903362",{"2":{"76":1}}],["03970253564114501",{"2":{"177":1}}],["0399",{"2":{"169":1}}],["0396518660677925",{"2":{"161":1}}],["03956",{"2":{"137":1}}],["039559156",{"2":{"122":1}}],["03915",{"2":{"137":1}}],["03",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"163":1,"165":4,"166":1,"171":1,"180":1}}],["0316943025699973e",{"2":{"178":1}}],["03153306060791138",{"2":{"177":1}}],["0315073f",{"2":{"176":1}}],["03173508798113943",{"2":{"177":1}}],["031816361263047",{"2":{"161":1}}],["03180492",{"2":{"76":1}}],["031389393",{"2":{"120":1,"121":2}}],["073254605221222e",{"2":{"178":1}}],["073531148330143e",{"2":{"178":1}}],["0735455f",{"2":{"176":1}}],["0765311758912264e",{"2":{"178":1}}],["07678253350835433",{"2":{"177":1}}],["0766205f",{"2":{"176":1}}],["07694905",{"2":{"93":1}}],["0795067093505825e",{"2":{"178":1}}],["079098782450589e",{"2":{"178":1}}],["0793813f",{"2":{"176":1}}],["07942",{"2":{"137":1}}],["0701548829489878e",{"2":{"178":1}}],["0706285310959205e",{"2":{"178":1}}],["0700243f",{"2":{"176":1}}],["0709045f",{"2":{"176":1}}],["074092913973853e",{"2":{"178":1}}],["074634125572134e",{"2":{"178":1}}],["074634f",{"2":{"176":1}}],["074785f",{"2":{"176":1}}],["074251f",{"2":{"176":1}}],["07802438838691865",{"2":{"177":1}}],["078823f",{"2":{"176":1}}],["07874016",{"2":{"161":2}}],["07227",{"2":{"137":1}}],["07283",{"2":{"137":1}}],["07562564",{"2":{"165":1}}],["07509",{"2":{"137":1}}],["07588978",{"2":{"76":1}}],["07702",{"2":{"114":1}}],["0770206",{"2":{"114":2}}],["0714637",{"2":{"76":1}}],["0e",{"2":{"76":6,"163":1,"165":4}}],["084467327907547e",{"2":{"178":1}}],["0845338f",{"2":{"176":1}}],["0845",{"2":{"169":1}}],["0807714940635198e",{"2":{"178":1}}],["08022",{"2":{"21":1,"55":1}}],["0896103059054496e",{"2":{"178":1}}],["0894107f",{"2":{"176":1}}],["08977",{"2":{"137":1}}],["08350192481301627",{"2":{"161":1}}],["0836414",{"2":{"106":1}}],["0864654563959214e",{"2":{"178":1}}],["086373046389994e",{"2":{"178":1}}],["086704683154194e",{"2":{"178":1}}],["08685899277206673",{"2":{"177":1}}],["0861464f",{"2":{"176":1}}],["086632f",{"2":{"176":1}}],["0866141",{"2":{"161":2}}],["086228",{"2":{"165":1}}],["08694684883050086",{"2":{"117":4}}],["0869468",{"2":{"114":1}}],["08282",{"2":{"137":1}}],["08254115",{"2":{"122":1}}],["085537853776543e",{"2":{"178":1}}],["0858",{"2":{"169":1}}],["08546",{"2":{"137":1}}],["08517",{"2":{"114":1}}],["085170805",{"2":{"114":1}}],["0851708",{"2":{"114":2}}],["0876056957927053e",{"2":{"178":1}}],["0876652",{"2":{"104":2}}],["08788362950254597",{"2":{"177":1}}],["0878323f",{"2":{"176":1}}],["08787567",{"2":{"165":1}}],["0877513",{"2":{"106":1}}],["08124366",{"2":{"87":1}}],["0886",{"2":{"169":1}}],["08861052",{"2":{"77":1}}],["08869007",{"2":{"76":1}}],["088967875",{"2":{"76":1}}],["08",{"2":{"33":1,"120":1,"157":2}}],["027303342429091142",{"2":{"177":1}}],["027862360747976808",{"2":{"177":1}}],["02747",{"2":{"137":1}}],["022325259983575547",{"2":{"177":1}}],["0229054786807387e",{"2":{"178":1}}],["022906394593631228",{"2":{"177":1}}],["0229959341098181",{"2":{"177":1}}],["022501895668115328",{"2":{"177":1}}],["022559076807699988",{"2":{"177":1}}],["02203298018800196",{"2":{"177":1}}],["022182036958480172",{"2":{"177":1}}],["022147379737285706",{"2":{"177":1}}],["022161982187542492",{"2":{"177":1}}],["02229141599601115",{"2":{"177":1}}],["0224295200316549",{"2":{"177":1}}],["0224641",{"2":{"76":1}}],["022797843963709284",{"2":{"177":1}}],["022681906836011435",{"2":{"177":1}}],["022817f",{"2":{"176":1}}],["02874787822057803",{"2":{"177":1}}],["02803995234799488",{"2":{"177":1}}],["028939522297792744",{"2":{"177":1}}],["0283",{"2":{"169":1}}],["0288338f",{"2":{"176":1}}],["02880s",{"2":{"157":1}}],["02887s",{"2":{"157":1}}],["02812",{"2":{"137":1}}],["021695622885222e",{"2":{"178":1}}],["0216563f",{"2":{"176":1}}],["021655f",{"2":{"176":1}}],["021835155048116412",{"2":{"177":1}}],["021874751751256145",{"2":{"177":1}}],["021995136036621243",{"2":{"177":1}}],["021989",{"2":{"165":1}}],["021284462092519427",{"2":{"177":1}}],["021710058883234875",{"2":{"177":1}}],["02179",{"2":{"137":1}}],["021537669920586207",{"2":{"177":1}}],["02110756232480277",{"2":{"177":1}}],["021169013129862177",{"2":{"177":1}}],["02115",{"2":{"137":1}}],["021357317180048352",{"2":{"177":1}}],["021013658",{"2":{"93":1,"96":1}}],["023809267608356e",{"2":{"178":1}}],["02384f",{"2":{"176":1}}],["023970560093449e",{"2":{"178":1}}],["023945854965306e",{"2":{"178":1}}],["0239498f",{"2":{"176":1}}],["023275956637742234",{"2":{"177":1}}],["023260958394085672",{"2":{"177":1}}],["023091139245199024",{"2":{"177":1}}],["023009218865298837",{"2":{"177":1}}],["023193543086071973",{"2":{"177":1}}],["02310461742752934",{"2":{"177":1}}],["02317926869799286",{"2":{"177":1}}],["023335406713336643",{"2":{"177":1}}],["02370339152416624",{"2":{"177":1}}],["023712900244009478",{"2":{"177":1}}],["023722253289358303",{"2":{"177":1}}],["02379",{"2":{"137":1}}],["02357041802509943",{"2":{"177":1}}],["023521083092865745",{"2":{"177":1}}],["02353090231748062",{"2":{"177":1}}],["02351",{"2":{"137":1}}],["023404004269245684",{"2":{"177":1}}],["02346585418572156",{"2":{"177":1}}],["023486657428913",{"2":{"161":1}}],["023611652701661365",{"2":{"177":1}}],["02361282939105417",{"2":{"177":1}}],["023679578179550936",{"2":{"177":1}}],["02367518135491305",{"2":{"177":1}}],["023646409526520064",{"2":{"177":1}}],["023649303371970062",{"2":{"177":1}}],["023697093505961463",{"2":{"177":1}}],["023622",{"2":{"161":2}}],["02360",{"2":{"137":1}}],["02363",{"2":{"137":1}}],["025217040289681e",{"2":{"178":1}}],["02589298414209541",{"2":{"177":1}}],["0256911577239574",{"2":{"177":1}}],["02568",{"2":{"137":1}}],["025092f",{"2":{"176":1}}],["02541",{"2":{"137":1}}],["02516",{"2":{"137":1}}],["026379742162639767",{"2":{"177":1}}],["026350189",{"2":{"93":1}}],["02620",{"2":{"137":1}}],["029377636383265602",{"2":{"177":1}}],["02937s",{"2":{"157":1}}],["02935s",{"2":{"157":1}}],["02972s",{"2":{"157":1}}],["02975s",{"2":{"157":1}}],["02991",{"2":{"137":1}}],["02961",{"2":{"137":1}}],["02964765308691042",{"2":{"117":4}}],["0296477",{"2":{"114":1}}],["020909304245852e",{"2":{"178":1}}],["020947263490455e",{"2":{"178":1}}],["02097197454005451",{"2":{"177":1}}],["020050773952866e",{"2":{"178":1}}],["0200425f",{"2":{"176":1}}],["02010087532816729",{"2":{"177":1}}],["020191745724326714",{"2":{"177":1}}],["02063327847752358",{"2":{"177":1}}],["020414371431591624",{"2":{"177":1}}],["020552878493211888",{"2":{"177":1}}],["020512676",{"2":{"76":1}}],["020841440939984492",{"2":{"177":1}}],["02082949459404453",{"2":{"177":1}}],["02080",{"2":{"137":1}}],["020768350144362",{"2":{"177":1}}],["02076f",{"2":{"176":1}}],["0207279",{"2":{"102":1}}],["020356868692558e",{"2":{"178":1}}],["020348f",{"2":{"176":1}}],["02039",{"2":{"137":1}}],["020332234338905318",{"2":{"177":1}}],["02033",{"2":{"137":1}}],["024866186905255e",{"2":{"178":1}}],["0248823046771698",{"2":{"161":1}}],["0247664249599429e",{"2":{"178":1}}],["0247664f",{"2":{"176":1}}],["024249801535431388",{"2":{"177":1}}],["0244575f",{"2":{"176":1}}],["024936638661368058",{"2":{"177":1}}],["0249",{"2":{"169":1}}],["0245199",{"2":{"106":1}}],["024",{"2":{"76":1}}],["02",{"2":{"30":1,"157":1}}],["0996570251584335e",{"2":{"178":1}}],["096157009471292e",{"2":{"178":1}}],["096157f",{"2":{"176":1}}],["09638900641676833",{"2":{"177":1}}],["095390563132088e",{"2":{"178":1}}],["0953906f",{"2":{"176":1}}],["09558611000472392",{"2":{"177":1}}],["091217808957168e",{"2":{"178":1}}],["091209f",{"2":{"176":1}}],["091939f",{"2":{"176":1}}],["0914",{"2":{"169":1}}],["094031698325898e",{"2":{"178":1}}],["09405",{"2":{"137":1}}],["0949",{"2":{"169":1}}],["0941",{"2":{"169":1}}],["0939067f",{"2":{"176":1}}],["0935077",{"2":{"174":2}}],["09351656",{"2":{"120":1,"121":1}}],["0932",{"2":{"169":1}}],["09387",{"2":{"137":1}}],["09701",{"2":{"137":1}}],["097855344",{"2":{"76":1}}],["09878",{"2":{"137":1}}],["0987538",{"2":{"106":1}}],["09852",{"2":{"114":1}}],["0985227",{"2":{"114":2}}],["0927651263003428e",{"2":{"178":1}}],["092248150611338e",{"2":{"178":1}}],["092828535",{"2":{"90":1}}],["09216565",{"2":{"76":1}}],["09",{"2":{"30":2,"169":1}}],["0061051374231235e",{"2":{"178":1}}],["00615",{"2":{"137":1}}],["006349674377069929",{"2":{"177":1}}],["006043962037684947",{"2":{"177":1}}],["00604",{"2":{"137":1}}],["006496278517170611",{"2":{"177":1}}],["00643",{"2":{"137":1}}],["00642",{"2":{"137":2}}],["00684",{"2":{"137":1}}],["00682",{"2":{"137":1}}],["00625",{"2":{"137":1}}],["00621",{"2":{"137":1}}],["0062973f",{"2":{"176":1}}],["00629",{"2":{"137":1}}],["006991680144950654",{"2":{"177":1}}],["00690",{"2":{"137":1}}],["00692",{"2":{"137":1}}],["00664",{"2":{"137":1}}],["00663",{"2":{"137":1}}],["00652",{"2":{"137":1}}],["00655",{"2":{"137":1}}],["0067",{"2":{"169":1}}],["00678",{"2":{"137":1}}],["00678769",{"2":{"76":1}}],["00674",{"2":{"137":1}}],["00675",{"2":{"137":1}}],["00",{"2":{"130":12,"157":1}}],["00520559267126083",{"2":{"177":1}}],["00522",{"2":{"137":1}}],["0057907331212782714",{"2":{"177":1}}],["00570",{"2":{"137":1}}],["00571",{"2":{"137":1}}],["00517",{"2":{"137":1}}],["00513",{"2":{"137":1}}],["00509967877361141",{"2":{"177":1}}],["00509",{"2":{"137":1}}],["0050410302",{"2":{"122":1}}],["0054",{"2":{"169":1}}],["00540",{"2":{"137":1}}],["00549",{"2":{"137":2}}],["00536",{"2":{"137":1}}],["005391656",{"2":{"77":1}}],["00554",{"2":{"137":1}}],["00556",{"2":{"137":1}}],["00557",{"2":{"137":2}}],["00569",{"2":{"137":1}}],["00568",{"2":{"137":2}}],["00560",{"2":{"137":1}}],["00597",{"2":{"137":1}}],["00592403",{"2":{"25":1}}],["005860520949963716",{"2":{"177":1}}],["00583",{"2":{"137":1}}],["00585",{"2":{"137":2}}],["00587",{"2":{"137":1}}],["00588",{"2":{"137":1}}],["009505948227704146",{"2":{"177":1}}],["00954525",{"2":{"76":1}}],["00922922779343203",{"2":{"177":1}}],["00921",{"2":{"137":1}}],["00926",{"2":{"137":1}}],["009056918301880643",{"2":{"177":1}}],["00904",{"2":{"137":1}}],["00900",{"2":{"137":1}}],["009361716233634384",{"2":{"177":1}}],["00934",{"2":{"137":1}}],["00939",{"2":{"137":1}}],["00949",{"2":{"137":1}}],["009417342",{"2":{"76":1}}],["00961",{"2":{"137":1}}],["00990849440296376",{"2":{"177":1}}],["00990",{"2":{"137":2}}],["00986",{"2":{"137":1}}],["00911",{"2":{"137":1}}],["00914",{"2":{"137":1}}],["00919",{"2":{"137":1}}],["009175307",{"2":{"122":1}}],["009167461",{"2":{"76":1}}],["0015962956792808102",{"2":{"177":1}}],["0015865607",{"2":{"77":1}}],["0012311811425605268",{"2":{"177":1}}],["00120731",{"2":{"76":1}}],["001f0",{"2":{"146":1}}],["0016247969",{"2":{"120":1,"121":2}}],["0018975141",{"2":{"77":1}}],["00117520713687785",{"2":{"177":1}}],["00117238",{"2":{"76":1}}],["00110518",{"2":{"76":4}}],["00178011",{"2":{"76":1}}],["001934319627299e",{"2":{"178":1}}],["0019285321933857303",{"2":{"177":1}}],["00195163",{"2":{"76":1}}],["00194229",{"2":{"25":1}}],["0024402092108903213",{"2":{"177":1}}],["002423105357175596",{"2":{"177":1}}],["0026602412566282306",{"2":{"177":1}}],["0023695397955581397",{"2":{"177":1}}],["00233261",{"2":{"76":1}}],["002967092500939512",{"2":{"177":1}}],["00294453",{"2":{"76":1}}],["0020871637830344454",{"2":{"177":1}}],["002087f",{"2":{"176":1}}],["002249800810884",{"2":{"161":1}}],["0022117028",{"2":{"77":1}}],["00277726",{"2":{"25":1}}],["00273815",{"2":{"25":1}}],["0085648146932791e",{"2":{"178":1}}],["00851",{"2":{"137":1}}],["008664f",{"2":{"176":1}}],["00861",{"2":{"137":1}}],["008021668513541608",{"2":{"177":1}}],["008011f",{"2":{"176":1}}],["00806096",{"2":{"76":1}}],["00842",{"2":{"137":1}}],["00819",{"2":{"137":1}}],["00814",{"2":{"137":1}}],["008796465842887504",{"2":{"177":1}}],["00879",{"2":{"137":1}}],["00831",{"2":{"137":1}}],["00895",{"2":{"137":1}}],["008287656846264849",{"2":{"177":1}}],["0082161156668996",{"2":{"177":1}}],["00821f",{"2":{"176":1}}],["00821",{"2":{"137":1}}],["00823197",{"2":{"114":1}}],["00822211",{"2":{"76":1}}],["008848805202157648",{"2":{"177":1}}],["00881351",{"2":{"76":1}}],["00880897",{"2":{"25":1}}],["00888936",{"2":{"25":1}}],["0004179167254411029",{"2":{"178":1}}],["0004032969641172105",{"2":{"177":1}}],["0009616786115207227",{"2":{"178":1}}],["0006732848512731586",{"2":{"178":1}}],["0006296852286443204",{"2":{"178":1}}],["0006239984997886235",{"2":{"178":1}}],["0006167645875060232",{"2":{"178":1}}],["0006872892690566108",{"2":{"178":1}}],["00069686912726478",{"2":{"178":1}}],["0006962550015859167",{"2":{"178":1}}],["0006559189228036226",{"2":{"178":1}}],["0006457321711362864",{"2":{"178":1}}],["0006367930196168518",{"2":{"178":1}}],["0006626099449352349",{"2":{"178":1}}],["0006602566700924333",{"2":{"178":1}}],["0006658085334180905",{"2":{"178":1}}],["0006632364353912129",{"2":{"178":1}}],["0006027371350159636",{"2":{"178":1}}],["0007791480513692754",{"2":{"178":1}}],["0007709460867192456",{"2":{"178":1}}],["0007860558927556543",{"2":{"178":1}}],["00071990248582105",{"2":{"178":1}}],["0007117310752981213",{"2":{"178":1}}],["0007105567364154836",{"2":{"178":1}}],["0007610696972092854",{"2":{"178":1}}],["0007211122134551628",{"2":{"178":1}}],["0007937026262524729",{"2":{"178":1}}],["0007539177071414011",{"2":{"178":1}}],["0007586931955229081",{"2":{"178":1}}],["000750543",{"2":{"76":1}}],["000754831",{"2":{"25":1}}],["0005674648472694767",{"2":{"178":1}}],["0005244937356517977",{"2":{"178":1}}],["0005740901170262534",{"2":{"178":1}}],["0005572566820208557",{"2":{"178":1}}],["000510699",{"2":{"76":1}}],["0008124558416854573",{"2":{"178":1}}],["0008097167570915016",{"2":{"178":1}}],["0008020753538423008",{"2":{"177":1}}],["00083f",{"2":{"76":1}}],["00032818817391118334",{"2":{"178":1}}],["0003294169957206736",{"2":{"178":1}}],["00032248962985238777",{"2":{"178":1}}],["0003025448352555981",{"2":{"178":1}}],["00030322691643611805",{"2":{"178":1}}],["0003586351545196296",{"2":{"178":1}}],["0003728965915869229",{"2":{"178":1}}],["00038097963229907544",{"2":{"178":1}}],["00039881752053247047",{"2":{"177":1}}],["0003315608165939517",{"2":{"178":1}}],["00033155672",{"2":{"176":1}}],["0003369000876203486",{"2":{"178":1}}],["00033689776",{"2":{"176":1}}],["00031233905270949217",{"2":{"178":1}}],["00031234138",{"2":{"176":1}}],["0003102025069545866",{"2":{"178":1}}],["0003102026",{"2":{"176":1}}],["000",{"2":{"170":1}}],["00026142470856713477",{"2":{"178":1}}],["0002684071421866321",{"2":{"178":1}}],["00028422808379670095",{"2":{"178":1}}],["00028839387",{"2":{"176":1}}],["00029311844363497764",{"2":{"178":1}}],["000293017518316645",{"2":{"178":1}}],["00029301443",{"2":{"176":1}}],["0002501048844999265",{"2":{"178":1}}],["00025061236042256115",{"2":{"178":1}}],["00025061367",{"2":{"176":1}}],["0002515337605158771",{"2":{"178":1}}],["00025112358742333346",{"2":{"178":1}}],["00025112068",{"2":{"176":1}}],["0002563943368699689",{"2":{"178":1}}],["00025639276",{"2":{"176":1}}],["00023393989498430928",{"2":{"178":1}}],["0002334657171392091",{"2":{"178":1}}],["00023346557",{"2":{"176":1}}],["00023440740675234172",{"2":{"178":1}}],["00023414833150699074",{"2":{"178":1}}],["00023414425",{"2":{"176":1}}],["0002356876744082825",{"2":{"178":1}}],["00023568759",{"2":{"176":1}}],["00023862447",{"2":{"176":1}}],["0002746350862441426",{"2":{"178":1}}],["00027789486399437154",{"2":{"178":1}}],["0002778923",{"2":{"176":1}}],["0002714622724607726",{"2":{"178":1}}],["0002714602",{"2":{"176":1}}],["00027685512964562096",{"2":{"178":1}}],["00027685237",{"2":{"176":1}}],["00024460524090390393",{"2":{"178":1}}],["00024460425",{"2":{"176":1}}],["0002444862709429051",{"2":{"178":1}}],["00024448716",{"2":{"176":1}}],["00024446112025782406",{"2":{"178":1}}],["00024446344",{"2":{"176":1}}],["00024475484212755575",{"2":{"178":1}}],["0002447548",{"2":{"176":1}}],["0002490672632118383",{"2":{"178":1}}],["00024906726",{"2":{"176":1}}],["00021641633828110176",{"2":{"178":1}}],["00021641343",{"2":{"176":1}}],["0002136196960576644",{"2":{"178":1}}],["00021361737",{"2":{"176":1}}],["00021897783211731302",{"2":{"178":1}}],["00021897774",{"2":{"176":1}}],["00021251011875282548",{"2":{"178":1}}],["00021250913",{"2":{"176":1}}],["00021223918756532482",{"2":{"178":1}}],["00021223628",{"2":{"176":1}}],["00021959541944993648",{"2":{"178":1}}],["00021996973839693348",{"2":{"178":1}}],["00021996978",{"2":{"176":1}}],["00021924263168848616",{"2":{"178":1}}],["00021924138",{"2":{"176":1}}],["00020872269062090432",{"2":{"178":1}}],["00020872283",{"2":{"176":1}}],["00020586807397764752",{"2":{"178":1}}],["00020586811",{"2":{"176":1}}],["00020703888550764658",{"2":{"178":1}}],["00020703816",{"2":{"176":1}}],["00020373288239562497",{"2":{"178":1}}],["00020373413",{"2":{"176":1}}],["00020418711702514773",{"2":{"178":1}}],["00020418811",{"2":{"176":1}}],["00020422443546031936",{"2":{"178":1}}],["00020422452",{"2":{"176":1}}],["00020045524468580904",{"2":{"178":1}}],["00020045234",{"2":{"176":1}}],["0002000537050168512",{"2":{"178":1}}],["00020005245",{"2":{"176":1}}],["00020632328939831497",{"2":{"178":1}}],["000206938597592508",{"2":{"178":1}}],["0002069366",{"2":{"176":1}}],["00020654974131380363",{"2":{"178":1}}],["00020654775",{"2":{"176":1}}],["00020660982037080955",{"2":{"178":1}}],["00020660755",{"2":{"176":1}}],["00020148798494236216",{"2":{"178":1}}],["00020149031",{"2":{"176":1}}],["00020111128704528649",{"2":{"178":1}}],["00020110856",{"2":{"176":1}}],["00020138553728467438",{"2":{"178":1}}],["00020138327",{"2":{"176":1}}],["00022016138424090162",{"2":{"178":1}}],["00022041206307656967",{"2":{"178":1}}],["0002204093",{"2":{"176":1}}],["00022661801875481217",{"2":{"178":1}}],["00022661644",{"2":{"176":1}}],["00022597401925414693",{"2":{"178":1}}],["00022597678",{"2":{"176":1}}],["00022925046598756195",{"2":{"178":1}}],["00022924854",{"2":{"176":1}}],["00022258625540396467",{"2":{"178":1}}],["00022258626",{"2":{"176":1}}],["00022330733426205592",{"2":{"178":1}}],["00022330634",{"2":{"176":1}}],["00022303227218632536",{"2":{"178":1}}],["00022303218",{"2":{"176":1}}],["0002270068931446655",{"2":{"178":1}}],["00022700398",{"2":{"176":1}}],["0002276218856581526",{"2":{"178":1}}],["00022762116",{"2":{"176":1}}],["00022445549968310753",{"2":{"178":1}}],["00022445363",{"2":{"176":1}}],["00022462637798676126",{"2":{"178":1}}],["00022462536",{"2":{"176":1}}],["0002212187339510293",{"2":{"178":1}}],["00022121618",{"2":{"176":1}}],["00022154319350695494",{"2":{"178":1}}],["00022154477",{"2":{"176":1}}],["0002",{"2":{"169":1}}],["00000",{"2":{"137":50}}],["00019931051998448856",{"2":{"178":1}}],["00019930796",{"2":{"176":1}}],["00019854514050640496",{"2":{"178":1}}],["00019854389",{"2":{"176":1}}],["00019470894379753953",{"2":{"178":1}}],["00019470662",{"2":{"176":1}}],["00019770909968195506",{"2":{"178":1}}],["00019770837",{"2":{"176":1}}],["00019525791740113269",{"2":{"178":1}}],["00019525501",{"2":{"176":1}}],["00019571177448356433",{"2":{"178":1}}],["00019570945",{"2":{"176":1}}],["00019203456363448267",{"2":{"178":1}}],["00019203326",{"2":{"176":1}}],["00019295690181304044",{"2":{"178":1}}],["00019295757",{"2":{"176":1}}],["00019073496987680766",{"2":{"178":1}}],["00019073563",{"2":{"176":1}}],["0001902121027951816",{"2":{"178":1}}],["00019021088",{"2":{"176":1}}],["00019134560870835842",{"2":{"178":1}}],["00019134328",{"2":{"176":1}}],["0001916511731137912",{"2":{"178":1}}],["00019165275",{"2":{"176":1}}],["00019190394280593512",{"2":{"178":1}}],["00019190085",{"2":{"176":1}}],["00019122731925846927",{"2":{"178":1}}],["00019122523",{"2":{"176":1}}],["00019682885718275532",{"2":{"178":1}}],["00019683011",{"2":{"176":1}}],["00019668281",{"2":{"77":1}}],["00018497025779880998",{"2":{"178":1}}],["0001845766357591615",{"2":{"178":1}}],["00018457786",{"2":{"176":1}}],["00018007584911407747",{"2":{"178":1}}],["00018007657",{"2":{"176":1}}],["0001862390612868223",{"2":{"178":1}}],["00018623754",{"2":{"176":1}}],["0001859721960498307",{"2":{"178":1}}],["0001859722",{"2":{"176":1}}],["0001829136",{"2":{"176":1}}],["00018876205302162434",{"2":{"178":1}}],["00018876392",{"2":{"176":1}}],["00018813734644263657",{"2":{"178":1}}],["00018813847",{"2":{"176":1}}],["00018711091945008474",{"2":{"178":1}}],["00018711382",{"2":{"176":1}}],["00018792349668634117",{"2":{"178":1}}],["00018792605",{"2":{"176":1}}],["0001872933910208075",{"2":{"178":1}}],["00018729462",{"2":{"176":1}}],["00018312987076686354",{"2":{"178":1}}],["0001831322",{"2":{"176":1}}],["0001836789690615149",{"2":{"178":1}}],["00018367641",{"2":{"176":1}}],["00018385308333281611",{"2":{"178":1}}],["00018385517",{"2":{"176":1}}],["00018397685",{"2":{"176":1}}],["00018101927179873937",{"2":{"178":1}}],["00018133198198631633",{"2":{"178":1}}],["00018133184",{"2":{"176":1}}],["00018125484599934054",{"2":{"178":1}}],["00018125362",{"2":{"176":1}}],["00018952923314919035",{"2":{"178":1}}],["00018952793",{"2":{"176":1}}],["00018959841428684904",{"2":{"178":1}}],["00018959433",{"2":{"176":1}}],["00016151671170325227",{"2":{"178":1}}],["0001615138",{"2":{"176":1}}],["00016108827787794465",{"2":{"178":1}}],["00016108702",{"2":{"176":1}}],["00016984150921510918",{"2":{"178":1}}],["00016983895",{"2":{"176":1}}],["00016944630956550123",{"2":{"178":1}}],["000169445",{"2":{"176":1}}],["00016522054805439193",{"2":{"178":1}}],["00016522144",{"2":{"176":1}}],["00016582142210519454",{"2":{"178":1}}],["00016582398",{"2":{"176":1}}],["00016547185789007933",{"2":{"178":1}}],["00016543909925125145",{"2":{"178":1}}],["00016546999",{"2":{"176":1}}],["00016544068",{"2":{"176":1}}],["00016426227840953705",{"2":{"178":1}}],["00016425819",{"2":{"176":1}}],["0001649685267464404",{"2":{"178":1}}],["00016496978",{"2":{"176":1}}],["00016499298606911512",{"2":{"178":1}}],["0001649914",{"2":{"176":1}}],["00016205883974587405",{"2":{"178":1}}],["00016205726",{"2":{"176":1}}],["0001623334926961828",{"2":{"178":1}}],["00016233458359674242",{"2":{"178":1}}],["00016233283",{"2":{"176":1}}],["00016233182",{"2":{"176":1}}],["00016871553604570189",{"2":{"178":1}}],["0001682118802515854",{"2":{"178":1}}],["00016821099",{"2":{"176":1}}],["00016864608687533223",{"2":{"178":1}}],["00016864711",{"2":{"176":1}}],["00016896545741135337",{"2":{"178":1}}],["00016896137",{"2":{"176":1}}],["0001636809488460592",{"2":{"178":1}}],["00016367993",{"2":{"176":1}}],["000163852213760656",{"2":{"178":1}}],["00016385132",{"2":{"176":1}}],["00016383557519239006",{"2":{"178":1}}],["00016383445",{"2":{"176":1}}],["00016012533759136348",{"2":{"178":1}}],["00016012261",{"2":{"176":1}}],["00016003860470575705",{"2":{"178":1}}],["00016003738",{"2":{"176":1}}],["00016030934162183824",{"2":{"178":1}}],["00016031059",{"2":{"176":1}}],["0001604712657201476",{"2":{"178":1}}],["00016045294259091404",{"2":{"178":1}}],["00016045521",{"2":{"176":1}}],["00016046854",{"2":{"176":1}}],["00016044428048176378",{"2":{"178":1}}],["00016044428",{"2":{"176":1}}],["00015330975900653944",{"2":{"178":1}}],["00015315347468894462",{"2":{"178":1}}],["00015315072",{"2":{"176":1}}],["00015106562239523654",{"2":{"178":1}}],["00015106272",{"2":{"176":1}}],["0001593350176682785",{"2":{"178":1}}],["00015933493",{"2":{"176":1}}],["00015757541974987927",{"2":{"178":1}}],["00015757453",{"2":{"176":1}}],["00015714337027021338",{"2":{"178":1}}],["00015714747",{"2":{"176":1}}],["000154826828050608",{"2":{"178":1}}],["00015482772",{"2":{"176":1}}],["00015450624761784601",{"2":{"178":1}}],["00015450438",{"2":{"176":1}}],["00015407762605804915",{"2":{"178":1}}],["0001540761",{"2":{"176":1}}],["00015201551252104665",{"2":{"178":1}}],["00015201842",{"2":{"176":1}}],["00015273812232258918",{"2":{"178":1}}],["00015273914",{"2":{"176":1}}],["00015295690892380145",{"2":{"178":1}}],["00015295464",{"2":{"176":1}}],["00015608806149225427",{"2":{"178":1}}],["00015646074333132401",{"2":{"178":1}}],["00015645802",{"2":{"176":1}}],["0001565996973018465",{"2":{"178":1}}],["00015660196",{"2":{"176":1}}],["00015583859695763455",{"2":{"178":1}}],["00015583959",{"2":{"176":1}}],["0001557282141827111",{"2":{"178":1}}],["00015572732",{"2":{"176":1}}],["00015557107438596475",{"2":{"178":1}}],["0001555723",{"2":{"176":1}}],["00015561588044642346",{"2":{"178":1}}],["00015561515",{"2":{"176":1}}],["00010105017316233472",{"2":{"178":1}}],["00010104727",{"2":{"176":1}}],["00010146711271470889",{"2":{"178":1}}],["00010146622",{"2":{"176":1}}],["00010186136050951435",{"2":{"178":1}}],["00010186369",{"2":{"176":1}}],["00010153624077683168",{"2":{"178":1}}],["000101537495",{"2":{"176":1}}],["00010192715870302892",{"2":{"178":1}}],["00010192903",{"2":{"176":1}}],["00010196792781121315",{"2":{"178":1}}],["00010196593",{"2":{"176":1}}],["00010714442190266579",{"2":{"178":1}}],["000107145315",{"2":{"176":1}}],["00010708529850828807",{"2":{"178":1}}],["00010708526",{"2":{"176":1}}],["00010798034293220528",{"2":{"178":1}}],["00010791454525895475",{"2":{"178":1}}],["00010791469",{"2":{"176":1}}],["00010797909",{"2":{"176":1}}],["00010905382960001258",{"2":{"178":1}}],["0001090515",{"2":{"176":1}}],["00010960053384659647",{"2":{"178":1}}],["00010960179",{"2":{"176":1}}],["00010994532465131353",{"2":{"178":1}}],["000109945286",{"2":{"176":1}}],["0001098260301687941",{"2":{"178":1}}],["000109826695",{"2":{"176":1}}],["00010942477762167383",{"2":{"178":1}}],["000109424866",{"2":{"176":1}}],["00010533097047022557",{"2":{"178":1}}],["000105330306",{"2":{"176":1}}],["00010519855911629895",{"2":{"178":1}}],["000105863226",{"2":{"176":1}}],["000105819985",{"2":{"176":1}}],["00010559188898601651",{"2":{"178":1}}],["000105594445",{"2":{"176":1}}],["00010554667695332115",{"2":{"178":1}}],["00010554395",{"2":{"176":1}}],["00010520048",{"2":{"176":1}}],["00010474028257094274",{"2":{"178":1}}],["000104737555",{"2":{"176":1}}],["00010443949029882698",{"2":{"178":1}}],["000104440216",{"2":{"176":1}}],["00010651349173860798",{"2":{"178":1}}],["00010651335",{"2":{"176":1}}],["00010623089950329312",{"2":{"178":1}}],["000106232124",{"2":{"176":1}}],["00010644201441320344",{"2":{"178":1}}],["00010643892",{"2":{"176":1}}],["0001060513002314226",{"2":{"178":1}}],["00010605406",{"2":{"176":1}}],["00010067811102391554",{"2":{"178":1}}],["000100679004",{"2":{"176":1}}],["00010059439276230318",{"2":{"178":1}}],["0001005913",{"2":{"176":1}}],["00010079988359355636",{"2":{"178":1}}],["00010080215",{"2":{"176":1}}],["00010873914524270921",{"2":{"178":1}}],["00010873815",{"2":{"176":1}}],["0001082396781654274",{"2":{"178":1}}],["000108239285",{"2":{"176":1}}],["00010839004498570191",{"2":{"178":1}}],["00010838938",{"2":{"176":1}}],["0001086085367870683",{"2":{"178":1}}],["00010860645",{"2":{"176":1}}],["00010842721761527265",{"2":{"178":1}}],["000108427135",{"2":{"176":1}}],["00010849987767530952",{"2":{"178":1}}],["00010849579",{"2":{"176":1}}],["00010201917157440278",{"2":{"178":1}}],["00010202059818999055",{"2":{"178":1}}],["00010202208",{"2":{"176":1}}],["000102021324",{"2":{"176":1}}],["00010225556971856165",{"2":{"178":1}}],["0001022533",{"2":{"176":1}}],["00010241999290539078",{"2":{"178":1}}],["00010241591",{"2":{"176":1}}],["00010328569575795903",{"2":{"178":1}}],["00010328879",{"2":{"176":1}}],["0001036071282712616",{"2":{"178":1}}],["00010360437",{"2":{"176":1}}],["00010375873280559563",{"2":{"178":1}}],["0001037594",{"2":{"176":1}}],["00010372556630935908",{"2":{"178":1}}],["00010372281",{"2":{"176":1}}],["00010352732603407882",{"2":{"178":1}}],["0001035261",{"2":{"176":1}}],["00010356696498527327",{"2":{"178":1}}],["000103564205",{"2":{"176":1}}],["00014216770893870395",{"2":{"178":1}}],["0001424398457715654",{"2":{"178":1}}],["00014243826",{"2":{"176":1}}],["00014690596932688015",{"2":{"178":1}}],["00014690605",{"2":{"176":1}}],["00014884949250286642",{"2":{"178":1}}],["0001484983383295165",{"2":{"178":1}}],["00014849601",{"2":{"176":1}}],["00014879108",{"2":{"176":1}}],["0001495518057810956",{"2":{"178":1}}],["0001495528",{"2":{"176":1}}],["00014914023373420454",{"2":{"178":1}}],["00014913613",{"2":{"176":1}}],["00014964493972946297",{"2":{"178":1}}],["00014964533",{"2":{"176":1}}],["00014946056511050618",{"2":{"178":1}}],["00014946179",{"2":{"176":1}}],["00014134440093493936",{"2":{"178":1}}],["0001413457",{"2":{"176":1}}],["00014147040381663563",{"2":{"178":1}}],["00014147113",{"2":{"176":1}}],["00014545877793232335",{"2":{"178":1}}],["00014545645",{"2":{"176":1}}],["00014572366963243983",{"2":{"178":1}}],["00014572433",{"2":{"176":1}}],["000145612443948611",{"2":{"178":1}}],["00014561284",{"2":{"176":1}}],["0001456148171547888",{"2":{"178":1}}],["00014561473",{"2":{"176":1}}],["0001408103393030505",{"2":{"178":1}}],["0001408116",{"2":{"176":1}}],["00014004799207884675",{"2":{"178":1}}],["00014004567",{"2":{"176":1}}],["000140145227121088",{"2":{"178":1}}],["00014014006204650042",{"2":{"178":1}}],["00014014456",{"2":{"176":1}}],["00014013774",{"2":{"176":1}}],["00014404272258687495",{"2":{"178":1}}],["00014403982",{"2":{"176":1}}],["00014446736398475972",{"2":{"178":1}}],["00014446728",{"2":{"176":1}}],["0001445509162322753",{"2":{"178":1}}],["00014455158",{"2":{"176":1}}],["00014479503262686448",{"2":{"178":1}}],["0001447943",{"2":{"176":1}}],["00014429034228331664",{"2":{"178":1}}],["00014428626",{"2":{"176":1}}],["0001476391748030524",{"2":{"178":1}}],["00014764017",{"2":{"176":1}}],["00014728690811314856",{"2":{"178":1}}],["00014728917",{"2":{"176":1}}],["00014779452118916057",{"2":{"178":1}}],["00014779605",{"2":{"176":1}}],["00014787662338108665",{"2":{"178":1}}],["00014788071",{"2":{"176":1}}],["00014701153087955912",{"2":{"178":1}}],["00014701443",{"2":{"176":1}}],["00014703989",{"2":{"176":1}}],["00014399012673057686",{"2":{"178":1}}],["00014398887",{"2":{"176":1}}],["00014336454273257543",{"2":{"178":1}}],["0001433673",{"2":{"176":1}}],["00014307143388059756",{"2":{"178":1}}],["00014307268",{"2":{"176":1}}],["0001435916774186004",{"2":{"178":1}}],["0001435936",{"2":{"176":1}}],["00013955978852645128",{"2":{"178":1}}],["00013955703",{"2":{"176":1}}],["00013917121",{"2":{"176":1}}],["00013233675909869608",{"2":{"178":1}}],["00013233775",{"2":{"176":1}}],["00013224258404080248",{"2":{"178":1}}],["00013224669",{"2":{"176":1}}],["00013326545898355744",{"2":{"178":1}}],["00013326635",{"2":{"176":1}}],["00013355839407302655",{"2":{"178":1}}],["00013355879",{"2":{"176":1}}],["00013420120708449297",{"2":{"178":1}}],["00013443355214367962",{"2":{"178":1}}],["00013443631",{"2":{"176":1}}],["0001341999",{"2":{"176":1}}],["000136380311957456",{"2":{"178":1}}],["00013637965",{"2":{"176":1}}],["0001366226827145707",{"2":{"178":1}}],["000136625",{"2":{"176":1}}],["0001364321",{"2":{"176":1}}],["00013596040063635267",{"2":{"178":1}}],["00013596313",{"2":{"176":1}}],["00013504423165942132",{"2":{"178":1}}],["00013504615",{"2":{"176":1}}],["00013129272956297842",{"2":{"178":1}}],["00013129206",{"2":{"176":1}}],["00013162683405340648",{"2":{"178":1}}],["00013162836",{"2":{"176":1}}],["0001318892375517694",{"2":{"178":1}}],["00013188834",{"2":{"176":1}}],["00013182813231560087",{"2":{"178":1}}],["00013182944",{"2":{"176":1}}],["0001310086761777206",{"2":{"178":1}}],["00013100801",{"2":{"176":1}}],["0001310505749403198",{"2":{"178":1}}],["0001310525",{"2":{"176":1}}],["00013197998741538395",{"2":{"178":1}}],["00013197932",{"2":{"176":1}}],["00013196392221915754",{"2":{"178":1}}],["00013196601",{"2":{"176":1}}],["00013769112291049437",{"2":{"178":1}}],["00013769098",{"2":{"176":1}}],["00013770113702628667",{"2":{"178":1}}],["00013770128",{"2":{"176":1}}],["0001375438098464596",{"2":{"178":1}}],["00013754105",{"2":{"176":1}}],["0001372788532188075",{"2":{"178":1}}],["00013727894",{"2":{"176":1}}],["00013825837697938672",{"2":{"178":1}}],["00013825842",{"2":{"176":1}}],["0001386334265873324",{"2":{"178":1}}],["00013863033",{"2":{"176":1}}],["00013895672",{"2":{"176":1}}],["00013852900139668946",{"2":{"178":1}}],["00013852713",{"2":{"176":1}}],["0001385483919874571",{"2":{"178":1}}],["00013854839",{"2":{"176":1}}],["00013803185462158617",{"2":{"178":1}}],["0001380952753846818",{"2":{"178":1}}],["00013809335",{"2":{"176":1}}],["00013802775",{"2":{"176":1}}],["00011239547320539483",{"2":{"178":1}}],["00011239314",{"2":{"176":1}}],["00011219640612241469",{"2":{"178":1}}],["000112196445",{"2":{"176":1}}],["0001122695355092022",{"2":{"178":1}}],["00011226721",{"2":{"176":1}}],["00011277104",{"2":{"176":1}}],["00011504468181991542",{"2":{"178":1}}],["000115045936",{"2":{"176":1}}],["0001151702460716674",{"2":{"178":1}}],["00011516985",{"2":{"176":1}}],["00011524378096788207",{"2":{"178":1}}],["000115244446",{"2":{"176":1}}],["00011530637950852913",{"2":{"178":1}}],["00011530446",{"2":{"176":1}}],["00011860259337631721",{"2":{"178":1}}],["00011860157",{"2":{"176":1}}],["0001184425246475442",{"2":{"178":1}}],["00011844044",{"2":{"176":1}}],["00011319070244858188",{"2":{"178":1}}],["00011319172",{"2":{"176":1}}],["00011347570650014396",{"2":{"178":1}}],["00011347448",{"2":{"176":1}}],["00011356015108418405",{"2":{"178":1}}],["00011356168",{"2":{"176":1}}],["00011434342265331033",{"2":{"178":1}}],["0001143422",{"2":{"176":1}}],["00011458031060088479",{"2":{"178":1}}],["0001145274337977617",{"2":{"178":1}}],["00011452333",{"2":{"176":1}}],["00011457844",{"2":{"176":1}}],["00011466683386969963",{"2":{"178":1}}],["00011466273",{"2":{"176":1}}],["00011464300397201168",{"2":{"178":1}}],["00011464074",{"2":{"176":1}}],["00011058760874104137",{"2":{"178":1}}],["00011058528",{"2":{"176":1}}],["00011003736622204161",{"2":{"178":1}}],["00011003606",{"2":{"176":1}}],["00011026025231180859",{"2":{"178":1}}],["00011026127",{"2":{"176":1}}],["00011011763857150038",{"2":{"178":1}}],["00011011876",{"2":{"176":1}}],["00011079502647627679",{"2":{"178":1}}],["00011079276",{"2":{"176":1}}],["00011035699216298325",{"2":{"178":1}}],["00011035715759367784",{"2":{"178":1}}],["00011035788",{"2":{"176":1}}],["00011035926",{"2":{"176":1}}],["00011646972044254061",{"2":{"178":1}}],["000116467454",{"2":{"176":1}}],["00011615116911923022",{"2":{"178":1}}],["00011614925",{"2":{"176":1}}],["00011606780029305586",{"2":{"178":1}}],["00011606892",{"2":{"176":1}}],["00011602808",{"2":{"176":1}}],["00011680727105124031",{"2":{"178":1}}],["00011680688",{"2":{"176":1}}],["00011682660131853179",{"2":{"178":1}}],["000116823874",{"2":{"176":1}}],["00011764798284846008",{"2":{"178":1}}],["00011764802",{"2":{"176":1}}],["00011772640368254384",{"2":{"178":1}}],["00011772916",{"2":{"176":1}}],["00011780782892421003",{"2":{"178":1}}],["00011781059",{"2":{"176":1}}],["00011757015559333028",{"2":{"178":1}}],["000117571406",{"2":{"176":1}}],["00011172494816421646",{"2":{"178":1}}],["00011172785",{"2":{"176":1}}],["00011156811266117955",{"2":{"178":1}}],["00011156401",{"2":{"176":1}}],["00011113568933217088",{"2":{"178":1}}],["000111135545",{"2":{"176":1}}],["00011165698285695655",{"2":{"178":1}}],["000111658905",{"2":{"176":1}}],["00011180501808753271",{"2":{"178":1}}],["00011180349",{"2":{"176":1}}],["00011184299259703118",{"2":{"178":1}}],["00011184174",{"2":{"176":1}}],["00011949762882137913",{"2":{"178":1}}],["000119494725",{"2":{"176":1}}],["00011965997319786588",{"2":{"178":1}}],["00011965771",{"2":{"176":1}}],["00011960435856381964",{"2":{"178":1}}],["00011960628",{"2":{"176":1}}],["00011976364973143876",{"2":{"178":1}}],["00011976373",{"2":{"176":1}}],["00011970507388302038",{"2":{"178":1}}],["000119704986",{"2":{"176":1}}],["00011973267100973714",{"2":{"178":1}}],["00011973267",{"2":{"176":1}}],["00012682495469630388",{"2":{"178":1}}],["00012682205",{"2":{"176":1}}],["0001265711008818302",{"2":{"178":1}}],["000126567",{"2":{"176":1}}],["00012837107921466852",{"2":{"178":1}}],["00012837019",{"2":{"176":1}}],["0001287773026991497",{"2":{"178":1}}],["0001287793",{"2":{"176":1}}],["00012809090297466653",{"2":{"178":1}}],["00012809213",{"2":{"176":1}}],["0001240260561405437",{"2":{"178":1}}],["00012402602",{"2":{"176":1}}],["00012460399273889032",{"2":{"178":1}}],["00012460808",{"2":{"176":1}}],["00012469526",{"2":{"176":1}}],["0001277812942805455",{"2":{"178":1}}],["00012778126",{"2":{"176":1}}],["00012731274434102046",{"2":{"178":1}}],["00012731152",{"2":{"176":1}}],["0001276465066336227",{"2":{"178":1}}],["00012764114345982755",{"2":{"178":1}}],["00012764451",{"2":{"176":1}}],["00012764387",{"2":{"176":1}}],["00012944446489317128",{"2":{"178":1}}],["0001294468",{"2":{"176":1}}],["00012929745239398095",{"2":{"178":1}}],["00012929876",{"2":{"176":1}}],["00012954457372531874",{"2":{"178":1}}],["00012954461",{"2":{"176":1}}],["00012998042319347757",{"2":{"178":1}}],["00012994326246607512",{"2":{"178":1}}],["00012994438",{"2":{"176":1}}],["00012997884",{"2":{"176":1}}],["00012930984295091323",{"2":{"178":1}}],["00012930758",{"2":{"176":1}}],["0001293170604649312",{"2":{"178":1}}],["00012931744",{"2":{"176":1}}],["00012931552098380893",{"2":{"178":1}}],["00012931575",{"2":{"176":1}}],["00012570146642920253",{"2":{"178":1}}],["00012570035",{"2":{"176":1}}],["00012508947967644816",{"2":{"178":1}}],["0001250565109943609",{"2":{"178":1}}],["00012505539",{"2":{"176":1}}],["0001250922",{"2":{"176":1}}],["00012566449004216483",{"2":{"178":1}}],["00012566449",{"2":{"176":1}}],["00012029204783027752",{"2":{"178":1}}],["00012029219",{"2":{"176":1}}],["00012007379748976322",{"2":{"178":1}}],["000120070705",{"2":{"176":1}}],["000120417775",{"2":{"176":1}}],["00012086919141633674",{"2":{"178":1}}],["00012089655740529559",{"2":{"178":1}}],["0001208953",{"2":{"176":1}}],["0001208721",{"2":{"176":1}}],["0001207756435003642",{"2":{"178":1}}],["00012077053021225195",{"2":{"178":1}}],["00012077274",{"2":{"176":1}}],["00012073298025916682",{"2":{"178":1}}],["000120731675",{"2":{"176":1}}],["000120767974",{"2":{"176":1}}],["00012012449121696296",{"2":{"178":1}}],["00012012445",{"2":{"176":1}}],["00012019933371731891",{"2":{"178":1}}],["00012019725",{"2":{"176":1}}],["00012284992674441712",{"2":{"178":1}}],["00012285201",{"2":{"176":1}}],["00012216993228893042",{"2":{"178":1}}],["00012216585",{"2":{"176":1}}],["00012200352440355486",{"2":{"178":1}}],["00012200552",{"2":{"176":1}}],["00012203002300609445",{"2":{"178":1}}],["00012203125",{"2":{"176":1}}],["00012381657665646984",{"2":{"178":1}}],["00012381934",{"2":{"176":1}}],["000123896300794363",{"2":{"178":1}}],["00012389639",{"2":{"176":1}}],["00012103188831244262",{"2":{"178":1}}],["000121028796",{"2":{"176":1}}],["0001219667592681094",{"2":{"178":1}}],["00012196603",{"2":{"176":1}}],["0001216062423108395",{"2":{"178":1}}],["00012160472",{"2":{"176":1}}],["00012127533304528576",{"2":{"178":1}}],["00012127408",{"2":{"176":1}}],["00012177309585758837",{"2":{"178":1}}],["000121771845",{"2":{"176":1}}],["00012131192643092138",{"2":{"178":1}}],["00012131389618733525",{"2":{"178":1}}],["00012131699",{"2":{"176":1}}],["0001213096",{"2":{"176":1}}],["00017417684072532018",{"2":{"178":1}}],["00017476641385669176",{"2":{"178":1}}],["00017476828",{"2":{"176":1}}],["00017445579836932387",{"2":{"178":1}}],["0001744599",{"2":{"176":1}}],["00017673061092743052",{"2":{"178":1}}],["00017672828",{"2":{"176":1}}],["00017610692764867306",{"2":{"178":1}}],["00017610678",{"2":{"176":1}}],["00017579407514072337",{"2":{"178":1}}],["00017579607",{"2":{"176":1}}],["00017545267654219408",{"2":{"178":1}}],["0001754534",{"2":{"176":1}}],["00017228935096647653",{"2":{"178":1}}],["00017228896",{"2":{"176":1}}],["00017278433550250842",{"2":{"178":1}}],["00017278506",{"2":{"176":1}}],["0001771006315275394",{"2":{"178":1}}],["0001779288481562698",{"2":{"178":1}}],["00017792893",{"2":{"176":1}}],["00017727959027408977",{"2":{"178":1}}],["00017727955",{"2":{"176":1}}],["00017704781914277154",{"2":{"178":1}}],["00017704595",{"2":{"176":1}}],["00017709933",{"2":{"176":1}}],["0001715444594282229",{"2":{"178":1}}],["00017125432819738403",{"2":{"178":1}}],["00017125023",{"2":{"176":1}}],["0001710924573568783",{"2":{"178":1}}],["00017109046",{"2":{"176":1}}],["00017118274134490438",{"2":{"178":1}}],["00017118001",{"2":{"176":1}}],["00017196782570625947",{"2":{"178":1}}],["0001719667",{"2":{"176":1}}],["00017954646570343495",{"2":{"178":1}}],["00017954524",{"2":{"176":1}}],["00017980657479471705",{"2":{"178":1}}],["00017980425",{"2":{"176":1}}],["00017995205",{"2":{"176":1}}],["00017002290975750095",{"2":{"178":1}}],["00017002202",{"2":{"176":1}}],["00017042327462111866",{"2":{"178":1}}],["00017042554",{"2":{"176":1}}],["00017038380610754774",{"2":{"178":1}}],["0001703838",{"2":{"176":1}}],["00017382442440053598",{"2":{"178":1}}],["00017382255",{"2":{"176":1}}],["00017300317623304866",{"2":{"178":1}}],["00017300091",{"2":{"176":1}}],["0001732828104890276",{"2":{"178":1}}],["00017328089",{"2":{"176":1}}],["00017334803123936343",{"2":{"178":1}}],["00017334803",{"2":{"176":1}}],["0001",{"2":{"76":11}}],["0001f0",{"2":{"76":1}}],["003368634740061504",{"2":{"177":1}}],["0031100197038603306",{"2":{"177":1}}],["00313608",{"2":{"76":1}}],["003854406879061e",{"2":{"178":1}}],["003879775858755852",{"2":{"177":1}}],["003833000649596514",{"2":{"177":1}}],["003869f",{"2":{"176":1}}],["00399995",{"2":{"76":4}}],["00396679",{"2":{"25":1}}],["0032996827586000317",{"2":{"177":1}}],["0032",{"2":{"169":1}}],["0032008",{"2":{"76":1}}],["00327215",{"2":{"25":1}}],["0079544977704e",{"2":{"178":1}}],["00790",{"2":{"137":1}}],["0072353830951188206",{"2":{"177":1}}],["00725",{"2":{"137":2}}],["007253055",{"2":{"122":1}}],["007017656891419924",{"2":{"177":1}}],["00708",{"2":{"137":1}}],["007037298",{"2":{"77":1}}],["00783",{"2":{"137":1}}],["0071116709655967255",{"2":{"177":1}}],["00713",{"2":{"137":1}}],["00719",{"2":{"137":1}}],["0071741",{"2":{"25":1}}],["00756",{"2":{"137":1}}],["00754",{"2":{"137":1}}],["00761096830444328",{"2":{"177":1}}],["00760",{"2":{"137":1}}],["00766",{"2":{"137":1}}],["00767",{"2":{"137":1}}],["00763",{"2":{"137":1}}],["0077018155701514e",{"2":{"178":1}}],["007709193266232499",{"2":{"177":1}}],["00777",{"2":{"137":1}}],["00771",{"2":{"137":1}}],["0077507",{"2":{"25":1}}],["00749935",{"2":{"76":1}}],["00730",{"2":{"137":1}}],["00737",{"2":{"137":1}}],["00732118",{"2":{"76":1}}],["00734886",{"2":{"25":1}}],["004847843884322281",{"2":{"177":1}}],["004818557596569256",{"2":{"177":1}}],["00418515298414508",{"2":{"177":1}}],["0041917767",{"2":{"122":1}}],["004529475034590188",{"2":{"177":1}}],["00459416",{"2":{"25":1}}],["004772010596095392",{"2":{"177":1}}],["0047987f",{"2":{"176":1}}],["00476192",{"2":{"76":1}}],["004241652",{"2":{"122":1}}],["00426221",{"2":{"76":1}}],["0044205473",{"2":{"122":1}}],["00447309",{"2":{"76":1}}],["0043726736",{"2":{"120":1,"121":2}}],["00468489",{"2":{"25":1}}],["012849766519993163",{"2":{"177":1}}],["012396365770967076",{"2":{"177":1}}],["01237125722871237",{"2":{"177":1}}],["012446121061225964",{"2":{"177":1}}],["012423985228668584",{"2":{"177":1}}],["012913937856553289",{"2":{"177":1}}],["01293",{"2":{"137":1}}],["0125035f",{"2":{"176":1}}],["0122",{"2":{"169":1}}],["01222",{"2":{"137":1}}],["01209",{"2":{"137":1}}],["013757342964474e",{"2":{"178":1}}],["013794",{"2":{"165":1}}],["013547176658980737",{"2":{"177":1}}],["013532854861997918",{"2":{"177":1}}],["013554593203308008",{"2":{"177":1}}],["013364035775378412",{"2":{"177":1}}],["01335",{"2":{"137":2}}],["01310",{"2":{"137":1}}],["013928769802494537",{"2":{"161":1}}],["01391",{"2":{"137":1}}],["01397949",{"2":{"89":1}}],["01329",{"2":{"137":2}}],["013800484708468138",{"2":{"177":1}}],["01388",{"2":{"137":1}}],["01389",{"2":{"137":1}}],["015132311698807245",{"2":{"177":1}}],["01514",{"2":{"137":1}}],["015413676223328199",{"2":{"177":1}}],["015412594",{"2":{"122":1}}],["015522255130645694",{"2":{"177":1}}],["015030312218619087",{"2":{"177":1}}],["015901568755078654",{"2":{"177":1}}],["015923083057834027",{"2":{"177":1}}],["01593",{"2":{"137":1}}],["015785984296997794",{"2":{"177":1}}],["0157839085777947",{"2":{"161":1}}],["015748031",{"2":{"161":2}}],["01573",{"2":{"137":1}}],["01561",{"2":{"137":1}}],["01626587145143468",{"2":{"177":1}}],["016620815901878253",{"2":{"177":1}}],["016963046554685536",{"2":{"177":1}}],["0168",{"2":{"169":1}}],["01683",{"2":{"137":1}}],["01608",{"2":{"137":1}}],["016146637502150406",{"2":{"177":1}}],["01617",{"2":{"137":1}}],["016194405",{"2":{"76":1}}],["017051490948011293",{"2":{"177":1}}],["017923246391015904",{"2":{"177":1}}],["01761360308066557",{"2":{"177":1}}],["01716279566038105",{"2":{"177":1}}],["0171745",{"2":{"106":1}}],["017748123886680903",{"2":{"177":1}}],["01774186110866609",{"2":{"177":1}}],["01779",{"2":{"137":1}}],["017294276511174298",{"2":{"177":1}}],["017344",{"2":{"165":1}}],["01752",{"2":{"137":1}}],["01786",{"2":{"137":1}}],["019301872584702e",{"2":{"178":1}}],["019302f",{"2":{"176":1}}],["019910122722075096",{"2":{"177":1}}],["019958459751178312",{"2":{"177":1}}],["01975531095702029",{"2":{"177":1}}],["019715602687456514",{"2":{"177":1}}],["01953487303756195",{"2":{"177":1}}],["01950",{"2":{"137":1}}],["019203788197126054",{"2":{"177":1}}],["019464416988440935",{"2":{"177":1}}],["01913",{"2":{"137":1}}],["019176451",{"2":{"76":1}}],["01s",{"2":{"130":1}}],["01f0",{"2":{"122":3,"137":1}}],["018513107066246644",{"2":{"177":1}}],["018060132121416765",{"2":{"177":1}}],["018274577343534007",{"2":{"177":1}}],["018224930107454487",{"2":{"177":1}}],["01823",{"2":{"137":1}}],["018364387021327692",{"2":{"177":1}}],["01832",{"2":{"137":1}}],["018652617240000398",{"2":{"177":1}}],["01864451",{"2":{"76":1}}],["018437229466984544",{"2":{"177":1}}],["018910188751749105",{"2":{"177":1}}],["018934307254695595",{"2":{"177":1}}],["018980452144523",{"2":{"161":1}}],["01892",{"2":{"137":1}}],["018793020521969617",{"2":{"177":1}}],["01872db4",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["018743665453639813",{"2":{"117":1}}],["010633659103584e",{"2":{"178":1}}],["010262587199066909",{"2":{"177":1}}],["01024",{"2":{"137":1}}],["010158488547151e",{"2":{"178":1}}],["010129000748480839",{"2":{"177":1}}],["01013",{"2":{"137":1}}],["010951237246969e",{"2":{"178":1}}],["01095520031828327",{"2":{"177":1}}],["010950330269378201",{"2":{"177":1}}],["01094",{"2":{"137":1}}],["010391f",{"2":{"176":1}}],["01038",{"2":{"137":1}}],["010866f",{"2":{"176":1}}],["0108668577150213",{"2":{"114":1}}],["01085",{"2":{"137":1}}],["01058",{"2":{"137":1}}],["010438139233305582",{"2":{"177":1}}],["01045",{"2":{"137":1}}],["0104967",{"2":{"76":1}}],["014727439711552081",{"2":{"177":1}}],["014720493495480241",{"2":{"177":1}}],["014633651841338422",{"2":{"177":1}}],["0146331",{"2":{"76":1}}],["014223184402618666",{"2":{"177":1}}],["014393902022972e",{"2":{"178":1}}],["014398f",{"2":{"176":1}}],["01432",{"2":{"137":1}}],["01494",{"2":{"137":1}}],["01481",{"2":{"137":1}}],["014058021",{"2":{"77":1}}],["011603833644094e",{"2":{"178":1}}],["011604f",{"2":{"176":1}}],["011326237661996849",{"2":{"177":1}}],["01138",{"2":{"137":1}}],["011469023119692376",{"2":{"177":1}}],["011447676185503672",{"2":{"177":1}}],["0114265",{"2":{"25":1}}],["0118",{"2":{"169":1}}],["01155",{"2":{"137":1}}],["01150",{"2":{"137":1}}],["011152289366379492",{"2":{"177":1}}],["01111",{"2":{"137":1}}],["01119",{"2":{"137":1}}],["011928852014086397",{"2":{"177":1}}],["011966053312152423",{"2":{"177":1}}],["01196",{"2":{"137":1}}],["0119719",{"2":{"76":1}}],["01123161885375543",{"2":{"177":1}}],["01128",{"2":{"137":1}}],["01129",{"2":{"137":1}}],["01176",{"2":{"137":1}}],["011082f",{"2":{"176":1}}],["0110904",{"2":{"76":1}}],["0110335",{"2":{"76":1}}],["01",{"2":{"25":3,"122":2,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"178":1,"180":1}}],["0",{"2":{"9":1,"25":39,"31":1,"34":6,"35":2,"41":1,"42":4,"50":3,"53":2,"55":1,"68":5,"69":1,"76":106,"77":11,"84":1,"85":1,"87":1,"89":4,"90":15,"93":64,"96":26,"98":8,"102":6,"103":1,"104":3,"106":61,"113":1,"114":155,"115":15,"116":3,"117":62,"119":12,"120":15,"121":15,"122":79,"123":12,"126":1,"127":1,"128":2,"129":2,"131":2,"134":1,"136":1,"137":227,"139":12,"142":1,"143":1,"144":1,"145":2,"146":98,"147":1,"148":26,"149":10,"150":12,"153":2,"156":2,"157":20,"158":12,"161":136,"162":1,"163":4,"165":289,"166":12,"168":4,"169":69,"171":2,"174":4,"175":9,"176":494,"177":251,"178":409,"180":12}}],["1e",{"2":{"174":1}}],["1g",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["1+0",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["146766358522396e",{"2":{"178":1}}],["1465668f",{"2":{"176":1}}],["1448045914096435e",{"2":{"178":1}}],["1445137f",{"2":{"176":1}}],["1441",{"2":{"169":1}}],["143097f",{"2":{"176":1}}],["14330137",{"2":{"165":1}}],["149263277806693e",{"2":{"178":1}}],["1491327f",{"2":{"176":1}}],["1496063",{"2":{"161":2}}],["142910197230408e",{"2":{"178":1}}],["142987904743973e",{"2":{"178":1}}],["1427353925903686e",{"2":{"178":1}}],["142715f",{"2":{"176":1}}],["1425063756241582",{"2":{"161":1}}],["147621718321227e",{"2":{"178":1}}],["147137125371105e",{"2":{"178":1}}],["1474464f",{"2":{"176":1}}],["147809f",{"2":{"176":1}}],["1478",{"2":{"169":1}}],["148602304632778e",{"2":{"178":1}}],["148563f",{"2":{"176":1}}],["1481",{"2":{"169":1}}],["14825",{"2":{"114":1}}],["148248",{"2":{"114":2}}],["14173229",{"2":{"161":2}}],["141",{"2":{"139":1}}],["14125f",{"2":{"76":1}}],["14029",{"2":{"137":1}}],["14",{"2":{"123":1,"131":1,"137":7,"139":1,"150":1,"157":1,"158":1,"166":1,"169":4,"171":1,"180":1}}],["14536527",{"2":{"122":1}}],["145296",{"2":{"106":1}}],["1`",{"2":{"103":3}}],["1st",{"2":{"94":1}}],["175605037887088e",{"2":{"178":1}}],["175717f",{"2":{"176":1}}],["171994459566595e",{"2":{"178":1}}],["171802f",{"2":{"176":1}}],["173035420130597e",{"2":{"178":1}}],["1736",{"2":{"169":1}}],["17322835",{"2":{"161":2}}],["1721903958560575e",{"2":{"178":1}}],["17215171721421207",{"2":{"177":1}}],["172182f",{"2":{"176":1}}],["1721",{"2":{"169":1}}],["177785845965673e",{"2":{"178":1}}],["1772155f",{"2":{"176":1}}],["1773757f",{"2":{"176":1}}],["1770575798169982",{"2":{"161":1}}],["17746s",{"2":{"157":1}}],["1775011",{"2":{"122":1}}],["17643440564041185",{"2":{"161":1}}],["1764085",{"2":{"93":1}}],["17623",{"2":{"137":1}}],["170342",{"2":{"114":1}}],["17441",{"2":{"114":1}}],["17461072",{"2":{"93":1}}],["174927",{"2":{"86":1}}],["17",{"2":{"90":1,"137":7,"162":1,"169":3,"178":13}}],["178909",{"2":{"76":1}}],["1th",{"2":{"55":3}}],["1c",{"2":{"52":1}}],["1b",{"2":{"52":3}}],["1a",{"2":{"52":3}}],["1−z",{"2":{"52":1}}],["1803815919564016e",{"2":{"178":1}}],["1804808f",{"2":{"176":1}}],["1856517618598036e",{"2":{"178":1}}],["185698f",{"2":{"176":1}}],["185953496540945e",{"2":{"178":1}}],["18591846607777e",{"2":{"178":1}}],["1854648f",{"2":{"176":1}}],["1882926f",{"2":{"176":1}}],["18883f",{"2":{"176":1}}],["1888",{"2":{"169":1}}],["1887817476268587",{"2":{"161":1}}],["18253882",{"2":{"165":1}}],["182845399340577",{"2":{"161":1}}],["1837639793015286e",{"2":{"178":1}}],["1834731f",{"2":{"176":1}}],["18330825579933746",{"2":{"161":1}}],["18365",{"2":{"106":1}}],["18142056",{"2":{"165":1}}],["1811024",{"2":{"161":2}}],["18102",{"2":{"137":1}}],["18s",{"2":{"146":1}}],["186711237478518e",{"2":{"178":1}}],["186044f",{"2":{"176":1}}],["18637",{"2":{"137":1}}],["18646",{"2":{"137":1}}],["1870307806031467e",{"2":{"178":1}}],["1871833f",{"2":{"176":1}}],["1871622",{"2":{"119":4}}],["1874",{"2":{"169":1}}],["18794",{"2":{"106":1}}],["187646",{"2":{"106":1}}],["18941",{"2":{"106":1}}],["18",{"2":{"44":1,"137":7,"169":4,"178":9}}],["1f0",{"2":{"42":1,"55":1,"77":1,"161":1}}],["1×32",{"2":{"42":1,"77":1}}],["125955222849255e",{"2":{"178":1}}],["1250",{"2":{"169":1}}],["122252930253917e",{"2":{"178":1}}],["1225085f",{"2":{"176":1}}],["122088f",{"2":{"176":1}}],["122713f",{"2":{"176":1}}],["1223",{"2":{"169":1}}],["12644850374371e",{"2":{"178":1}}],["1263464f",{"2":{"176":1}}],["1260803f",{"2":{"176":1}}],["1261990389976131",{"2":{"117":1}}],["121985830201956e",{"2":{"178":1}}],["1216",{"2":{"169":1}}],["1212038088290894",{"2":{"161":1}}],["12s",{"2":{"157":2}}],["1276",{"2":{"169":1}}],["12789",{"2":{"137":1}}],["12726",{"2":{"137":1}}],["12729146",{"2":{"122":1}}],["12abac4f24f6",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["1204678255460235e",{"2":{"178":1}}],["1205",{"2":{"169":1}}],["1206",{"2":{"121":1}}],["1203",{"2":{"121":1}}],["1207",{"2":{"121":1}}],["12442",{"2":{"106":1}}],["12",{"2":{"102":1,"114":2,"123":6,"137":7,"139":6,"150":6,"157":3,"158":6,"166":6,"169":6,"174":1,"180":6}}],["1298189f",{"2":{"176":1}}],["12918",{"2":{"137":1}}],["129",{"2":{"77":1}}],["128588185403491e",{"2":{"178":1}}],["128997f",{"2":{"176":1}}],["128",{"2":{"42":4,"45":2,"76":3,"77":12,"127":4,"129":1,"146":1,"161":4}}],["123121547174407e",{"2":{"178":1}}],["1234",{"2":{"168":1}}],["12345",{"2":{"161":1}}],["1233",{"2":{"121":1}}],["123",{"2":{"25":3}}],["1068338528151916e",{"2":{"178":1}}],["10629780224701328",{"2":{"161":1}}],["10f",{"2":{"177":1}}],["10s",{"2":{"177":2}}],["102628667107437e",{"2":{"178":1}}],["102891452717263e",{"2":{"178":1}}],["1023010811836416e",{"2":{"178":1}}],["102573566871294",{"2":{"177":1}}],["1020445f",{"2":{"176":1}}],["102739f",{"2":{"176":1}}],["10315104867281276",{"2":{"177":1}}],["1032",{"2":{"169":1}}],["103956826",{"2":{"76":1}}],["1058",{"2":{"169":1}}],["105128",{"2":{"76":4}}],["10786003980798775",{"2":{"177":1}}],["107888442446331",{"2":{"161":1}}],["1073",{"2":{"169":1}}],["10736",{"2":{"137":1}}],["10750094646131855",{"2":{"177":1}}],["1075",{"2":{"169":1}}],["1085530880355043e",{"2":{"178":1}}],["1082627f",{"2":{"176":1}}],["108277",{"2":{"76":1}}],["1083",{"2":{"169":1}}],["1081451188446065",{"2":{"161":1}}],["109323343517696e",{"2":{"178":1}}],["1095558f",{"2":{"176":1}}],["1090",{"2":{"174":2}}],["10943",{"2":{"137":1}}],["109261915",{"2":{"93":1}}],["10963185",{"2":{"76":1}}],["101057123727002e",{"2":{"178":1}}],["101919116924134e",{"2":{"178":1}}],["1011826f",{"2":{"176":1}}],["1018924f",{"2":{"176":1}}],["10175798",{"2":{"165":1}}],["10179f",{"2":{"76":1}}],["101",{"2":{"77":1,"149":4,"165":1}}],["10",{"2":{"42":1,"45":1,"48":1,"55":6,"68":1,"69":2,"75":1,"76":2,"86":2,"87":1,"114":4,"117":2,"122":4,"123":4,"127":3,"129":1,"130":22,"131":2,"137":7,"139":4,"144":5,"149":32,"150":4,"155":1,"157":24,"158":4,"166":4,"169":4,"170":1,"171":2,"174":2,"178":6,"180":4}}],["10008",{"2":{"137":1}}],["1000",{"2":{"42":1,"77":1}}],["100",{"2":{"25":1,"49":12,"68":1,"77":1,"122":3,"129":2,"149":4,"157":4,"175":2}}],["1=dense",{"2":{"39":2}}],["1394736636921116e",{"2":{"178":1}}],["139218f",{"2":{"176":1}}],["13425166475701e",{"2":{"178":1}}],["1341462100405944e",{"2":{"178":1}}],["1310727310599164e",{"2":{"178":1}}],["1312",{"2":{"25":1}}],["1339466f",{"2":{"176":1}}],["132256f",{"2":{"176":1}}],["1325",{"2":{"169":1}}],["13293",{"2":{"137":1}}],["1372411471843687e",{"2":{"178":1}}],["1374497f",{"2":{"176":1}}],["13773328",{"2":{"165":1}}],["13757975",{"2":{"165":1}}],["138088633455826",{"2":{"161":1}}],["13819042",{"2":{"93":1}}],["1367528482684385e",{"2":{"178":1}}],["13672",{"2":{"137":1}}],["136986f",{"2":{"176":1}}],["136356",{"2":{"106":1}}],["135391304264406e",{"2":{"178":1}}],["1359",{"2":{"169":1}}],["135916",{"2":{"104":2}}],["13559",{"2":{"114":1}}],["1302",{"2":{"54":1}}],["13",{"2":{"33":1,"137":7,"169":7}}],["119666590692177e",{"2":{"178":1}}],["1197418878173714e",{"2":{"178":1}}],["1197337f",{"2":{"176":1}}],["1198996f",{"2":{"176":1}}],["114579126469563e",{"2":{"178":1}}],["1145936f",{"2":{"176":1}}],["1145618706755287",{"2":{"161":1}}],["1136",{"2":{"169":1}}],["1160",{"2":{"169":1}}],["116601226021708e",{"2":{"178":1}}],["116674f",{"2":{"176":1}}],["1166",{"2":{"169":1}}],["116989",{"2":{"114":1}}],["115635345223869e",{"2":{"178":1}}],["115436f",{"2":{"176":1}}],["1159",{"2":{"169":1}}],["115322",{"2":{"106":1}}],["11826490691684e",{"2":{"178":1}}],["1185",{"2":{"169":1}}],["1181395f",{"2":{"176":1}}],["1181102",{"2":{"161":2}}],["11814",{"2":{"137":1}}],["11723579535073",{"2":{"161":1}}],["11202827",{"2":{"122":1}}],["1121564",{"2":{"87":1}}],["11013670289983736",{"2":{"177":1}}],["11027317642844461",{"2":{"177":1}}],["11023622",{"2":{"161":2}}],["110",{"2":{"89":1,"149":4}}],["11044693",{"2":{"76":1}}],["11106f",{"2":{"76":1}}],["11",{"2":{"30":1,"122":1,"123":3,"130":1,"137":7,"139":3,"150":3,"158":3,"166":3,"169":6,"178":3,"180":3}}],["1d",{"2":{"25":1,"52":1}}],["1672055460358934e",{"2":{"178":1}}],["168380830990655e",{"2":{"178":1}}],["168539f",{"2":{"176":1}}],["16876f",{"2":{"76":1}}],["1614311280284342e",{"2":{"178":1}}],["1616641f",{"2":{"176":1}}],["16118930624459",{"2":{"161":1}}],["161867im",{"2":{"106":1}}],["16241",{"2":{"149":8}}],["16240",{"2":{"149":8}}],["1669726f",{"2":{"176":1}}],["16627",{"2":{"137":1}}],["16670",{"2":{"137":1}}],["16602759",{"2":{"122":1}}],["164825726562541e",{"2":{"178":1}}],["16450",{"2":{"149":4}}],["164786",{"2":{"114":1}}],["164379",{"2":{"106":1}}],["160876",{"2":{"106":1}}],["1607",{"2":{"21":2,"55":1}}],["16",{"2":{"21":1,"45":1,"77":3,"84":1,"89":13,"90":14,"114":1,"127":2,"137":7,"162":4,"169":5,"178":10}}],["190084031605252e",{"2":{"178":1}}],["1949828438789084e",{"2":{"178":1}}],["1949973f",{"2":{"176":1}}],["199510923468868e",{"2":{"178":1}}],["19982f",{"2":{"176":1}}],["197556366128503e",{"2":{"178":1}}],["197558f",{"2":{"176":1}}],["197045",{"2":{"114":1}}],["1988",{"2":{"174":2}}],["1981",{"2":{"169":1}}],["1911",{"2":{"169":1}}],["191956",{"2":{"115":1}}],["1964",{"2":{"169":1}}],["1969227628706652",{"2":{"161":1}}],["19",{"2":{"123":1,"137":7,"139":1,"150":1,"158":1,"166":1,"169":3,"180":1}}],["195228303898123e",{"2":{"178":1}}],["195746082529355",{"2":{"161":1}}],["1953009",{"2":{"120":1,"121":1}}],["19597391412112541",{"2":{"117":1}}],["1958",{"2":{"20":1}}],["193291",{"2":{"114":1}}],["1925116818449625e",{"2":{"178":1}}],["1921016f",{"2":{"176":1}}],["192836",{"2":{"106":1}}],["1929",{"2":{"20":1}}],["155928509132557e",{"2":{"178":1}}],["155836854924752e",{"2":{"178":1}}],["155829f",{"2":{"176":1}}],["1558",{"2":{"121":1}}],["1538087757854018e",{"2":{"178":1}}],["15393295f",{"2":{"176":1}}],["1571070735788319e",{"2":{"178":1}}],["1574076f",{"2":{"176":1}}],["1577",{"2":{"169":1}}],["15701",{"2":{"149":4}}],["15700",{"2":{"149":8}}],["15707",{"2":{"137":1}}],["15813339481313e",{"2":{"178":1}}],["1586",{"2":{"169":1}}],["1582",{"2":{"169":1}}],["1513582434950056e",{"2":{"178":1}}],["1514230538371901e",{"2":{"178":1}}],["1514318f",{"2":{"176":1}}],["1510673f",{"2":{"176":1}}],["151",{"2":{"165":1}}],["151805",{"2":{"106":1}}],["150468128893434e",{"2":{"178":1}}],["1502596f",{"2":{"176":1}}],["1500",{"2":{"142":2,"170":1}}],["15096173",{"2":{"122":1}}],["1542232987953863e",{"2":{"178":1}}],["154942455829471e",{"2":{"178":1}}],["1549386f",{"2":{"176":1}}],["154",{"2":{"127":2}}],["154041",{"2":{"114":1}}],["1569201f",{"2":{"176":1}}],["156247f",{"2":{"176":1}}],["15681",{"2":{"149":4}}],["15680",{"2":{"149":4}}],["156",{"2":{"127":1}}],["15225",{"2":{"137":1}}],["152879",{"2":{"106":1}}],["15276335",{"2":{"102":1}}],["15",{"2":{"20":1,"114":4,"122":1,"123":4,"130":9,"131":1,"137":7,"139":4,"150":4,"158":4,"166":4,"169":5,"171":1,"180":4}}],["1p",{"2":{"20":1}}],["1",{"2":{"9":1,"17":3,"20":6,"21":8,"25":15,"30":1,"32":1,"33":1,"39":2,"42":15,"44":1,"45":4,"48":18,"49":13,"50":1,"51":16,"53":7,"54":4,"55":8,"56":3,"61":1,"67":4,"76":19,"77":10,"84":6,"86":1,"87":3,"89":44,"90":62,"93":3,"94":2,"95":2,"96":7,"98":4,"102":3,"103":11,"104":5,"106":3,"109":2,"114":45,"116":4,"117":5,"119":4,"120":11,"121":2,"122":8,"123":4,"126":5,"127":4,"128":1,"129":2,"130":2,"131":2,"134":11,"136":3,"137":59,"139":4,"142":5,"143":1,"145":1,"146":13,"147":1,"148":2,"149":99,"150":4,"153":4,"155":1,"156":1,"157":7,"158":4,"161":93,"162":5,"163":1,"164":2,"165":23,"166":4,"168":6,"169":68,"170":9,"171":2,"174":37,"175":7,"176":123,"177":2,"178":125,"179":5,"180":4}}],["e^2",{"2":{"175":1}}],["evolved",{"2":{"170":1}}],["evalpoly",{"2":{"161":2,"165":1}}],["eval=32",{"2":{"153":1}}],["eval",{"2":{"153":5}}],["ever",{"2":{"72":1}}],["everystep",{"2":{"149":6}}],["everystep=false",{"2":{"144":1}}],["everything",{"2":{"72":2,"109":1}}],["every",{"2":{"50":1,"67":1,"82":1,"83":1,"114":1}}],["even",{"2":{"14":1,"71":1,"72":1,"80":1,"88":1,"90":1,"114":1,"118":1,"130":1}}],["efficient",{"2":{"68":1,"69":1,"105":1,"118":2}}],["effectively",{"2":{"64":1}}],["effect",{"2":{"8":1}}],["either",{"2":{"49":6,"51":2,"174":1}}],["ess",{"2":{"169":3}}],["essentially",{"2":{"48":1,"103":1,"165":1}}],["established",{"2":{"70":1,"117":1}}],["especially",{"2":{"21":1,"88":1}}],["ecosystem",{"2":{"44":1}}],["eccv",{"2":{"21":1}}],["eps",{"2":{"136":1}}],["epsilon=1f",{"2":{"55":4}}],["epsilon",{"2":{"21":8,"55":4}}],["epyc",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["epochs",{"2":{"165":3}}],["epoch",{"2":{"42":2,"77":14,"129":2,"137":178,"146":2,"157":2,"165":11}}],["easily",{"2":{"71":1}}],["easier",{"2":{"37":1,"54":1,"170":1}}],["easy",{"2":{"48":1,"64":1,"72":1,"88":1,"96":1}}],["eachindex",{"2":{"169":1}}],["eachslice",{"2":{"135":1}}],["each",{"2":{"21":2,"25":1,"31":1,"32":4,"41":4,"48":15,"49":12,"51":6,"52":2,"53":2,"54":4,"55":2,"114":2,"169":1,"175":1}}],["edge",{"2":{"35":1,"72":1,"91":1}}],["empting",{"2":{"49":1}}],["empty",{"2":{"13":1,"14":2,"49":3,"51":6,"53":4,"54":4,"55":5,"56":1,"102":1,"122":1,"176":1}}],["embed",{"2":{"42":4,"77":8}}],["embedsize",{"2":{"31":1}}],["embeddings",{"2":{"53":2}}],["embedding",{"2":{"31":2,"47":1,"53":3,"155":1}}],["european",{"2":{"21":1}}],["equilibrium",{"2":{"72":1}}],["equivalent",{"2":{"14":1,"42":1,"54":1,"114":1}}],["equations",{"2":{"69":1,"177":1}}],["equals",{"2":{"54":1}}],["equal",{"2":{"25":1,"41":1,"49":3,"51":2,"68":1,"146":1}}],["equally",{"2":{"21":1,"61":1}}],["et",{"2":{"20":2,"25":2,"172":1}}],["etc",{"2":{"13":1,"72":1,"102":1,"105":1,"108":1,"109":1,"111":1,"117":1}}],["e",{"2":{"17":1,"21":1,"25":1,"38":1,"44":1,"45":1,"49":3,"50":2,"51":6,"55":3,"63":1,"85":2,"89":4,"90":4,"105":1,"174":4,"175":6,"176":3}}],["eltype",{"2":{"62":3,"84":1,"116":1,"120":1,"136":1}}],["elman",{"2":{"52":1}}],["eliminates",{"2":{"39":1}}],["elementwise",{"2":{"54":2,"55":5}}],["element",{"2":{"20":2,"21":1,"25":1,"41":1,"48":1,"52":1,"114":4,"119":1,"120":1,"122":1,"135":1,"138":1}}],["elements",{"2":{"14":1,"25":9,"39":1,"49":3,"51":2,"53":1,"70":1,"114":6,"135":1}}],["elseif",{"2":{"99":1,"104":1,"115":1,"174":1}}],["else",{"2":{"14":1,"17":1,"20":3,"44":1,"48":1,"50":3,"52":1,"61":1,"94":1,"95":2,"99":1,"174":3}}],["energy",{"2":{"169":2}}],["environment",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["enzyme",{"2":{"116":1,"118":1}}],["engine",{"2":{"116":1}}],["enforce",{"2":{"116":1}}],["enough",{"2":{"108":1,"120":1}}],["encountered",{"2":{"90":1}}],["encoder",{"2":{"28":1,"31":2}}],["entry",{"2":{"92":1}}],["enter",{"2":{"75":1}}],["entire",{"2":{"50":2,"52":4,"55":1,"83":1}}],["entirely",{"2":{"11":1,"49":3,"53":3,"149":1}}],["enables",{"2":{"72":1,"167":1}}],["enabled",{"2":{"40":2,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"167":1,"171":1,"180":1}}],["ensuring",{"2":{"20":1}}],["ensure",{"2":{"14":1,"25":1,"72":1,"135":1,"164":1}}],["endpoints",{"2":{"174":2}}],["end",{"2":{"17":1,"25":2,"39":4,"42":7,"48":4,"49":3,"51":2,"67":1,"68":1,"77":6,"84":3,"85":1,"86":3,"89":2,"90":4,"93":1,"94":3,"95":4,"99":1,"102":4,"103":2,"104":3,"109":3,"115":1,"117":2,"120":3,"122":2,"123":2,"126":1,"128":3,"129":3,"131":2,"132":1,"134":3,"135":4,"136":3,"137":4,"139":2,"142":1,"143":5,"144":1,"145":3,"146":3,"147":3,"150":2,"153":2,"154":5,"155":1,"156":3,"157":4,"158":2,"161":2,"164":1,"165":4,"166":2,"168":1,"169":4,"170":3,"171":2,"174":26,"175":2,"176":2,"177":2,"179":2,"180":2}}],["eg",{"2":{"14":1,"49":3,"51":2}}],["existing",{"2":{"122":1}}],["exists",{"2":{"122":1}}],["execution",{"2":{"117":1}}],["excellent",{"2":{"124":1}}],["except",{"2":{"52":1,"54":1}}],["exceptions",{"2":{"25":1}}],["exclusively",{"2":{"65":1}}],["excluding",{"2":{"38":1,"45":1,"54":1,"55":1}}],["exactly",{"2":{"56":1,"61":1,"102":1,"111":1}}],["exact",{"2":{"25":1,"103":1}}],["examples",{"0":{"107":1},"2":{"25":2,"42":1,"80":1,"107":1}}],["example",{"0":{"83":1},"1":{"84":1,"85":1,"86":1,"87":1},"2":{"9":1,"14":1,"25":1,"38":3,"39":2,"41":3,"44":1,"45":1,"48":2,"54":1,"55":3,"63":1,"67":2,"68":1,"80":1,"88":1,"93":1,"94":1,"104":1,"105":1,"108":1,"109":1,"119":1,"120":1,"176":1}}],["external",{"2":{"169":1}}],["extensively",{"2":{"72":1,"118":1}}],["extensive",{"2":{"71":1}}],["extensible",{"2":{"71":1}}],["extending",{"2":{"116":1,"135":1}}],["extend",{"2":{"13":1,"72":1}}],["extract",{"2":{"169":2,"170":1}}],["extra",{"2":{"25":1}}],["extremely",{"2":{"10":1,"21":1,"37":1,"40":1,"96":1,"97":1,"109":1}}],["express",{"2":{"169":1}}],["exposing",{"2":{"149":1}}],["exported",{"2":{"11":1,"35":1,"115":1}}],["explicit",{"2":{"69":1,"72":1,"106":2,"167":1}}],["explicitly",{"2":{"42":1}}],["expectations",{"2":{"100":1}}],["expects",{"2":{"45":1,"49":2,"51":2,"56":1,"104":1}}],["expect",{"2":{"35":1,"72":1,"167":1}}],["expected",{"2":{"10":1,"48":1,"49":2,"72":1,"90":1,"117":1}}],["experimental",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1},"2":{"10":1,"13":1,"35":5,"36":12,"37":3,"38":9,"39":3,"40":6,"41":1,"42":3,"77":1,"88":1,"89":2,"90":2,"91":1,"92":1,"93":2,"94":2,"97":1,"129":3,"137":3,"147":1,"157":3,"165":4}}],["errored",{"2":{"88":1}}],["errors",{"2":{"40":3,"91":1}}],["error",{"2":{"9":2,"38":1,"40":5,"89":3,"122":1,"169":2}}],["u0",{"2":{"175":2,"176":2,"177":1,"179":2}}],["u",{"2":{"143":5,"147":2,"175":3,"176":4,"178":1,"179":2}}],["utility",{"0":{"145":1,"156":1,"174":1}}],["utilities",{"0":{"57":1,"61":1},"1":{"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"65":1,"109":1}}],["utc",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["url",{"2":{"69":1}}],["uuid",{"2":{"67":1}}],["up",{"0":{"177":1},"2":{"61":1,"68":1,"140":1}}],["upscaling",{"2":{"56":1}}],["upscale",{"2":{"56":2}}],["upsampling",{"0":{"56":1},"2":{"56":2}}],["upsampled",{"2":{"56":1}}],["upsample",{"2":{"47":1,"56":5}}],["updating",{"0":{"62":1},"2":{"21":1,"122":1}}],["update`",{"2":{"122":1}}],["updates",{"2":{"37":1,"41":1,"55":1}}],["updated",{"2":{"20":2,"21":2,"37":3,"38":1,"40":1,"41":1,"48":6,"50":3,"52":7,"54":1,"55":1,"71":1,"72":1,"102":1,"135":1,"164":1}}],["update",{"2":{"12":1,"16":2,"20":2,"37":1,"42":1,"50":3,"52":4,"55":3,"62":1,"64":1,"76":1,"77":1,"116":1,"122":3,"146":1}}],["ulyanov",{"2":{"21":1,"55":1}}],["untrained",{"2":{"176":2,"179":1}}],["until",{"2":{"50":1}}],["uncertain",{"2":{"170":1}}],["unchanged",{"2":{"48":1}}],["unable",{"2":{"116":1}}],["unfortunately",{"2":{"73":1}}],["unfreezes",{"2":{"38":1}}],["unfreeze",{"2":{"36":1,"38":2}}],["unexpected",{"2":{"72":1}}],["unnormalized",{"2":{"55":1}}],["unreasonably",{"2":{"48":1}}],["unrolls",{"2":{"48":1}}],["unlike",{"2":{"42":1,"53":1}}],["unwraps",{"2":{"38":1}}],["uninitiated",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1}}],["univeral",{"2":{"54":1}}],["unity",{"2":{"174":1}}],["unitrange",{"2":{"116":1}}],["unit",{"2":{"52":1}}],["uniform",{"2":{"23":2,"25":6,"26":6,"49":3,"52":8,"53":3,"85":2,"102":1,"149":30,"165":2}}],["union",{"2":{"9":2,"25":2,"38":3,"55":1}}],["undef",{"2":{"117":1}}],["undefined",{"2":{"14":1,"52":1,"61":1}}],["underlying",{"2":{"143":1}}],["understand",{"2":{"135":1,"140":1}}],["understanding",{"2":{"25":2}}],["under",{"2":{"109":1}}],["undesirable",{"2":{"17":1}}],["unpack",{"2":{"14":1}}],["unsupported",{"2":{"14":1}}],["usr",{"2":{"123":2,"131":2,"139":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["usual",{"2":{"55":3}}],["usually",{"2":{"42":1,"56":1,"114":1}}],["us",{"2":{"35":1,"88":1,"89":1,"90":6,"103":2,"104":3,"109":1,"113":1,"117":1,"120":1,"121":1,"122":3,"134":1,"148":1,"176":1,"177":1,"179":2}}],["using",{"0":{"67":1,"87":1,"140":1,"147":1,"159":1},"1":{"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1},"2":{"9":1,"10":1,"13":2,"21":2,"25":2,"27":1,"33":2,"37":1,"38":1,"39":1,"42":1,"44":3,"45":4,"48":12,"52":6,"53":2,"54":2,"55":1,"59":2,"63":1,"67":1,"70":1,"71":1,"72":1,"76":1,"77":2,"89":1,"97":2,"99":2,"100":1,"104":2,"108":2,"111":1,"112":1,"113":1,"114":2,"117":1,"120":1,"121":1,"122":2,"123":1,"124":1,"130":1,"131":1,"132":2,"134":1,"138":1,"139":1,"149":2,"150":1,"158":1,"160":1,"162":1,"166":1,"167":1,"169":1,"170":1,"171":1,"173":1,"175":1,"176":1,"180":1}}],["usage",{"2":{"9":3,"38":1,"80":1}}],["uses",{"2":{"21":1,"39":1,"44":1,"55":1,"62":1,"63":1,"117":1,"174":2,"175":1,"176":1,"178":1}}],["userbase",{"2":{"44":1}}],["user",{"2":{"13":2,"14":2,"48":1,"63":1,"70":1,"82":1,"109":1,"111":2}}],["users",{"2":{"0":1,"3":1,"6":1,"11":1,"13":2,"35":1,"38":1,"63":1,"70":1,"72":1,"116":1,"140":2,"149":1}}],["useful",{"2":{"10":1,"25":3,"40":2,"42":1,"69":1,"88":1,"89":1}}],["use",{"0":{"72":1,"73":1,"112":1},"2":{"6":1,"20":1,"25":1,"31":2,"35":1,"38":1,"40":1,"49":9,"52":8,"53":11,"55":3,"59":2,"65":2,"69":1,"72":1,"76":1,"77":1,"80":2,"88":1,"89":1,"93":1,"98":1,"107":1,"112":1,"113":1,"114":1,"117":1,"118":1,"119":1,"120":1,"122":4,"124":2,"126":1,"134":2,"135":3,"136":2,"140":1,"142":1,"144":2,"146":2,"163":1,"164":1,"165":1,"167":1,"168":1,"169":5,"170":1,"174":1,"176":5}}],["used",{"0":{"26":1},"2":{"0":1,"3":1,"9":2,"10":1,"14":2,"20":3,"21":2,"25":1,"31":2,"37":2,"40":2,"41":2,"42":5,"44":1,"45":1,"50":3,"53":1,"54":1,"55":6,"56":1,"97":1,"98":2,"107":1,"114":1,"122":1,"147":1,"172":1}}],["w=gv∥v∥weight",{"2":{"55":1}}],["w=randn",{"2":{"42":1}}],["w=rand",{"2":{"42":2}}],["w3",{"2":{"42":1,"77":3}}],["w3=dense",{"2":{"42":1,"77":1}}],["w2",{"2":{"42":1,"77":3}}],["w2=",{"2":{"42":1,"77":1}}],["w1",{"2":{"42":1,"77":3}}],["w1=dense",{"2":{"42":1,"77":1}}],["w",{"2":{"42":6,"51":4,"53":1,"56":4,"77":4,"104":2,"114":1,"122":5,"126":1,"142":1,"154":4}}],["write",{"2":{"114":2,"116":1,"120":1,"122":1}}],["writing",{"0":{"86":1},"2":{"87":1}}],["written",{"2":{"44":1}}],["wrote",{"0":{"70":1},"1":{"71":1,"72":1,"73":1}}],["wrap",{"2":{"88":1}}],["wraps",{"2":{"45":1,"52":2,"54":1}}],["wrappedlayer",{"2":{"50":1}}],["wrappedfunction",{"2":{"47":1,"48":1,"49":1,"54":2,"56":1,"90":3,"149":6,"176":1}}],["wrapped",{"2":{"40":1,"48":8,"54":2}}],["wrapper",{"2":{"40":1,"48":1,"63":1,"165":1}}],["wrappers",{"0":{"26":1}}],["wrt",{"2":{"37":2,"61":1,"68":1}}],["wu",{"2":{"21":1}}],["wide",{"2":{"118":1}}],["width",{"2":{"31":1,"32":1,"49":2}}],["wio",{"2":{"52":1}}],["wio×x+who×hprev+bo",{"2":{"52":1}}],["wig",{"2":{"52":1}}],["wig×x+whg×hprev+bg",{"2":{"52":1}}],["wif",{"2":{"52":1}}],["wif×x+whf×hprev+bf",{"2":{"52":1}}],["wii",{"2":{"52":1}}],["wii×x+whi×hprev+bi",{"2":{"52":1}}],["wiz",{"2":{"52":1}}],["wiz×x+whz×hprev+bhz",{"2":{"52":1}}],["wir",{"2":{"52":1}}],["wir×x+whr×hprev+bhr",{"2":{"52":1}}],["win",{"2":{"52":1}}],["win×x+bin+r⋅",{"2":{"52":1}}],["window",{"2":{"51":12}}],["will",{"2":{"17":1,"21":2,"25":3,"35":2,"38":1,"40":2,"41":2,"42":2,"44":4,"48":5,"49":3,"50":2,"53":3,"55":6,"59":1,"67":2,"68":2,"77":1,"83":1,"88":1,"89":1,"90":2,"92":1,"97":1,"100":1,"103":1,"107":1,"108":1,"109":2,"114":1,"115":1,"116":1,"117":2,"118":4,"119":1,"120":2,"122":3,"124":2,"130":2,"132":2,"134":3,"135":6,"136":1,"146":1,"159":1,"163":1,"164":1,"165":2,"167":2,"169":4,"176":1}}],["withgradient",{"2":{"42":1}}],["within",{"2":{"42":1}}],["without",{"2":{"11":1,"48":1,"64":1,"72":2,"100":1,"116":1,"135":1}}],["with",{"0":{"124":1},"1":{"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1},"2":{"8":1,"9":1,"11":1,"16":1,"17":1,"20":2,"21":1,"25":6,"27":1,"31":1,"34":1,"38":5,"39":1,"40":3,"41":1,"42":1,"44":1,"48":14,"49":12,"50":6,"51":6,"52":2,"53":11,"54":4,"55":7,"56":6,"61":1,"62":3,"67":2,"68":1,"70":1,"72":4,"77":1,"87":2,"88":3,"89":1,"90":1,"98":2,"100":1,"102":1,"103":1,"104":6,"106":2,"107":2,"108":1,"113":1,"114":5,"115":2,"116":1,"117":2,"118":1,"120":2,"122":4,"126":1,"128":1,"129":1,"132":1,"134":1,"136":1,"142":1,"143":2,"144":1,"145":1,"153":1,"155":1,"156":1,"161":1,"164":1,"167":2,"168":1,"169":6,"170":2,"174":5,"176":2,"177":2}}],["word",{"2":{"53":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["words",{"2":{"49":2}}],["working",{"2":{"40":1,"98":1,"107":1,"168":1}}],["work",{"2":{"10":1,"38":1,"54":1,"56":1,"69":1,"82":1,"91":1,"100":1,"109":1,"114":2,"119":1}}],["works",{"2":{"9":1,"21":1,"40":1,"44":1,"56":2,"72":1,"87":1,"102":2,"104":1,"114":1}}],["wondered",{"2":{"72":1}}],["won",{"2":{"14":1,"83":1,"135":1}}],["would",{"2":{"13":1,"14":1,"49":4,"54":3,"70":1,"89":1,"94":1,"109":1}}],["what",{"2":{"89":1,"90":1,"102":1,"104":1,"111":1,"114":2,"120":1}}],["whatever",{"2":{"54":1}}],["why",{"0":{"70":1,"72":1,"73":1},"1":{"71":1,"72":1,"73":1},"2":{"100":1,"102":1}}],["whole",{"2":{"55":2}}],["whose",{"2":{"53":1,"55":1}}],["who",{"2":{"52":1}}],["whg",{"2":{"52":1}}],["whf",{"2":{"52":1}}],["whn",{"2":{"52":1}}],["whn×hprev+bhn",{"2":{"52":1}}],["whz",{"2":{"52":1}}],["whr",{"2":{"52":1}}],["whcn",{"2":{"49":2,"50":2,"55":3}}],["whi",{"2":{"52":1}}],["while",{"2":{"45":1,"48":1,"56":1,"95":1,"102":1}}],["which",{"0":{"82":1},"2":{"9":1,"10":1,"20":1,"21":3,"25":1,"35":1,"37":1,"38":13,"41":1,"42":3,"48":4,"51":2,"54":3,"55":4,"63":1,"68":2,"72":2,"73":1,"80":1,"88":2,"102":1,"103":2,"104":1,"111":1,"114":2,"116":1,"122":1,"143":1,"147":1,"165":1,"167":1,"169":1,"172":1,"175":1,"176":1}}],["whether",{"2":{"40":2,"50":1,"55":1,"68":1,"134":1}}],["where",{"2":{"25":7,"31":1,"40":1,"49":5,"51":4,"53":1,"54":3,"55":3,"56":1,"63":1,"90":2,"109":1,"119":1,"135":1,"153":1,"154":1,"169":2,"170":2,"174":3}}],["when",{"2":{"10":1,"25":2,"42":1,"45":2,"54":1,"63":1,"94":1,"102":2,"118":2,"120":1,"130":1,"135":1,"174":1,"177":1}}],["waveform",{"2":{"174":5,"175":7,"176":9,"177":6,"179":12}}],["waveforms",{"0":{"172":1},"1":{"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1}}],["wall",{"2":{"169":1}}],["warntype",{"2":{"149":2}}],["warning",{"2":{"9":2,"10":1,"14":1,"17":1,"35":1,"38":1,"40":1,"44":4,"45":2,"49":1,"52":1,"53":1,"55":2,"59":3,"60":1,"63":1,"65":1,"92":1,"98":1,"100":1,"104":1,"122":2,"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["warmup",{"2":{"146":1,"177":1}}],["warde",{"2":{"54":1}}],["wait",{"2":{"35":1}}],["way",{"2":{"20":2,"44":3,"45":2,"48":1,"64":1,"88":1,"169":1}}],["wants",{"2":{"111":1}}],["wanted",{"2":{"72":1}}],["want",{"2":{"14":2,"83":1,"94":1,"100":1,"114":1,"122":1}}],["wasteful",{"2":{"102":1}}],["was",{"2":{"9":1,"41":1,"44":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["weird",{"2":{"102":1,"104":2}}],["weightih×x+weighthh×hprev+bias",{"2":{"52":1}}],["weightinitializers",{"0":{"22":1},"1":{"23":1,"24":1,"25":1,"26":1},"2":{"10":1,"23":32,"25":8,"26":24,"60":1,"106":2,"149":60,"165":4,"176":7}}],["weights",{"0":{"106":1},"1":{"107":1},"2":{"52":4,"106":10,"107":5,"169":2,"170":3}}],["weight=truncated",{"2":{"176":3}}],["weight=l",{"2":{"102":1}}],["weight=lux",{"2":{"102":1}}],["weight=ones32",{"2":{"53":1}}],["weight=randn32",{"2":{"53":1}}],["weight=",{"2":{"52":1}}],["weight=glorot",{"2":{"49":3,"52":1,"53":3}}],["weight=ps",{"2":{"42":1}}],["weightnorm",{"2":{"47":1,"55":4,"72":1,"102":1}}],["weight",{"0":{"60":1},"2":{"22":1,"25":3,"38":2,"39":4,"49":9,"52":13,"53":24,"55":5,"76":6,"85":2,"90":4,"93":4,"94":2,"95":4,"102":6,"104":4,"106":1,"122":3,"149":20,"154":8,"155":2,"165":8,"169":1,"176":3,"178":3}}],["well",{"2":{"70":1,"113":1}}],["weak",{"2":{"65":1}}],["were",{"2":{"17":1,"55":1}}],["we",{"0":{"70":1,"112":1},"1":{"71":1,"72":1,"73":1},"2":{"9":4,"13":1,"14":4,"17":1,"21":1,"35":1,"37":1,"39":1,"42":2,"44":1,"48":3,"65":1,"67":1,"72":2,"76":2,"77":2,"82":1,"83":3,"87":1,"89":3,"90":6,"91":2,"92":1,"93":1,"95":1,"96":1,"102":5,"103":4,"104":4,"105":1,"108":2,"109":2,"112":1,"113":1,"114":11,"116":4,"117":9,"118":6,"120":4,"122":4,"124":2,"127":2,"130":3,"132":1,"134":3,"135":11,"136":1,"138":3,"140":1,"143":1,"146":2,"148":1,"149":2,"159":1,"163":1,"164":2,"165":2,"167":3,"168":1,"169":8,"170":7,"174":3,"176":9,"177":1}}],[">",{"2":{"9":2,"10":2,"14":2,"25":8,"26":24,"31":1,"42":1,"52":1,"76":1,"84":1,"90":2,"108":2,"109":4,"136":1,"146":2,"161":1,"165":1,"174":1,"178":1}}],["nparameters",{"2":{"169":3}}],["npatches",{"2":{"31":1}}],["nn",{"2":{"169":12,"170":11,"176":14,"177":1,"179":9}}],["nnlib",{"2":{"49":4,"53":3,"55":4,"56":6,"108":2,"109":2,"149":24,"165":1}}],["nvml",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["nvidia",{"2":{"106":1,"123":4,"131":2,"139":4,"150":4,"158":4,"166":4,"171":2,"180":4}}],["n=tanh⁡",{"2":{"52":1}}],["n+2",{"2":{"51":2}}],["ntuple",{"2":{"48":1,"49":3,"51":4,"55":2,"84":1,"149":6}}],["nlayers",{"2":{"42":2,"77":2}}],["n",{"2":{"32":1,"42":4,"48":23,"49":42,"51":32,"53":2,"54":9,"55":11,"56":8,"61":2,"77":4,"122":2,"126":3,"129":1,"137":2,"142":3,"143":5,"146":1,"147":5,"153":12,"157":2,"165":1,"168":2,"169":3,"170":2,"177":1}}],["nclasses",{"2":{"31":2,"32":2}}],["nabla",{"2":{"119":1}}],["naming",{"2":{"48":9,"54":2}}],["namefreezing",{"2":{"94":1}}],["name=",{"2":{"42":1}}],["name=nothing",{"2":{"42":1,"48":8}}],["names",{"2":{"38":1,"42":1,"55":1}}],["namels",{"2":{"31":2}}],["named",{"2":{"21":2,"38":1,"104":1,"144":2,"146":1,"169":1}}],["namedtuples",{"2":{"104":1}}],["namedtuple",{"2":{"13":2,"14":1,"16":3,"38":4,"39":1,"42":1,"48":10,"49":3,"51":6,"52":1,"53":4,"54":6,"55":5,"56":1,"61":1,"77":1,"82":3,"84":4,"85":8,"86":3,"89":3,"90":6,"93":3,"96":4,"102":4,"103":3,"105":1,"135":2,"149":80,"154":2,"165":12,"169":1,"176":19}}],["name",{"0":{"94":1},"2":{"12":1,"14":5,"30":2,"33":3,"38":1,"39":8,"42":3,"48":10,"54":1,"78":1,"84":5,"93":1,"94":5,"95":6,"98":1,"104":1,"122":1,"157":4}}],["nans",{"0":{"90":1},"2":{"40":3,"55":1,"68":2,"90":7,"91":1}}],["nan",{"2":{"40":4,"89":1,"90":29}}],["native",{"0":{"30":1},"2":{"112":1}}],["numer",{"2":{"175":3,"176":3}}],["numeric",{"2":{"25":2}}],["numerically",{"2":{"136":1}}],["numerical",{"2":{"21":4,"55":4,"169":1}}],["num",{"2":{"32":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"170":2,"171":1,"180":1}}],["number=0",{"2":{"25":2}}],["number=1",{"2":{"25":2}}],["numbers",{"2":{"25":6,"26":12,"106":1,"114":3}}],["number",{"2":{"15":1,"16":1,"20":4,"21":1,"25":8,"31":9,"32":5,"37":1,"42":2,"48":3,"49":15,"50":3,"51":2,"53":7,"54":2,"55":3,"56":3,"102":1,"113":1,"114":1,"117":2,"118":1,"146":1,"161":1,"168":1,"169":4}}],["nitish",{"2":{"20":1}}],["ndims",{"2":{"17":1,"49":7,"51":6,"54":3,"55":3,"56":2,"84":2}}],["negative",{"2":{"174":1}}],["net",{"2":{"169":1,"176":1,"179":2}}],["network",{"0":{"162":1,"167":1,"169":1,"176":1,"177":1,"178":1},"1":{"168":1,"169":1,"170":1,"171":1},"2":{"21":1,"25":1,"70":2,"72":1,"77":1,"83":1,"113":1,"132":2,"154":5,"155":3,"162":1,"168":1,"169":6,"170":4,"176":6}}],["networks",{"2":{"20":3,"25":3,"45":1,"54":1,"69":1,"72":3,"124":1,"169":1}}],["nepochs",{"2":{"129":3,"146":3,"157":3}}],["next",{"2":{"102":1,"169":1,"170":1,"174":1,"176":1,"177":1}}],["nearest",{"2":{"56":7}}],["necessary",{"2":{"51":2,"102":1}}],["never",{"2":{"44":1,"54":1,"176":1}}],["nested",{"2":{"41":2}}],["neuralode",{"2":{"143":7,"146":4,"149":5}}],["neural",{"0":{"140":1,"143":1,"144":1,"148":1,"162":1,"167":1,"169":1,"172":1,"176":1,"177":1,"178":1},"1":{"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"168":1,"169":1,"170":1,"171":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"20":4,"25":4,"45":1,"63":1,"69":2,"70":2,"72":4,"77":1,"83":3,"113":1,"124":1,"132":2,"140":2,"144":1,"162":1,"168":1,"169":7,"170":2,"176":7,"177":1,"179":2}}],["needed",{"2":{"106":2,"109":1}}],["need",{"2":{"11":1,"14":1,"33":1,"35":1,"38":1,"39":1,"41":1,"42":1,"44":1,"76":1,"82":1,"89":1,"102":3,"103":2,"107":1,"109":1,"114":1,"120":1,"127":2,"134":1,"135":1,"143":1,"146":1,"155":1,"164":1,"174":1,"176":1}}],["needs",{"2":{"10":1,"49":2,"50":1,"84":1}}],["newtonian",{"2":{"174":2,"176":1,"178":1}}],["new",{"0":{"148":1},"2":{"8":1,"39":2,"41":5,"49":3,"50":1,"52":4,"53":3,"54":1,"55":4,"82":1,"97":1,"100":1,"102":1,"103":1,"120":1,"122":3,"154":2,"169":3}}],["nom",{"2":{"169":1}}],["noisy",{"2":{"134":2}}],["noise",{"2":{"122":1}}],["now",{"2":{"55":1,"89":2,"90":2,"102":1,"103":1,"109":1,"113":1,"118":1,"122":1,"127":1,"130":1,"135":2,"136":1,"165":1,"169":2,"170":1,"174":1,"176":2,"177":1,"179":1}}],["nooplayers",{"2":{"48":1}}],["nooplayer",{"2":{"47":1,"48":4,"50":3,"54":1}}],["norm",{"2":{"32":1,"55":1}}],["normal",{"2":{"23":3,"25":12,"26":6,"106":6,"169":1,"176":6}}],["normalises",{"2":{"21":2,"55":2}}],["normalize",{"2":{"55":2}}],["normalized",{"2":{"21":8,"34":1,"55":7}}],["normalization",{"0":{"21":1,"55":1},"2":{"21":12,"25":1,"31":1,"32":2,"55":11}}],["normalizing",{"2":{"20":1}}],["nonlinear",{"2":{"25":1}}],["non",{"0":{"32":1,"87":1},"2":{"25":2,"35":1,"37":1,"40":1,"53":1,"88":1,"109":2,"143":2,"174":1}}],["none",{"2":{"9":1,"35":1,"38":1,"40":1,"90":1}}],["notice",{"2":{"102":1,"103":1,"146":1}}],["notangent",{"2":{"90":1}}],["not",{"0":{"73":1},"2":{"10":2,"11":1,"14":1,"17":1,"20":1,"21":6,"25":2,"40":1,"41":1,"42":1,"45":1,"48":1,"52":8,"53":1,"54":1,"55":1,"56":1,"61":1,"63":4,"65":1,"68":3,"73":1,"76":1,"89":1,"90":1,"98":1,"107":1,"109":3,"122":1,"123":1,"130":2,"139":1,"146":2,"148":1,"149":2,"150":1,"158":1,"162":1,"166":1,"169":1,"170":1,"174":1,"180":1}}],["notes",{"2":{"120":1,"140":1}}],["note",{"2":{"9":1,"25":1,"38":1,"42":1,"54":1,"69":1,"89":1,"102":1,"103":1,"106":1,"112":1,"116":1,"119":1,"138":1,"149":1}}],["nothing",{"2":{"9":4,"14":1,"21":10,"38":8,"48":3,"50":1,"52":1,"54":3,"55":3,"63":1,"76":1,"77":1,"90":1,"122":3,"146":2,"149":16,"165":1,"176":10}}],["no",{"2":{"9":2,"35":1,"38":2,"45":1,"48":1,"54":1,"67":1,"72":1,"73":1,"85":1,"89":1,"90":1,"98":2,"99":1,"100":1}}],["nbsp",{"2":{"2":1,"5":1,"8":1,"9":2,"10":4,"13":2,"14":7,"15":2,"16":5,"17":2,"20":2,"21":4,"25":8,"26":24,"31":5,"32":6,"37":3,"38":3,"39":2,"40":2,"41":1,"42":1,"44":3,"45":3,"48":6,"49":3,"50":3,"51":6,"52":5,"53":4,"54":6,"55":5,"56":2,"59":2,"61":3,"62":3,"63":1,"64":1,"67":1,"68":1}}],["os",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["own",{"2":{"104":1,"114":1}}],["old",{"2":{"97":2}}],["oh",{"2":{"90":1}}],["occurs",{"2":{"90":1}}],["occurred",{"2":{"90":3}}],["occurances",{"2":{"16":3}}],["our",{"2":{"72":1,"76":1,"90":3,"111":1,"113":1,"114":1,"116":1,"117":1,"119":1,"122":1,"134":1,"135":1,"164":1,"165":1,"168":1,"169":3,"170":4}}],["out",{"2":{"20":2,"25":2,"35":1,"42":8,"48":1,"49":11,"50":2,"51":10,"52":9,"53":19,"59":1,"60":1,"77":6,"88":1,"90":1,"102":8,"105":1,"120":1,"135":3,"146":1,"167":1}}],["outputs",{"2":{"17":1,"40":1,"48":2,"52":3,"54":2,"63":1,"71":1,"117":1,"119":1,"176":1}}],["outputsize",{"2":{"12":1,"17":3}}],["output",{"2":{"17":2,"20":3,"25":6,"31":1,"32":6,"38":1,"40":1,"42":2,"48":7,"49":9,"51":14,"52":12,"53":7,"54":3,"55":1,"56":3,"63":1,"77":1,"89":4,"90":14,"102":1,"105":2,"117":1,"135":1,"143":1,"169":2}}],["odefunction",{"2":{"143":1,"147":1}}],["odeproblem",{"2":{"143":1,"147":1,"175":1,"176":1,"179":1}}],["odesolution",{"2":{"143":1}}],["odes",{"0":{"140":1},"1":{"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1},"2":{"72":1,"83":1,"140":2,"175":1,"176":1}}],["ode",{"0":{"143":1,"144":1,"148":1,"172":1},"1":{"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"63":1,"83":1,"143":1,"144":1,"175":3,"176":6,"177":1,"179":2}}],["odd",{"2":{"25":1}}],["o=σ",{"2":{"52":1}}],["oi=",{"2":{"49":2,"51":2}}],["o",{"2":{"49":6,"51":4}}],["observe",{"2":{"169":1}}],["observations",{"2":{"49":2}}],["obj",{"2":{"103":2,"104":1}}],["objects",{"2":{"99":1}}],["objective",{"2":{"37":6,"177":1}}],["object",{"2":{"9":1,"37":2,"98":3}}],["obviously",{"2":{"88":1}}],["open",{"2":{"91":1}}],["operators",{"2":{"54":1}}],["operation",{"2":{"56":1,"118":1}}],["operations",{"2":{"45":1,"115":1}}],["operating",{"2":{"52":1}}],["operate",{"2":{"52":1,"109":1}}],["optprob",{"2":{"178":2}}],["optf",{"2":{"178":2}}],["opt",{"2":{"67":5,"76":3,"77":2,"122":5,"146":5,"165":1}}],["option",{"2":{"56":2}}],["optional",{"2":{"25":1,"48":5,"63":1,"76":1,"77":1,"100":1,"107":1}}],["optionally",{"2":{"13":1,"25":1,"55":1,"102":1,"107":1}}],["optim",{"2":{"42":2}}],["optimiser",{"0":{"136":1},"2":{"122":1}}],["optimisers",{"2":{"38":1,"42":3,"44":2,"76":6,"77":3,"109":2,"112":1,"122":5,"125":1,"132":1,"133":1,"141":1,"146":2,"152":1,"160":1,"163":1,"165":8}}],["optimizers",{"2":{"178":1}}],["optimizer",{"0":{"163":1},"2":{"37":2,"165":1}}],["optimized",{"2":{"21":3,"48":1}}],["optimizationproblem",{"2":{"178":1}}],["optimizationfunction",{"2":{"178":1}}],["optimizationoptimjl",{"2":{"173":1}}],["optimizations=true",{"2":{"89":3,"90":2,"93":1}}],["optimizations",{"2":{"48":8}}],["optimization",{"2":{"25":1,"48":1,"76":1,"173":1,"178":4}}],["op",{"2":{"21":2,"61":3,"67":1}}],["other",{"2":{"14":1,"21":2,"25":1,"48":1,"49":2,"54":1,"100":1,"102":1,"103":1,"114":1,"118":1,"138":1}}],["otherwise",{"2":{"8":1,"9":1,"53":1}}],["orbit₂",{"2":{"174":1}}],["orbit₁",{"2":{"174":1}}],["orbits",{"2":{"174":1}}],["orbit2",{"2":{"174":5}}],["orbit2tensor",{"2":{"174":2}}],["orbit1",{"2":{"174":5}}],["orbit",{"2":{"174":17}}],["orange",{"2":{"161":1,"165":1}}],["ordinarydiffeq",{"2":{"141":1,"143":1,"149":18,"173":1,"175":1}}],["ordering",{"2":{"52":3}}],["order",{"2":{"9":1,"38":1,"49":2,"174":2}}],["orcjit",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["originates",{"2":{"40":1}}],["originally",{"2":{"172":1}}],["original",{"2":{"25":1,"38":1,"41":1,"44":1,"89":1,"116":2,"120":1}}],["org",{"2":{"25":1,"54":1,"69":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"174":2,"180":1}}],["orthogonal",{"2":{"23":1,"25":6}}],["or",{"2":{"9":3,"14":1,"21":1,"25":2,"40":2,"44":1,"45":1,"48":6,"49":9,"51":4,"52":2,"53":4,"56":3,"61":1,"67":1,"68":1,"72":2,"75":1,"80":2,"90":2,"102":2,"103":1,"107":1,"109":1,"111":1,"114":4,"115":1,"122":1,"134":1,"174":1}}],["overcome",{"2":{"44":1}}],["override",{"2":{"44":1}}],["overfitting",{"2":{"20":2}}],["over",{"0":{"39":1,"72":1},"2":{"9":1,"39":1,"40":1,"52":1,"54":1,"55":3,"63":1,"92":1,"132":1,"165":1,"177":1,"179":1}}],["once",{"2":{"52":2,"90":1,"102":1,"115":1,"116":1,"118":1}}],["only",{"2":{"9":1,"14":1,"40":2,"48":2,"50":1,"52":9,"53":1,"77":1,"95":1,"104":1,"106":1,"119":2,"121":1,"142":1}}],["on",{"0":{"81":1,"151":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1},"2":{"9":2,"10":2,"11":2,"14":2,"20":2,"21":3,"25":11,"35":1,"38":1,"39":1,"42":1,"45":1,"48":2,"50":2,"51":2,"52":2,"59":1,"60":1,"63":1,"67":1,"69":1,"72":1,"76":1,"80":2,"82":2,"86":1,"91":1,"100":2,"102":2,"105":1,"106":1,"109":4,"113":1,"114":1,"115":1,"117":3,"120":2,"123":1,"130":2,"131":1,"139":1,"146":2,"150":1,"158":1,"159":1,"166":1,"169":1,"171":1,"180":1}}],["one2two",{"2":{"174":3}}],["onecold",{"2":{"128":2,"145":2,"156":2}}],["onehotbatch",{"2":{"126":1,"142":1,"153":2}}],["onehotarrays",{"2":{"125":1,"141":1,"152":1}}],["onehotarray",{"2":{"53":1}}],["onesc64",{"2":{"23":1,"26":1}}],["onesc32",{"2":{"23":1,"26":1}}],["onesc16",{"2":{"23":1,"26":1}}],["ones64",{"2":{"23":1,"26":1}}],["ones32",{"2":{"23":1,"26":1,"52":1}}],["ones16",{"2":{"23":1,"26":1}}],["ones",{"2":{"14":1,"26":6,"42":1,"84":1,"100":1,"114":2,"120":1,"149":1,"168":1,"169":1}}],["one",{"2":{"8":1,"48":3,"52":1,"55":2,"56":1,"62":1,"76":1,"77":1,"107":1,"114":1,"122":1,"146":2,"169":1,"174":4}}],["official",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"167":1,"171":1,"180":1}}],["officially",{"2":{"100":1}}],["offending",{"2":{"90":9}}],["ofcourse",{"2":{"89":1}}],["often",{"2":{"53":1,"83":1,"105":1,"114":2,"169":1}}],["of",{"0":{"93":1,"95":1,"96":1},"2":{"8":1,"10":3,"11":1,"13":1,"14":16,"15":3,"16":6,"17":4,"20":6,"21":8,"25":31,"26":36,"31":7,"32":11,"35":2,"37":6,"38":7,"39":10,"40":3,"41":9,"42":8,"44":7,"45":3,"48":37,"49":49,"50":3,"51":28,"52":30,"53":25,"54":21,"55":29,"56":11,"61":1,"62":4,"63":5,"65":1,"67":1,"68":3,"69":3,"72":4,"73":1,"77":2,"83":2,"87":1,"89":1,"90":5,"93":2,"94":1,"95":3,"96":1,"100":4,"102":3,"103":3,"104":1,"105":3,"109":1,"114":9,"115":1,"116":1,"118":4,"120":2,"122":5,"130":1,"132":1,"134":1,"135":3,"136":1,"138":1,"140":1,"143":3,"146":1,"147":1,"148":1,"149":1,"167":1,"168":2,"169":6,"170":3,"174":5,"175":2,"176":3}}],["=ϕwhere",{"2":{"175":1,"176":1}}],["=χu",{"2":{"175":1,"176":1}}],["=∫θp",{"2":{"170":1}}],["=wx+b",{"2":{"122":1}}],["=x",{"2":{"119":1}}],["=12xtx",{"2":{"119":1}}],["=>",{"2":{"38":1,"39":6,"41":4,"42":3,"45":5,"49":3,"52":4,"53":4,"55":6,"67":1,"76":3,"77":5,"84":4,"89":17,"90":14,"108":4,"122":1,"127":10,"135":2,"144":5,"155":1,"162":4,"169":3,"176":3}}],["=0",{"2":{"25":2}}],["=nothing",{"2":{"9":1,"55":1}}],["==3",{"2":{"174":1}}],["==",{"2":{"8":1,"20":1,"25":3,"49":16,"51":10,"53":3,"56":2,"63":1,"77":1,"84":1,"94":1,"95":2,"104":2,"105":1,"122":2,"128":1,"136":1,"145":1,"156":1,"157":2,"165":2,"169":1,"174":5}}],["=",{"2":{"8":2,"9":1,"20":2,"25":16,"31":4,"33":1,"34":2,"38":3,"39":10,"41":3,"42":21,"44":4,"45":5,"48":28,"49":7,"50":6,"51":6,"52":2,"53":11,"54":3,"55":6,"56":3,"63":1,"64":1,"68":1,"69":13,"76":31,"77":25,"84":11,"85":3,"86":3,"87":2,"89":25,"90":49,"93":29,"94":1,"96":22,"98":4,"99":7,"102":8,"103":9,"104":5,"106":9,"107":6,"108":7,"109":12,"113":1,"114":8,"115":2,"116":3,"117":3,"119":3,"120":11,"121":4,"122":21,"123":9,"126":7,"127":11,"128":6,"129":9,"131":9,"134":6,"135":6,"136":5,"137":15,"138":1,"139":9,"142":7,"143":4,"144":5,"145":7,"146":18,"147":3,"149":95,"150":9,"153":4,"154":6,"155":3,"156":9,"157":20,"158":9,"161":8,"162":3,"163":1,"164":2,"165":28,"166":9,"168":21,"169":19,"170":19,"171":9,"174":55,"175":20,"176":38,"177":4,"178":14,"179":13,"180":9}}],["p=res",{"2":{"179":1}}],["p=θ",{"2":{"177":1}}],["p=params",{"2":{"176":1}}],["p^",{"2":{"175":1,"176":1}}],["p^2",{"2":{"175":1}}],["pcie",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["pf",{"2":{"120":2}}],["physics",{"2":{"176":1}}],["philosophies",{"2":{"109":1}}],["phase",{"2":{"55":2}}],["pb",{"2":{"76":2,"77":2,"121":2,"122":4}}],["pkg",{"2":{"75":2,"76":1,"78":2}}],["python",{"2":{"73":1}}],["pytorch",{"2":{"49":1,"72":1,"73":1,"113":1}}],["plot",{"2":{"165":1,"168":3,"170":9,"175":1,"176":1,"179":1}}],["plugin",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["plus",{"2":{"76":1,"77":1,"84":1,"89":2,"90":2,"127":1,"162":1}}],["platform",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["place",{"2":{"97":1}}],["planes",{"2":{"31":3}}],["please",{"2":{"55":1,"69":2,"80":1,"91":1,"135":1}}],["peel",{"2":{"135":1}}],["peel`",{"2":{"135":1}}],["people",{"2":{"102":1}}],["pesky",{"2":{"90":1}}],["penultimate",{"2":{"52":1}}],["perspective",{"2":{"174":1}}],["perceptron",{"2":{"159":1}}],["per",{"2":{"55":4,"169":2}}],["periodic",{"2":{"49":1}}],["permutes",{"2":{"32":1}}],["perfect",{"2":{"25":1}}],["performing",{"2":{"51":2}}],["performs",{"2":{"48":1,"98":1}}],["performed",{"2":{"45":2,"169":1}}],["performance",{"2":{"21":2,"25":2,"40":1,"59":1,"97":2}}],["perform",{"2":{"14":1,"49":1,"109":1,"169":1,"174":1}}],["pin",{"2":{"88":2}}],["pipeline",{"2":{"87":1}}],["pipelines",{"2":{"37":1}}],["pixel",{"2":{"56":3}}],["pixels",{"2":{"51":2}}],["pixelshuffle",{"2":{"47":1,"56":2}}],["push",{"2":{"177":1}}],["pushforward",{"2":{"120":7}}],["purpose",{"2":{"118":1}}],["purposes",{"2":{"104":1,"142":1}}],["pure",{"2":{"14":1,"70":1,"71":1,"72":1,"116":1}}],["pull",{"2":{"80":1}}],["pullback",{"2":{"76":2,"77":1,"90":2,"121":4,"122":2,"146":2}}],["put",{"2":{"77":1}}],["publisher",{"2":{"69":1}}],["public",{"0":{"32":1}}],["pmlr",{"2":{"21":1}}],["p",{"2":{"20":8,"44":1,"50":12,"76":2,"77":2,"143":2,"146":4,"147":2,"170":2,"174":3,"175":6,"176":2,"178":1}}],["pseudorandom",{"2":{"117":1}}],["pseudo",{"2":{"50":3,"113":1}}],["ps",{"2":{"14":5,"38":2,"39":19,"41":9,"42":14,"44":4,"45":2,"48":2,"54":1,"63":5,"76":6,"77":4,"82":3,"84":2,"85":2,"86":6,"87":2,"89":5,"90":12,"93":9,"94":7,"95":6,"96":2,"102":7,"103":7,"104":10,"108":5,"109":7,"122":11,"128":4,"135":4,"136":2,"137":1,"138":3,"143":2,"144":5,"145":4,"146":9,"147":3,"149":10,"154":8,"156":4,"164":2,"169":10,"170":1,"176":2}}],["power",{"2":{"170":1}}],["powerful",{"2":{"114":1}}],["polynomial",{"0":{"159":1},"1":{"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1},"2":{"159":1,"161":1}}],["pooling",{"0":{"51":1},"2":{"51":14}}],["populated",{"2":{"135":2}}],["populate",{"2":{"40":1}}],["points",{"2":{"109":1,"122":1,"161":1,"168":4,"169":1,"170":1}}],["point",{"0":{"62":1},"2":{"39":1,"62":3,"88":2,"92":1,"97":1,"114":1,"175":1,"176":1}}],["position=",{"2":{"176":1,"179":1}}],["position",{"2":{"54":2,"174":1}}],["positional",{"2":{"31":1}}],["possibly",{"2":{"49":3,"51":2}}],["possible",{"2":{"8":1,"9":1,"13":1,"21":1,"44":2}}],["posterior",{"2":{"170":2}}],["post",{"2":{"13":1,"45":1}}],["potentially",{"2":{"13":1}}],["pattern",{"2":{"168":1}}],["path",{"2":{"21":2,"48":1,"123":3,"131":3,"139":3,"150":3,"158":3,"166":3,"171":3,"174":4,"180":3}}],["painful",{"2":{"88":1}}],["pairs",{"2":{"149":6}}],["pair",{"2":{"49":3,"52":1}}],["pairwisefusion",{"2":{"47":1,"48":2}}],["partialfunction",{"2":{"176":3}}],["partialfunctions",{"2":{"176":3}}],["partials",{"2":{"120":3}}],["particle",{"2":{"175":2,"176":1}}],["particles",{"2":{"174":1}}],["particular",{"0":{"93":1},"2":{"88":1,"93":1}}],["participate",{"0":{"82":1}}],["part",{"0":{"95":1,"96":1},"2":{"96":1}}],["paraemters",{"2":{"169":1}}],["parallel",{"2":{"39":2,"47":1,"48":9,"54":1}}],["params=nothing",{"2":{"174":2}}],["paramsis",{"2":{"38":1}}],["params",{"2":{"37":1,"38":12,"39":6,"55":3,"93":3,"96":1,"174":4,"175":3,"176":6,"177":2,"178":1,"179":1}}],["parameterized",{"2":{"170":1}}],["parameterization",{"2":{"69":1,"167":1}}],["parameterless",{"2":{"54":1}}],["parameterlength",{"2":{"12":1,"13":1,"15":1,"102":4,"103":1,"155":1,"169":3}}],["parameter",{"0":{"38":1,"104":1},"2":{"25":3,"38":2,"41":1,"42":2,"49":6,"54":1,"55":2,"71":1,"72":4,"76":1,"90":1,"95":2,"102":5,"103":1,"104":5,"109":1,"146":1,"167":1,"169":2}}],["parameters",{"0":{"15":1,"41":1,"92":1,"95":1},"1":{"93":1,"94":1,"95":1,"96":1},"2":{"10":1,"13":2,"14":1,"15":2,"25":1,"34":1,"36":1,"37":5,"38":12,"39":6,"40":1,"41":16,"42":4,"44":4,"45":1,"48":12,"49":3,"52":10,"53":4,"54":2,"55":16,"62":2,"63":4,"70":1,"72":2,"76":5,"77":7,"84":5,"89":6,"90":7,"92":2,"95":3,"102":5,"103":3,"104":7,"109":6,"118":1,"122":6,"127":7,"129":2,"135":2,"137":2,"143":1,"157":4,"162":3,"164":1,"165":2,"169":78,"170":2,"176":2}}],["past",{"2":{"72":1}}],["passes",{"2":{"48":2,"91":1,"116":1}}],["passed",{"2":{"41":2,"48":7,"54":4,"71":1,"103":1}}],["passing",{"2":{"14":1,"48":1,"55":1,"106":2}}],["pass",{"2":{"14":1,"21":1,"42":1,"48":1,"53":2,"55":1,"61":2,"62":1,"72":1,"77":1,"90":3,"102":1,"106":1,"122":1,"135":3}}],["pal2023efficient",{"2":{"69":1}}],["pal2023lux",{"2":{"69":1}}],["pal",{"2":{"69":2}}],["page",{"2":{"35":1,"38":1,"88":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["pad",{"2":{"49":5,"51":2}}],["pad=0",{"2":{"49":3,"51":2}}],["padding",{"2":{"25":1,"49":13,"51":8}}],["pads",{"2":{"25":1}}],["packages",{"0":{"78":1},"2":{"10":1,"76":1,"77":1,"78":3,"79":1,"97":1,"123":2,"139":2,"150":2,"158":2,"166":2,"167":1,"180":2}}],["package",{"0":{"125":1,"133":1,"141":1,"152":1,"160":1,"173":1},"2":{"0":1,"3":1,"6":1,"22":1,"65":3,"75":1,"78":1,"98":2,"107":1,"115":1}}],["practice",{"2":{"120":1}}],["prngs",{"2":{"117":1}}],["prng",{"2":{"102":1,"113":1,"117":2}}],["prior",{"2":{"169":1}}],["primarily",{"2":{"169":1}}],["primary",{"2":{"73":1}}],["primitives",{"2":{"169":1}}],["principles",{"0":{"71":1}}],["printf",{"2":{"125":1,"129":1,"133":1,"137":2,"141":1,"146":1,"152":1,"157":2,"160":1,"165":1,"173":1,"177":1}}],["prints",{"2":{"90":1}}],["printing",{"2":{"54":1,"72":1}}],["print",{"2":{"42":1}}],["printouts",{"2":{"72":1}}],["printout",{"2":{"42":1}}],["println",{"2":{"39":2,"42":1,"77":1,"89":2,"90":2,"102":2,"103":3,"104":2,"116":2,"117":2,"119":2,"120":2,"121":2,"122":3,"123":2,"131":2,"139":2,"150":2,"157":1,"158":2,"166":2,"171":2,"180":2}}],["printed",{"2":{"9":1,"14":1,"42":1,"44":1}}],["progress",{"2":{"167":3}}],["programming",{"2":{"113":1}}],["prob",{"2":{"143":2,"147":2,"175":1,"176":1,"177":1,"179":1}}],["probabilistic",{"2":{"169":2}}],["probability",{"2":{"20":7,"50":3}}],["probably",{"2":{"100":1}}],["problem",{"2":{"89":1,"90":1,"116":1,"122":2,"149":1,"162":1}}],["problematic",{"2":{"88":1,"89":1}}],["problems",{"0":{"89":1},"2":{"70":1}}],["project",{"2":{"65":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["projection",{"2":{"31":1}}],["product",{"0":{"120":1,"121":1},"2":{"118":5}}],["prod",{"2":{"25":1,"68":1}}],["propagating",{"2":{"63":1}}],["propagated",{"2":{"48":1,"120":1}}],["propagate",{"2":{"14":1,"122":1}}],["proper",{"2":{"87":1,"113":1}}],["properties",{"2":{"48":1}}],["properly",{"2":{"40":1}}],["proportion",{"2":{"25":3}}],["providing",{"2":{"22":1,"127":1}}],["provides",{"2":{"45":1,"63":1,"100":1,"106":1,"147":1}}],["provided",{"2":{"20":1,"52":3,"100":1,"115":1,"170":1}}],["provide",{"2":{"17":1,"25":1,"37":2,"44":1,"78":1,"115":1}}],["process",{"2":{"126":1,"142":1}}],["processor",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["processing",{"2":{"20":1,"52":1}}],["proceeding",{"2":{"102":1}}],["proceedings",{"2":{"21":1,"25":5}}],["proceeds",{"2":{"52":8}}],["preds",{"2":{"169":2}}],["pred=y",{"2":{"136":1}}],["predictive",{"2":{"170":1}}],["prediction",{"0":{"170":1},"2":{"169":1,"170":1}}],["predictions",{"2":{"165":1,"169":2,"170":2}}],["predict",{"2":{"134":1,"170":6}}],["predicted",{"2":{"128":2,"145":2,"156":2,"170":2}}],["pred",{"2":{"122":2,"128":4,"136":14,"137":1,"145":4,"154":2,"156":4,"164":2,"165":2,"177":6}}],["pressing",{"2":{"75":1}}],["preserving",{"2":{"45":1}}],["preservation",{"2":{"44":1}}],["preserved",{"2":{"45":1}}],["preserve",{"2":{"44":7,"45":1}}],["present",{"2":{"44":1,"45":1,"49":3,"52":8,"53":2,"89":1,"90":1,"98":2}}],["precision",{"0":{"62":1},"2":{"62":1,"114":1}}],["precedence",{"2":{"17":1}}],["pretty",{"2":{"54":1,"72":1}}],["pretrained",{"2":{"30":1,"33":3,"34":1}}],["pre",{"2":{"27":1,"49":1,"76":1}}],["preprint",{"2":{"21":2,"55":1}}],["preprocessing",{"0":{"34":1},"2":{"14":1}}],["prevents",{"2":{"48":1}}],["prevent",{"2":{"20":2,"102":1}}],["preference",{"2":{"8":2,"9":1}}],["preferences",{"0":{"8":1},"2":{"67":4}}],["bfgs",{"2":{"178":2}}],["bs",{"2":{"126":1,"142":1}}],["bd47eca2c8a",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["b=f",{"2":{"109":1}}],["b=layer",{"2":{"109":1}}],["b=zeros",{"2":{"42":1}}],["bh2",{"2":{"174":1}}],["bh",{"2":{"174":1}}],["bhn",{"2":{"52":2}}],["bhz",{"2":{"52":2}}],["bhr",{"2":{"52":2}}],["bright",{"2":{"170":3}}],["broken=true",{"2":{"67":1}}],["broken=false",{"2":{"67":2}}],["broken",{"2":{"67":4,"68":3}}],["broadcastable",{"2":{"55":1}}],["broadcast",{"2":{"50":1,"54":1,"121":1,"169":1,"176":2}}],["broadcasting",{"2":{"21":1,"114":1}}],["branched",{"2":{"48":1}}],["branchlayer",{"2":{"47":1,"48":4}}],["bigger",{"2":{"114":1}}],["bigfloat",{"2":{"114":3}}],["bibtex",{"2":{"69":2}}],["binarycrossentropy",{"2":{"136":4}}],["binary",{"2":{"134":1}}],["bin",{"2":{"52":1}}],["bilinear",{"2":{"47":1,"53":3,"56":5}}],["bias=l",{"2":{"102":1}}],["bias=lux",{"2":{"102":1}}],["bias=",{"2":{"52":1}}],["bias=false",{"2":{"52":4,"53":3}}],["bias=true",{"2":{"49":6,"52":1,"53":2}}],["bias=zeros32",{"2":{"49":3,"52":1,"53":4,"55":4}}],["bias=ps",{"2":{"42":1}}],["biases",{"2":{"25":1,"169":1}}],["bias",{"2":{"21":12,"25":1,"31":1,"38":1,"39":4,"42":1,"49":18,"52":23,"53":26,"55":20,"76":6,"85":2,"90":4,"93":4,"94":2,"95":2,"96":1,"102":6,"104":4,"122":3,"149":20,"165":8,"169":1,"176":3,"178":3}}],["bn=batchnorm",{"2":{"39":2}}],["bn",{"2":{"30":4}}],["black",{"2":{"161":1,"165":2,"168":2}}],["blas",{"2":{"14":1}}],["blue",{"2":{"161":1,"168":1}}],["blog",{"2":{"45":1}}],["blocks",{"0":{"31":1},"1":{"32":1},"2":{"31":1,"37":1,"52":1,"135":1}}],["block",{"2":{"28":1,"32":5,"42":2,"48":1,"51":2,"135":1}}],["bulk",{"2":{"169":1}}],["bugs",{"2":{"80":1,"104":1}}],["bug",{"2":{"42":1}}],["builds",{"2":{"89":1,"122":1,"123":1,"131":1,"139":1,"149":2,"150":1,"158":1,"166":1,"171":1,"180":1}}],["buildkite",{"2":{"89":1,"122":1,"123":3,"131":2,"139":3,"149":2,"150":3,"158":3,"166":3,"171":2,"180":3}}],["build",{"2":{"76":1,"113":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["building",{"0":{"31":1,"169":1},"1":{"32":1},"2":{"37":1}}],["built",{"0":{"46":1},"1":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1},"2":{"27":1,"70":1,"100":2,"116":1,"130":1}}],["but",{"2":{"10":1,"13":2,"14":1,"21":2,"25":1,"42":1,"44":1,"45":2,"54":1,"55":1,"56":2,"61":1,"71":1,"72":1,"89":3,"90":2,"97":1,"102":2,"103":1,"104":1,"120":2,"122":2,"123":1,"135":2,"136":1,"139":1,"146":1,"148":1,"150":1,"158":1,"162":1,"166":1,"169":1,"176":1,"180":1}}],["boundaries",{"2":{"170":1}}],["box",{"2":{"168":1}}],["boxing",{"2":{"63":1,"147":1,"149":1}}],["borrow",{"2":{"167":1}}],["borders",{"2":{"49":3,"51":2}}],["book",{"2":{"120":1}}],["bool=true",{"2":{"40":1,"52":2,"53":7,"55":5,"64":1}}],["bool=false",{"2":{"9":1,"31":1,"44":2,"52":5,"55":1,"144":1,"146":1}}],["boolean",{"2":{"14":1}}],["bool",{"2":{"9":1,"14":3,"48":2,"149":12}}],["bottom",{"2":{"42":1}}],["both",{"2":{"40":2,"70":1,"90":3,"109":1,"169":1}}],["body",{"2":{"42":1,"149":2,"174":9}}],["boltz",{"0":{"27":1},"1":{"28":1},"2":{"28":11,"31":5,"32":6}}],["b",{"2":{"20":2,"42":2,"51":4,"53":4,"89":2,"98":1,"104":2,"109":9,"122":8,"174":4}}],["bypass",{"2":{"103":1}}],["by",{"0":{"94":1},"2":{"9":1,"14":1,"21":1,"25":5,"31":1,"42":1,"48":1,"49":9,"51":2,"52":4,"53":8,"54":1,"55":5,"56":1,"59":1,"62":1,"68":1,"72":2,"75":1,"76":1,"90":1,"94":3,"95":2,"98":1,"99":1,"100":1,"114":2,"115":2,"116":1,"118":1,"122":2,"127":1,"132":1,"149":1,"167":1,"169":1,"170":1}}],["bayes",{"2":{"169":3}}],["bayesian",{"0":{"167":1},"1":{"168":1,"169":1,"170":1,"171":1},"2":{"168":1,"170":1}}],["battery",{"2":{"72":1}}],["batches",{"2":{"126":1,"142":1}}],["batched",{"2":{"17":1}}],["batchsize=256",{"2":{"153":1}}],["batchsize=min",{"2":{"153":2}}],["batchsize=128",{"2":{"134":2}}],["batchsize",{"2":{"126":3,"142":3,"153":4}}],["batchlastindex",{"2":{"52":1}}],["batch",{"2":{"21":7,"31":1,"32":3,"45":1,"49":6,"51":2,"52":12,"54":1,"55":6,"56":3,"134":1}}],["batchnorm",{"2":{"13":1,"19":1,"21":1,"31":2,"32":4,"47":1,"48":1,"55":6,"89":4,"90":4,"93":1,"96":1,"102":1,"105":1,"108":2,"111":1}}],["bad",{"2":{"40":1,"170":1}}],["basics",{"2":{"122":1}}],["basically",{"2":{"103":1}}],["basic",{"2":{"37":2,"113":1}}],["base",{"2":{"30":1,"31":1,"33":1,"50":1,"54":1,"56":1,"67":3,"85":1,"104":1,"121":1,"144":1,"149":14,"176":2}}],["based",{"2":{"9":1,"48":1,"80":1,"113":1}}],["ba",{"2":{"21":1}}],["backtracking",{"2":{"178":1}}],["back",{"2":{"104":1,"121":2,"146":4}}],["background",{"2":{"102":1,"175":1}}],["backward",{"2":{"40":2,"61":1,"90":3,"91":1,"116":1}}],["backwards",{"2":{"21":1}}],["backends",{"2":{"7":1,"8":1,"9":4,"10":5,"71":2,"97":3,"115":1,"146":1}}],["backend",{"0":{"98":1,"99":1},"2":{"7":1,"8":17,"9":3,"18":1,"37":1,"59":2,"98":5,"118":1}}],["bernoulli",{"2":{"169":1}}],["benchmarking",{"2":{"130":1}}],["bengio",{"2":{"25":2,"54":1}}],["because",{"2":{"104":1,"122":1,"178":1}}],["become",{"2":{"102":1,"132":1}}],["better",{"2":{"72":1,"73":1,"80":1}}],["between",{"0":{"43":1},"1":{"44":1,"45":1},"2":{"25":1,"31":1,"32":1,"41":1,"44":1,"53":1,"72":1,"109":3,"170":3}}],["being",{"2":{"55":4,"100":1,"130":1}}],["beginner",{"2":{"122":1}}],["begin",{"2":{"49":3,"51":2,"67":1,"68":1,"175":1,"176":1,"179":1}}],["beyond",{"2":{"48":1,"120":1}}],["below",{"2":{"48":1,"69":1,"168":1,"169":2,"170":1}}],["behaving",{"2":{"107":1}}],["behavior",{"2":{"14":1,"17":1,"25":1,"52":1,"135":1}}],["behaves",{"2":{"48":1}}],["best",{"2":{"44":1}}],["been",{"2":{"17":1,"44":2,"59":2,"172":1}}],["before",{"2":{"14":2,"25":2,"33":1,"48":1,"77":1,"102":1,"117":1,"138":1}}],["be",{"2":{"0":1,"3":1,"8":2,"9":1,"10":3,"11":1,"13":2,"14":2,"20":2,"21":17,"25":8,"33":1,"34":1,"35":3,"37":2,"38":3,"39":1,"40":3,"41":4,"42":6,"44":5,"45":3,"48":14,"49":28,"50":4,"51":4,"52":11,"53":13,"54":6,"55":11,"56":3,"63":3,"67":2,"69":1,"70":1,"71":3,"72":1,"80":1,"84":1,"88":1,"91":1,"92":1,"94":1,"97":2,"99":1,"100":1,"102":1,"104":2,"105":1,"107":3,"108":1,"109":6,"111":1,"114":1,"116":1,"117":1,"118":1,"119":1,"122":2,"130":2,"132":1,"135":1,"147":1,"155":1,"162":1,"168":1,"169":1,"174":4,"177":1}}],["gw",{"2":{"175":1}}],["gc",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["gnu",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["guess",{"2":{"178":1}}],["guide",{"2":{"102":1}}],["guaranteed",{"2":{"63":1}}],["guarantees",{"2":{"35":1}}],["gdev=gpu",{"2":{"156":1}}],["gdev",{"2":{"98":1,"99":4,"156":2}}],["g=tanh",{"2":{"52":1}}],["g",{"2":{"48":4,"50":2,"55":4,"174":1}}],["globally",{"2":{"167":1}}],["globals",{"2":{"122":1,"176":1}}],["global",{"2":{"51":2,"77":1,"122":3,"167":1}}],["globalmeanpool",{"2":{"47":1,"51":3}}],["globalmaxpool",{"2":{"47":1,"51":3}}],["glorot",{"2":{"23":2,"25":4,"52":7,"85":2,"102":1,"149":30,"165":2}}],["gs",{"2":{"42":2,"76":2,"77":2,"122":2,"129":2,"137":2,"146":2,"157":2}}],["gif",{"2":{"170":2}}],["gib",{"2":{"123":2,"139":2,"150":2,"158":2,"166":2,"180":2}}],["github",{"2":{"52":1,"80":2,"91":1}}],["give",{"2":{"134":1,"178":2}}],["gives",{"2":{"42":1,"61":1}}],["given",{"2":{"9":1,"21":1,"25":6,"26":24,"44":1,"48":2,"49":3,"53":6,"55":9,"71":1,"72":1}}],["gigantic",{"2":{"30":1,"88":1}}],["giant",{"2":{"30":1}}],["gaussian",{"2":{"169":1}}],["gaussadjoint",{"2":{"146":1}}],["gated",{"2":{"52":1}}],["ganguli",{"2":{"25":1}}],["gain=1",{"2":{"25":1,"106":2}}],["gain",{"2":{"25":15}}],["günter",{"2":{"20":1}}],["gravitational",{"0":{"172":1},"1":{"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1}}],["graph",{"2":{"168":1,"170":1}}],["grads",{"2":{"37":4,"165":2}}],["gradients",{"0":{"119":1},"2":{"36":2,"37":10,"48":1,"61":1,"66":1,"68":7,"76":1,"119":1,"129":2,"137":2,"157":2,"165":2}}],["gradient",{"0":{"68":1},"2":{"21":1,"65":1,"68":7,"90":4,"108":2,"109":2,"119":9,"122":3}}],["green",{"2":{"165":1}}],["greater",{"2":{"68":1}}],["ground",{"2":{"122":3}}],["group",{"2":{"21":3,"55":1,"169":1}}],["groups=1",{"2":{"49":2}}],["groups",{"2":{"21":4,"49":8,"55":4}}],["groupnorm",{"2":{"19":1,"21":2,"47":1,"55":5,"111":1}}],["grucell",{"2":{"47":1,"52":5}}],["gru",{"2":{"13":1,"52":1}}],["gt",{"2":{"17":1,"25":1,"33":3,"35":2,"49":1,"51":2,"54":2,"55":3,"56":3,"68":1,"78":1,"94":1,"98":1,"103":2,"135":1}}],["generic",{"2":{"90":1,"98":1,"120":1,"126":1,"128":1,"129":1,"134":1,"136":1,"142":1,"143":1,"144":1,"145":1,"153":1,"155":1,"156":1,"161":1,"164":1,"169":2,"170":1,"174":5,"176":1,"177":2}}],["generating",{"0":{"168":1},"2":{"56":1}}],["generation",{"2":{"52":3}}],["generator=lux",{"2":{"154":1}}],["generator",{"2":{"20":4,"25":3,"50":3,"102":1,"113":1,"117":2,"154":7,"155":2,"161":1}}],["generates",{"2":{"168":1}}],["generated",{"2":{"20":1,"25":1,"42":1,"50":1,"123":1,"131":1,"139":1,"150":1,"158":1,"159":1,"166":1,"170":1,"171":1,"180":1}}],["generate",{"2":{"10":1,"15":1,"16":1,"48":1,"105":1,"106":2,"122":2,"134":1,"161":4,"168":2}}],["general",{"0":{"14":1,"73":1},"2":{"48":1,"78":1,"176":1}}],["geoffrey",{"2":{"21":1}}],["getaxes",{"2":{"154":1}}],["getproperty",{"2":{"104":2,"149":2}}],["getfield",{"2":{"84":3,"104":3}}],["getting",{"0":{"74":1},"1":{"75":1,"76":1,"77":1,"78":1,"79":1},"2":{"14":1}}],["get",{"0":{"80":1},"2":{"7":1,"10":1,"76":1,"104":1,"107":1,"108":1,"114":2,"117":2,"120":1,"134":3,"135":1,"137":2,"169":2,"174":1}}],["goal",{"2":{"168":1}}],["good",{"2":{"169":1,"178":2}}],["goodfellow",{"2":{"54":1}}],["googlenet",{"2":{"33":3}}],["going",{"2":{"44":1,"120":1}}],["go",{"2":{"9":1,"80":2,"83":1,"90":1,"92":1,"103":1,"104":1,"132":1}}],["gpus",{"2":{"97":1,"106":1}}],["gpuci",{"2":{"89":1,"122":1,"123":1,"131":1,"139":1,"149":2,"150":1,"158":1,"166":1,"171":1,"180":1}}],["gpu",{"0":{"79":1,"97":1},"1":{"98":1,"99":1},"2":{"7":4,"8":8,"9":9,"10":7,"58":1,"59":4,"68":1,"76":2,"77":1,"79":1,"84":1,"97":4,"98":9,"99":5,"106":1,"109":1,"115":3,"137":1,"146":3,"149":1,"157":1,"165":4}}],["dl",{"2":{"176":1}}],["ddot",{"2":{"174":2}}],["dt^2",{"2":{"174":1}}],["dt2",{"2":{"174":3}}],["dt",{"2":{"174":21,"175":4,"176":2,"177":2,"179":2}}],["dset",{"2":{"153":4}}],["dnns",{"2":{"88":1}}],["d08f",{"2":{"67":1}}],["dynamic",{"2":{"65":1}}],["dynamics",{"2":{"25":1}}],["duration",{"2":{"169":2}}],["during",{"2":{"55":4}}],["dudt",{"2":{"143":2,"147":2}}],["dual",{"2":{"120":2}}],["dummy",{"2":{"76":1}}],["due",{"2":{"59":1,"149":1}}],["d",{"2":{"42":10,"49":6,"51":4,"54":2,"56":4,"93":2,"94":5,"95":6,"104":4,"134":4,"146":2,"174":2}}],["d2",{"2":{"41":2,"84":1,"85":3,"174":3}}],["d2=dense",{"2":{"41":1,"84":1,"87":1}}],["d3",{"2":{"41":4}}],["d3=chain",{"2":{"41":1}}],["d1",{"2":{"41":2,"84":1,"85":3}}],["d1=dense",{"2":{"41":1,"84":1,"87":1}}],["d1×",{"2":{"21":2,"55":2}}],["driver",{"2":{"123":3,"139":3,"150":3,"158":3,"166":3,"180":3}}],["dr",{"2":{"88":1}}],["drawn",{"2":{"25":5,"170":1}}],["dropped",{"2":{"20":2}}],["dropout",{"0":{"20":1,"50":1},"2":{"19":2,"20":17,"31":8,"32":3,"47":1,"50":17,"72":1,"93":1,"96":1,"105":1,"111":1}}],["dmitry",{"2":{"21":1,"55":1}}],["digits=2",{"2":{"157":4}}],["digits",{"2":{"114":2}}],["diagonal",{"2":{"53":1,"169":1}}],["divisible",{"2":{"49":2}}],["divides",{"2":{"56":1}}],["divide",{"2":{"49":2}}],["dilation",{"2":{"49":3}}],["dilation=1",{"2":{"49":3}}],["diffeqsol",{"2":{"143":3,"144":1,"149":6}}],["diffeqflux",{"2":{"140":1}}],["differ",{"2":{"118":1}}],["differences",{"2":{"68":5,"109":1}}],["difference",{"2":{"50":1,"148":1,"174":2}}],["differentiate",{"2":{"116":1}}],["differentiation",{"0":{"118":1},"1":{"119":1,"120":1,"121":1},"2":{"113":1,"120":1}}],["differential",{"2":{"69":1,"177":1}}],["differently",{"2":{"48":1}}],["different",{"2":{"39":1,"48":1,"109":1,"117":1}}],["diff",{"2":{"118":1}}],["diff|finite",{"2":{"68":3}}],["diff|forward",{"2":{"68":2}}],["difficulty",{"2":{"25":2}}],["direction",{"2":{"55":2}}],["direct",{"2":{"21":1,"35":1}}],["directly",{"2":{"6":1,"10":1,"11":1,"14":1,"20":1,"38":1,"48":2,"56":1,"96":1,"99":1,"106":1,"140":1}}],["dim",{"2":{"31":2,"32":1,"54":4,"122":7}}],["dimensionmismatch",{"2":{"89":2}}],["dimensional",{"2":{"53":2,"56":2,"120":1}}],["dimension",{"0":{"89":1},"2":{"21":1,"31":1,"32":1,"45":1,"49":6,"50":2,"51":4,"52":7,"53":1,"54":5,"55":14,"61":1,"84":1,"87":1,"88":1,"107":1}}],["dimensions",{"2":{"20":1,"21":1,"25":11,"32":2,"45":1,"49":4,"51":6,"52":1,"53":10,"54":3,"55":4,"56":8,"89":4,"122":1,"127":1}}],["dims=3",{"2":{"134":1}}],["dims=1",{"2":{"128":1,"145":1,"156":1}}],["dims=ndims",{"2":{"84":1}}],["dims=colon",{"2":{"55":1}}],["dims=2",{"2":{"52":1}}],["dims=",{"2":{"50":2}}],["dims=pad",{"2":{"49":1}}],["dims",{"2":{"20":4,"21":2,"25":11,"31":2,"45":1,"49":1,"50":4,"52":23,"53":52,"54":5,"55":3,"102":12,"107":4,"135":9}}],["disambiguate",{"2":{"122":1}}],["disables",{"2":{"68":1}}],["disable",{"2":{"48":4,"58":1,"64":3,"89":3,"90":3,"93":1}}],["disabled",{"2":{"14":1,"48":1,"49":3,"53":3}}],["discrete",{"2":{"143":1,"146":1}}],["discussed",{"2":{"91":1}}],["discussions",{"2":{"80":1}}],["discussion",{"2":{"52":1,"120":1}}],["discourse",{"2":{"80":1}}],["disruptive",{"2":{"70":1}}],["distinguish",{"2":{"109":2}}],["distinction",{"2":{"72":1}}],["distinct",{"2":{"52":1}}],["distributed",{"2":{"25":2,"72":1}}],["distributions",{"2":{"169":2}}],["distribution",{"2":{"25":8,"26":12,"170":1}}],["disjoint",{"2":{"41":1}}],["dispatching",{"0":{"81":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"87":1}}],["dispatch",{"0":{"82":1,"86":1},"2":{"42":2,"65":1,"82":2,"85":1,"86":1,"87":1,"105":1}}],["dispatch=nothing",{"2":{"42":1}}],["dispatches",{"2":{"14":1,"42":1}}],["displays",{"2":{"168":1,"170":1}}],["displayed",{"2":{"98":1}}],["display",{"2":{"12":1,"14":1,"72":1,"103":1}}],["doubt",{"2":{"102":1}}],["dot",{"2":{"89":1,"122":1,"123":1,"131":1,"139":1,"149":2,"150":1,"158":1,"166":1,"171":1,"180":1}}],["domain",{"2":{"80":1}}],["domainerror",{"2":{"40":1,"90":2}}],["down",{"0":{"90":1},"2":{"89":1,"90":1,"91":1,"103":1,"114":2}}],["downstream",{"2":{"72":1}}],["downright",{"2":{"72":1}}],["doing",{"2":{"120":1,"169":1}}],["doi",{"2":{"69":2,"174":2}}],["docs",{"2":{"122":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"167":1,"171":1,"180":1}}],["docstrings",{"2":{"102":1}}],["doc",{"2":{"55":2}}],["documentation",{"2":{"39":1,"56":1,"59":1,"60":1,"78":1,"80":1,"102":1,"120":1,"130":1}}],["done",{"2":{"76":1,"98":1}}],["don",{"2":{"42":1,"65":1,"72":1,"76":1,"88":1,"91":1,"102":2,"104":1,"109":1,"114":2,"116":2,"122":2,"126":1,"134":1,"135":1,"138":1,"142":1}}],["doesn",{"2":{"42":1,"48":1,"52":1,"73":1,"82":1,"102":2,"104":1,"105":1,"111":1,"155":1}}],["does",{"2":{"21":2,"53":1,"54":1,"64":1}}],["do",{"2":{"11":1,"17":1,"42":7,"48":1,"54":2,"75":1,"77":3,"100":1,"102":1,"103":1,"104":1,"105":1,"111":1,"114":2,"116":1,"120":1,"127":1,"135":1,"162":1,"169":1,"170":1,"174":1,"176":1}}],["danger",{"2":{"10":1,"40":1}}],["datasize",{"2":{"175":1}}],["datasets",{"0":{"153":1},"2":{"134":1,"153":2,"157":1}}],["dataset",{"0":{"134":1,"161":1},"2":{"126":3,"134":7,"142":3,"153":2,"161":2,"168":2}}],["datapoints",{"2":{"161":1}}],["dataloaders",{"2":{"134":3,"137":2,"157":3}}],["dataloader",{"2":{"126":3,"128":2,"129":5,"134":5,"141":1,"142":3,"145":2,"146":7,"153":2,"156":2,"157":9}}],["datatype",{"2":{"14":1,"120":1}}],["data",{"0":{"9":1,"59":1,"168":1},"2":{"6":1,"9":1,"37":4,"42":6,"49":8,"51":6,"52":1,"54":1,"55":6,"56":2,"59":1,"72":1,"77":6,"102":1,"122":1,"126":6,"134":8,"142":6,"146":2,"156":4,"157":15,"159":1,"161":4,"164":4,"165":5,"168":6,"169":1,"170":7,"175":3,"176":2,"177":1,"179":2}}],["derivatives",{"2":{"176":1}}],["deal",{"2":{"143":1}}],["deactivate",{"2":{"52":3}}],["demonstration",{"2":{"122":1,"142":1}}],["demonstrative",{"2":{"104":1}}],["demonstrate",{"2":{"109":1,"122":1,"124":1}}],["dev=gpu",{"2":{"144":1,"145":1}}],["dev",{"2":{"137":5,"144":2,"145":3,"146":8,"156":3,"157":7,"165":4}}],["developed",{"2":{"72":1,"100":1}}],["deviate",{"2":{"176":1}}],["deviation",{"2":{"25":3,"55":1}}],["devicebuffer",{"2":{"98":1,"106":2,"115":1,"149":12,"165":12}}],["device",{"0":{"59":1},"2":{"7":5,"9":21,"10":11,"59":2,"76":5,"98":8,"99":1,"109":3,"123":1,"137":2,"139":1,"144":1,"145":2,"146":2,"149":1,"150":1,"156":2,"157":1,"158":1,"165":3,"166":1,"180":1}}],["devices",{"2":{"6":1,"109":1}}],["decides",{"2":{"111":1}}],["decouples",{"2":{"55":1}}],["declared",{"2":{"42":1}}],["debugging",{"0":{"40":1,"88":1},"1":{"89":1,"90":1,"91":1},"2":{"40":2,"88":2}}],["debug",{"2":{"36":1,"40":5,"88":4,"89":6,"90":10,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["debuglayer",{"2":{"36":1,"40":3,"89":4,"90":4}}],["denom",{"2":{"175":3,"176":3}}],["denominator",{"2":{"21":4,"55":4}}],["density",{"2":{"169":1}}],["denselayerparameters",{"2":{"104":3}}],["dense",{"2":{"38":1,"39":14,"42":5,"45":3,"47":1,"48":2,"53":2,"54":1,"55":6,"76":6,"77":6,"84":6,"85":2,"87":2,"89":17,"90":14,"93":9,"94":3,"96":3,"102":1,"104":2,"108":5,"122":2,"127":6,"135":2,"144":5,"149":30,"155":4,"162":4,"165":2,"169":4,"176":6}}],["densenet201",{"2":{"33":1}}],["densenet169",{"2":{"33":1}}],["densenet161",{"2":{"33":1}}],["densenet121",{"2":{"33":1}}],["densenet",{"2":{"33":8}}],["depots",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["depot",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["deprecated",{"2":{"59":2}}],["depthwise",{"2":{"49":2}}],["depth",{"2":{"31":2,"32":2}}],["dependent",{"0":{"84":1},"2":{"83":1}}],["dependency",{"2":{"11":1,"22":1,"65":1,"100":1}}],["dependencies",{"2":{"0":1,"3":1,"65":1,"169":1}}],["depend",{"2":{"11":1,"21":1,"100":1,"102":1}}],["depending",{"2":{"11":1,"14":1,"25":1}}],["delving",{"2":{"25":2}}],["deleted",{"2":{"8":1}}],["descent",{"2":{"122":4}}],["describes",{"2":{"45":1,"88":1,"175":1,"176":1}}],["described",{"2":{"25":3,"48":2}}],["desirable",{"2":{"169":1}}],["desired",{"2":{"8":1,"122":1}}],["design",{"0":{"71":1},"2":{"70":1,"109":1}}],["destructure",{"2":{"44":3,"72":2,"112":1}}],["deep",{"0":{"43":1,"73":1},"1":{"44":1,"45":1},"2":{"21":1,"22":1,"25":6,"27":1,"69":1,"72":1,"73":1,"106":1,"107":1}}],["detour",{"2":{"118":1}}],["detected",{"2":{"40":1,"90":2}}],["deterministic",{"2":{"25":1,"72":1}}],["determined",{"2":{"59":1,"76":1}}],["determine",{"2":{"17":1,"169":1}}],["detailed",{"2":{"38":1,"59":1,"89":1}}],["details",{"0":{"110":1},"1":{"111":1},"2":{"20":2,"21":4,"39":1,"40":1,"41":1,"44":1,"45":2,"55":1,"56":1,"102":1,"115":1,"120":2}}],["defiing",{"0":{"176":1}}],["definitions",{"2":{"103":1}}],["defining",{"0":{"77":1,"136":1},"2":{"6":1,"77":1,"82":1,"102":1,"104":1,"127":1,"135":1}}],["define",{"0":{"127":1,"129":1,"143":1,"145":1,"156":1,"174":1},"2":{"77":1,"82":2,"83":1,"86":1,"90":2,"100":1,"102":3,"103":1,"104":2,"109":2,"122":1,"135":3,"136":1,"169":3,"174":2,"176":2,"177":2}}],["defined",{"2":{"14":1,"17":1}}],["defines",{"2":{"11":1,"13":2,"174":1,"175":1}}],["defer",{"2":{"120":1}}],["defaults",{"2":{"52":2,"63":1,"176":1}}],["default",{"2":{"7":1,"10":2,"16":1,"25":8,"26":24,"39":2,"42":1,"44":1,"45":1,"55":3,"62":1,"68":10,"72":1,"76":1,"93":1,"96":1,"102":1,"104":5,"106":4,"107":1,"108":2,"109":2,"111":2,"113":1,"114":1,"116":1,"122":1,"123":1,"131":1,"135":1,"139":1,"144":1,"149":1,"150":1,"154":1,"158":1,"166":1,"168":1,"171":1,"180":1}}],["rk4",{"2":{"175":1,"176":1,"177":1,"179":1}}],["r₂",{"2":{"174":2}}],["r₁",{"2":{"174":2}}],["r2",{"2":{"174":1}}],["r1",{"2":{"174":1}}],["r=r1−r2",{"2":{"174":1}}],["r=σ",{"2":{"52":1}}],["rhat",{"2":{"169":1}}],["rrule",{"2":{"90":1}}],["rtol",{"2":{"68":1}}],["rᴰ",{"2":{"56":1}}],["r²",{"2":{"56":1}}],["right",{"2":{"54":1}}],["root",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["roc",{"2":{"115":1}}],["row",{"2":{"114":3,"170":1}}],["rows",{"2":{"25":1,"114":1}}],["round",{"2":{"157":4,"168":1}}],["rounded",{"2":{"49":3,"51":2}}],["route",{"2":{"103":1}}],["rgb",{"2":{"49":2}}],["rnn",{"2":{"52":1}}],["rnncell",{"2":{"47":1,"52":8}}],["rng=xoshiro",{"2":{"129":1}}],["rngs",{"2":{"71":1}}],["rng",{"2":{"7":1,"10":3,"13":2,"14":6,"15":1,"16":1,"17":2,"20":6,"25":13,"26":24,"31":2,"39":6,"44":1,"45":1,"50":6,"52":3,"53":4,"76":5,"85":2,"87":1,"89":3,"90":2,"93":6,"96":6,"102":7,"103":2,"104":5,"106":11,"107":6,"108":7,"109":9,"113":2,"114":1,"117":5,"119":1,"120":1,"122":8,"129":1,"137":2,"144":4,"154":3,"157":2,"161":4,"165":1,"168":11,"169":1}}],["r",{"2":{"42":3,"56":10,"174":3}}],["ryan",{"2":{"21":1}}],["raw",{"2":{"126":2,"142":2}}],["range",{"2":{"161":1,"170":23,"175":1}}],["ranges",{"2":{"48":1}}],["ran",{"2":{"89":1}}],["rand",{"2":{"76":1,"114":5,"115":2,"117":3,"168":8}}],["randn",{"2":{"25":1,"31":1,"42":1,"44":1,"45":1,"68":1,"77":1,"85":1,"89":1,"93":1,"96":1,"98":1,"99":1,"102":1,"103":1,"104":1,"108":2,"109":6,"114":2,"117":1,"119":1,"120":1,"122":4,"161":1}}],["randnc64",{"2":{"23":1,"26":1}}],["randnc32",{"2":{"23":1,"26":1}}],["randnc16",{"2":{"23":1,"26":1}}],["randn64",{"2":{"23":1,"26":1}}],["randn32",{"2":{"23":1,"26":1}}],["randn16",{"2":{"23":1,"26":1}}],["randc64",{"2":{"23":1,"26":1}}],["randc32",{"2":{"23":1,"26":1}}],["randc16",{"2":{"23":1,"26":1}}],["rand64",{"2":{"23":1,"26":1}}],["rand32",{"2":{"23":1,"26":1}}],["rand16",{"2":{"23":1,"26":1}}],["randomness",{"0":{"117":1},"2":{"52":3,"71":1,"76":1,"113":1,"117":1}}],["randomly",{"2":{"50":2}}],["random",{"2":{"20":4,"25":10,"26":12,"39":4,"42":1,"44":2,"45":2,"50":3,"76":4,"77":1,"84":1,"89":1,"93":4,"96":4,"102":4,"104":3,"106":3,"108":4,"109":4,"113":5,"114":1,"117":8,"122":4,"125":1,"133":1,"141":1,"144":2,"152":1,"154":1,"160":1,"161":2,"167":1,"168":2,"173":1}}],["ratio≥0",{"2":{"174":1}}],["ratio≤1",{"2":{"174":1}}],["ratio",{"2":{"31":3,"174":6,"175":2,"176":1,"177":1,"179":1}}],["rate",{"2":{"31":4,"122":1,"169":1}}],["rather",{"2":{"10":1,"52":1,"56":1,"71":1,"135":1}}],["rule",{"2":{"56":1,"165":2}}],["rules",{"0":{"86":1},"2":{"6":1}}],["runtime",{"2":{"123":2,"139":2,"150":2,"158":2,"166":2,"180":2}}],["running",{"0":{"85":1},"2":{"21":11,"55":8,"89":5,"90":11,"93":2,"96":2,"111":1,"135":1}}],["run",{"2":{"9":1,"10":1,"50":1,"67":2,"76":1,"86":1,"90":3,"102":1,"109":1,"117":1,"135":1,"170":1}}],["red",{"2":{"168":1}}],["reduce",{"2":{"54":1,"65":1,"169":1}}],["reducing",{"2":{"21":1,"48":1}}],["reiterate",{"2":{"109":1}}],["request",{"2":{"80":1}}],["requisites",{"2":{"76":1}}],["requirements",{"2":{"48":1,"165":1}}],["require",{"2":{"21":1,"34":1,"44":1,"45":1}}],["requires",{"2":{"14":1,"79":1,"82":1}}],["requiring",{"2":{"0":1,"3":1}}],["regions",{"2":{"170":1}}],["registry",{"2":{"78":1}}],["regularization",{"2":{"169":1}}],["regression",{"0":{"122":1},"2":{"122":1}}],["regressions",{"2":{"14":1,"97":1,"130":1}}],["regarding",{"2":{"109":1,"118":1}}],["relevant",{"2":{"167":1,"174":1}}],["release",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["reltol",{"2":{"149":6}}],["reltol=1",{"2":{"144":1}}],["rely",{"2":{"117":1}}],["relies",{"2":{"109":2,"117":1}}],["reliability",{"2":{"72":1}}],["relativisticorbitmodel",{"2":{"175":3}}],["relative",{"2":{"68":1}}],["related",{"2":{"80":1}}],["relu",{"2":{"42":1,"45":4,"48":1,"52":1,"54":3,"55":3,"77":1,"89":5,"90":5,"108":2,"127":8,"155":2,"162":2,"165":1}}],["referred",{"2":{"114":1}}],["references",{"2":{"20":2,"21":4,"25":6,"54":1,"55":1}}],["reference",{"0":{"5":1,"24":1},"1":{"25":1,"26":1},"2":{"31":2,"32":3,"124":1}}],["refresher",{"2":{"102":1}}],["reflects",{"2":{"55":1}}],["renormalize",{"2":{"55":1}}],["retcode",{"2":{"178":1}}],["ret",{"2":{"137":2}}],["retrieve",{"2":{"53":1}}],["retained",{"2":{"50":1}}],["returned",{"2":{"20":3,"21":1,"25":1,"44":1,"45":1,"48":2,"50":4,"52":3,"53":1,"54":1,"146":1}}],["returning",{"2":{"14":1,"102":1}}],["returns",{"2":{"10":2,"13":2,"14":3,"20":2,"21":4,"25":6,"37":1,"38":1,"41":1,"48":7,"49":3,"50":3,"51":6,"52":7,"53":5,"54":5,"55":5,"56":3,"61":2,"98":3,"176":1}}],["return",{"2":{"9":2,"10":2,"15":1,"16":1,"17":3,"25":6,"26":24,"37":2,"39":3,"42":4,"48":3,"52":4,"54":1,"71":1,"77":3,"84":1,"86":2,"90":2,"93":1,"94":3,"95":4,"102":5,"103":2,"104":3,"107":1,"109":1,"120":2,"122":1,"126":1,"128":2,"134":1,"135":2,"136":3,"137":1,"142":1,"143":3,"144":1,"145":2,"147":2,"149":2,"153":2,"154":4,"155":1,"156":2,"161":1,"164":2,"165":1,"168":1,"169":2,"170":2,"174":11,"175":1,"176":1,"177":2}}],["rewrite",{"2":{"44":1}}],["reverse",{"2":{"40":1,"68":3,"90":1,"118":2,"119":2}}],["reversediffadjoint",{"2":{"143":1}}],["reversediff",{"2":{"14":2,"68":2,"146":1}}],["remove",{"2":{"117":1}}],["removed",{"2":{"35":1,"48":1,"97":1}}],["remember",{"2":{"88":1,"91":1,"102":1,"135":1,"146":1}}],["remaining",{"2":{"32":1}}],["remains",{"2":{"20":1}}],["read",{"2":{"80":1,"116":1}}],["reasonable",{"2":{"48":2}}],["reasons",{"2":{"14":1}}],["really",{"2":{"45":1,"102":1,"114":1}}],["real",{"2":{"25":1,"50":1,"77":1,"86":1}}],["record",{"2":{"170":1}}],["reconstruction",{"2":{"102":1}}],["recommened",{"2":{"102":1}}],["recommend",{"2":{"13":1,"39":1,"72":1,"102":1,"116":1,"120":1,"138":1,"140":1,"149":1}}],["recommended",{"0":{"98":1},"2":{"13":2,"14":1,"38":1,"44":1,"65":1,"100":1,"102":1,"109":1,"136":1,"176":1}}],["recomputing",{"2":{"20":1}}],["receives",{"2":{"54":1}}],["recently",{"2":{"17":1}}],["rectifiers",{"2":{"25":2}}],["recur",{"2":{"52":3}}],["recurrence",{"2":{"47":1,"52":4,"135":1}}],["recurrent",{"0":{"52":1},"2":{"25":1,"52":7,"132":2}}],["recurses",{"2":{"40":1,"62":3}}],["recursively",{"2":{"16":1,"48":1}}],["reparameterized",{"2":{"55":2}}],["reparameterization",{"2":{"55":1}}],["repack",{"2":{"14":1}}],["repeat",{"2":{"134":2}}],["repeatedly",{"2":{"48":1}}],["repeatedlayer",{"2":{"47":1,"48":1}}],["repeats",{"2":{"48":6,"52":5}}],["replacing",{"2":{"108":1,"114":1}}],["replace",{"2":{"87":1}}],["replaces",{"2":{"40":1,"51":2}}],["repl",{"2":{"75":1}}],["replicated",{"2":{"117":1}}],["replicate",{"2":{"12":1,"14":1,"48":1,"117":3}}],["report",{"2":{"35":1,"80":1}}],["represents",{"2":{"169":1}}],["representing",{"2":{"56":1}}],["representation",{"2":{"42":1}}],["represent",{"2":{"25":1}}],["resources",{"0":{"80":1}}],["resolution",{"2":{"56":1}}],["respective",{"2":{"70":1,"109":1,"116":1}}],["responsibility",{"2":{"14":1,"104":1}}],["rescale",{"2":{"55":4}}],["res",{"2":{"48":4,"120":3,"178":1,"179":1}}],["reshape",{"2":{"116":2,"120":1,"126":1,"134":2,"142":1,"143":3,"153":2,"161":1,"169":1}}],["reshaped",{"2":{"54":1}}],["reshapes",{"2":{"54":1}}],["reshapelayer",{"2":{"47":1,"54":1}}],["reshaping",{"2":{"25":1}}],["resnext152",{"2":{"33":1}}],["resnext101",{"2":{"33":1}}],["resnext50",{"2":{"33":1}}],["resnext",{"2":{"33":6}}],["resnet152",{"2":{"33":1}}],["resnet101",{"2":{"33":1}}],["resnet18",{"2":{"33":1}}],["resnet50",{"2":{"33":1}}],["resnet34",{"2":{"33":1}}],["resnet",{"2":{"33":10,"44":1,"48":1}}],["results",{"0":{"179":1},"2":{"165":1,"170":2,"175":1,"176":1,"178":1,"179":1}}],["result",{"2":{"25":1,"55":1,"71":1,"104":4,"136":3}}],["rest",{"2":{"25":1,"135":2}}],["restarted",{"2":{"8":1}}],["reserved",{"2":{"42":1}}],["research",{"2":{"20":1,"27":1}}],["resets",{"2":{"10":1}}],["reset",{"2":{"7":1,"10":1}}],["jointly",{"2":{"135":1}}],["journal",{"2":{"20":1}}],["jvp",{"2":{"118":4,"120":6}}],["jacvec",{"2":{"120":1}}],["jacobian",{"0":{"120":1,"121":1},"2":{"118":6}}],["jax",{"2":{"73":1,"113":1}}],["jamie",{"2":{"21":1}}],["jet",{"0":{"67":1},"2":{"66":1,"67":9}}],["just",{"2":{"42":1,"48":1,"50":3,"55":3,"76":1,"98":1,"100":2,"107":1,"114":1,"120":1,"146":1}}],["juliax",{"2":{"98":1,"114":11,"116":2,"122":1}}],["juliaxt",{"2":{"86":1}}],["juliazygote",{"2":{"90":1}}],["juliazeros",{"2":{"114":2}}],["juliazerosc64",{"2":{"26":1}}],["juliazerosc32",{"2":{"26":1}}],["juliazerosc16",{"2":{"26":1}}],["juliazeros64",{"2":{"26":1}}],["juliazeros32",{"2":{"26":1}}],["juliazeros16",{"2":{"26":1}}],["juliaprob",{"2":{"175":1,"176":1,"179":1}}],["juliaprintln",{"2":{"119":1}}],["juliaps",{"2":{"77":1,"90":1,"122":1}}],["juliapkg>",{"2":{"75":1}}],["juliapixelshuffle",{"2":{"56":1}}],["juliaparallel",{"2":{"48":1}}],["juliaparameterlength",{"2":{"15":1}}],["juliapairwisefusion",{"2":{"48":1}}],["juliaw",{"2":{"114":1,"122":1}}],["juliaweights",{"2":{"106":1,"107":3}}],["juliaweightnorm",{"2":{"55":1}}],["juliawrappedfunction",{"2":{"54":1}}],["juliaembedding",{"2":{"53":1}}],["juliay",{"2":{"48":2}}],["julialoss",{"2":{"177":1}}],["julialogitcrossentropy",{"2":{"128":1,"145":1,"156":1}}],["julialux",{"2":{"127":1}}],["julialength",{"2":{"114":1}}],["julialang",{"2":{"80":1,"89":1,"122":1,"123":2,"131":2,"139":2,"149":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["julialayer",{"2":{"39":1}}],["julialayernorm",{"2":{"21":1,"55":1}}],["julialstmcell",{"2":{"52":1}}],["julial",{"2":{"48":1}}],["juliabegin",{"2":{"161":1,"165":1,"179":1}}],["juliabilinear",{"2":{"53":1}}],["juliabranchlayer",{"2":{"48":1}}],["juliabatchnorm",{"2":{"21":1,"55":1}}],["julianooplayer",{"2":{"54":1}}],["julian",{"2":{"42":1,"77":1,"122":1}}],["juliamultigate",{"2":{"61":1}}],["juliamultiheadattention",{"2":{"31":1}}],["juliamaxout",{"2":{"54":1}}],["juliamaxpool",{"2":{"51":1}}],["juliameanpool",{"2":{"51":1}}],["juliamodel",{"2":{"41":1,"42":1,"87":1,"89":2,"90":4,"103":1,"122":1,"149":1,"162":1}}],["juliam",{"2":{"38":1,"55":3}}],["juliafig",{"2":{"170":2}}],["juliaf",{"2":{"119":1,"120":1}}],["juliafor",{"2":{"117":1}}],["juliafoldl",{"2":{"61":1}}],["juliafunction",{"2":{"86":1,"90":1,"102":2,"120":1,"122":1,"126":1,"129":1,"134":1,"135":2,"136":1,"137":1,"142":1,"143":1,"144":1,"146":1,"153":1,"155":1,"157":1,"161":1,"164":1,"165":1,"169":1,"174":4,"175":1,"176":1,"177":1}}],["juliafunctional",{"2":{"2":1,"5":1}}],["juliaf64",{"2":{"62":1}}],["juliaf32",{"2":{"62":1}}],["juliaf16",{"2":{"62":1}}],["juliaflattenlayer",{"2":{"54":1}}],["juliafluxlayer",{"2":{"44":1}}],["juliafromfluxadaptor",{"2":{"44":1}}],["juliafrozenlayer",{"2":{"38":1}}],["juliafreeze",{"2":{"38":2}}],["juliavjp",{"2":{"121":1,"165":1}}],["juliaval",{"2":{"120":1,"121":1}}],["juliavariationalhiddendropout",{"2":{"50":1}}],["juliavgg",{"2":{"31":1}}],["juliaviposembedding",{"2":{"31":1}}],["juliarng",{"2":{"85":1,"89":1,"102":1,"109":2,"113":1,"117":1,"161":1}}],["juliarnncell",{"2":{"52":1}}],["juliarandom",{"2":{"117":1}}],["juliarandc64",{"2":{"26":1}}],["juliarandc32",{"2":{"26":1}}],["juliarandc16",{"2":{"26":1}}],["juliarand64",{"2":{"26":1}}],["juliarandnc64",{"2":{"26":1}}],["juliarandnc32",{"2":{"26":1}}],["juliarandnc16",{"2":{"26":1}}],["juliarandn64",{"2":{"26":1}}],["juliarandn32",{"2":{"26":1}}],["juliarandn16",{"2":{"26":1}}],["juliarand32",{"2":{"26":1}}],["juliarand16",{"2":{"26":1}}],["juliarecurrence",{"2":{"52":1}}],["juliareshapelayer",{"2":{"54":1}}],["juliares",{"2":{"48":2}}],["juliareset",{"2":{"10":1}}],["juliarepeatedlayer",{"2":{"48":1}}],["juliareplicate",{"2":{"14":1}}],["juliaopt",{"2":{"122":1,"163":1}}],["juliaonesc64",{"2":{"26":1}}],["juliaonesc32",{"2":{"26":1}}],["juliaonesc16",{"2":{"26":1}}],["juliaones64",{"2":{"26":1}}],["juliaones32",{"2":{"26":1}}],["juliaones16",{"2":{"26":1}}],["juliaorthogonal",{"2":{"25":1}}],["juliaoutputsize",{"2":{"17":1}}],["juliakaiming",{"2":{"25":2}}],["juliaupsample",{"2":{"56":1}}],["juliaupdate",{"2":{"16":1}}],["juliaunfreeze",{"2":{"38":2}}],["juliausing",{"2":{"25":2,"39":2,"42":2,"67":2,"68":1,"76":1,"77":1,"84":1,"89":1,"90":1,"93":1,"96":1,"97":1,"102":1,"104":1,"106":2,"108":2,"109":2,"113":1,"115":1,"118":1,"122":1,"123":1,"125":1,"131":1,"133":1,"139":1,"141":1,"150":1,"152":1,"158":1,"160":1,"166":1,"171":1,"173":1,"180":1}}],["juliaistraining",{"2":{"61":1}}],["juliaimport",{"2":{"44":1,"45":1,"75":1}}],["juliaidentity",{"2":{"25":1}}],["juliainstancenorm",{"2":{"21":1,"55":1}}],["juliainputsize",{"2":{"17":1}}],["juliainitialstates",{"2":{"16":1}}],["juliainitialparameters",{"2":{"15":1}}],["juliatstate",{"2":{"165":1}}],["juliatosimplechainsadaptor",{"2":{"45":1}}],["juliatry",{"2":{"89":1,"90":1}}],["juliatrain",{"2":{"130":2,"146":3,"148":1}}],["juliatrainstate",{"2":{"37":1}}],["juliatrainmode",{"2":{"16":1}}],["juliatransformer",{"2":{"31":1}}],["juliatruncated",{"2":{"25":1}}],["juliatestmode",{"2":{"16":1}}],["juliadisable",{"2":{"64":1}}],["juliadisplay",{"2":{"14":1}}],["juliad",{"2":{"42":1}}],["juliadense",{"2":{"53":1}}],["juliadebuglayer",{"2":{"40":1}}],["juliadefault",{"2":{"10":1}}],["juliadropout",{"2":{"20":1,"50":1}}],["juliacdev",{"2":{"98":1,"99":1}}],["juliacrosscor",{"2":{"49":1}}],["juliac",{"2":{"48":1}}],["juliachain",{"2":{"48":1}}],["juliacheck",{"2":{"14":1}}],["juliaconst",{"2":{"169":1,"176":2,"177":1}}],["juliaconvtranspose",{"2":{"49":1}}],["juliaconv",{"2":{"49":1}}],["juliacontains",{"2":{"14":1}}],["juliacompute",{"2":{"37":1}}],["juliaclasstokens",{"2":{"31":1}}],["juliacpu",{"2":{"9":1,"59":1}}],["juliasize",{"2":{"114":1}}],["juliasimplechainslayer",{"2":{"45":1}}],["juliastruct",{"2":{"86":1,"103":1,"104":1,"120":1,"135":1,"143":1,"147":1,"154":1}}],["juliastatefulluxlayer",{"2":{"63":1}}],["juliastatefulrecurrentcell",{"2":{"52":1}}],["juliastatelength",{"2":{"16":1}}],["juliastateless",{"2":{"14":1}}],["juliaselectdim",{"2":{"54":1}}],["juliasetup",{"2":{"14":1}}],["juliascale",{"2":{"53":1}}],["juliaskipconnection",{"2":{"48":1}}],["juliashare",{"2":{"41":1}}],["juliasparse",{"2":{"25":1}}],["juliasupported",{"2":{"10":1}}],["juliaadtype",{"2":{"178":1}}],["juliaadaptor",{"2":{"127":1}}],["juliaadaptivemeanpool",{"2":{"51":1}}],["juliaadaptivemaxpool",{"2":{"51":1}}],["juliaadapt",{"2":{"44":1,"45":1}}],["juliaalphadropout",{"2":{"50":1}}],["juliaalpha",{"2":{"20":1}}],["juliaapply",{"2":{"14":1,"37":1}}],["juliaabstract",{"2":{"13":2}}],["juliagdev",{"2":{"98":1}}],["juliagrucell",{"2":{"52":1}}],["juliagroupnorm",{"2":{"21":1,"55":1}}],["juliaglobalmeanpool",{"2":{"51":1}}],["juliaglobalmaxpool",{"2":{"51":1}}],["juliaglorot",{"2":{"25":2}}],["juliaget",{"2":{"10":1}}],["juliagpu",{"2":{"8":1,"9":1,"59":1}}],["julia",{"0":{"73":1,"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"8":1,"32":6,"39":1,"40":1,"42":1,"44":1,"67":2,"68":1,"69":1,"70":1,"75":2,"76":3,"78":1,"80":1,"94":2,"95":2,"98":1,"102":1,"106":4,"113":2,"114":7,"117":1,"118":1,"123":14,"131":10,"138":2,"139":14,"149":2,"150":14,"158":14,"166":14,"167":1,"168":1,"169":4,"170":2,"171":10,"174":1,"180":14}}],["j",{"2":{"25":1}}],["jimmy",{"2":{"21":1}}],["jld2",{"2":{"133":1,"138":3}}],["jll",{"2":{"123":2,"139":2,"150":2,"158":2,"166":2,"180":2}}],["jl",{"0":{"33":1,"67":1},"1":{"34":1},"2":{"6":2,"9":1,"10":3,"11":5,"18":1,"37":2,"38":1,"44":1,"45":3,"52":1,"59":1,"60":1,"65":1,"67":1,"68":6,"72":1,"75":1,"78":1,"79":4,"89":2,"97":1,"100":3,"102":1,"106":1,"113":1,"115":1,"116":1,"118":4,"122":2,"123":3,"124":4,"127":1,"130":1,"131":2,"132":2,"139":3,"140":1,"143":1,"149":4,"150":3,"158":3,"163":1,"166":3,"167":2,"171":2,"172":1,"175":1,"176":1,"180":3}}],["cdev",{"2":{"98":1,"99":1}}],["circle",{"2":{"175":1,"176":2,"179":4}}],["circumvented",{"2":{"99":1}}],["circular",{"2":{"25":1,"49":1}}],["ci",{"2":{"72":1}}],["cite",{"2":{"69":2}}],["citation",{"0":{"69":1}}],["cnew",{"2":{"52":2}}],["cnew=f⋅cprev+i⋅ghnew=o⋅tanh",{"2":{"52":1}}],["cluster",{"2":{"170":1}}],["clockwise",{"2":{"132":1,"134":4}}],["closest",{"2":{"85":1}}],["cl",{"2":{"103":3,"106":4}}],["clear",{"2":{"41":1,"90":1}}],["classifying",{"2":{"170":1}}],["classify",{"2":{"132":1,"168":1}}],["classifier=st",{"2":{"135":1}}],["classifier",{"0":{"135":1},"2":{"28":1,"31":1,"32":3,"135":11,"169":1}}],["classification",{"0":{"30":1,"33":1,"124":1,"140":1},"1":{"34":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1},"2":{"25":2,"167":1}}],["classical",{"2":{"73":1}}],["classes",{"2":{"31":1,"32":1}}],["class",{"2":{"31":1,"128":5,"145":5,"156":5,"167":1}}],["classtokens",{"2":{"28":1,"31":1}}],["c",{"2":{"39":6,"49":6,"51":14,"52":1,"56":5,"126":1,"135":2,"142":1,"149":6,"154":5,"170":2,"174":4}}],["cell=st",{"2":{"135":1}}],["cell`",{"2":{"135":1}}],["cells",{"2":{"52":1}}],["cell",{"2":{"52":27,"135":10}}],["central",{"2":{"25":1,"149":6}}],["certain",{"0":{"110":1},"1":{"111":1},"2":{"13":1,"14":2,"49":3,"50":2,"53":3,"55":4,"70":1,"92":1,"143":1}}],["cairomakie",{"2":{"160":1,"161":1,"165":1,"167":1,"168":1,"173":1,"175":1,"176":1,"179":2}}],["ca",{"2":{"154":6}}],["cache",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["care",{"2":{"117":1}}],["carry",{"2":{"52":4,"135":3}}],["capabilities",{"2":{"115":1}}],["capture",{"2":{"76":1}}],["catch",{"2":{"85":1,"89":2,"90":2}}],["cat",{"2":{"84":1,"134":1}}],["caveats",{"2":{"25":1}}],["case",{"2":{"21":1,"38":1,"52":19,"63":1,"102":1,"112":1,"122":1,"170":1,"176":1}}],["cases",{"2":{"14":3,"21":2,"25":1,"35":1,"42":1,"44":1,"72":1,"77":1,"91":2,"108":1,"116":1}}],["cause",{"2":{"14":1,"59":1}}],["calculates",{"2":{"51":2}}],["calculate",{"2":{"49":3,"51":2}}],["calculated",{"2":{"13":2}}],["calculations",{"2":{"45":1}}],["callback",{"2":{"177":3,"178":1}}],["callable",{"2":{"48":2}}],["called",{"2":{"48":2,"50":3,"94":1,"102":1,"107":1,"109":2,"111":1,"114":2,"135":1}}],["calling",{"2":{"14":1,"169":1}}],["call",{"2":{"14":1,"20":1,"39":1,"50":5,"55":3,"63":1,"67":5,"72":1,"106":4,"117":2,"135":1}}],["calls",{"2":{"14":2}}],["candidates",{"2":{"85":1}}],["cannot",{"2":{"25":1,"71":1,"102":1,"103":1,"109":1}}],["can",{"0":{"112":1},"2":{"9":1,"10":1,"13":3,"14":3,"21":10,"33":1,"37":1,"38":1,"40":1,"42":3,"48":7,"49":10,"51":2,"52":6,"53":6,"54":3,"55":4,"63":1,"67":2,"75":2,"77":1,"78":1,"87":1,"88":2,"89":1,"90":2,"93":1,"95":1,"96":1,"97":1,"99":1,"104":3,"106":1,"107":1,"109":1,"111":1,"112":1,"114":11,"115":2,"117":1,"119":1,"122":2,"135":1,"138":1,"143":2,"146":1,"147":1,"155":1,"169":2,"170":3,"174":1,"176":1}}],["cos",{"2":{"174":2,"175":3,"176":7}}],["coordinates",{"2":{"170":1}}],["cover",{"2":{"108":1}}],["covered",{"2":{"91":1}}],["covariate",{"2":{"21":1}}],["could",{"2":{"102":1,"103":1,"169":1}}],["course",{"2":{"87":1}}],["courville",{"2":{"54":1}}],["coupled",{"2":{"70":1}}],["counterpart",{"2":{"112":1}}],["count",{"2":{"42":1}}],["cores",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["core",{"2":{"44":1,"67":2,"72":1,"100":1,"108":1,"116":1,"123":1,"131":1,"139":1,"149":2,"150":1,"154":5,"155":3,"158":1,"166":1,"171":1,"180":1}}],["correlation",{"2":{"49":2}}],["corresponding",{"2":{"39":2,"41":2,"53":1,"56":2,"68":3,"98":1}}],["corresponds",{"2":{"9":1}}],["corrections",{"2":{"87":1}}],["correctness",{"0":{"68":1},"2":{"65":1}}],["correctly",{"2":{"40":1,"91":1}}],["correct",{"0":{"86":1},"2":{"10":1,"128":3,"145":3,"156":3}}],["colormap=",{"2":{"170":3}}],["color=",{"2":{"161":2,"165":2,"168":2}}],["columns",{"2":{"114":1}}],["column",{"2":{"53":1,"114":4}}],["collects",{"2":{"48":1}}],["collect",{"2":{"42":1,"77":1,"126":2,"134":2,"142":2,"161":1,"170":4}}],["cols",{"2":{"25":1}}],["commit",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["commonly",{"0":{"26":1}}],["common",{"2":{"21":1,"22":1,"41":1,"103":1,"106":1}}],["coming",{"2":{"102":1}}],["come",{"2":{"89":1}}],["comes",{"2":{"48":1,"63":1,"70":1,"72":2}}],["com",{"2":{"52":1}}],["combines",{"2":{"48":1}}],["compress",{"2":{"138":1}}],["comprises",{"2":{"103":1}}],["components",{"2":{"174":4}}],["component",{"2":{"174":7}}],["componentvector",{"2":{"122":1,"149":4,"178":1}}],["componentarray",{"2":{"122":1,"144":1,"146":1,"154":2,"176":1}}],["componentarrays",{"2":{"104":1,"118":1,"141":1,"149":8,"152":1,"169":1,"173":1}}],["compose",{"2":{"169":1}}],["composedlinear",{"2":{"103":3}}],["composed",{"2":{"37":1,"52":1}}],["composability",{"2":{"167":1}}],["composition",{"2":{"21":1,"103":1}}],["completeness",{"2":{"146":1}}],["completely",{"2":{"52":1,"68":1,"70":1}}],["complete",{"2":{"51":2,"52":1}}],["complexity",{"2":{"80":1,"118":1}}],["complex",{"2":{"37":1,"42":1,"106":1}}],["complexf64",{"2":{"26":8}}],["complexf32",{"2":{"26":8,"106":2}}],["complexf16",{"2":{"26":8}}],["compiler",{"2":{"70":2}}],["compile",{"2":{"48":1,"67":1,"73":1}}],["computing",{"2":{"119":1}}],["computationally",{"2":{"118":1}}],["computational",{"2":{"118":1}}],["computation",{"2":{"48":2,"55":1,"68":3}}],["computer",{"0":{"29":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":1},"2":{"21":1,"25":2}}],["computes",{"2":{"21":3,"25":1,"32":1,"55":4,"109":1}}],["computed",{"2":{"20":1,"21":1,"37":3,"48":4,"54":1,"55":2,"68":2,"119":4,"120":2,"121":2,"164":1}}],["compute",{"2":{"17":1,"36":1,"37":4,"90":1,"118":1,"119":1,"120":1,"121":2,"122":1,"129":1,"136":1,"137":3,"157":1,"165":1,"169":1,"174":4,"175":1,"176":1,"177":1,"179":1}}],["compare",{"2":{"68":1}}],["comparisons",{"2":{"68":2}}],["comparison",{"2":{"48":1}}],["compatibility",{"2":{"44":1,"100":1}}],["compatible",{"2":{"11":1,"40":1,"68":1,"100":1,"146":1}}],["compactluxlayer",{"2":{"42":1}}],["compact",{"0":{"42":1},"2":{"36":1,"42":10,"63":1,"77":4}}],["codebases",{"2":{"63":1}}],["code",{"2":{"21":2,"35":1,"42":1,"44":1,"45":1,"55":2,"59":1,"77":1,"89":2,"97":1,"105":1,"111":1,"112":1,"113":1,"122":1,"149":2,"168":1,"172":2}}],["copying",{"2":{"135":1}}],["copy",{"2":{"14":1,"109":2,"116":5}}],["conclusion",{"0":{"91":1}}],["concatenate",{"2":{"84":1}}],["concatenated",{"2":{"52":5}}],["concrete",{"0":{"83":1},"1":{"84":1,"85":1,"86":1,"87":1},"2":{"104":1,"109":1}}],["conjunction",{"2":{"72":1}}],["connection",{"2":{"48":23}}],["connected",{"2":{"25":2,"31":2,"32":3,"53":3}}],["conform",{"2":{"48":1}}],["configuration",{"2":{"31":1}}],["config",{"2":{"31":2,"32":2}}],["conference",{"2":{"21":2,"25":6}}],["conversely",{"2":{"118":1}}],["converts",{"2":{"56":1,"62":3}}],["converted",{"2":{"48":1}}],["converting",{"2":{"45":3}}],["convert",{"2":{"14":1,"44":2,"45":1,"109":1,"112":1,"127":1,"143":1}}],["convention",{"2":{"116":1}}],["conveniently",{"2":{"114":1}}],["convenience",{"2":{"63":1,"165":1}}],["convtranspose",{"2":{"47":1,"49":1}}],["conv",{"2":{"45":2,"47":1,"49":1,"51":2,"108":1,"127":4}}],["convmixer",{"2":{"33":6}}],["convolutions",{"2":{"32":1,"49":7}}],["convolution",{"2":{"25":1,"31":2,"32":7,"49":9}}],["convolutional",{"0":{"49":1},"2":{"25":3,"28":1,"32":3,"49":5}}],["consecutive",{"2":{"48":1}}],["considering",{"2":{"118":1}}],["consider",{"2":{"83":1,"102":1,"104":1,"119":1,"122":1}}],["considered",{"2":{"68":2,"92":1,"97":1}}],["considerations",{"2":{"21":2}}],["consists",{"2":{"48":1}}],["consistency",{"2":{"25":1}}],["constrained",{"2":{"105":1}}],["constructing",{"2":{"120":1}}],["construction",{"2":{"13":1,"56":1}}],["constructured",{"2":{"109":1}}],["constructor",{"2":{"38":1}}],["construct",{"2":{"25":1,"38":1,"40":2,"42":2,"63":1,"71":1,"76":1,"88":1,"103":2,"120":1,"144":1,"169":2}}],["constructed",{"2":{"20":1,"42":1,"102":1}}],["constructs",{"2":{"13":1,"25":2,"38":1}}],["const",{"2":{"90":1,"149":2,"174":6,"175":1,"176":2}}],["constants",{"2":{"20":1,"175":1,"176":1}}],["cond",{"2":{"14":3}}],["conditions",{"2":{"130":1,"175":1,"176":1}}],["condition",{"2":{"12":1,"14":2,"25":1}}],["continua",{"2":{"174":1}}],["contour",{"2":{"170":6}}],["contrib",{"2":{"89":1}}],["controlled",{"2":{"71":1}}],["control",{"2":{"56":2,"113":1}}],["controls",{"2":{"25":1,"49":6,"52":3,"55":8}}],["contrast",{"2":{"9":1}}],["contained",{"2":{"48":1}}],["containerlayer",{"2":{"143":1}}],["containers",{"0":{"48":1},"2":{"149":2}}],["container",{"0":{"103":1},"2":{"13":1,"14":1,"40":1,"103":1,"135":2}}],["contain",{"2":{"13":1,"72":1,"102":2,"135":1}}],["containing",{"2":{"13":3,"21":2,"25":4,"26":24,"37":2,"52":14,"53":1,"71":1}}],["contains",{"2":{"12":1,"14":1,"50":1,"54":1,"61":1}}],["cupti",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["cusparse",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["cusolver",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["customparamtype",{"2":{"38":1}}],["customization",{"2":{"21":1}}],["customabstractexplicitlayer",{"2":{"13":4}}],["custom",{"0":{"77":1,"81":1,"109":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"2":{"13":2,"14":1,"17":1,"21":1,"38":1,"42":1,"72":1,"77":1,"85":1,"86":1,"90":2,"104":1,"116":1,"132":1,"135":1}}],["cufft",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["curand",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["currently",{"2":{"17":1,"40":1,"56":1,"97":1,"106":1}}],["current",{"2":{"9":1,"13":1,"37":1,"38":2,"50":1,"83":1,"116":1,"169":1,"170":1}}],["cublas",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["cu",{"2":{"115":4}}],["cudnn",{"2":{"21":1}}],["cuda",{"0":{"115":1},"2":{"3":2,"9":4,"79":1,"97":1,"98":1,"106":5,"115":7,"123":10,"131":3,"139":10,"141":1,"149":24,"150":10,"152":1,"158":10,"165":24,"166":10,"171":3,"173":1,"180":10}}],["cuarray",{"2":{"21":1,"98":1,"106":2,"115":1,"149":12,"165":12}}],["crude",{"2":{"174":1}}],["crc",{"2":{"90":2}}],["critical",{"2":{"59":1,"97":1}}],["criteria",{"2":{"9":1}}],["cross",{"2":{"49":2,"100":1}}],["crosscor",{"2":{"47":1,"49":1}}],["creating",{"0":{"135":1},"2":{"42":1}}],["created",{"2":{"33":1}}],["create",{"0":{"144":1,"155":1},"2":{"31":1,"32":2,"37":1,"44":1,"48":2,"53":3,"86":1,"90":1,"114":1,"117":1,"120":1,"132":1,"134":3,"135":2,"137":1,"144":2,"146":1,"149":2,"155":2,"157":1,"165":1,"169":2}}],["creates",{"2":{"8":1,"14":1,"25":1,"42":1,"52":5,"117":1,"169":1}}],["ch",{"2":{"169":2,"170":1}}],["choice",{"2":{"138":1}}],["chosen",{"2":{"107":1}}],["choose",{"2":{"9":1}}],["chs",{"2":{"49":23,"55":17}}],["chains",{"0":{"45":1},"2":{"45":3,"127":1,"130":1,"169":2}}],["chainrulescore",{"2":{"90":2}}],["chainrules",{"2":{"40":1,"121":1}}],["chain",{"0":{"84":1,"96":1},"2":{"39":2,"41":1,"42":1,"45":2,"47":1,"48":7,"52":2,"54":4,"55":3,"76":3,"83":1,"84":2,"87":3,"89":9,"90":6,"93":2,"94":1,"96":4,"108":2,"127":3,"144":2,"149":12,"155":2,"162":2,"165":2,"169":5,"170":2,"176":3}}],["chain=chain",{"2":{"39":2}}],["channel",{"2":{"51":2,"55":13,"56":3}}],["channels",{"2":{"21":1,"31":3,"32":3,"49":10,"50":2,"55":1,"56":1}}],["changed",{"2":{"111":1}}],["changes",{"2":{"48":9,"54":2,"70":1,"89":1,"108":1}}],["change",{"2":{"8":1,"76":1,"102":1,"146":1,"174":1}}],["chunks",{"2":{"61":1}}],["chunk",{"2":{"28":1,"32":3}}],["christian",{"2":{"21":1}}],["checking",{"2":{"102":1}}],["checks",{"2":{"38":1,"40":1}}],["check=",{"2":{"16":1,"90":2}}],["check",{"2":{"2":1,"5":1,"12":1,"14":4,"16":1,"40":9,"50":3,"55":4,"59":1,"60":1,"68":3,"90":3}}],["cpu=true",{"2":{"146":2}}],["cpus",{"2":{"45":1}}],["cpu",{"2":{"7":1,"9":4,"58":1,"59":3,"72":1,"97":1,"98":6,"99":6,"109":1,"123":2,"130":1,"131":2,"137":1,"138":1,"139":2,"145":3,"146":4,"150":2,"156":4,"158":2,"165":3,"166":2,"171":2,"180":2}}],["mtensor",{"2":{"174":4}}],["m₂",{"2":{"174":6}}],["m₁",{"2":{"174":5}}],["mcse",{"2":{"169":1}}],["mcmcchains",{"2":{"169":1}}],["mcmc",{"2":{"169":1,"170":1}}],["mcclelland",{"2":{"25":1}}],["mvnormal",{"2":{"169":1}}],["mnist",{"0":{"124":1,"126":1,"140":1,"142":1,"151":1},"1":{"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1},"2":{"125":1,"126":2,"141":1,"142":2,"153":1,"157":13}}],["mse",{"2":{"122":4,"164":2}}],["md",{"2":{"85":1,"122":1}}],["mdash",{"2":{"2":1,"5":1,"8":1,"9":2,"10":4,"13":2,"14":7,"15":2,"16":5,"17":2,"20":2,"21":4,"25":8,"26":24,"31":5,"32":6,"37":3,"38":3,"39":2,"40":2,"41":1,"42":1,"44":3,"45":3,"48":6,"49":3,"50":3,"51":6,"52":5,"53":4,"54":6,"55":5,"56":2,"59":2,"61":3,"62":3,"63":1,"64":1,"67":1,"68":1}}],["my",{"2":{"130":1}}],["mybias",{"2":{"104":3}}],["myinputtype",{"2":{"82":3}}],["myweight",{"2":{"38":1,"104":4}}],["m2",{"2":{"44":3}}],["m",{"2":{"44":3,"48":1,"62":6,"143":2,"147":2,"168":15,"174":4,"175":5,"176":3}}],["mldatasets",{"2":{"125":1,"141":1,"152":1}}],["mlutils",{"2":{"32":1,"125":1,"133":1,"134":3,"141":1,"152":1}}],["mlp",{"0":{"159":1},"1":{"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1},"2":{"31":3,"42":1,"77":1,"155":1,"159":1}}],["ml",{"2":{"27":1,"114":1}}],["mutability",{"0":{"116":1}}],["mutables",{"2":{"109":1}}],["mutable",{"2":{"102":1,"109":1}}],["mutated",{"2":{"116":2,"117":1}}],["mutate",{"2":{"116":1}}],["mutates",{"2":{"14":1}}],["mutation",{"2":{"116":2,"122":1}}],["mutations",{"2":{"70":1,"72":2}}],["much",{"2":{"72":1,"170":1}}],["multilayer",{"2":{"159":1}}],["multigate",{"2":{"58":1,"61":1}}],["multirnncell",{"2":{"52":1}}],["multiply",{"2":{"114":1}}],["multiple",{"2":{"48":1,"52":1,"55":1,"97":1,"170":1}}],["multiplication",{"2":{"25":1}}],["multi",{"2":{"31":1}}],["multiheadattention",{"2":{"28":1,"31":1}}],["must",{"2":{"8":1,"10":1,"13":1,"21":1,"25":4,"37":2,"39":2,"41":2,"44":1,"45":2,"48":3,"49":2,"50":3,"52":6,"53":4,"55":1,"56":1,"63":1,"71":4,"72":1,"100":1,"102":1,"105":1,"120":1,"164":1,"174":4}}],["minimized",{"2":{"177":1}}],["minimizes",{"2":{"122":1}}],["minimally",{"2":{"172":1}}],["minibatch",{"2":{"126":1,"134":1,"142":1}}],["mini",{"2":{"120":1}}],["mig",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["migrating",{"0":{"108":1},"1":{"109":1,"110":1,"111":1,"112":1}}],["migration",{"2":{"102":1}}],["might",{"2":{"14":1,"44":1,"48":1,"54":1,"63":1,"91":1,"97":1,"102":2,"114":1,"116":1,"130":1,"148":1}}],["mirza",{"2":{"54":1}}],["mismatch",{"0":{"89":1}}],["mistakes",{"2":{"72":1}}],["misc",{"0":{"54":1}}],["miscellaneous",{"0":{"10":1,"61":1},"2":{"48":1}}],["missing",{"2":{"21":1,"55":1}}],["masses",{"2":{"174":1}}],["mass2",{"2":{"174":6}}],["mass1",{"2":{"174":7}}],["mass",{"2":{"174":14,"175":2,"176":1,"177":1,"179":1}}],["mass=1",{"2":{"174":3}}],["massachusetts",{"2":{"69":1}}],["massive",{"2":{"59":1}}],["mask",{"2":{"20":8,"50":10}}],["magnitude",{"2":{"55":2}}],["materialize",{"2":{"121":1}}],["matrices",{"2":{"53":1}}],["matrix",{"2":{"25":17,"42":2,"53":6,"54":1,"77":1,"85":5,"86":1,"87":1,"89":5,"90":13,"98":1,"106":4,"114":13,"118":3}}],["matches",{"2":{"136":2}}],["matched",{"2":{"85":1}}],["matching",{"2":{"85":1}}],["match",{"2":{"52":5,"105":2}}],["maxiters=1000",{"2":{"178":1}}],["maximum",{"2":{"51":1,"54":1}}],["max",{"2":{"51":4,"54":1,"68":1,"170":1}}],["maxout",{"2":{"47":1,"54":5}}],["maxpool",{"2":{"45":2,"47":1,"51":4,"127":4}}],["maybe",{"2":{"118":1}}],["may",{"2":{"42":3,"56":2,"130":1}}],["macro",{"2":{"39":3,"40":1,"42":1,"67":2,"68":1,"77":2}}],["machine",{"2":{"20":1,"21":1,"25":1,"80":1,"114":1,"130":1,"174":1}}],["made",{"2":{"37":1,"55":1,"102":1}}],["making",{"2":{"37":1,"70":1}}],["makes",{"2":{"39":2,"52":1,"72":1}}],["make",{"2":{"16":2,"41":1,"52":1,"70":2,"72":1,"89":1,"102":1,"104":1,"108":1,"114":1,"118":1,"134":1,"169":1,"176":2}}],["markeralpha=0",{"2":{"175":1,"176":2,"179":4}}],["markershape=",{"2":{"175":1,"176":2,"179":4}}],["markersize=16",{"2":{"168":2}}],["markersize=12",{"2":{"161":1,"165":2,"175":1,"176":2,"179":4}}],["marked",{"2":{"35":1,"62":3}}],["mark",{"2":{"68":1,"176":1}}],["marks",{"2":{"67":2}}],["martens",{"2":{"25":1}}],["main",{"0":{"25":1},"2":{"65":1,"85":3,"86":1,"87":1,"120":2,"121":1,"135":1,"137":2,"143":1,"149":12,"165":2}}],["maintaining",{"2":{"21":1}}],["managing",{"0":{"117":1},"2":{"117":1}}],["manager",{"2":{"75":1}}],["management",{"0":{"59":1,"97":1,"98":1,"99":1},"1":{"98":1,"99":1},"2":{"97":1,"98":1}}],["manage",{"2":{"42":1}}],["mandatorily",{"2":{"102":1}}],["many",{"2":{"31":2,"114":1,"118":1}}],["manually",{"2":{"44":1,"45":1,"64":1,"115":1}}],["manual",{"0":{"99":1},"2":{"14":1,"38":1,"91":1,"92":1,"115":1}}],["manipulation",{"2":{"13":1,"72":1}}],["maps",{"2":{"25":2,"32":2,"51":2,"52":2}}],["mapping",{"2":{"25":7}}],["map",{"0":{"39":1},"2":{"13":1,"36":2,"39":9,"52":4,"93":2,"94":1,"170":1}}],["moment",{"2":{"174":1}}],["momentum=0",{"2":{"55":1}}],["momentum",{"2":{"21":3,"55":1}}],["motion",{"2":{"174":1,"175":1,"176":1}}],["motivating",{"2":{"14":1,"63":1}}],["monolithic",{"2":{"72":1}}],["month",{"2":{"69":1}}],["modified",{"2":{"84":1}}],["modify",{"2":{"55":1}}],["modules=",{"2":{"67":2}}],["modules",{"2":{"67":4}}],["modes",{"2":{"56":1}}],["mode",{"0":{"111":1},"2":{"21":2,"36":1,"40":6,"50":6,"55":3,"56":4,"68":5,"88":2,"89":2,"90":2,"111":4,"118":1,"119":4,"120":2,"174":1}}],["models",{"0":{"29":1,"30":2,"33":1,"44":2,"45":1,"87":1,"88":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":2,"89":1,"90":1,"91":1},"2":{"14":1,"22":1,"27":1,"33":2,"34":1,"37":1,"42":2,"44":2,"45":2,"63":1,"65":1,"72":2,"73":1,"76":1,"83":1,"88":2,"91":1,"106":1,"114":1,"132":1}}],["model",{"0":{"89":1,"92":1,"127":1,"130":1,"137":1,"138":1,"172":1,"175":1,"176":1},"1":{"93":1,"94":1,"95":1,"96":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"14":8,"30":1,"31":1,"33":1,"37":5,"39":2,"40":2,"41":1,"42":12,"44":6,"45":11,"48":13,"52":3,"55":4,"63":3,"70":1,"76":6,"77":5,"83":1,"84":1,"85":2,"86":2,"87":2,"88":3,"89":17,"90":25,"91":1,"92":1,"93":6,"94":2,"95":2,"96":7,"102":1,"103":5,"108":9,"109":11,"111":1,"112":1,"122":6,"124":1,"127":4,"128":4,"129":5,"130":4,"135":2,"136":2,"137":6,"138":6,"143":7,"144":8,"145":4,"146":13,"147":8,"149":5,"155":4,"156":4,"157":8,"164":3,"165":2,"169":7,"170":1,"174":7,"175":4,"176":11,"177":1,"178":1,"179":2}}],["mouthful",{"2":{"41":1}}],["move",{"2":{"35":1,"115":1,"116":1}}],["mobilenet",{"2":{"33":12}}],["more",{"2":{"13":1,"25":2,"39":1,"44":1,"45":2,"48":1,"56":1,"80":1,"114":3,"118":1,"120":1,"135":1,"136":1,"170":1}}],["most",{"2":{"6":1,"10":1,"13":1,"14":1,"17":1,"21":1,"25":1,"35":1,"40":1,"63":1,"108":1,"176":1}}],["mechanics",{"2":{"174":1}}],["mechanism",{"2":{"72":1}}],["mem",{"2":{"98":1,"106":2,"115":1,"149":12,"165":12}}],["memory=false",{"2":{"52":1}}],["memory=zeros32",{"2":{"52":1}}],["memory",{"2":{"52":20,"123":2,"131":1,"135":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["mentioned",{"2":{"78":1,"102":1}}],["merge",{"2":{"38":1,"84":1,"135":1}}],["mersennetwister",{"2":{"25":3,"85":1,"106":2,"161":1}}],["meanpool",{"2":{"47":1,"51":4}}],["means",{"2":{"25":1,"35":1,"73":1,"87":1,"102":1,"104":1,"114":1,"116":1}}],["meaningless",{"2":{"20":1}}],["mean",{"2":{"20":2,"21":9,"25":2,"32":1,"34":1,"51":5,"55":8,"89":1,"90":2,"93":1,"96":1,"104":1,"122":1,"128":1,"136":1,"145":1,"156":1,"164":1,"169":1,"170":1}}],["meant",{"2":{"0":1,"3":1,"37":1,"40":1,"107":1}}],["met",{"2":{"25":1}}],["metalhead",{"0":{"33":1},"1":{"34":1},"2":{"31":1,"32":2,"33":1,"44":1}}],["metal",{"2":{"9":1,"10":1,"76":1,"77":1,"79":2,"97":3}}],["methodinstance",{"2":{"149":2}}],["methoderror",{"2":{"85":1}}],["methods",{"2":{"56":1,"98":1,"107":2,"143":1,"144":1,"153":1,"156":1,"169":1,"174":2}}],["method",{"2":{"2":1,"5":1,"17":1,"25":3,"44":1,"45":1,"61":1,"82":1,"85":1,"90":1,"120":1,"126":1,"128":1,"129":1,"134":1,"136":1,"142":1,"145":1,"155":1,"161":1,"164":1,"169":1,"170":2,"174":3,"176":1,"177":2}}],["fθ",{"2":{"170":1}}],["fn",{"2":{"144":1}}],["fn=neuralode",{"2":{"144":1}}],["f`",{"2":{"122":4}}],["fw",{"2":{"122":1}}],["fwiw",{"2":{"103":1}}],["f2",{"2":{"102":2}}],["f1",{"2":{"102":2}}],["f16",{"2":{"58":1,"62":1}}],["f64",{"2":{"58":1,"62":1}}],["f32",{"2":{"58":1,"62":1}}],["f=σ",{"2":{"52":1}}],["f",{"2":{"39":3,"42":1,"48":6,"54":6,"67":2,"68":3,"107":1,"109":1,"119":3,"120":8,"121":7,"122":3}}],["fcsize",{"2":{"31":2,"32":2}}],["fetch",{"2":{"104":1,"161":1}}],["feel",{"2":{"102":1}}],["feedforward",{"2":{"25":2,"169":1}}],["fed",{"2":{"52":2}}],["few",{"2":{"48":1,"70":1,"114":1,"118":1}}],["features",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1},"2":{"35":5,"65":1,"71":1,"126":1,"142":1}}],["feature",{"2":{"25":2,"32":2,"35":2,"49":2,"51":4,"55":3,"91":1,"114":1}}],["func",{"2":{"39":1}}],["functor",{"2":{"62":3,"109":2}}],["functors",{"2":{"13":1,"39":1,"62":3,"109":1,"167":1}}],["function=zeros32",{"2":{"52":1}}],["functions",{"0":{"25":1,"128":1,"145":1,"156":1,"174":1},"2":{"13":1,"37":1,"44":1,"45":1,"48":1,"52":4,"62":1,"70":1,"71":2,"72":1,"97":2,"98":1,"102":3,"109":1,"114":1,"116":1,"174":1}}],["function",{"0":{"82":1,"164":1},"2":{"8":1,"9":2,"10":4,"14":11,"15":2,"16":5,"17":3,"20":2,"21":4,"25":10,"26":24,"30":1,"31":2,"32":6,"33":2,"37":12,"38":3,"39":7,"41":1,"42":5,"45":1,"48":3,"49":6,"52":7,"53":6,"54":6,"55":4,"56":3,"59":5,"61":3,"62":3,"63":1,"64":1,"67":1,"68":2,"72":1,"77":2,"84":1,"86":1,"90":2,"93":1,"94":3,"95":2,"98":3,"102":3,"103":1,"104":1,"107":1,"109":2,"112":1,"115":2,"117":1,"119":1,"120":7,"121":1,"122":3,"126":1,"128":3,"129":1,"134":1,"136":3,"142":1,"143":3,"144":1,"145":3,"146":2,"147":2,"153":2,"154":4,"155":1,"156":3,"161":2,"164":5,"165":2,"168":1,"169":5,"170":3,"174":16,"176":2,"177":6}}],["functionalities",{"2":{"40":1}}],["functionality",{"0":{"40":1},"2":{"11":1,"37":1,"52":1,"78":1,"100":3,"115":1}}],["functional",{"2":{"1":1,"2":2,"4":1,"5":2,"9":4,"10":1,"99":2,"115":2,"123":3,"131":2,"139":3,"150":3,"158":3,"166":3,"171":2,"180":3}}],["fully",{"2":{"25":2,"31":2,"32":3,"53":2}}],["friendly",{"2":{"70":2}}],["framework",{"2":{"70":1,"72":1,"100":1,"113":1,"116":1,"124":1}}],["frameworks",{"0":{"43":1},"1":{"44":1,"45":1},"2":{"49":1,"52":1,"70":3,"73":1,"100":2,"114":1,"176":1}}],["fragile",{"2":{"21":1}}],["frozen",{"2":{"38":8,"93":9,"96":4}}],["frozenlayer",{"2":{"36":1,"38":7}}],["fromfluxadaptor",{"2":{"44":5,"112":1}}],["from",{"0":{"33":1,"108":1},"1":{"34":1,"109":1,"110":1,"111":1,"112":1},"2":{"20":1,"25":6,"26":12,"37":3,"39":1,"44":1,"45":1,"48":1,"50":1,"52":10,"55":2,"72":1,"76":1,"97":1,"102":1,"104":1,"114":1,"122":2,"124":1,"135":1,"140":1,"149":2,"159":1,"161":1,"163":1,"167":1,"169":3,"170":4,"172":2,"174":3,"176":1}}],["freezing",{"0":{"38":1,"92":1,"93":1,"94":1,"95":1,"96":1},"1":{"93":1,"94":1,"95":1,"96":1},"2":{"92":1,"94":1,"95":2,"96":1}}],["freeze",{"2":{"36":1,"38":4,"92":1,"93":6,"94":6,"95":5,"96":1}}],["free",{"2":{"25":1,"174":1}}],["flat",{"2":{"146":1}}],["flattenlayer",{"2":{"45":1,"47":1,"54":1,"127":2,"144":1,"149":6,"155":1}}],["flattened",{"2":{"44":1,"48":1,"54":2,"167":1}}],["flattens",{"2":{"32":1,"54":1}}],["flatten",{"2":{"28":1,"32":2,"54":1}}],["flexibility",{"2":{"104":1}}],["flexible",{"2":{"13":1}}],["fluxlinear",{"2":{"109":5}}],["fluxlayer",{"2":{"44":2}}],["flux",{"0":{"44":1,"72":1,"108":1,"112":1},"1":{"109":1,"110":1,"111":1,"112":1},"2":{"33":1,"44":11,"45":1,"52":3,"53":1,"70":1,"72":3,"102":2,"108":3,"109":5,"111":4,"112":1,"113":1,"172":1}}],["floating",{"0":{"62":1},"2":{"62":3}}],["float64",{"2":{"21":1,"25":1,"26":8,"62":1,"114":5,"117":1,"169":13,"175":1,"176":5,"177":1,"178":2}}],["float32",{"2":{"21":1,"25":3,"26":8,"31":1,"44":1,"45":1,"62":2,"76":19,"85":6,"86":3,"87":3,"89":9,"90":27,"93":10,"96":6,"98":3,"99":1,"102":2,"103":2,"104":3,"106":5,"108":2,"114":8,"115":1,"119":5,"120":6,"121":8,"122":8,"126":1,"134":1,"142":1,"149":41,"161":1,"165":32,"168":8,"176":7}}],["float16",{"2":{"21":3,"26":8,"62":1}}],["fashionmnist",{"0":{"151":1},"1":{"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1},"2":{"153":1,"157":13}}],["faster",{"2":{"21":1,"32":1,"49":3,"53":3,"55":4}}],["fast",{"2":{"21":2,"28":1,"32":2,"35":1,"45":1,"49":6,"53":9,"55":12,"76":2,"149":24}}],["familiar",{"2":{"132":1}}],["far",{"2":{"102":1}}],["farley",{"2":{"54":1}}],["fake",{"2":{"90":1}}],["failed",{"2":{"89":1}}],["failure",{"2":{"59":1}}],["failures",{"2":{"44":1}}],["fail",{"2":{"44":1,"68":2}}],["fails",{"2":{"40":1,"67":1}}],["fan",{"2":{"25":6}}],["factor",{"2":{"20":2,"21":8,"25":2,"56":2}}],["fallback",{"2":{"17":1,"21":4,"112":1}}],["false",{"2":{"9":1,"16":1,"20":1,"31":1,"44":1,"48":4,"49":3,"52":10,"53":3,"61":1,"63":2,"68":5,"141":1,"143":2,"147":2,"149":6,"152":1,"173":1,"177":1}}],["fmaps",{"2":{"14":1}}],["fmap",{"2":{"12":1,"13":1,"14":2,"39":1,"169":1}}],["figure",{"2":{"161":1,"165":1,"168":1,"175":1,"176":1,"179":2}}],["figured",{"2":{"90":1}}],["fig",{"2":{"161":3,"165":3,"168":3,"170":6,"175":3,"176":3,"179":6}}],["fit",{"2":{"159":1,"170":1}}],["fitting",{"0":{"159":1},"1":{"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1}}],["fixing",{"2":{"106":1}}],["fix",{"2":{"89":1,"90":2}}],["fix2",{"2":{"56":1}}],["fix1",{"2":{"50":1,"54":1,"144":1,"149":6,"176":2}}],["fixed",{"2":{"20":1,"63":5,"89":4,"116":1}}],["fine",{"2":{"103":1}}],["finish",{"2":{"88":1}}],["finite",{"2":{"68":2}}],["finitedifferences",{"2":{"68":2}}],["findmax",{"2":{"170":1}}],["find",{"2":{"42":1,"91":1,"122":1,"170":1}}],["finally",{"0":{"130":1},"2":{"42":1,"102":1,"103":1,"114":1,"122":1,"135":1,"165":1,"179":1}}],["final",{"2":{"17":1,"157":3}}],["fill",{"2":{"90":1,"114":1}}],["filters",{"2":{"32":4}}],["filter",{"2":{"25":1}}],["file",{"2":{"8":1,"98":3}}],["fields",{"2":{"48":10,"54":2,"104":1}}],["field",{"2":{"14":1,"44":1,"61":1,"135":1}}],["fieldnames",{"2":{"13":1,"135":1}}],["first",{"2":{"9":1,"14":1,"32":1,"41":1,"42":3,"48":1,"51":2,"54":1,"90":4,"98":1,"100":1,"102":2,"104":2,"108":1,"109":1,"116":1,"117":2,"119":1,"120":1,"128":1,"130":1,"135":3,"145":1,"165":1,"167":1,"168":2,"170":3,"175":1,"176":2,"177":1,"179":1}}],["four",{"2":{"114":1}}],["found",{"2":{"9":1,"69":1}}],["focus",{"2":{"73":1}}],["foldl",{"2":{"58":1,"61":3}}],["follow",{"2":{"100":2}}],["follows",{"2":{"48":1}}],["following",{"2":{"9":1,"62":1,"93":1,"97":1,"108":1,"135":1,"170":1}}],["forget",{"2":{"88":1}}],["formulas",{"2":{"174":1}}],["format",{"2":{"114":1}}],["formats",{"2":{"48":4,"54":1}}],["form",{"2":{"42":1,"53":1,"116":2}}],["forwarddiff",{"2":{"68":2,"118":2,"119":4,"120":9}}],["forwarded",{"2":{"67":1}}],["forward",{"2":{"40":1,"42":4,"53":2,"61":1,"68":3,"77":1,"90":1,"91":1,"118":1,"119":2,"120":2,"169":1,"170":5}}],["forbidden",{"2":{"25":1}}],["forces",{"2":{"72":1}}],["force",{"2":{"9":3,"44":4}}],["for",{"0":{"73":1,"87":1,"113":1,"177":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"0":1,"3":1,"6":1,"8":1,"9":3,"10":2,"11":1,"13":7,"14":6,"18":1,"20":8,"21":15,"22":1,"25":13,"31":2,"32":1,"35":1,"38":4,"39":2,"40":8,"41":2,"42":7,"44":3,"45":4,"48":11,"49":14,"51":10,"52":17,"53":12,"54":4,"55":17,"56":8,"59":1,"60":1,"62":1,"63":1,"65":2,"67":2,"68":5,"70":1,"71":1,"72":5,"73":1,"76":1,"77":5,"78":1,"79":4,"80":1,"82":1,"84":2,"88":1,"89":1,"90":2,"92":1,"94":2,"97":1,"100":3,"102":6,"103":3,"104":3,"105":1,"106":2,"107":1,"108":1,"111":1,"114":3,"115":2,"116":2,"117":2,"118":5,"119":2,"120":2,"122":6,"124":1,"128":1,"129":2,"130":1,"134":3,"135":4,"136":1,"137":3,"142":1,"145":1,"146":5,"149":2,"156":1,"157":3,"162":1,"165":2,"168":5,"169":2,"170":5,"175":1}}],["l3",{"2":{"179":2}}],["lb",{"2":{"176":1,"179":1}}],["lp",{"2":{"169":1,"170":1}}],["ld",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["llvm",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["ll",{"2":{"113":1,"168":1,"169":1,"176":2}}],["l2",{"2":{"41":2,"103":4,"176":2,"179":2}}],["l2=dense",{"2":{"41":1}}],["l1",{"2":{"41":2,"103":4,"176":2,"179":2}}],["l1=dense",{"2":{"41":1}}],["lecture",{"2":{"140":1}}],["len",{"2":{"134":1}}],["length=datasize",{"2":{"175":1}}],["length=25",{"2":{"170":4}}],["length=50",{"2":{"134":1}}],["length",{"2":{"25":7,"26":24,"41":2,"48":2,"49":3,"51":4,"68":2,"102":8,"103":2,"128":1,"134":5,"136":1,"145":1,"156":1,"169":3,"174":2,"177":1,"179":1}}],["less",{"2":{"54":1,"70":1,"118":1}}],["left",{"2":{"48":2}}],["lets",{"2":{"104":1,"129":1,"146":1,"157":1,"167":1}}],["let",{"2":{"42":1,"88":1,"89":2,"90":7,"93":1,"100":1,"102":1,"103":2,"104":2,"109":2,"113":2,"114":1,"117":1,"119":1,"120":1,"121":1,"122":4,"135":1,"136":1,"138":1,"146":1,"148":1,"161":1,"162":1,"165":1,"169":1,"175":1,"176":1,"177":1,"179":2}}],["level",{"2":{"25":2,"31":1,"32":1}}],["lei",{"2":{"21":1}}],["lempitsky",{"2":{"21":1,"55":1}}],["learn",{"2":{"114":1}}],["learned",{"2":{"72":1}}],["learnable",{"2":{"53":1,"55":4}}],["learning",{"0":{"43":1,"73":1},"1":{"44":1,"45":1},"2":{"20":1,"21":1,"22":1,"25":3,"27":1,"73":1,"80":1,"106":1,"107":1,"114":1,"122":1,"174":1}}],["leads",{"2":{"104":1}}],["leading",{"2":{"56":1}}],["lead",{"2":{"40":1,"44":1,"97":1}}],["leaf",{"2":{"14":1,"76":6,"122":1,"165":8}}],["lt",{"2":{"21":1,"25":3,"33":3,"35":2,"67":1,"78":1,"94":1,"98":1,"103":2}}],["l",{"2":{"14":5,"15":2,"16":2,"38":15,"39":8,"44":3,"45":1,"48":2,"50":1,"76":2,"84":5,"93":2,"94":2,"102":16,"109":4,"122":1,"135":2,"143":4,"146":4,"161":2,"165":2,"175":2,"177":3}}],["lstmcell",{"2":{"47":1,"52":5,"135":3}}],["lstm",{"0":{"132":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1},"2":{"13":1,"52":1,"135":17}}],["later",{"2":{"168":1}}],["latentsize",{"2":{"52":3}}],["lab",{"2":{"146":3}}],["labels",{"2":{"126":2,"134":3,"142":2,"153":4}}],["lazy",{"2":{"109":1,"122":1}}],["lack",{"2":{"73":1}}],["larger",{"2":{"114":1}}],["large",{"2":{"30":1,"33":2,"44":1,"68":6,"72":1,"73":1,"118":1}}],["layerfreezing",{"2":{"95":1}}],["layer2",{"2":{"48":1}}],["layer1",{"2":{"48":1}}],["layernorm",{"2":{"19":1,"21":1,"47":1,"55":4}}],["layer",{"0":{"17":1,"39":1,"42":1,"63":1,"94":1,"101":1,"102":1,"103":1,"143":1,"144":1,"147":1,"154":1},"1":{"102":1,"103":1},"2":{"12":1,"13":10,"14":9,"15":4,"16":6,"17":7,"21":3,"25":2,"31":3,"32":2,"36":2,"38":9,"39":11,"40":15,"42":4,"44":9,"45":7,"48":64,"49":6,"50":3,"51":6,"53":6,"54":8,"55":12,"56":4,"63":6,"72":2,"76":10,"82":2,"84":3,"86":5,"88":2,"89":30,"90":68,"93":9,"94":9,"95":5,"96":8,"102":8,"103":6,"109":5,"122":1,"127":8,"135":1,"149":139,"155":1,"162":2,"165":14,"169":1,"176":20,"178":4}}],["layers",{"0":{"46":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"77":1,"93":1,"109":1,"112":1},"1":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1},"2":{"11":1,"13":7,"14":2,"17":1,"25":8,"28":2,"31":4,"32":10,"39":3,"40":2,"44":3,"48":36,"49":1,"54":12,"63":1,"71":4,"72":4,"77":1,"84":5,"89":9,"90":19,"93":1,"100":1,"102":1,"103":3,"108":1,"109":3,"135":1,"148":1,"149":4,"169":2}}],["last",{"2":{"9":1,"25":1,"52":1,"54":1,"56":2,"63":1,"84":1,"143":1,"168":2}}],["literate",{"2":{"123":2,"131":2,"139":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["little",{"2":{"90":1}}],["lib64",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["libllvm",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["libopenlibm",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["libm",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["libraries",{"2":{"107":1,"123":1,"139":1,"150":1,"158":1,"166":1,"167":2,"169":1,"180":1}}],["library",{"2":{"69":1,"100":1,"108":1,"116":1,"123":1,"131":1,"138":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["lib",{"2":{"89":1,"122":1,"123":2,"131":2,"139":2,"149":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["linewidth=4",{"2":{"179":1}}],["linewidth=2",{"2":{"175":1,"176":2,"179":3}}],["linewidth=3",{"2":{"161":1,"165":1,"170":3}}],["liner",{"2":{"169":1}}],["linesearch=linesearches",{"2":{"178":1}}],["linesearches",{"2":{"173":1}}],["lines",{"2":{"161":1,"165":1,"175":1,"176":2,"179":4}}],["linearalgebra",{"2":{"167":1}}],["linear",{"0":{"53":1,"122":1},"2":{"25":1,"42":4,"54":1,"56":1,"102":12,"103":23,"122":1}}],["linux",{"2":{"123":2,"131":2,"139":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["linking",{"2":{"48":1}}],["like",{"2":{"25":1,"31":1,"42":1,"49":3,"52":3,"65":1,"72":2,"73":1,"100":1,"102":2,"104":1,"107":1,"108":1,"109":2,"114":3,"143":1,"146":1,"168":1,"175":1,"176":1}}],["lighter",{"2":{"100":1}}],["light",{"2":{"22":1}}],["lightweight",{"2":{"6":1}}],["limiter",{"2":{"149":12}}],["limitations",{"2":{"44":1,"72":1}}],["limit",{"2":{"20":1,"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["lists",{"2":{"41":1}}],["listed",{"2":{"35":1}}],["list",{"2":{"10":1,"41":5,"48":4,"54":1,"77":1,"114":1}}],["lower",{"2":{"146":1}}],["log",{"2":{"136":1,"169":1,"170":1}}],["logitbinarycrossentropy",{"2":{"136":1}}],["logitcrossentropy",{"2":{"128":1,"145":1,"156":1}}],["logsoftmax",{"2":{"128":1,"145":1,"156":1}}],["logging",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"167":1,"171":1,"180":1}}],["lot",{"2":{"117":1}}],["loop",{"0":{"129":1},"2":{"165":1}}],["loosely",{"2":{"113":1}}],["lookup",{"2":{"53":1}}],["look",{"2":{"38":1,"56":1,"120":1,"135":1,"140":1}}],["local",{"2":{"42":1,"122":1,"123":2,"130":1,"131":2,"139":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["localpreferences",{"2":{"8":1,"98":2}}],["location",{"2":{"40":3,"89":4,"90":10}}],["long",{"2":{"38":1,"44":1,"52":1,"104":1}}],["losses",{"2":{"177":3,"179":3}}],["loss",{"0":{"136":1,"164":1},"2":{"37":4,"42":2,"77":14,"122":19,"128":1,"129":1,"136":2,"137":233,"145":1,"146":3,"156":1,"157":1,"164":6,"165":10,"177":8,"178":1,"179":2}}],["lo",{"2":{"25":2}}],["loader",{"2":{"137":4}}],["loaded",{"2":{"10":1,"98":2,"112":1,"115":1,"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["loadmnist",{"2":{"126":2,"129":1,"142":2,"146":1}}],["loading",{"0":{"126":1,"142":1,"153":1},"2":{"44":1,"45":1,"79":1,"138":1}}],["load",{"2":{"0":1,"3":1,"33":1,"64":1,"65":1,"97":1,"123":1,"126":1,"131":1,"138":1,"139":1,"142":1,"150":1,"153":4,"157":1,"158":1,"166":1,"171":1,"180":1}}],["luxlinear",{"2":{"109":7}}],["luxlib",{"0":{"18":1},"1":{"19":1,"20":1,"21":1},"2":{"19":6,"20":2,"21":4,"67":2}}],["luxflux",{"2":{"108":1,"109":2}}],["luxtestutils",{"0":{"65":1},"1":{"66":1,"67":1,"68":1},"2":{"66":2,"67":2,"68":2}}],["luxdl",{"2":{"52":1,"78":1}}],["luxdeviceutils",{"0":{"6":1},"1":{"7":1,"8":1,"9":1,"10":1},"2":{"6":1,"7":7,"8":1,"9":2,"10":4,"59":1}}],["luxcore",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1,"16":1,"17":1},"2":{"11":2,"12":18,"13":2,"14":7,"15":2,"16":5,"17":2,"100":2}}],["luxcpudevice",{"2":{"9":2,"98":3,"99":2}}],["luxcudadevice",{"2":{"99":1}}],["luxcuda",{"0":{"3":1},"1":{"4":1,"5":1},"2":{"3":2,"4":1,"5":2,"76":1,"77":1,"79":1,"97":1,"99":1,"106":1,"115":3,"123":1,"131":1,"133":1,"139":1,"141":1,"150":1,"152":1,"158":1,"160":1,"166":1,"171":1,"173":1,"180":1}}],["lux",{"0":{"30":1,"44":1,"45":1,"70":1,"72":1,"73":1,"88":1,"100":1,"108":1,"113":1},"1":{"71":1,"72":1,"73":1,"89":1,"90":1,"91":1,"101":1,"102":1,"103":1,"104":1,"105":1,"109":1,"110":1,"111":1,"112":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"0":2,"3":2,"6":1,"10":1,"11":4,"12":1,"13":3,"14":4,"18":1,"27":1,"35":2,"36":12,"37":6,"38":11,"39":10,"40":8,"41":3,"42":10,"44":11,"45":12,"47":40,"48":10,"49":3,"50":7,"51":6,"52":8,"53":4,"54":7,"55":8,"56":2,"58":10,"59":3,"61":3,"62":4,"63":5,"64":1,"65":1,"67":2,"69":1,"70":1,"72":5,"73":2,"75":3,"76":5,"77":3,"78":1,"79":1,"80":1,"82":1,"84":3,"85":1,"86":4,"87":1,"88":3,"89":6,"90":4,"91":1,"93":6,"94":2,"95":2,"96":3,"97":3,"98":1,"100":6,"102":17,"103":8,"104":2,"107":1,"108":3,"109":13,"111":2,"112":2,"113":3,"115":1,"116":1,"117":2,"118":1,"122":3,"123":1,"124":1,"125":1,"127":2,"128":1,"129":3,"130":2,"131":1,"132":2,"133":1,"135":8,"137":4,"139":1,"141":1,"143":3,"144":1,"145":1,"147":6,"149":60,"150":1,"152":1,"154":7,"155":2,"156":1,"157":3,"158":1,"160":1,"164":2,"165":10,"166":1,"167":3,"169":7,"171":1,"173":1,"176":8,"180":1}}],["luxamdgpudevice",{"2":{"99":1}}],["luxamdgpu",{"0":{"0":1},"1":{"1":1,"2":1},"2":{"0":2,"1":1,"2":2,"76":1,"77":1,"79":1,"97":1,"99":1,"115":2,"123":6,"131":2,"133":1,"139":6,"141":1,"150":6,"152":1,"158":6,"160":1,"166":6,"171":2,"173":1,"180":6}}],["s3",{"2":{"179":2}}],["s0025",{"2":{"174":2}}],["s2",{"2":{"165":2,"176":2,"179":2}}],["s1",{"2":{"165":2,"176":2,"179":2}}],["sga0s",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["sgd",{"2":{"122":1}}],["sm",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["smaller",{"2":{"72":1}}],["small",{"2":{"21":1,"30":1,"33":2,"45":1,"72":1,"114":1,"124":1}}],["squared",{"2":{"122":1}}],["square",{"2":{"114":2}}],["sqrt",{"2":{"25":4,"169":1,"175":2}}],["src",{"2":{"89":1,"122":1,"123":1,"139":1,"149":2,"150":1,"158":1,"166":1,"180":1}}],["srivastava",{"2":{"20":1}}],["sz",{"2":{"84":2}}],["szegedy",{"2":{"21":1}}],["slash",{"2":{"121":1}}],["slower",{"2":{"88":1}}],["slowdowns",{"2":{"59":1}}],["slight",{"2":{"118":1}}],["slightly",{"2":{"48":1}}],["slice",{"2":{"21":2,"25":1,"52":1,"55":2}}],["switch",{"2":{"50":3,"118":1}}],["switching",{"0":{"43":1},"1":{"44":1,"45":1}}],["s",{"2":{"48":1,"50":2,"54":1,"55":3,"56":1,"63":1,"72":1,"73":1,"89":1,"90":1,"93":1,"100":1,"102":1,"103":1,"109":1,"113":4,"114":5,"119":1,"122":2,"135":5,"136":1,"138":1,"146":1,"161":3,"162":1,"165":1,"169":2,"175":3}}],["skipped",{"2":{"48":1,"174":1}}],["skip",{"2":{"48":1,"68":4}}],["skipconnection",{"2":{"47":1,"48":3}}],["safely",{"2":{"176":1}}],["saveat=tsteps",{"2":{"175":1,"176":1,"177":1,"179":1}}],["save",{"2":{"138":3,"144":2,"149":12}}],["saving",{"0":{"138":1},"2":{"138":1}}],["sake",{"2":{"122":1,"135":1,"136":1}}],["sampler",{"2":{"169":1}}],["sample",{"2":{"169":3,"170":1}}],["sampled",{"2":{"169":2}}],["samples",{"2":{"122":13,"169":2,"170":2}}],["sampling",{"2":{"167":1}}],["samepad",{"2":{"49":3,"51":2}}],["same",{"0":{"87":1},"2":{"13":1,"20":1,"21":3,"25":1,"41":1,"48":1,"49":3,"51":2,"52":5,"54":1,"55":1,"61":1,"71":2,"77":1,"115":1,"117":1,"121":1,"122":1,"124":1,"143":1}}],["say",{"2":{"55":1,"72":1,"93":1}}],["satisfactory",{"2":{"170":1}}],["satisfying",{"2":{"49":3,"51":4,"102":1}}],["satisfies",{"2":{"45":2,"54":1}}],["saxe",{"2":{"25":1}}],["spiralclassifier",{"2":{"135":5,"137":1}}],["spiral",{"2":{"134":1}}],["spirals",{"2":{"132":1,"134":6}}],["speedup",{"2":{"130":2}}],["spectralnorm",{"2":{"72":1}}],["special",{"2":{"52":1}}],["specialized",{"2":{"42":1,"116":1}}],["specify",{"2":{"42":1,"50":2,"56":1,"95":1,"169":1}}],["specifying",{"2":{"25":1,"42":1,"49":3,"51":2,"55":2,"67":1}}],["specifies",{"2":{"49":5,"51":2,"54":1}}],["specified",{"2":{"9":1,"25":2,"48":8,"53":1,"54":2,"56":1,"98":1,"107":1}}],["specifically",{"2":{"111":1,"114":1}}],["specification",{"0":{"89":1},"2":{"169":1}}],["specifications",{"2":{"17":1,"91":1}}],["specific",{"2":{"14":1,"53":1}}],["splitobs",{"2":{"126":1,"134":1,"141":1,"142":1}}],["split=",{"2":{"126":1,"142":1}}],["split",{"2":{"61":1,"126":2,"134":1,"135":1,"142":2}}],["spliced",{"2":{"52":1}}],["space",{"2":{"52":5}}],["spatial",{"2":{"28":1,"32":2,"49":8,"51":4}}],["sparsity=0",{"2":{"25":1}}],["sparsity",{"2":{"25":5}}],["sparsedifftools",{"2":{"120":1}}],["sparsely",{"2":{"25":3,"53":1}}],["sparse",{"2":{"23":1,"25":2}}],["scientific",{"2":{"174":1}}],["scientificmachinelearning",{"2":{"172":1}}],["scimlsensitivity",{"2":{"141":1,"149":12,"173":1}}],["sciml",{"2":{"63":1,"72":2,"120":1}}],["scatter",{"2":{"161":1,"165":2,"168":2,"175":1,"176":2,"179":4}}],["scalar",{"2":{"119":1,"121":1}}],["scale=ones32",{"2":{"55":4}}],["scaled",{"2":{"25":3}}],["scale",{"2":{"21":12,"47":1,"53":2,"55":20,"56":6,"90":1,"96":1}}],["scaling",{"2":{"20":2,"25":2,"174":6}}],["scratch",{"2":{"122":1,"135":1,"140":1}}],["scope",{"2":{"120":1,"122":1}}],["schwarzschild",{"2":{"175":1}}],["school",{"2":{"69":1}}],["schemes",{"2":{"22":1,"106":1}}],["ship",{"2":{"88":1}}],["shift=",{"2":{"25":1}}],["shifted",{"2":{"25":1}}],["shift",{"2":{"21":1,"25":4,"55":4}}],["shuffle=false",{"2":{"126":1,"134":1,"142":1,"153":1}}],["shuffle=true",{"2":{"126":1,"134":2,"142":1,"153":1}}],["shuffle",{"2":{"56":2,"126":2,"134":2,"142":2}}],["shuffling",{"2":{"56":1}}],["shape",{"2":{"52":16,"54":1,"55":15,"114":1,"122":4}}],["shapedaxis",{"2":{"149":40}}],["shaped",{"2":{"51":6}}],["shate",{"2":{"41":1}}],["sharing",{"2":{"41":7}}],["share",{"2":{"36":1,"41":4}}],["shared",{"2":{"21":2,"41":1}}],["shown",{"2":{"169":1}}],["shows",{"2":{"104":1,"170":1}}],["showerror",{"2":{"85":1}}],["showcase",{"2":{"67":1,"68":1}}],["show",{"2":{"42":1,"68":1,"115":2,"167":1}}],["short",{"2":{"52":1,"118":1,"120":1}}],["shorthand",{"2":{"14":1}}],["shortcut",{"2":{"14":1,"48":1}}],["shouldn",{"2":{"104":1}}],["should",{"0":{"82":1},"2":{"0":1,"3":1,"6":1,"35":1,"38":1,"41":1,"42":1,"49":8,"51":2,"55":1,"56":1,"63":1,"92":1,"97":1,"100":1,"102":2,"103":1,"104":1,"108":1,"109":2,"116":1,"117":1,"140":1,"162":1,"176":1}}],["syntax",{"2":{"114":2,"115":1}}],["symbol=",{"2":{"40":1}}],["symbol",{"2":{"16":1,"55":1,"104":1,"138":1,"149":12,"169":2}}],["systems",{"2":{"20":1,"72":1}}],["system",{"2":{"9":1,"10":1,"97":2,"104":1,"118":1,"175":1,"176":1}}],["sig",{"2":{"169":2}}],["sigmoid",{"2":{"135":1,"169":2}}],["signature",{"2":{"20":1,"39":1}}],["significantly",{"2":{"100":1,"146":1}}],["significant",{"2":{"14":1,"130":1,"148":1}}],["si+1",{"2":{"49":2,"51":2}}],["sided",{"2":{"174":2}}],["side",{"2":{"42":1}}],["size=1000",{"2":{"134":1}}],["sizes",{"2":{"25":2}}],["sized",{"2":{"21":1,"61":1}}],["size",{"0":{"17":1},"2":{"17":4,"21":4,"25":23,"26":72,"31":1,"32":2,"49":24,"51":24,"52":11,"53":16,"54":6,"55":7,"56":8,"68":2,"84":1,"114":1,"122":2,"123":1,"126":3,"131":1,"134":7,"139":1,"142":3,"143":1,"146":1,"150":1,"158":1,"166":1,"169":4,"170":1,"171":1,"174":4,"180":1}}],["sin",{"2":{"174":1}}],["singular",{"0":{"102":1},"2":{"102":1,"103":2}}],["singleton",{"2":{"49":3,"51":2}}],["single",{"2":{"14":1,"49":9,"51":4,"52":9,"109":1,"114":1,"169":1}}],["since",{"2":{"14":1,"25":1,"39":1,"72":1,"82":1,"104":1,"122":1,"135":1,"136":1}}],["simultaneously",{"2":{"104":1}}],["simulate",{"2":{"90":1,"174":1,"175":1,"176":2}}],["simulating",{"0":{"175":1},"2":{"25":1}}],["simplicity",{"2":{"136":1}}],["simplified",{"2":{"102":1}}],["simplest",{"2":{"48":1}}],["simplechainslayer",{"2":{"45":1,"127":1}}],["simplechains",{"0":{"124":1},"1":{"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1},"2":{"45":13,"72":1,"124":3,"125":1,"127":1,"130":2}}],["simple",{"0":{"45":1,"132":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1},"2":{"20":2,"37":1,"42":1,"45":3,"52":1,"98":2,"109":1,"111":1,"113":1,"119":1,"127":1,"130":1}}],["simply",{"2":{"14":1,"62":1,"87":1,"88":1,"95":1,"104":1,"122":1,"169":1}}],["similarly",{"2":{"103":1,"115":1}}],["similar",{"2":{"9":1,"21":1,"52":2,"53":1,"104":1,"108":1,"118":1,"176":1}}],["sorted",{"2":{"80":1}}],["soln",{"2":{"174":13,"175":2,"176":2,"179":2}}],["soln2orbit",{"2":{"174":3}}],["solve",{"2":{"143":1,"147":1,"175":1,"176":1,"177":1,"178":1,"179":1}}],["solver=tsit5",{"2":{"143":1,"147":1}}],["solver",{"2":{"143":4,"147":3}}],["solvers",{"2":{"72":1}}],["solutions",{"2":{"25":1}}],["software",{"2":{"69":2}}],["soft",{"2":{"68":1,"122":1}}],["so",{"2":{"55":1,"76":1,"96":1,"109":1,"143":2,"147":2,"164":1}}],["sooner",{"2":{"35":1}}],["something",{"2":{"120":1}}],["sometimes",{"2":{"114":2}}],["somewhere",{"2":{"44":1,"45":1}}],["some",{"0":{"174":1},"2":{"14":1,"40":1,"42":1,"44":2,"52":1,"88":1,"90":1,"95":1,"103":1,"109":1,"114":1,"146":1}}],["source",{"2":{"2":1,"5":1,"8":1,"9":2,"10":4,"13":2,"14":7,"15":2,"16":5,"17":2,"20":2,"21":4,"25":8,"26":24,"31":5,"32":6,"37":3,"38":5,"39":2,"40":2,"41":1,"42":1,"44":3,"45":3,"48":6,"49":3,"50":3,"51":6,"52":5,"53":4,"54":6,"55":5,"56":2,"59":2,"61":3,"62":3,"63":1,"64":1,"67":1,"68":1,"113":2}}],["stencils",{"2":{"174":2}}],["stepnorm=0",{"2":{"178":1}}],["steps",{"2":{"169":1}}],["step",{"2":{"37":1,"169":3}}],["stime",{"2":{"129":2,"146":2,"157":2}}],["stick",{"2":{"118":1}}],["still",{"0":{"112":1},"2":{"14":1,"45":1,"87":1,"89":1,"97":1,"102":1,"103":1,"135":1,"149":1,"162":1,"170":1}}],["stop=6",{"2":{"170":4}}],["stochastic",{"2":{"71":1,"72":1,"122":1}}],["store",{"2":{"53":1,"71":2,"109":1,"168":1,"176":1,"177":1}}],["stores",{"2":{"50":1,"53":1,"63":1,"109":1,"114":1,"143":1}}],["stored",{"2":{"37":2,"49":2}}],["storing",{"2":{"21":1,"86":1,"109":1}}],["std=1e",{"2":{"176":3}}],["std=0",{"2":{"25":1}}],["stdlib",{"2":{"117":1,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["stdout",{"2":{"85":1}}],["std",{"2":{"21":1,"25":5,"34":1,"169":1,"176":3}}],["stylization",{"2":{"21":1,"55":1}}],["start=false",{"2":{"144":1}}],["start",{"2":{"113":1,"149":6,"167":1}}],["started",{"0":{"74":1,"80":1},"1":{"75":1,"76":1,"77":1,"78":1,"79":1},"2":{"108":1}}],["starting",{"2":{"35":1,"39":1,"96":1,"97":1,"114":1,"147":1}}],["stacktraces",{"0":{"64":1},"2":{"88":1}}],["stacktrace",{"2":{"58":1,"64":2,"89":1}}],["stack",{"2":{"52":2}}],["stabilities",{"2":{"148":1}}],["stability",{"0":{"149":1},"2":{"21":4,"42":1,"55":4,"63":1}}],["stable",{"2":{"32":1,"42":2,"136":1,"149":1}}],["standard",{"2":{"25":3,"26":6,"49":2,"55":1,"76":1,"176":1}}],["static",{"2":{"45":5,"125":1,"127":3,"149":6}}],["statistics",{"2":{"21":2,"25":2,"37":2,"55":4,"125":1,"133":1,"141":1,"152":1,"160":1,"164":1,"169":1}}],["statisfied",{"2":{"14":1}}],["stats=false",{"2":{"55":1}}],["stats=true",{"2":{"55":3,"89":1,"90":2}}],["stats",{"2":{"37":1,"165":1}}],["statefulneuralode",{"2":{"147":4,"148":1,"149":5}}],["statefulluxlayer",{"2":{"58":1,"63":1,"147":2,"169":2,"176":2}}],["stateful",{"0":{"63":1,"147":1,"148":1},"2":{"52":2,"149":6}}],["statefulrecurrentcell",{"2":{"47":1,"52":2}}],["state=ones32",{"2":{"52":1}}],["state=zeros32",{"2":{"52":1}}],["state=false",{"2":{"52":3}}],["state",{"0":{"105":1},"2":{"12":1,"13":1,"14":3,"16":5,"20":2,"21":1,"37":6,"38":2,"44":1,"48":6,"50":4,"52":65,"54":1,"55":4,"63":3,"71":3,"72":3,"76":2,"102":5,"103":2,"105":4,"109":1,"122":5,"129":9,"135":3,"137":9,"157":13,"164":1,"169":2,"176":1}}],["stateless",{"2":{"12":1,"14":1,"54":2}}],["statelength",{"2":{"12":1,"13":1,"16":1,"102":4,"103":1}}],["states",{"0":{"16":1},"2":{"10":1,"13":1,"14":1,"16":2,"37":2,"38":4,"39":4,"40":2,"42":1,"44":1,"45":1,"48":12,"50":3,"52":5,"54":2,"55":4,"62":2,"63":1,"76":2,"77":2,"84":1,"89":2,"90":1,"93":3,"96":1,"102":5,"103":3,"105":1,"109":3,"122":2,"127":1,"129":2,"135":2,"137":2,"143":1,"157":4,"162":1,"164":1,"165":3,"169":1}}],["st",{"2":{"14":4,"16":6,"38":2,"39":11,"40":1,"41":1,"42":8,"44":4,"45":2,"48":4,"52":1,"54":2,"61":3,"63":8,"76":8,"77":9,"82":3,"84":7,"85":2,"86":10,"87":2,"89":5,"90":7,"93":9,"94":7,"95":6,"96":2,"102":7,"103":11,"104":3,"105":2,"108":3,"109":6,"122":9,"128":8,"135":10,"136":4,"137":4,"138":3,"143":4,"144":4,"145":8,"146":10,"147":7,"149":11,"154":14,"156":8,"164":4,"169":2,"176":2}}],["strain",{"2":{"174":5}}],["straight",{"2":{"100":1}}],["strokewidth=2",{"2":{"161":1,"165":2,"168":2,"176":2,"179":4}}],["strokecolor=",{"2":{"161":1,"165":2,"168":2}}],["strongly",{"2":{"116":1}}],["struct",{"2":{"84":1,"102":1,"109":3}}],["structs",{"2":{"62":3}}],["structural",{"2":{"48":1}}],["structures",{"2":{"72":1}}],["structured",{"2":{"52":2,"104":1}}],["structure",{"2":{"13":1,"14":3,"41":1,"53":1,"89":5,"90":13,"102":2,"103":1,"105":1,"109":1,"146":1}}],["stride=window",{"2":{"51":2}}],["stride=1",{"2":{"49":3}}],["stride",{"2":{"49":6,"51":4}}],["string=",{"2":{"39":1,"40":1}}],["string",{"2":{"8":2,"10":1,"93":1,"94":2,"95":2}}],["seaborn",{"2":{"170":3}}],["seamlessly",{"2":{"37":1}}],["seq",{"2":{"134":1}}],["sequentially",{"2":{"48":2,"52":3}}],["sequences",{"2":{"134":1}}],["sequence=true",{"2":{"52":2}}],["sequence",{"2":{"48":1,"52":8,"134":7,"135":3}}],["several",{"2":{"118":1}}],["separately",{"2":{"115":1}}],["separation",{"2":{"72":1}}],["separating",{"2":{"72":1}}],["sensealg=reversediffadjoint",{"2":{"146":1}}],["sensealg=gaussadjoint",{"2":{"146":1}}],["sensealg=interpolatingadjoint",{"2":{"144":1,"146":1}}],["sensealg",{"2":{"144":1,"146":1,"149":6}}],["sensitivities",{"2":{"143":1,"146":1}}],["sensible",{"2":{"72":1}}],["send",{"2":{"80":1}}],["sec",{"2":{"169":1}}],["section",{"2":{"45":1,"48":2,"91":1,"115":1,"174":1}}],["seconds",{"2":{"169":2}}],["seconddimmean",{"2":{"28":1,"32":2}}],["second",{"2":{"20":1,"48":1,"114":1,"174":2}}],["serialization",{"2":{"138":1}}],["seriously",{"2":{"76":1}}],["server",{"2":{"130":1}}],["serves",{"2":{"44":1}}],["sergey",{"2":{"21":1}}],["semantically",{"2":{"48":1}}],["semver",{"2":{"35":1}}],["semi",{"2":{"25":2}}],["self",{"2":{"20":1,"31":1}}],["selu",{"2":{"20":1}}],["selectdim",{"2":{"47":1,"54":1}}],["select",{"2":{"9":3}}],["selection",{"2":{"9":1,"10":1,"98":1,"99":1}}],["selected",{"2":{"9":3,"10":1}}],["selects",{"2":{"9":1}}],["seems",{"2":{"178":2}}],["seeding",{"2":{"76":1}}],["seed",{"2":{"72":1,"76":1,"93":1,"96":1,"102":1,"104":1,"113":1,"117":2,"122":2,"144":1,"161":1,"168":1}}],["see",{"2":{"13":1,"14":2,"20":2,"21":4,"31":1,"32":2,"37":1,"38":1,"39":1,"40":2,"41":1,"44":1,"45":2,"48":4,"50":3,"51":6,"52":4,"54":2,"55":4,"56":1,"63":1,"72":1,"88":1,"89":3,"90":2,"103":1,"114":2,"115":1,"120":1,"130":1,"135":1,"148":1,"170":2,"174":2}}],["session",{"2":{"8":1}}],["setprogress",{"2":{"167":1}}],["setting",{"0":{"177":1},"2":{"49":3,"52":4,"53":3,"90":1}}],["setfield",{"2":{"39":2,"152":1}}],["sets",{"2":{"39":1}}],["setup",{"2":{"12":1,"14":1,"39":2,"41":1,"42":4,"44":1,"45":1,"76":2,"77":2,"85":1,"87":1,"89":2,"90":2,"93":1,"96":1,"102":2,"103":1,"104":1,"108":1,"109":1,"122":2,"144":1,"146":1,"169":1,"176":1}}],["set",{"2":{"8":2,"9":1,"21":2,"25":1,"31":1,"32":2,"38":2,"39":5,"41":1,"42":1,"44":2,"49":2,"50":1,"52":17,"56":3,"59":1,"63":3,"67":3,"90":2,"98":1,"100":1,"120":1,"122":3,"154":2,"167":1}}],["sure",{"2":{"104":1,"176":1}}],["surpassing",{"2":{"25":2}}],["super",{"2":{"174":1}}],["supertype",{"2":{"103":1}}],["suppress",{"2":{"122":1}}],["suppose",{"2":{"170":1}}],["supposed",{"2":{"72":1}}],["supports",{"2":{"10":1,"111":1,"114":1,"115":1}}],["supported",{"2":{"7":1,"9":1,"10":2,"38":1,"44":1,"56":1,"71":2,"97":2,"100":1}}],["support",{"0":{"79":1},"2":{"0":1,"3":1,"10":1,"38":1,"53":1,"73":3,"76":1,"77":1,"79":4,"97":2,"104":1,"111":1}}],["supplied",{"2":{"48":1}}],["subtracts",{"2":{"114":1}}],["subtract",{"2":{"114":1}}],["subtyping",{"2":{"103":1}}],["subtype",{"2":{"102":1,"103":1}}],["sublayers",{"2":{"48":1}}],["suited",{"2":{"73":1}}],["suggests",{"2":{"54":1}}],["summary",{"2":{"109":1,"169":1}}],["sum",{"2":{"42":2,"67":2,"68":1,"77":1,"90":2,"108":2,"109":2,"122":2,"128":2,"136":1,"145":2,"156":2,"174":1,"177":1}}],["success",{"2":{"178":1}}],["successfully",{"2":{"8":1}}],["such",{"2":{"11":1,"14":1,"42":1,"49":3,"51":4,"72":1,"91":1,"107":1}}],["ignore",{"2":{"176":1}}],["ignored",{"2":{"9":1,"25":1,"53":3}}],["ixy",{"2":{"174":2}}],["ixx",{"2":{"174":3}}],["iyy",{"2":{"174":3}}],["iid",{"2":{"169":1}}],["ii+pi+p",{"2":{"49":2,"51":2}}],["i∈",{"2":{"122":1}}],["ih",{"2":{"52":1}}],["i=σ",{"2":{"52":1}}],["i+n",{"2":{"49":2,"51":2}}],["iclr",{"2":{"25":1}}],["ieee",{"2":{"25":2}}],["img",{"2":{"146":3}}],["imgs",{"2":{"126":5,"142":5,"153":4}}],["immutability",{"2":{"117":1}}],["immutable",{"2":{"71":1,"72":1,"116":1}}],["im",{"0":{"116":1}}],["imply",{"2":{"105":1}}],["implements",{"2":{"65":1}}],["implemented",{"2":{"21":1,"44":1,"72":1,"106":1,"109":1}}],["implementation",{"0":{"84":1,"110":1,"147":1},"1":{"111":1},"2":{"17":2,"21":3,"38":1,"48":1,"52":1}}],["implement",{"0":{"154":1},"2":{"13":1,"17":1,"38":1,"102":2,"109":1,"167":1}}],["implementing",{"0":{"109":1},"2":{"13":2,"72":1,"83":1,"140":1,"167":1}}],["imports",{"0":{"125":1,"133":1,"141":1,"152":1,"160":1,"173":1}}],["importing",{"2":{"113":1,"167":1}}],["importantly",{"2":{"114":1,"170":1}}],["important",{"0":{"110":1},"1":{"111":1},"2":{"97":1,"102":1,"109":1}}],["import",{"2":{"42":1,"77":1,"78":1,"125":2,"141":2,"167":1}}],["imported",{"0":{"33":1},"1":{"34":1}}],["images",{"2":{"34":1,"55":3,"56":2,"126":1,"142":1}}],["image",{"2":{"31":1,"49":4}}],["imagenet",{"2":{"25":2}}],["imsize",{"2":{"31":2,"32":2}}],["ioffe",{"2":{"21":1}}],["i",{"2":{"17":1,"25":1,"38":1,"42":1,"44":1,"45":1,"48":8,"49":9,"51":14,"52":3,"53":4,"54":8,"56":2,"63":1,"77":1,"84":3,"105":1,"117":4,"120":1,"122":4,"168":12,"169":7,"170":10}}],["idx",{"2":{"156":4,"157":11}}],["ideal",{"2":{"130":1}}],["identity",{"2":{"23":1,"25":17,"48":1,"85":2,"149":6,"165":1,"176":1}}],["id",{"2":{"9":7}}],["ifelse",{"2":{"136":1}}],["if",{"2":{"2":1,"5":1,"8":2,"9":8,"11":1,"14":5,"17":3,"20":5,"21":4,"38":3,"39":2,"40":5,"41":2,"42":2,"44":2,"48":21,"49":6,"50":10,"52":13,"53":11,"54":3,"55":16,"56":2,"61":3,"63":4,"67":1,"68":3,"69":2,"72":1,"76":1,"89":1,"90":1,"91":1,"93":1,"94":2,"95":2,"97":1,"98":4,"99":1,"100":1,"102":3,"103":2,"104":3,"106":2,"107":2,"111":1,"112":1,"115":2,"117":1,"118":1,"122":1,"123":2,"131":2,"139":2,"150":2,"158":2,"165":1,"166":2,"171":2,"174":3,"180":2}}],["iterators",{"2":{"135":1}}],["iterations",{"2":{"122":12,"169":2}}],["iteration",{"2":{"83":1,"117":8,"170":1,"177":1,"179":1}}],["iteratively",{"2":{"48":1}}],["iterate",{"2":{"35":1}}],["ith",{"2":{"48":1}}],["itself",{"2":{"89":1}}],["its",{"2":{"14":1,"51":2,"53":1,"54":1,"55":1,"72":1,"170":1}}],["it",{"2":{"0":1,"3":1,"13":2,"14":6,"17":1,"20":1,"21":2,"25":3,"35":1,"37":1,"38":1,"39":2,"41":1,"42":1,"44":3,"48":6,"49":5,"51":2,"52":3,"55":7,"56":4,"64":1,"65":2,"68":1,"69":1,"70":1,"72":3,"75":1,"77":1,"82":1,"88":2,"89":1,"90":3,"98":1,"100":3,"102":2,"103":4,"104":4,"113":1,"114":2,"115":1,"116":2,"117":2,"120":3,"122":1,"135":4,"136":2,"169":2,"174":1,"176":2}}],["in2",{"2":{"53":6}}],["in12",{"2":{"53":3}}],["in1",{"2":{"53":6}}],["injection",{"2":{"48":5}}],["ingores",{"2":{"44":1}}],["ingredient",{"2":{"21":1,"55":1}}],["inside",{"2":{"39":2,"42":1,"59":1,"94":1,"97":1,"109":3}}],["institute",{"2":{"69":1}}],["instabilities",{"2":{"44":1}}],["instance",{"2":{"21":3,"55":3,"169":1}}],["instancenorm",{"2":{"19":1,"21":1,"47":1,"55":5}}],["installed",{"2":{"115":1}}],["installation",{"0":{"75":1},"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["install",{"2":{"0":1,"3":1,"75":1,"76":1,"78":1}}],["instead",{"2":{"6":1,"14":1,"38":1,"39":1,"42":1,"44":1,"59":2,"67":1,"68":1,"82":1,"83":1,"95":1,"100":1,"104":1,"109":2,"114":1,"135":1,"140":1}}],["inner",{"2":{"38":3,"40":1,"94":1}}],["independent",{"2":{"100":1}}],["indexing",{"2":{"48":1,"54":1}}],["indexed",{"2":{"9":2,"54":1,"80":1}}],["index",{"0":{"1":1,"4":1,"7":1,"12":1,"19":1,"23":1,"28":1,"36":1,"47":1,"58":1,"66":1},"2":{"48":1,"53":1,"54":2,"96":1,"170":1}}],["individual",{"2":{"54":1}}],["individually",{"2":{"48":1,"56":2}}],["indices",{"2":{"53":1}}],["indicating",{"2":{"32":1}}],["incase",{"2":{"176":1}}],["inconvenient",{"2":{"82":1}}],["incorrect",{"0":{"89":1},"2":{"68":1,"88":1,"91":1}}],["inchannels",{"2":{"31":2,"32":2}}],["included",{"2":{"25":1,"72":1}}],["include",{"2":{"13":1,"14":1,"25":1,"32":2}}],["initiliazed",{"2":{"55":8}}],["initilly",{"2":{"50":1}}],["initializing",{"0":{"106":1},"1":{"107":1}}],["initialize",{"0":{"144":1,"155":1},"2":{"25":1,"76":1,"77":1,"122":2,"161":1,"169":1}}],["initialized",{"2":{"25":5}}],["initializers",{"2":{"25":1}}],["initializer",{"2":{"25":1,"52":10,"53":7}}],["initialization",{"0":{"60":1},"2":{"22":1,"25":3,"45":1,"49":6,"60":1,"106":1,"109":1,"135":1,"176":1}}],["initial",{"2":{"15":1,"16":1,"48":1,"52":11,"109":1,"122":1,"135":1,"175":1,"176":1,"178":2}}],["initialstates",{"2":{"12":1,"13":1,"14":1,"16":1,"102":1,"109":2,"135":1}}],["initialparameters",{"2":{"12":1,"13":1,"14":1,"15":1,"102":1,"109":2,"135":1,"154":3}}],["init=lux",{"2":{"31":1}}],["init",{"2":{"23":2,"25":7,"31":1,"49":12,"52":26,"53":20,"55":16,"58":1,"61":6,"102":10,"107":8,"109":4,"135":2,"176":3}}],["inv",{"2":{"174":1}}],["investigate",{"2":{"148":1}}],["inverse",{"2":{"20":2}}],["involving",{"2":{"63":1}}],["invokes",{"2":{"39":1}}],["invoked",{"2":{"9":1,"135":1}}],["invalid",{"2":{"55":1}}],["invp",{"2":{"20":4}}],["inference",{"0":{"111":1},"2":{"40":1,"50":3,"55":6,"59":1,"69":1,"111":1,"169":2}}],["informs",{"2":{"103":1}}],["information",{"2":{"20":1,"40":1,"71":1}}],["info",{"2":{"38":1,"89":8,"90":20,"97":1,"99":1,"104":1,"123":2,"131":2,"139":2,"150":2,"158":2,"166":2,"167":2,"171":2,"180":2}}],["infinity",{"2":{"20":1}}],["input",{"0":{"81":1,"87":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"2":{"14":2,"17":1,"20":3,"21":10,"25":4,"31":5,"32":5,"38":2,"40":2,"42":1,"45":2,"48":31,"49":10,"50":2,"51":4,"52":16,"53":12,"54":5,"55":13,"56":5,"63":1,"76":1,"83":1,"85":1,"89":6,"90":14,"102":1,"105":2,"107":1,"120":1,"127":1,"135":1,"143":1,"176":1}}],["inputs",{"2":{"14":2,"17":1,"21":1,"37":1,"39":1,"40":1,"48":10,"49":3,"50":3,"51":6,"52":9,"53":1,"54":5,"55":5,"56":2,"63":1,"68":1,"71":1,"121":1,"143":2,"164":1,"169":1,"176":1}}],["inputsize",{"2":{"12":1,"17":1,"52":1}}],["int64",{"2":{"114":3,"116":2,"121":1,"149":6}}],["intro",{"2":{"113":1}}],["introduces",{"2":{"113":1}}],["introduce",{"2":{"90":2}}],["introduced",{"2":{"25":1}}],["introductory",{"2":{"80":1}}],["introducing",{"2":{"44":1}}],["intentionally",{"2":{"108":1}}],["integers",{"2":{"49":17,"51":8,"53":2}}],["integer",{"2":{"25":11,"49":18,"51":4,"53":1,"54":1,"55":5}}],["intelligence",{"2":{"25":2}}],["interested",{"2":{"170":1}}],["interpolatingadjoint",{"2":{"149":6}}],["interactive",{"2":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["interactiveutils",{"2":{"123":2,"131":2,"139":2,"141":1,"150":2,"158":2,"166":2,"171":2,"180":2}}],["intermediate",{"2":{"31":1,"32":1}}],["interval",{"2":{"25":2}}],["international",{"2":{"21":1,"25":6}}],["internals",{"2":{"169":1}}],["internally",{"2":{"44":1,"63":2,"149":1}}],["internal",{"2":{"21":2,"38":1,"45":1,"48":1,"54":2,"70":1,"72":1}}],["interfacem",{"2":{"45":1}}],["interface",{"0":{"100":1,"101":1,"104":1,"105":1},"1":{"101":1,"102":2,"103":2,"104":1,"105":1},"2":{"13":1,"21":1,"45":2,"100":3,"102":1,"169":1}}],["into",{"2":{"14":1,"25":2,"40":1,"45":1,"48":2,"49":2,"51":2,"54":1,"56":1,"61":1,"62":4,"96":1,"100":1,"102":1,"114":2,"126":1,"135":1,"142":1}}],["int",{"2":{"9":3,"31":2,"49":2,"52":2,"54":1,"55":1,"56":1,"102":4,"143":2,"153":3,"168":1}}],["in",{"0":{"46":1,"73":1,"82":1},"1":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1},"2":{"0":1,"3":1,"9":2,"13":1,"14":5,"16":3,"20":1,"21":3,"25":15,"31":5,"35":1,"37":2,"38":3,"40":3,"41":6,"42":11,"44":5,"45":1,"48":20,"49":25,"50":2,"51":2,"52":20,"53":12,"54":6,"55":8,"61":2,"63":1,"65":1,"69":2,"70":2,"71":1,"72":2,"75":1,"76":1,"77":9,"78":1,"80":2,"83":1,"84":1,"88":1,"89":1,"90":11,"91":3,"92":2,"93":1,"94":1,"97":2,"98":1,"100":1,"102":9,"105":1,"106":1,"107":1,"108":2,"109":1,"112":2,"113":2,"114":2,"116":1,"117":3,"118":1,"120":3,"122":4,"124":1,"128":1,"129":2,"132":1,"134":3,"135":6,"137":3,"145":1,"146":2,"148":1,"156":1,"157":4,"159":1,"165":1,"168":6,"169":2,"170":13,"175":1,"176":3}}],["iszero",{"2":{"136":1}}],["isdefined",{"2":{"123":2,"131":2,"139":2,"150":2,"158":2,"166":2,"171":2,"180":2}}],["isn",{"2":{"112":1,"174":1}}],["issue",{"2":{"91":1}}],["issues",{"2":{"42":1,"52":1,"72":1,"80":1}}],["istraining",{"2":{"58":1,"61":2}}],["isa",{"2":{"39":2}}],["is",{"2":{"0":1,"2":1,"3":1,"5":1,"6":1,"8":4,"9":14,"10":3,"11":1,"13":5,"14":10,"17":2,"20":9,"21":12,"22":1,"25":10,"37":1,"38":4,"39":1,"40":5,"42":6,"44":3,"45":3,"48":30,"49":4,"50":7,"52":25,"53":7,"54":10,"55":18,"56":3,"61":2,"63":5,"65":2,"67":1,"68":3,"72":5,"73":1,"75":1,"82":1,"88":2,"89":4,"90":5,"91":1,"94":2,"96":1,"97":1,"98":9,"99":1,"100":3,"102":3,"103":3,"104":2,"106":1,"107":3,"109":6,"111":3,"113":1,"114":4,"115":3,"116":4,"118":3,"120":7,"122":3,"123":2,"124":1,"130":2,"134":1,"135":1,"136":2,"139":2,"143":1,"146":2,"149":1,"150":2,"158":2,"165":1,"166":2,"167":2,"168":1,"169":8,"170":2,"172":1,"174":1,"176":2,"180":2}}],["tmp",{"2":{"174":4}}],["tmatch",{"2":{"14":3}}],["ttime",{"2":{"129":2,"146":2,"157":2}}],["tl",{"2":{"88":1}}],["td",{"0":{"87":1}}],["tdchain",{"0":{"85":1},"2":{"84":4,"85":2,"86":1,"87":1}}],["tpu",{"2":{"73":1}}],["turing",{"2":{"167":5}}],["tutorials",{"2":{"80":1,"122":1}}],["tutorial",{"2":{"63":1,"113":3,"118":1,"120":1,"124":2,"132":2,"159":1,"167":1}}],["tuple=true",{"2":{"146":1}}],["tuples",{"2":{"32":1}}],["tuple",{"2":{"10":2,"13":1,"21":2,"25":3,"31":1,"32":1,"37":1,"38":3,"39":1,"45":1,"48":7,"49":17,"51":8,"52":19,"53":1,"55":1,"56":3,"71":1,"84":1,"85":1,"120":1,"121":4,"144":2,"149":16,"154":1,"165":8,"169":1,"176":3}}],["tail",{"2":{"169":1}}],["tag",{"2":{"120":2}}],["tab>`",{"2":{"119":1}}],["table",{"2":{"53":1,"114":1}}],["tall",{"2":{"118":1}}],["tasklocalrng",{"2":{"76":1,"113":1,"122":1}}],["targets",{"2":{"126":1,"142":1}}],["target",{"2":{"67":6,"128":3,"145":3,"156":3}}],["taking",{"2":{"54":1}}],["takeaway",{"2":{"104":1}}],["taken",{"2":{"25":1}}],["takes",{"2":{"14":1,"17":1,"48":5,"77":1,"164":1,"170":1,"176":2}}],["take",{"2":{"8":1,"37":1,"39":1,"48":1,"49":2,"76":1,"83":1,"107":1,"169":1}}],["tanh",{"2":{"41":1,"52":1,"76":4,"144":4,"149":24,"169":3}}],["tsteps",{"2":{"175":5,"176":4,"179":6}}],["tstate",{"2":{"165":11}}],["tsit5",{"2":{"149":6}}],["tspan=",{"2":{"143":1,"147":1}}],["tspan",{"2":{"143":3,"147":3,"175":4,"176":1,"179":1}}],["ts",{"2":{"37":8,"168":1,"169":4}}],["t=0",{"2":{"31":2}}],["t=float32",{"2":{"25":8}}],["tile",{"2":{"114":2}}],["tiles",{"2":{"114":1}}],["title",{"2":{"69":2,"170":1}}],["timelastindex",{"2":{"52":1}}],["timestep",{"2":{"175":1}}],["timespace",{"2":{"175":1}}],["times",{"2":{"48":3,"65":1,"114":1,"117":1}}],["time",{"0":{"84":1},"2":{"44":1,"52":1,"83":3,"86":5,"129":3,"130":20,"146":40,"148":10,"157":23,"175":2,"176":3,"177":1,"179":2}}],["tied",{"0":{"41":1}}],["tiny",{"2":{"30":1}}],["tip",{"2":{"13":1,"33":1,"38":1,"39":1,"44":1,"45":1,"52":2,"67":1,"68":1,"100":1,"102":2,"174":1}}],["two",{"2":{"25":3,"48":4,"53":1,"55":1,"56":3,"98":1,"102":1,"103":1,"104":1,"107":1,"169":1,"174":4,"176":1}}],["te",{"2":{"129":2,"146":2}}],["technology",{"2":{"69":1}}],["term",{"2":{"38":1,"52":1,"169":2}}],["tensorflow",{"2":{"52":1}}],["tensor",{"2":{"25":3,"55":1,"114":1,"174":1}}],["tends",{"2":{"20":1}}],["testtag",{"2":{"120":2}}],["testset",{"2":{"67":1,"68":1}}],["tests",{"2":{"67":1,"68":1}}],["testing",{"0":{"67":1},"2":{"65":3,"67":1,"68":2,"71":1}}],["test",{"2":{"50":3,"55":1,"66":1,"67":4,"68":8,"126":5,"129":3,"130":20,"142":5,"146":40,"148":9,"153":5,"157":32,"175":1}}],["tested",{"2":{"21":1,"71":1,"72":1,"118":1}}],["testmode",{"2":{"12":1,"16":1,"50":3,"55":3,"111":1,"128":1,"137":1,"145":1,"156":1}}],["t",{"2":{"14":1,"25":20,"31":1,"32":1,"42":2,"44":1,"48":1,"52":1,"54":1,"65":1,"72":1,"73":1,"76":1,"82":1,"83":1,"84":4,"86":2,"88":1,"91":1,"102":4,"104":3,"105":1,"109":1,"111":1,"112":1,"114":2,"116":2,"120":3,"122":3,"126":1,"129":3,"134":1,"135":4,"138":1,"142":1,"143":4,"146":3,"147":3,"154":2,"155":1,"157":7,"165":1,"174":16,"175":1,"176":1}}],["typing",{"2":{"75":1}}],["typical",{"2":{"42":1}}],["typically",{"2":{"13":1,"52":1,"72":1,"136":1,"176":1}}],["typed",{"2":{"119":1}}],["typeof",{"2":{"54":1,"63":1,"68":1,"85":6,"90":1,"102":2,"120":1,"121":2,"149":108,"165":6,"176":11}}],["type",{"0":{"149":1},"2":{"13":6,"14":3,"25":7,"31":3,"32":1,"37":1,"38":1,"40":1,"42":4,"44":3,"45":3,"48":8,"49":3,"50":3,"51":6,"52":5,"53":4,"54":6,"55":6,"56":1,"59":1,"61":1,"63":7,"82":1,"89":5,"90":13,"93":1,"94":1,"103":1,"104":3,"105":1,"107":1,"135":2,"148":1,"149":1,"153":1}}],["types",{"0":{"13":1,"81":1},"1":{"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"2":{"14":2,"21":1,"38":1,"104":1,"105":1}}],["thousands",{"2":{"114":1}}],["though",{"2":{"102":1,"118":1}}],["those",{"2":{"13":1,"14":1,"78":1,"90":1,"103":1,"114":1,"143":1,"170":1}}],["thumb",{"2":{"56":1}}],["thus",{"2":{"21":1,"48":1}}],["threads",{"2":{"123":3,"131":3,"139":3,"150":3,"158":3,"166":3,"171":3,"180":3}}],["three",{"2":{"54":1,"114":1}}],["throw",{"2":{"40":1}}],["thrown",{"2":{"9":2,"38":1,"40":2}}],["through",{"2":{"14":1,"48":4,"55":4,"75":1,"80":2,"83":1,"104":1,"109":1,"116":1,"120":1,"135":3,"170":1}}],["than",{"2":{"21":1,"25":2,"68":1,"118":1,"146":1}}],["that",{"2":{"9":2,"13":3,"14":4,"17":1,"20":1,"25":3,"34":1,"38":1,"40":1,"41":2,"42":2,"48":5,"49":3,"50":2,"51":4,"53":1,"54":3,"55":5,"65":1,"72":2,"78":1,"88":2,"89":3,"90":1,"91":2,"102":3,"103":2,"104":1,"105":2,"106":1,"108":1,"109":2,"112":1,"114":1,"116":3,"117":1,"119":1,"120":2,"135":3,"138":2,"146":1,"149":1,"162":1,"164":1,"169":1,"170":3,"176":3}}],["third",{"2":{"114":2}}],["thirteenth",{"2":{"25":2}}],["thing",{"2":{"54":2}}],["things",{"2":{"10":1,"102":1,"104":1,"114":1}}],["think",{"2":{"42":1,"102":1}}],["this",{"2":{"9":1,"10":4,"13":4,"14":5,"17":2,"21":4,"22":1,"25":5,"35":1,"38":1,"39":3,"40":5,"42":2,"44":6,"45":2,"48":3,"49":7,"52":7,"53":6,"54":1,"55":5,"56":2,"59":3,"63":5,"65":2,"68":2,"69":2,"71":1,"72":2,"77":1,"78":1,"88":2,"89":3,"91":2,"92":2,"94":1,"97":1,"98":2,"102":8,"104":6,"105":1,"106":1,"109":2,"111":3,"113":1,"114":5,"116":4,"118":1,"120":3,"122":2,"123":1,"124":1,"127":1,"130":1,"131":1,"132":2,"134":1,"139":1,"146":1,"149":2,"150":1,"158":1,"159":1,"162":1,"166":1,"167":1,"169":4,"171":1,"172":1,"174":3,"176":2,"178":1,"180":1}}],["theoretical",{"2":{"174":1}}],["theoretically",{"2":{"118":1}}],["theorem",{"2":{"54":1}}],["thesis",{"2":{"69":1}}],["these",{"2":{"13":5,"14":1,"17":1,"33":2,"35":2,"44":3,"45":3,"55":1,"70":2,"72":1,"73":1,"83":1,"102":2,"103":2,"113":1,"116":1,"140":1,"169":1}}],["they",{"2":{"42":1,"90":1,"93":1,"109":1,"114":1,"118":2}}],["there",{"2":{"38":1,"45":1,"48":2,"76":1,"90":1,"91":1,"107":1,"114":1,"130":1}}],["them",{"2":{"17":1,"35":1,"39":1,"48":1,"53":1,"56":1,"70":1,"71":1,"76":1,"114":2,"117":1,"169":1,"176":2}}],["their",{"2":{"13":2,"49":1,"80":1,"114":1,"116":2}}],["then",{"2":{"8":2,"9":6,"14":1,"20":4,"21":2,"38":3,"40":2,"48":6,"49":3,"50":4,"52":3,"53":6,"54":1,"55":4,"63":3,"67":1,"69":1,"72":1,"75":1,"98":3,"102":1,"103":2}}],["the",{"0":{"85":1,"86":1,"87":1,"95":1,"113":1,"127":1,"129":1,"130":1,"137":1,"138":1,"143":1,"144":1,"148":1,"155":1,"169":1,"175":1,"177":1,"178":1,"179":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"8":6,"9":12,"10":9,"11":3,"13":9,"14":21,"15":4,"16":7,"17":9,"20":15,"21":24,"25":60,"26":24,"31":4,"32":7,"34":3,"35":1,"37":14,"38":17,"39":18,"40":18,"41":12,"42":18,"44":12,"45":7,"48":53,"49":46,"50":6,"51":30,"52":49,"53":18,"54":25,"55":65,"56":12,"59":2,"60":1,"61":2,"62":6,"63":18,"67":5,"68":12,"70":1,"71":5,"72":6,"75":2,"76":4,"77":6,"78":1,"80":4,"82":2,"83":2,"84":1,"86":3,"87":2,"88":3,"89":6,"90":19,"93":1,"94":7,"95":3,"97":3,"98":5,"100":7,"102":20,"103":6,"104":4,"105":5,"107":11,"108":4,"109":6,"111":4,"112":1,"113":1,"114":12,"115":7,"116":2,"117":5,"118":6,"119":1,"120":13,"121":3,"122":14,"123":1,"124":2,"126":2,"127":3,"129":1,"130":5,"132":2,"134":6,"135":24,"136":2,"137":4,"138":4,"139":1,"142":2,"143":6,"144":1,"146":5,"147":1,"148":3,"149":4,"150":1,"157":1,"158":1,"161":4,"164":2,"165":2,"166":1,"167":3,"168":3,"169":16,"170":22,"172":1,"174":7,"175":2,"176":10,"177":4,"178":2,"179":2,"180":1}}],["tr",{"2":{"129":2,"146":2}}],["trying",{"2":{"102":1}}],["try",{"2":{"85":1,"89":2,"90":1,"104":2,"114":1,"122":1,"138":1}}],["treat",{"2":{"68":1,"103":1}}],["treated",{"2":{"42":1,"122":1}}],["trivial",{"2":{"72":1,"116":1,"149":12}}],["trilinear",{"2":{"56":5}}],["trigger",{"2":{"0":1,"3":1,"10":1,"97":1,"98":2}}],["truth",{"2":{"122":1}}],["truly",{"2":{"72":1}}],["truncation",{"2":{"58":1,"64":2}}],["truncatedstacktraces",{"2":{"64":2}}],["truncated",{"0":{"64":1},"2":{"23":1,"25":2,"176":3}}],["true",{"0":{"175":1},"2":{"9":1,"16":1,"20":3,"21":2,"31":1,"32":2,"40":1,"44":2,"48":3,"49":3,"50":4,"52":11,"53":3,"54":1,"55":4,"61":3,"63":2,"68":2,"71":1,"85":2,"89":1,"90":2,"93":2,"96":2,"98":1,"99":1,"122":2,"123":1,"131":1,"136":7,"138":1,"139":1,"149":36,"150":1,"158":1,"161":1,"165":3,"166":1,"167":2,"171":1,"175":1,"176":4,"180":1}}],["trace",{"2":{"174":4}}],["tracking",{"0":{"90":1},"2":{"91":2}}],["tracker|reverse",{"2":{"68":2}}],["tracker",{"2":{"68":1,"167":1}}],["tracked",{"2":{"89":1}}],["trackedarray",{"2":{"14":1}}],["trackedreals",{"2":{"14":1}}],["track",{"2":{"40":1,"55":4,"89":1,"90":5}}],["traditional",{"0":{"73":1},"2":{"53":1,"169":1}}],["transitioned",{"2":{"97":1}}],["transpose",{"2":{"49":3,"114":1}}],["transformation",{"2":{"55":1}}],["transformations",{"2":{"44":1}}],["transforms",{"2":{"51":2}}],["transform",{"2":{"44":1,"129":1,"137":1,"157":1}}],["transformer",{"2":{"28":1,"30":14,"31":4}}],["transfered",{"2":{"109":1}}],["transfer",{"0":{"9":1,"59":1},"2":{"9":1,"59":3,"109":1,"138":1}}],["transferring",{"2":{"6":1}}],["train=1024",{"2":{"153":1}}],["trained",{"2":{"45":1,"137":2,"138":8,"179":3}}],["train",{"0":{"148":1},"2":{"37":1,"42":1,"45":1,"52":24,"77":1,"124":1,"126":6,"129":15,"130":2,"134":4,"137":12,"142":6,"146":9,"153":10,"157":25}}],["trainstate",{"2":{"36":1,"37":6,"129":1,"137":1,"157":1,"165":4}}],["training=val",{"2":{"50":3}}],["training",{"0":{"37":1,"111":1,"129":1,"130":1,"132":1,"137":1,"146":1,"151":1,"157":1,"165":1,"172":1,"177":1,"178":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"16":2,"20":7,"21":7,"25":2,"37":5,"40":1,"50":6,"55":8,"61":4,"69":1,"72":2,"89":1,"90":3,"93":2,"95":1,"96":2,"111":2,"124":1,"129":1,"130":20,"132":1,"146":40,"148":10,"157":24,"164":1,"165":3,"177":2,"178":1}}],["trainable",{"2":{"13":1,"37":2,"42":1,"49":3,"52":4,"53":3,"55":1,"109":9}}],["trainmode",{"2":{"12":1,"16":1}}],["towards",{"2":{"116":1}}],["toolchain",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["tools",{"2":{"40":1,"88":1,"113":1,"118":1}}],["too",{"2":{"70":1,"118":1,"170":1}}],["tolerance",{"2":{"68":2}}],["tosimplechainsadaptor",{"2":{"45":4,"72":1,"127":2}}],["together",{"2":{"39":1}}],["tokens",{"2":{"31":1}}],["topic",{"2":{"52":1}}],["top",{"2":{"30":2,"33":2,"100":1}}],["total",{"2":{"15":1,"16":1,"42":1,"68":2,"76":1,"77":1,"84":1,"89":1,"90":1,"127":1,"128":6,"145":6,"156":6,"162":1}}],["toml",{"2":{"8":1,"65":1}}],["to",{"0":{"44":1,"45":1,"80":1,"108":1,"172":1},"1":{"109":1,"110":1,"111":1,"112":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"0":1,"3":1,"8":3,"9":5,"10":4,"11":2,"14":10,"17":1,"20":6,"21":11,"25":14,"31":4,"32":5,"33":1,"35":3,"37":5,"38":7,"39":2,"40":11,"41":3,"42":6,"44":14,"45":9,"48":20,"49":18,"50":13,"51":6,"52":54,"53":6,"54":7,"55":22,"56":9,"59":3,"62":4,"63":6,"64":2,"65":2,"67":4,"68":2,"69":1,"70":2,"71":1,"72":7,"73":1,"76":2,"80":2,"82":2,"83":2,"84":1,"88":4,"89":1,"90":7,"92":1,"93":1,"94":1,"95":1,"97":3,"98":2,"100":5,"102":6,"103":5,"104":4,"105":2,"106":1,"107":3,"108":3,"109":8,"111":1,"112":3,"113":3,"114":7,"115":1,"116":3,"118":1,"119":1,"120":6,"122":8,"124":2,"126":1,"127":3,"132":2,"134":3,"135":10,"136":1,"138":1,"140":2,"142":1,"143":5,"144":1,"146":3,"147":1,"149":8,"155":1,"164":1,"167":1,"168":3,"169":12,"170":5,"174":5,"176":6,"177":2,"178":2}}],["ax",{"2":{"161":4,"165":5,"168":3,"175":4,"176":6,"179":11}}],["axislegend",{"2":{"161":1,"165":1,"175":1,"176":1,"179":1}}],["axis",{"2":{"149":28,"161":1,"165":1,"168":1,"170":1,"175":1,"176":1,"179":2}}],["axes",{"2":{"120":1,"154":4}}],["a100",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["ai",{"2":{"120":1}}],["aims",{"2":{"25":1}}],["a=layer",{"2":{"109":1}}],["a×b×x",{"2":{"109":1}}],["ah",{"2":{"90":1}}],["agent",{"2":{"89":1,"122":1,"123":1,"131":1,"139":1,"149":2,"150":1,"158":1,"166":1,"171":1,"180":1}}],["against",{"2":{"68":1}}],["again",{"2":{"10":1}}],["average",{"2":{"170":3}}],["available",{"2":{"75":1,"78":1,"98":1,"99":1,"112":1,"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["avik",{"2":{"69":2}}],["avoid",{"2":{"20":1,"52":1,"72":1,"147":1,"149":1,"169":2}}],["author",{"2":{"69":2}}],["autojacvec=reversediffvjp",{"2":{"146":1}}],["autojacvec=zygotevjp",{"2":{"144":1,"146":1}}],["autozygote",{"2":{"129":1,"137":1,"157":1,"165":2,"178":1}}],["auto",{"2":{"111":1,"120":1}}],["autodiff",{"2":{"70":1,"104":1,"118":2}}],["autoselection",{"2":{"9":1}}],["automatically",{"2":{"13":2,"14":1,"20":1,"39":1,"52":1,"111":1,"112":1,"126":1,"134":1,"135":2,"142":1,"169":1}}],["automatic",{"0":{"98":1,"118":1},"1":{"119":1,"120":1,"121":1},"2":{"9":1,"10":1,"98":2,"99":1,"113":1,"120":1}}],["affine",{"2":{"55":4}}],["affine=false",{"2":{"55":4}}],["affine=true",{"2":{"55":12,"89":1,"90":2}}],["afterwards",{"2":{"55":1}}],["after",{"2":{"20":2,"31":1,"32":3,"48":4,"50":1,"51":2,"55":4,"72":1,"88":1,"122":12,"135":1}}],["am",{"2":{"176":1}}],["ambiguous",{"2":{"122":1}}],["amd",{"2":{"115":2,"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["amdgpu",{"2":{"0":2,"9":2,"79":1,"97":1,"115":1,"123":3,"131":2,"139":3,"150":3,"158":3,"166":3,"171":2,"180":3}}],["amp",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"49":6,"52":1,"53":1,"54":1,"55":1,"70":2}}],["able",{"2":{"132":1}}],["ab7d",{"2":{"123":2,"131":1,"139":2,"150":2,"158":2,"166":2,"171":1,"180":2}}],["ability",{"2":{"100":1}}],["above",{"2":{"48":2,"68":1,"75":1,"107":1,"115":1,"170":1}}],["about",{"2":{"40":1,"55":1,"102":1,"114":1,"117":1,"135":1,"170":1}}],["abstol",{"2":{"149":6}}],["abstol=1",{"2":{"144":1}}],["abstractvector",{"2":{"169":1,"174":2}}],["abstractmatrix",{"2":{"54":1,"102":1,"103":1,"143":1}}],["abstracttimeseriesdatabatchordering=batchlastindex",{"2":{"52":1}}],["abstractadtype",{"2":{"37":1}}],["abstractarray",{"2":{"10":1,"25":16,"26":60,"32":2,"50":3,"53":6,"54":4,"55":1,"61":1,"86":1,"109":2,"135":1}}],["abstractrng=",{"2":{"25":8,"26":24}}],["abstractrng",{"2":{"13":2,"14":2,"15":1,"16":1,"20":4,"25":3,"102":2,"109":2,"154":1,"161":1}}],["abstractexplicitlayers",{"2":{"48":1}}],["abstractexplicitlayer",{"2":{"12":1,"13":4,"14":2,"38":4,"39":3,"40":1,"45":3,"48":4,"55":1,"63":1,"82":2,"86":2,"102":2,"109":1,"143":2,"147":2,"154":4}}],["abstractexplicitcontainerlayer",{"2":{"12":1,"13":3,"84":1,"103":2,"135":2,"143":1,"147":1,"154":1}}],["abstract",{"0":{"13":1},"2":{"11":1,"13":2,"53":2}}],["abstractluxdevice",{"2":{"9":1,"10":2}}],["abstractluxgpudevice",{"2":{"8":1,"99":1}}],["absolute",{"2":{"68":1}}],["abs2",{"2":{"42":1,"68":1,"77":1,"122":2,"164":1,"169":1,"177":1}}],["abs",{"2":{"25":1,"54":1,"174":1}}],["academic",{"2":{"69":1}}],["ac9de150",{"2":{"67":1}}],["acts",{"2":{"169":1}}],["activated",{"2":{"52":4}}],["activation=tanh",{"2":{"52":1}}],["activation=identity",{"2":{"49":3,"53":4,"55":4}}],["activations",{"2":{"49":3,"53":3,"55":4,"169":1}}],["activation",{"2":{"42":1,"49":15,"52":3,"53":21,"55":27,"169":1}}],["active",{"2":{"44":1}}],["act",{"2":{"42":3,"49":3,"53":3,"55":4,"77":5}}],["act=relu",{"2":{"42":2,"77":1}}],["actually",{"2":{"55":1,"100":1}}],["actual",{"2":{"40":1,"119":2,"122":1,"165":1}}],["achieved",{"2":{"49":1}}],["achieve",{"2":{"25":1,"52":1}}],["acc",{"2":{"129":4,"137":2,"146":4,"157":8}}],["account",{"2":{"42":1}}],["according",{"2":{"25":1}}],["accordingly",{"2":{"21":2,"55":2}}],["acceptance",{"2":{"169":1}}],["accept",{"2":{"104":1,"169":1}}],["accepts",{"2":{"56":1}}],["accessing",{"2":{"44":1,"45":1}}],["accessors",{"2":{"41":1}}],["access",{"2":{"35":1,"48":1,"103":1,"104":1}}],["accessed",{"2":{"35":1}}],["accelerate",{"2":{"27":1}}],["accelerating",{"2":{"21":1}}],["accumulates",{"2":{"55":1}}],["accumulation",{"2":{"21":1}}],["accuracy",{"0":{"136":1},"2":{"30":2,"33":2,"128":2,"129":4,"130":40,"136":2,"137":52,"145":2,"146":76,"148":18,"156":2,"157":52}}],["across",{"2":{"6":1,"21":2,"71":2,"114":2,"170":1}}],["at=0",{"2":{"134":1}}],["at=train",{"2":{"126":1,"142":1}}],["atol",{"2":{"68":3}}],["attempts",{"2":{"44":1}}],["attention",{"2":{"31":4}}],["atleast",{"2":{"21":1}}],["at",{"2":{"20":1,"38":1,"42":1,"49":3,"51":2,"52":1,"89":4,"90":10,"92":1,"97":1,"104":1,"120":1,"135":1,"170":2,"174":2,"175":1}}],["adtype",{"2":{"178":1}}],["adtype=autotracker",{"2":{"169":1}}],["adtypes",{"2":{"37":2,"125":1,"133":1,"152":1,"160":1,"165":1}}],["adhere",{"2":{"100":1}}],["adapted",{"2":{"172":2}}],["adaptive=false",{"2":{"175":1,"176":1,"177":1,"179":1}}],["adaptive",{"2":{"51":2}}],["adaptivemeanpool",{"2":{"47":1,"51":4}}],["adaptivemaxpool",{"2":{"47":1,"51":4}}],["adaptor",{"2":{"45":4,"127":1}}],["adapt",{"2":{"44":6,"45":6}}],["adam",{"2":{"42":1,"76":7,"77":1,"129":1,"137":1,"146":1,"157":1,"163":3,"165":8}}],["address",{"2":{"70":1}}],["additionally",{"2":{"100":1,"109":1,"138":1}}],["additional",{"0":{"78":1},"2":{"67":1,"78":1,"79":1,"108":1,"115":1,"122":1}}],["add",{"2":{"65":1,"75":2,"76":1,"78":1,"114":1,"115":1,"146":1}}],["adds",{"2":{"40":1,"114":1}}],["added",{"2":{"17":1,"21":4,"49":3,"51":2,"54":1,"55":4}}],["ad",{"2":{"37":2,"40":1,"68":4,"71":1,"72":1,"76":1,"113":1,"116":1,"118":2,"119":5,"120":2,"146":1,"165":1}}],["advances",{"2":{"20":1}}],["advancedvi",{"2":{"167":1}}],["advanced",{"2":{"13":1}}],["artifact",{"2":{"123":1,"139":1,"150":1,"158":1,"166":1,"180":1}}],["artificially",{"2":{"90":1}}],["artificial",{"2":{"25":2,"168":2}}],["arranged",{"2":{"114":1,"168":1}}],["arrayandtime",{"2":{"86":8,"87":1}}],["arrays",{"0":{"114":1,"115":1},"1":{"115":1},"2":{"17":1,"48":1,"56":5,"62":1,"68":4,"102":1,"109":2,"114":4,"116":1}}],["array",{"2":{"10":1,"14":1,"20":4,"21":7,"25":8,"42":1,"49":9,"51":4,"52":1,"53":4,"54":4,"55":16,"68":4,"86":3,"107":1,"114":8,"115":1,"116":6,"128":1,"143":3,"144":1,"149":6,"168":4,"169":1,"175":1,"176":1,"177":1,"179":1}}],["architectural",{"2":{"102":1}}],["architectures",{"2":{"48":1,"72":1}}],["architecture",{"2":{"31":1,"102":2,"109":1}}],["args",{"2":{"67":2,"68":2}}],["argument",{"2":{"14":2,"48":5,"54":1,"94":1}}],["arguments",{"2":{"9":2,"14":1,"20":3,"21":7,"25":3,"31":2,"32":3,"37":2,"38":1,"40":3,"41":1,"44":2,"45":2,"48":16,"49":6,"50":5,"51":6,"52":5,"53":8,"54":6,"55":9,"56":1,"63":2,"67":3,"68":3,"102":1,"107":1,"149":2}}],["arbitrary",{"2":{"56":1,"146":1}}],["around",{"2":{"44":1,"49":3,"51":2,"72":1}}],["arxiv",{"2":{"21":4,"25":1,"54":1,"55":2}}],["are",{"2":{"10":1,"11":1,"14":1,"17":1,"21":1,"25":4,"35":2,"38":6,"40":3,"41":1,"42":1,"45":2,"48":3,"53":3,"54":1,"55":5,"56":1,"68":4,"71":2,"72":2,"73":1,"78":1,"85":1,"88":1,"90":1,"93":1,"97":1,"102":3,"103":1,"104":2,"105":1,"114":1,"116":1,"118":1,"135":2,"143":1,"169":1,"170":1,"175":1,"176":1}}],["april",{"2":{"69":1}}],["append",{"2":{"168":2}}],["appendix",{"0":{"123":1,"131":1,"139":1,"150":1,"158":1,"166":1,"171":1,"180":1}}],["appends",{"2":{"31":1}}],["appreciate",{"2":{"42":1}}],["approach",{"0":{"98":1}}],["approx",{"2":{"68":1}}],["approximation",{"2":{"54":1}}],["approximated",{"2":{"49":3,"53":3,"55":4}}],["approximately",{"2":{"25":1}}],["appropriate",{"2":{"14":1,"25":1}}],["apple",{"2":{"79":1}}],["applications",{"2":{"72":1,"116":1}}],["applicable",{"2":{"9":1}}],["applies",{"2":{"48":1,"55":6,"56":2}}],["applied",{"2":{"14":1,"20":3,"25":3,"48":1,"50":4,"55":4,"109":2}}],["applychain",{"2":{"149":2}}],["applying",{"2":{"20":2,"25":1,"48":1}}],["apply",{"2":{"12":2,"14":6,"36":1,"37":1,"48":1,"49":3,"50":2,"51":2,"76":2,"82":1,"84":1,"86":3,"102":1,"103":1,"129":1,"137":1,"157":1,"164":1,"165":2,"169":1}}],["api",{"0":{"2":1,"5":1,"24":1,"32":1,"42":1},"1":{"25":1,"26":1},"2":{"44":1,"48":9,"54":2,"59":1,"60":1,"76":2,"92":1,"108":1,"122":1,"124":1,"132":1,"149":1,"164":1}}],["animation",{"2":{"170":1}}],["anticlockwise",{"2":{"132":1,"134":4}}],["answers",{"2":{"80":1}}],["another",{"2":{"53":1}}],["anything",{"2":{"102":1}}],["any",{"2":{"14":2,"17":1,"37":2,"40":1,"42":1,"45":1,"48":2,"52":3,"54":1,"68":1,"71":1,"85":1,"89":1,"91":1,"100":2,"102":2,"104":1,"109":1,"115":1,"116":2,"117":1,"118":1,"122":1,"138":1,"146":1,"149":8,"155":1,"164":1}}],["an",{"2":{"9":3,"14":3,"20":2,"21":1,"25":19,"26":36,"31":1,"40":1,"48":10,"49":4,"50":3,"51":2,"52":2,"53":9,"54":2,"55":6,"64":1,"72":1,"83":1,"88":1,"90":1,"91":2,"98":1,"114":3,"117":1,"124":1,"168":1,"169":1,"170":1}}],["andrea",{"2":{"21":1,"55":1}}],["and",{"0":{"73":1,"136":1,"144":1,"151":1,"155":1},"1":{"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1},"2":{"0":1,"3":1,"8":1,"9":7,"10":2,"13":2,"14":7,"17":1,"20":2,"21":19,"25":13,"31":1,"32":3,"33":1,"34":1,"35":2,"37":3,"38":4,"39":6,"40":4,"41":3,"42":2,"44":5,"45":2,"48":10,"49":11,"51":2,"52":18,"53":5,"54":4,"55":21,"56":6,"62":1,"63":2,"65":2,"67":1,"68":4,"70":3,"71":2,"72":5,"73":1,"75":1,"76":4,"77":3,"80":2,"87":1,"89":3,"90":6,"91":3,"93":1,"97":1,"98":3,"99":1,"100":1,"102":8,"103":7,"104":3,"105":1,"107":2,"109":10,"111":1,"114":7,"115":2,"116":1,"117":3,"118":3,"119":1,"120":1,"121":1,"122":3,"126":1,"127":1,"130":1,"132":2,"134":3,"135":10,"138":1,"142":1,"143":2,"146":2,"149":1,"161":1,"164":2,"165":1,"168":1,"169":12,"170":3,"174":3,"175":2,"176":6}}],["algebras",{"2":{"120":1}}],["algorithm",{"2":{"9":1,"167":1}}],["already",{"2":{"70":1,"76":1,"117":1}}],["alternate",{"0":{"147":1}}],["alternatively",{"2":{"52":1,"56":1,"75":1}}],["alts",{"2":{"54":2}}],["almost",{"2":{"44":1}}],["always",{"2":{"38":1,"44":1,"105":1}}],["alexnet",{"2":{"33":3}}],["along",{"2":{"20":2,"21":1,"25":1,"32":1,"48":1,"49":2,"50":2,"52":1,"55":1,"61":1,"72":1,"84":1}}],["alongside",{"2":{"0":1,"3":1}}],["al",{"2":{"20":2,"25":2,"172":1}}],["alpha=0",{"2":{"161":1,"165":2,"175":2,"176":4,"179":7}}],["alphadropout",{"2":{"47":1,"50":4}}],["alpha",{"2":{"19":1,"20":4,"169":2}}],["also",{"2":{"13":1,"25":2,"38":1,"42":1,"48":2,"50":5,"51":6,"54":1,"55":7,"56":2,"72":2,"75":1,"102":1,"106":1,"114":1,"146":2,"169":1,"170":1}}],["allow",{"2":{"49":3,"53":6,"55":7}}],["allowscalar",{"2":{"141":1,"152":1,"173":1}}],["allows",{"2":{"11":1,"48":1,"52":1,"54":1,"80":1,"103":1,"104":1,"146":1}}],["all",{"2":{"0":1,"3":1,"11":1,"13":1,"14":1,"16":3,"21":2,"25":1,"34":1,"35":2,"38":3,"39":1,"45":2,"48":4,"49":3,"51":4,"53":1,"54":2,"56":2,"62":1,"67":1,"68":1,"71":3,"72":3,"78":2,"95":2,"100":1,"102":1,"107":1,"114":3,"115":1,"116":1,"168":1,"169":2}}],["a",{"0":{"93":1,"96":1,"132":1,"135":1,"151":1,"154":1,"159":1,"172":1,"176":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1},"2":{"0":1,"3":1,"6":1,"8":2,"9":2,"10":1,"11":1,"13":4,"14":12,"17":3,"20":4,"21":6,"22":1,"25":21,"26":12,"31":2,"32":1,"37":1,"38":3,"39":1,"40":3,"41":3,"42":12,"44":9,"45":6,"48":33,"49":35,"51":10,"52":30,"53":10,"54":11,"55":24,"56":8,"61":1,"63":4,"65":2,"67":1,"70":2,"71":1,"72":3,"77":4,"80":1,"82":2,"83":1,"86":3,"87":1,"88":1,"89":3,"90":5,"92":1,"93":1,"95":2,"96":3,"97":1,"98":7,"100":1,"102":8,"103":4,"104":2,"106":1,"107":2,"109":17,"111":1,"112":1,"113":3,"114":12,"115":1,"117":3,"118":12,"119":1,"120":3,"122":6,"124":2,"130":1,"132":1,"134":2,"135":3,"143":3,"146":2,"147":1,"148":1,"154":2,"155":1,"159":2,"162":1,"165":2,"167":1,"168":3,"169":7,"170":5,"174":9,"176":3,"177":1,"178":1}}],["astroinformatics",{"2":{"172":1}}],["ask",{"2":{"114":3}}],["assign",{"2":{"122":1}}],["assignment",{"2":{"122":1}}],["assert",{"2":{"117":1,"169":1,"174":5}}],["associated",{"2":{"70":1}}],["assume",{"2":{"174":1}}],["assumes",{"2":{"17":1,"48":1}}],["assumptions",{"2":{"55":1}}],["asymmetric",{"2":{"49":3,"51":2}}],["as",{"2":{"0":1,"3":1,"13":1,"20":1,"21":3,"25":5,"31":2,"39":1,"41":1,"42":5,"44":1,"45":1,"48":11,"49":2,"51":2,"52":4,"53":1,"54":2,"55":3,"56":1,"61":1,"67":2,"68":3,"69":1,"72":2,"77":2,"83":1,"90":1,"103":2,"104":2,"107":2,"113":1,"114":1,"116":1,"117":2,"119":1,"122":2,"124":2,"130":1,"143":1,"149":1,"167":1,"169":6,"170":1,"176":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/v0.5.30/assets/chunks/VPLocalSearchBox.D20U0MDo.js b/v0.5.30/assets/chunks/VPLocalSearchBox.D20U0MDo.js new file mode 100644 index 000000000..6d729fe72 --- /dev/null +++ b/v0.5.30/assets/chunks/VPLocalSearchBox.D20U0MDo.js @@ -0,0 +1,13 @@ +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = [] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} +var It=Object.defineProperty;var Dt=(o,e,t)=>e in o?It(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>(Dt(o,typeof e!="symbol"?e+"":e,t),t);import{Y as yt,h as oe,y as $e,al as kt,am as Ot,d as _t,H as xe,an as tt,k as Fe,ao as Rt,ap as Mt,z as Lt,aq as zt,l as _e,U as de,S as Ee,ar as Pt,as as Vt,Z as Bt,j as $t,at as Wt,o as ee,b as Kt,m as k,a2 as Jt,p as j,au as Ut,av as jt,aw as Gt,c as re,n as rt,e as Se,G as at,F as nt,a as ve,t as pe,ax as qt,q as Ht,s as Qt,ay as it,az as Yt,ab as Zt,ah as Xt,aA as er,_ as tr}from"./framework.BfjuC5t1.js";import{u as rr,d as ar}from"./theme.BUqgOrlt.js";const nr={root:()=>yt(()=>import("./@localSearchIndexroot.C58gNy8P.js"),__vite__mapDeps([]))};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=mt.join(","),gt=typeof Element>"u",ue=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!gt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},bt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},wt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},xt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!xt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!xt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Ft=function(e){return e.tagName==="INPUT"},ur=function(e){return Ft(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=bt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=bt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=mt.concat("iframe").join(","),Re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! +* focus-trap 7.5.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Tr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Nr=function(e){return ge(e)&&!e.shiftKey},Cr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},ye=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),C=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(m){return le(m)}),z=p.slice().reverse().find(function(m){return le(m)}),P=!!f.find(function(m){return se(m)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:P,firstTabbableNode:C,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:z,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,K=f.indexOf(x);return K<0?$?p.slice(p.indexOf(x)+1).find(function(q){return le(q)}):p.slice(0,p.indexOf(x)).reverse().find(function(q){return le(q)}):f[K+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==y(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},E=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,C=c.isBackward,I=C===void 0?!1:C;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var z=l(f,p),P=z>=0?i.containerGroups[z]:void 0;if(z<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var m=ft(i.tabbableGroups,function(V){var U=V.firstTabbableNode;return f===U});if(m<0&&(P.container===f||Re(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f,!1))&&(m=z),m>=0){var x=m===0?i.tabbableGroups.length-1:m-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f,!1))}else{var K=ft(i.tabbableGroups,function(V){var U=V.lastTabbableNode;return f===U});if(K<0&&(P.container===f||Re(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f))&&(K=z),K>=0){var q=K===i.tabbableGroups.length-1?0:K+1,H=i.tabbableGroups[q];M=se(f)>=0?H.firstTabbableNode:H.firstDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},S=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(ye(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}ye(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var C,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),z=i.containerGroups[M].tabbableNodes;if(z.length>0){var P=z.findIndex(function(m){return m===i.mostRecentlyFocusedNode});P>=0&&(a.isKeyForward(i.recentNavEvent)?P+1=0&&(C=z[P-1],I=!1))}}else i.containerGroups.some(function(m){return m.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(C=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(C||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Tr(c)&&ye(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},R=function(c){var f=Ae(c);l(f,c)>=0||ye(a.clickOutsideDeactivates,c)||ye(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},B=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",S,{capture:!0,passive:!1}),r.addEventListener("touchstart",S,{capture:!0,passive:!1}),r.addEventListener("click",R,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",S,!0),r.removeEventListener("touchstart",S,!0),r.removeEventListener("click",R,!0),r.removeEventListener("keydown",L,!0),s},_=function(c){var f=c.some(function(p){var C=Array.from(p.removedNodes);return C.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(_):void 0,O=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){A.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),C=u(c,"checkCanFocusTrap");C||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){C&&v(),B(),O(),p==null||p()};return C?(C(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),C=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var z=function(){ct(function(){M&&b(E(i.nodeFocusedBeforeActivation)),C==null||C()})};return M&&I?(I(E(i.nodeFocusedBeforeActivation)).then(z,z),this):(z(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),B(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function kr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>kt(o),d=>{d&&(t=Dr(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,y=>u.push(y),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((y,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,y)=>this.opt.filter(y,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function _r(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function J(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Et="KEYS",St="VALUES",G="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===G)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==G}).join("")},o.prototype.value=function(){return ce(this._path).node.get(G)},o.prototype.result=function(){switch(this._type){case St:return this.value();case Et:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},zr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}At(o.get(y),e,t,r,n,E,i,s+y)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=J(ke(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=J(je(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==G&&v.startsWith(l)){var y=new Map;return y.set(v.slice(l.length),u.get(v)),new o(y,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,Pr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=J(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return zr(this._tree,e,t)},o.prototype.get=function(e){var t=Ke(this._tree,e);return t!==void 0?t.get(G):void 0},o.prototype.has=function(e){var t=Ke(this._tree,e);return t!==void 0&&t.has(G)},o.prototype.keys=function(){return new Me(this,Et)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(G,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(G,t(r.get(G))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e),n=r.get(G);return n===void 0&&r.set(G,n=t()),n},o.prototype.values=function(){return new Me(this,St)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=J(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),ke=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==G&&e.startsWith(s))return t.push([o,s]),ke(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),ke(void 0,"",t)},Ke=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==G&&e.startsWith(i))return Ke(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},ze=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Ue,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return Rr(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,y,b,E,g,S,T,F,L,R,B,N,_,A,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||Je.batchSize,a=e.batchWait||Je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=J(u.value,2),h=l[0],d=l[1];try{for(v=(_=void 0,D(d)),y=v.next();!y.done;y=v.next()){b=J(y.value,2),E=b[0],g=b[1];try{for(S=(O=void 0,D(g)),T=S.next();!T.done;T=S.next())F=J(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(E):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=S.return)&&w.call(S)}finally{if(O)throw O.error}}}}catch(f){_={error:f}}finally{try{y&&!y.done&&(A=v.return)&&A.call(v)}finally{if(_)throw _.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return R=c.sent(),B={error:R},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(B)throw B.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Be.minDirtCount,r=r||Be.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=J(u.value,2),h=l[0],d=l[1],v=d.score,y=d.terms,b=d.match,E=y.length||1,g={id:this._documentIds.get(h),score:v*E,terms:Object.keys(b),queryTerms:y,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(S){r={error:S}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,y=v.join(" "),b=s.get(y);b!=null?(b.score+=d,b.count+=1):s.set(y,{score:d,terms:v,count:1})}}catch(R){r={error:R}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var E=[];try{for(var g=D(s),S=g.next();!S.done;S=g.next()){var T=J(S.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;E.push({suggestion:b,terms:v,score:d/L})}}catch(R){a={error:R}}finally{try{S&&!S.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return E.sort(vt),E},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Ve.hasOwnProperty(e))return Pe(Ve,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,y=e.fieldIds,b=e.fieldLength,E=e.averageFieldLength,g=e.storedFields,S=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Te(v),F._idToShortId=new Map,F._fieldIds=y,F._fieldLength=Te(b),F._avgFieldLength=E,F._storedFields=Te(g),F._dirtCount=S||0,F._index=new Le;try{for(var L=D(F._documentIds),R=L.next();!R.done;R=L.next()){var B=J(R.value,2),N=B[0],_=B[1];F._idToShortId.set(_,N)}}catch(P){r={error:P}}finally{try{R&&!R.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var A=D(l),O=A.next();!O.done;O=A.next()){var w=J(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var C=(s=void 0,D(Object.keys(f))),I=C.next();!I.done;I=C.next()){var M=I.value,z=f[M];T===1&&(z=z.ds),p.set(parseInt(M,10),Te(z))}}catch(P){s={error:P}}finally{try{I&&!I.done&&(u=C.return)&&u.call(C)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(P){a={error:P}}finally{try{O&&!O.done&&(i=A.return)&&i.call(A)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,y=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=y.map(Jr(h)),E=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(E,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,z){var P;return W(W({},M),(P={},P[z]=Pe(s.boost,z)||1,P))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,y=W(W({},ht.weights),h),b=y.fuzzy,E=y.prefix,g=this._index.get(e.term),S=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,R=L<1?Math.min(d,Math.round(e.term.length*L)):L;R&&(F=this._index.fuzzyGet(e.term,R))}if(T)try{for(var B=D(T),N=B.next();!N.done;N=B.next()){var _=J(N.value,2),A=_[0],O=_[1],w=A.length-e.term.length;if(w){F==null||F.delete(A);var c=E*A.length/(A.length+.3*w);this.termResults(e.term,A,c,O,u,l,v,S)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=B.return)&&n.call(B)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var A=p.value,C=J(F.get(A),2),I=C[0],w=C[1];if(w){var c=b*A.length/(A.length+w);this.termResults(e.term,A,c,I,u,l,v,S)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return S},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Ge),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),y=v.next();!y.done;y=v.next()){var b=J(y.value,2),E=b[0],g=b[1];d[E]=Object.fromEntries(g)}}catch(S){r={error:S}}finally{try{y&&!y.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(S){e={error:S}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,y;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),E=b.next();!E.done;E=b.next()){var g=E.value,S=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,R=this._avgFieldLength[T];try{for(var B=(d=void 0,D(F.keys())),N=B.next();!N.done;N=B.next()){var _=N.value;if(!this._documentIds.has(_)){this.removeTerm(T,_,t),L-=1;continue}var A=i?i(this._documentIds.get(_),t,this._storedFields.get(_)):1;if(A){var O=F.get(_),w=this._fieldLength.get(_)[T],c=Kr(O,L,this._documentCount,w,R,s),f=r*S*A*c,p=u.get(_);if(p){p.score+=f,jr(p.terms,e);var C=Pe(p.match,t);C?C.push(g):p.match[t]=[g]}else u.set(_,{score:f,terms:[e],match:(y={},y[t]=[g],y)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=B.return)&&v.call(B)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{E&&!E.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(Ht("data-v-f5c68218"),o=o(),Qt(),o),Hr=["aria-owns"],Qr={class:"shell"},Yr=["title"],Zr=Y(()=>k("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>k("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>k("span",{class:"vpi-layout-list local-search-icon"},null,-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>k("span",{class:"vpi-delete local-search-icon"},null,-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ya=Y(()=>k("span",{class:"title-icon"},"#",-1)),ma=["innerHTML"],ga=Y(()=>k("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>k("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>k("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},Na={class:"search-keyboard-shortcuts"},Ca=["aria-label"],Ia=Y(()=>k("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),Da=[Ia],ka=["aria-label"],Oa=Y(()=>k("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),_a=[Oa],Ra=["aria-label"],Ma=Y(()=>k("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),La=[Ma],za=["aria-label"],Pa=_t({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var z,P;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=kr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var m,x,$,K,q,H,V,U,Z;return it(Br.loadJSON(($=await((x=(m=a.value)[u.value])==null?void 0:x.call(m)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&((H=(q=l.value.search.options)==null?void 0:q.miniSearch)==null?void 0:H.searchOptions)},...((V=l.value.search)==null?void 0:V.provider)==="local"&&((Z=(U=l.value.search.options)==null?void 0:U.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var m,x;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):Rt("vitepress:local-search-filter",""),y=Mt("vitepress:local-search-detailed-list",((z=l.value.search)==null?void 0:z.provider)==="local"&&((P=l.value.search.options)==null?void 0:P.detailedView)===!0),b=Fe(()=>{var m,x,$;return((m=l.value.search)==null?void 0:m.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),E=Fe(()=>{var x,$,K,q,H,V,U;const m=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((H=(q=(K=($=m==null?void 0:m.locales)==null?void 0:$[u.value])==null?void 0:K.translations)==null?void 0:q.button)==null?void 0:H.buttonText)||((U=(V=m==null?void 0:m.translations)==null?void 0:V.button)==null?void 0:U.buttonText)||"Search"});Lt(()=>{b.value&&(y.value=!1)});const g=xe([]),S=oe(!1);$e(v,()=>{S.value=!1});const T=tt(async()=>{if(n.value)return it(new _r(n.value))},null),F=new qr(16);zt(()=>[h.value,v.value,y.value],async([m,x,$],K,q)=>{var be,qe,He,Qe;(K==null?void 0:K[0])!==m&&F.clear();let H=!1;if(q(()=>{H=!0}),!m)return;g.value=m.search(x).slice(0,16),S.value=!0;const V=$?await Promise.all(g.value.map(Q=>L(Q.id))):[];if(H)return;for(const{id:Q,mod:ae}of V){const ne=Q.slice(0,Q.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(H)return}const U=new Set;if(g.value=g.value.map(Q=>{const[ae,ne]=Q.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in Q.match)U.add(ie);return{...Q,text:X}}),await de(),H)return;await new Promise(Q=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(U),{done:Q})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const Q of Z)(qe=Q.querySelector('mark[data-markjs="true"]'))==null||qe.scrollIntoView({block:"center"});(Qe=(He=n.value)==null?void 0:He.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(m){const x=Xt(m.slice(0,m.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await yt(()=>import(x),__vite__mapDeps([]))}}catch($){return console.error($),{id:m,mod:{}}}}const R=oe(),B=Fe(()=>{var m;return((m=v.value)==null?void 0:m.length)<=0});function N(m=!0){var x,$;(x=R.value)==null||x.focus(),m&&(($=R.value)==null||$.select())}_e(()=>{N()});function _(m){m.pointerType==="mouse"&&N()}const A=oe(-1),O=oe(!1);$e(g,m=>{A.value=m.length?0:-1,w()});function w(){de(()=>{const m=document.querySelector(".result.selected");m&&m.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=g.value.length&&(A.value=0),O.value=!0,w()});const c=Pt();Ee("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const x=g.value[A.value];if(m.target instanceof HTMLInputElement&&!x){m.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});_e(()=>{window.history.pushState(null,"",null)}),Vt("popstate",m=>{m.preventDefault(),t("close")});const C=Bt($t?document.body:null);_e(()=>{de(()=>{C.value=!0,de().then(()=>s())})}),Wt(()=>{C.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(m){return new RegExp([...m].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(m,x)=>{var $,K,q,H;return ee(),Kt(qt,{to:"body"},[k("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[k("div",{class:"backdrop",onClick:x[0]||(x[0]=V=>m.$emit("close"))}),k("div",Qr,[k("form",{class:"search-bar",onPointerup:x[4]||(x[4]=V=>_(V)),onSubmit:x[5]||(x[5]=Jt(()=>{},["prevent"]))},[k("label",{title:E.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),k("div",ea,[k("button",{class:"back-button",title:j(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=V=>m.$emit("close"))},aa,8,ta)]),Ut(k("input",{ref_key:"searchInput",ref:R,"onUpdate:modelValue":x[2]||(x[2]=V=>Gt(v)?v.value=V:null),placeholder:E.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[jt,j(v)]]),k("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":j(y)}]),type:"button",title:j(p)("modal.displayDetails"),onClick:x[3]||(x[3]=V=>A.value>-1&&(y.value=!j(y)))},ua,10,oa)),k("button",{class:"clear-button",type:"reset",disabled:B.value,title:j(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),k("ul",{ref_key:"resultsEl",ref:n,id:(K=g.value)!=null&&K.length?"localsearch-list":void 0,role:(q=g.value)!=null&&q.length?"listbox":void 0,"aria-labelledby":(H=g.value)!=null&&H.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=V=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(V,U)=>(ee(),re("li",{key:V.id,role:"option","aria-selected":A.value===U?"true":"false"},[k("a",{href:V.id,class:rt(["result",{selected:A.value===U}]),"aria-label":[...V.titles,V.title].join(" > "),onMouseenter:Z=>!O.value&&(A.value=U),onFocusin:Z=>A.value=U,onClick:x[6]||(x[6]=Z=>m.$emit("close"))},[k("div",null,[k("div",pa,[ya,(ee(!0),re(nt,null,at(V.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[k("span",{class:"text",innerHTML:Z},null,8,ma),ga]))),128)),k("span",ba,[k("span",{class:"text",innerHTML:V.title},null,8,wa)])]),j(y)?(ee(),re("div",xa,[V.text?(ee(),re("div",Fa,[k("div",{class:"vp-doc",innerHTML:V.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),j(v)&&!g.value.length&&S.value?(ee(),re("li",Ta,[ve(pe(j(p)("modal.noResultsText"))+' "',1),k("strong",null,pe(j(v)),1),ve('" ')])):Se("",!0)],40,ha),k("div",Na,[k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.navigateUpKeyAriaLabel")},Da,8,Ca),k("kbd",{"aria-label":j(p)("modal.footer.navigateDownKeyAriaLabel")},_a,8,ka),ve(" "+pe(j(p)("modal.footer.navigateText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.selectKeyAriaLabel")},La,8,Ra),ve(" "+pe(j(p)("modal.footer.selectText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.closeKeyAriaLabel")},"esc",8,za),ve(" "+pe(j(p)("modal.footer.closeText")),1)])])])],8,Hr)])}}}),Ja=tr(Pa,[["__scopeId","data-v-f5c68218"]]);export{Ja as default}; diff --git a/v0.5.30/assets/chunks/framework.BfjuC5t1.js b/v0.5.30/assets/chunks/framework.BfjuC5t1.js new file mode 100644 index 000000000..d4b1975dd --- /dev/null +++ b/v0.5.30/assets/chunks/framework.BfjuC5t1.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Tr(e,t){const n=new Set(e.split(","));return t?r=>n.has(r.toLowerCase()):r=>n.has(r)}const ee={},_t=[],xe=()=>{},Si=()=>!1,Wt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ar=e=>e.startsWith("onUpdate:"),ce=Object.assign,Rr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ti=Object.prototype.hasOwnProperty,Y=(e,t)=>Ti.call(e,t),B=Array.isArray,vt=e=>An(e)==="[object Map]",Zs=e=>An(e)==="[object Set]",q=e=>typeof e=="function",ne=e=>typeof e=="string",At=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",eo=e=>(Z(e)||q(e))&&q(e.then)&&q(e.catch),to=Object.prototype.toString,An=e=>to.call(e),Ai=e=>An(e).slice(8,-1),no=e=>An(e)==="[object Object]",Lr=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bt=Tr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Rn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ri=/-(\w)/g,Fe=Rn(e=>e.replace(Ri,(t,n)=>n?n.toUpperCase():"")),Li=/\B([A-Z])/g,ft=Rn(e=>e.replace(Li,"-$1").toLowerCase()),Ln=Rn(e=>e.charAt(0).toUpperCase()+e.slice(1)),hn=Rn(e=>e?`on${Ln(e)}`:""),Ze=(e,t)=>!Object.is(e,t),pn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ur=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Oi=e=>{const t=ne(e)?Number(e):NaN;return isNaN(t)?e:t};let rs;const ro=()=>rs||(rs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Or(e){if(B(e)){const t={};for(let n=0;n{if(n){const r=n.split(Mi);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ir(e){let t="";if(ne(e))t=e;else if(B(e))for(let n=0;nne(e)?e:e==null?"":B(e)||Z(e)&&(e.toString===to||!q(e.toString))?JSON.stringify(e,oo,2):String(e),oo=(e,t)=>t&&t.__v_isRef?oo(e,t.value):vt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[qn(r,o)+" =>"]=s,n),{})}:Zs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>qn(n))}:At(t)?qn(t):Z(t)&&!B(t)&&!no(t)?String(t):t,qn=(e,t="")=>{var n;return At(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ve;class Hi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ve;try{return ve=this,t()}finally{ve=n}}}on(){ve=this}off(){ve=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),ht()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ye,n=ct;try{return Ye=!0,ct=this,this._runnings++,ss(this),this.fn()}finally{os(this),this._runnings--,ct=n,Ye=t}}stop(){var t;this.active&&(ss(this),os(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function Di(e){return e.value}function ss(e){e._trackId++,e._depsLength=0}function os(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},vn=new WeakMap,at=Symbol(""),hr=Symbol("");function ye(e,t,n){if(Ye&&ct){let r=vn.get(e);r||vn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=fo(()=>r.delete(n))),ao(ct,s)}}function je(e,t,n,r,s,o){const i=vn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&B(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!At(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":B(e)?Lr(n)&&l.push(i.get("length")):(l.push(i.get(at)),vt(e)&&l.push(i.get(hr)));break;case"delete":B(e)||(l.push(i.get(at)),vt(e)&&l.push(i.get(hr)));break;case"set":vt(e)&&l.push(i.get(at));break}Pr();for(const c of l)c&&uo(c,4);Nr()}function Ui(e,t){var n;return(n=vn.get(e))==null?void 0:n.get(t)}const Bi=Tr("__proto__,__v_isRef,__isVue"),ho=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(At)),is=ki();function ki(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){dt(),Pr();const r=J(this)[t].apply(this,n);return Nr(),ht(),r}}),e}function Ki(e){const t=J(this);return ye(t,"has",e),t.hasOwnProperty(e)}class po{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?rl:_o:o?yo:mo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=B(t);if(!s){if(i&&Y(is,n))return Reflect.get(is,n,r);if(n==="hasOwnProperty")return Ki}const l=Reflect.get(t,n,r);return(At(n)?ho.has(n):Bi(n))||(s||ye(t,"get",n),o)?l:de(l)?i&&Lr(n)?l:l.value:Z(l)?s?Mn(l):In(l):l}}class go extends po{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=St(o);if(!bn(r)&&!St(r)&&(o=J(o),r=J(r)),!B(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=B(t)&&Lr(n)?Number(n)e,On=e=>Reflect.getPrototypeOf(e);function Qt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(Ze(t,o)&&ye(s,"get",t),ye(s,"get",o));const{has:i}=On(s),l=r?Fr:n?jr:Dt;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Zt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(Ze(e,s)&&ye(r,"has",e),ye(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function en(e,t=!1){return e=e.__v_raw,!t&&ye(J(e),"iterate",at),Reflect.get(e,"size",e)}function ls(e){e=J(e);const t=J(this);return On(t).has.call(t,e)||(t.add(e),je(t,"add",e,e)),this}function cs(e,t){t=J(t);const n=J(this),{has:r,get:s}=On(n);let o=r.call(n,e);o||(e=J(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?Ze(t,i)&&je(n,"set",e,t):je(n,"add",e,t),this}function as(e){const t=J(this),{has:n,get:r}=On(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&je(t,"delete",e,void 0),o}function us(){const e=J(this),t=e.size!==0,n=e.clear();return t&&je(e,"clear",void 0,void 0),n}function tn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Fr:e?jr:Dt;return!e&&ye(l,"iterate",at),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function nn(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=vt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Fr:t?jr:Dt;return!t&&ye(o,"iterate",c?hr:at),{next(){const{value:h,done:p}=a.next();return p?{value:h,done:p}:{value:l?[f(h[0]),f(h[1])]:f(h),done:p}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Xi(){const e={get(o){return Qt(this,o)},get size(){return en(this)},has:Zt,add:ls,set:cs,delete:as,clear:us,forEach:tn(!1,!1)},t={get(o){return Qt(this,o,!1,!0)},get size(){return en(this)},has:Zt,add:ls,set:cs,delete:as,clear:us,forEach:tn(!1,!0)},n={get(o){return Qt(this,o,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:tn(!0,!1)},r={get(o){return Qt(this,o,!0,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:tn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=nn(o,!1,!1),n[o]=nn(o,!0,!1),t[o]=nn(o,!1,!0),r[o]=nn(o,!0,!0)}),[e,n,t,r]}const[Yi,Ji,Qi,Zi]=Xi();function $r(e,t){const n=t?e?Zi:Qi:e?Ji:Yi;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,o)}const el={get:$r(!1,!1)},tl={get:$r(!1,!0)},nl={get:$r(!0,!1)},mo=new WeakMap,yo=new WeakMap,_o=new WeakMap,rl=new WeakMap;function sl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ol(e){return e.__v_skip||!Object.isExtensible(e)?0:sl(Ai(e))}function In(e){return St(e)?e:Hr(e,!1,qi,el,mo)}function il(e){return Hr(e,!1,zi,tl,yo)}function Mn(e){return Hr(e,!0,Gi,nl,_o)}function Hr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=ol(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function wt(e){return St(e)?wt(e.__v_raw):!!(e&&e.__v_isReactive)}function St(e){return!!(e&&e.__v_isReadonly)}function bn(e){return!!(e&&e.__v_isShallow)}function vo(e){return wt(e)||St(e)}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function Mt(e){return Object.isExtensible(e)&&_n(e,"__v_skip",!0),e}const Dt=e=>Z(e)?In(e):e,jr=e=>Z(e)?Mn(e):e;class bo{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Mr(()=>t(this._value),()=>Pt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Ze(t._value,t._value=t.effect.run())&&Pt(t,4),Vr(t),t.effect._dirtyLevel>=2&&Pt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function ll(e,t,n=!1){let r,s;const o=q(e);return o?(r=e,s=xe):(r=e.get,s=e.set),new bo(r,s,o||!s,n)}function Vr(e){var t;Ye&&ct&&(e=J(e),ao(ct,(t=e.dep)!=null?t:e.dep=fo(()=>e.dep=void 0,e instanceof bo?e:void 0)))}function Pt(e,t=4,n){e=J(e);const r=e.dep;r&&uo(r,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function se(e){return wo(e,!1)}function Dr(e){return wo(e,!0)}function wo(e,t){return de(e)?e:new cl(e,t)}class cl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Dt(t)}get value(){return Vr(this),this._value}set value(t){const n=this.__v_isShallow||bn(t)||St(t);t=n?t:J(t),Ze(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Dt(t),Pt(this,4))}}function Eo(e){return de(e)?e.value:e}const al={get:(e,t,n)=>Eo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Co(e){return wt(e)?e:new Proxy(e,al)}class ul{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Vr(this),()=>Pt(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function fl(e){return new ul(e)}class dl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ui(J(this._object),this._key)}}class hl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function pl(e,t,n){return de(e)?e:q(e)?new hl(e):Z(e)&&arguments.length>1?gl(e,t,n):se(e)}function gl(e,t,n){const r=e[t];return de(r)?r:new dl(e,t,n)}/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Je(e,t,n,r){try{return r?e(...r):e()}catch(s){qt(s,t,n)}}function Se(e,t,n,r){if(q(e)){const o=Je(e,t,n,r);return o&&eo(o)&&o.catch(i=>{qt(i,t,n)}),o}const s=[];for(let o=0;o>>1,s=he[r],o=Bt(s);oPe&&he.splice(t,1)}function vl(e){B(e)?Et.push(...e):(!qe||!qe.includes(e,e.allowRecurse?ot+1:ot))&&Et.push(e),So()}function fs(e,t,n=Ut?Pe+1:0){for(;nBt(n)-Bt(r));if(Et.length=0,qe){qe.push(...t);return}for(qe=t,ot=0;ote.id==null?1/0:e.id,bl=(e,t)=>{const n=Bt(e)-Bt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function To(e){pr=!1,Ut=!0,he.sort(bl);try{for(Pe=0;Pene(y)?y.trim():y)),h&&(s=n.map(ur))}let l,c=r[l=hn(t)]||r[l=hn(Fe(t))];!c&&o&&(c=r[l=hn(ft(t))]),c&&Se(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(a,e,6,s)}}function Ao(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!q(e)){const c=a=>{const f=Ao(a,t,!0);f&&(l=!0,ce(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(B(o)?o.forEach(c=>i[c]=null):ce(i,o),Z(e)&&r.set(e,i),i)}function Fn(e,t){return!e||!Wt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ft(t))||Y(e,t))}let le=null,$n=null;function En(e){const t=le;return le=e,$n=e&&e.type.__scopeId||null,t}function Qa(e){$n=e}function Za(){$n=null}function El(e,t=le,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&Ss(-1);const o=En(t);let i;try{i=e(...s)}finally{En(o),r._d&&Ss(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Gn(e){const{type:t,vnode:n,proxy:r,withProxy:s,props:o,propsOptions:[i],slots:l,attrs:c,emit:a,render:f,renderCache:h,data:p,setupState:y,ctx:v,inheritAttrs:I}=e;let N,K;const k=En(e);try{if(n.shapeFlag&4){const _=s||r,M=_;N=Re(f.call(M,_,h,o,y,p,v)),K=c}else{const _=t;N=Re(_.length>1?_(o,{attrs:c,slots:l,emit:a}):_(o,null)),K=t.props?c:Cl(c)}}catch(_){jt.length=0,qt(_,e,1),N=oe(be)}let g=N;if(K&&I!==!1){const _=Object.keys(K),{shapeFlag:M}=g;_.length&&M&7&&(i&&_.some(Ar)&&(K=xl(K,i)),g=et(g,K))}return n.dirs&&(g=et(g),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),N=g,En(k),N}const Cl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Wt(n))&&((t||(t={}))[n]=e[n]);return t},xl=(e,t)=>{const n={};for(const r in e)(!Ar(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Sl(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ds(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Oo(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):vl(e)}const Rl=Symbol.for("v-scx"),Ll=()=>xt(Rl);function kr(e,t){return Hn(e,null,t)}function nu(e,t){return Hn(e,null,{flush:"post"})}const rn={};function Ve(e,t,n){return Hn(e,t,n)}function Hn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ee){if(t&&o){const L=t;t=(...F)=>{L(...F),M()}}const c=ue,a=L=>r===!0?L:lt(L,r===!1?1:void 0);let f,h=!1,p=!1;if(de(e)?(f=()=>e.value,h=bn(e)):wt(e)?(f=()=>a(e),h=!0):B(e)?(p=!0,h=e.some(L=>wt(L)||bn(L)),f=()=>e.map(L=>{if(de(L))return L.value;if(wt(L))return a(L);if(q(L))return Je(L,c,2)})):q(e)?t?f=()=>Je(e,c,2):f=()=>(y&&y(),Se(e,c,3,[v])):f=xe,t&&r){const L=f;f=()=>lt(L())}let y,v=L=>{y=g.onStop=()=>{Je(L,c,4),y=g.onStop=void 0}},I;if(Xt)if(v=xe,t?n&&Se(t,c,3,[f(),p?[]:void 0,v]):f(),s==="sync"){const L=Ll();I=L.__watcherHandles||(L.__watcherHandles=[])}else return xe;let N=p?new Array(e.length).fill(rn):rn;const K=()=>{if(!(!g.active||!g.dirty))if(t){const L=g.run();(r||h||(p?L.some((F,T)=>Ze(F,N[T])):Ze(L,N)))&&(y&&y(),Se(t,c,3,[L,N===rn?void 0:p&&N[0]===rn?[]:N,v]),N=L)}else g.run()};K.allowRecurse=!!t;let k;s==="sync"?k=K:s==="post"?k=()=>ge(K,c&&c.suspense):(K.pre=!0,c&&(K.id=c.uid),k=()=>Nn(K));const g=new Mr(f,xe,k),_=io(),M=()=>{g.stop(),_&&Rr(_.effects,g)};return t?n?K():N=g.run():s==="post"?ge(g.run.bind(g),c&&c.suspense):g.run(),I&&I.push(M),M}function Ol(e,t,n){const r=this.proxy,s=ne(e)?e.includes(".")?Io(r,e):()=>r[e]:e.bind(r,r);let o;q(t)?o=t:(o=t.handler,n=t);const i=zt(this),l=Hn(s,o.bind(r),n);return i(),l}function Io(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s0){if(n>=t)return e;n++}if(r=r||new Set,r.has(e))return e;if(r.add(e),de(e))lt(e.value,t,n,r);else if(B(e))for(let s=0;s{lt(s,t,n,r)});else if(no(e))for(const s in e)lt(e[s],t,n,r);return e}function ru(e,t){if(le===null)return e;const n=Bn(le)||le.proxy,r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),$o(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],Mo={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},Ml={name:"BaseTransition",props:Mo,setup(e,{slots:t}){const n=Un(),r=Il();return()=>{const s=t.default&&No(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const p of s)if(p.type!==be){o=p;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return zn(o);const c=ps(o);if(!c)return zn(o);const a=gr(c,i,r,n);mr(c,a);const f=n.subTree,h=f&&ps(f);if(h&&h.type!==be&&!it(c,h)){const p=gr(h,i,r,n);if(mr(h,p),l==="out-in")return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},zn(o);l==="in-out"&&c.type!==be&&(p.delayLeave=(y,v,I)=>{const N=Po(r,h);N[String(h.key)]=h,y[Ge]=()=>{v(),y[Ge]=void 0,delete a.delayedLeave},a.delayedLeave=I})}return o}}},Pl=Ml;function Po(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function gr(e,t,n,r){const{appear:s,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:h,onLeave:p,onAfterLeave:y,onLeaveCancelled:v,onBeforeAppear:I,onAppear:N,onAfterAppear:K,onAppearCancelled:k}=t,g=String(e.key),_=Po(n,e),M=(T,$)=>{T&&Se(T,r,9,$)},L=(T,$)=>{const E=$[1];M(T,$),B(T)?T.every(j=>j.length<=1)&&E():T.length<=1&&E()},F={mode:o,persisted:i,beforeEnter(T){let $=l;if(!n.isMounted)if(s)$=I||l;else return;T[Ge]&&T[Ge](!0);const E=_[g];E&&it(e,E)&&E.el[Ge]&&E.el[Ge](),M($,[T])},enter(T){let $=c,E=a,j=f;if(!n.isMounted)if(s)$=N||c,E=K||a,j=k||f;else return;let A=!1;const G=T[sn]=ie=>{A||(A=!0,ie?M(j,[T]):M(E,[T]),F.delayedLeave&&F.delayedLeave(),T[sn]=void 0)};$?L($,[T,G]):G()},leave(T,$){const E=String(e.key);if(T[sn]&&T[sn](!0),n.isUnmounting)return $();M(h,[T]);let j=!1;const A=T[Ge]=G=>{j||(j=!0,$(),G?M(v,[T]):M(y,[T]),T[Ge]=void 0,_[E]===e&&delete _[E])};_[E]=e,p?L(p,[T,A]):A()},clone(T){return gr(T,t,n,r)}};return F}function zn(e){if(Gt(e))return e=et(e),e.children=null,e}function ps(e){return Gt(e)?e.children?e.children[0]:void 0:e}function mr(e,t){e.shapeFlag&6&&e.component?mr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function No(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function su(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,p()),p=()=>{let y;return c||(y=c=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),l)return new Promise((I,N)=>{l(v,()=>I(h()),()=>N(v),f+1)});throw v}).then(v=>y!==c&&c?c:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),a=v,v)))};return Kr({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const y=ue;if(a)return()=>Xn(a,y);const v=k=>{c=null,qt(k,y,13,!r)};if(i&&y.suspense||Xt)return p().then(k=>()=>Xn(k,y)).catch(k=>(v(k),()=>r?oe(r,{error:k}):null));const I=se(!1),N=se(),K=se(!!s);return s&&setTimeout(()=>{K.value=!1},s),o!=null&&setTimeout(()=>{if(!I.value&&!N.value){const k=new Error(`Async component timed out after ${o}ms.`);v(k),N.value=k}},o),p().then(()=>{I.value=!0,y.parent&&Gt(y.parent.vnode)&&(y.parent.effect.dirty=!0,Nn(y.parent.update))}).catch(k=>{v(k),N.value=k}),()=>{if(I.value&&a)return Xn(a,y);if(N.value&&r)return oe(r,{error:N.value});if(n&&!K.value)return oe(n)}}})}function Xn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=oe(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const Gt=e=>e.type.__isKeepAlive;function Nl(e,t){Fo(e,"a",t)}function Fl(e,t){Fo(e,"da",t)}function Fo(e,t,n=ue){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(jn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Gt(s.parent.vnode)&&$l(r,t,n,s),s=s.parent}}function $l(e,t,n,r){const s=jn(t,e,r,!0);Vn(()=>{Rr(r[t],s)},n)}function jn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;dt();const l=zt(n),c=Se(t,n,e,i);return l(),ht(),c});return r?s.unshift(o):s.push(o),o}}const Ue=e=>(t,n=ue)=>(!Xt||e==="sp")&&jn(e,(...r)=>t(...r),n),Hl=Ue("bm"),Rt=Ue("m"),jl=Ue("bu"),Vl=Ue("u"),$o=Ue("bum"),Vn=Ue("um"),Dl=Ue("sp"),Ul=Ue("rtg"),Bl=Ue("rtc");function kl(e,t=ue){jn("ec",e,t)}function ou(e,t,n,r){let s;const o=n&&n[r];if(B(e)||ne(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o&&o[l]));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;lSn(t)?!(t.type===be||t.type===me&&!Ho(t.children)):!0)?e:null}function lu(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:hn(r)]=e[r];return n}const yr=e=>e?ti(e)?Bn(e)||e.proxy:yr(e.parent):null,Nt=ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yr(e.parent),$root:e=>yr(e.root),$emit:e=>e.emit,$options:e=>Wr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Nn(e.update)}),$nextTick:e=>e.n||(e.n=Pn.bind(e.proxy)),$watch:e=>Ol.bind(e)}),Yn=(e,t)=>e!==ee&&!e.__isScriptSetup&&Y(e,t),Kl={get({_:e},t){const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=i[t];if(y!==void 0)switch(y){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(Yn(r,t))return i[t]=1,r[t];if(s!==ee&&Y(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return i[t]=3,o[t];if(n!==ee&&Y(n,t))return i[t]=4,n[t];_r&&(i[t]=0)}}const f=Nt[t];let h,p;if(f)return t==="$attrs"&&ye(e,"get",t),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ee&&Y(n,t))return i[t]=4,n[t];if(p=c.config.globalProperties,Y(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return Yn(s,t)?(s[t]=n,!0):r!==ee&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ee&&Y(e,i)||Yn(t,i)||(l=o[0])&&Y(l,i)||Y(r,i)||Y(Nt,i)||Y(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function cu(){return Wl().slots}function Wl(){const e=Un();return e.setupContext||(e.setupContext=ri(e))}function gs(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let _r=!0;function ql(e){const t=Wr(e),n=e.proxy,r=e.ctx;_r=!1,t.beforeCreate&&ms(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:p,beforeUpdate:y,updated:v,activated:I,deactivated:N,beforeDestroy:K,beforeUnmount:k,destroyed:g,unmounted:_,render:M,renderTracked:L,renderTriggered:F,errorCaptured:T,serverPrefetch:$,expose:E,inheritAttrs:j,components:A,directives:G,filters:ie}=t;if(a&&Gl(a,r,null),i)for(const X in i){const V=i[X];q(V)&&(r[X]=V.bind(n))}if(s){const X=s.call(n,n);Z(X)&&(e.data=In(X))}if(_r=!0,o)for(const X in o){const V=o[X],$e=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):xe,Yt=!q(V)&&q(V.set)?V.set.bind(n):xe,tt=re({get:$e,set:Yt});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Oe=>tt.value=Oe})}if(l)for(const X in l)jo(l[X],r,n,X);if(c){const X=q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Zl(V,X[V])})}f&&ms(f,e,"c");function D(X,V){B(V)?V.forEach($e=>X($e.bind(n))):V&&X(V.bind(n))}if(D(Hl,h),D(Rt,p),D(jl,y),D(Vl,v),D(Nl,I),D(Fl,N),D(kl,T),D(Bl,L),D(Ul,F),D($o,k),D(Vn,_),D(Dl,$),B(E))if(E.length){const X=e.exposed||(e.exposed={});E.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:$e=>n[V]=$e})})}else e.exposed||(e.exposed={});M&&e.render===xe&&(e.render=M),j!=null&&(e.inheritAttrs=j),A&&(e.components=A),G&&(e.directives=G)}function Gl(e,t,n=xe){B(e)&&(e=vr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=xt(s.from||r,s.default,!0):o=xt(s.from||r):o=xt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function ms(e,t,n){Se(B(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function jo(e,t,n,r){const s=r.includes(".")?Io(n,r):()=>n[r];if(ne(e)){const o=t[e];q(o)&&Ve(s,o)}else if(q(e))Ve(s,e.bind(n));else if(Z(e))if(B(e))e.forEach(o=>jo(o,t,n,r));else{const o=q(e.handler)?e.handler.bind(n):t[e.handler];q(o)&&Ve(s,o,e)}}function Wr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>Cn(c,a,i,!0)),Cn(c,t,i)),Z(t)&&o.set(t,c),c}function Cn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&Cn(e,o,n,!0),s&&s.forEach(i=>Cn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=zl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const zl={data:ys,props:_s,emits:_s,methods:It,computed:It,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:It,directives:It,watch:Yl,provide:ys,inject:Xl};function ys(e,t){return t?e?function(){return ce(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Xl(e,t){return It(vr(e),vr(t))}function vr(e){if(B(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(r&&r.proxy):t}}function ec(e,t,n,r=!1){const s={},o={};_n(o,Dn,1),e.propsDefaults=Object.create(null),Do(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:il(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function tc(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,y]=Uo(h,t,!0);ce(i,p),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,_t),_t;if(B(o))for(let f=0;f-1,y[1]=I<0||v-1||Y(y,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function vs(e){return e[0]!=="$"&&!bt(e)}function bs(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ws(e,t){return bs(e)===bs(t)}function Es(e,t){return B(t)?t.findIndex(n=>ws(n,e)):q(t)&&ws(t,e)?0:-1}const Bo=e=>e[0]==="_"||e==="$stable",qr=e=>B(e)?e.map(Re):[Re(e)],nc=(e,t,n)=>{if(t._n)return t;const r=El((...s)=>qr(t(...s)),n);return r._c=!1,r},ko=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Bo(s))continue;const o=e[s];if(q(o))t[s]=nc(s,o,r);else if(o!=null){const i=qr(o);t[s]=()=>i}}},Ko=(e,t)=>{const n=qr(t);e.slots.default=()=>n},rc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=J(t),_n(t,"_",n)):ko(t,e.slots={})}else e.slots={},t&&Ko(e,t);_n(e.slots,Dn,1)},sc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ee;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(ce(s,t),!n&&l===1&&delete s._):(o=!t.$stable,ko(t,s)),i=t}else t&&(Ko(e,t),i={default:1});if(o)for(const l in s)!Bo(l)&&i[l]==null&&delete s[l]};function xn(e,t,n,r,s=!1){if(B(e)){e.forEach((p,y)=>xn(p,t&&(B(t)?t[y]:t),n,r,s));return}if(Ct(r)&&!s)return;const o=r.shapeFlag&4?Bn(r.component)||r.component.proxy:r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===ee?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(ne(a)?(f[a]=null,Y(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),q(c))Je(c,l,12,[i,f]);else{const p=ne(c),y=de(c);if(p||y){const v=()=>{if(e.f){const I=p?Y(h,c)?h[c]:f[c]:c.value;s?B(I)&&Rr(I,o):B(I)?I.includes(o)||I.push(o):p?(f[c]=[o],Y(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else p?(f[c]=i,Y(h,c)&&(h[c]=i)):y&&(c.value=i,e.k&&(f[e.k]=i))};i?(v.id=-1,ge(v,n)):v()}}}let ke=!1;const oc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",ic=e=>e.namespaceURI.includes("MathML"),on=e=>{if(oc(e))return"svg";if(ic(e))return"mathml"},ln=e=>e.nodeType===8;function lc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),wn(),_._vnode=g;return}ke=!1,h(_.firstChild,g,null,null,null),wn(),_._vnode=g,ke&&console.error("Hydration completed but contains mismatches.")},h=(g,_,M,L,F,T=!1)=>{const $=ln(g)&&g.data==="[",E=()=>I(g,_,M,L,F,$),{type:j,ref:A,shapeFlag:G,patchFlag:ie}=_;let fe=g.nodeType;_.el=g,ie===-2&&(T=!1,_.dynamicChildren=null);let D=null;switch(j){case Tt:fe!==3?_.children===""?(c(_.el=s(""),i(g),g),D=g):D=E():(g.data!==_.children&&(ke=!0,g.data=_.children),D=o(g));break;case be:k(g)?(D=o(g),K(_.el=g.content.firstChild,g,M)):fe!==8||$?D=E():D=o(g);break;case Ht:if($&&(g=o(g),fe=g.nodeType),fe===1||fe===3){D=g;const X=!_.children.length;for(let V=0;V<_.staticCount;V++)X&&(_.children+=D.nodeType===1?D.outerHTML:D.data),V===_.staticCount-1&&(_.anchor=D),D=o(D);return $?o(D):D}else E();break;case me:$?D=v(g,_,M,L,F,T):D=E();break;default:if(G&1)(fe!==1||_.type.toLowerCase()!==g.tagName.toLowerCase())&&!k(g)?D=E():D=p(g,_,M,L,F,T);else if(G&6){_.slotScopeIds=F;const X=i(g);if($?D=N(g):ln(g)&&g.data==="teleport start"?D=N(g,g.data,"teleport end"):D=o(g),t(_,X,null,M,L,on(X),T),Ct(_)){let V;$?(V=oe(me),V.anchor=D?D.previousSibling:X.lastChild):V=g.nodeType===3?ei(""):oe("div"),V.el=g,_.component.subTree=V}}else G&64?fe!==8?D=E():D=_.type.hydrate(g,_,M,L,F,T,e,y):G&128&&(D=_.type.hydrate(g,_,M,L,on(i(g)),F,T,e,h))}return A!=null&&xn(A,null,L,_),D},p=(g,_,M,L,F,T)=>{T=T||!!_.dynamicChildren;const{type:$,props:E,patchFlag:j,shapeFlag:A,dirs:G,transition:ie}=_,fe=$==="input"||$==="option";if(fe||j!==-1){G&&Me(_,null,M,"created");let D=!1;if(k(g)){D=qo(L,ie)&&M&&M.vnode.props&&M.vnode.props.appear;const V=g.content.firstChild;D&&ie.beforeEnter(V),K(V,g,M),_.el=g=V}if(A&16&&!(E&&(E.innerHTML||E.textContent))){let V=y(g.firstChild,_,g,M,L,F,T);for(;V;){ke=!0;const $e=V;V=V.nextSibling,l($e)}}else A&8&&g.textContent!==_.children&&(ke=!0,g.textContent=_.children);if(E)if(fe||!T||j&48)for(const V in E)(fe&&(V.endsWith("value")||V==="indeterminate")||Wt(V)&&!bt(V)||V[0]===".")&&r(g,V,null,E[V],void 0,void 0,M);else E.onClick&&r(g,"onClick",null,E.onClick,void 0,void 0,M);let X;(X=E&&E.onVnodeBeforeMount)&&Ee(X,M,_),G&&Me(_,null,M,"beforeMount"),((X=E&&E.onVnodeMounted)||G||D)&&Oo(()=>{X&&Ee(X,M,_),D&&ie.enter(g),G&&Me(_,null,M,"mounted")},L)}return g.nextSibling},y=(g,_,M,L,F,T,$)=>{$=$||!!_.dynamicChildren;const E=_.children,j=E.length;for(let A=0;A{const{slotScopeIds:$}=_;$&&(F=F?F.concat($):$);const E=i(g),j=y(o(g),_,E,M,L,F,T);return j&&ln(j)&&j.data==="]"?o(_.anchor=j):(ke=!0,c(_.anchor=a("]"),E,j),j)},I=(g,_,M,L,F,T)=>{if(ke=!0,_.el=null,T){const j=N(g);for(;;){const A=o(g);if(A&&A!==j)l(A);else break}}const $=o(g),E=i(g);return l(g),n(null,_,E,$,M,L,on(E),F),$},N=(g,_="[",M="]")=>{let L=0;for(;g;)if(g=o(g),g&&ln(g)&&(g.data===_&&L++,g.data===M)){if(L===0)return o(g);L--}return g},K=(g,_,M)=>{const L=_.parentNode;L&&L.replaceChild(g,_);let F=M;for(;F;)F.vnode.el===_&&(F.vnode.el=F.subTree.el=g),F=F.parent},k=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[f,h]}const ge=Oo;function cc(e){return Wo(e)}function ac(e){return Wo(e,lc)}function Wo(e,t){const n=ro();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:p,setScopeId:y=xe,insertStaticContent:v}=e,I=(u,d,m,b=null,w=null,S=null,O=void 0,x=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!it(u,d)&&(b=Jt(u),Oe(u,w,S,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:C,ref:P,shapeFlag:U}=d;switch(C){case Tt:N(u,d,m,b);break;case be:K(u,d,m,b);break;case Ht:u==null&&k(d,m,b,O);break;case me:A(u,d,m,b,w,S,O,x,R);break;default:U&1?M(u,d,m,b,w,S,O,x,R):U&6?G(u,d,m,b,w,S,O,x,R):(U&64||U&128)&&C.process(u,d,m,b,w,S,O,x,R,pt)}P!=null&&w&&xn(P,u&&u.ref,S,d||u,!d)},N=(u,d,m,b)=>{if(u==null)r(d.el=l(d.children),m,b);else{const w=d.el=u.el;d.children!==u.children&&a(w,d.children)}},K=(u,d,m,b)=>{u==null?r(d.el=c(d.children||""),m,b):d.el=u.el},k=(u,d,m,b)=>{[u.el,u.anchor]=v(u.children,d,m,b,u.el,u.anchor)},g=({el:u,anchor:d},m,b)=>{let w;for(;u&&u!==d;)w=p(u),r(u,m,b),u=w;r(d,m,b)},_=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=p(u),s(u),u=m;s(d)},M=(u,d,m,b,w,S,O,x,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?L(d,m,b,w,S,O,x,R):$(u,d,w,S,O,x,R)},L=(u,d,m,b,w,S,O,x)=>{let R,C;const{props:P,shapeFlag:U,transition:H,dirs:W}=u;if(R=u.el=i(u.type,S,P&&P.is,P),U&8?f(R,u.children):U&16&&T(u.children,R,null,b,w,Jn(u,S),O,x),W&&Me(u,null,b,"created"),F(R,u,u.scopeId,O,b),P){for(const Q in P)Q!=="value"&&!bt(Q)&&o(R,Q,null,P[Q],S,u.children,b,w,He);"value"in P&&o(R,"value",null,P.value,S),(C=P.onVnodeBeforeMount)&&Ee(C,b,u)}W&&Me(u,null,b,"beforeMount");const z=qo(w,H);z&&H.beforeEnter(R),r(R,d,m),((C=P&&P.onVnodeMounted)||z||W)&&ge(()=>{C&&Ee(C,b,u),z&&H.enter(R),W&&Me(u,null,b,"mounted")},w)},F=(u,d,m,b,w)=>{if(m&&y(u,m),b)for(let S=0;S{for(let C=R;C{const x=d.el=u.el;let{patchFlag:R,dynamicChildren:C,dirs:P}=d;R|=u.patchFlag&16;const U=u.props||ee,H=d.props||ee;let W;if(m&&nt(m,!1),(W=H.onVnodeBeforeUpdate)&&Ee(W,m,d,u),P&&Me(d,u,m,"beforeUpdate"),m&&nt(m,!0),C?E(u.dynamicChildren,C,x,m,b,Jn(d,w),S):O||V(u,d,x,null,m,b,Jn(d,w),S,!1),R>0){if(R&16)j(x,d,U,H,m,b,w);else if(R&2&&U.class!==H.class&&o(x,"class",null,H.class,w),R&4&&o(x,"style",U.style,H.style,w),R&8){const z=d.dynamicProps;for(let Q=0;Q{W&&Ee(W,m,d,u),P&&Me(d,u,m,"updated")},b)},E=(u,d,m,b,w,S,O)=>{for(let x=0;x{if(m!==b){if(m!==ee)for(const x in m)!bt(x)&&!(x in b)&&o(u,x,m[x],null,O,d.children,w,S,He);for(const x in b){if(bt(x))continue;const R=b[x],C=m[x];R!==C&&x!=="value"&&o(u,x,C,R,O,d.children,w,S,He)}"value"in b&&o(u,"value",m.value,b.value,O)}},A=(u,d,m,b,w,S,O,x,R)=>{const C=d.el=u?u.el:l(""),P=d.anchor=u?u.anchor:l("");let{patchFlag:U,dynamicChildren:H,slotScopeIds:W}=d;W&&(x=x?x.concat(W):W),u==null?(r(C,m,b),r(P,m,b),T(d.children||[],m,P,w,S,O,x,R)):U>0&&U&64&&H&&u.dynamicChildren?(E(u.dynamicChildren,H,m,w,S,O,x),(d.key!=null||w&&d===w.subTree)&&Gr(u,d,!0)):V(u,d,m,P,w,S,O,x,R)},G=(u,d,m,b,w,S,O,x,R)=>{d.slotScopeIds=x,u==null?d.shapeFlag&512?w.ctx.activate(d,m,b,O,R):ie(d,m,b,w,S,O,R):fe(u,d,R)},ie=(u,d,m,b,w,S,O)=>{const x=u.component=bc(u,b,w);if(Gt(u)&&(x.ctx.renderer=pt),wc(x),x.asyncDep){if(w&&w.registerDep(x,D),!u.el){const R=x.subTree=oe(be);K(null,R,d,m)}}else D(x,u,d,m,w,S,O)},fe=(u,d,m)=>{const b=d.component=u.component;if(Sl(u,d,m))if(b.asyncDep&&!b.asyncResolved){X(b,d,m);return}else b.next=d,_l(b.update),b.effect.dirty=!0,b.update();else d.el=u.el,b.vnode=d},D=(u,d,m,b,w,S,O)=>{const x=()=>{if(u.isMounted){let{next:P,bu:U,u:H,parent:W,vnode:z}=u;{const gt=Go(u);if(gt){P&&(P.el=z.el,X(u,P,O)),gt.asyncDep.then(()=>{u.isUnmounted||x()});return}}let Q=P,te;nt(u,!1),P?(P.el=z.el,X(u,P,O)):P=z,U&&pn(U),(te=P.props&&P.props.onVnodeBeforeUpdate)&&Ee(te,W,P,z),nt(u,!0);const ae=Gn(u),Ae=u.subTree;u.subTree=ae,I(Ae,ae,h(Ae.el),Jt(Ae),u,w,S),P.el=ae.el,Q===null&&Tl(u,ae.el),H&&ge(H,w),(te=P.props&&P.props.onVnodeUpdated)&&ge(()=>Ee(te,W,P,z),w)}else{let P;const{el:U,props:H}=d,{bm:W,m:z,parent:Q}=u,te=Ct(d);if(nt(u,!1),W&&pn(W),!te&&(P=H&&H.onVnodeBeforeMount)&&Ee(P,Q,d),nt(u,!0),U&&Wn){const ae=()=>{u.subTree=Gn(u),Wn(U,u.subTree,u,w,null)};te?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ae()):ae()}else{const ae=u.subTree=Gn(u);I(null,ae,m,b,u,w,S),d.el=ae.el}if(z&&ge(z,w),!te&&(P=H&&H.onVnodeMounted)){const ae=d;ge(()=>Ee(P,Q,ae),w)}(d.shapeFlag&256||Q&&Ct(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&ge(u.a,w),u.isMounted=!0,d=m=b=null}},R=u.effect=new Mr(x,xe,()=>Nn(C),u.scope),C=u.update=()=>{R.dirty&&R.run()};C.id=u.uid,nt(u,!0),C()},X=(u,d,m)=>{d.component=u;const b=u.vnode.props;u.vnode=d,u.next=null,tc(u,d.props,b,m),sc(u,d.children,m),dt(),fs(u),ht()},V=(u,d,m,b,w,S,O,x,R=!1)=>{const C=u&&u.children,P=u?u.shapeFlag:0,U=d.children,{patchFlag:H,shapeFlag:W}=d;if(H>0){if(H&128){Yt(C,U,m,b,w,S,O,x,R);return}else if(H&256){$e(C,U,m,b,w,S,O,x,R);return}}W&8?(P&16&&He(C,w,S),U!==C&&f(m,U)):P&16?W&16?Yt(C,U,m,b,w,S,O,x,R):He(C,w,S,!0):(P&8&&f(m,""),W&16&&T(U,m,b,w,S,O,x,R))},$e=(u,d,m,b,w,S,O,x,R)=>{u=u||_t,d=d||_t;const C=u.length,P=d.length,U=Math.min(C,P);let H;for(H=0;HP?He(u,w,S,!0,!1,U):T(d,m,b,w,S,O,x,R,U)},Yt=(u,d,m,b,w,S,O,x,R)=>{let C=0;const P=d.length;let U=u.length-1,H=P-1;for(;C<=U&&C<=H;){const W=u[C],z=d[C]=R?ze(d[C]):Re(d[C]);if(it(W,z))I(W,z,m,null,w,S,O,x,R);else break;C++}for(;C<=U&&C<=H;){const W=u[U],z=d[H]=R?ze(d[H]):Re(d[H]);if(it(W,z))I(W,z,m,null,w,S,O,x,R);else break;U--,H--}if(C>U){if(C<=H){const W=H+1,z=WH)for(;C<=U;)Oe(u[C],w,S,!0),C++;else{const W=C,z=C,Q=new Map;for(C=z;C<=H;C++){const _e=d[C]=R?ze(d[C]):Re(d[C]);_e.key!=null&&Q.set(_e.key,C)}let te,ae=0;const Ae=H-z+1;let gt=!1,es=0;const Lt=new Array(Ae);for(C=0;C=Ae){Oe(_e,w,S,!0);continue}let Ie;if(_e.key!=null)Ie=Q.get(_e.key);else for(te=z;te<=H;te++)if(Lt[te-z]===0&&it(_e,d[te])){Ie=te;break}Ie===void 0?Oe(_e,w,S,!0):(Lt[Ie-z]=C+1,Ie>=es?es=Ie:gt=!0,I(_e,d[Ie],m,null,w,S,O,x,R),ae++)}const ts=gt?uc(Lt):_t;for(te=ts.length-1,C=Ae-1;C>=0;C--){const _e=z+C,Ie=d[_e],ns=_e+1{const{el:S,type:O,transition:x,children:R,shapeFlag:C}=u;if(C&6){tt(u.component.subTree,d,m,b);return}if(C&128){u.suspense.move(d,m,b);return}if(C&64){O.move(u,d,m,pt);return}if(O===me){r(S,d,m);for(let U=0;Ux.enter(S),w);else{const{leave:U,delayLeave:H,afterLeave:W}=x,z=()=>r(S,d,m),Q=()=>{U(S,()=>{z(),W&&W()})};H?H(S,z,Q):Q()}else r(S,d,m)},Oe=(u,d,m,b=!1,w=!1)=>{const{type:S,props:O,ref:x,children:R,dynamicChildren:C,shapeFlag:P,patchFlag:U,dirs:H}=u;if(x!=null&&xn(x,null,m,u,!0),P&256){d.ctx.deactivate(u);return}const W=P&1&&H,z=!Ct(u);let Q;if(z&&(Q=O&&O.onVnodeBeforeUnmount)&&Ee(Q,d,u),P&6)xi(u.component,m,b);else{if(P&128){u.suspense.unmount(m,b);return}W&&Me(u,null,d,"beforeUnmount"),P&64?u.type.remove(u,d,m,w,pt,b):C&&(S!==me||U>0&&U&64)?He(C,d,m,!1,!0):(S===me&&U&384||!w&&P&16)&&He(R,d,m),b&&Qr(u)}(z&&(Q=O&&O.onVnodeUnmounted)||W)&&ge(()=>{Q&&Ee(Q,d,u),W&&Me(u,null,d,"unmounted")},m)},Qr=u=>{const{type:d,el:m,anchor:b,transition:w}=u;if(d===me){Ci(m,b);return}if(d===Ht){_(u);return}const S=()=>{s(m),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:O,delayLeave:x}=w,R=()=>O(m,S);x?x(u.el,S,R):R()}else S()},Ci=(u,d)=>{let m;for(;u!==d;)m=p(u),s(u),u=m;s(d)},xi=(u,d,m)=>{const{bum:b,scope:w,update:S,subTree:O,um:x}=u;b&&pn(b),w.stop(),S&&(S.active=!1,Oe(O,u,d,m)),x&&ge(x,d),ge(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},He=(u,d,m,b=!1,w=!1,S=0)=>{for(let O=S;Ou.shapeFlag&6?Jt(u.component.subTree):u.shapeFlag&128?u.suspense.next():p(u.anchor||u.el);let kn=!1;const Zr=(u,d,m)=>{u==null?d._vnode&&Oe(d._vnode,null,null,!0):I(d._vnode||null,u,d,null,null,null,m),kn||(kn=!0,fs(),wn(),kn=!1),d._vnode=u},pt={p:I,um:Oe,m:tt,r:Qr,mt:ie,mc:T,pc:V,pbc:E,n:Jt,o:e};let Kn,Wn;return t&&([Kn,Wn]=t(pt)),{render:Zr,hydrate:Kn,createApp:Ql(Zr,Kn)}}function Jn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function qo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Gr(e,t,n=!1){const r=e.children,s=t.children;if(B(r)&&B(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Go(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Go(t)}const fc=e=>e.__isTeleport,$t=e=>e&&(e.disabled||e.disabled===""),Cs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,xs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,wr=(e,t)=>{const n=e&&e.to;return ne(n)?t?t(n):null:n},dc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:p,o:{insert:y,querySelector:v,createText:I,createComment:N}}=a,K=$t(t.props);let{shapeFlag:k,children:g,dynamicChildren:_}=t;if(e==null){const M=t.el=I(""),L=t.anchor=I("");y(M,n,r),y(L,n,r);const F=t.target=wr(t.props,v),T=t.targetAnchor=I("");F&&(y(T,F),i==="svg"||Cs(F)?i="svg":(i==="mathml"||xs(F))&&(i="mathml"));const $=(E,j)=>{k&16&&f(g,E,j,s,o,i,l,c)};K?$(n,L):F&&$(F,T)}else{t.el=e.el;const M=t.anchor=e.anchor,L=t.target=e.target,F=t.targetAnchor=e.targetAnchor,T=$t(e.props),$=T?n:L,E=T?M:F;if(i==="svg"||Cs(L)?i="svg":(i==="mathml"||xs(L))&&(i="mathml"),_?(p(e.dynamicChildren,_,$,s,o,i,l),Gr(e,t,!0)):c||h(e,t,$,E,s,o,i,l,!1),K)T?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):cn(t,n,M,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const j=t.target=wr(t.props,v);j&&cn(t,j,null,a,0)}else T&&cn(t,L,F,a,1)}zo(t)},remove(e,t,n,r,{um:s,o:{remove:o}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:f,target:h,props:p}=e;if(h&&o(f),i&&o(a),l&16){const y=i||!$t(p);for(let v=0;v0?Le||_t:null,pc(),kt>0&&Le&&Le.push(e),e}function uu(e,t,n,r,s,o){return Yo(Zo(e,t,n,r,s,o,!0))}function Jo(e,t,n,r,s){return Yo(oe(e,t,n,r,s,!0))}function Sn(e){return e?e.__v_isVNode===!0:!1}function it(e,t){return e.type===t.type&&e.key===t.key}const Dn="__vInternal",Qo=({key:e})=>e??null,gn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||de(e)||q(e)?{i:le,r:e,k:t,f:!!n}:e:null);function Zo(e,t=null,n=null,r=0,s=null,o=e===me?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Qo(t),ref:t&&gn(t),scopeId:$n,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:le};return l?(zr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),kt>0&&!i&&Le&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Le.push(c),c}const oe=gc;function gc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ro)&&(e=be),Sn(e)){const l=et(e,t,!0);return n&&zr(l,n),kt>0&&!o&&Le&&(l.shapeFlag&6?Le[Le.indexOf(e)]=l:Le.push(l)),l.patchFlag|=-2,l}if(Sc(e)&&(e=e.__vccOpts),t){t=mc(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=Ir(l)),Z(c)&&(vo(c)&&!B(c)&&(c=ce({},c)),t.style=Or(c))}const i=ne(e)?1:Al(e)?128:fc(e)?64:Z(e)?4:q(e)?2:0;return Zo(e,t,n,r,s,i,o,!0)}function mc(e){return e?vo(e)||Dn in e?ce({},e):e:null}function et(e,t,n=!1){const{props:r,ref:s,patchFlag:o,children:i}=e,l=t?yc(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Qo(l),ref:t&&t.ref?n&&s?B(s)?s.concat(gn(t)):[s,gn(t)]:gn(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&et(e.ssContent),ssFallback:e.ssFallback&&et(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ei(e=" ",t=0){return oe(Tt,null,e,t)}function fu(e,t){const n=oe(Ht,null,e);return n.staticCount=t,n}function du(e="",t=!1){return t?(Xo(),Jo(be,null,e)):oe(be,null,e)}function Re(e){return e==null||typeof e=="boolean"?oe(be):B(e)?oe(me,null,e.slice()):typeof e=="object"?ze(e):oe(Tt,null,String(e))}function ze(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:et(e)}function zr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),zr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(Dn in t)?t._ctx=le:s===3&&le&&(le.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:le},n=32):(t=String(t),r&64?(n=16,t=[ei(t)]):n=8);e.children=t,e.shapeFlag|=n}function yc(...e){const t={};for(let n=0;nue||le;let Tn,Er;{const e=ro(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Tn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Er=t("__VUE_SSR_SETTERS__",n=>Xt=n)}const zt=e=>{const t=ue;return Tn(e),e.scope.on(),()=>{e.scope.off(),Tn(t)}},Ts=()=>{ue&&ue.scope.off(),Tn(null)};function ti(e){return e.vnode.shapeFlag&4}let Xt=!1;function wc(e,t=!1){t&&Er(t);const{props:n,children:r}=e.vnode,s=ti(e);ec(e,n,s,t),rc(e,r);const o=s?Ec(e,t):void 0;return t&&Er(!1),o}function Ec(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Mt(new Proxy(e.ctx,Kl));const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ri(e):null,o=zt(e);dt();const i=Je(r,e,0,[e.props,s]);if(ht(),o(),eo(i)){if(i.then(Ts,Ts),t)return i.then(l=>{As(e,l,t)}).catch(l=>{qt(l,e,0)});e.asyncDep=i}else As(e,i,t)}else ni(e,t)}function As(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=Co(t)),ni(e,n)}let Rs;function ni(e,t,n){const r=e.type;if(!e.render){if(!t&&Rs&&!r.render){const s=r.template||Wr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=ce(ce({isCustomElement:o,delimiters:l},i),c);r.render=Rs(s,a)}}e.render=r.render||xe}{const s=zt(e);dt();try{ql(e)}finally{ht(),s()}}}function Cc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return ye(e,"get","$attrs"),t[n]}}))}function ri(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Cc(e)},slots:e.slots,emit:e.emit,expose:t}}function Bn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Co(Mt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Nt)return Nt[n](e)},has(t,n){return n in t||n in Nt}}))}function xc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Sc(e){return q(e)&&"__vccOpts"in e}const re=(e,t)=>ll(e,t,Xt);function Cr(e,t,n){const r=arguments.length;return r===2?Z(t)&&!B(t)?Sn(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Sn(n)&&(n=[n]),oe(e,t,n))}const Tc="3.4.21";/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Ac="http://www.w3.org/2000/svg",Rc="http://www.w3.org/1998/Math/MathML",Xe=typeof document<"u"?document:null,Ls=Xe&&Xe.createElement("template"),Lc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?Xe.createElementNS(Ac,e):t==="mathml"?Xe.createElementNS(Rc,e):Xe.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Xe.createTextNode(e),createComment:e=>Xe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Ls.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Ls.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ke="transition",Ot="animation",Kt=Symbol("_vtc"),si=(e,{slots:t})=>Cr(Pl,Oc(e),t);si.displayName="Transition";const oi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};si.props=ce({},Mo,oi);const rt=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},Os=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function Oc(e){const t={};for(const A in e)A in oi||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,v=Ic(s),I=v&&v[0],N=v&&v[1],{onBeforeEnter:K,onEnter:k,onEnterCancelled:g,onLeave:_,onLeaveCancelled:M,onBeforeAppear:L=K,onAppear:F=k,onAppearCancelled:T=g}=t,$=(A,G,ie)=>{st(A,G?f:l),st(A,G?a:i),ie&&ie()},E=(A,G)=>{A._isLeaving=!1,st(A,h),st(A,y),st(A,p),G&&G()},j=A=>(G,ie)=>{const fe=A?F:k,D=()=>$(G,A,ie);rt(fe,[G,D]),Is(()=>{st(G,A?c:o),We(G,A?f:l),Os(fe)||Ms(G,r,I,D)})};return ce(t,{onBeforeEnter(A){rt(K,[A]),We(A,o),We(A,i)},onBeforeAppear(A){rt(L,[A]),We(A,c),We(A,a)},onEnter:j(!1),onAppear:j(!0),onLeave(A,G){A._isLeaving=!0;const ie=()=>E(A,G);We(A,h),Nc(),We(A,p),Is(()=>{A._isLeaving&&(st(A,h),We(A,y),Os(_)||Ms(A,r,N,ie))}),rt(_,[A,ie])},onEnterCancelled(A){$(A,!1),rt(g,[A])},onAppearCancelled(A){$(A,!0),rt(T,[A])},onLeaveCancelled(A){E(A),rt(M,[A])}})}function Ic(e){if(e==null)return null;if(Z(e))return[Qn(e.enter),Qn(e.leave)];{const t=Qn(e);return[t,t]}}function Qn(e){return Oi(e)}function We(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Kt]||(e[Kt]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Kt];n&&(n.delete(t),n.size||(e[Kt]=void 0))}function Is(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Mc=0;function Ms(e,t,n,r){const s=e._endId=++Mc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Pc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,p),o()},p=y=>{y.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[v]||"").split(", "),s=r(`${Ke}Delay`),o=r(`${Ke}Duration`),i=Ps(s,o),l=r(`${Ot}Delay`),c=r(`${Ot}Duration`),a=Ps(l,c);let f=null,h=0,p=0;t===Ke?i>0&&(f=Ke,h=i,p=o.length):t===Ot?a>0&&(f=Ot,h=a,p=c.length):(h=Math.max(i,a),f=h>0?i>a?Ke:Ot:null,p=f?f===Ke?o.length:c.length:0);const y=f===Ke&&/\b(transform|all)(,|$)/.test(r(`${Ke}Property`).toString());return{type:f,timeout:h,propCount:p,hasTransform:y}}function Ps(e,t){for(;e.lengthNs(n)+Ns(e[r])))}function Ns(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Nc(){return document.body.offsetHeight}function Fc(e,t,n){const r=e[Kt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Fs=Symbol("_vod"),$c=Symbol("_vsh"),Hc=Symbol(""),jc=/(^|;)\s*display\s*:/;function Vc(e,t,n){const r=e.style,s=ne(n);let o=!1;if(n&&!s){if(t)if(ne(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&mn(r,l,"")}else for(const i in t)n[i]==null&&mn(r,i,"");for(const i in n)i==="display"&&(o=!0),mn(r,i,n[i])}else if(s){if(t!==n){const i=r[Hc];i&&(n+=";"+i),r.cssText=n,o=jc.test(n)}}else t&&e.removeAttribute("style");Fs in e&&(e[Fs]=o?r.display:"",e[$c]&&(r.display="none"))}const $s=/\s*!important$/;function mn(e,t,n){if(B(n))n.forEach(r=>mn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Dc(e,t);$s.test(n)?e.setProperty(ft(r),n.replace($s,""),"important"):e[r]=n}}const Hs=["Webkit","Moz","ms"],Zn={};function Dc(e,t){const n=Zn[t];if(n)return n;let r=Fe(t);if(r!=="filter"&&r in e)return Zn[t]=r;r=Ln(r);for(let s=0;ser||(qc.then(()=>er=0),er=Date.now());function zc(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Se(Xc(r,n.value),t,5,[r])};return n.value=e,n.attached=Gc(),n}function Xc(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Us=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Yc=(e,t,n,r,s,o,i,l,c)=>{const a=s==="svg";t==="class"?Fc(e,r,a):t==="style"?Vc(e,n,r):Wt(t)?Ar(t)||Kc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Jc(e,t,r,a))?Bc(e,t,r,o,i,l,c):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Uc(e,t,r,a))};function Jc(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Us(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Us(t)&&ne(n)?!1:t in e}const Bs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return B(t)?n=>pn(t,n):t};function Qc(e){e.target.composing=!0}function ks(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const tr=Symbol("_assign"),hu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[tr]=Bs(s);const o=r||s.props&&s.props.type==="number";mt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=ur(l)),e[tr](l)}),n&&mt(e,"change",()=>{e.value=e.value.trim()}),t||(mt(e,"compositionstart",Qc),mt(e,"compositionend",ks),mt(e,"change",ks))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:s}},o){if(e[tr]=Bs(o),e.composing)return;const i=s||e.type==="number"?ur(e.value):e.value,l=t??"";i!==l&&(document.activeElement===e&&e.type!=="range"&&(n||r&&e.value.trim()===l)||(e.value=l))}},Zc=["ctrl","shift","alt","meta"],ea={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Zc.some(n=>e[`${n}Key`]&&!t.includes(n))},pu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=ft(s.key);if(t.some(i=>i===o||ta[i]===o))return e(s)})},ii=ce({patchProp:Yc},Lc);let Vt,Ks=!1;function na(){return Vt||(Vt=cc(ii))}function ra(){return Vt=Ks?Vt:ac(ii),Ks=!0,Vt}const mu=(...e)=>{const t=na().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=ci(r);if(!s)return;const o=t._component;!q(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,li(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},yu=(...e)=>{const t=ra().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=ci(r);if(s)return n(s,!0,li(s))},t};function li(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ci(e){return ne(e)?document.querySelector(e):e}const _u=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},sa=window.__VP_SITE_DATA__;function Xr(e){return io()?(Vi(e),!0):!1}function Ne(e){return typeof e=="function"?e():Eo(e)}const ai=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const oa=Object.prototype.toString,ia=e=>oa.call(e)==="[object Object]",Qe=()=>{},xr=la();function la(){var e,t;return ai&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ca(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const ui=e=>e();function aa(e,t={}){let n,r,s=Qe;const o=l=>{clearTimeout(l),s(),s=Qe};return l=>{const c=Ne(e),a=Ne(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function ua(e=ui){const t=se(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Mn(t),pause:n,resume:r,eventFilter:s}}function fa(e){return e||Un()}function fi(...e){if(e.length!==1)return pl(...e);const t=e[0];return typeof t=="function"?Mn(fl(()=>({get:t,set:Qe}))):se(t)}function di(e,t,n={}){const{eventFilter:r=ui,...s}=n;return Ve(e,ca(r,t),s)}function da(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=ua(r);return{stop:di(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Yr(e,t=!0,n){fa()?Rt(e,n):t?e():Pn(e)}function vu(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return di(e,t,{...o,eventFilter:aa(r,{maxWait:s})})}function bu(e,t,n){let r;de(n)?r={evaluating:n}:r=n||{};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Qe}=r,c=se(!s),a=i?Dr(t):se(t);let f=0;return kr(async h=>{if(!c.value)return;f++;const p=f;let y=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const v=await e(I=>{h(()=>{o&&(o.value=!1),y||I()})});p===f&&(a.value=v)}catch(v){l(v)}finally{o&&p===f&&(o.value=!1),y=!0}}),s?re(()=>(c.value=!0,a.value)):a}function yt(e){var t;const n=Ne(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Te=ai?window:void 0;function De(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Te):[t,n,r,s]=e,!t)return Qe;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,p,y)=>(f.addEventListener(h,p,y),()=>f.removeEventListener(h,p,y)),c=Ve(()=>[yt(t),Ne(s)],([f,h])=>{if(i(),!f)return;const p=ia(h)?{...h}:h;o.push(...n.flatMap(y=>r.map(v=>l(f,y,v,p))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return Xr(a),a}let Ws=!1;function wu(e,t,n={}){const{window:r=Te,ignore:s=[],capture:o=!0,detectIframe:i=!1}=n;if(!r)return Qe;xr&&!Ws&&(Ws=!0,Array.from(r.document.body.children).forEach(p=>p.addEventListener("click",Qe)),r.document.documentElement.addEventListener("click",Qe));let l=!0;const c=p=>s.some(y=>{if(typeof y=="string")return Array.from(r.document.querySelectorAll(y)).some(v=>v===p.target||p.composedPath().includes(v));{const v=yt(y);return v&&(p.target===v||p.composedPath().includes(v))}}),f=[De(r,"click",p=>{const y=yt(e);if(!(!y||y===p.target||p.composedPath().includes(y))){if(p.detail===0&&(l=!c(p)),!l){l=!0;return}t(p)}},{passive:!0,capture:o}),De(r,"pointerdown",p=>{const y=yt(e);l=!c(p)&&!!(y&&!p.composedPath().includes(y))},{passive:!0}),i&&De(r,"blur",p=>{setTimeout(()=>{var y;const v=yt(e);((y=r.document.activeElement)==null?void 0:y.tagName)==="IFRAME"&&!(v!=null&&v.contains(r.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>f.forEach(p=>p())}function ha(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Eu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Te,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=ha(t);return De(s,o,f=>{f.repeat&&Ne(l)||c(f)&&n(f)},i)}function pa(){const e=se(!1),t=Un();return t&&Rt(()=>{e.value=!0},t),e}function ga(e){const t=pa();return re(()=>(t.value,!!e()))}function hi(e,t={}){const{window:n=Te}=t,r=ga(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=se(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=kr(()=>{r.value&&(l(),s=n.matchMedia(Ne(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return Xr(()=>{c(),l(),s=void 0}),o}const an=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},un="__vueuse_ssr_handlers__",ma=ya();function ya(){return un in an||(an[un]=an[un]||{}),an[un]}function pi(e,t){return ma[e]||t}function _a(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const va={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},qs="vueuse-storage";function Jr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Te,eventFilter:p,onError:y=E=>{console.error(E)},initOnMounted:v}=r,I=(f?Dr:se)(typeof t=="function"?t():t);if(!n)try{n=pi("getDefaultStorage",()=>{var E;return(E=Te)==null?void 0:E.localStorage})()}catch(E){y(E)}if(!n)return I;const N=Ne(t),K=_a(N),k=(s=r.serializer)!=null?s:va[K],{pause:g,resume:_}=da(I,()=>L(I.value),{flush:o,deep:i,eventFilter:p});h&&l&&Yr(()=>{De(h,"storage",T),De(h,qs,$),v&&T()}),v||T();function M(E,j){h&&h.dispatchEvent(new CustomEvent(qs,{detail:{key:e,oldValue:E,newValue:j,storageArea:n}}))}function L(E){try{const j=n.getItem(e);if(E==null)M(j,null),n.removeItem(e);else{const A=k.write(E);j!==A&&(n.setItem(e,A),M(j,A))}}catch(j){y(j)}}function F(E){const j=E?E.newValue:n.getItem(e);if(j==null)return c&&N!=null&&n.setItem(e,k.write(N)),N;if(!E&&a){const A=k.read(j);return typeof a=="function"?a(A,N):K==="object"&&!Array.isArray(A)?{...N,...A}:A}else return typeof j!="string"?j:k.read(j)}function T(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){I.value=N;return}if(!(E&&E.key!==e)){g();try{(E==null?void 0:E.newValue)!==k.write(I.value)&&(I.value=F(E))}catch(j){y(j)}finally{E?Pn(_):_()}}}}function $(E){T(E.detail)}return I}function gi(e){return hi("(prefers-color-scheme: dark)",e)}function ba(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Te,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},p=gi({window:s}),y=re(()=>p.value?"dark":"light"),v=c||(i==null?fi(r):Jr(i,r,o,{window:s,listenToStorageChanges:l})),I=re(()=>v.value==="auto"?y.value:v.value),N=pi("updateHTMLAttrs",(_,M,L)=>{const F=typeof _=="string"?s==null?void 0:s.document.querySelector(_):yt(_);if(!F)return;let T;if(f&&(T=s.document.createElement("style"),T.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild(T)),M==="class"){const $=L.split(/\s/g);Object.values(h).flatMap(E=>(E||"").split(/\s/g)).filter(Boolean).forEach(E=>{$.includes(E)?F.classList.add(E):F.classList.remove(E)})}else F.setAttribute(M,L);f&&(s.getComputedStyle(T).opacity,document.head.removeChild(T))});function K(_){var M;N(t,n,(M=h[_])!=null?M:_)}function k(_){e.onChanged?e.onChanged(_,K):K(_)}Ve(I,k,{flush:"post",immediate:!0}),Yr(()=>k(I.value));const g=re({get(){return a?v.value:I.value},set(_){v.value=_}});try{return Object.assign(g,{store:v,system:y,state:I})}catch{return g}}function wa(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Te}=e,s=ba({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=re(()=>s.system?s.system.value:gi({window:r}).value?"dark":"light");return re({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function nr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Cu(e,t,n={}){const{window:r=Te}=n;return Jr(e,t,r==null?void 0:r.localStorage,n)}function mi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const fn=new WeakMap;function xu(e,t=!1){const n=se(t);let r=null;Ve(fi(e),i=>{const l=nr(Ne(i));if(l){const c=l;fn.get(c)||fn.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const s=()=>{const i=nr(Ne(e));!i||n.value||(xr&&(r=De(i,"touchmove",l=>{Ea(l)},{passive:!1})),i.style.overflow="hidden",n.value=!0)},o=()=>{var i;const l=nr(Ne(e));!l||!n.value||(xr&&(r==null||r()),l.style.overflow=(i=fn.get(l))!=null?i:"",fn.delete(l),n.value=!1)};return Xr(o),re({get(){return n.value},set(i){i?s():o()}})}function Su(e,t,n={}){const{window:r=Te}=n;return Jr(e,t,r==null?void 0:r.sessionStorage,n)}function Tu(e={}){const{window:t=Te,behavior:n="auto"}=e;if(!t)return{x:se(0),y:se(0)};const r=se(t.scrollX),s=se(t.scrollY),o=re({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=re({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return De(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function Au(e={}){const{window:t=Te,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0}=e,i=se(n),l=se(r),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Yr(c),De("resize",c,{passive:!0}),s){const a=hi("(orientation: portrait)");Ve(a,()=>c())}return{width:i,height:l}}var rr={BASE_URL:"/v0.5.30/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},sr={};const yi=/^(?:[a-z]+:|\/\/)/i,Ca="vitepress-theme-appearance",xa=/#.*$/,Sa=/[?#].*$/,Ta=/(?:(^|\/)index)?\.(?:md|html)$/,Ce=typeof document<"u",_i={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Aa(e,t,n=!1){if(t===void 0)return!1;if(e=Gs(`/${e}`),n)return new RegExp(t).test(e);if(Gs(t)!==e)return!1;const r=t.match(xa);return r?(Ce?location.hash:"")===r[0]:!0}function Gs(e){return decodeURI(e).replace(Sa,"").replace(Ta,"$1")}function Ra(e){return yi.test(e)}function La(e,t){var r,s,o,i,l,c,a;const n=Object.keys(e.locales).find(f=>f!=="root"&&!Ra(f)&&Aa(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:bi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function vi(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Oa(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Oa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ia(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function bi(e,t){return[...e.filter(n=>!Ia(t,n)),...t]}const Ma=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Pa=/^[a-z]:/i;function zs(e){const t=Pa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Ma,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const or=new Set;function Na(e){if(or.size===0){const n=typeof process=="object"&&(sr==null?void 0:sr.VITE_EXTRA_EXTENSIONS)||(rr==null?void 0:rr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>or.add(r))}const t=e.split(".").pop();return t==null||!or.has(t.toLowerCase())}function Ru(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Fa=Symbol(),ut=Dr(sa);function Lu(e){const t=re(()=>La(ut.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?se(!0):n?wa({storageKey:Ca,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):se(!1);return{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>vi(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:r}}function $a(){const e=xt(Fa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ha(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Xs(e){return yi.test(e)||!e.startsWith("/")?e:Ha(ut.value.base,e)}function ja(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/v0.5.30/";t=zs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${zs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let yn=[];function Ou(e){yn.push(e),Vn(()=>{yn=yn.filter(t=>t!==e)})}function Va(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ys(e,n);else if(Array.isArray(e))for(const r of e){const s=Ys(r,n);if(s){t=s;break}}return t}function Ys(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Da=Symbol(),Sr="http://a.com",Ua=()=>({path:"/",component:null,data:_i});function Iu(e,t){const n=In(Ua()),r={route:n,go:s};async function s(l=Ce?location.href:"/"){var c,a;if(l=ir(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1){if(Ce){const f=new URL(location.href);l!==ir(f.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l),new URL(l,Sr).hash!==f.hash&&window.dispatchEvent(new Event("hashchange")))}await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l))}}let o=null;async function i(l,c=0,a=!1){var p;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const f=new URL(l,Sr),h=o=f.pathname;try{let y=await e(h);if(!y)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:v,__pageData:I}=y;if(!v)throw new Error(`Invalid route component: ${v}`);n.path=Ce?h:Xs(h),n.component=Mt(v),n.data=Mt(I),Ce&&Pn(()=>{let N=ut.value.base+I.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!N.endsWith("/")&&(N+=".html"),N!==f.pathname&&(f.pathname=N,l=N+f.search+f.hash,history.replaceState(null,"",l)),f.hash&&!c){let K=null;try{K=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(k){console.warn(k)}if(K){Js(K,f.hash);return}}window.scrollTo(0,c)})}}catch(y){if(!/fetch|Page not found/.test(y.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(y),!a)try{const v=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await v.json(),await i(l,c,!0);return}catch{}o===h&&(o=null,n.path=Ce?h:Xs(h),n.component=t?Mt(t):null,n.data=_i)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:h,origin:p,pathname:y,hash:v,search:I}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),N=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&p===N.origin&&Na(y)&&(l.preventDefault(),y===N.pathname&&I===N.search?(v!==N.hash&&(history.pushState(null,"",h),window.dispatchEvent(new Event("hashchange"))),v?Js(a,v,a.classList.contains("header-anchor")):window.scrollTo(0,0)):s(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await i(ir(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ba(){const e=xt(Da);if(!e)throw new Error("useRouter() is called without provider.");return e}function wi(){return Ba().route}function Js(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-Va()+o;requestAnimationFrame(s)}}function ir(e){const t=new URL(e,Sr);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const lr=()=>yn.forEach(e=>e()),Mu=Kr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=wi(),{site:n}=$a();return()=>Cr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Cr(t.component,{onVnodeMounted:lr,onVnodeUpdated:lr,onVnodeUnmounted:lr}):"404 Page Not Found"])}}),ka="modulepreload",Ka=function(e){return"/v0.5.30/"+e},Qs={},Pu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){const o=document.getElementsByTagName("link"),i=document.querySelector("meta[property=csp-nonce]"),l=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));s=Promise.all(n.map(c=>{if(c=Ka(c),c in Qs)return;Qs[c]=!0;const a=c.endsWith(".css"),f=a?'[rel="stylesheet"]':"";if(!!r)for(let y=o.length-1;y>=0;y--){const v=o[y];if(v.href===c&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${f}`))return;const p=document.createElement("link");if(p.rel=a?"stylesheet":ka,a||(p.as="script",p.crossOrigin=""),p.href=c,l&&p.setAttribute("nonce",l),document.head.appendChild(p),a)return new Promise((y,v)=>{p.addEventListener("load",y),p.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},Nu=Kr({setup(e,{slots:t}){const n=se(!1);return Rt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Fu(){Ce&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function $u(){if(Ce){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Wa(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Wa(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Hu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=cr(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const i=o.map(cr);r.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};kr(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=vi(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):cr(["meta",{name:"description",content:f}]),s(bi(i.head,Ga(c)))})}function cr([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function qa(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ga(e){return e.filter(t=>!qa(t))}const ar=new Set,Ei=()=>document.createElement("link"),za=e=>{const t=Ei();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Xa=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let dn;const Ya=Ce&&(dn=Ei())&&dn.relList&&dn.relList.supports&&dn.relList.supports("prefetch")?za:Xa;function ju(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!ar.has(c)){ar.add(c);const a=ja(c);a&&Ya(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):ar.add(l))})})};Rt(r);const s=wi();Ve(()=>s.path,r),Vn(()=>{n&&n.disconnect()})}export{Zl as $,Vn as A,nu as B,Vl as C,Va as D,eu as E,me as F,ou as G,Dr as H,Ou as I,oe as J,tu as K,yi as L,wi as M,yc as N,xt as O,Au as P,Or as Q,wu as R,Eu as S,si as T,Pn as U,Tu as V,Mn as W,su as X,Pu as Y,xu as Z,_u as _,ei as a,lu as a0,gu as a1,pu as a2,cu as a3,fu as a4,In as a5,pl as a6,Cr as a7,Hu as a8,Da as a9,Ru as aA,Lu as aa,Fa as ab,Mu as ac,Nu as ad,ut as ae,yu as af,Iu as ag,ja as ah,ju as ai,$u as aj,Fu as ak,yt as al,Xr as am,bu as an,Su as ao,Cu as ap,vu as aq,Ba as ar,De as as,$o as at,ru as au,hu as av,de as aw,au as ax,Mt as ay,mu as az,Jo as b,uu as c,Kr as d,du as e,Na as f,Xs as g,se as h,Ra as i,Ce as j,re as k,Rt as l,Zo as m,Ir as n,Xo as o,Eo as p,Qa as q,iu as r,Za as s,Ja as t,$a as u,Aa as v,El as w,hi as x,Ve as y,kr as z}; diff --git a/v0.5.30/assets/chunks/theme.BUqgOrlt.js b/v0.5.30/assets/chunks/theme.BUqgOrlt.js new file mode 100644 index 000000000..bba5db0e1 --- /dev/null +++ b/v0.5.30/assets/chunks/theme.BUqgOrlt.js @@ -0,0 +1,7 @@ +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["assets/chunks/VPLocalSearchBox.D20U0MDo.js","assets/chunks/framework.BfjuC5t1.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} +import{d as m,o as a,c as l,r as c,n as N,a as D,t as T,b as y,w as v,e as f,T as he,_ as $,u as Ye,i as Qe,f as Xe,g as fe,h as w,j as J,k as g,l as z,m as d,p as i,q as C,s as B,v as K,x as ce,y as U,z as te,A as me,B as we,C as Ze,D as xe,E as R,F as M,G as E,H as Ie,I as se,J as b,K as W,L as Ne,M as ne,N as Z,O as Y,P as et,Q as Me,R as tt,S as ue,U as Ae,V as Ce,W as st,X as nt,Y as ot,Z as Be,$ as _e,a0 as at,a1 as rt,a2 as it,a3 as He,a4 as lt,a5 as ct,a6 as ut,a7 as Se}from"./framework.BfjuC5t1.js";const dt=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),l("span",{class:N(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[D(T(e.text),1)])],2))}}),pt={key:0,class:"VPBackdrop"},vt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),y(he,{name:"fade"},{default:v(()=>[e.show?(a(),l("div",pt)):f("",!0)]),_:1}))}}),ht=$(vt,[["__scopeId","data-v-b06cdb19"]]),L=Ye;function ft(s,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(s,e):(s(),(n=!0)&&setTimeout(()=>n=!1,e))}}function de(s){return/^\//.test(s)?s:`/${s}`}function be(s){const{pathname:e,search:t,hash:n,protocol:o}=new URL(s,"http://a.com");if(Qe(s)||s.startsWith("#")||!o.startsWith("http")||!Xe(e))return s;const{site:r}=L(),u=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return fe(u)}const $e=w(J?location.hash:"");J&&window.addEventListener("hashchange",()=>{$e.value=location.hash});function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:o,theme:r}=L(),u=g(()=>{var p,_;return{label:(p=t.value.locales[n.value])==null?void 0:p.label,link:((_=t.value.locales[n.value])==null?void 0:_.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([p,_])=>s&&u.value.label===_.label?[]:{text:_.label,link:mt(_.link||(p==="root"?"/":`/${p}/`),r.value.i18nRouting!==!1&&e,o.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+$e.value})),currentLang:u}}function mt(s,e,t,n){return e?s.replace(/\/$/,"")+de(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):s}const _t=s=>(C("data-v-792811ca"),s=s(),B(),s),bt={class:"NotFound"},$t={class:"code"},kt={class:"title"},gt=_t(()=>d("div",{class:"divider"},null,-1)),yt={class:"quote"},Pt={class:"action"},St=["href","aria-label"],Vt=m({__name:"NotFound",setup(s){const{site:e,theme:t}=L(),{localeLinks:n}=X({removeCurrent:!1}),o=w("/");return z(()=>{var u;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((u=n.value.find(({link:h})=>h.startsWith(r)))==null?void 0:u.link)||n.value[0].link)}),(r,u)=>{var h,p,_,P,k;return a(),l("div",bt,[d("p",$t,T(((h=i(t).notFound)==null?void 0:h.code)??"404"),1),d("h1",kt,T(((p=i(t).notFound)==null?void 0:p.title)??"PAGE NOT FOUND"),1),gt,d("blockquote",yt,T(((_=i(t).notFound)==null?void 0:_.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",Pt,[d("a",{class:"link",href:i(fe)(o.value),"aria-label":((P=i(t).notFound)==null?void 0:P.linkLabel)??"go to home"},T(((k=i(t).notFound)==null?void 0:k.linkText)??"Take me home"),9,St)])])}}}),Lt=$(Vt,[["__scopeId","data-v-792811ca"]]);function Ee(s,e){if(Array.isArray(s))return x(s);if(s==null)return[];e=de(e);const t=Object.keys(s).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(de(o))),n=t?s[t]:[];return Array.isArray(n)?x(n):x(n.items,n.base)}function Tt(s){const e=[];let t=0;for(const n in s){const o=s[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function wt(s){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(s),e}function pe(s,e){return Array.isArray(e)?e.some(t=>pe(s,t)):K(s,e.link)?!0:e.items?pe(s,e.items):!1}function x(s,e){return[...s].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=x(n.items,o)),n})}function O(){const{frontmatter:s,page:e,theme:t}=L(),n=ce("(min-width: 960px)"),o=w(!1),r=g(()=>{const H=t.value.sidebar,I=e.value.relativePath;return H?Ee(H,I):[]}),u=w(r.value);U(r,(H,I)=>{JSON.stringify(H)!==JSON.stringify(I)&&(u.value=r.value)});const h=g(()=>s.value.sidebar!==!1&&u.value.length>0&&s.value.layout!=="home"),p=g(()=>_?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),_=g(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),P=g(()=>h.value&&n.value),k=g(()=>h.value?Tt(u.value):[]);function V(){o.value=!0}function S(){o.value=!1}function A(){o.value?S():V()}return{isOpen:o,sidebar:u,sidebarGroups:k,hasSidebar:h,hasAside:_,leftAside:p,isSidebarEnabled:P,open:V,close:S,toggle:A}}function It(s,e){let t;te(()=>{t=s.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",n)}),me(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function Nt(s){const{page:e}=L(),t=w(!1),n=g(()=>s.value.collapsed!=null),o=g(()=>!!s.value.link),r=w(!1),u=()=>{r.value=K(e.value.relativePath,s.value.link)};U([e,s,$e],u),z(u);const h=g(()=>r.value?!0:s.value.items?pe(e.value.relativePath,s.value.items):!1),p=g(()=>!!(s.value.items&&s.value.items.length));te(()=>{t.value=!!(n.value&&s.value.collapsed)}),we(()=>{(r.value||h.value)&&(t.value=!1)});function _(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:h,hasChildren:p,toggle:_}}function Mt(){const{hasSidebar:s}=O(),e=ce("(min-width: 960px)"),t=ce("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const ve=[];function De(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function ke(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:At(t),link:"#"+t.id,level:n}});return Ct(e,s)}function At(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Ct(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(u=>u.level>=n&&u.level<=o),ve.length=0;for(const{element:u,link:h}of s)ve.push({element:u,link:h});const r=[];e:for(let u=0;u=0;p--){const _=s[p];if(_.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ze(()=>{u(location.hash)}),me(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,_=document.body.offsetHeight,P=Math.abs(h+p-_)<1,k=ve.map(({element:S,link:A})=>({link:A,top:Ht(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!k.length){u(null);return}if(h<1){u(null);return}if(P){u(k[k.length-1].link);return}let V=null;for(const{link:S,top:A}of k){if(A>h+xe()+4)break;V=S}u(V)}function u(h){o&&o.classList.remove("active"),h==null?o=null:o=s.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=o;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Ht(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Et=["href","title"],Dt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const n=t.href.split("#")[1],o=document.getElementById(decodeURIComponent(n));o==null||o.focus({preventScroll:!0})}return(t,n)=>{const o=R("VPDocOutlineItem",!0);return a(),l("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),l(M,null,E(t.headers,({children:r,link:u,title:h})=>(a(),l("li",null,[d("a",{class:"outline-link",href:u,onClick:e,title:h},T(h),9,Et),r!=null&&r.length?(a(),y(o,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Fe=$(Dt,[["__scopeId","data-v-3f927ebe"]]),Ft=s=>(C("data-v-c14bfc45"),s=s(),B(),s),Ot={class:"content"},jt={class:"outline-title",role:"heading","aria-level":"2"},Gt={"aria-labelledby":"doc-outline-aria-label"},zt=Ft(()=>d("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Ut=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),n=Ie([]);se(()=>{n.value=ke(e.value.outline??t.value.outline)});const o=w(),r=w();return Bt(o,r),(u,h)=>(a(),l("div",{class:N(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o,role:"navigation"},[d("div",Ot,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",jt,T(i(De)(i(t))),1),d("nav",Gt,[zt,b(Fe,{headers:n.value,root:!0},null,8,["headers"])])])],2))}}),Kt=$(Ut,[["__scopeId","data-v-c14bfc45"]]),Rt={class:"VPDocAsideCarbonAds"},qt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(a(),l("div",Rt,[b(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Wt=s=>(C("data-v-6d7b3c46"),s=s(),B(),s),Jt={class:"VPDocAside"},Yt=Wt(()=>d("div",{class:"spacer"},null,-1)),Qt=m({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,n)=>(a(),l("div",Jt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),b(Kt),c(t.$slots,"aside-outline-after",{},void 0,!0),Yt,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),y(qt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Xt=$(Qt,[["__scopeId","data-v-6d7b3c46"]]);function Zt(){const{theme:s,page:e}=L();return g(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{};let o;return typeof n=="function"?o=n(e.value):o=n.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function xt(){const{page:s,theme:e,frontmatter:t}=L();return g(()=>{var _,P,k,V,S,A,H,I;const n=Ee(e.value.sidebar,s.value.relativePath),o=wt(n),r=es(o,j=>j.link.replace(/[?#].*$/,"")),u=r.findIndex(j=>K(s.value.relativePath,j.link)),h=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((P=e.value.docFooter)==null?void 0:P.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=r[u-1])==null?void 0:k.docFooterText)??((V=r[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=r[u-1])==null?void 0:S.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[u+1])==null?void 0:A.docFooterText)??((H=r[u+1])==null?void 0:H.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((I=r[u+1])==null?void 0:I.link)}}})}function es(s,e){const t=new Set;return s.filter(n=>{const o=e(n);return t.has(o)?!1:t.add(o)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.tag??(e.href?"a":"span")),n=g(()=>e.href&&Ne.test(e.href));return(o,r)=>(a(),y(W(t.value),{class:N(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?i(be)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),ts={class:"VPLastUpdated"},ss=["datetime"],ns=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:n,lang:o}=L(),r=g(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=g(()=>r.value.toISOString()),h=w("");return z(()=>{te(()=>{var p,_,P;h.value=new Intl.DateTimeFormat((_=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&_.forceLocale?o.value:void 0,((P=e.value.lastUpdated)==null?void 0:P.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,_)=>{var P;return a(),l("p",ts,[D(T(((P=i(e).lastUpdated)==null?void 0:P.text)||i(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:u.value},T(h.value),9,ss)])}}}),os=$(ns,[["__scopeId","data-v-9da12f1d"]]),as=s=>(C("data-v-87be45d1"),s=s(),B(),s),rs={key:0,class:"VPDocFooter"},is={key:0,class:"edit-info"},ls={key:0,class:"edit-link"},cs=as(()=>d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),us={key:1,class:"last-updated"},ds={key:1,class:"prev-next"},ps={class:"pager"},vs=["innerHTML"],hs=["innerHTML"],fs={class:"pager"},ms=["innerHTML"],_s=["innerHTML"],bs=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=L(),o=Zt(),r=xt(),u=g(()=>e.value.editLink&&n.value.editLink!==!1),h=g(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=g(()=>u.value||h.value||r.value.prev||r.value.next);return(_,P)=>{var k,V,S,A;return p.value?(a(),l("footer",rs,[c(_.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),l("div",is,[u.value?(a(),l("div",ls,[b(F,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:v(()=>[cs,D(" "+T(i(o).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),l("div",us,[b(os)])):f("",!0)])):f("",!0),(k=i(r).prev)!=null&&k.link||(V=i(r).next)!=null&&V.link?(a(),l("nav",ds,[d("div",ps,[(S=i(r).prev)!=null&&S.link?(a(),y(F,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>{var H;return[d("span",{class:"desc",innerHTML:((H=i(e).docFooter)==null?void 0:H.prev)||"Previous page"},null,8,vs),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,hs)]}),_:1},8,["href"])):f("",!0)]),d("div",fs,[(A=i(r).next)!=null&&A.link?(a(),y(F,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>{var H;return[d("span",{class:"desc",innerHTML:((H=i(e).docFooter)==null?void 0:H.next)||"Next page"},null,8,ms),d("span",{class:"title",innerHTML:i(r).next.text},null,8,_s)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),$s=$(bs,[["__scopeId","data-v-87be45d1"]]),ks=s=>(C("data-v-83890dd9"),s=s(),B(),s),gs={class:"container"},ys=ks(()=>d("div",{class:"aside-curtain"},null,-1)),Ps={class:"aside-container"},Ss={class:"aside-content"},Vs={class:"content"},Ls={class:"content-container"},Ts={class:"main"},ws=m({__name:"VPDoc",setup(s){const{theme:e}=L(),t=ne(),{hasSidebar:n,hasAside:o,leftAside:r}=O(),u=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const _=R("Content");return a(),l("div",{class:N(["VPDoc",{"has-sidebar":i(n),"has-aside":i(o)}])},[c(h.$slots,"doc-top",{},void 0,!0),d("div",gs,[i(o)?(a(),l("div",{key:0,class:N(["aside",{"left-aside":i(r)}])},[ys,d("div",Ps,[d("div",Ss,[b(Xt,null,{"aside-top":v(()=>[c(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),d("div",Vs,[d("div",Ls,[c(h.$slots,"doc-before",{},void 0,!0),d("main",Ts,[b(_,{class:N(["vp-doc",[u.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b($s,null,{"doc-footer-before":v(()=>[c(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(h.$slots,"doc-after",{},void 0,!0)])])]),c(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Is=$(ws,[["__scopeId","data-v-83890dd9"]]),Ns=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.href&&Ne.test(e.href)),n=g(()=>e.tag||e.href?"a":"button");return(o,r)=>(a(),y(W(n.value),{class:N(["VPButton",[o.size,o.theme]]),href:o.href?i(be)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[D(T(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ms=$(Ns,[["__scopeId","data-v-14206e74"]]),As=["src","alt"],Cs=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=R("VPImage",!0);return e.image?(a(),l(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),l("img",Z({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(fe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,As)):(a(),l(M,{key:1},[b(n,Z({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(n,Z({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),ee=$(Cs,[["__scopeId","data-v-35a7d0b8"]]),Bs=s=>(C("data-v-955009fc"),s=s(),B(),s),Hs={class:"container"},Es={class:"main"},Ds={key:0,class:"name"},Fs=["innerHTML"],Os=["innerHTML"],js=["innerHTML"],Gs={key:0,class:"actions"},zs={key:0,class:"image"},Us={class:"image-container"},Ks=Bs(()=>d("div",{class:"image-bg"},null,-1)),Rs=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=Y("hero-image-slot-exists");return(t,n)=>(a(),l("div",{class:N(["VPHero",{"has-image":t.image||i(e)}])},[d("div",Hs,[d("div",Es,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),l("h1",Ds,[d("span",{innerHTML:t.name,class:"clip"},null,8,Fs)])):f("",!0),t.text?(a(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Os)):f("",!0),t.tagline?(a(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,js)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),l("div",Gs,[(a(!0),l(M,null,E(t.actions,o=>(a(),l("div",{key:o.link,class:"action"},[b(Ms,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),l("div",zs,[d("div",Us,[Ks,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),y(ee,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),qs=$(Rs,[["__scopeId","data-v-955009fc"]]),Ws=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,n)=>i(e).hero?(a(),y(qs,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":v(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Js=s=>(C("data-v-f5e9645b"),s=s(),B(),s),Ys={class:"box"},Qs={key:0,class:"icon"},Xs=["innerHTML"],Zs=["innerHTML"],xs=["innerHTML"],en={key:4,class:"link-text"},tn={class:"link-text-value"},sn=Js(()=>d("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),y(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[d("article",Ys,[typeof e.icon=="object"&&e.icon.wrap?(a(),l("div",Qs,[b(ee,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),y(ee,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Xs)):f("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Zs),e.details?(a(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,xs)):f("",!0),e.linkText?(a(),l("div",en,[d("p",tn,[D(T(e.linkText)+" ",1),sn])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),on=$(nn,[["__scopeId","data-v-f5e9645b"]]),an={key:0,class:"VPFeatures"},rn={class:"container"},ln={class:"items"},cn=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=g(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(a(),l("div",an,[d("div",rn,[d("div",ln,[(a(!0),l(M,null,E(n.features,r=>(a(),l("div",{key:r.title,class:N(["item",[t.value]])},[b(on,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),un=$(cn,[["__scopeId","data-v-d0a190d7"]]),dn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,n)=>i(e).features?(a(),y(un,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),pn=m({__name:"VPHomeContent",setup(s){const{width:e}=et({includeScrollbar:!1});return(t,n)=>(a(),l("div",{class:"vp-doc container",style:Me(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),vn=$(pn,[["__scopeId","data-v-c43247eb"]]),hn={class:"VPHome"},fn=m({__name:"VPHome",setup(s){const{frontmatter:e}=L();return(t,n)=>{const o=R("Content");return a(),l("div",hn,[c(t.$slots,"home-hero-before",{},void 0,!0),b(Ws,null,{"home-hero-info-before":v(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),b(dn),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),y(vn,{key:0},{default:v(()=>[b(o)]),_:1})):(a(),y(o,{key:1}))])}}}),mn=$(fn,[["__scopeId","data-v-cbb6ec48"]]),_n={},bn={class:"VPPage"};function $n(s,e){const t=R("Content");return a(),l("div",bn,[c(s.$slots,"page-top"),b(t),c(s.$slots,"page-bottom")])}const kn=$(_n,[["render",$n]]),gn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:n}=O();return(o,r)=>(a(),l("div",{class:N(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(o.$slots,"not-found",{key:0},()=>[b(Lt)],!0):i(t).layout==="page"?(a(),y(kn,{key:1},{"page-top":v(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),y(mn,{key:2},{"home-hero-before":v(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),y(W(i(t).layout),{key:3})):(a(),y(Is,{key:4},{"doc-top":v(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),yn=$(gn,[["__scopeId","data-v-91765379"]]),Pn={class:"container"},Sn=["innerHTML"],Vn=["innerHTML"],Ln=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:n}=O();return(o,r)=>i(e).footer&&i(t).footer!==!1?(a(),l("footer",{key:0,class:N(["VPFooter",{"has-sidebar":i(n)}])},[d("div",Pn,[i(e).footer.message?(a(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,Sn)):f("",!0),i(e).footer.copyright?(a(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,Vn)):f("",!0)])],2)):f("",!0)}}),Tn=$(Ln,[["__scopeId","data-v-c970a860"]]);function wn(){const{theme:s,frontmatter:e}=L(),t=Ie([]),n=g(()=>t.value.length>0);return se(()=>{t.value=ke(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:n}}const In=s=>(C("data-v-c9ba27ad"),s=s(),B(),s),Nn=In(()=>d("span",{class:"vpi-chevron-right icon"},null,-1)),Mn={class:"header"},An={class:"outline"},Cn=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),n=w(!1),o=w(0),r=w(),u=w();tt(r,()=>{n.value=!1}),ue("Escape",()=>{n.value=!1}),se(()=>{n.value=!1});function h(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(P){P.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Ae(()=>{n.value=!1}))}function _(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(P,k)=>(a(),l("div",{class:"VPLocalNavOutlineDropdown",style:Me({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[P.headers.length>0?(a(),l("button",{key:0,onClick:h,class:N({open:n.value})},[D(T(i(De)(i(t)))+" ",1),Nn],2)):(a(),l("button",{key:1,onClick:_},T(i(t).returnToTopLabel||"Return to top"),1)),b(he,{name:"flyout"},{default:v(()=>[n.value?(a(),l("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:p},[d("div",Mn,[d("a",{class:"top-link",href:"#",onClick:_},T(i(t).returnToTopLabel||"Return to top"),1)]),d("div",An,[b(Fe,{headers:P.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Bn=$(Cn,[["__scopeId","data-v-c9ba27ad"]]),Hn=s=>(C("data-v-070ab83d"),s=s(),B(),s),En={class:"container"},Dn=["aria-expanded"],Fn=Hn(()=>d("span",{class:"vpi-align-left menu-icon"},null,-1)),On={class:"menu-text"},jn=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:n}=O(),{headers:o}=wn(),{y:r}=Ce(),u=w(0);z(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),se(()=>{o.value=ke(t.value.outline??e.value.outline)});const h=g(()=>o.value.length===0),p=g(()=>h.value&&!n.value),_=g(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:p.value}));return(P,k)=>i(t).layout!=="home"&&(!p.value||i(r)>=u.value)?(a(),l("div",{key:0,class:N(_.value)},[d("div",En,[i(n)?(a(),l("button",{key:0,class:"menu","aria-expanded":P.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>P.$emit("open-menu"))},[Fn,d("span",On,T(i(e).sidebarMenuLabel||"Menu"),1)],8,Dn)):f("",!0),b(Bn,{headers:i(o),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Gn=$(jn,[["__scopeId","data-v-070ab83d"]]);function zn(){const s=w(!1);function e(){s.value=!0,window.addEventListener("resize",o)}function t(){s.value=!1,window.removeEventListener("resize",o)}function n(){s.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=ne();return U(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const Un={},Kn={class:"VPSwitch",type:"button",role:"switch"},Rn={class:"check"},qn={key:0,class:"icon"};function Wn(s,e){return a(),l("button",Kn,[d("span",Rn,[s.$slots.default?(a(),l("span",qn,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Jn=$(Un,[["render",Wn],["__scopeId","data-v-4a1c76db"]]),Oe=s=>(C("data-v-b79b56d4"),s=s(),B(),s),Yn=Oe(()=>d("span",{class:"vpi-sun sun"},null,-1)),Qn=Oe(()=>d("span",{class:"vpi-moon moon"},null,-1)),Xn=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),n=Y("toggle-appearance",()=>{e.value=!e.value}),o=g(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,u)=>(a(),y(Jn,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:v(()=>[Yn,Qn]),_:1},8,["title","aria-checked","onClick"]))}}),ge=$(Xn,[["__scopeId","data-v-b79b56d4"]]),Zn={key:0,class:"VPNavBarAppearance"},xn=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",Zn,[b(ge)])):f("",!0)}}),eo=$(xn,[["__scopeId","data-v-ead91a81"]]),ye=w();let je=!1,le=0;function to(s){const e=w(!1);if(J){!je&&so(),le++;const t=U(ye,n=>{var o,r,u;n===s.el.value||(o=s.el.value)!=null&&o.contains(n)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(u=s.onBlur)==null||u.call(s))});me(()=>{t(),le--,le||no()})}return st(e)}function so(){document.addEventListener("focusin",Ge),je=!0,ye.value=document.activeElement}function no(){document.removeEventListener("focusin",Ge)}function Ge(){ye.value=document.activeElement}const oo={class:"VPMenuLink"},ao=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,n)=>(a(),l("div",oo,[b(F,{class:N({active:i(K)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[D(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),oe=$(ao,[["__scopeId","data-v-8b74d055"]]),ro={class:"VPMenuGroup"},io={key:0,class:"title"},lo=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",ro,[e.text?(a(),l("p",io,T(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,n=>(a(),l(M,null,["link"in n?(a(),y(oe,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),co=$(lo,[["__scopeId","data-v-48c802d0"]]),uo={class:"VPMenu"},po={key:0,class:"items"},vo=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),l("div",uo,[e.items?(a(),l("div",po,[(a(!0),l(M,null,E(e.items,n=>(a(),l(M,{key:n.text},["link"in n?(a(),y(oe,{key:0,item:n},null,8,["item"])):(a(),y(co,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),ho=$(vo,[["__scopeId","data-v-97491713"]]),fo=s=>(C("data-v-e5380155"),s=s(),B(),s),mo=["aria-expanded","aria-label"],_o={key:0,class:"text"},bo=["innerHTML"],$o=fo(()=>d("span",{class:"vpi-chevron-down text-icon"},null,-1)),ko={key:1,class:"vpi-more-horizontal icon"},go={class:"menu"},yo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=w(!1),t=w();to({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(a(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=u=>e.value=!0),onMouseleave:r[2]||(r[2]=u=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=u=>e.value=!e.value)},[o.button||o.icon?(a(),l("span",_o,[o.icon?(a(),l("span",{key:0,class:N([o.icon,"option-icon"])},null,2)):f("",!0),o.button?(a(),l("span",{key:1,innerHTML:o.button},null,8,bo)):f("",!0),$o])):(a(),l("span",ko))],8,mo),d("div",go,[b(ho,{items:o.items},{default:v(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Pe=$(yo,[["__scopeId","data-v-e5380155"]]),Po=["href","aria-label","innerHTML"],So=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,o)=>(a(),l("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Po))}}),Vo=$(So,[["__scopeId","data-v-717b8b75"]]),Lo={class:"VPSocialLinks"},To=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),l("div",Lo,[(a(!0),l(M,null,E(e.links,({link:n,icon:o,ariaLabel:r})=>(a(),y(Vo,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ae=$(To,[["__scopeId","data-v-ee7a9424"]]),wo={key:0,class:"group translations"},Io={class:"trans-title"},No={key:1,class:"group"},Mo={class:"item appearance"},Ao={class:"label"},Co={class:"appearance-action"},Bo={key:2,class:"group"},Ho={class:"item social-links"},Eo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:n,currentLang:o}=X({correspondingLink:!0}),r=g(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>r.value?(a(),y(Pe,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(n).length&&i(o).label?(a(),l("div",wo,[d("p",Io,T(i(o).label),1),(a(!0),l(M,null,E(i(n),p=>(a(),y(oe,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",No,[d("div",Mo,[d("p",Ao,T(i(t).darkModeSwitchLabel||"Appearance"),1),d("div",Co,[b(ge)])])])):f("",!0),i(t).socialLinks?(a(),l("div",Bo,[d("div",Ho,[b(ae,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Do=$(Eo,[["__scopeId","data-v-9b536d0b"]]),Fo=s=>(C("data-v-5dea55bf"),s=s(),B(),s),Oo=["aria-expanded"],jo=Fo(()=>d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)),Go=[jo],zo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),l("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Go,10,Oo))}}),Uo=$(zo,[["__scopeId","data-v-5dea55bf"]]),Ko=["innerHTML"],Ro=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,n)=>(a(),y(F,{class:N({VPNavBarMenuLink:!0,active:i(K)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[d("span",{innerHTML:t.item.text},null,8,Ko)]),_:1},8,["class","href","noIcon","target","rel"]))}}),qo=$(Ro,[["__scopeId","data-v-ed5ac1f6"]]),Wo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),n=r=>"link"in r?K(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=g(()=>n(e.item));return(r,u)=>(a(),y(Pe,{class:N({VPNavBarMenuGroup:!0,active:i(K)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Jo=s=>(C("data-v-492ea56d"),s=s(),B(),s),Yo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Qo=Jo(()=>d("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Xo=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,n)=>i(e).nav?(a(),l("nav",Yo,[Qo,(a(!0),l(M,null,E(i(e).nav,o=>(a(),l(M,{key:o.text},["link"in o?(a(),y(qo,{key:0,item:o},null,8,["item"])):(a(),y(Wo,{key:1,item:o},null,8,["item"]))],64))),128))])):f("",!0)}}),Zo=$(Xo,[["__scopeId","data-v-492ea56d"]]);function xo(s){const{localeIndex:e,theme:t}=L();function n(o){var A,H,I;const r=o.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((I=(H=u.locales)==null?void 0:H[e.value])==null?void 0:I.translations)||null,_=h&&u.translations||null;let P=p,k=_,V=s;const S=r.pop();for(const j of r){let G=null;const q=V==null?void 0:V[j];q&&(G=V=q);const re=k==null?void 0:k[j];re&&(G=k=re);const ie=P==null?void 0:P[j];ie&&(G=P=ie),q||(V=G),re||(k=G),ie||(P=G)}return(P==null?void 0:P[S])??(k==null?void 0:k[S])??(V==null?void 0:V[S])??""}return n}const ea=["aria-label"],ta={class:"DocSearch-Button-Container"},sa=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),na={class:"DocSearch-Button-Placeholder"},oa=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Ve=m({__name:"VPNavBarSearchButton",setup(s){const t=xo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,o)=>(a(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[d("span",ta,[sa,d("span",na,T(i(t)("button.buttonText")),1)]),oa],8,ea))}}),aa={class:"VPNavBarSearch"},ra={id:"local-search"},ia={key:1,id:"docsearch"},la=m({__name:"VPNavBarSearch",setup(s){const e=nt(()=>ot(()=>import("./VPLocalSearchBox.D20U0MDo.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=L(),o=w(!1),r=w(!1);z(()=>{});function u(){o.value||(o.value=!0,setTimeout(h,16))}function h(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function p(k){const V=k.target,S=V.tagName;return V.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=w(!1);ue("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),_.value=!0)}),ue("/",k=>{p(k)||(k.preventDefault(),_.value=!0)});const P="local";return(k,V)=>{var S;return a(),l("div",aa,[i(P)==="local"?(a(),l(M,{key:0},[_.value?(a(),y(i(e),{key:0,onClose:V[0]||(V[0]=A=>_.value=!1)})):f("",!0),d("div",ra,[b(Ve,{onClick:V[1]||(V[1]=A=>_.value=!0)})])],64)):i(P)==="algolia"?(a(),l(M,{key:1},[o.value?(a(),y(i(t),{key:0,algolia:((S=i(n).search)==null?void 0:S.options)??i(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=A=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),l("div",ia,[b(Ve,{onClick:u})]))],64)):f("",!0)])}}}),ca=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,n)=>i(e).socialLinks?(a(),y(ae,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),ua=$(ca,[["__scopeId","data-v-164c457f"]]),da=["href","rel","target"],pa={key:1},va={key:2},ha=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:n}=O(),{currentLang:o}=X(),r=g(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,_)=>(a(),l("div",{class:N(["VPNavBarTitle",{"has-sidebar":i(n)}])},[d("a",{class:"title",href:r.value??i(be)(i(o).link),rel:u.value,target:h.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),y(ee,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(a(),l("span",pa,T(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),l("span",va,T(i(e).title),1)):f("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,da)],2))}}),fa=$(ha,[["__scopeId","data-v-28a961f9"]]),ma={class:"items"},_a={class:"title"},ba=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(o,r)=>i(t).length&&i(n).label?(a(),y(Pe,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:v(()=>[d("div",ma,[d("p",_a,T(i(n).label),1),(a(!0),l(M,null,E(i(t),u=>(a(),y(oe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),$a=$(ba,[["__scopeId","data-v-c80d9ad0"]]),ka=s=>(C("data-v-40788ea0"),s=s(),B(),s),ga={class:"wrapper"},ya={class:"container"},Pa={class:"title"},Sa={class:"content"},Va={class:"content-body"},La=ka(()=>d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1)),Ta=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Ce(),{hasSidebar:t}=O(),{frontmatter:n}=L(),o=w({});return we(()=>{o.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(r,u)=>(a(),l("div",{class:N(["VPNavBar",o.value])},[d("div",ga,[d("div",ya,[d("div",Pa,[b(fa,null,{"nav-bar-title-before":v(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Sa,[d("div",Va,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),b(la,{class:"search"}),b(Zo,{class:"menu"}),b($a,{class:"translations"}),b(eo,{class:"appearance"}),b(ua,{class:"social-links"}),b(Do,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),b(Uo,{class:"hamburger",active:r.isScreenOpen,onClick:u[0]||(u[0]=h=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),La],2))}}),wa=$(Ta,[["__scopeId","data-v-40788ea0"]]),Ia={key:0,class:"VPNavScreenAppearance"},Na={class:"text"},Ma=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(n,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),l("div",Ia,[d("p",Na,T(i(t).darkModeSwitchLabel||"Appearance"),1),b(ge)])):f("",!0)}}),Aa=$(Ma,[["__scopeId","data-v-2b89f08b"]]),Ca=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=Y("close-screen");return(t,n)=>(a(),y(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:v(()=>[D(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ba=$(Ca,[["__scopeId","data-v-d45ba3e8"]]),Ha=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=Y("close-screen");return(t,n)=>(a(),y(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:v(()=>[D(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ze=$(Ha,[["__scopeId","data-v-7179dbb7"]]),Ea={class:"VPNavScreenMenuGroupSection"},Da={key:0,class:"title"},Fa=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),l("div",Ea,[e.text?(a(),l("p",Da,T(e.text),1)):f("",!0),(a(!0),l(M,null,E(e.items,n=>(a(),y(ze,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Oa=$(Fa,[["__scopeId","data-v-4b8941ac"]]),ja=s=>(C("data-v-c9df2649"),s=s(),B(),s),Ga=["aria-controls","aria-expanded"],za=["innerHTML"],Ua=ja(()=>d("span",{class:"vpi-plus button-icon"},null,-1)),Ka=["id"],Ra={key:1,class:"group"},qa=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=w(!1),n=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,u)=>(a(),l("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[d("span",{class:"button-text",innerHTML:r.text},null,8,za),Ua],8,Ga),d("div",{id:n.value,class:"items"},[(a(!0),l(M,null,E(r.items,h=>(a(),l(M,{key:h.text},["link"in h?(a(),l("div",{key:h.text,class:"item"},[b(ze,{item:h},null,8,["item"])])):(a(),l("div",Ra,[b(Oa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ka)],2))}}),Wa=$(qa,[["__scopeId","data-v-c9df2649"]]),Ja={key:0,class:"VPNavScreenMenu"},Ya=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,n)=>i(e).nav?(a(),l("nav",Ja,[(a(!0),l(M,null,E(i(e).nav,o=>(a(),l(M,{key:o.text},["link"in o?(a(),y(Ba,{key:0,item:o},null,8,["item"])):(a(),y(Wa,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Qa=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,n)=>i(e).socialLinks?(a(),y(ae,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ue=s=>(C("data-v-362991c2"),s=s(),B(),s),Xa=Ue(()=>d("span",{class:"vpi-languages icon lang"},null,-1)),Za=Ue(()=>d("span",{class:"vpi-chevron-down icon chevron"},null,-1)),xa={class:"list"},er=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=w(!1);function o(){n.value=!n.value}return(r,u)=>i(e).length&&i(t).label?(a(),l("div",{key:0,class:N(["VPNavScreenTranslations",{open:n.value}])},[d("button",{class:"title",onClick:o},[Xa,D(" "+T(i(t).label)+" ",1),Za]),d("ul",xa,[(a(!0),l(M,null,E(i(e),h=>(a(),l("li",{key:h.link,class:"item"},[b(F,{class:"link",href:h.link},{default:v(()=>[D(T(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),tr=$(er,[["__scopeId","data-v-362991c2"]]),sr={class:"container"},nr=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=w(null),t=Be(J?document.body:null);return(n,o)=>(a(),y(he,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:v(()=>[n.open?(a(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",sr,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),b(Ya,{class:"menu"}),b(tr,{class:"translations"}),b(Aa,{class:"appearance"}),b(Qa,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),or=$(nr,[["__scopeId","data-v-382f42e9"]]),ar={key:0,class:"VPNav"},rr=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=zn(),{frontmatter:o}=L(),r=g(()=>o.value.navbar!==!1);return _e("close-screen",t),te(()=>{J&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(u,h)=>r.value?(a(),l("header",ar,[b(wa,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":v(()=>[c(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(or,{open:i(e)},{"nav-screen-content-before":v(()=>[c(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),ir=$(rr,[["__scopeId","data-v-f1e365da"]]),Ke=s=>(C("data-v-2ea20db7"),s=s(),B(),s),lr=["role","tabindex"],cr=Ke(()=>d("div",{class:"indicator"},null,-1)),ur=Ke(()=>d("span",{class:"vpi-chevron-right caret-icon"},null,-1)),dr=[ur],pr={key:1,class:"items"},vr=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:u,hasChildren:h,toggle:p}=Nt(g(()=>e.item)),_=g(()=>h.value?"section":"div"),P=g(()=>o.value?"a":"div"),k=g(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=g(()=>o.value?void 0:"button"),S=g(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":u.value}]);function A(I){"key"in I&&I.key!=="Enter"||!e.item.link&&p()}function H(){e.item.link&&p()}return(I,j)=>{const G=R("VPSidebarItem",!0);return a(),y(W(_.value),{class:N(["VPSidebarItem",S.value])},{default:v(()=>[I.item.text?(a(),l("div",Z({key:0,class:"item",role:V.value},at(I.item.items?{click:A,keydown:A}:{},!0),{tabindex:I.item.items&&0}),[cr,I.item.link?(a(),y(F,{key:0,tag:P.value,class:"link",href:I.item.link,rel:I.item.rel,target:I.item.target},{default:v(()=>[(a(),y(W(k.value),{class:"text",innerHTML:I.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),y(W(k.value),{key:1,class:"text",innerHTML:I.item.text},null,8,["innerHTML"])),I.item.collapsed!=null&&I.item.items&&I.item.items.length?(a(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:H,onKeydown:rt(H,["enter"]),tabindex:"0"},dr,32)):f("",!0)],16,lr)):f("",!0),I.item.items&&I.item.items.length?(a(),l("div",pr,[I.depth<5?(a(!0),l(M,{key:0},E(I.item.items,q=>(a(),y(G,{key:q.text,item:q,depth:I.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),hr=$(vr,[["__scopeId","data-v-2ea20db7"]]),Re=s=>(C("data-v-ec846e01"),s=s(),B(),s),fr=Re(()=>d("div",{class:"curtain"},null,-1)),mr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},_r=Re(()=>d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),br=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),n=s,o=w(null),r=Be(J?document.body:null);return U([n,o],()=>{var u;n.open?(r.value=!0,(u=o.value)==null||u.focus()):r.value=!1},{immediate:!0,flush:"post"}),(u,h)=>i(t)?(a(),l("aside",{key:0,class:N(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:o,onClick:h[0]||(h[0]=it(()=>{},["stop"]))},[fr,d("nav",mr,[_r,c(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),l(M,null,E(i(e),p=>(a(),l("div",{key:p.text,class:"group"},[b(hr,{item:p,depth:0},null,8,["item"])]))),128)),c(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),$r=$(br,[["__scopeId","data-v-ec846e01"]]),kr=m({__name:"VPSkipLink",setup(s){const e=ne(),t=w();U(()=>e.path,()=>t.value.focus());function n({target:o}){const r=document.getElementById(decodeURIComponent(o.hash).slice(1));if(r){const u=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",u)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",u),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(a(),l(M,null,[d("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),gr=$(kr,[["__scopeId","data-v-c3508ec8"]]),yr=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=O(),o=ne();U(()=>o.path,n),It(e,n);const{frontmatter:r}=L(),u=He(),h=g(()=>!!u["home-hero-image"]);return _e("hero-image-slot-exists",h),(p,_)=>{const P=R("Content");return i(r).layout!==!1?(a(),l("div",{key:0,class:N(["Layout",i(r).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),b(gr),b(ht,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),b(ir,null,{"nav-bar-title-before":v(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Gn,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),b($r,{open:i(e)},{"sidebar-nav-before":v(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(yn,null,{"page-top":v(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(Tn),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),y(P,{key:1}))}}}),Pr=$(yr,[["__scopeId","data-v-a9a9e638"]]),Sr={},Vr={class:"VPTeamPage"};function Lr(s,e){return a(),l("div",Vr,[c(s.$slots,"default")])}const Vi=$(Sr,[["render",Lr],["__scopeId","data-v-c2f8e101"]]),Tr={},wr={class:"VPTeamPageTitle"},Ir={key:0,class:"title"},Nr={key:1,class:"lead"};function Mr(s,e){return a(),l("div",wr,[s.$slots.title?(a(),l("h1",Ir,[c(s.$slots,"title",{},void 0,!0)])):f("",!0),s.$slots.lead?(a(),l("p",Nr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0)])}const Li=$(Tr,[["render",Mr],["__scopeId","data-v-e277e15c"]]),Ar={},Cr=s=>(C("data-v-d43bc49d"),s=s(),B(),s),Br={class:"VPTeamPageSection"},Hr={class:"title"},Er=Cr(()=>d("div",{class:"title-line"},null,-1)),Dr={key:0,class:"title-text"},Fr={key:0,class:"lead"},Or={key:1,class:"members"};function jr(s,e){return a(),l("section",Br,[d("div",Hr,[Er,s.$slots.title?(a(),l("h2",Dr,[c(s.$slots,"title",{},void 0,!0)])):f("",!0)]),s.$slots.lead?(a(),l("p",Fr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0),s.$slots.members?(a(),l("div",Or,[c(s.$slots,"members",{},void 0,!0)])):f("",!0)])}const Ti=$(Ar,[["render",jr],["__scopeId","data-v-d43bc49d"]]),Gr=s=>(C("data-v-f9987cb6"),s=s(),B(),s),zr={class:"profile"},Ur={class:"avatar"},Kr=["src","alt"],Rr={class:"data"},qr={class:"name"},Wr={key:0,class:"affiliation"},Jr={key:0,class:"title"},Yr={key:1,class:"at"},Qr=["innerHTML"],Xr={key:2,class:"links"},Zr={key:0,class:"sp"},xr=Gr(()=>d("span",{class:"vpi-heart sp-icon"},null,-1)),ei=m({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(s){return(e,t)=>(a(),l("article",{class:N(["VPTeamMembersItem",[e.size]])},[d("div",zr,[d("figure",Ur,[d("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,Kr)]),d("div",Rr,[d("h1",qr,T(e.member.name),1),e.member.title||e.member.org?(a(),l("p",Wr,[e.member.title?(a(),l("span",Jr,T(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(a(),l("span",Yr," @ ")):f("",!0),e.member.org?(a(),y(F,{key:2,class:N(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:v(()=>[D(T(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(a(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,Qr)):f("",!0),e.member.links?(a(),l("div",Xr,[b(ae,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(a(),l("div",Zr,[b(F,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:v(()=>[xr,D(" "+T(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),ti=$(ei,[["__scopeId","data-v-f9987cb6"]]),si={class:"container"},ni=m({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(s){const e=s,t=g(()=>[e.size,`count-${e.members.length}`]);return(n,o)=>(a(),l("div",{class:N(["VPTeamMembers",t.value])},[d("div",si,[(a(!0),l(M,null,E(n.members,r=>(a(),l("div",{key:r.name,class:"item"},[b(ti,{size:n.size,member:r},null,8,["size","member"])]))),128))])],2))}}),wi=$(ni,[["__scopeId","data-v-fba19bad"]]),Le={Layout:Pr,enhanceApp:({app:s})=>{s.component("Badge",dt)}},oi={},ai=lt('

    Trusted by

    Scientific Computing

    SciML.ai

    Machine Learning

    Structure Preserving

    GeometricML.jl

    Machine Learning

    Physical Systems

    MeshGraphNets.jl

    Graph Neural Nets

    ',5);function ri(s,e){return ai}const ii=$(oi,[["render",ri]]),li=s=>{if(typeof document>"u")return{stabilizeScrollPosition:o=>async(...r)=>o(...r)};const e=document.documentElement;return{stabilizeScrollPosition:n=>async(...o)=>{const r=n(...o),u=s.value;if(!u)return r;const h=u.offsetTop-e.scrollTop;return await Ae(),e.scrollTop=u.offsetTop-h,r}}},qe="vitepress:tabSharedState",Q=typeof localStorage<"u"?localStorage:null,We="vitepress:tabsSharedState",ci=()=>{const s=Q==null?void 0:Q.getItem(We);if(s)try{return JSON.parse(s)}catch{}return{}},ui=s=>{Q&&Q.setItem(We,JSON.stringify(s))},di=s=>{const e=ct({});U(()=>e.content,(t,n)=>{t&&n&&ui(t)},{deep:!0}),s.provide(qe,e)},pi=(s,e)=>{const t=Y(qe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=ci())});const n=w(),o=g({get(){var p;const u=e.value,h=s.value;if(u){const _=(p=t.content)==null?void 0:p[u];if(_&&h.includes(_))return _}else{const _=n.value;if(_)return _}return h[0]},set(u){const h=e.value;h?t.content&&(t.content[h]=u):n.value=u}});return{selected:o,select:u=>{o.value=u}}};let Te=0;const vi=()=>(Te++,""+Te);function hi(){const s=He();return g(()=>{var n;const t=(n=s.default)==null?void 0:n.call(s);return t?t.filter(o=>typeof o.type=="object"&&"__name"in o.type&&o.type.__name==="PluginTabsTab"&&o.props).map(o=>{var r;return(r=o.props)==null?void 0:r.label}):[]})}const Je="vitepress:tabSingleState",fi=s=>{_e(Je,s)},mi=()=>{const s=Y(Je);if(!s)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return s},_i={class:"plugin-tabs"},bi=["id","aria-selected","aria-controls","tabindex","onClick"],$i=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(s){const e=s,t=hi(),{selected:n,select:o}=pi(t,ut(e,"sharedStateKey")),r=w(),{stabilizeScrollPosition:u}=li(r),h=u(o),p=w([]),_=k=>{var A;const V=t.value.indexOf(n.value);let S;k.key==="ArrowLeft"?S=V>=1?V-1:t.value.length-1:k.key==="ArrowRight"&&(S=V(a(),l("div",_i,[d("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),l(M,null,E(i(t),S=>(a(),l("button",{id:`tab-${S}-${i(P)}`,ref_for:!0,ref_key:"buttonRefs",ref:p,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===i(n),"aria-controls":`panel-${S}-${i(P)}`,tabindex:S===i(n)?0:-1,onClick:()=>i(h)(S)},T(S),9,bi))),128))],544),c(k.$slots,"default")]))}}),ki=["id","aria-labelledby"],gi=m({__name:"PluginTabsTab",props:{label:{}},setup(s){const{uid:e,selected:t}=mi();return(n,o)=>i(t)===n.label?(a(),l("div",{key:0,id:`panel-${n.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${n.label}-${i(e)}`},[c(n.$slots,"default",{},void 0,!0)],8,ki)):f("",!0)}}),yi=$(gi,[["__scopeId","data-v-9b0d03d2"]]),Pi=s=>{di(s),s.component("PluginTabs",$i),s.component("PluginTabsTab",yi)},Ii={extends:Le,Layout(){return Se(Le.Layout,null,{"aside-ads-before":()=>Se(ii)})},enhanceApp({app:s,router:e,siteData:t}){Pi(s)}};export{Ii as R,Li as V,Ti as a,wi as b,Vi as c,xo as d,L as u}; diff --git a/v0.5.30/assets/ecosystem.md.CmsIcYxR.js b/v0.5.30/assets/ecosystem.md.CmsIcYxR.js new file mode 100644 index 000000000..ff3b9187e --- /dev/null +++ b/v0.5.30/assets/ecosystem.md.CmsIcYxR.js @@ -0,0 +1 @@ +import{V as b,a as n,b as s,c as d}from"./chunks/theme.BUqgOrlt.js";import{c as f,J as i,w as t,p as a,o as k,a as e}from"./chunks/framework.BfjuC5t1.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"ecosystem.md","filePath":"ecosystem.md","lastUpdated":null}'),L={name:"ecosystem.md"},J=Object.assign(L,{setup(j){const l=[{avatar:"https://github.com/SciML.png",name:"DiffEqFlux.jl",desc:"Universal neural differential equations with O(1) backprop, GPUs, and stiff+non-stiff DE solvers, demonstrating scientific machine learning (SciML) and physics-informed machine learning methods",links:[{icon:"github",link:"https://github.com/SciML/DiffEqFlux.jl"}]},{avatar:"https://github.com/SciML.png",name:"SciMLSensitivity.jl",desc:"A component of the DiffEq ecosystem for enabling sensitivity analysis for scientific machine learning (SciML). Optimize-then-discretize, discretize-then-optimize, adjoint methods, and more for ODEs, SDEs, DDEs, DAEs, etc.",links:[{icon:"github",link:"https://github.com/SciML/SciMLSensitivity.jl"}]},{avatar:"https://github.com/SciML.png",name:"NeuralPDE.jl",desc:"Physics-Informed Neural Networks (PINN) and Deep BSDE Solvers of Differential Equations for Scientific Machine Learning (SciML) accelerated simulation",links:[{icon:"github",link:"https://github.com/SciML/NeuralPDE.jl"}]},{avatar:"https://github.com/SciML.png",name:"NeuralLyapunov.jl",desc:"A library for searching for neural Lyapunov functions in Julia",links:[{icon:"github",link:"https://github.com/SciML/NeuralLyapunov.jl"}]},{avatar:"https://github.com/SciML.png",name:"DeepEquilibriumNetworks.jl",desc:"Implicit Layer Machine Learning via Deep Equilibrium Networks, O(1) backpropagation with accelerated convergence",links:[{icon:"github",link:"https://github.com/SciML/DeepEquilibriumNetworks.jl"}]},{avatar:"https://github.com/CosmologicalEmulators.png",name:"AbstractCosmologicalEmulators.jl",desc:"Repository containing the abstract interface to the emulators used in the CosmologicalEmulators organization",links:[{icon:"github",link:"https://github.com/CosmologicalEmulators/AbstractCosmologicalEmulators.jl"}]},{avatar:"https://github.com/impICNF.png",name:"ContinuousNormalizingFlows.jl",desc:"Implementations of Infinitesimal Continuous Normalizing Flows Algorithms in Julia",links:[{icon:"github",link:"https://github.com/impICNF/ContinuousNormalizingFlows.jl"}]},{avatar:"https://github.com/YichengDWu.png",name:"Sophon.jl",desc:"Efficient, Accurate, and Streamlined Training of Physics-Informed Neural Networks",links:[{icon:"github",link:"https://github.com/YichengDWu/Sophon.jl"}]},{avatar:"https://github.com/SciML.png",name:"DataDrivenDiffEq.jl",desc:"Data driven modeling and automated discovery of dynamical systems for the SciML Scientific Machine Learning organization",links:[{icon:"github",link:"https://github.com/SciML/DataDrivenDiffEq.jl"}]},{avatar:"https://github.com/YichengDWu.png",name:"NeuralGraphPDE.jl",desc:"Integrating Neural Ordinary Differential Equations, the Method of Lines, and Graph Neural Networks",links:[{icon:"github",link:"https://github.com/YichengDWu/NeuralGraphPDE.jl"}]},{avatar:"https://github.com/vavrines.png",name:"Solaris.jl",desc:"Lightweight module for fusing physical and neural models",links:[{icon:"github",link:"https://github.com/vavrines/Solaris.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"Boltz.jl",desc:" Accelerate your ML research using pre-built Deep Learning Models with Lux",links:[{icon:"github",link:"https://github.com/LuxDL/Boltz.jl"}]},{avatar:"https://github.com/JuliaGNI.png",name:"GeometricMachineLearning.jl",desc:"Structure Preserving Machine Learning Models in Julia",links:[{icon:"github",link:"https://github.com/JuliaGNI/GeometricMachineLearning.jl"}]},{avatar:"https://as1.ftcdn.net/jpg/01/09/84/42/220_F_109844212_NnLGUrn3RgMHQIuqSiLGlc9d419eK2dX.jpg",name:"Want to Add Your Package?",desc:'Open a PR in LuxDL/Lux.jl'}],o=[{avatar:"https://github.com/FluxML.png",name:"Zygote.jl",desc:"Lux.jl default choice for AD",links:[{icon:"github",link:"https://github.com/FluxML/Zygote.jl"}]},{avatar:"https://github.com/FluxML.png",name:"Tracker.jl",desc:"Well tested and robust AD library (might fail on edge cases)",links:[{icon:"github",link:"https://github.com/FluxML/Tracker.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"ForwardDiff.jl",desc:"For forward mode AD support",links:[{icon:"github",link:"https://github.com/JuliaDiff/ForwardDiff.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"ReverseDiff.jl",desc:"Tape based reverse mode AD (might fail on edge cases and doesn't work on GPU)",links:[{icon:"github",link:"https://github.com/JuliaDiff/ReverseDiff.jl"}]},{avatar:"https://github.com/EnzymeAD.png",name:"Enzyme.jl",desc:"Experimental Support but will become the Future Default",links:[{icon:"github",link:"https://github.com/EnzymeAD/Enzyme.jl"}]}],c=[{avatar:"https://github.com/evizero.png",name:"Augmentor.jl",desc:"Data augmentation for machine learning",links:[{icon:"github",link:"https://github.com/evizero/Augmentor.jl"}]},{avatar:"https://github.com/JuliaML.png",name:"MLUtils.jl",desc:"Utilities and abstractions for Machine Learning tasks",links:[{icon:"github",link:"https://github.com/JuliaML/MLUtils.jl"}]},{avatar:"https://github.com/JuliaML.png",name:"MLDatasets.jl",desc:"Utility package for accessing common Machine Learning datasets in Julia",links:[{icon:"github",link:"https://github.com/JuliaML/MLDatasets.jl"}]},{avatar:"https://github.com/JuliaImages.png",name:"Images.jl",desc:"An image library for Julia",links:[{icon:"github",link:"ttps://github.com/JuliaImages/Images.jl"}]},{avatar:"https://github.com/FluxML.png",name:"DataAugmentation.jl",desc:"Flexible data augmentation library for machine and deep learning",links:[{icon:"github",link:"https://github.com/FluxML/DataAugmentation.jl"}]}],r=[{avatar:"https://github.com/FluxML.png",name:"NNlib.jl",desc:"Neural Network primitives with multiple backends",links:[{icon:"github",link:"https://github.com/FluxML/NNlib.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"LuxLib.jl",desc:"Backend for Lux.jl",links:[{icon:"github",link:"https://github.com/LuxDL/LuxLib.jl"}]}],u=[{avatar:"https://github.com/SciML.png",name:"Optimization.jl",desc:"Unified API for Optimization in Julia",links:[{icon:"github",link:"https://github.com/SciML/Optimization.jl"}]},{avatar:"https://github.com/FluxML.png",name:"Optimisers.jl",desc:"Optimisers.jl defines many standard optimisers and utilities for learning loops",links:[{icon:"github",link:"https://github.com/FluxML/Optimisers.jl"}]},{avatar:"https://github.com/FluxML.png",name:"ParameterSchedulers.jl",desc:"Common hyperparameter scheduling for ML",links:[{icon:"github",link:"https://github.com/FluxML/ParameterSchedulers.jl"}]}],m=[{avatar:"https://github.com/FluxML.png",name:"Functors.jl",desc:"Parameterise all the things",links:[{icon:"github",link:"https://github.com/FluxML/Functors.jl"}]},{avatar:"https://github.com/jonniedie.png",name:"ComponentArrays.jl",desc:"Arrays with arbitrarily nested named components",links:[{icon:"github",link:"https://github.com/jonniedie/ComponentArrays.jl"}]}],g=[{avatar:"https://github.com/JuliaLang.png",name:"Serialization.jl",desc:"Provides serialization of Julia objects",links:[{icon:"github",link:"https://github.com/JuliaLang/julia/tree/master/stdlib/Serialization"}]},{avatar:"https://github.com/JuliaIO.png",name:"JLD2.jl",desc:"HDF5-compatible file format in pure Julia",links:[{icon:"github",link:"https://github.com/JuliaIO/JLD2.jl"}]}],h=[{avatar:"https://github.com/JuliaDiff.png",name:"FiniteDiff.jl",desc:"Fast non-allocating calculations of gradients, Jacobians, and Hessians with sparsity support",links:[{icon:"github",link:"https://github.com/JuliaDiff/FiniteDiff.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"FiniteDifferences.jl",desc:"High accuracy derivatives, estimated via numerical finite differences (formerly FDM.jl)",links:[{icon:"github",link:"https://github.com/JuliaDiff/FiniteDifferences.jl"}]},{avatar:"https://github.com/aviatesk.png",name:"JET.jl",desc:"JET employs Julia's type inference system to detect potential bugs and type instabilities",links:[{icon:"github",link:"https://github.com/aviatesk/JET.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"LuxTestUtils.jl",desc:"Collection of Functions useful for testing various packages in the Lux Ecosystem",links:[{icon:"github",link:"https://github.com/LuxDL/LuxTestUtils.jl"}]}],p=[{avatar:"https://github.com/JuliaAI.png",name:"MLFlowClient.jl",desc:"Julia client for MLFlow",links:[{icon:"github",link:"https://github.com/JuliaAI/MLFlowClient.jl"}]},{avatar:"https://github.com/JuliaLogging.png",name:"TensorBoardLogger.jl",desc:"Easy peasy logging to TensorBoard with Julia",links:[{icon:"github",link:"https://github.com/JuliaLogging/TensorBoardLogger.jl"}]},{avatar:"https://github.com/avik-pal.png",name:"Wandb.jl",desc:"Unofficial Julia bindings for logging experiments to wandb.ai",links:[{icon:"github",link:"https://github.com/avik-pal/Wandb.jl"}]}];return(v,D)=>(k(),f("div",null,[i(a(d),null,{default:t(()=>[i(a(b),null,{title:t(()=>[e("Ecosystem")]),_:1}),i(a(n),null,{title:t(()=>[e("Frameworks Extending Lux.jl")]),members:t(()=>[i(a(s),{size:"small",members:l})]),_:1}),i(a(n),null,{title:t(()=>[e("Automatic Differentiation")]),members:t(()=>[i(a(s),{size:"small",members:o})]),_:1}),i(a(n),null,{title:t(()=>[e("Data Manipulation, Data Loading & Datasets")]),members:t(()=>[i(a(s),{size:"small",members:c})]),_:1}),i(a(n),null,{title:t(()=>[e("Neural Network Primitives")]),members:t(()=>[i(a(s),{size:"small",members:r})]),_:1}),i(a(n),null,{title:t(()=>[e("Optimization")]),members:t(()=>[i(a(s),{size:"small",members:u})]),_:1}),i(a(n),null,{title:t(()=>[e("Parameter Manipulation")]),members:t(()=>[i(a(s),{size:"small",members:m})]),_:1}),i(a(n),null,{title:t(()=>[e("Serialization")]),members:t(()=>[i(a(s),{size:"small",members:g})]),_:1}),i(a(n),null,{title:t(()=>[e("Testing Utilities")]),members:t(()=>[i(a(s),{size:"small",members:h})]),_:1}),i(a(n),null,{title:t(()=>[e("Training Visualization & Logging")]),members:t(()=>[i(a(s),{size:"small",members:p})]),_:1})]),_:1})]))}});export{x as __pageData,J as default}; diff --git a/v0.5.30/assets/ecosystem.md.CmsIcYxR.lean.js b/v0.5.30/assets/ecosystem.md.CmsIcYxR.lean.js new file mode 100644 index 000000000..ff3b9187e --- /dev/null +++ b/v0.5.30/assets/ecosystem.md.CmsIcYxR.lean.js @@ -0,0 +1 @@ +import{V as b,a as n,b as s,c as d}from"./chunks/theme.BUqgOrlt.js";import{c as f,J as i,w as t,p as a,o as k,a as e}from"./chunks/framework.BfjuC5t1.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"ecosystem.md","filePath":"ecosystem.md","lastUpdated":null}'),L={name:"ecosystem.md"},J=Object.assign(L,{setup(j){const l=[{avatar:"https://github.com/SciML.png",name:"DiffEqFlux.jl",desc:"Universal neural differential equations with O(1) backprop, GPUs, and stiff+non-stiff DE solvers, demonstrating scientific machine learning (SciML) and physics-informed machine learning methods",links:[{icon:"github",link:"https://github.com/SciML/DiffEqFlux.jl"}]},{avatar:"https://github.com/SciML.png",name:"SciMLSensitivity.jl",desc:"A component of the DiffEq ecosystem for enabling sensitivity analysis for scientific machine learning (SciML). Optimize-then-discretize, discretize-then-optimize, adjoint methods, and more for ODEs, SDEs, DDEs, DAEs, etc.",links:[{icon:"github",link:"https://github.com/SciML/SciMLSensitivity.jl"}]},{avatar:"https://github.com/SciML.png",name:"NeuralPDE.jl",desc:"Physics-Informed Neural Networks (PINN) and Deep BSDE Solvers of Differential Equations for Scientific Machine Learning (SciML) accelerated simulation",links:[{icon:"github",link:"https://github.com/SciML/NeuralPDE.jl"}]},{avatar:"https://github.com/SciML.png",name:"NeuralLyapunov.jl",desc:"A library for searching for neural Lyapunov functions in Julia",links:[{icon:"github",link:"https://github.com/SciML/NeuralLyapunov.jl"}]},{avatar:"https://github.com/SciML.png",name:"DeepEquilibriumNetworks.jl",desc:"Implicit Layer Machine Learning via Deep Equilibrium Networks, O(1) backpropagation with accelerated convergence",links:[{icon:"github",link:"https://github.com/SciML/DeepEquilibriumNetworks.jl"}]},{avatar:"https://github.com/CosmologicalEmulators.png",name:"AbstractCosmologicalEmulators.jl",desc:"Repository containing the abstract interface to the emulators used in the CosmologicalEmulators organization",links:[{icon:"github",link:"https://github.com/CosmologicalEmulators/AbstractCosmologicalEmulators.jl"}]},{avatar:"https://github.com/impICNF.png",name:"ContinuousNormalizingFlows.jl",desc:"Implementations of Infinitesimal Continuous Normalizing Flows Algorithms in Julia",links:[{icon:"github",link:"https://github.com/impICNF/ContinuousNormalizingFlows.jl"}]},{avatar:"https://github.com/YichengDWu.png",name:"Sophon.jl",desc:"Efficient, Accurate, and Streamlined Training of Physics-Informed Neural Networks",links:[{icon:"github",link:"https://github.com/YichengDWu/Sophon.jl"}]},{avatar:"https://github.com/SciML.png",name:"DataDrivenDiffEq.jl",desc:"Data driven modeling and automated discovery of dynamical systems for the SciML Scientific Machine Learning organization",links:[{icon:"github",link:"https://github.com/SciML/DataDrivenDiffEq.jl"}]},{avatar:"https://github.com/YichengDWu.png",name:"NeuralGraphPDE.jl",desc:"Integrating Neural Ordinary Differential Equations, the Method of Lines, and Graph Neural Networks",links:[{icon:"github",link:"https://github.com/YichengDWu/NeuralGraphPDE.jl"}]},{avatar:"https://github.com/vavrines.png",name:"Solaris.jl",desc:"Lightweight module for fusing physical and neural models",links:[{icon:"github",link:"https://github.com/vavrines/Solaris.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"Boltz.jl",desc:" Accelerate your ML research using pre-built Deep Learning Models with Lux",links:[{icon:"github",link:"https://github.com/LuxDL/Boltz.jl"}]},{avatar:"https://github.com/JuliaGNI.png",name:"GeometricMachineLearning.jl",desc:"Structure Preserving Machine Learning Models in Julia",links:[{icon:"github",link:"https://github.com/JuliaGNI/GeometricMachineLearning.jl"}]},{avatar:"https://as1.ftcdn.net/jpg/01/09/84/42/220_F_109844212_NnLGUrn3RgMHQIuqSiLGlc9d419eK2dX.jpg",name:"Want to Add Your Package?",desc:'Open a PR in LuxDL/Lux.jl'}],o=[{avatar:"https://github.com/FluxML.png",name:"Zygote.jl",desc:"Lux.jl default choice for AD",links:[{icon:"github",link:"https://github.com/FluxML/Zygote.jl"}]},{avatar:"https://github.com/FluxML.png",name:"Tracker.jl",desc:"Well tested and robust AD library (might fail on edge cases)",links:[{icon:"github",link:"https://github.com/FluxML/Tracker.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"ForwardDiff.jl",desc:"For forward mode AD support",links:[{icon:"github",link:"https://github.com/JuliaDiff/ForwardDiff.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"ReverseDiff.jl",desc:"Tape based reverse mode AD (might fail on edge cases and doesn't work on GPU)",links:[{icon:"github",link:"https://github.com/JuliaDiff/ReverseDiff.jl"}]},{avatar:"https://github.com/EnzymeAD.png",name:"Enzyme.jl",desc:"Experimental Support but will become the Future Default",links:[{icon:"github",link:"https://github.com/EnzymeAD/Enzyme.jl"}]}],c=[{avatar:"https://github.com/evizero.png",name:"Augmentor.jl",desc:"Data augmentation for machine learning",links:[{icon:"github",link:"https://github.com/evizero/Augmentor.jl"}]},{avatar:"https://github.com/JuliaML.png",name:"MLUtils.jl",desc:"Utilities and abstractions for Machine Learning tasks",links:[{icon:"github",link:"https://github.com/JuliaML/MLUtils.jl"}]},{avatar:"https://github.com/JuliaML.png",name:"MLDatasets.jl",desc:"Utility package for accessing common Machine Learning datasets in Julia",links:[{icon:"github",link:"https://github.com/JuliaML/MLDatasets.jl"}]},{avatar:"https://github.com/JuliaImages.png",name:"Images.jl",desc:"An image library for Julia",links:[{icon:"github",link:"ttps://github.com/JuliaImages/Images.jl"}]},{avatar:"https://github.com/FluxML.png",name:"DataAugmentation.jl",desc:"Flexible data augmentation library for machine and deep learning",links:[{icon:"github",link:"https://github.com/FluxML/DataAugmentation.jl"}]}],r=[{avatar:"https://github.com/FluxML.png",name:"NNlib.jl",desc:"Neural Network primitives with multiple backends",links:[{icon:"github",link:"https://github.com/FluxML/NNlib.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"LuxLib.jl",desc:"Backend for Lux.jl",links:[{icon:"github",link:"https://github.com/LuxDL/LuxLib.jl"}]}],u=[{avatar:"https://github.com/SciML.png",name:"Optimization.jl",desc:"Unified API for Optimization in Julia",links:[{icon:"github",link:"https://github.com/SciML/Optimization.jl"}]},{avatar:"https://github.com/FluxML.png",name:"Optimisers.jl",desc:"Optimisers.jl defines many standard optimisers and utilities for learning loops",links:[{icon:"github",link:"https://github.com/FluxML/Optimisers.jl"}]},{avatar:"https://github.com/FluxML.png",name:"ParameterSchedulers.jl",desc:"Common hyperparameter scheduling for ML",links:[{icon:"github",link:"https://github.com/FluxML/ParameterSchedulers.jl"}]}],m=[{avatar:"https://github.com/FluxML.png",name:"Functors.jl",desc:"Parameterise all the things",links:[{icon:"github",link:"https://github.com/FluxML/Functors.jl"}]},{avatar:"https://github.com/jonniedie.png",name:"ComponentArrays.jl",desc:"Arrays with arbitrarily nested named components",links:[{icon:"github",link:"https://github.com/jonniedie/ComponentArrays.jl"}]}],g=[{avatar:"https://github.com/JuliaLang.png",name:"Serialization.jl",desc:"Provides serialization of Julia objects",links:[{icon:"github",link:"https://github.com/JuliaLang/julia/tree/master/stdlib/Serialization"}]},{avatar:"https://github.com/JuliaIO.png",name:"JLD2.jl",desc:"HDF5-compatible file format in pure Julia",links:[{icon:"github",link:"https://github.com/JuliaIO/JLD2.jl"}]}],h=[{avatar:"https://github.com/JuliaDiff.png",name:"FiniteDiff.jl",desc:"Fast non-allocating calculations of gradients, Jacobians, and Hessians with sparsity support",links:[{icon:"github",link:"https://github.com/JuliaDiff/FiniteDiff.jl"}]},{avatar:"https://github.com/JuliaDiff.png",name:"FiniteDifferences.jl",desc:"High accuracy derivatives, estimated via numerical finite differences (formerly FDM.jl)",links:[{icon:"github",link:"https://github.com/JuliaDiff/FiniteDifferences.jl"}]},{avatar:"https://github.com/aviatesk.png",name:"JET.jl",desc:"JET employs Julia's type inference system to detect potential bugs and type instabilities",links:[{icon:"github",link:"https://github.com/aviatesk/JET.jl"}]},{avatar:"https://github.com/LuxDL.png",name:"LuxTestUtils.jl",desc:"Collection of Functions useful for testing various packages in the Lux Ecosystem",links:[{icon:"github",link:"https://github.com/LuxDL/LuxTestUtils.jl"}]}],p=[{avatar:"https://github.com/JuliaAI.png",name:"MLFlowClient.jl",desc:"Julia client for MLFlow",links:[{icon:"github",link:"https://github.com/JuliaAI/MLFlowClient.jl"}]},{avatar:"https://github.com/JuliaLogging.png",name:"TensorBoardLogger.jl",desc:"Easy peasy logging to TensorBoard with Julia",links:[{icon:"github",link:"https://github.com/JuliaLogging/TensorBoardLogger.jl"}]},{avatar:"https://github.com/avik-pal.png",name:"Wandb.jl",desc:"Unofficial Julia bindings for logging experiments to wandb.ai",links:[{icon:"github",link:"https://github.com/avik-pal/Wandb.jl"}]}];return(v,D)=>(k(),f("div",null,[i(a(d),null,{default:t(()=>[i(a(b),null,{title:t(()=>[e("Ecosystem")]),_:1}),i(a(n),null,{title:t(()=>[e("Frameworks Extending Lux.jl")]),members:t(()=>[i(a(s),{size:"small",members:l})]),_:1}),i(a(n),null,{title:t(()=>[e("Automatic Differentiation")]),members:t(()=>[i(a(s),{size:"small",members:o})]),_:1}),i(a(n),null,{title:t(()=>[e("Data Manipulation, Data Loading & Datasets")]),members:t(()=>[i(a(s),{size:"small",members:c})]),_:1}),i(a(n),null,{title:t(()=>[e("Neural Network Primitives")]),members:t(()=>[i(a(s),{size:"small",members:r})]),_:1}),i(a(n),null,{title:t(()=>[e("Optimization")]),members:t(()=>[i(a(s),{size:"small",members:u})]),_:1}),i(a(n),null,{title:t(()=>[e("Parameter Manipulation")]),members:t(()=>[i(a(s),{size:"small",members:m})]),_:1}),i(a(n),null,{title:t(()=>[e("Serialization")]),members:t(()=>[i(a(s),{size:"small",members:g})]),_:1}),i(a(n),null,{title:t(()=>[e("Testing Utilities")]),members:t(()=>[i(a(s),{size:"small",members:h})]),_:1}),i(a(n),null,{title:t(()=>[e("Training Visualization & Logging")]),members:t(()=>[i(a(s),{size:"small",members:p})]),_:1})]),_:1})]))}});export{x as __pageData,J as default}; diff --git a/v0.5.30/assets/index.md.B9NbXpl6.js b/v0.5.30/assets/index.md.B9NbXpl6.js new file mode 100644 index 000000000..8d0602525 --- /dev/null +++ b/v0.5.30/assets/index.md.B9NbXpl6.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BfjuC5t1.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"LuxDL Docs","text":"Elegant & Performant Deep Learning in JuliaLang","tagline":"A Pure Julia Deep Learning Framework putting Correctness and Performance First","actions":[{"theme":"brand","text":"Tutorials","link":"/tutorials/"},{"theme":"alt","text":"Ecosystem","link":"/ecosystem"},{"theme":"alt","text":"API Reference 📚","link":"/api/Lux/layers"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/LuxDL/Lux.jl"}],"image":{"src":"/lux-logo.svg","alt":"Lux.jl"}},"features":[{"icon":"🚀","title":"Fast & Extendible","details":"Lux.jl is written in Julia itself, making it extremely extendible. CUDA and AMDGPU are supported first-class, with experimental support for Metal Hardware.","link":"/introduction/"},{"icon":"🧑‍🔬","title":"SciML ❤️ Lux","details":"Lux is the default choice for many SciML packages, including DiffEqFlux.jl, NeuralPDE.jl, and more.","link":"https://sciml.ai/"},{"icon":"🧩","title":"Uniquely Composable","details":"Lux.jl natively supports Arbitrary Parameter Types, making it uniquely composable with other Julia packages (and even Non-Julia packages).","link":"/api/Lux/contrib#Training"},{"icon":"🧪","title":"Well Tested","details":"Lux.jl tests every supported Automatic Differentiation Framework with every supported hardware backend against Finite Differences to prevent sneaky 🐛 in your code.","link":"/api/Testing_Functionality/LuxTestUtils"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),a={name:"index.md"};function n(l,r,s,o,u,c){return i(),t("div")}const m=e(a,[["render",n]]);export{d as __pageData,m as default}; diff --git a/v0.5.30/assets/index.md.B9NbXpl6.lean.js b/v0.5.30/assets/index.md.B9NbXpl6.lean.js new file mode 100644 index 000000000..8d0602525 --- /dev/null +++ b/v0.5.30/assets/index.md.B9NbXpl6.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BfjuC5t1.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"LuxDL Docs","text":"Elegant & Performant Deep Learning in JuliaLang","tagline":"A Pure Julia Deep Learning Framework putting Correctness and Performance First","actions":[{"theme":"brand","text":"Tutorials","link":"/tutorials/"},{"theme":"alt","text":"Ecosystem","link":"/ecosystem"},{"theme":"alt","text":"API Reference 📚","link":"/api/Lux/layers"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/LuxDL/Lux.jl"}],"image":{"src":"/lux-logo.svg","alt":"Lux.jl"}},"features":[{"icon":"🚀","title":"Fast & Extendible","details":"Lux.jl is written in Julia itself, making it extremely extendible. CUDA and AMDGPU are supported first-class, with experimental support for Metal Hardware.","link":"/introduction/"},{"icon":"🧑‍🔬","title":"SciML ❤️ Lux","details":"Lux is the default choice for many SciML packages, including DiffEqFlux.jl, NeuralPDE.jl, and more.","link":"https://sciml.ai/"},{"icon":"🧩","title":"Uniquely Composable","details":"Lux.jl natively supports Arbitrary Parameter Types, making it uniquely composable with other Julia packages (and even Non-Julia packages).","link":"/api/Lux/contrib#Training"},{"icon":"🧪","title":"Well Tested","details":"Lux.jl tests every supported Automatic Differentiation Framework with every supported hardware backend against Finite Differences to prevent sneaky 🐛 in your code.","link":"/api/Testing_Functionality/LuxTestUtils"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),a={name:"index.md"};function n(l,r,s,o,u,c){return i(),t("div")}const m=e(a,[["render",n]]);export{d as __pageData,m as default}; diff --git a/v0.5.30/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 b/v0.5.30/assets/inter-italic-cyrillic-ext.5XJwZIOp.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2a687296748f6b8bc8076cd11bde49cd27e4442b GIT binary patch literal 28332 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 HNCp4^t1hY; literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-italic-cyrillic.D6csxwjC.woff2 b/v0.5.30/assets/inter-italic-cyrillic.D6csxwjC.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f64035158d7e4c01654e3f23dcd6e8299928a28c GIT binary patch literal 17824 zcmV(|K+(TGZYzoV0yihRy3;{L*Bm;yv3xXa1 z1Rw>42nQe=C3zL>7I?PUshK)MG!ta^L3b^d$O{#w!;WOi#caU z9epdi^~z}FXC1zMc;nw||B-~iJKZ7-`H(Kn3lKjZ5N5RqaHof~Lr#JsXW1jml58&> zQGi~|0cnL4zB|P8}0t5&U@c|JdMvNGlmzMw!d_sgsBSwh~ z<3uKERMdzOA;C{wc9u@*KWk~1ZrQFoOIvrA?XoRxnU;2`Lr2EaDbuDiOouv|*;F%- z#gKPJ>8fl=HUf*mFq&P*op#SRB5uMwrI5O=D|BV|t7*jYszMn6_y=vT5wbG)8zDBN(kmfH1b)al)=7_XtiK52#|ESncdAW0QK2HvRY`_;WiO>pz_-Xk zH!T)&YR`MAJa7J@pNA;Ve=XlUuY2Z4Y1bh`Bcza^p&9I}QLUiMj74g|4NyqjXq$hi zG1}j&v`P|}Bqr@5l@eV;qy>fq`v}SgHrfA#@*v!mV~$a+B6D&Jh-sRueXL+`%jr?vt30*Vq&Bs(79VL�!Z1%E;0yxE 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 literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-italic-latin-ext.BGcWXLrn.woff2 b/v0.5.30/assets/inter-italic-latin-ext.BGcWXLrn.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9c1b9440ed419d4a71ba46b0db3951164f9e10df GIT binary patch literal 63552 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 literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-italic-latin.DbsTr1gm.woff2 b/v0.5.30/assets/inter-italic-latin.DbsTr1gm.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..01fcf20724f915f68a974ef2fb85f86f3039b1d8 GIT binary patch literal 46048 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 literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 b/v0.5.30/assets/inter-italic-vietnamese.DHNAd7Wr.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e4f788ee02bb687bc1d5045483ff0d381e7654e0 GIT binary patch literal 8784 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 G0002QVTgqQ literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 b/v0.5.30/assets/inter-roman-cyrillic-ext.DxP3Awbn.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..28593ccb8a4d849a746f2b970678fe426cb136e8 GIT binary patch literal 26600 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 literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-roman-cyrillic.CMhn1ESj.woff2 b/v0.5.30/assets/inter-roman-cyrillic.CMhn1ESj.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a20adc161f433a7c4e3d92306301b9228bcf9fb4 GIT binary patch literal 16780 zcmV(?K-a%_Pew8T0RR9106~lZ5dZ)H0DY_g06`%D0|eaw00000000000000000000 z0000Qf;JnTejI@~KS)+VQiTZyU_Vn-K~#Yn0D>GZYzoFWxhOFCMgcYgBm;yv3xXa1 z1Rw>38V4X7&~ydchCS#Gz^U?2)GLZ$;~)fx9VPq!mcYpnq1!@L^>;{*F0jecR$FUZ z6iO)D+m7xk=GG~2u%_f@f_0A}M3f5QA!I8ybSlL6sOEWg@rZ{%r-XO@6}qY6-9rwk z7S=XGl3Aagf2VfteNWPp^bim65V8@r49{4$60G9{g+&}2us@F-2(Lo2<%nmyfcXPAsEmOx;aaT-TYLA-g zgvewpb}BVR-ML%T9e1_+XSTRIu8ysxt~wvE#THu(7?>6s%t#g^w%AI*C@r+u&NSFS z!?YO379&Qd#efkr8h}DK?^}Y96T(bDG`ag0NywoDEJ20KvU^4sLVzaVq0LwZTv|C` z14y1JvebUtkK*Sjex9GxKPxfB0|W^&XiG7#GZLgqMUf&w#9A^4 zW+iy=)FGciT7s+#QV7M`LjC>~tH06w!e2Ax?^P|^{|Jdg?L}zEBROmDjx(eq_hRc1 zV(lsh-~$j6AyVM#mLRo3yaZC>4oHYziCX!nWJ|kyDQ1We#|#&!v`Om_QWZjOQ|_<7 zqO^Ag z|LxCM>gQohx?AS&cd2u!HPjGABuD`9BFByk0|5i0D0M-?X4I1etS^BES`g^zkt~9N z6bNJ~lV}D>P(cz{NrEb0f~~eA*hz!DjYD*TB-l$5xJZI}3Z&b9(r1+npvb#yl83Nl z2RnI^NS>jR=NyU`K_+AH?@ubOxrE?5zK?(a5HSEGfL9XQB!kX)2>@jCl1u;sGFnn> zj2C28OX#Vbi5JWktIZxrhYIpYTimo&U!G5i)?Q&yyoK6r2DWv;-31u6PL4a9i$7$)2F)vjovc;xwPK zkBm6fN#La>Q69B!-2$zOXy>J5lik8e zjvr!tgI)_mcek^UQnXpzqIehz`x2z^vtH%)_`!k3m2{<9hw^N84vueaRwueKS$3HK zVb)5CK*`%upy*Rb{-fw<4R%DoIZ>ilo*ZRa)D#}Tx)+(E&Z1l5xQ48UMoE>6C}TlH zzi*VptQV1_u#IZ4I$*gm@*C|gTAPwGntNMse;D@@02GLZEstc;mQ#|djM-gg+ZvER zs*0x>FbwEhF5>l%PyLvBaHKdMIm=jls)CofEk*ltCopWRZAp=ynu*F6+rJToloGhD zK$~G>vL-8w2Vjjj4qt;E)-no*zrxzjk;7tzvejc<`$O~munh-(`?5rjPvLp#Gx!03 zQlpT<(il36?a(U*@j5wBtwtSH=jYIE2f)zvu-AX$UG+dD!}anu^fqT3G1QWWK`>AT z`){B4jRWge!1`BdxMP#wk)vBR%!sa>ViO7q%y$S%s0cN|5n7^%Fc8IrK$H+Btz2Cs zD>zAuy<{a9xk14Gs1mf>8v&(?o;nb& z1P*8i74t2qRtys`mCQ;6We6lqC^V_2!A8isXLc@nFa|`jzFM)INiB@Dl`AG{3NIK? z5rn0wAPyMV4Uk-g<)=CFtJ&wbEPa48K2Y@a&VyXcm6N)nbSph9zY&D=zMFA)~&X^R$umKua zfIz9Wq(Y-07+_SAB+mqiCZPc*V^Z4i=ulZ5&?r!ZK(A1$vKm2g^UV7Jb~Zlndl9dG z{TXm*1!agOP7zcBSrT2not*}`8#^CBU{HJtb~S_-uBKN0VP%Tl>aaPAF-fwx4W+PT zC!&!JAZLJ(R%+2eCCg{s%XQqbgms+dUoGJ$TrEICQxG zMBnMk)3xV|Uaz`Pf60B_b<26H@|OEn%^mDc^*!5C*|O`A`&r3~`<3%u;cC&U>yzu7 zC1=eQ=W4&z|FGp<#frrx+Y}HGPyj^Xzv5jWpdbL|PebG^h-Z;G5}2DHbrY03fV~fd z`+#@|=!YQm5HOE{{y0RR0P;y7o(Abz2)+RLOF+K_p_d@^Ap}1I`70oPGKd}80|O`k zvX0Z}<`X2jxsD7fgkn)4F zs=LU?d=aObus|! z(Eb_0&jmb3w+NBZq5y*2@ssYZDSt(HCWd%C$xKd(XvIX0k&ID1=KIDy>8TE-BIPD( z_CQR^vqsx!#*H42Bi?w@T4REL_hSh^%I6vYB$N)oSV4~h;-2P&&Snj{J3XGHHnY1P z!)kVwqyjWG_X)t8NfYy)mlj(EU`PsfjNF5CwC&d3@(kPZEmIF9=~9&f@-qO`9~7&h zQMhF|zt-e8ee+2;*$yz;WQV=H%U4l>Mv@64=$4c=l$dKUW^X7h*&vo{D4X^M)4bA9 zzE;w_!@QYhj3&#RnI#+m-XN4>8N!}CKkQ%50E+FvCVM*iB5M2a8J`c%Iqv`f2QAuN zaIacLFhI~|&!&sYT-PiGvNU|lqD=TKD`V1VRVh8pqGIBP1e|c*!9E|h-#N5hj8j-m z?qg-+(C#FT%T-<6Al|6c##QM->NUMQy0C|rAL4sQVgVht+3q_oo3xulo%1wZz9(V7 zhb*u&+&};bCAPD}_K=6e&Cg$;KP{BC?g{T3ufjydYcL~iWrL=ww z?w*g2hcr<_9i%De_J+;$Qfr3MF%jYK3z18KVF%zLBg{$d5E$Z@g)0sk?J;F*&2o0$ z$J_b3BhpFugAWQxEPI50kn-`|*{|(zO2er~RJh3zmng58d0L6Cm7%JHf+g*001fN{ z3-$~`D@8K>bN>eLXqS%<0OV#-dhVPU)emx68yL4kx- zrDm#&DkbKFp$aIx?5tL?<(;+&Vte$~g{7==_hVK-NZ(+WjvK}=P-xy(y-(e#DSesh zgvL@m zlnl*)X!#s|9R64angj7!89*OraXhRl@tMbTw`)|l5AjPbA>Tkwp2E_AW`QZLv`t~) zuPkx$rjB(DUr=D$l0PgY3+>Vh&A%OQ90)BfZ-UqktPE)smD6*5a;nZw)cM(I$LHp| zVzj($J_}Yu?nec(4ni3eY^UedZ_!n{wx)z7ciGFXU-h{P&eqqItJx#hINP}-8R3?( z$L|Ii9_T@*;=(=cf*L7i*nyWG^DW4rC?m5sr;v2sL|W-eb>(&!UxjUp%7!YS`4sH5 z9se-U;oLr6;DZ^4KbhWh@y*{K*{D(!+J|1I zVZ?|v?oP|B*)?bG_VCDG-NjaY{w~+hcCM@GNqSVNqW@|T}FJT~!ZaixUWxJb{(L1$d2CAM7~mhwnq6&ZE}VtvAALfp={(9fMa zqZTYtpJQtsAGUgUG~$n?OB@@E_FWQVxlcoDElE2?!Wq-~#Oq(GWIy5dmNr!y3$)#3 z$E=P-aih9_1uG^+j!2JD;p3}A6XN&n z*!vI?6y%6ZtyunF<8_!dOq{{g(z@s+p)gcWHkx`mT*0*`>-s>B^s4j?Vsm2ZM*|qg zcm$9T%sa~vazY$p`60k-&gn9J9xhHfinHVZ?0pCK_46HUVN*+_9 z77^9n7&GJ;GH5o`6D=dt6P-3>Fl5NFF(#@*EnK3_ss8plqI9u|P`CB*Ih_s)K|)hW z)uHO&tF>7~h|fVB0fv6wLz1LdCQV~>Ht0ow1kk{_5S!z_FkYdIFYCRD&!|~#-aLPf zS?3-QS#$9?FZ-Pvm8a~^mC)_SIQHW~W@fp9ExmeB90g<3d@jW-jDds?KoCXa4whXa zNSQYcn+SqrH;7^&$piti>x73GgaxcNv(2ZAzR-AV=9foI9sV@%|7X)xz5VXpt2?cE zU&JVRZ8F|#G&9p{WGdzcABYmp=7VzG){Vi!hv(xO0%P*?1&5EQ&O3UN#}DzZBtNLU z-X(ju8AHxx_x_Q+0n!%>YoB;zlrQ__UXKfj&mQoMr2f_Xg|4wR-!%yP%Eu>cOZgkP zMj%}`LjC}V1w<)t3qgYf22y8~I*g3z&hl=lsu_rg>t)npIAi5mnid8PMGf|vD-R3Z~aoef`hldw!teQ! zsW1CCF;dGwTq6RdafQcOuWVW!@s13 zE>ZtZfB%E7{$9LzUS6&Tz5M^m-Wm=%G!6#?5->5@KIKK}-R93(IWX}E6ZQ{_ZY13c z2pcl}Q4lA9VT{YzS05c-X@ADZW7|#9N|Ks?_W3kRmh*e#FMt4yKE!5l4fJ(!QCt)L zb^g7*~>CJvyR$T$T7t_I%{@fX7%D^MaG~ zC=CaT*GmdT<`-I~+XIM=jRDfroh_Zv>1YVV`i})XKL{jwZBwVtCyN(YJGyh^8sqEc zwV>^zLiSIAepedEX5i|~3nq=R%h?m0AQ^5)Aa0_*wsNeJu?fkVORt-`mSkw0Im5pOZ>Q6pLJ=UEkDn3pq%U!As8g*NqaW#8&wy7?Q8 z7D^*}FG*uJ_$0^2z)J{bQeA&{nc-KbKgyPtW^6mgvS($1$J#z-S?7Uh8FNZQOTw7A zK&7noKlqM){%r*$`>htva9Vx#q(CA7hV}<$Y-*PNVZ9?}Zu)YDeu@4?AYHz7{9S$# zo%a|V*jpe+UkjL?iWG~dJ`0##+gh!@=B-y{Nb`F$i0L3aI;0qGAnKQxEo3=k+Vikh ziJgMWumgw|D{%Uz0VNSgrq({*m^j@e$JQt}pp%ze$Teo0&tl~`*-!AH_}$3p*6I*jbGEg1k zS?%Gy`!n*x1FjaPHP#XEZhh0Ghi3sH%+B`z1nKKjLEinDnO;32Kd$kT)w*>{wZ`4M z)!MclV*WmQ7)4L2ULW=fb>1`9MV-n*y+;GFe}0i^9YPD4$2jStf{8~F>DS?Y<;mB= zxuX3WziMHk@QMdA1vuF`k*Q~!bsuN#%o^;LDn%I0Gjkl%6KIhZ>$iU| zTZV7NKdy*ZRD3`_R-t;r>p$gw^z5@Ae_0(k-u#u+4QP)kXM@KCAQ9lDRUiNk5wk8}7v5*?m9_0>GnZ)b zHXOqh`8Hd>M|pon*q9(r&|1CbLE1S)5x0aw+D<9C&<)B~1+x;X%-X7;FgA9K$?0gS z)7Th0O|}|R3;rgCc14zyPbK9ZJCaaz@Dgc}RF z06O}VB*4oJcKzYlSQI*e9ILZq1U<1LIG(s{E|6kNOGwf#G!}wgjvUDFSh3HaIa_i4 zj~Ir%e1=i~VAUN9~-?l;whI>`rG3>&8GQ|<0?=~< z)P+(_zl`h{OONG9#6FsNPQRAO$V%H#de}xcc;sdP^Eew!7wL880=n>M&sf*G`}sGY zvfiu7nZ0pkA1>yuPM*-_8Ig11Lmu}dsj~Ko(L%lVjMH?zkI}-Dn|OB39}OSQ2iCUu zT!cIrx)$(9wo{J3WUw=H6tyAPo9mCv&}3_k59d?)BdOO*65ws)#m(7qG3A#pi&2WR z9GyN>R-Qe*9(^qh2w3X-3x2MP`P?&T6MZ6F8e~s+`iL92g?aLqK(7$J#lzBEn5+wjyJQypMRb0K*!G|hlhJ58~eWEefdUYAV|5i z&W*AO=3_2VGhs7*ne1oDNektL<%tVVldrNDlM_Ni{K7(V)g;o{nT2VI)oF27VP+Cr zRLEt9hsEt_P=nwLjMS?605o`%T$GBm_>Rh<(02}SCmT@N5>Oc*mOT(t?8#K2xY`v`svc_epS#Kb$SpGKe{!-zdGxpV z1tZ?cn}~-08tT2%LG^F@MF@Ze0KGCOKmgF#I3N$GN0Y5pOIz)n1ew}WV|S5kioyYm zv$aEg{3r-<3&;(ckd7$@NJXN1!DImw@wU4|)a^@$+I%~$Jmp;6$~2iOLj~w+*%Ssy zK1I0=FanxB{6B-_FiB$zwMelwN1_lwU2*no095^IK&Ml;&9G7-5<@>{S{B8t-J{f`tf$OU{=+D*a!LiM{-7GH`nMQBP9|58e^c9|HmbI&uA+WS zJw?4z{f7FeMzBVy#vP3h6dB5X%4N!ernY90<{PauS`W2Vw5zl`wfnWFb#!%3>iFus z)%m@08`VJFNZmoTp&q0jr}|Q(sZ44)l|${K4pK$FB4Fad6L{Ew;5Go{U~Gmx0LzJ{ z*ti`X-EqJIv=O_~r1M)!-N+%?DoG~NY$2o_C{l!JL_*RaFu7wRc8Vx6$9a@xmV49y z9%>M%0mSBjHtabhGz__LKU_0z55yN{&qtKPf5r1N*C*qJ<)Wm`)Q(=>ZI)!x)wk!q z2||HF!oFQ5$te&wU>bf9l3c{M6qy5Jeq#ZMS_4gM7gdtDHm_Rpfbh>- zhUIy5w*$OAhDGUt7rk+VVU9bu$Pls=cd9-RSDO2J=w#EiJuVI)EB7Y~mR0aQgH8I5Y#>!_I6m92^m{UA4HhaxN<*adsD5tu6= z5=u?O%c5n0SxVT)CK;Ea_SjX@-0fCKq}cORM?lW4fVkaWIO*t3nv2$zahx^UH``Ib$S&$Z3QBb*!#Qk?S3>H7r4d&#wvI$9LffbgyDcr^O}xMX{AA zuq1N7>U*eS^=gYXscv@gvi@$UA5`OrUK>YsJZ}E+O5S<_ma}H0d-L!nEZ^x^r@KAj zvx_uoy6o8WPeobJH#y{?UXZp>PYOypU9FrV=S~NxmR&`SqsZs0arU1Epr5hWh`}`` zi?NIS@jQIG#>6R3@abMJoHei??zUh8fz^JDc;K?c(DzSg7$)^_hqEiH{Un`C0&Cyy z(w&Yw+6D^EcVBwb(H6pM`{6jPvP)M065F>OyPcvqf5^!uYidQUh$I3TKO_*Z|V({}+&T+f2B%VBtXNSeU4aHVhqD9uBLG`<;y)Mt? zYCOlDQ(tXyDDG{XGilOvO8=%@4Pe9qhp2J*nNJKZj$hnTa|i!to~3d8OnfQLGUH!M zvdkap+l+_!uT^dP9X@{KZbyZ7;R9U73}fioj5trHLJ%RqIxPPKK@FokLZSzT9{i=l zU-pMDSciBn)0~5D%}*Tc1K3}+j>mNAOytbOhW$i<03nzPZUYyNT!xD;9Uq(D(R{q4 z@6?{MG6xS{QACv7Q_|==eWHEHelzwoF7LI;1a=ki+|;XXOFlCRi!%2|5%b2jP2CTd+zBfzwT*FdkA>H$+BOs>6f}9Q_A$6 zrzw9g9|G9eIYgY?EmU?N&28_9vAw-@TGmV!-Sq72zI6WFLp|N?JCS)Es|;N?@p+hI zqOX+*9C8(Y51w(H&pqwI1e#{sFr+wR`DTO|W9A{4lF}VS5zQRMA08|(U0t1dNv(m^!IQ>qz9KDfw*W`G5 z>!IB6Q_qMi;dXn9jNE#GkG^_R97>-RUUxJ#v-A+Ibi<3Gaq{^P6Cqw_%-Wa^Z@!E^iX^E|d!P4XU1A0G{G&q;fK?8VVM zGUh~P6d!JK6+_J`17`DIqDT6{v&@e~?-u;x$OCYwt@I09O5A1Dco(e-H&)42R=a*6 zclTmOvcI1YBV2Asb9b`kex9VfaED6=b+L}r8eF63dJb7qf@}EXa3>toEs2E9WkwwD zCYqWEq0-mrh7_eqi{+`OfH&0cX(7AerMGfjF%md#rmXNL(!Q)6nB!3@dMVBAS3JMU z0?$bBglDYgqEi0iR@pBfW2|afvnxcXUqHUeyb?8zPB|Ych*JDgQ6i0>}dwr1$)9qd99{?{F1&_$fE1(sddbQ zVviv?l<*>ioj5n+ohC%>fmDlv4l8VJ~a zLV?h*^T2uK;VWP+C4`cQIm4?ft?xA`51;WXIFbx^52_1{2Db0({0XY+t?K&w;Rtwe ztiUTLXf#YtE@Z3PbsDM)3k+9q5A^68Ge(O94-1o-x)AZ;rjkz!+mqFwB@<`ecae-d z0NI{hdV#(59g6h)Ix6VlvDPnBTBgzZD=ysQN* zZw*l&%ecSKN^z5LmK=H7N8lCQCRb3|Ordy-0#>bJy$})c=N;T9EspnnnzQARX@^IC z#F2?ZcDkVphOBKa*Vq_N-FzhRy`+pxOkA35#it$=bw)|9TU;xCiz>lnOnf+Sl|KxL55S%rNs95NXZ zd`jZ%ipjXsEBUmvgqOo4j94t}H9T`qR;YE{m`Uyy<9e%&{rm;b^I1Jlh~Y!OLTHfa zN_CLMC=+nBf+n4dgLT$I7sPt(NJ`@S>RG>YqIT6n(UHCbLWLtF0qsxR$Oh6kJ(`!~Njb0wXS`osNWTedIiRb^CG z)ELmr2?w^odi&RS{((^Xy~je1VwRchGH?a1*tIX?i zW>^<#`ARaaJ(%JGET&YFxA4nCWZ3w^zZC1uW{Jca_uBxkXg;(|l-fdk6hk3!~c%j1V^U`VPZd83cN93

    KZ;k8ywA} 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 O1{o}0SRMEP0000Yp_Hru literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-roman-greek.JvnBZ4YD.woff2 b/v0.5.30/assets/inter-roman-greek.JvnBZ4YD.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f790e047daa346583880da2be470431e35aa6054 GIT binary patch literal 21776 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 De!(H( literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 b/v0.5.30/assets/inter-roman-latin-ext.ZlYT4o7i.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..715bd903b9b14d22a056f10e6d13b8d7e0acce57 GIT binary patch literal 59608 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

    Citation

    If you found this library to be useful in academic work, then please cite:

    bibtex
    @software{pal2023lux,
    +  author    = {Pal, Avik},
    +  title     = {{Lux: Explicit Parameterization of Deep Neural Networks in Julia}},
    +  month     = {April},
    +  year      = 2023,
    +  note      = {If you use this software, please cite it as below.},
    +  publisher = {Zenodo},
    +  version   = {v0.5.0},
    +  doi       = {10.5281/zenodo.7808904},
    +  url       = {https://doi.org/10.5281/zenodo.7808904}
    +}
    bibtex
    @thesis{pal2023efficient,
    +  title     = {{On Efficient Training \\& Inference of Neural Differential Equations}},
    +  author    = {Pal, Avik},
    +  year      = {2023},
    +  school    = {Massachusetts Institute of Technology}
    +}
    `,4),k=[h];function l(p,e,E,r,d,F){return a(),i("div",null,k)}const o=s(t,[["render",l]]);export{y as __pageData,o as default}; diff --git a/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.lean.js b/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.lean.js new file mode 100644 index 000000000..f9c176f58 --- /dev/null +++ b/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Citation","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/citation.md","filePath":"introduction/citation.md","lastUpdated":null}'),t={name:"introduction/citation.md"},h=n("",4),k=[h];function l(p,e,E,r,d,F){return a(),i("div",null,k)}const o=s(t,[["render",l]]);export{y as __pageData,o as default}; diff --git a/v0.5.30/assets/introduction_index.md.BGT8f-rY.js b/v0.5.30/assets/introduction_index.md.BGT8f-rY.js new file mode 100644 index 000000000..e86e23b95 --- /dev/null +++ b/v0.5.30/assets/introduction_index.md.BGT8f-rY.js @@ -0,0 +1,88 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/index.md","filePath":"introduction/index.md","lastUpdated":null}'),p={name:"introduction/index.md"},t=n(`

    Getting Started

    Installation

    Install Julia v1.10 or above. Lux.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

    julia
    pkg> add Lux

    Alternatively, you can also do

    julia
    import Pkg; Pkg.add("Lux")

    Quickstart

    Pre-Requisites

    You need to install Optimisers and Zygote if not done already. Pkg.add(["Optimisers", "Zygote"])

    julia
    using Lux, Random, Optimisers, Zygote
    +# using LuxCUDA, LuxAMDGPU, Metal # Optional packages for GPU support

    We take randomness very seriously

    julia
    # Seeding
    +rng = Random.default_rng()
    +Random.seed!(rng, 0)
    Random.TaskLocalRNG()

    Build the model

    julia
    # Construct the layer
    +model = Chain(Dense(128, 256, tanh), Chain(Dense(256, 1, tanh), Dense(1, 10)))
    Chain(
    +    layer_1 = Dense(128 => 256, tanh_fast),  # 33_024 parameters
    +    layer_2 = Dense(256 => 1, tanh_fast),  # 257 parameters
    +    layer_3 = Dense(1 => 10),           # 20 parameters
    +)         # Total: 33_301 parameters,
    +          #        plus 0 states.

    Models don't hold parameters and states so initialize them. From there on, we just use our standard AD and Optimisers API.

    julia
    # Get the device determined by Lux
    +device = gpu_device()
    +
    +# Parameter and State Variables
    +ps, st = Lux.setup(rng, model) .|> device
    +
    +# Dummy Input
    +x = rand(rng, Float32, 128, 2) |> device
    +
    +# Run the model
    +y, st = Lux.apply(model, x, ps, st)
    +
    +# Gradients
    +## Pullback API to capture change in state
    +(l, st_), pb = pullback(p -> Lux.apply(model, x, p, st), ps)
    +gs = pb((one.(l), nothing))[1]
    +
    +# Optimization
    +st_opt = Optimisers.setup(Adam(0.0001f0), ps)
    +st_opt, ps = Optimisers.update(st_opt, ps, gs)
    ((layer_1 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.00313608 0.00806096 … 0.00476192 0.00732118; -0.00447309 -0.0119719 … -0.00822211 -0.0110335; … ; -0.00294453 -0.00749935 … -0.00426221 -0.00678769; 0.000750543 0.00195163 … 0.00120731 0.00178011], Float32[9.83485f-7 6.49782f-6 … 2.26756f-6 5.3599f-6; 2.00083f-6 1.43324f-5 … 6.76022f-6 1.21738f-5; … ; 8.67016f-7 5.62395f-6 … 1.81662f-6 4.60721f-6; 5.63307f-8 3.80882f-7 … 1.45758f-7 3.16876f-7], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.00954525; -0.0146331; … ; -0.00881351; 0.00233261;;], Float32[9.11106f-6; 2.14125f-5; … ; 7.76769f-6; 5.44098f-7;;], (0.81, 0.998001)))), layer_2 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[-0.0104967 0.0714637 … -0.0224641 0.108277], Float32[1.10179f-5 0.000510699 … 5.04628f-5 0.00117238], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.178909;;], Float32[0.0032008;;], (0.81, 0.998001)))), layer_3 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[-0.105128; -0.105128; … ; -0.105128; -0.105128;;], Float32[0.00110518; 0.00110518; … ; 0.00110518; 0.00110518;;], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.2; 0.2; … ; 0.2; 0.2;;], Float32[0.00399995; 0.00399995; … ; 0.00399995; 0.00399995;;], (0.81, 0.998001))))), (layer_1 = (weight = Float32[-0.11044693 0.10963185 … 0.097855344 -0.009167461; -0.0110904 0.07588978 … -0.03180492 0.088967875; … ; 0.01864451 -0.034903362 … -0.016194405 0.019176451; -0.09216565 -0.047490627 … -0.08869007 0.009417342], bias = Float32[-9.999999f-5; 9.999998f-5; … ; 9.999999f-5; -9.9999954f-5;;]), layer_2 = (weight = Float32[0.05391791 -0.103956826 … -0.050862882 0.020512676], bias = Float32[-0.0001;;]), layer_3 = (weight = Float32[-0.6546853; 0.6101978; … ; 0.41120994; 0.5494141;;], bias = Float32[-0.0001; -0.0001; … ; -0.0001; -0.0001;;])))

    Defining Custom Layers

    julia
    using Lux, Random, Optimisers, Zygote
    +# using LuxCUDA, LuxAMDGPU, Metal # Optional packages for GPU support
    +import Lux.Experimental: @compact

    We will define a custom MLP using the @compact macro. The macro takes in a list of parameters, layers and states, and a function defining the forward pass of the neural network.

    julia
    n_in = 1
    +n_out = 1
    +nlayers = 3
    +
    +model = @compact(w1=Dense(n_in, 128),
    +    w2=[Dense(128, 128) for i in 1:nlayers],
    +    w3=Dense(128, n_out),
    +    act=relu) do x
    +    embed = act(w1(x))
    +    for w in w2
    +        embed = act(w(embed))
    +    end
    +    out = w3(embed)
    +    return out
    +end
    @compact(
    +    w1 = Dense(1 => 128),               # 256 parameters
    +    w2 = NamedTuple(
    +        1 = Dense(128 => 128),          # 16_512 parameters
    +        2 = Dense(128 => 128),          # 16_512 parameters
    +        3 = Dense(128 => 128),          # 16_512 parameters
    +    ),
    +    w3 = Dense(128 => 1),               # 129 parameters
    +    act = relu,
    +) do x 
    +    embed = act(w1(x))
    +    for w = w2
    +        embed = act(w(embed))
    +    end
    +    out = w3(embed)
    +    return out
    +end       # Total: 49_921 parameters,
    +          #        plus 1 states.

    We can initialize the model and train it with the same code as before!

    julia
    ps, st = Lux.setup(Xoshiro(0), model)
    +
    +model(randn(n_in, 32), ps, st)  # 1×32 Matrix as output.
    +
    +x_data = collect(-2.0f0:0.1f0:2.0f0)'
    +y_data = 2 .* x_data .- x_data .^ 3
    +st_opt = Optimisers.setup(Adam(), ps)
    +
    +for epoch in 1:1000
    +    global st  # Put this in a function in real use-cases
    +    (loss, st), pb = Zygote.pullback(ps) do p
    +        y, st_ = model(x_data, p, st)
    +        return sum(abs2, y .- y_data), st_
    +    end
    +    gs = only(pb((one(loss), nothing)))
    +    epoch % 100 == 1 && println("Epoch: $(epoch) | Loss: $(loss)")
    +    Optimisers.update!(st_opt, ps, gs)
    +end
    Epoch: 1 | Loss: 84.32512
    +Epoch: 101 | Loss: 0.08861052
    +Epoch: 201 | Loss: 0.007037298
    +Epoch: 301 | Loss: 0.005391656
    +Epoch: 401 | Loss: 0.014058021
    +Epoch: 501 | Loss: 0.0022117028
    +Epoch: 601 | Loss: 0.0015865607
    +Epoch: 701 | Loss: 0.21984956
    +Epoch: 801 | Loss: 0.00019668281
    +Epoch: 901 | Loss: 0.0018975141

    Additional Packages

    LuxDL hosts various packages that provide additional functionality for Lux.jl. All packages mentioned in this documentation are available via the Julia General Registry.

    You can install all those packages via import Pkg; Pkg.add(<package name>).

    GPU Support

    GPU Support for Lux.jl requires loading additional packages:

    `,32),l=[t];function h(e,k,d,r,E,g){return a(),i("div",null,l)}const c=s(p,[["render",h]]);export{y as __pageData,c as default}; diff --git a/v0.5.30/assets/introduction_index.md.BGT8f-rY.lean.js b/v0.5.30/assets/introduction_index.md.BGT8f-rY.lean.js new file mode 100644 index 000000000..38c798599 --- /dev/null +++ b/v0.5.30/assets/introduction_index.md.BGT8f-rY.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/index.md","filePath":"introduction/index.md","lastUpdated":null}'),p={name:"introduction/index.md"},t=n("",32),l=[t];function h(e,k,d,r,E,g){return a(),i("div",null,l)}const c=s(p,[["render",h]]);export{y as __pageData,c as default}; diff --git a/v0.5.30/assets/introduction_overview.md.CYVQehqb.js b/v0.5.30/assets/introduction_overview.md.CYVQehqb.js new file mode 100644 index 000000000..aa2820014 --- /dev/null +++ b/v0.5.30/assets/introduction_overview.md.CYVQehqb.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,a4 as a}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Why we wrote Lux?","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/overview.md","filePath":"introduction/overview.md","lastUpdated":null}'),s={name:"introduction/overview.md"},i=a('

    Why we wrote Lux?

    Julia already has quite a few well established Neural Network Frameworks – Flux & KNet. However, certain design elements – Coupled Model and Parameters & Internal Mutations – associated with these frameworks make them less compiler and user friendly. Making changes to address these problems in the respective frameworks would be too disruptive for users. Here comes in Lux: a neural network framework built completely using pure functions to make it both compiler and autodiff friendly.

    Design Principles

    • Layers must be immutable – cannot store any parameter/state but rather store the information to construct them

    • Layers are pure functions

    • Layers return a Tuple containing the result and the updated state

    • Given same inputs the outputs must be same – yes this must hold true even for stochastic functions. Randomness must be controlled using rngs passed in the state.

    • Easily extensible

    • Extensive Testing – All layers and features are tested across all supported AD backends across all supported hardware backends.

    Why use Lux over Flux?

    • Neural Networks for SciML: For SciML Applications (Neural ODEs, Deep Equilibrium Models) solvers typically expect a monolithic parameter vector. Flux enables this via its destructure mechanism, but destructure comes with various edge cases and limitations. Lux forces users to make an explicit distinction between state variables and parameter variables to avoid these issues. Also, it comes battery-included for distributed training.

    • Sensible display of Custom Layers – Ever wanted to see Pytorch like Network printouts or wondered how to extend the pretty printing of Flux's layers? Lux handles all of that by default.

    • Truly immutable models - No unexpected internal mutations since all layers are implemented as pure functions. All layers are also deterministic given the parameters and state: if a layer is supposed to be stochastic (say Dropout), the state must contain a seed which is then updated after the function call.

    • Easy Parameter Manipulation – By separating parameter data and layer structures, Lux makes implementing WeightNorm, SpectralNorm, etc. downright trivial. Without this separation, it is much harder to pass such parameters around without mutations which AD systems don't like.

    • Small Neural Networks on CPU – Lux is developed for training large neural networks. For smaller architectures, we recommend using SimpleChains.jl or even better use it in conjunction with Lux via ToSimpleChainsAdaptor.

    • Reliability – We have learned from the mistakes of the past with Flux and everything in our core framework is extensively tested, along with downstream CI to ensure that everything works as expected.

    Why not use Lux (and Julia for traditional Deep Learning in general) ?

    • Lack of Large Models Support – Classical deep learning is not Lux's primary focus. For these, python frameworks like PyTorch and Jax are better suited.

    • XLA Support – Lux doesn't compile to XLA which means no TPU support unfortunately.

    ',8),o=[i];function n(l,u,d,p,c,h){return r(),t("div",null,o)}const f=e(s,[["render",n]]);export{g as __pageData,f as default}; diff --git a/v0.5.30/assets/introduction_overview.md.CYVQehqb.lean.js b/v0.5.30/assets/introduction_overview.md.CYVQehqb.lean.js new file mode 100644 index 000000000..8205d2a6c --- /dev/null +++ b/v0.5.30/assets/introduction_overview.md.CYVQehqb.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,a4 as a}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Why we wrote Lux?","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/overview.md","filePath":"introduction/overview.md","lastUpdated":null}'),s={name:"introduction/overview.md"},i=a("",8),o=[i];function n(l,u,d,p,c,h){return r(),t("div",null,o)}const f=e(s,[["render",n]]);export{g as __pageData,f as default}; diff --git a/v0.5.30/assets/introduction_resources.md.jcqOsVfN.js b/v0.5.30/assets/introduction_resources.md.jcqOsVfN.js new file mode 100644 index 000000000..6d28bb016 --- /dev/null +++ b/v0.5.30/assets/introduction_resources.md.jcqOsVfN.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,a4 as s}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Resources to Get Started","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/resources.md","filePath":"introduction/resources.md","lastUpdated":null}'),a={name:"introduction/resources.md"},o=s('

    Resources to Get Started

    • Go through the Quickstart Example.

    • Read the introductory tutorials on Julia and Lux.

    • Go through the examples sorted based on their complexity in the documentation.

    Have More Questions?

    For usage related questions, please use Github Discussions or JuliaLang Discourse (machine learning domain) which allows questions and answers to be indexed. To report bugs use github issues or even better send in a pull request.

    ',3),i=[o];function n(u,l,c,d,h,p){return r(),t("div",null,i)}const m=e(a,[["render",n]]);export{g as __pageData,m as default}; diff --git a/v0.5.30/assets/introduction_resources.md.jcqOsVfN.lean.js b/v0.5.30/assets/introduction_resources.md.jcqOsVfN.lean.js new file mode 100644 index 000000000..d17dd4d7c --- /dev/null +++ b/v0.5.30/assets/introduction_resources.md.jcqOsVfN.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,a4 as s}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Resources to Get Started","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/resources.md","filePath":"introduction/resources.md","lastUpdated":null}'),a={name:"introduction/resources.md"},o=s("",3),i=[o];function n(u,l,c,d,h,p){return r(),t("div",null,i)}const m=e(a,[["render",n]]);export{g as __pageData,m as default}; diff --git a/v0.5.30/assets/manual_debugging.md.Cng6aRvr.js b/v0.5.30/assets/manual_debugging.md.Cng6aRvr.js new file mode 100644 index 000000000..060d74ab4 --- /dev/null +++ b/v0.5.30/assets/manual_debugging.md.Cng6aRvr.js @@ -0,0 +1,121 @@ +import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Debugging Lux Models","description":"","frontmatter":{},"headers":[],"relativePath":"manual/debugging.md","filePath":"manual/debugging.md","lastUpdated":null}'),e={name:"manual/debugging.md"},l=n(`

    Debugging Lux Models

    Debugging DNNs can be very painful. Especially with the gigantic stacktraces for Lux, it is even harder to pin-point to which particular layer errored out. This page describes some useful tools that ship with Lux, that can help you debug your models.

    TL;DR

    Simply wrap your model with Lux.Experimental.@debug!!

    Don't Forget

    Remember to use the non Debug mode model after you finish debugging. Debug mode models are way slower.

    Let us construct a model which has an obviously incorrect dimension. In this example, you will see how easy it is to pin-point the problematic layer.

    Incorrect Model Specification: Dimension Mismatch Problems

    julia
    using Lux, Random
    +
    +model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 3), Dense(1 => 1)),
    +    BatchNorm(1); disable_optimizations=true)
    +
    +model_debug = Lux.Experimental.@debug_mode model
    Chain(
    +    layer_1 = DebugLayer(
    +        layer = Dense(1 => 16, relu),   # 32 parameters
    +    ),
    +    layer_2 = Chain(
    +        layer_1 = DebugLayer(
    +            layer = Dense(16 => 3),     # 51 parameters
    +        ),
    +        layer_2 = DebugLayer(
    +            layer = Dense(1 => 1),      # 2 parameters
    +        ),
    +    ),
    +    layer_3 = DebugLayer(
    +        layer = BatchNorm(1, affine=true, track_stats=true),  # 2 parameters, plus 3
    +    ),
    +)         # Total: 87 parameters,
    +          #        plus 3 states.

    Note that we can use the parameters and states for model itself in model_debug, no need to make any changes. If you ran the original model this is the kind of error you would see:

    julia
    rng = Xoshiro(0)
    +
    +ps, st = Lux.setup(rng, model)
    +x = randn(rng, Float32, 1, 1)
    +
    +try
    +    model(x, ps, st)
    +catch e
    +    println(e)
    +end
    DimensionMismatch("A has dimensions (1,1) but B has dimensions (3,1)")

    Ofcourse, this error will come with a detailed stacktrace, but it is still not very useful. Now let's try using the debug mode model:

    julia
    try
    +    model_debug(x, ps, st)
    +catch e
    +    println(e)
    +end
    [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
    +[ Info: Running Layer: Dense(16 => 3) at location model.layers.layer_2.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (3, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (3, 1)
    +[ Info: Running Layer: Dense(1 => 1) at location model.layers.layer_2.layers.layer_2!
    +┌ Error: Layer Dense(1 => 1) failed!! This layer is present at location model.layers.layer_2.layers.layer_2
    +└ @ Lux.Experimental /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/contrib/debug.jl:110
    +DimensionMismatch("A has dimensions (1,1) but B has dimensions (3,1)")

    See now we know that model.layers.layer_2.layers.layer_2 is the problematic layer. Let us fix that layer and see what happens:

    julia
    model = Chain(Dense(1 => 16, relu),
    +    Chain(Dense(16 => 3),  // [!code --]
    +    Chain(Dense(16 => 1),  // [!code ++]
    +        Dense(1 => 1)),
    +    BatchNorm(1); disable_optimizations=true)
    julia
    model_fixed = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), Dense(1 => 1)),
    +    BatchNorm(1); disable_optimizations=true)
    +
    +ps, st = Lux.setup(rng, model_fixed)
    +
    +model_fixed(x, ps, st)
    (Float32[0.0;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[-0.01397949], running_var = Float32[NaN], training = Val{true}())))

    Voila!! We have tracked down and fixed the problem.

    Tracking down NaNs

    Have you encountered those pesky little NaNs in your training? They are very hard to track down. We will create an artificially simulate NaNs in our model and see how we can track the offending layer.

    We can set nan_check to :forward, :backward or :both to check for NaNs in the debug model. (or even disable it by setting it to :none)

    julia
    model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), Dense(1 => 1)),
    +    BatchNorm(1); disable_optimizations=true)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +model_debug = Lux.Experimental.@debug_mode model nan_check=:both
    Chain(
    +    layer_1 = DebugLayer(
    +        layer = Dense(1 => 16, relu),   # 32 parameters
    +    ),
    +    layer_2 = Chain(
    +        layer_1 = DebugLayer(
    +            layer = Dense(16 => 1),     # 17 parameters
    +        ),
    +        layer_2 = DebugLayer(
    +            layer = Dense(1 => 1),      # 2 parameters
    +        ),
    +    ),
    +    layer_3 = DebugLayer(
    +        layer = BatchNorm(1, affine=true, track_stats=true),  # 2 parameters, plus 3
    +    ),
    +)         # Total: 53 parameters,
    +          #        plus 3 states.

    Let us set a value in the parameter to NaN:

    julia
    ps.layer_2.layer_2.weight[1, 1] = NaN
    NaN

    Now let us run the model

    julia
    model(x, ps, st)
    (Float32[NaN;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[NaN], running_var = Float32[NaN], training = Val{true}())))

    Ah as expected our output is NaN. But is is not very clear how to track where the first NaN occurred. Let's run the debug model and check:

    julia
    try
    +    model_debug(x, ps, st)
    +catch e
    +    println(e)
    +end
    [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
    +[ Info: Running Layer: Dense(16 => 1) at location model.layers.layer_2.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: Dense(1 => 1) at location model.layers.layer_2.layers.layer_2!
    +DomainError((weight = Float32[NaN;;], bias = Float32[0.0;;]), "NaNs detected in parameters of layer Dense(1 => 1) at location model.layers.layer_2.layers.layer_2")

    And we have figured it out! The first NaN occurred in the parameters of model.layers.layer_2.layers.layer_2! But what if NaN occurs in the reverse pass! Let us define a custom layer and introduce a fake NaN in the backward pass.

    julia
    using ChainRulesCore, Zygote
    +
    +const CRC = ChainRulesCore
    +
    +offending_layer(x) = 2 .* x
    offending_layer (generic function with 1 method)
    julia
    model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), offending_layer),
    +    BatchNorm(1); disable_optimizations=true)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +model(x, ps, st)
    (Float32[0.0;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[-0.092828535], running_var = Float32[NaN], training = Val{true}())))

    Let us define a custom backward pass to introduce some NaNs:

    julia
    function CRC.rrule(::typeof(offending_layer), x)
    +    y = offending_layer(x)
    +    function ∇offending_layer(Δ)
    +        Δ[1] = NaN
    +        return NoTangent(), Δ
    +    end
    +    return y, ∇offending_layer
    +end

    Let us compute the gradient of the layer now:

    julia
    Zygote.gradient(ps -> sum(first(model(x, ps, st))), ps)
    ((layer_1 = (weight = Float32[0.0; NaN; … ; NaN; 0.0;;], bias = Float32[0.0; NaN; … ; NaN; 0.0;;]), layer_2 = (layer_1 = (weight = Float32[NaN NaN … NaN NaN], bias = Float32[NaN;;]), layer_2 = nothing), layer_3 = (scale = Float32[0.0], bias = Fill(1.0f0, 1))),)

    Oh no!! A NaN is present in the gradient of ps. Let us run the debug model and see where the NaN occurred:

    julia
    model_debug = Lux.Experimental.@debug_mode model nan_check=:both
    +
    +try
    +    Zygote.gradient(ps -> sum(first(model_debug(x, ps, st))), ps)
    +catch e
    +    println(e)
    +end
    [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
    +[ Info: Running Layer: Dense(16 => 1) at location model.layers.layer_2.layers.layer_1!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
    +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
    +[ Info: Running Layer: BatchNorm(1, affine=true, track_stats=true) at location model.layers.layer_3!
    +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
    +DomainError(Float32[NaN;;], "NaNs detected in pullback output for WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2!")

    And there you go our debug layer prints that the problem is in WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2! Once we fix the pullback of the layer, we will fix the NaNs.

    Conclusion

    In this manual section, we have discussed tracking down errors in Lux models. We have covered tracking incorrect model specifications and NaNs in forward and backward passes. However, remember that this is an Experimental feature, and there might be edge cases that don't work correctly. If you find any such cases, please open an issue on GitHub!

    `,49),p=[l];function t(h,k,r,d,g,o){return i(),a("div",null,p)}const E=s(e,[["render",t]]);export{y as __pageData,E as default}; diff --git a/v0.5.30/assets/manual_debugging.md.Cng6aRvr.lean.js b/v0.5.30/assets/manual_debugging.md.Cng6aRvr.lean.js new file mode 100644 index 000000000..429859f08 --- /dev/null +++ b/v0.5.30/assets/manual_debugging.md.Cng6aRvr.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Debugging Lux Models","description":"","frontmatter":{},"headers":[],"relativePath":"manual/debugging.md","filePath":"manual/debugging.md","lastUpdated":null}'),e={name:"manual/debugging.md"},l=n("",49),p=[l];function t(h,k,r,d,g,o){return i(),a("div",null,p)}const E=s(e,[["render",t]]);export{y as __pageData,E as default}; diff --git a/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.js b/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.js new file mode 100644 index 000000000..f6c943073 --- /dev/null +++ b/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.js @@ -0,0 +1,58 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const o=JSON.parse('{"title":"Dispatching on Custom Input Types","description":"","frontmatter":{},"headers":[],"relativePath":"manual/dispatch_custom_input.md","filePath":"manual/dispatch_custom_input.md","lastUpdated":null}'),h={name:"manual/dispatch_custom_input.md"},t=n(`

    Dispatching on Custom Input Types

    Which function should participate in dispatch?

    • Defining a dispatch on (::Layer)(x::MyInputType, ps, st::NamedTuple) is inconvenient, since it requires the user to define a new method for every layer type.

    • (::AbstractExplicitLayer)(x::MyInputType, ps, st::NamedTuple) doesn't work.

    • Instead, we need to define the dispatch on Lux.apply(::AbstractExplicitLayer, x::MyInputType, ps, st::NamedTuple).

    Concrete Example

    Consider Neural ODEs. In these models, often time we want to every iteration of the neural network to take the current time as input. Here, we won't go through implementing an entire Neural ODE model. Instead we will define a time dependent version of Chain.

    Time-Dependent Chain Implementation

    julia
    using Lux, Random
    +
    +struct TDChain{L <: NamedTuple} <: Lux.AbstractExplicitContainerLayer{(:layers,)}
    +    layers::L
    +end
    +
    +function (l::TDChain)((x, t)::Tuple, ps, st::NamedTuple)
    +    # Concatenate along the 2nd last dimension
    +    sz = ntuple(i -> i == ndims(x) - 1 ? 1 : size(x, i), ndims(x))
    +    t_ = ones(eltype(x), sz) .* t  # Needs to be modified for GPU
    +    for name in keys(l.layers)
    +        x, st_ = Lux.apply(getfield(l.layers, name), cat(x, t_; dims=ndims(x) - 1),
    +                           getfield(ps, name), getfield(st, name))
    +        st = merge(st, NamedTuple{(name,)}((st_,)))
    +    end
    +    return x, st
    +end
    +
    +model = Chain(Dense(3, 4), TDChain((; d1=Dense(5, 4), d2=Dense(5, 4))), Dense(4, 1))
    Chain(
    +    layer_1 = Dense(3 => 4),            # 16 parameters
    +    layer_2 = TDChain(
    +        layers = NamedTuple(
    +            d1 = Dense(5 => 4),         # 24 parameters
    +            d2 = Dense(5 => 4),         # 24 parameters
    +        ),
    +    ),
    +    layer_3 = Dense(4 => 1),            # 5 parameters
    +)         # Total: 69 parameters,
    +          #        plus 0 states.

    Running the TDChain

    julia
    rng = MersenneTwister(0)
    +ps, st = Lux.setup(rng, model)
    +x = randn(rng, Float32, 3, 2)
    +
    +try
    +    model(x, ps, st)
    +catch e
    +    Base.showerror(stdout, e)
    +end
    MethodError: no method matching (::Main.TDChain{@NamedTuple{d1::Dense{true, typeof(identity), typeof(glorot_uniform), typeof(zeros32)}, d2::Dense{true, typeof(identity), typeof(glorot_uniform), typeof(zeros32)}}})(::Matrix{Float32}, ::@NamedTuple{d1::@NamedTuple{weight::Matrix{Float32}, bias::Matrix{Float32}}, d2::@NamedTuple{weight::Matrix{Float32}, bias::Matrix{Float32}}}, ::@NamedTuple{d1::@NamedTuple{}, d2::@NamedTuple{}})
    +
    +Closest candidates are:
    +  (::Main.TDChain)(!Matched::Tuple, ::Any, ::NamedTuple)
    +   @ Main dispatch_custom_input.md:29

    Writing the Correct Dispatch Rules

    • Create a Custom Layer storing the time.
    julia
    struct ArrayAndTime{A <: AbstractArray, T <: Real}
    +    array::A
    +    time::T
    +end
    • Define the dispatch on Lux.apply(::AbstractExplicitLayer, x::ArrayAndTime, ps, st::NamedTuple).
    julia
    function Lux.apply(layer::Lux.AbstractExplicitLayer, x::ArrayAndTime, ps, st::NamedTuple)
    +    y, st = layer(x.array, ps, st)
    +    return ArrayAndTime(y, x.time), st
    +end
    +
    +function Lux.apply(layer::TDChain, x::ArrayAndTime, ps, st::NamedTuple)
    +    y, st = layer((x.array, x.time), ps, st)
    +    return ArrayAndTime(y, x.time), st
    +end
    • Run the model.
    julia
    xt = ArrayAndTime(x, 10.0f0)
    +
    +model(xt, ps, st)[1]
    Main.ArrayAndTime{Matrix{Float32}, Float32}(Float32[4.8016562 5.174927], 10.0f0)

    Using the Same Input for Non-TD Models

    Writing proper dispatch means we can simply replace the TDChain with a Chain (of course with dimension corrections) and the pipeline still works.

    julia
    model = Chain(Dense(3, 4), Chain((; d1=Dense(4, 4), d2=Dense(4, 4))), Dense(4, 1))
    +
    +ps, st = Lux.setup(rng, model)
    +
    +model(xt, ps, st)[1]
    Main.ArrayAndTime{Matrix{Float32}, Float32}(Float32[-0.08124366 -1.1121564], 10.0f0)
    `,23),p=[t];function l(e,k,r,d,E,g){return a(),i("div",null,p)}const c=s(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.lean.js b/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.lean.js new file mode 100644 index 000000000..86aa9d0d1 --- /dev/null +++ b/v0.5.30/assets/manual_dispatch_custom_input.md.Ln2h9dji.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const o=JSON.parse('{"title":"Dispatching on Custom Input Types","description":"","frontmatter":{},"headers":[],"relativePath":"manual/dispatch_custom_input.md","filePath":"manual/dispatch_custom_input.md","lastUpdated":null}'),h={name:"manual/dispatch_custom_input.md"},t=n("",23),p=[t];function l(e,k,r,d,E,g){return a(),i("div",null,p)}const c=s(h,[["render",l]]);export{o as __pageData,c as default}; diff --git a/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.js b/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.js new file mode 100644 index 000000000..2337ec082 --- /dev/null +++ b/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.js @@ -0,0 +1,59 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const F=JSON.parse('{"title":"Freezing Model Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"manual/freezing_model_parameters.md","filePath":"manual/freezing_model_parameters.md","lastUpdated":null}'),e={name:"manual/freezing_model_parameters.md"},h=n(`

    Freezing Model Parameters

    Warning

    API for freezing parameters should be considered experimental at this point.

    In this manual entry, we will go over how to freeze certain parameters in a model.

    Freezing Layers of a Particular Kind

    To freeze a particular kind of layer, let's say Dense in the following example. We can use Lux.Experimental.@layer_map and freeze layers if they are of type Dense.

    julia
    using Lux, Random
    +
    +rng = Random.default_rng()
    +Random.seed!(rng, 0)
    +
    +model = Chain(Dense(3, 4), Chain(Dense(4, 4), Dropout(0.5f0), BatchNorm(4)),
    +    Dense(4, 1); disable_optimizations=true)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +x = randn(rng, Float32, 3, 2)
    +
    +model(x, ps, st)
    +
    +function freeze_dense(d::Lux.Dense, ps, st, ::String)
    +    return Lux.freeze(d, ps, st, (:weight, :bias))
    +end
    +freeze_dense(l, ps, st, name) = (l, ps, st)
    +
    +model_frozen, ps_frozen, st_frozen = Lux.Experimental.@layer_map freeze_dense model ps st
    +
    +model_frozen(x, ps_frozen, st_frozen)
    (Float32[-0.53158027 0.53158027], (layer_1 = (frozen_params = (weight = Float32[-0.026350189 -0.5554656 -0.35653266; -0.17461072 0.6705545 0.29924855; -0.8935247 -0.42453378 -0.3020351; -0.7988979 -0.7666331 -0.7104237], bias = Float32[0.0; 0.0; 0.0; 0.0;;]), states = NamedTuple()), layer_2 = (layer_1 = (frozen_params = (weight = Float32[-0.47289538 -0.680748 0.1764085 0.34383082; 0.42747158 -0.13819042 -0.109261915 -0.6143286; -0.35790488 -0.20881107 0.70390546 0.48137343; 0.82561636 0.38187847 0.05779423 -0.35181466], bias = Float32[0.0; 0.0; 0.0; 0.0;;]), states = NamedTuple()), layer_2 = (rng = Random.Xoshiro(0x7c071df294e77583, 0xd36a58e0d4ae463e, 0x84df7ccd14e8a7b8, 0x727006748bb9e892, 0x22a21880af5dc689), training = Val{true}()), layer_3 = (running_mean = Float32[0.0, 0.021013658, -0.057823665, 0.0], running_var = Float32[0.9, 0.9088315, 0.9668715, 0.9], training = Val{true}())), layer_3 = (frozen_params = (weight = Float32[0.3981135 0.45468387 -0.07694905 0.8353388], bias = Float32[0.0;;]), states = NamedTuple())))

    Freezing by Layer Name

    When the function in layer_map is called, the 4th argument is the name of the layer. For example, if you want to freeze the 1st layer inside the inner Chain. The name for this would be <model>.layer_2.layer_1.

    julia
    
    +function freeze_by_name(d, ps, st, name::String)
    +    if name == "model.layer_2.layer_1"
    +        return Lux.Experimental.freeze(d, ps, st, (:weight, :bias))
    +    else
    +        return d, ps, st
    +    end
    +end
    julia
    
    +function freeze_dense(d::Dense, ps, st, ::String)
    +    return Lux.Experimental.freeze(d, ps, st, (:weight, :bias))
    +end
    +freeze_dense(l, ps, st, _) = (l, ps, st)

    Freezing Part of the Parameters

    Instead of freezing all the parameters, we can simply specify (:weight,) to freeze only the weight parameter while training the bias parameter.

    julia
    
    +function freeze_by_name(d, ps, st, name::String)
    +    if name == "model.layer_2.layer_1"
    +        return Lux.freeze(d, ps, st, (:weight,))
    +    else
    +        return d, ps, st
    +    end
    +end
    julia
    
    +function freeze_by_name(d, ps, st, name::String)
    +    if name == "model.layer_2.layer_1"
    +        return Lux.freeze(d, ps, st, (:weight, :bias))
    +    else
    +        return d, ps, st
    +    end
    +end

    Freezing Part of a Chain

    Starting v0.4.22, we can directly index into a Chain. So freezing a part of a Chain, is extremely easy.

    julia
    using Lux, Random
    +
    +rng = Random.default_rng()
    +Random.seed!(rng, 0)
    +
    +model = Chain(Dense(3, 4), Dense(4, 4), Dropout(0.5f0), BatchNorm(4), Dense(4, 1))
    +
    +model_frozen = Chain(model[1:2], Lux.freeze(model[3:4]), model[5])
    +ps, st = Lux.setup(rng, model_frozen)
    +
    +x = randn(rng, Float32, 3, 2)
    +
    +model_frozen(x, ps, st)
    (Float32[-0.53158027 0.53158027], (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (frozen_params = (layer_3 = NamedTuple(), layer_4 = (scale = Float32[1.0, 1.0, 1.0, 1.0], bias = Float32[0.0, 0.0, 0.0, 0.0])), states = (layer_3 = (rng = Random.Xoshiro(0x7c071df294e77583, 0xd36a58e0d4ae463e, 0x84df7ccd14e8a7b8, 0x727006748bb9e892, 0x22a21880af5dc689), training = Val{true}()), layer_4 = (running_mean = Float32[0.0, 0.021013658, -0.057823665, 0.0], running_var = Float32[0.9, 0.9088315, 0.9668715, 0.9], training = Val{true}()))), layer_4 = NamedTuple()))
    `,17),l=[h];function t(p,k,r,d,E,g){return a(),i("div",null,l)}const o=s(e,[["render",t]]);export{F as __pageData,o as default}; diff --git a/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.lean.js b/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.lean.js new file mode 100644 index 000000000..1d3d43572 --- /dev/null +++ b/v0.5.30/assets/manual_freezing_model_parameters.md.B_lUuLCd.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const F=JSON.parse('{"title":"Freezing Model Parameters","description":"","frontmatter":{},"headers":[],"relativePath":"manual/freezing_model_parameters.md","filePath":"manual/freezing_model_parameters.md","lastUpdated":null}'),e={name:"manual/freezing_model_parameters.md"},h=n("",17),l=[h];function t(p,k,r,d,E,g){return a(),i("div",null,l)}const o=s(e,[["render",t]]);export{F as __pageData,o as default}; diff --git a/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.js b/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.js new file mode 100644 index 000000000..6409e6244 --- /dev/null +++ b/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.js @@ -0,0 +1,26 @@ +import{_ as s,c as a,o as i,a4 as e}from"./chunks/framework.BfjuC5t1.js";const u=JSON.parse('{"title":"GPU Management","description":"","frontmatter":{},"headers":[],"relativePath":"manual/gpu_management.md","filePath":"manual/gpu_management.md","lastUpdated":null}'),n={name:"manual/gpu_management.md"},t=e(`

    GPU Management

    Info

    Starting from v0.5, Lux has transitioned to a new GPU management system. The old system using cpu and gpu functions is still in place but will be removed in v0.6. Using the old functions might lead to performance regressions if used inside performance critical code.

    Lux.jl can handle multiple GPU backends. Currently, the following backends are supported:

    julia
    using Lux, LuxCUDA, LuxAMDGPU  # Important to load trigger packages
    +
    +supported_gpu_backends()
    ("CUDA", "AMDGPU", "Metal")

    Metal Support

    Support for Metal GPUs should be considered extremely experimental at this point.

    Automatic Backend Management (Recommended Approach)

    Automatic Backend Management is done by two simple functions: cpu_device and gpu_device.

    • cpu_device: This is a simple function and just returns a LuxCPUDevice object.
    julia
    cdev = cpu_device()
    (::LuxCPUDevice) (generic function with 5 methods)
    julia
    x_cpu = randn(Float32, 3, 2)
    3×2 Matrix{Float32}:
    +  0.433884   0.229779
    + -0.459193  -1.95972
    + -0.541064  -1.40102
    • gpu_device: This function performs automatic GPU device selection and returns an object.
      1. If no GPU is available, it returns a LuxCPUDevice object.

      2. If a LocalPreferences file is present, then the backend specified in the file is used. To set a backend, use Lux.gpu_backend!(<backend_name>). (a) If the trigger package corresponding to the device is not loaded, then a warning is displayed. (b) If no LocalPreferences file is present, then the first working GPU with loaded trigger package is used.

    julia
    gdev = gpu_device()
    +
    +x_gpu = x_cpu |> gdev
    3×2 CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
    +  0.433884   0.229779
    + -0.459193  -1.95972
    + -0.541064  -1.40102
    julia
    (x_gpu |> cdev)  x_cpu
    true

    Manual Backend Management

    Automatic Device Selection can be circumvented by directly using LuxCPUDevice and AbstractLuxGPUDevice objects.

    julia
    cdev = LuxCPUDevice()
    +
    +x_cpu = randn(Float32, 3, 2)
    +
    +if LuxCUDA.functional()
    +    gdev = LuxCUDADevice()
    +    x_gpu = x_cpu |> gdev
    +elseif LuxAMDGPU.functional()
    +    gdev = LuxAMDGPUDevice()
    +    x_gpu = x_cpu |> gdev
    +else
    +    @info "No GPU is available. Using CPU."
    +    x_gpu = x_cpu
    +end
    +
    +(x_gpu |> cdev)  x_cpu
    true
    `,22),p=[t];function l(h,d,c,k,o,g){return i(),a("div",null,p)}const E=s(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.lean.js b/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.lean.js new file mode 100644 index 000000000..503b4e41d --- /dev/null +++ b/v0.5.30/assets/manual_gpu_management.md.DUY-sneY.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a4 as e}from"./chunks/framework.BfjuC5t1.js";const u=JSON.parse('{"title":"GPU Management","description":"","frontmatter":{},"headers":[],"relativePath":"manual/gpu_management.md","filePath":"manual/gpu_management.md","lastUpdated":null}'),n={name:"manual/gpu_management.md"},t=e("",22),p=[t];function l(h,d,c,k,o,g){return i(),a("div",null,p)}const E=s(n,[["render",l]]);export{u as __pageData,E as default}; diff --git a/v0.5.30/assets/manual_interface.md.ypfbSQ9y.js b/v0.5.30/assets/manual_interface.md.ypfbSQ9y.js new file mode 100644 index 000000000..fd31ee847 --- /dev/null +++ b/v0.5.30/assets/manual_interface.md.ypfbSQ9y.js @@ -0,0 +1,92 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Lux Interface","description":"","frontmatter":{},"headers":[],"relativePath":"manual/interface.md","filePath":"manual/interface.md","lastUpdated":null}'),t={name:"manual/interface.md"},e=n(`

    Lux Interface

    Tip

    If you just want to define compatibility with Lux without actually using any of the other functionality provided by Lux (like layers), it is recommended to depend on LuxCore.jl instead of Lux.jl. LuxCore.jl is a significantly lighter dependency.

    First let's set the expectations straight.

    • Do you have to follow the interface? No.

    • Should you follow it? Probably yes.

    • Why? It provides the ability for frameworks built on top of Lux to be cross compatible. Additionally, any new functionality built into Lux, will just work for your framework.

    Warning

    The interface is optional for frameworks being developed independent of Lux. All functionality in the core library (and officially supported ones) must adhere to the interface

    Layer Interface

    Singular Layer

    If the layer doesn't contain any other Lux layer, then it is a Singular Layer. This means it should optionally subtype Lux.AbstractExplicitLayer but mandatorily define all the necessary functions mentioned in the docstrings. Consider a simplified version of Dense called Linear.

    First, setup the architectural details for this layer. Note, that the architecture doesn't contain any mutable structure like arrays. When in doubt, remember, once constructed a model architecture cannot change.

    Tip

    For people coming from Flux.jl background this might be weird. We recommend checking out the Flux to Lux migration guide first before proceeding.

    julia
    using Lux, Random
    +
    +struct Linear{F1, F2} <: Lux.AbstractExplicitLayer
    +    in_dims::Int
    +    out_dims::Int
    +    init_weight::F1
    +    init_bias::F2
    +end
    +
    +function Linear(in_dims::Int, out_dims::Int; init_weight=Lux.glorot_uniform,
    +    init_bias=Lux.zeros32)
    +    return Linear{typeof(init_weight), typeof(init_bias)}(in_dims, out_dims, init_weight,
    +        init_bias)
    +end
    +
    +l = Linear(2, 4)
    Linear()

    Next, we need to implement functions which return the parameters and states for the layer. In case of Linear, the parameters are weight and bias while the states are empty. States become important when defining layers like BatchNorm, WeightNorm, etc. The recommended data structure for returning parameters is a NamedTuple, though anything satisfying the Parameter Interface is valid.

    julia
    function Lux.initialparameters(rng::AbstractRNG, l::Linear)
    +    return (weight=l.init_weight(rng, l.out_dims, l.in_dims),
    +            bias=l.init_bias(rng, l.out_dims, 1))
    +end
    +
    +Lux.initialstates(::AbstractRNG, ::Linear) = NamedTuple()

    You could also implement Lux.parameterlength and Lux.statelength to prevent wasteful reconstruction of the parameters and states.

    julia
    # This works
    +println("Parameter Length: ", Lux.parameterlength(l), "; State Length: ",
    +    Lux.statelength(l))
    +
    +# But still recommened to define these
    +Lux.parameterlength(l::Linear) = l.out_dims * l.in_dims + l.out_dims
    +
    +Lux.statelength(::Linear) = 0
    Parameter Length: 12; State Length: 0

    Tip

    You might notice that we don't pass in a PRNG for these functions. If your parameter length and/or state length depend on a random number generator, you should think really hard about what you are trying to do and why.

    Now, we need to define how the layer works. For this you make your layer a function with exactly 3 arguments – x the input, ps the parameters, and st the states. This function must return two things – y the output, and st_new the updated state.

    julia
    function (l::Linear)(x::AbstractMatrix, ps, st::NamedTuple)
    +    y = ps.weight * x .+ ps.bias
    +    return y, st
    +end

    Finally, let's run this layer. If you have made this far into the documentation, we don't feel you need a refresher on that.

    julia
    rng = Random.default_rng()
    +Random.seed!(rng, 0)
    +
    +ps, st = Lux.setup(rng, l)
    +
    +println("Parameter Length: ", Lux.parameterlength(l), "; State Length: ",
    +    Lux.statelength(l))
    +
    +x = randn(rng, Float32, 2, 1)
    +
    +Lux.apply(l, x, ps, st) # or \`l(x, ps, st)\`
    (Float32[-0.15276335; 0.45325348; 1.0207279; 0.78226817;;], NamedTuple())

    Container Layer

    If your layer comprises of other Lux layers, then it is a Container Layer. Note that you could treat it as a Singular Layer, and it is still fine. FWIW, if you cannot subtype your layer with Lux.AbstractExplicitContainerLayer then you should go down the Singular Layer route. But subtyping allows us to bypass some of these common definitions. Let us now define a layer, which is basically a composition of two linear layers.

    julia
    struct ComposedLinear{L1, L2} <: Lux.AbstractExplicitContainerLayer{(:linear_1, :linear_2)}
    +    linear_1::L1
    +    linear_2::L2
    +end
    +
    +function (cl::ComposedLinear)(x::AbstractMatrix, ps, st::NamedTuple)
    +    # To access the parameters and states for \`linear_1\` we do \`ps.linear_1\` and
    +    # \`st.linear_1\`. Similarly for \`linear_2\`
    +    y, st_l1 = cl.linear_1(x, ps.linear_1, st.linear_1)
    +    y, st_l2 = cl.linear_2(y, ps.linear_2, st.linear_2)
    +    # Finally, we need to return the new state which has the exact structure as \`st\`
    +    return y, (linear_1 = st_l1, linear_2 = st_l2)
    +end

    Here, you will notice we have passed (:linear_1, :linear_2) to the supertype. It essentially informs the type that, <obj>.linear_1 and <obj>.linear_2 are Lux layers and we need to construct parameters and states for those. Let's construct these and see:

    julia
    model = ComposedLinear(Linear(2, 4), Linear(4, 2))
    +display(model)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +println("Parameters: ", ps)
    +println("States: ", st)
    +
    +println("Parameter Length: ", Lux.parameterlength(model), "; State Length: ",
    +    Lux.statelength(model))
    +
    +x = randn(rng, Float32, 2, 1)
    +
    +Lux.apply(model, x, ps, st) # or \`model(x, ps, st)\`
    (Float32[1.3410565; 0.78000563;;], (linear_1 = NamedTuple(), linear_2 = NamedTuple()))

    Parameter Interface

    We accept any parameter type as long as we can fetch the parameters using getproperty(obj, :parameter_name). This allows us to simultaneously support NamedTuples and ComponentArrays. Let us go through a concrete example of what it means. Consider Dense which expects two parameters named weight and bias.

    Info

    If you are defining your own parameter type, it is your responsibility to make sure that it works with the AutoDiff System you are using.

    julia
    using Lux, Random
    +
    +d = Dense(2, 3)
    +rng = Random.default_rng()
    +Random.seed!(rng, 0)
    +
    +ps_default, st = Lux.setup(rng, d)
    +
    +x = randn(rng, Float32, 2, 1)
    +
    +println("Result with \`NamedTuple\` parameters: ", first(d(x, ps_default, st)))
    Result with \`NamedTuple\` parameters: Float32[1.135916; 0.7668784; -1.0876652;;]

    Let, us define a custom parameter type with fields myweight and mybias but if we try to access weight we get back myweight, similar for bias.

    Warning

    This is for demonstrative purposes, don't try this at home!

    julia
    struct DenseLayerParameters{W, B}
    +    myweight::W
    +    mybias::B
    +end
    +
    +function Base.getproperty(ps::DenseLayerParameters, x::Symbol)
    +    if x == :weight
    +        return getfield(ps, :myweight)
    +    elseif x == :bias
    +        return getfield(ps, :mybias)
    +    end
    +    return getfield(ps, x)
    +end
    +
    +ps = DenseLayerParameters(ps_default.weight, ps_default.bias)
    +
    +println("Result with \`DenseLayerParameters\` parameters: ", first(d(x, ps, st)))
    Result with \`DenseLayerParameters\` parameters: Float32[1.135916; 0.7668784; -1.0876652;;]

    The takeaway from this shouldn't be – lets define weird parameter types. Simply because you can do weird things like this doesn't mean you should, since it only leads to bugs.

    Instead this shows the flexibility you have for how your parameters can be structured.

    State Interface

    States are always type constrained to be NamedTuple. The structure of the input state must match that of the output state, i.e. keys(st_in) == keys(st_out). This doesn't imply that types of the input and output state match. To generate efficient code, we often do dispatch on the state, for example, Dropout, BatchNorm, etc.

    `,42),h=[e];function l(p,k,r,d,E,g){return a(),i("div",null,h)}const c=s(t,[["render",l]]);export{y as __pageData,c as default}; diff --git a/v0.5.30/assets/manual_interface.md.ypfbSQ9y.lean.js b/v0.5.30/assets/manual_interface.md.ypfbSQ9y.lean.js new file mode 100644 index 000000000..05f4fe60b --- /dev/null +++ b/v0.5.30/assets/manual_interface.md.ypfbSQ9y.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Lux Interface","description":"","frontmatter":{},"headers":[],"relativePath":"manual/interface.md","filePath":"manual/interface.md","lastUpdated":null}'),t={name:"manual/interface.md"},e=n("",42),h=[e];function l(p,k,r,d,E,g){return a(),i("div",null,h)}const c=s(t,[["render",l]]);export{y as __pageData,c as default}; diff --git a/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.js b/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.js new file mode 100644 index 000000000..b1df676a6 --- /dev/null +++ b/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.js @@ -0,0 +1,75 @@ +import{_ as l,c as i,m as s,a,a4 as t,o as n}from"./chunks/framework.BfjuC5t1.js";const w=JSON.parse('{"title":"Migrating from Flux to Lux","description":"","frontmatter":{},"headers":[],"relativePath":"manual/migrate_from_flux.md","filePath":"manual/migrate_from_flux.md","lastUpdated":null}'),e={name:"manual/migrate_from_flux.md"},h=t(`

    Migrating from Flux to Lux

    For the core library layers like Dense, Conv, etc. we have intentionally kept the API very similar to Flux. In most cases, replacing using Flux with using Lux should be enough to get you started. We cover the additional changes that you will have to make in the following example.

    julia
    using Lux, Random, NNlib, Zygote
    +
    +model = Chain(Dense(2 => 4), BatchNorm(4, relu), Dense(4 => 2))
    +rng = Random.default_rng()
    +x = randn(rng, Float32, 2, 4)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +model(x, ps, st)
    +
    +gradient(ps -> sum(first(model(x, ps, st))), ps)
    julia
    using Flux, Random, NNlib, Zygote
    +
    +model = Chain(Dense(2 => 4), BatchNorm(4, relu), Dense(4 => 2))
    +rng = Random.default_rng()
    +x = randn(rng, Float32, 2, 4)
    +
    +
    +
    +model(x)
    +
    +gradient(model -> sum(model(x)), model)

    Implementing Custom Layers

    Flux and Lux operate under extremely different design philosophies regarding how layers should be implemented. A summary of the differences would be:

    • Flux stores everything in a single struct and relies on Functors.@functor and Flux.trainable to distinguish between trainable and non-trainable parameters.

    • Lux relies on the user to define Lux.initialparameters and Lux.initialstates to distinguish between trainable parameters (called "parameters") and non-trainable parameters (called "states"). Additionally, Lux layers define the model architecture, hence device transfer utilities like gpu_device, cpu_device, etc. cannot be applied on Lux layers, instead they need to be applied on the parameters and states.

    `,6),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.24ex",height:"1.645ex",role:"img",focusable:"false",viewBox:"0 -716 4525.9 727","aria-hidden":"true"},r=t('',1),d=[r],E=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"A"),s("mo",null,"×"),s("mi",null,"B"),s("mo",null,"×"),s("mi",null,"x")])],-1),o={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},g={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"1.697ex",height:"1.62ex",role:"img",focusable:"false",viewBox:"0 -716 750 716","aria-hidden":"true"},c=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D434",d:"M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z",style:{"stroke-width":"3"}})])])],-1),y=[c],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"A")])],-1),F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 759 683","aria-hidden":"true"},C=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D435",d:"M231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229Z",style:{"stroke-width":"3"}})])])],-1),x=[C],Q=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"B")])],-1),A=t(`
    julia
    using Lux, Random, NNlib, Zygote
    +
    +struct LuxLinear <: Lux.AbstractExplicitLayer
    +    init_A
    +    init_B
    +end
    +
    +function LuxLinear(A::AbstractArray, B::AbstractArray)
    +    # Storing Arrays or any mutable structure inside a Lux Layer is not recommended
    +    # instead we will convert this to a function to perform lazy initialization
    +    return LuxLinear(() -> copy(A), () -> copy(B))
    +end
    +
    +# \`B\` is a parameter
    +Lux.initialparameters(::AbstractRNG, layer::LuxLinear) = (B=layer.init_B(),)
    +
    +# \`A\` is a state
    +Lux.initialstates(::AbstractRNG, layer::LuxLinear) = (A=layer.init_A(),)
    +
    +(l::LuxLinear)(x, ps, st) = st.A * ps.B * x, st
    julia
    using Flux, Random, NNlib, Zygote, Optimisers
    +
    +struct FluxLinear
    +    A
    +    B
    +end
    +
    +
    +
    +
    +
    +
    +
    +# \`A\` is not trainable
    +Optimisers.trainable(f::FluxLinear) = (B=f.B,)
    +
    +# Needed so that both \`A\` and \`B\` can be transfered between devices
    +Flux.@functor FluxLinear
    +
    +(l::FluxLinear)(x) = l.A * l.B * x

    Now let us run the model.

    julia
    rng = Random.default_rng()
    +model = LuxLinear(randn(rng, 2, 4), randn(rng, 4, 2))
    +x = randn(rng, 2, 1)
    +
    +ps, st = Lux.setup(rng, model)
    +
    +model(x, ps, st)
    +
    +gradient(ps -> sum(first(model(x, ps, st))), ps)
    julia
    rng = Random.default_rng()
    +model = FluxLinear(randn(rng, 2, 4), randn(rng, 4, 2))
    +x = randn(rng, 2, 1)
    +
    +
    +
    +model(x)
    +
    +gradient(model -> sum(model(x)), model)

    To reiterate some important points:

    • Don't store mutables like Arrays inside a Lux Layer.

    • Parameters and States should be constructured inside the respective initial* functions.

    Certain Important Implementation Details

    Training/Inference Mode

    Flux supports a mode called :auto which automatically decides if the user is training the model or running inference. This is the default mode for Flux.BatchNorm, Flux.GroupNorm, Flux.Dropout, etc. Lux doesn't support this mode (specifically to keep code simple and do exactly what the user wants), hence our default mode is training. This can be changed using Lux.testmode.

    Can we still use Flux Layers?

    If you have Flux loaded in your code, you can use the function FromFluxAdaptor to automatically convert your model to Lux. Note that in case a native Lux counterpart isn't available, we fallback to using Optimisers.destructure.

    `,10);function b(v,D,B,L,T,f){return n(),i("div",null,[h,s("p",null,[a("Let's work through a concrete example to demonstrate this. We will implement a very simple layer that computes "),s("mjx-container",p,[(n(),i("svg",k,d)),E]),a(" where "),s("mjx-container",o,[(n(),i("svg",g,y)),u]),a(" is not trainable and "),s("mjx-container",F,[(n(),i("svg",m,x)),Q]),a(" is trainable.")]),A])}const M=l(e,[["render",b]]);export{w as __pageData,M as default}; diff --git a/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.lean.js b/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.lean.js new file mode 100644 index 000000000..6bc5d396c --- /dev/null +++ b/v0.5.30/assets/manual_migrate_from_flux.md.CGt97TpW.lean.js @@ -0,0 +1 @@ +import{_ as l,c as i,m as s,a,a4 as t,o as n}from"./chunks/framework.BfjuC5t1.js";const w=JSON.parse('{"title":"Migrating from Flux to Lux","description":"","frontmatter":{},"headers":[],"relativePath":"manual/migrate_from_flux.md","filePath":"manual/migrate_from_flux.md","lastUpdated":null}'),e={name:"manual/migrate_from_flux.md"},h=t("",6),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.24ex",height:"1.645ex",role:"img",focusable:"false",viewBox:"0 -716 4525.9 727","aria-hidden":"true"},r=t("",1),d=[r],E=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"A"),s("mo",null,"×"),s("mi",null,"B"),s("mo",null,"×"),s("mi",null,"x")])],-1),o={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},g={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"1.697ex",height:"1.62ex",role:"img",focusable:"false",viewBox:"0 -716 750 716","aria-hidden":"true"},c=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D434",d:"M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z",style:{"stroke-width":"3"}})])])],-1),y=[c],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"A")])],-1),F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 759 683","aria-hidden":"true"},C=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D435",d:"M231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229Z",style:{"stroke-width":"3"}})])])],-1),x=[C],Q=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"B")])],-1),A=t("",10);function b(v,D,B,L,T,f){return n(),i("div",null,[h,s("p",null,[a("Let's work through a concrete example to demonstrate this. We will implement a very simple layer that computes "),s("mjx-container",p,[(n(),i("svg",k,d)),E]),a(" where "),s("mjx-container",o,[(n(),i("svg",g,y)),u]),a(" is not trainable and "),s("mjx-container",F,[(n(),i("svg",m,x)),Q]),a(" is trainable.")]),A])}const M=l(e,[["render",b]]);export{w as __pageData,M as default}; diff --git a/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.js b/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.js new file mode 100644 index 000000000..1f9c5aee2 --- /dev/null +++ b/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.js @@ -0,0 +1,30 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const o=JSON.parse('{"title":"Initializing Weights","description":"","frontmatter":{},"headers":[],"relativePath":"manual/weight_initializers.md","filePath":"manual/weight_initializers.md","lastUpdated":null}'),t={name:"manual/weight_initializers.md"},e=n(`

    Initializing Weights

    WeightInitializers.jl provides common weight initialization schemes for deep learning models.

    julia
    using WeightInitializers, Random
    +
    +# Fixing rng
    +rng = Random.MersenneTwister(42)
    Random.MersenneTwister(42)
    julia
    # Explicit rng call
    +weights = kaiming_normal(rng, 2, 5)
    2×5 Matrix{Float32}:
    + -0.351662   0.0171745   1.12442   -0.296372   -1.67094
    + -0.281053  -0.18941    -0.724099   0.0987538   0.634549
    julia
    # Default rng call
    +weights = kaiming_normal(2, 5)
    2×5 Matrix{Float32}:
    + -0.227513  -0.265372   0.265788  1.29955  -0.192836
    +  0.687611   0.454679  -0.433656  0.20548   0.292002
    julia
    # Passing kwargs (if needed) with explicit rng call
    +weights_cl = kaiming_normal(rng; gain=1.0)
    +weights = weights_cl(2, 5)
    2×5 Matrix{Float32}:
    + 0.484056   0.231723   0.164379   0.306147   0.18365
    + 0.0836414  0.666965  -0.396323  -0.711329  -0.382971
    julia
    # Passing kwargs (if needed) with default rng call
    +weights_cl = kaiming_normal(; gain=1.0)
    +weights = weights_cl(2, 5)
    2×5 Matrix{Float32}:
    + -0.160876  -0.187646   0.18794   0.918918  -0.136356
    +  0.486214   0.321506  -0.306641  0.145296   0.206476

    To generate weights directly on GPU, pass in a CUDA.RNG. (Note that this is currently implemented only for NVIDIA GPUs)

    julia
    using LuxCUDA
    +
    +weights = kaiming_normal(CUDA.default_rng(), 2, 5)
    2×5 CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
    + -0.152879  0.151805  0.115322  0.0608437  -0.357408
    + -0.671014  0.283396  0.260171  0.425698   -0.701588

    You can also generate Complex Numbers:

    julia
    weights = kaiming_normal(CUDA.default_rng(), ComplexF32, 2, 5)
    2×5 CuArray{ComplexF32, 2, CUDA.Mem.DeviceBuffer}:
    + -0.239414-0.306575im  0.0877513-0.485896im  …  -0.328706-0.340686im
    + 0.0245199-0.04416im    0.252702-0.161867im       0.41303-0.533871im

    Quick examples

    The package is meant to be working with deep learning libraries such as (F)Lux. All the methods take as input the chosen rng type and the dimension for the array.

    julia
    weights = init(rng, dims...)

    The rng is optional, if not specified a default one will be used.

    julia
    weights = init(dims...)

    If there is the need to use keyword arguments the methods can be called with just the rng (optionally) and the keywords to get in return a function behaving like the two examples above.

    julia
    weights_init = init(rng; kwargs...)
    +weights = weights_init(rng, dims...)
    +
    +# Or
    +
    +weights_init = init(; kwargs...)
    +weights = weights_init(dims...)
    `,25),l=[e];function p(h,k,d,g,r,c){return a(),i("div",null,l)}const y=s(t,[["render",p]]);export{o as __pageData,y as default}; diff --git a/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.lean.js b/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.lean.js new file mode 100644 index 000000000..b4b45ccbf --- /dev/null +++ b/v0.5.30/assets/manual_weight_initializers.md._StOXcgy.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const o=JSON.parse('{"title":"Initializing Weights","description":"","frontmatter":{},"headers":[],"relativePath":"manual/weight_initializers.md","filePath":"manual/weight_initializers.md","lastUpdated":null}'),t={name:"manual/weight_initializers.md"},e=n("",25),l=[e];function p(h,k,d,g,r,c){return a(),i("div",null,l)}const y=s(t,[["render",p]]);export{o as __pageData,y as default}; diff --git a/v0.5.30/assets/results.Dao8ZugC.gif b/v0.5.30/assets/results.Dao8ZugC.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9d9160638c253adbedf10788e69f2318bf4206f GIT binary patch literal 611004 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

    |lb~ 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

    O=%$1p-v*A&i4epS zm?*5EGV!?k<}5Ud)(`=Z8X*2di%MBZhFX_=*q>tZDph$0fxi!@hg$(BRwo`@88Vkb;BB9RSjw-{#{x2Vq>52}TMUt<< zUY^*@^~OR0Jok*gYtv)iaeHwU{3!g6jIp{?c{m758-yyJ_(5YV6F5^-6XO1IPs$(S zAtn7u3K=a~_jfiBzatDaKjK}lX+=!?*G?yHSdpXmYp_|L2rkKjhF{k1*BrS9G1={V zZ81j9zIUw2a9AJXHMtt4njvi}U+NMD>FyoPc~0r;mrr%4?b1#iT)b9^$qcO7=+eN9 z#sV}+OO}C3&OklB^_&!4WEH!UC!N$9X6xGXGyZ^s`w58jk?>VL#2=&*`QSW#bFIa; z)_Yj~4{YZPwfe`A$FE)!Yi_)18%6HFwEMHc9ei&LccA#-&DYls< z7CWMc#~3Je;@PbJ=3^K8^$TB??=2c7zIKkd-^h+jHBkj{Foq?^b5FV6G1VLpl5~$> z0%ku9@j#HU?yc8-nVfYVe;jkEsI$w%J9phkY2Evl9P@d!xpae ziD~x}wPLT+v!sFR^WG3Myd;|ShT`b2HB$uH?vwQ3eD9MLuH-UE(QA^F_6PcJEbgiH zKL903poRI!87Ae`kZ(F6pE%C3*E|OsI1s|0J90C_b`rKJq*H}ZLARwF@|$C7k&M)S zr|Z9>e;g}FyK(p}Jl=XG8cTW-8S-T9*VUN1^V1~uqywHR{(s^-Ilt$x12UtE^%j3p z;S2r+d}*4D33f*6z3+{wvgI$|Z#9S#U70y)uReqMHvg@E`-4qQYFl)rzpb_S@BUk{ zx8h&79S_+M+EHOzgqA<>UtLQe{E049>Uzg`!Ot4D>=Y=hG%eo_3J5` zHY`yg?!R`8vR+6L85~uj06W_DVpwt_CCUkG&WW-t>1Sg0@MJ8y65iqIRi(rCn~$Fe zI+~5v6prXcMeqPMZBWh$8?Ys>hcmbsDG33E6OPtHBWaW#sU6}G=Uzk$4AvDl8IE63 zMC^szRKDl&&ta?{h5WK)J@JY)DUP+YWBb+5X1xW>v;;;Y8G^vdaHNnxN)WS($!yjuslo9yZfv=zfg4+Gc;Iw>Q{4*TUfm1pSV4Wx0D zgL2Qa(pa(1Voi4I@)^ll{f9pIAn-6%_K|9Kc|U7;TtT@d(8M9Bp@hCkBIj086b8wF zQB8gp24WA_iR_?+4|C)Wmc(!MaA(jowBfN>dL{7knr?~E`EPJJHjUUQ-ji2hWyH86nzwUx47F<`hNtF&t&B#mr zRch4lL-F}Xy^c%ar53O@?Pd$M#|GA1DzXpG{x ze(LP!6mA*wKX?w6BtqCfJb|V`-s;^rO3S59ua?EJy64%)NhHj7Le_0F-=A84D5=(4 zj3lO2nojWO4AV200V}ZOeXg)`s**id)`~IK_sHywvvMA$T8$6*UpZ{Mhj&(YD_Xhf z3uj~b1V3Q!!iE;e-7yB`y^r&%!?V>VHD z5W>S;hGZ!N#{S@@TW1Y*jF~z2Z@;IDieqjze1cVn>@YqxAU@$ZdlFOhJTkS;@CvBsN3JJCR`{&QyIL=J z*ZqEEW6CQ~GodcCzA3GhCs^ptei7X*OFDZ?IuqCCEfZQ7EMsvT(<3BvD}kw@pY`^Y z>;i1PN?kqw$NHDu>{eq;g6dT*_Ke)iFD2_uopzHiZ$1j@jqh(YhS@i%?M3*G7pZ=+ zrx32IwL{c);19W4miJQSyPAYeTWv{ARUULM1PHpn6-}bmB+;4^Xw9*7iT$k3=~)d- ztd{Rt`+yC*am;Ow4fe^v<`%Ud@?}6MNbAiL<|wI}SwhS&g5+t7>ICSy+T%ZG6i|<= zkj#&#QtXvd>^4g_uXRO04}*{iEl8o;tpT@NKl{?9=klb^X_-&Z=RRP3702|wo_EU9 ze6Fi)9qB7ctrmnd6`NouV00Lw*mxNne;Z;IUoYFWt6sUj@YC5*DwSKRMx{6} z#nGjh%t{7c;{Y(;u_d$$f~u}Se6~&?yL#DY1wbE zCMl;Vm;d#Z@*=W)ozyxar%CPb!DuZ)-d9XOV2Xv*DdcH9IIn zNhPZczVo&N z&+_0Ak=`0iql%@qs{|%U^8F$}7UO`7z$=(I-~ zENQp+Mw=gB5_f6%XD28+02CG7(}u*Q{}*;`r=w=y&*+OQ8L za_^YA&}_JtWhSx}WdB!2NHBr>FR0!UEQ2$a&82$=o4Lz4sfVGKp&t2l&cP3+5$^}| zVOi*J692WPjtGnkM0A!`!J-npOg>l9?E-vORE->de{zGcF06$0y28IVkL z(E;cN&B{~Jnv)p#(!ozhSZjWOb}jXLHP|sEVAehba@g&_4R|bYXq<$RrDGL;;^MOKQGv4t*+yrT-4%iLxS$>8%esjIMxis7kArZzWmY%#w zFs#i%wO=#4w}|RVSgDPE8uSe$a~)JjcrQf;{;h1G$g`z^xnBpY9&oDc*Bakc7H&J=}e%;q}#3=Dma1$7;}UYlpj%wR=`FMpl>IQeXve-pD} zIUWGWlw8q+o8>R?!O#_bs#iru7ff<1GOq@Wna$wFHeT)-Oq* zRwCq7hc%0n;R4HAWW#n;8FDPMF4%OY;fq>tG0EYwKbJSX8oD?&+J^vZ#$)fK>Io&7y@XW0KcH3 zm%-3sH@5WOQq$=Gm}T$S5&%5?P?>m;_LI+_`yoA_9Bp`Y8V^C7IvYDYKQu`DR4Qbmnv@wruneRjI@Byc)sp5)KixN- zHK}{ip}&s=+0~)TIuAQAE3+76(K=@+%dNhMg^kO3tL!ETRHzeDNCHifjz7z%Ww39= z-}!H(S;GF1M&o)u1^d}76Z~-+F>-j%y)UkTou2GL%R|2VTRs{r{`;kc!A=b5GzV0Z zD9p=+jE-HG&`QCBPYa#~Lxv!KD=$9)S0l+jwI38fgbaairMEyb*njokA+f!r%`u|Y zr+R1lgsocNaoKhHp?HJP#~&{Y=AvE0vMl`?aj!lmF7= zfyJ*y5ST(sVH2_cAImo*r>w_{rQi!ocDf1oj(|`7-o}YJf)b-oUwZ-4oPVl#S8_^~ zo~r%-E#EfY)h3(;C@atLJmV*mg@30MgqIh0t=-;L230HP{5KJMK7W084#31szzk=J znzl2q$ojl1V$Bybe{wwutW>|*INxRRZRVS(;lb^8f3E+re6Jj0hSE4;ppyEsgj&O-IYb1$a5MFTB`w4X`mn-#C=O{!B{Fx`F}0nT}t148%4R%1n5 z?~lJRe;ZaV9uDK^y!=)V;BTV|^8x?Y^4*{8n6}dv+y7(xGUE`B2N3AjX%cy!NP50@ zJ3XUQmIp(F(3h5P1r=uLS)DZL=&!7uC?{MqzHpvQ&$k)u&&20hPu^leV&lljuY`p_ z&BHt!i00K!@H^wzVTB12_U9!sEPRI4R6GDb96Py2}R0Lxe ztw!C-A8ZvFUBuC(Bfb0k<8hZGDtSN0>FAa{M$}z{(mrprq1gp{LCax_?b;UT-IK~U z3#N5Cw)eoA+I`;`m$3I6r(BUk!v8G_Cli=MX;Y@qsq6oL|^CSR= zdrhg~(>tGj_^k}iID~uTy<2+rLC7G^O%b<`-v-5xjs0ZOX_EADl7dJ^dOeAfJ)~ih z-~lF??U(%amfD-9dVM0YjH>0z=h+wKh|Q zGv%G0od$F+NYJ{6(S8(1M8y5_Gdo{AKD)GhgJ87|LaK2>d_LcH#UWX=>+x)CSyTlz z?=Kil+WRjp-#^O>KBOS*=&1p_)rBM6_|Ty_8{g%$-HsQx<9;l@a7!n*jQZAhCG!Uk zwQPl(=LIF^n}F5$173efjyeW!f|99K{)@8VgP)PG@?{Oo%#N?IgW|eU_T7X z`DK46tZU)3QoI6_xlTMs5()j_C@1B05-t*AY6=767=0I~k^8fTYno!x(W@58*F44* zHffneGvcCY)$Vk_!WkZ@QdPMb`aEq4(~;B5_X5hMBsnC%{yAyOG_sdBaMn5yxh$ zDg>H{=0sQkr$dt$y+}Hn+B$d!f#d3E%Gj2G^blRq&DOm2Lk96AH-4y*wkDvZF(s?=BUCbNZ<2=jiqlxRnUXRhA= z6~{;`W&a3cMTs683KzpzO$iPh2Rk7z|Ipp5ao*@z3C&+H-U zPWzsAVpY)O&oNetKq> zC{5(D#Sq*(dNWI4ucBOOza=z__4=s}puoeCLNcrS1Bi3=p~%xgZ`~KL`0MAG68m(- z%GeNcK*I(4++L!%*WVJ}F#fatH{?OiOKIC5A6JC1edfC_)v2N--EFGCVAGqzI?-enWHmbhM|9Z)>Y8{h;Tr zF|+Cn(QwMfURgf3H4F|JqNK?as~coo&BAMM~CqC0MD& z%scB;mtOnOnIm<~m@a@YYSQ*XOIA~uPB%JT^;9sMo9_4f1^N~#P%9`h4gfooZhEvaq@W!6jAd1c0G&D! zg?ch*?_^8w#8b8QrO>tfS2iktZXruH64vva$Z@zuOEz=lOuHc)x zOxbZAz0ZFU96u!ap8}~LlJPma_hu&@XAZ6=JP|t?#IvO*-u+r2J|NN~ig#sfdsrjj zoms@mLM5BhgVF0pYb(_JzrZPWqd?Z6^V}Wx;!BZ_Wm$ary&xYSMd-&{ShqMSjylhT zmC=~+o{pOj92AP?{tp0;Kybeal8b>*{Nhpnbk(np=0QM*9b9M10-@oKyc7Lo`Nkm& zA_QSigyE$|NWm>=D~@0Ih7Hn=eCbUulZPWD+uV+N$3uPiD1zZNSkZ<%xY2mlRihrK zxA)`+0*X_J0dXre2zg>5>uLmDD5K|n^PNu_5wHHct$#iL*sySdq{H^O{}(r&?`v!r znjpYO|3xnZvyd)?!4pFy#x1I#e3UT%`}3ziW%j|?4Ij-8l#-rSw(l?Rt3N^mhhQ7O zO9+O`8wgAI2S^f#wD<$nc#2yP1NgH7`4d14%s`ruhhGq#{^^9Ax(aGg2b6mXXcz|# z46}JqkbE;KP~e0FOb91&DW7wSI;g-4OhFyoL57eA6Pp(>;G~792kt8e9{e(XV3uYP z2w6a!gJ?i*qB2$JmZx|G93;IX%)%qYhWv{ZrpXs`z!7G^LM_xT8)`v;K!s_D!GBml zf=G)nm_oRdgexpVJ3KFo?6DL080?*yzJuT*kcnh5eZqJ3u04JhCJ# zL{N~0^BagK+omYIgFh*_SG*}@oJMkdIey55GE1dIu)A_J!;(rQP(X!XBnUT*LMI^u zPk=;X2*=AA$9DY3X_E&o145Mm$O9WOB@>84WW#@0#DQqUM+8UMNJfLKNP7c^E)+fN zvq<3*MKnBxQd}uigeicFgduuG<+B5Jq;+x8}1Qe7EI=8G# z!8EKqgcNfcOlk7S76eIC6bN1@zN(b8zii95L`=&pq)ZGiFsRJSydRq^#GE9)IUq^L ziOjVm2+HhC)kG(Z6pF80P0Vb{76gTB%tnFON%e_LZ<);4;7r*3&F-1YO9ReA63Zo| zO?hO)IdCp+iUeX%OWq7j;+#$zD#|aU&O*A&g2>A?T&X!gHr?FEg6K``|13}Q6U4 z1kr&IQG&3-g20>2ND$s zDn(N}z0=`32B$PB^DCc2_)&rQgE;*MNgUIGU;}@|Q$<}=PddZd|3tuoumk}8hnyRT zQt*O;V1t=tR8H+wCDKzR3x#CBO@XikZu|#tRLfex)RO>%jr3GljaBaf)$MFTg4hOL z*rrCy$4a_|HJHc_lT~3IR>1iMyo|?b7zm5th3||ce1tndK*mInMPjX1Yh4slAc#;v z&R!6R!Dv>oFiEI@&n~OdYdu$VMG$|Ghinyy1(Tu6pUOQ4>ADRsR4#J|L~2&Oj(}o*_>F}ioHvh z4Fwk+3}zh*d_)dF@Qph4S*Lwkm;hRYQ_OcQzruLZumDr1AXj~*R;c}2rQkp+=xKV;gea{K2iH!+0Zqq-H5n^-W7~F_}%AKTQQhk3LfDMwcwRi-hnOHyY=2$fT+psjh!W78KzGY zUfJx`USQ-{q;+3ig5RK!-x&^K>a1a)1)rg9!p`;Ju=wBD?F~c~Vkjm~A_iLg-QDCg z+WvK5Vt`96P1|LQVAm(F6|F%d!2HI*=U5!m*Bw^wzl-&VtWKE{U zN0wS6c3IBF;syp_zwP2p-DFgz#d%m|R&Hfieq~s8<(38I!ia{lu;i^3y+KN4UIs;5 z_+?-YW?>#?VjkvUIE5u$5L7UXEQVaCa6jJ&)?S`wJ46O+zGiIBW^LZ)ZMKDATM$w> zhr(zC_U(c+SRJQW1h%yUWuRtvF2hbH+~UI6e-P)vhzDaBk1n7FuWO2G7)YVWJ>Um) zCI)T*Xq4E@jBe=++-Qmg3IL zAPji;2O(VpmPY#7)@P~ySjC0@zTo?<@OAV-~hiCj@w*Kq3j^|kp1zqq5kRFV0;D>o&yRa~Z zf8aip&V&~cXuz)QU+ZL{jR;s!?81-?J{XHi;0KU^ig5_9g0yVZhPg-1>`-V0gcBBv zSZY=ni#Xsj+A4=z>|)|gZQe#QKc44^AO(c$>U;hNX&{SshMK2f25j(+a_Md8t~W6T z?obeJe|QJN5Sf4QEwR9af2arK|KMxMD$?jKZ%q^9p`EUEAdGJih>;eHJP-)Tz6MwD zjZ-#n{Pt}k?&wgE2Y;A{!l)Z+7>h2@hJPprAOi}x02NT;Ft8$gK#p$6Z5Y;ZDA%q7&T1k6fD7n>ja^&-;D8Yz z3&(!!1gZwK_KgCKax;f3`~76``6n1Cj1&l(9$;Tb5QvF}igb|dNV)Gb-}7@iU(LlK z7=VN1A`ECa0ubndu}A~E|2b)A`-O3HRX&e&k-FZ@28Bf+hHO%aHJ4!GDCHC%rNC$~>3U^oudC171m{wH(bx%57DsWj; zX!T-y^;S27UE_j0z>2aqI9B2ZC(k-_1$Jxy8_cZ%?QM0u8jMz#GVbUC$@mAo&N70) zbJ5fDYhU-xky~N7fJ<;$Zr60d;C8ZLg^D%l1PZ``aCCZkRdx^fc9&X1002F3*@4M) z!cZK&igBPDZQ5x$f*|!1!*PMXc+LUZGq?aTIE4i|R+{#ks`i*q`a_}EGoSz^ zxCDXC`D`kTR;PzJ=Z;1Idhp(Bgg|#ER(GWjdztqKLAU@SfO>&2g;n5odG+>eQUyd8 zi!`8Eewgos@OP4XSh3&xbMc2<-~b*NzeSjLZ?y=uy8;RkYoJGPsIZ2Fpm>s_Y`&j- z6Y+-_xPgK&g-bAYWi@@B&ach>#D5Co6nh?ST}iSF{KNW55SlLurNZ z`k;{J;_rSE|1kk2NPdDa1yWf12kZO@5e4oha7@65lWq!b0D7Q1_f!IS@4tTo;efM8 z!+$7tfUuYCAHjdy4xY&3mMrfoDRU;xnl^9Z%&BuH&z?Si0u3s3DAA%uk0MQ~bZO5P9BzOLbu!eYB}RCe zJh<&!zDivjHq1j!V#SHq_HEp_j}1yT^3uY!Wve99x_0m4&8v4W-@bnT0uC&AFkzd@ z{&8rbM=Ht~IQ`>|g{}A}D3CjA{P;hoFipve=@FFTxmON*-aeTS1|a zBF{Y)9z;$)ju^*KCDjx}%s(FH1DZ!66$Hjxam@vnj8jrsrIlA=nI%%-kTTUjreFil zH|%Yt4=eFGfE%j6P#Vrqw;h z{}gB3kSV!or$*q&Ij0qapoC(cfO6WYr=NlvDpLHwLMVi~u(MvG2gO4inhZH|4NA{2 zlO$ZnSPD`mX=%EtsJ{Xmtgyp&I*fxRNk}1?=cJRyt6U%=D@x3y0~bGuR2otizuYNZ zb;N=juDIip3!XnUqJ*P7?+mmmIqNw44_MJcS}k0I{ zlKBlhaiGLSA>5Sp53TFKwN|cde8z9T19RN5#~*|2lAweVWGJG*Np=szC_UUEG0@n% z5jbGvTADu^n-;RpJM-N0u=~IQp-HEvN@g_g$bnK9Eq4erT)*UMMJN2^f~U6||M{G? z)?0HuWk<%6{K|wpZi93eEQx8$ zx$CdP9=lE>r(|e0n*$fm9$*m^y357Xla^=~f5tl2vLm0o^2-+lw9qDnqRXKvwZlh{ za+LFX@Ea|YZAj4>?<@1;lV85pUmr_QD6gz@vPtb=2p0C*OX^D0;D>*_`TO(V|G<5x zixlbj#x_s_zw4DlZENdBS`ra8I}|T}bnzbrD`>%Bfx{H(I)yg~sFi}W{{s<0ii0|C zfj9^F^Nhv z&^}&aDp1@IhX@g&e7cYZbeM2$?)cBlqLu~z81aZp93vUaXdSQ(4T|5$h7`APjz;Xz z99b-jIW{5>Hbm`GVHBeo`{>6%2F4%9&|nRZvBox@14zcX;v6fYj?w1rXUYvAT$hew9$=lTx1VBRE~Yw0&XiL2_-S<%2&cNDBw5+Cpig5{8 zy3hz{xa>nWn~QV22NEz~qlK)CB{Q4pOqpb`mgE5iDV!0?Z8#%H|774pF^Tu=Y_DYgw1OR0SCEeCG^$eN z-!Eu6QdwLx8euRF8ORWcXZUc71mOoZXm+tlrU}Q#uNC>G zM)rX(#_?yfH?1vmn>#S)wNtUzbZn3$>%;A31f#jighyoS-0y;STpc+^VnYGXP?}bo zwV-H4PN@-@S}GCB3@?4_J1&GKRJRU|21L24+75AJBd%ELAR@>|`yx2OfNEkw&vS}i z(A5&Xj6^Wslo97V@JaepFo!$bCw_n}uII7FHF@z^hy1~t_WFlkE%gt1NXo-9p0Spq z+0KQMmbd&3(jS1qUScGU8r>BqX2D@68Y4N$G7@P*|1V)uhuXCvm$^eN%96NlSk|>n z0z)~K?By@32*im!1yDn2iJ{7e44x1!MZ{rKuhK6Xfm-3MK2l9)CD!W zj2n}@)|?8Ggw@R5(%H=&$loMMcnI;Ro6@&O5b|OnS2tUR>;IA zVThWGL=kR$<`_!_0}3v{^|vRSAFqHb^spNCITS?7kswHCK=hAanAK8MaDm(5Zuo5n zEh^?&=rq{FUxI)oxJMdpwbUK8D%5}hhu=K0(RHJLkhJluIt1i%ZBJekMB{n10R}kl z`dG7bDxl~Ea13$~OO(DLWT^7mPWcZ)|L3X-7_h+Wi@)i&P9+q<*ql~)fo90|yCU2u z2-fGM1mj~r(HVb5x~q0{$8AQ3Nx1LmA|N|E=L3($)pG!t>OUHGtp! zfknAZ1g(I>7Z8EqRRIYU9v?#DV1)+v-H1Xh6!_ttaYSF6i~}QJL9SrI2RvdVlA=^` zgf656dcYvcAffn485cw!t;hp7L=6#iz$lhtE`n4>9E1FUf&sFk7e31-GQ&Jzn58HI z73ktJ;#5Y=(hw@t2Chm6Le{e_M?Sz;Nc;lLF=ICp6bnLQD7;_{=9>b3;Bv6TAQ)2? zxSKb+qdEoQ^QaHw#b74to;BJ>Yh8@iy<)-6xM4Js$wYDi8BE>eS%iM%ihgY5N?KCJwIDQ( z)~eVe*;S-PjEJRV7E9`+ADv=2(jP1O7G#y=*)8OpVB1b2B^mMJ5Xu$p0cGB?R4wq` zL~z4s6dXu2RZ?oD5;@~3B%cP#Bvjs?NfHA$sNYpu!H8_-TET0=tETO0s2NRuD%tQ8)@>WIUefk>x5>0mm6!JNji~_7D6)qXr(J_(9$ul;l4E z12AX;!4;g7IOb>W&qF4kGy+HXL8WCD1TfqJAXpnyf#z$HPe;lgX&QuS=3S4O9c${P zTEb>;B9B{k$yCth|2D{AL39CX7D*knCSUqybGi<2${%gw+YHLfA5a}JC?~s>h;wr1 zbIL<-4vlmcXJxX<8=Qn^c4vA@4m&J^SEkW8Mh0aPgkAF8Bb;Y1s%L)UjV+{t7Fy!> zCCV3$-|nR*Fi1jTDrP3kf_^gS)=0xKxaT~oA}iuv>6M*HmVy^>Tm&LrgL){>Two-R!I@A&0$$c!fPD^H%94~2FtC$mBW?Xm7<9u zPDCj*DM;`p|CqX|s8~ylAls9f=<_i|iW0+$T8fLlX`gzEX*8TIl_-wdX&CP48Ym<` z`st$fiF7ntE!`+_B54>Z(30XLV=`){Vu`nmTtX!SFQ62XF5p2D!y~NewrFaqT1nmH zTrCyhm8Kb~N`e7UfubVowF-#wyj6omYWS5}htz?OVk)+hYj=cCr%Kak;gGjV83R_tBjBXR zmFv82hXnOhgS{#a;o3;9Sw$RZt2`hqMn)DLG0`9QAB3`tF|yF&noR*_$)6rm@4{e!j?sb#@EtXtz9%N zwc*yp`f8zKEUmU^uwCug8b#K2Mii{01#QKqnZkl?NGO2|JZ|Sg zZsbzi)0Pxtof!?XnJQ#1NDzSs;G*ZcE=qvzq>w_bQS7to=soc$GCJbx@-FPgZrzTo z|Fcf2WmW_*0D`4>!3nf(?|Sa<7FW=Wl)Bp4%m|sc#rz3@Z&1*J|q-B?3PyOLmW)7`4R&ZNMH_Y@b{u^ zD98gjFxEYc68Qx|5D3>Z0K*PWArdF?@BU#efkQk%urU~i1_0ANS#b8Y9ziUx{}wOp z_c~E6VZ#UG5IO9_X^|ZbKmnUYf)_Mt7Njs6JFfHID<>TT4C7EX@I(ACL=ezG8509A z)PfDCZ$YdvAS>P4X{}xXG;|*!83<5;L>eE zp@jzl@jnQ$L*PIFD8i2!arzMf3G6~WN3+k)ZY{x>E91~T@Pi_epAr1S{}Jq3EnsoZ zB6J}8>>G0uHVCs6ox?vE!>e$B3Dl$$1m3m5*hb5(&z4Fp9YZx=a~-3J3XFgmG?F6Z z5i&KdOQW(8WwJl8LmS~oA;bq6Xu&_=K-=Cx0UKP>0(Bb`tTgFDM(8sq^8+q`MH+a- zEwI-!a05T(QJYS+)k@GWlSeSOvJ}08KWM|Nj9~UuL@~$%oE@Fmo;6h)&op;%Mhvrs zWP~v{L?!$~KKvLllmkIzBTN7EUVCi#v~VqvLPp?&6n#TRWV1sg4L@8%SujIETx8B- z17xE$>+nMl6E$zm13#q0tE9s})I*1q&N{6$(wa73*Udt6(vxKM|2E)5M)Y$-utG=F z2RG0hSw~Gq<~Gklj@^<6D><}QytO|#0-EpvL0AKu6@%ZU-f_*;J~X#;UyVnT2T1$F zJBV~fl(c+QRz5t#kEw%~Ha4AD>v(tU)eJIu%(OpTHV$PrM}z^I;6h1!_HgZo`sK^t z;&)_AMjf`+^Obw->6W5q*8u*0huLq=?OT?brB;Pp(+c!=-Q7M?dou*)ICLq_b5 zl%;{&Aa+?y-%8ZC70Bz6J8W8rcU*{7`xgd8wKw6=+OuY`6T(_>ruvBHJOj?^&Rxn#tH9j~}2B=$wD z1T9*MRIfU+f(Fc5qAr*?O0`3yOd1Fdrb=j;Yxer3E6ILO)A~%eNE0>Bh z$~OD0dW$M^QlfYIHjo3O1MAw1;EddMrFXlkUQMP;lPPpVtZxM`1xYMMN=g`=NSJ!N z<7(ZwdO{h)!SYr+&^k@-+M1w*Jfx(m`+J{4&OShQ^DPNGq(wuqH=8}VSxPMXx;?zR zL(Zp-)GJK8Rz$-&9K6X^1Q4MF)L2Sse|)Nj54e+uxQEg=q&%J$g9Dz#IE93<#{8n@ z54_isyvKSrNSs4#A~f7LKV)MT40_PNY5oMfG!1+_&2LS5hDl61z)C%%N|3}SR>g;s zsFDGIp#*r-iNk+AkQ$N5Cltw}*TL(bBb~%(YkAxI=^oL1D6~R5bo#i-N5$3kpPPiw zgTx@Pz21AM&k{W+8GRf5D)|K~ML@$i&|G6jJ>!2V006*Acs@!100peX1zf=An}q3` z1O;3G1-L#zY`_L^z%m8|03rDV1qA^A04%BiB>=bs=>h-<{{a6997wRB!Gj1BDqP60 zp~Hs|BTAe|v7*I`7&B_z$g!ixj}rOWnuKg2zg&|0PICJXU z$+M@=pFo2O9ZIw)$W%N+09blr$V!3!{PCl*V(HQvc%nvyD$0ikt0a&}+iJ9|*|TWV zs$I*rt=qS7(BTJr4xw1xE zO09m#t5+D*Cj>ui7j3= z*M{2I^-m42{lkt`H8iN=iY&J1;)^g|l*({JOz2MxR(bZ{QnNti&l&$L1zLRq6*pm3 z00bE0l1w(~QPsDU z5C3fOTog9$=v||vmTKy$sM_Wa6#)XU0UiTc{|bNynEInB0DyTaP!#w@1z3=iq$=#N z#1?DpP}*=R5DBmjR3QL1_PG?EY7Ex|LH-c>&jqO*>+QGThAVDElc+hmtL<+zU+K?qs4&4DT%Y#J9!Qhlf7^B|&=}Qui1X7>M=kYP{P-{&3QuIMb=F|=gTix6q%sK)3IFQP7kRm0 z$Si1VM&HzM$1V5VAZa7;bDS+@^gmDF|6OQu!3vaGLOiHT_u+^quJ}N=-jz21d+)E;xc9?Z`$F+p)rfw8Dv@z=jn$hQ&J05j=HNpcZpz1#k?c z8er_kKpIg-Ob~<|N!-Rg7(xm-%Hxh3%Oe#bc^gRF*81~L^IE{0x`q>V9YQ1-#cEDR(a&+s8MURuU93`8G^%*IFw z@(L${LXIf)mq~9K)WxV2DDvPV7zVPAm|Bn-85|-9RXQblceTwsRF477@;ZW1$`-Qv1RP2oNH?5X!D@_A zsvB&?K+ciKMJ_}h%jD}<_1ZJZs>QE80c;N0Fc5cu@friEL>VhF5JV<%9a;UyIi1)F z%TAWE4Rvi%Fv}Bc|L~Es0x1U=xiJt#l#vw!`9>mDsgQv>5f-w|D{O6;T%gc)C%@pM z9q?lf!V*Iq_~8R71u~CBZX>n-FrgEN(cFD4H@4;V$#ZoQ-5lCsf?&j;K;)p$aQ-77 z#%u^IK;c9QrdM3&W$u4-vfiAu7lQ8)7@K_Ysv|DTD32Sa{w;S;7)%-;$#oV80aKZZl9YWZ=7hn!RTS>B*u`2d zwkvY%nIs#6nGgs*);f@2644j}X>k(Exe!*u(aYOjl(yp?5i zIJ|+@|Ae5#|6z{L3gn{tENz?xO3;!MYu+|L$jN!)z#RHlw?5=8vr}wSMRU}n3pw?p zb1rhqUWn-h+4)X-4nhA`*N52shn0y)Re@xKqx@9JuTdCmsGrK|ws^YPyDbx{M^GRX z#JWJ*%)vMF!@H^FM=P&w_OpXk8)+AC!lka0EkbaI|A@N<%h4CN60s1vHfCxe>qI2? zU08n)yx`-_c90nUfnDUsf)_84LlY4Z0>LS-=ZwzFV_tx@$|K+lhTg&7_$Qz5V_!;a z!4v-j)EultUnDF-td_9mu20o1WjXtJ+Pw20$$eLQY{72yMYKf3L|@che1`P2zsXnr z|MDf-eCLN8`W^v8${#rWKnldSL}W!@-jT?5FcOX#4nLS-ANwhm-~6_RP(hJP5VT8E zW*$PpiC1=#cty+mkzL0?2;l|JE1$ zfKiZ$cM73*F&2pX$ApAPKu~i-~z(|02P1$5-)`2a>U#cVZ|dikXg-q3oqSc|skgc|4% zlVcSGpaB!GjojF3i--|s1wmlY7tQumeX(^@B@o0HLKLPDj+R0%7>$mii9V8s8rTPS zVF28?kHYqi7ZHvRv{d|n57xz2bk{-Y=3)x*eJJE#@>nW^SdWFMdHnDK*k}R!$d9V# zj}`%tR)ALg_Ec^4RsunP1g8+yc0!!=kPu0a63L00#|TzI0U3~yHc4q5|5*{51wm}k z7ZhhfhV>7o$3cqafQb}=2tj#H6pt(kB@yXD<%a~raR3-;lNlLlgohJ5`9MAS4?kI0 z0#OMmCVc;J4jiR|2f>1&&{|E|lJsbgv}ch^5dl_dm3x+zH?a)2B@iv=L!k8!j*w!8 zRF*TB5XW$Y1=W^r356U2leDKLOMwA(X_sP#mo{Nro0VI;^?twgg(4J&2Qh{ylxm9E zC}$XT1JrymvlJCDnUfhLNtTloabR4jnL#HI3&=sZplHJ-c1H+^rKuK zb$I}OqhXd=6SQds38r`#BoOAtLFjgOiL_Jh=0y9zl)>2~!`YZN|5ARL0RWPToEcdF z-BDw*IT6npo$)na;B;Rcl?|{MS>Gv$E=imdQhpUe0l$cz+-Ly-U==dfoHX&C3I;|E z_FzQRO{ynCOJtbPn4hM(pW+!6!!^q58R32+^OKM=uqijUQS7Rv`qn=UOHj5h(gVJGP?4aANzAVqLI( z3W*R5`G+KmqcIYm{8@hUU@ibq03Z4QcVQYuDp^Mg5lLzVgTQ0%rwu_?lJ$p@j&!A1 z`XZ;PbN=vuXs{IBp#bP90To~sJa8q0QC?^I5Sc)QYx)n=|5rhwlnz&>aU4}-2ceWG zRHr$rqdND0{IDiVVF2f8l@1W7OED>$YNVsM6MyzViNFv1(1R8?9@^+^NQH{3pH8V*80#E=2FaUwNtQP<(&ni~Y+7QzkXjn)L-1HBQ z$3c+y58b*Apji-A8VaOIuEJ@q1wnfgvI{Y=tfMnJAHXwcXsD^G6ZtA=U_?Sgxk0G+ z4|^Cw`G8FP0ApOGu#A#G3n4(w0htrK6c^wF3-cPj|7x!pixZfpX#!D)6%;(cw?U#d zvfDsh$#i6NsQ(p35Q#vAozNGL_zz-9M5KkC zNiIqOvP_Gom8GGnAP9Y+JL7k%e6_U;(Y4CP5A)DzVVP^)l|=SQrEo-EYul?@ zTDS28dkl-SIeQa&3vSGjivK`J@y8FlCZP$DlA(})hr6(i%eXIuwVM}I2PfCqk4;5NUftdY~jEoT*yTd?=i~*;}s>?7{^B!&abgUrECbRz??Ms{j?6 za6|+gKmkL%m>P<%E<}h(Y+3gE5l$>|QEXWJkYZebO;)T(2a%GX5Ca?lAzhrQ<%hzS zw7rjO6KDJnp5>RPgHZy3ffmxP z$3d+)up3q8SRHKm?&^ z%4dhl4xGY~{JVEc$pit*{2OyASAd3VWYjQ0|{*^YRJu7G0c;U z%mR^nJ2ZMfn zRE<)MpaxX%1ZN-!+CZq1gnL-6)nIgDV;g+`aJ~a95H=bLL@)weeAbMDuGcF|ctrxc zxFtD&26l}_c%4Ij)TqQ@eb~oAh7`ctz(xeYxi>HZh}|fPP0xi&(xn?sF}oBmU7M@Spw8(! z?wT0@7VHq}pzafm_zz?bCNIhb>@W}Md{6QK3X?t#w|nUf5@0$lL+BX*2{Q>b^b@Nd zwrm^|>5LzA)@8a5y1Y)mQG}jC%B+1b><-n469q>9un&a14>>gu_ucFX{OqgELg=ZS zOECu4&Jz!1ivKVVso2RIBxD;cLWBDcoC}=deu3oP&6I?mg1!`PaJ50c6U6vHE>&wj zbZfOtL}`Gz%}BeUP-^>*DE$uY|6`Z?NB~wr;_I#x2X6%~wYnBGQ_4VeMa@wY8og>; z@#D_x(WLR)|A+yk3IK`m@i{RMEyZlsHB;*lsYZ>||8TH|>+&zpYLF!J6W{<=@d72T z6COE^#!C#$zz^n3RbYM8+g`vY{7~K75D)w?*a=(vps!bu#HSLw6e=L> zdBhXM|KF2oJk+Q656mA>>q~ahZ~K&WN6LKzz7X3x(f$08#$6q1MhSsK4@dfb{&Uj! zQ53TP(ZUTse+3O5M3@laKZXq*K7<%iVnlFOELvp4&mA$29IO4q#6_gYO8nYwLy7X< zzgD4Kx&${-=1iJ3ZQjJ0Q|C^eJ$?QJ8dT^|qD74!MVeHiLZ(ffI#n7~>Qt&#sRHn@ zK}C!tjP^Zk`cI+Nh7~VbVe@ZeM`G9hRT@e1-?@}1;r%1^(xp7Ief|Cg99ZyR!i5bJ z1)Es$!o!UnKPC%+5y8ck{rO#X7VSTCY}@{G)Fm#axplYQ&8wF$WY(=+zlI%Kwrk6^ z|C!Flo!d140I6(O?u$)xT6Lbe@oN;93u$tu_3<;MH`G4e)vaI0o?W}(-`xvt2Opj& zR(7_z5bzvE~`J#QBF0<&5Dc8`I_)N4i#!1T#!A z$4qL;#mGeSDi#w|%r7U;f>9jLsLbQae@xqkA8@=(vrj+&{L{=f0VPzZHU(_*|HXgg zWXqa=9c}&aZA8e$1rBF>b<@7^A2kkV}nLZsWQ8*X%%uz_=qJ|yQzTpQOQ1pUD zR9kPwbv9C4%(d4;S2Xn^JO1IuvvU54L%DSFdG()Tq|>EWX{V(Yuw9v~w$p1Fv+5W{ zi)HKBG?dFnpJs=VZkTM>Ww%{Jw=LCOKz{{m&F{!^QSx?xATFs?SO9j&E{X>7aiPCD$%@b)llm@ocE?T*-1 zE)9O(iJK+5`DVOvPxW@ZKgg{*+oC}N_pF|DZsx*p#OsQOpH^mlNuHo1M?LlJ^xj)_ z@Wz7OJF7B@8FRKYFZ`c)Obb1=(p?8WcwJc+KD*c#3Xt-c`C+D*+m%r+j(^(GGNpI$ zl5Vx)x98q4)?4p>c;t7jigv)8e_lB`Ofv2I==3^0eEH|M>U;3%Z|%$ysWShfM40ys zKB%F->6zvp{J;7Zd;_;ACNz=KCS9AXxK2$gMV(J!SsA{WELLe0Do8qVuTI&h(!Lhz$LDZz(4 zNavDP#LtU&WZ=@eh{vhiMuJH!$`bzp4bP~Njr4I2IOZ6NFY(cl3e+R{9;p;RhS6U4 z0_0ExNl3OBGA@X4VHtCssutGVY%u!16AuGLP zDwV$s-WcHp%y%)Sk|~UrD~H05PH3hR{6J$z*kQ}KG~yq*|3t|yrBf?nb`y2N+@m*3 z$jW0Hkz&deiXfxO5q4mLbB?%XhJFDpan_S@;JlVScd|-kg6fs9>`5XVbdhJSlNkF5 zNnA?eL6pqn7>kUSJ|+4!d`fbnH7Tb#`*}2nWYQ;{7-$9m;TdA^BcUUy#6K9ijeR`y zU>Aic(IOenm^O@@{M6{m{y7wZo+T6eAn99_lTtkK!(cB#SWT76FjqQksSv>_M>Be_ zj-oT5A+^FYJyQ&Rz-2U(s!OGg>XMQ@)vWSr>M+lG$%cfnURAvfPk6g5Rc|$t`^C}|2U-7kz)KKIdNeHv+DAVo=L|W zg9YuhCgw0Tm^H46H73&-VpW|aLNl4jhi9NcAh|WiDH0 zYon2L0Tak-@elTn1Q+WF znd0bsUkYm~zoe3e2Y5q)e@q~z|E20wIZECE-{ioMT}N|?!3=)zfpf;t*}zz`NbObF z#(lc*r*3co08l^y9){^@$E(;8!&S94Ik6Qo|3M8EFL)1Eig8MK=DWSz*vb(@=cj_p zn+j+E$P)!IfJIzn0+*O3gTQJg@X_Rd)G017&f5E4LY*tuSxi@4ez|NO$S&0RO2L1wI0DcDZkVXC70ykD7 zgLrK{6#b}3K{_RpmJTQ|J?l)X)=c~m!iE7*0S8#X0{T4Xs8?2MGfxE7hgLOPs94atT^jJ4k>u6FX`^fgW?&0RMnMJ(D}`@)jGsH#zo2T#@XKEW6nwQ3kY8 z5|1msgxc1|_lOo7-~h412c70Nu*V$Y|6mWgz!6EeMb_<^WsfT^`Pd!k>KzJD=po-1 z57EBCTN{2zfdrkFD7gpTI%1D^CJDEKE4rcLYVgD10Ha=At|uLfW8CHhdMm#JBn>2} zfWP+q?M#JDW+MZ*CMZ`q%lpMSZJb2rLXZwBZa($@Xgq=&<;NtX5Nc8jnQ6r~_d}4r za%FccF6?l6N-FUJy?|m7REIl%at<7~hJ56E%kgn_4p4}UUFl))SlUsNh8Rd^6>&$r zet1P>wjTVK<@S2lO&(~XpIS4=K!<0p!4J-HVILi=OAl^f_{5j~bz)Q+5-0CX?TRpxtRyucg_5wGr8YK)p);+ z9^~Nn!NJ07YKR#nrgD zAy4GwuRiPzv4iGQ2Vls(d2ky<3cdK#i^HS82CP5)Q$5$?zU3pP{S!3F(>n?TKmjDc zj^GAuIKVeT2^=5->1YNAM8Vf!yfI@d?;AGz1HZ}BK!ymwv-kxW;RtTXhr$V^l*on_ z@B#Tt!67^h5!<_s8$Z_jI-!d}qMN~gsKJZ4LF15y+z~UWnGnQZNCp)X2WsFPM9dI9 zxCFh}!be2Ks$jep1dfZ!G8Wvs`$@y*i;^h;#kg3XM9hczdI>@RhExPbsaVB5@v#%pY#x+6xtQ$j$5Kudfp7dsXJDjM@$qa5N`2G}Yyg*zAWJr~EwscQ)o{zg6u&0K%B;jotxP4>T9U<-2{zD-W#~(e zC@@}L`;AZ zPK%(-eMwG{XawfuhegT{=#0*|M8bzGO-H&;^w7>IS=B!UR6tw7Ba>AtpjG3n z2k6SxT`kpZf>L1RNg(x8pxeGzP0W*w)%ZlzW>pSdcLx`5l4l3RWar|OK+@mUd|C0Mm(TahpZ&`XKI)ycy3&xjRJD=pIB z#8ifu+O*|cYRCgogRv9OhAUhLX?zLm8sF8O-YN~=yH(uElU;sjUyewJ zcM}O^kY9qd-}^P(PpR9j>|Y}}vi}WWVi;iMFkt6EUZD}7zYy0hZD9B6=q@RG$99uS`(S!v-k&t%7>Q| z32D$_T^b#!>|yDp+YUCvR&)r>u!17?40b?bF3<*DY~q(#;U{ikv29EjJ~AuDV*j?# zV&&-K4Dn1c_F-#DRwvo zKmKDtj$(?f8 z_6%F-yjfT&YEVmC@MP$;gpVm9VqjtI@jf|2qJn^6v0HjRIv zIK7yKT*zh6!Z+6QF@D$no-<=}!liRJ{lW=M`? z%{9^lAwP8vD(T}$d7kGD9_0OvVIgjabUuqLSZB&I!1&n6uyW3q_-FIvVE=)pDTXlU zi^zg`P_bfI=#dBmu=2r&4h0E~XecIQik@VLxM+*W0(RKwjuwfJrW6Pr>5``BfZn2t zC1{IQW|wA*VrU!oJ4?>wQJcQ$dd}&J{)d&ef|lOspdN`d*vxF8=^i!eF^Z=B5oIasQmIuuMg9LM~u#W1nE^D(kX`~*ZNM`D`Rxz+H9Jzi{ zx;|^PexR*p2zkINy;d){773|-6*HC8X$5SZwNxKcYqoZ4V&H4B4w)`FQ^<~NDGegZ zKIwm0>$5;?1-r$Oh=bVt2FIqO&kk(C#vj5aZOh*4Dm+BybZth0?f<%#?fIeY(!Pk( z<_Km;ZIM{*km*&I_|@LVYTAaR(H3rtAnp}AZZ41m2pgE?4u$4+ZiszgQW2rxX6qDV z3*%NF2Tcib;BN2!?ywDS2F@etW@{!p?{X9gIZ*HT;%->*?DwwLyIY~zrf<_`vgSf> zTrAOTIEQ?F3I7Ig{0++Pi*BW!ZYuzTH9K#NY_vRp2Zn0!ZHjQ;mdBI^?gAg~M7wY0 z*n2b&EAoE>q==07u`pUO6E4OcJ@7l{_%85o!G8Lw2*w5aaE@f24y9_Io+aMTy4 zCn1;c5rghv8f~)}ZgwkfC1>)u>DnNNa?q~C#|$6BzHm0c^8Xc6@>#@VE=$mb)Amyb_H~EUk~)-h-*-I z2G!br=NgHB?(2#xWe?Sq$e+)F6^3`3m-m6U3_RF?o&P4KW_gSN`fE^9g(`ZwIeMgjN9%nGY52JA%JrTf zj;XJDlrr6|Z3!pVdU1bUWI}?b@3C^P=myDn%`1C5J^On|doW)67Pk3`(S{G;uLk(C zr>|(AmwLPB98AdFD*9rW==(k&-tL#%JC)Hho+7;Qz_reX)1}{>lK?=lRWtliAO~&=`%- zKaJ7<%-m1GLPhphAZd zEo#)|!G8#s7F7BI0MrZ?CLFD5_3BEdTDJ;3+3=y2h!iVc%*bV<$Bz0=ff^ZVAJ({X z=hCff_b%SNdiV0}%Q7iou1bGE1+ajs-~YsWxiUuR6>M0EV=bCJ%Q3CKwr=4n?(F$9 z=+L4^lP>K!aMQ;A+!PLA!Gh`7K2_81YVzwtv17#{s*D!1Tao-^6EAN3IP&Dmm(#2* zSlfrf446|->0I?=uy(9H+g+%OSzO<;0S{jNJo@zN*RyZ05;Z}k2IU`2Qka4S_sOp} z&YoK`MdExH-gxD?r5}O`D!3qn4GzT^eenUN%?X87;Gk*zL3kTv+jSRUA(e?oo=5p; zHWG#@s<VuOeWzwD6WjYq8o@PU0N8=btDy+c@J1ns_!N}^Y#m*+{ ze0F957N(l!%IB_W`RZ0H!zsHhx7`K{VWP=;ixaa=(fVv|w^B51M#k{kYoO!GJ1@Ow zYKUyJ^)^>-LbO6Q2sfIRlSgIL47m+BMz*3a!woyEV7T-3_wY;n_G{P}RS9J&q( zPH+oTJTl287iY1!CYyw^qW}Iv8}L{ho7IKEABU_m&N=IxCCl;cjIWj_)%p;?0(Wdy z%^qa~vRkkG{4~^23)OSJIkPPEzc5pzP8{H6lypZ+2j{fZWt)ArOjMg|HOePtlC`E> z7d&J(*o=)f-g)b-klH@ue6>k$gO$iNnwk?wW$O(2jonS}{W#=M_kFR+fG;HYLxgMU zP8wcgqJ(2-ImwnQgt8b0!d%df({;=!+z-~n% z)o9vH8nuUhyGXh7{yg-``fl6EJ=>xXKb=5Uyq*+w6Nd60ee+9jxz(@+G6=}Hf*G1J1{ur}26znV9K$dY7YV6Jlkh_x#~4N{#u&&^hGK=Aj0+6Y=&d#W zW07EKWCADh4F5TrB@L8JizR`0$~=Nm7h)tOFh`QDU1G(FPlTcxC$%UJy7D2g91A3C zc}tJv(k;gjA~7k*M?V5GnBEKyHnUk2W3sYaIY zWGKI>Pmz$~6}rF%IO=&7G?r6YP!RzhYI96~aL^8J{KXB4K@E4_qmp+V2|We6yCcG) z75m(0D`0U9Y%Ecu19i+okJYWhT;K~)x=uqO^NU;DaH3|3Lq*flj(A$rq^IKtIEL}d zj{?&atzMBRCz>P6gRiz3l@Vz9cFs z`}xm+j{j9v1TAQ=98iJ6oIn~FR83650#QwM6(e$Z$Gh4Ai{N;pt!A6YF$Rm)kcpI} zhE0qyp?aNdO&|hug$fex+8C@VM5}t$lte2dhn#vuu))CwQy*J0Prf1)M%t%QMXFSO zq*k?fiL7LuqpS%`fB_VMiU)ELF|Ba+A8c?VHg3UJ(Y^z$iXBNAZL2bQfO4^F1*mjK zgIlTN(3pcdBL&_O%)@(X4ykLhU8u&MR&jSDyuF;Y2Rb$w<_$ga8UZIN>lMx z1OEd4z`Y8BRYfKEA>LrHF)G7{2)FmW&;{|h5c^!%zJjE+^$9=p(GGHaL(1;$1qBC8n`JR=iui$W1*z9IY z_fXb5nR9_@gDT!yK)@T=$D~MoWlb>y7nMOoJBD=VFZ-HF^k{||a&QA4=wTST(Er6N zT0sg@Ji4f__(g|>5@dM1W61B~by_}L?VC_)Axj<JiI{FoPA( z-nB>W;pjxqyFDN{feK2|jEOg66%}8_Dp0WqRJ6qu9@lViKq2ydp4qWL$;Ud{eU1Xb zyXD&;2b>#jta=A~LnNMn0R)T$Det+;&2&f=s7R4dgh7YB099J<5y*7Q{4?~p_CJ~t zgB#o+2eF)t{ zo#ixv4A=-NRZX@n3iyyJNCMTwxCI#^nUOglJuS3gi(BO3H@nAVAC{K~=KtjZj?Hf# z8=l9;F+x9#(Z50oN_Ybn7LoCdqv8^m=r}0`;qm&4z4mCmZ>(uDk9_EZ-9z@%+k^j& zc;KV%l>ZCf`!g|9VPF7-c>&M&Ohd3pLQ}W6LuKZ`i-UcGEhc$|tRlyc%kLxenddy` z0s8s%hyEDe5d9~yKKgI#0v7h)I{sUs|8a-%@i%-!+H*^Zoq@<~j}$VMk=-ZK2cFSvp$WI`sWpbNg> z3!x-gfYu*W1{rK0 z-3-GeoCG)+QUDo;<&|IgnV;sNA2_Jr`eDQSg;><->2nvQ!lwTO8APbh_Df;3n#v(|D zq)3h=NxGs*l;lVP!oW?$6PiU7S{ghY11MNw^j+gtV9z#op6I<{xOrSW{v=QarBDuK zI})HC=)oFboW*GZ#Wh3J*~35B12aGY6c_;+Yy#VnLnFFfL3SnGki$8|!#(K3Jk%CD zJR~MKLLtaO(P4x!7@tJ0Or5L>cEAKiqM#_2A~51&E`o&{p(J1ireKmJN(?4sya6!W zP$ZO)C0N=$@B^?YL@U^&K#boPg5D>6+tw`%$gLw$e*Y$DhNftKlvwp+xlumW7hr6#_Wglytglpi)|8k2D1jEJKH*^<*5Mq&p)SxugX%&z&_X?Q zLpPX%7H|O_3<37#X5!7kZXSXqG-hx*BHbuW2EI!;oTzcGXv+mBSe}DI=0hc(#B&-0 zD>woo>_O*rfevA32{{6HP9ziw#9iiPNBS9iCjY6DE-8B!=3t6Jd{Trb^k{veL_7Ec zWQNT2@IxjIg@Jx4J0fU;D(D=xLb#nNEo>bvzyd9-X`8+&EkvlCnnQ)Mf;pfAI$(l2 zw8Ng3!#Oy^pR%1ZXk`T!>aJLz%SFTXMME}B1Bq}Yi$-dsR^T}#=R4d3Jm^C{l*B&> z(OKdGD^$W-CJ#pNXsP-rs%AtX1S!2SMkj$oD2`%B9+yd;B$M7MNv>il0^=|iqbUmG zDgLUk1|zW&t1qfz6?lQ^VL=sOffdZ6E&inyI4NLyK`m&CCzQ}3q{KN01oMalHk1p{ z$b*fEL{$tW9-0FG@n4z3;cB`e8-AO&$^UCNd|SQVYlKcHh3+dlumYaqX*{30^JD564QwM^`AMuWu;XIdZ~qrM%aN~*_x>~Vr+JH&%RCL%jv z)9z7&G1zFR;wT?<4HuYds?O}p=D~KdswQ?43U1^n+5vh3rhDS5U_$Gz0;@4*LNcl# z3NAx_$%D37VyDW4B@PGGMlDlWX6DVqjABzKbs^_112%wSD3T`&B5iq+q8-rGSf~OS z=+L&J1Uc~B!UNZFrsDSRlbS%iGuIjF?SGs7Wk}Rfb zD)wkYI;bqDrez}(0w2gh9CXg9_9)E;@63il9PmLU-0UT4-Y+0+BA{YlCTY;(>MgPX zuOcH0y28>n?Lt5;C#eMY&PAGiulHhU_!b0h4TO}{Bs&P*L?B-Fr35+5gSQ3}YV{45 zBA`hqs6Xif8oD1qfkRmy#5}Nr1193*Lhd3~ZdNvI#ImjfKQIJGumpDmFYrQ$9)gF? zK`+Du2j2sxW@;i*!z8Ti?N$Pg7D67#K^k1A@V2lEmrxkUK_N5(Cg1`!L?q6lgb`_^ zdD5!T*6Ko_B+*i@F(zXR9{`9~eOov_KE^ zfDVi@7id8t6v7^)aPO|Lsdhoz@~F(dFfG4u8stGCR01m)12u4J4r7lz@Nh>y3o-w& zNTS3o0wXD2FZMF+j5cxjrkP%_LlonKY<7bctAjOUaTkN}8q0C_JcBq#)L5(}Xq_`U zPlQRNGerOc_L)Q&SpQlc55%{I!ZGyC-ICHPD6#n-5=$&HKByf9LMkLzvOym-C0{Zo zGpyxS>I6P?CA33CPjn?zbR{&xMI%BZAVMnZ?(XvL3bSxV0I$r-@<`V*O4o81#6cb) zf-W0_G6<3QI;XGA130K4+Tx-^NUJe}Bp9S3F}5HIDwRKXsuR=2JV>!Sl!G{UGc<^^ z;VDp5volp!wN-1%NwD)BoWx7gjXn?rABO@d^o>lC(lGQ#0|MmQ5m|{Mv|Cp)#0F=f z5*b}HtX*s6pMoWz?zJ=YwO>0!BRB&h2(~j6LN6c!B5XoO^T8f8b_&Y@WT!zZhrtS; z>Pcf~9VebQ#MQUfksyXCa{7H%iHz} zkv3R!g<6AflW_Fdsa&WK%YxclKuIX7D;VN_&o< z6aPA+uX~|)wq?h=y;JyqOExZN_=c}6HAsVpAELK6E`?e#7HhF^kMSF`6IAy)uvf$> z0oC#r<8h_>ttK-my23H&HZ-$JN_qSU{)AFDbv5w%!=F4m7lRzDaT#9&7i+OKT(LT+ zLlxJ2%}*%KcLUB_vybz9Jw!1z0DTmvLq5nuB`~I?#e+dOdELs&Je2FGglj%r#vRXu zC5vpyZfZ%;x<3%GGT1IFw7Iy0bX&f1pr8A_%e#Q5{R^)>+lMw~OST;3L8Q+&A~?dN zvjT_X!pinNKJ@&AnuFk%!@+m4iNCR)2)V1VkoGd3zZBGmbmJS2~13f-O z=j~FdrCn*V2hu%TOqA=hLLruyeVzxRK? zXy_V#8|xFlN-akz+@XA3=r`Ig(^alP6K8+$ir?ra^YVSdlrC zW=)$naazd&#?GKbnOtF$x9=anjr@$J^tY6$zkf}kMwR+>D#~>A%!#{J4gcCRVqPnT z4O@#R^kjM~)gHD#VA69652)gbBliabw3_ zx;SQhXj^5=+s^Te`YKfC&ZPE96+K$?G0&$v4?`O7a%XvN~IA=EYZXhQB1KYa9l~m4mNU%QAV3~vg4;;!2jteDHW+Ajj0}e z6iuXk(&qlf7l`CwLN8{%{F~P6D=KFFe$`KG7(KwQRuo*ER9Fwh(kL* zz$2`XOAF!TQu8uRk3DYMn-7v}L^UgxSgMJI8C3xk5SjuDoCv{LX z8PUxN3^shq1V?Z~iWA5`lQ3IA46n|1PHr4mO9*#j}g zARBYhi5oN1wQmB2YEI8g$(Y_C!6AjtP+pP8AAG*q^BZ#7iRT`C@<~&prg~$gkvxQ> zSZC)N4FkLG_Tb~vz!t8=Xh)K%gp*`Au_l;cxUtW^YPK>9!2Vu+)uCE#MbJTFbOqZ$ zh72@t*IODaW>B(d_utNtZmOLWr*m`Mi4q@b(ivwT(F^vGdB_7C;8?~l zesK&}03{QNaNr;y=!(Zpkb-`b2R0hWhL{{KUF&MsyDC@`dC7|%_)y2bx}vtY&5d*J zz=u4(B|JFG7!SjU^1vJYzD zq7sGphYlr^ygW3|dCP?%AJ}LSOgM-xo(uvg%Yfl1Q8JZ}@uPCqxSW#QCZKCn3tRKx$N#t`MM4!K zI9N2MauoA3OCdrqJ#0-j^dTB~u*r5s6ivuRR`eIpk~W5ih&Y7dA6?i;qQa1e zMnq39so)^Spga0!Kj7OCwZvh+J(i;!=5S~? zXb~k^7-JX|9mX&axX4AiVu1`yL?;^92}t_nB`=ZWizvA+OJ1^*hHGgmbCL*H&XlGa z5!Wft1yh_P&JI8U2PkVQ!l+CRD*32KGXJ=dq<=i)A8ec3hM+_Z$At^1Bm$?x_)t9K z9TS<4G7NZ{*9fEag%#2RBQ=yk7j^&;D)ab8Hl7KO(ZB*VrZAZ`qmny1>0&9p+tcs- zF~v&kAq|ZYiF49Wh)UoB8UCOpKDyx!Gfr)MUGwK<cfdztf&JwKcA>Y*+Ex*)C$X zdeFmdFQErETw+~9F78Sqf5(pqWP`m8+EFa?p^7dMUy}w7AgCR1M}7F@cC;*0(X$kwaLc zhZkw|*Uur5CxH+A4h1vV!Ec4@o-kdRcaTOGY`SZO{eew7wZdfjfN*Qbkq>_uqp-~Z zNgDRx2v#UVGyl*=H&m=o7XMd7v-6{0)WorhWF%u1vM{zRVryGe=++LsMX7Kv$xv#Q6n@~t9Q)dL<}xH&4&`qcqR_=7%Vkoew{*)> zxBcyLpL=p2x9aN}?$sR#Qb%$Wfy*eMJm!s(x~m;UghYM;4~RgHb`KB#)8;sA8 z2lYel_udB>Mq->bVHz+k8*sr9at1llfE7@3B~8*CMgbZyqC%MA8j^t(cEKt0@*lL) z7XNmkE!|QjXJK#{^2?TNrE2g7anR_b(I-TT5k6`Xe!?F!!5{gNA5%de@9`c%;wf|C zDMj3F2DQW*XrI8|aN9ju3(2`DvAC|71S&H*XkK`*|D8g@Y#+%rJ=@*jlZ zHw{!7NFs>9QYt~=K}pdRta2D&;VT=|GfsgOvLO;LgB%bcEs-M+Qo$GgK|8zC82_vR zZ8%~g)=wN*VHOTlK)Z7zzOzPsVHP^U4!lkGl+hWlP8x%c5vY(dG4mHv;T~%=I~7zJ zlz}~Wfk{8}B$dGy)?pV)5;)(JJyG*C5%fL(@;yaKLH|Ka$uuLdGcU0dBj9r*x>Pm) zCJ|~=%akiOb+b-&Dsg@S8${&4{6-t{fsDFAd%9<8{zGfP25b}pSr!6V8ba6LM-JyM zG~NQ#cq1LCfjnbUCTCKy{%#DDP$l?5AMW81FD)AC(>`T`WnAVSZbKjPVNbmenBGE1 zW;G?|!2zYxK_B!ILIFbQgcdloHF^O=kE07JVI!8JDC*%FfIp@kGyEy{}!dHfxhLUb%Lr=CxjP z@3<1vTYCaXe$py zup@j#o|FOMFu`IeC1V>yQv)#$_5cwo!QsR-MfSn)NOfc{qfg!eP`uCU#Kjwi;T1$C zW@8o=g5hQl0T4qJ7aU6?_Q4&hfp0Z}8LZ)l-Y;qK3LG+l4Yt)L*dP<;P4w6m54HAq zk+)sDc6s|I5q`HYl~JV>6ZoEX__k39rM7YUj8BJg9R8FV;280z_-x zaA6l#Zu-`#=w?F#_e1<=3EAOr_o5OSp%C(5oE~F1IO3Sn;Ls-57^Hz;J%S(f&k-F= zb6evZXyYEdiFx+{9F9R3NY`{d19dfy7Y>0r^1yYW!UI9@&i}5V8+>GDK8AOF*QI)D z@{%`(Wq5|2f_ZINMLGexqBk*ti!mVy8@CP!yD=P*Ph|yf@N6m{<^p{ENPOLaZZk5W zzUO?e=2gt*4IyHU-q)XAOhZ=hLqepgKxv7yL}4s;FfevF92Yq>LT9=l4)~xZaUmDh zs!9qE!5YkgFNQWy7QAk_BM9h%TVZ5Sp%;SHGCY_$_Mm5*f*s1C8a%QgY**FjMR!R9 z91_9ZWF!mhz!eCPhCw-$llPBF`6S3i>#SFZv6qO4qQCewbVR3CGlCubHGG}e90XR1 z3D#<`#!wfeecfn_h4~>~O!X3qkNhYd0*QMCC?5_NasPjVnJ5Kyh~p1+=$xVhJqsBB zs^oIvfq@TsWQDRFI@eQ6dF{Xf8%FmO3V9pCnHO?aIl7<_7+E)#b;Vee8}MOABFBwL9}?7Ir6;(XC-rz` zTqb5Bk{@Pa7_h;dwts<5*P~y=djsN;js2#Xu+u>yuTcLCx6e77r zA2zfsqgp1r01@a8BeX#sY>saa0vg0&pGD$hZ5q<%9(E7NoiKvh}chx#x zuOX7}I=b;Xpyr3?dXA5}L4TBaU_eJ0F@hc3)-DRWtop)e0%I`t;4l(Hrf1r*2~7~? zAaZNc;Q+6!C)HYE7t-#*5gF{k^myY|hMfD@>%dN(bpaMmJ6B2Z6}SZ+!Z{l@VGfqV z6^)u7mX$#$q8i+RUAGo;M&r6N`FUw#xc`fLxlKH+uk~opy17%68>E}XdJRBC>!1>f zd(=T4`g$#}g)Wls&3?&G(?J=;J7M@DarIX)27@~gW4#;Ky`B6ys$+{J*YCoJlB0rZ z;Y6hkZ_*qrod5e`R25|dySnBfol6^o2U&x2RS`+VuU;b?EJ4DN$q}@{DDdH`!@_pc zA%#7BDL`CDIfxAsApuXk&_($p44TE6&&6MyLdc?v3(C4{+*)uvO7sViUiFB>1;~Z` zF7m>#%lpWYd=HfTQ4|AWn*1@CV~wBuJkvmV_<)(9$E?uGQ(w7=9<9JKd%?Q=%LA}a zTt*-2IJ`#N%uO3+)jZid0~>gRHUHk+5{Na6D&fTP!M1T*S+1cT%34SUiCh3Z&@&-N zIKt4$J<-Q~h84Zu!~w>2Zs%y+ekeVE^amfjK_Ai~6&M=rz}uOJe0qu;v5}lo48zoO zMvZYuIvTsx6<$nyCcc~JdDuz6lwsKOy|?`#*9~mHC(YtS*4IZiz-=RD5ZGJ5?iViV z6*5@aReoe(!E!V2HK2Vt(x4L7>cYdK8p^@_ZYNwYNLyhlcwx9+y1Lwn9(ns5#nU~! ztO2_J3DSRU(sA5FbX=LUg&mpsyZN1^C!xr)wj!889Nf#F;e;Q0Uc_$#=#yKyi@x-WXe6{Y>BGymcMjO>=f?X8 zjOjuT_hBy9!P7x~hPLGE``6Ty!|cso?S;R-97R&LD6Gb+tiUL(GM!chFP3SU!0;Zy z60G7HtkPQh%l-cEgEBvl@*Q4A*sp$qid~(L-4rf#@fV*IT4589;TQ@C{ZHekO2nyO z1D=(G@~fR0#vL4NGgQKNd6RQpHN=vCEfFpFVu>D&KqeE?&HL=Q@)k_w8G@Y}-nkK7E=r>eZ}U zyEYB;wd~T_zLD!3@7=w1`q(WN3f$*BaM*qg)Ag#AsZh+DJAV#6y7cMINxgzK>=-t1 z@{+=Q^;}nQgZaL(<~8SR99G?~5ql3mzWi$C<{jNRQz1WanFdAFnUO_c43bHA{M3YC zf(kCkV1q3MrT^e~5>7~Ag%jVZMU718$6P+ zlhAz^j<=6I#9?#Haj>*P%5v1L$!43TSf@*N+a(s%G0%}AAwH_1#>-i9U?L7Q@(l_f zGvcJPk5K##0)|CC2}mF~_c=&urIubg6HS&*$kLadehTWBmB^9Ch+lP4;)<%S%IaHj zxhO{-c*V$;7NRcc*% z>`@4?Nh&LvdDNPA@6bjcjWlYt+16P*nhmKXWFBoQ zVVJ~uQ>HFwD#vcuUOPuhE3oKtj5pZGlPJiffa2URz`fI&C1u4COEJ#~8Zdm-s6%H@ z`#8j?!V3pzki(gP3FY6tH@27?R>C~Py=icswoeMni66q9#+hNiQ9O!5HEhTww_p2fovKlqdJ z`tQFnNi|8n63Yp2fI+E*=1wLTy5yl{df^KuXfzmO7>0N`VahrPvyRriu4l_{7@6hy9ak%@WdLRa-n0X^yIPY2@zIFk#a8PA9bRsYE) zR(NTI0|RrT9BuD62U(qEF2li}F=>Q+?4uuBvozZs}{>9se#;(FUL;u(R%N#`8HC+r|cYtlm&PcU(BsWXT? ze$k)!S#g*3%Y+tlVmyQx1dPP|q8RZ9p#Yw8nU=%ESiX|LSmi}@4~)uFbTyQJu!D83 z(+sj^_rX7kbDXvdqzMVBncP4P9x6oSJQAgpIaV!(%8R5VXIQ4@=|XFl%w*Vb$flTp za-akaMcBl4J+sNfl+2`1_lWq4o|NZ2umlSkWEn7Klp`H5k;gF-F$gy7a{r`RU_%xK z(mu!)^HTc|g(1+;he=2SLAKa}4{qRs7vx|Fc<{|i@rR&fma(Bk^^`WKkq&LtvXKM1 z4?lb)q#}7HoaC%3Ij_~bbDq#?n9+?P*{P-BL1rGcGzwC1@<@8t^Pbqi8uKdYJXrM8 zpJ)Q8*E|VIm=tuc(RouVu0zUFy0EC?N(FQVdlP-s?lin0!!x-+hFTEHiBL2OI9!nk zJ5+I`yEN%97%G&XE{Gp}_yGw3fLhdUpaxNxsY)hs0}7;ewgC755`^(MOdWHmJ>e~3 zfBU6$DRgdbAaz=k&*16!12 z7B9H-oriGYV1hWPgGOc-OT6Vo!{i(-)}1+#HV2_!%O zv=xHHD#ngkOhOdGcsES`Ct{TV#kai9Z#xP=VP-p<=0cLJXu101@~=4P3GbzVrQ(eIxqigr&J3t#qYA8ayA*UW(P0m$gfx z2~FtjBwxRm08vLG0pl}JG5dSuppa)`r1-GaKbx;R@z>7k_13ZueH*f6aBA?LV<_m&bokXjWW0ZW$?RVj6XFoPoDkJ={_Ay%4TX$$+6$Dj+*_+C?1 zUvhE`so)L#H;_F+0UW>qLU93*37lQIn!))of9V{rAeg7|4az_kX^;={0S)pXKUR6sG*=_AqV&%AIuP;KPRM78Wj6rgSoe%;CY&z(vKnP4~B4d ze&zu~fLq1%qU{-@TdIuU;F_s4pX~w*Iy#~MDW!P`r2I&lb2=VG${e}?52$et#_(8q zP!CNC4j91(MTw_UdVA~0bUcwMK=qF#F%LsG&W$d_7Z07lK~tb|6EHu_1_ zqYG#At`AFe+`5NbX%i3&uAVfmsL>9%Ko;n#u8P^N7hwk$o2W?Xt4tY^1E{4ffdsZE z02wd=D;Tr>3U#UV0h91W279n$bcUZ~J!gZcBrCK7gsRo&azlF%$KXlB05_-64y-^H zh~N(LaSb7B5hIJVtIGeV7=T(osC_FT3LcPJ1VE30C;|8g05y=an(CevQxMa-E~N0L zLzlI6`&$xgw0H}mcKZ**@ElC5u}~Wpji3%x>k1e#2tmuYkg14_*tPk?r67tDn2A~f zfB`bgf{u$?c<`YXqqCxQZ^Bu9{{Rc>Vjb3st&6L=r$n)lv$%fSHr;m`@sLJg;Rxj* zAKY-b7cmH{E2Zmb0Na)Xic4rB;S07G0Vg{Fy@y&kz@9rRdpMCF2~iN?3LOl)9loo* zM1>OUfCmM^13rKRRFH`w%B73jWvV2*ra`-8Q3<#kAKZ`$7?B8yyS-vreB_u~j6l8n z7P*|*zX`DgW2^tX$+>GIZb@F&;A8-ap;S7&=L;0OIc&gI+>z;FcTn0)+8y}F#W zp4S|Nj2iGz2#}SgiWBQbpf`FS{L90Em~q0x)8H4ZdU562e55VDb(7$m(eTQxh=g4!O9n4 z22st?!2J&x#SrEUfdoP%eaa=KfZQcZq;g;zSY5>sg4cv;5T53DJf{nEI zo!|Q%7U{qY@<9y&UJ(|U;n>*#KP}%B&Jr4yS_RO_;cbZkZ~-M)-sUaQF`nBBAqA(6 zk{zAoN?y&;cibiZ9Mgyz`H%)=kqnc1^y4d z5YZ+v3oU?l03ZMbPyhq~gJ?GdHeTUx4(I2+=!9+LcCO@j9@2Xb>O%`1)`I^U{166Y zu@8w!4D7I36`|;%p4KCdAkv_(v^D9d)dAb>=0gqG+>Pr;oe&)UxbJQ1s3qd2Y_a^X z>Z`#IkHrQ2Fev*lomOzn#~z?Hu@76Y$y26?pxEXd+)Q5M zPfoHu+Z?7a4@$ESWYGoKE*}zs5$mq4EujrtkONJeS|>0Bh9FuNzNtlx+XUauxyBFS z*0p#Z)fw5tMoqHwa3}1bH1j|fVZaU_TMYYv5&uE)+1kH>%?>Vw2aGTaoUXv=PRC-@ z@^fz3;Ti8zJ?|TxS|V`MB9^uC0ya6RocYk4&lw-lIh|mz^LCrddHet9a*Xq~J@q{A z556FksHFoQUe1c}*r?U!qZ{Y%iuBc?^rrC*>F`)-;GpVLs8G7~r~L9NTN4mp%6C80 z3sL7jegPRR??LYeAdOlmkih3Vv=0nE2wED;NfvQH4Ij%4b>EoX?)P~7sQy!$IAIGC zuRqT`fzg z9)JEdT>cac5_~pcSy$RA>S4y7t&SfGxqlkm4;F$-sJ{;o{{;UIBv{bkL4*kvE@ary z;X{ZKB~GMR(c(pn88vQ<=+EOvkRd-B6j>4^N0cd5u4LKL<;#^KwF&6}z~)VyHeE0> z*)t?epg_Ta3RN^zD}CFPDkW#E3m2$d^3)?%wQ99rRkiP`gK(4hy0$h_+-K}^J)!(v;%)I*wH1NQA{BbGwKz5xI4!w{{XZK zxXA3_he8rdG%=(0PE>Klpd@s0GZqQ5uqf@g>o2PR8Y2e8tq6?qM<7j1F-Rhdgy=;H zgPbuGSm4R#uniUCBF6xO6VXU4vxHAUExXhb$@+j?vPlh%k&+J&uM)6FFWYqUI4<9m z^F%PijB(8Epfpo4GzwXR?8t-?7v7-iv&sPxwe(W548?TQ z>J*iZMLf$qGtC{>1aw4BQ&lykI9GL5G*4S4aY_GO@?0uP#R}=>8A`Vb^i^PkJ(4)kHSs(nRQCpQd2hv=3?e$b+tF^WuVz1TKEo5ga(Hrb)6*XF3KQz^fU$<5FRd3gI z7p!j4GVz#j@6iz2sB|q?O)F7-_g_wZ0(fAc;uV-gdI!_R-ox6#MM{0AMVDZTFYT;i zj8!t&J_-{yYT`dFKOR z4n^jr+F>P9E+Qs5#GadW`sqP`o)AHyiB`&CDG@=Z7@MK?`fIR*lp5&!jv?w}hKoL0 zF+|+a@tSjQ4ts98>rQlR1`QN?n6$5^IjaA*{fygg!V5PXI=o>lu9u!LIYquU;E)(XE2pbk%d$eRoz_ zm(TUVU~hPKr~)6obf$S%etG77{`o%OjS?Powrj8I_T-z_etYgShc9~0-{J1@>fc7* zSMJkSe|g{413#3`xr>JtDI2k#80^tse}Dc@Zy&w)#cz1^yI=kQ)jtF#uyFsYP5{Ms zn0R0UY4(#G?i6@I3_gv4&vD@Rh{pxv*=}+fBw-0x<~`_iaCo7sVD?P-LKqGVh0akS z^=Q{Z{l!p+JKR>{6o(uK#?Emc4B`Lv&UZi_CQ*sPn&ENG7QDuh?}nor;S#NQMNBoZ zI8Xf818rD5bO_FZSR`W^=d?lEaFKIS{9Ew~SVc3&QI1&hp%d%nLCA%%YjfmdAH}A{ z&oFL$ZA{w8_~k-BCQ^|Us$&}OxWbw(Er*MwWF-p(NX!WGQAktTAtz}`P=@k6n6!*0 zi$=&!ma1Q(WMwOzL(0jR(pmU|N-F<^E`PaFm%IE-BQXOmg*9s%xXPCyRT-jO@=}@0 z{EIJ3`N&)CshImZrmvF8Ol)Rzbz}1kHa5p3VLpqKq`IY#w0TZ+wg`=XS=L}270pqJ z5t-?vXFXp6OSgndPw}+bHSPcTPk>qkpJve~Jo!YH&<)LdLC|rL8D!aa;e~=2o}6>r0wXRrzSrkyTg1CqI25Y$xhe^-_wvI_fd6Y3-_*$|v$SUh#!YkRr za-p(_EssCr`(HV>$3>|e(P9s?0mLyT zatUWlolkk?#zrB9j+gR{bf}oYK<;mmt*pZ%`z2W}S#nXDj9?X~qrn~q!I{VAHpi#`}k9{uKRd_x*@rgT*ZZD>rVdV89l5T{+nW2X;=841cDa; z2xKq3Ub9NtJs48V!`gE;wzdnM?|nzya3I-75%Tyk)uoTA!?$p$;5 z6ozq7vl##TxV6MxKDUoZBL_D5N5*SzlMYDXJ@jb_$cthMg_GRmiU~tLYF!n3xBTTx zhnh#U@q(PN;0SH-gCDM-gAwH92_sQ=qf_GZPyn4fB|kYk27PacGhOXY^9Mh8fD;x7 zq#tvq`!oK*0S?&Y0(f9hgjT{2?1W+;W1mOaRnGFXuU+vt^T!r&q654CgYJ|6hayIB z0h^FO8hv*)*HHp^>-}(U4|(yc|CcsUa1$BOV<3~K`#?B=c>o}R^PTs+ zMnFFpeh}X9^`6IbRnL0lZ%Ya{F#$39F?-rSUm#b&y$6u7dxF0@BY_V-$@ejQs}!U7 zk;(r;^36}Nn>bNJWlh0qhCZHPg|;0GNc1}7xHC|tu;(ZLcl z!8Z)TE#$&3B*KXR!@<}GG292F;Q}+H!6#%xLEIDoxBwEYJq1L>f3t}d@H{)LLpuMA z2s|_jJ>-skK&~=8!!)$PLF~js!My`iL^v$Ln|Q#Ti^L+-zK58^qNv2fn1?Ws5+<~Y zP1K4H^h8{glbg7LDm=lP_yVtkMCOphFyszcl#+Qk!y4R*Tx>=+c>?A`K+5aEelUZ8 z0{{;Y2A(?zFMJ462ty%ahgejMc{sYNSVpaIMs?H@Z8(9OzyW%oy-}PyO2ES0i;Z9u z#@=&?ZyXGH_y%Jf$EYy9#z03aSVx4!lE;h3X{0+vNP(LW0d4d$>NcOPEgt*C2$jQUVhcu9qp41Vb z432#$O0qN&VYs=B%ZUp}f~iarZnR2-z)G!L3a*qAZScs(2+PPA%d+fC5~+!_v&#B| zRFC8Qp&{(fe~`=FT+B2;n%}gF^F+<{+|Tsb&fA@!JUx~eEr~Q8(Zn>;!_WsgkdiKKjAsB-G0js&)zkk$Q(OPoj5RfiHht4URg6My z3_2Cl9$i#U^@=9q(?|7FHU-qB5LEu_(xW@nI^Bw8=u}rt5C#&7+k#XgB~_&`)u`x# zOSOu6SXHgShF1;Nw(!sQ{D@ighe$1oB0bVdjS5u7RA04%RuxuiEsIz+)<;FwT4h#3 zWrkGk)eXglO|4dP<%mYbR*y*5P*~PLl>?-qhH6-^s;CD$2##MUSA2yR5-ZkYRabT` zRd-bkW2gol0oTY7*L+Rbg4x$->(^}!)I8w7fi2j2jf{I$Sd6_VsgXd39aZjFhltJ9 ziERvewbzV2*_L3~f5_HXc-W-?St%J=Uai=zxLB0ES(N`!S&wL0k39^0*n^lQSdyh# zt*}{~Jz5lDSbyMINww8&09mAw*{bLUqO}5}MOv(_i2q?)Wp!G3;De|Y+L<-ktSwuu zm73cU2(AqUY&Zw*zz47uSh1bjs{Ms=HCw#xI)jbjf~9QT-9BW z#bsIS_y@NQ-9nJuYtRwP#oX1+UC#6r&m9cVU5dz63|t`H#<*S7y<6Qy+Sc9K&y8K+ zon7Ir-NrD7LD&;&D)!P?2R#^BZ@7;!b z0AIym1#T!^@-^S|OJr-E(l@Mu1>$(2)r?-wVdzqt#%KU|`>E2ky9s51!u;mf%hZj!r0H z6UJE=VPEXObFt}u!cm~&>BAC{H+fq z?p_x5;U-p$Cl+ENjtnEV;wzqxEG`Of*y5$Qhc1qaFK!HR2;;37V=^vd%{b#w_ysjq z3N}U>Ot1!OisK@#V+@uJJjRAShF?eUV?h6gR95B2VC91NWnd2G1O`=)sO7;Z<->RfOpuaP{)c6DE?*WxXtraJ zI96&lierd}OU`CpE(d|I3RXVIffxjQ3}Zn2ILtCJHSnP*4=TY zsis2&IUiE)a-@c87v6poxZ0 zi$+{~rsaVsijMZ^`6&qdDe1VO3!48+X@Vwaf(V6|9te;o2nr$y1HvVdfX17~>D*;$ zfpBSrCW!gr0-&xPfv5&-D36lx0h^!z2S93q&ggDo377!6UR`P)h-2`gu*Mp;;p-sV zy%@l~3?S^nR^7uEh{QgOf0!T0At$xw3UKxa9&l?280^a4+~~n<#daK2$|=;-3NYBY zB)EwKumICOZNx2SmtJj$;Uvov4|I&}pI`*ss{jlbY|6%Mvwfe;ZW#08gWq-xbj*U1 z;D^_>`KBL-$LNRya{6}X8C zK=18VZ=7ZC@iDJFcyDO%hYhuY+T0Aw%<2Rg*bh*ogW41SmdCRhy@ zxPc##f+vUa*BNpuSH@^v20k0}YK?Lz0W@Os2cKjIHrUW#SaUWPRyV(uYvY16@COXd zhq?umJlFFw*N{;QG=BfU&~zAdJTLT4RU`OOEv6VcV&exd%}_ho&|@g@ZG`ki4IoPI z4oioMF!+Z|PlrLMg5#|dQ0LUWK`Z_sy{HHSOxF>7INhyq1>1b}GToa|Cx`vZRaD1y zUDt|C=yhM0(yEaxG7Ml;H^+LQU}UGSWoPzp(gkPl!)Pa2YPSLlR`zRu(Pp<1e&|Df zpxkLUUkmq?asSbB*A0FUNT^^3%I$_u*w93Xmv<-kaKW&Dpm#2?cfyrpt=M;d?{^Qa z8c_R&fagidbq9mD0)*d8g>O)XFRp*+O{mBR>9q=pFJe!B^ov)|j3=*+mlA3C_^L1m z=ZXwxHkgv%&y)XuvW-WYe28JIP=}Y_3VCjsnK$`xY50HGQZ7&iov(^=aD@&1d7uya z;*@k)NC%BKdTOZO#z=;qKOlDKdawU_un&8&AA5Fydg9atP}rPTpoX#A1*4w?tmouR zVD-K7ExW(_-ZFd29EP+%t7srEWN22XFa~a@g<1oKVAy)$7zk--e8+!$$d7!=1#;Sl6X($7 z0Dpk^CvYIaf(8#FOsH@n!-ftYLX0SJBE^apFJjE7aU;i$9zTK%DRLyqk|s~0OgRu+ zsFp2X{mYhZ8_jL(8g=2KlM5z%#D4x{_K%H~qD8?i^rv(w)22?JLRG4AD%Gl1uVT%r zbt~7dUcZ73D;6S4m!V*Ot4T9orJXu4QF{iIm{6idtt?|0buVA2WB&pUEO;>C!iEnc zPOO+>S(j+l+HC6o-+(#FQ*mP@64bBPuEH%PN9h{3-%T`qn+ z`SRw^qc;!E?AhltYv#i=Tc@La*NgGne%F=nhv5JFlb(PB5?G*t2OsmOiXZ z*T_HD5yMX+nq?vpfZ!$Ap@$!W7@~-(E$C7!|BwUOgY$8L$Untg$4)00_7~BH!Ht-s zjyv+$qmK%*cVdbT;xb(!|3GtHKAC8iNJTf|_@k6lQdy;y36|KBkdUoYq+3Tab6q-2 z-sR+zP=0o$nrpJzrkjgp8OoMwtz*n|eEbvUT-3Ot*&r673EZ255?ZLChmI7dknjJ| z1dlN+;;H9P&*0PNU4zs}QJ|n9+Nr0Xg6gTF{G0DV&ODlB@zKQ?cO0|K zGn@NyOCgV}&2(Y>BhGc!{G*u_A-$}WHh2ip0?kV^-L$7Rhk~_|ZZ0Ar8swAp8)Jtfpq*YplQ({=HWHMbFyH5i)7Bht8{tU$Kk0Hhtb;DaN$ z_CF%4_0B&ma=}kI*KzX?7+W7T(yVxh@b}miP(T6UpMxHHa)!qPnc`tgH;+1y^JAA$ z;OyH`pp1CncLfS$fWZV4Xz+mOzXKn9Xrx0H&p)WU#g04IT{9Hrn~{X3EhqSmfbP3v zFTD2Kb1&9B?EX`_TE?d_T|UdtRgG?%ac0tnK9Eg;1K88Qd-wO_pMOgGuxH9Y?-Y+8 zX<$)0>T#WFE{xy| zo9ILe*03f1y9Z?2!H+z!$QZVnOK!+y6f>RVJB&bL09v@j>^(7!YSbP-*b|C>P*E-C z_y-@d$PT(?$BRYz6AFQ&2C^C8j4xaxAqy$EHnInfkeOp4rh^N9P>3I{cwVeh5}YWI zO#y^^BR?8( zN+gL18_x@uC4ut=vK>H{v&1Dcn^~?<;sY||_=h7{go!*|2Os|vyGzB2`I$bDZ2-!& zpFjZT%yXhMRBq&lKBV~%$A0m5!k(DM{I63id2inh#}>BPI$I zcSsIz-qfgY{Bg{&Q6K{Wm1O}uTGF2al}9Hv%Rce}nQ#09LT+)9z2>40$vqD#eWWQ= z_Td7u1z@LwTtF>@>ea7$h!pIRhf&pnR4?rW5huG&IfkMcY+%%7`P>U0;unAnoY4XY z@EchB>Q@1Y)hzQUYfZkv547s!NIshj&~{^#-pq6<8x8-DQj*{|3LHQKX55_x9uNSJ zjtvF5_$z5ktDL~PL>}xoDnIPx7Cg;uF5*bwe()I_e!#D6V-tV@5^w+lRKTBPBf%t0 zYuw|m2DL3wEo8Fsk4L#hRgarXNQFj`Yu@uFM!BJo z$3B|-4`A&?Smt0J5HZxX>`KKmf_Q=E{^kKBXd|EK9Wa6a(u#zx_aBhi#y^xX9eQ*moE7!vEn(Z>N6FmcFcAU;fth$7AMqQY z$%2LvZlFRL1VLWDm^jEnR>^_QA`gD3cplmygNy(90ppKc>?-GvnqT z`ML`+Z7h&DTe-Y)RQIk5*IO=iOZ1#Def*<*ZpjC$ucHmEX(p~9sdaed zd}x@_O4rgJGOt5{lp)mw*m0PSGWa1WVmu=q{J7g)^0ww1GyBSM9te=9?QRmkBG3H5 zHcj-w4;{LN8s5&PTkj%OLpyuX&u(@>+Wr6TgPS+rX2AxEAcK#8WuL^ew!^x2_c+hc&6XzCCy0JdqDBEHjr*)zk?eR~CJm+8?c}p1n zu15W%k#507z3!zQ?!;VnbDlZP=Ui}q={)K`<#{N4ZmLo`k{?Y4%2Tat6zpEO=1o_3 z#|;8?siU2sut2cS6Lt@*yM+~NO__zBXJPmGrCC@u``Od(_hwR^;fSlr+p9SlxzR0a z6i(KxU#1Y8|2^`ygav!xI(VAggCFqJiA1Lhl*oMxZ%G$d(aKH`$V)!;g{1t#`EmJe zC=Q~u;m3UE(!6n-a4MxY{pr`O`rrSjQ5WnvM)-=C)Cm0}!s!!;*NejV#ycJ%BL+V8 zWhi{Jc!M9}t4Tcg!3q|s^~uDjM%RobQ{C^L&C+*z_1j;;>$`;b8>~qOalxV^`Q(QJ zA@|p-l798`9s9Z80NxM$wS@dt(Q{459{dBK5kqb;A1hhK|E-?@65s_2j{$}P@x>AS z@dJG6gs|MvTx5qpq*=LL#sA&d(^((}x*+Ii;4$z+2hzkGQNz3lM63P8eT^H2U`6^> zU<|!u_MYz*;wEy;A%;RCs+6TAPtnZC8lX_4N}Wozs@1DlvufSSwQE9c zF@ze-F^}LG00#j8pyIWy+qZDz%AHHMuHCyHkx&@ufgpe+{sj6<;@2-*yoeJkUd*_$ zrrIFz!@sgy#BN9>n1{d|KSGQCAtPn=xb^GUvuoeZ{o{|_wg}??5qM#UNKpb~ zl*EH)R`u@i}i;>3vpbd4^2}0x$QVJs0 zsjl|w>#x8{w%b2HJYnpyPZ;tiW&hkMN-AHFFpw0%R%`9G*w&Q9um-7x#8FIeTTl#? zW^3-b=%(Aylj08K?NR#_cu)*ws%!7P_?qiNhkhCO?Lc_EpqUF)l$-Ct2q&znqYBL< ziYV;xsqn-US8Vac7-y{U#vFI-@y8&CEb_=Cmu&LMD5tFQ$}G3+^2;#CEc47X*KG66 zIOnYM&OG<*^UpvBE%eYt7j5*>NGGlI(o8q)^wUtwHHZ~dQ|$^f#AKayJz;dg#n)Wq zv(4CJe}hdZXruiKPkV;gwv=xZ^!Azu%^mgKc+)g>)mB{pU5wVm)RP9-U+Y75+2DYZ zb|`D_WH+r7J`TBpD7BsU<(RXych#=M@(kcydkwbOhnu}P<7`_lnCg@BDLF!MXD<8f z7$w5D6`526c;JH*Zg}a~D4urXI>p{P+^iqZknyxP?|ehH^PT(df)mcgI@y%I%<07A zGvJd9KKC9;BcQh!^eXk`}hWxkN*G8Qy>?8=l3d$}KS>RhIbl1N3eGPkuqo4g87eV}qkAnR}p#@iX zw@%!SfLU`#91bWy5iYJ3BsAgvN{GLN@Q;N+bXq3=ZkLE_?9P3n`(QLeSic+QFmgPk zT>h4)!XR1^Y5Z^@--@_98Cs7THEd$qa9F%3y3LFdBVP}%$i}1%af?O-oEO2?1q3qj zbY#p41a+u7|EY08Z49K*-dHs*0?r(9NFo=&ctq!fKvML}A!XN07hA+@Fs zIeamUczmK1_ZZ1FrqGm^OeN1UX@x{^V|ShWr2NE)wmdpel4ryv-TpX9Rr*qAnaE(( z2JuS3l|v4SWaQy!846q8CdH{(e-V`T4e!}AY4Ze zO11@#QKT`sr~Y)g%Yyt+r9k}{OZn!~jPgOI9!03|YKc>r=+s3ftsF{&N>z*vwQ5Dx znmG8N$fS~O97}CxQ(vOf{Oy#V`$TJ1*Ltz5TGSf5+iF*{LDOx3b#bIvXelX2Qnku$ znrsa$!rW>FJ6Pj$S}lb2jIl(ehE%V5it11QI#t11)?U95Ce_$bj<|A_aJcw}{L*o{ zyh1iiXoMfd zY4Iw`$m;g24^3+tflFO;!Ip2bEp8zcnOw3h_ok<%=3ad>S@A}t zOW?767j33xv7%W!rRm?J#q5+lOQJ>Et-(yZaQ5qZmijkBP6G-s-b z`N?=5EuV$V+ZMOEx0M~Vq)Sw2D;%24cee01>bmC@U%An29`ZEZJn2%8sM41%aU*!l zX;3WH%FlH16!lALQ`_1>sIGI?uCZ!O%WoY9X0(J<|rmMeK=rGdz`Y)vbM9$?RGzCA2;p>VzbulBubgw zWHWc#V2$ojWBJjQthKubjvaXOEerAnT)hbg?Oz9*+WsE)wXuC{f?K>e2Co{z=S_@- zgRSA^KAkE0Y;B28_sH1)zPQRUe!Gn;+!2Z#cU|?3wvh`PwE&O!x~I7Eo)^633D=s( zzXtMri#)v0)Om+f?(?Rzh951j2eT{j>}ZF4aW?<7$?ePar8C{>U^flaZx?iW!<^w( zH#*i&yXJ{^eZfc$yWAmjJ1a#q3R2d|jA-(Bc=2U{i5KDKp) zHR}*}JG(Pk*UoLG$%kzt*@I-!7klYfB2dy3?L zjduyB1Aho+eDkM)DtHqdST)ALaUj@#zXuPdP=b9&fRcBCakqjzSQ9O{dE18xAxI8& z6@fN5eC$?yRb+iV*n}?egH|vMFerqC;|S*FgkUHWQ22r$NQGcy zh2H0C??-`3sB=AKfMFPi9x;Yfs7PpdI9a%cTljZfC|zGDhk*DIQ0NUoXopvbhc&o3 zW7QHkh;#q{R!vM8h>}PVKUf81xPNB&HFrohd6+hf$P(Yf+i_qwbV?%>sMU8tnYs83F*|?3{$Og9~ zg@6MMtiX!oxDB0%Ht5)Ik4Swg^fuDqjsl5`ng@;_D2`wgjjuS3vRI6y*EYg9kOK*i zd@~Gxqc!xXNQiKc@NfzYS&fZojA=CwLeMS}d6ES|kyT@myJ$TdiG?1yIQv)=>*$ZD z)EoQ%up&f)l02D`@yKx*NjNWwhcTHpGf5NI=!pF|UA<8!9@3Lg`41{dH7wbH2>CTb z$%#d&kFl4OZ+B#Uz%Nk=l~ZX2-oSvwPz<=>lIKuY_dp7#BM%_ym6JzV{O|%#IhH+H zmS+h#YRQ&v370b2kW2ZM<>v+l!U1|omV8qMeW^8nDU@w_IByx3gy~#`xl1YmBRjd6 zJXw~rz;TfYHX9k3mN}O-nQd#L67xU;20{s*`I)!ljF7pOLfH=TQ<;k+mqAEd z&?P1ro9@V$XgQi+QwX?8nSz-%yt#)V$v-N=2nK=!#EFu|>6f+%Hp-cs&51V8$&bYU zSb?Ub5_pi8*Ex~56PntoNZrYtr718I zpCVa){*Vgjsh`^jg`yyuxB#Hu8K2@AisX4ty)h3p(wPjZjY^<-E&!ntN|{?33gJnU zIX9lKvnM{lp&fdQ6mS7ba62s^qJ;CF0t%N)b)ra_q6WI6d!hy|`l7Zdqcm!x+!>%_ za}OoTqxR&Z#>hNva}vWzq>^Z)d{d))uy6m8aGv{rgHe9d_x0psx`H+0@j10ORA#;+M7`SDmifI zr%ec`RU@c?a|<%i1xbXc+fb)rB@Yql5%XE576_@gSOl7v0rYT@#Bd8GKn6*a2j|dO zV-pYG84BKz3pgPRy1J{p+N-|$tGhZ7z)GsgD5;i4sesc0o(DF0&Z)MF2klT-b$UAQs&z>SrK;(#wrHw+qXF~)IM1*G z%lb8Z5D)URu5Y16P3Dyr)ku{S%3IZHJHtE$h?svDaJ9(y=L%djF_m?xNmON)R_ z8?Xb5k?6{-RZBKkJF`c7p_r+)T`P$x>$G93H9ku?R4cSZi#A4!r=dEsfVXpPtAY|x z1h+#2p1^Tq`!#iIwXcA+(7Cr>>9>EYfr1;Taho-*`l@9+tBboh*pRhrOR|p|x#x$a zlj;c=JGW#jw3}PBpUM$*`MB*Uy2Fm0Xa!s(U)Wo3@TSpTir58$i1*u(QMf490-Fx(lta;Jm2+nY6+?y-irWeDeaT zushpJILzz4;M=%03$f(egw<=j=?ggP3pVXbHtq1eoEyHMYmHnxzqe<;Rigx|nl<_R zHMv_?{rkSq8^3%@z&*GDM4)-Ukif*Sz{~p%4(z{a^SpW+z-mjf6ug2Kta+}W!5rMc z?)$&ME56cu!YY`;d~*!9kigVnJ#laky9>g;+qxU^x{W%(G<2FPt{N z;JH6K!$+Kf7JNIuz_R$ONIm?+r{fI(9KEqy#bH;!eB%mBtTi0m#ZQbj#}LMSOT}b- zfK_liXq>=n?8N-53t{!f@H@eBJjdww0(OAKTCB#3lm>eLJT~W`3#a495zM#aE6C`# zIaZU#S+m20qsa2p$d4?=ah#fzTz{5q1zC*8Kbr>du)B`DIFLNTpc}kKJjza2%2%^H z_+UM%+{vw+Hm}^HfGo?TNXubo%b2XaiF^-rbq>Su$uS(jlT6IWXUkXvIJvyZt9&?~ z?8|D%tT+M2n z%JIy|=bSdf0LMf;%=x@>?yNP}3^rl#&)YE1i!;#A?6~B2(1VxI3jDJTU037~&}bvk zku1i?XVIvK(a*5ZUlRtuBhMZk3Lp*3p{&lcOw#WEhS9`;(p=Ec@v#2O*e zv24&ZJ#aRS(<;5wJ-s-(0Lu0}#zmcMrJM=;yfuo{1uH!^JRMd|oz4~-$Wc9aHcbsb zi`7ca)dVfnVU2lH%?wam4~oPES-lNg&D2g^#6-Q;+cpR)T-7&iJ#w8uXJgkB9i20+ z*S97>xWhqO!!_13*QT>LuyEIEjo5O>*V5zGpc4jCLh|+hAAQ)YCPr4Ll&DP_5re#^3%8KQ$x|Vbuz+eGx(( zk_N7F2!23y1x~ny+<48l6HajPJx5>z;PS)Z=QdI@eB$oi;euA-gabl{L*n}u#>#EN zD(-Hm9YBeE{mn$qZAQL6I37bg z4mLerSK83zz#QQm9_7h4<(gFGNq*&DLk)Sx4r*9)K`zWG4(3TF=D0)VI-X1yo)1Si z;4^-paGuzj*9l~94jc6~#*k-tu7zFy{?%eU36aw0x28o@zB_`BRE7?IZN9guzyoRO z=* zq$vJ9_o)_b&=2;0?}L`_M6~Z&V+~LyWgOYN0uS%&NE>RQ0}8+J3?F9>zeNyF4Au~C zQN{`t&$v$RxcqPe22$?||M7zV7V?EO^5WoZ4ELq?VDTbs;aTEh*!*MFJ24e`*@zZ~^HX`ZHEhRxk)8cKOQN2p$ZrOPw}dUG@Uplm-F=wQu_$hWonTUdoFIi@Xi( z5d3H}{C5A;K<@zt;si1Oulyj!{5eKu^(d6le-68iHj{nd1)mZ_keFsr^xn^3%&%+2 za1Gm;oDOaNpZ(w!0qy|dPoO_xC;$Msz+nl!e+?ZzgcwocM2ZzHUc{JD<3^4hJ$?ik zQshXIB~6}0nNsCSmMvYrgc(!jOpUIr+`Ku+9WkCfui@enG-x4s+l(4Lhb`37rLSl{ z92iyV)Pet~`kUn8;K3A60B%5$zrB718&>RCvSrPlMVnUbTDD$o;_zVZl}fPg=1R^K9C+|83vKom=2OoS;LlswK zu|*eOq%A<;3M7si%0|DHJIlx|N)AB8khNm1(4jz7;F^sX@e$)>bo3!Ftug>Y40e+4#J7h8RmnR!C%;-7Cy%cm98bS0J7 zUWKK$T5GT6u1_{xoeP?OZWM~2W%tVGm1nP{Nm|0NWw%{--+c@l0qx+nCvU?DZJuvx zHA){?P{U?db%BJpV1o}v_$6)g@$6o3xzL83($>)hwPOSxSgM3K=D1^zEm}rEHumwX zn19lEIGuA!gJ&4jhQT;vAwQjm{6J0C1#m#X1Zyo zSIrqNHux#V|1);-2+f#yN{dISzhFUkCYiT(tsTGq zQZ3rCXGXhkzyDrQ9s${A#Spe*`1Ib}AHXN4ymI~ohl_B}@NpzGOo~#D zA0Cxn+H%uRM;$lJ*Z!yQx$3Fp;Y!%!iyt@tng{a8Q|G;R-yfStz%2f$#~fbqD2rJx`wPs>cfL9a(1I7dAOSmY z1<%|;{}k#`*3k5E4AdlTf)vDH3RS4SDhS8}PM8ZYj?e-!+$9eDkl0@E;Weg!?S$uB zVGxDLyB5MF1WQ05PnHk@HLYwf_qZEV@|G?NN^Xc(#NywoP{f;9APDrB%Mw6vY>%4#*ZgXpg?H2FpsV6B_1SV$|=GYlPX&AjfX_!#^Q*R zIR?RPJ%IuT^q3F2?WG-UdeaYgmq<=_(p^}PBOM>f6DTwQ3iuL=G8VU&b2#r=n%tWw zWjV`WNdT0Lq~lzk@rQpHp@u@C2I!7Lj(?1gDc~67OA1L#W;XLwO8Cu9=12oD@&p*X z|Aaypz-0{DnT8+wW6H&-h(c$U)0}v^pmIDWEW+*s2InidOVRMTn*qvOoh3RFfx>uz(GI z85B(1Z!h!k25NjLQF2<;r7x|JK;c3I42+T(p7@7I?@|c|k_#M1Tgnt=(odKc)u{O? zf`DlHDxA__q+D>sKXP~!eME67k7FqikGfT^ZYQZTwSZ@C@eilo1razL8azZ-B3RO? zR9%H@TyOJLoX}uro*`>!3c(MdJ+Vzd4F#OCS||U>)v$+!j0TFpMJvqUAGJs#|1m6} zfIA$gj6-{eD@C^00^G0&`M3k3-S7Jz-lE@YAm{`NN)|L|{s1w3E@ zr`Ny-4#|4q!UF@qA+k7-WN1WT3^onp5)UPXeq~|{4tMw;9riGYMGWE(kJuInMsbQS zk^=z|;U5Q_3lRPxhlk<9ALBa8IvTeWP@G~OhIENxggj&-7x_6w{s)p(|GZ=-J47Cf zyh#;YyadmT;va~37$*37M$Iziw#qaWbR|TvCYKq-{Ky1cr2G#cc;*`az{JDsCtIZa z1DscNE=q`MWCe_m1;~!QHs$g4k>QwjIuxh)> z)cz4!V&sD#SQAPYaKVpu46Pl{x${!=`RJDV+S+klojM!hx}MbIAD!FjKft?<=KW(I zq-M&fIt%G*x0|cjlVd}QH1C1Zb<;z1D-NSWP+~q%KCL08VOd4IfA$&;OKlCxQY@mxD&H~tTeGYW0d(sX9 znz*HT;;nyFB6$s=)n4@R5OAP76r{*ANO)a!wj=WDaQOv4=JBdxz=;(P<3mH7c$CaO z1cHrL$=cgK_$&@WK(2U>O^K0?N|9pxdEu;u8^ujr$8F*tP6TAk` zP>20{7}x?k5u%7gsXUR8Lpn4>j_Eur5G--<4Cng?X^@pG**l}?yNOV}pn^k*D8xhL zM1z4joER1In+tBZ5>yh3bZCe^Itt072;dVwkJ!Xcl*M)dgU*8%;n2T^ps~Bag@#xM z)T;>WE0L7rh*+G(W2_dTgNtQIGBYtcCTYMhwwU0xj=Oc zK#I6TtSUy0e)?-PRB+5Mr9s$v{ zF(d|YxROG67={xUV62FUdqsF0%A&-|JNd+$usl(;7l%j>9^6Tyv53FR#+8)8tW?WA z`No@Y1&0_%VxWdA`I-7TvVCD5U6Tkb)XR(@zO@8QJxNHMpgo6Rh9r6hNBoC-OEy## zw?bh@iFh6_6UwU$%*z~-G$W6P;J7n!h(q!JCBDz z!(@ZcN#sfRyuLxS%Cv;g5$z9;ga};hiDJ0GRx`z*;3)*Hn|2(p5cN$GwNd`CLDrc( z#lt;^Xap$HH4e=N5B0nE+fUWJ(Im|cJCvrr%)_~OGq5DRUYx)}dA7aek>`vEO|6`NPs7p-|_0l-qjkdIcw|oe8P&_kq2>t^mhscLd zV?~HKO&UE7|ffE!0ERRNK(Z%^0Ma>lTQJ z9Zk^&KLu2Yh|YAw)L7coR<#Y+gb0S&9CXo!7R|{?EtIi~2=bJ+Rh1rB1y;-e!{LMo zr4$EgS%=hP&<>o|YBkrj zSkId%z=w!Se{_ht#F0DwG%K7uv$MR4;L>x|SFZq2MU{x+OiYNlJGns@RXhrO5WpFg z)*9W{hDD1`2tSF?&hseE|0FX|Wqk;Jslq|pO>$*ehXvWOFwuyBO`dQ}hZxxCdk8vX zL5SeXi*V48m06O=QEih5#VZGFz1W~g16|t(9OH|=oJ`w-*>auPqjd=;y$LOySh|P^ zJ|(G#7)!N!h(TT0OhwwPeF-on!Up6S`+Nv^<$^AV5{HON=79)o04$Z9hl!-d`4WVHm#5VU>tR6;)aJT=}(B`|aUh{b9=;;w!%5ELh+W8<86jM%yTsB0@!E6HbwBg9dTXQ%1g$ zMs|fvu!C5Z2LbyQCHH!H)TYD{M^BUZxVc)GoW)5uShLDFx9t1mx zXW#a9-~bNzhaL!LiJ(fL##(9}>WHWZr8Md@5eIyrW^>B~Fcq0vHpl>;J&5pK#iW29 zAOmoLf&=)64d4Kt{^f}f=z$&>pWdJ^ayZP#<{4(-hMMFEdEmS&wgY-b#>;&O z{~9I+XaIo=_=gMV0X?#ShQI*8J_<`v28uAtP=LQfCg?*A>y5w!OaR+-aBataY}ux5 zjQ|G}mZOQ5M86|A)Bn z3J~szc<$(y?hzkRX&I^sBt2xw16G)ag$8i$<{2utax6Do35{qgU;_=N!&^2t#nS-_ zSnqg>#vd;f8UO(upNNPPC$RS6{!DUetBP~fBRvWOL_qN*+huEDhF3f5XDEhh_-=}@ z?Li+9%$-9Fw(Ng!PhtQ83b=p*KtV1*t%fKRUa$zDT#63|@%+9_IPW=vp$117<4;%C zN>BzHmhu(920)L9@W$dqpy>ItXN|+>x%dRFChk)L7Yt|!ATN!EC;<*w?`&UNSoGea zlyfjs<%ZY?Tqp!vg?28G1MD`zT^0wE?sI711|qdYXeOX6NboMSXpEi<|4wL#3NV6) zd2e7Z6n1xRl|tep@5FkycTg-_?PvOk|hEe&`1$*a{|~4qMO$Mxi*WkF9su=4OBP zevbo8C{>79d4lhA*;a>>y*@3+VlB1L8#$v|G0x-z9Do_F?K!PFofgEuA{}w<25-_)c0|z=) z)OsLzYk=CI=mK^s6r*s60~i6qcZlacJ9(dXUu*n-c!m+!ic}yB7r20fV0_3I|Hf~F ztq_9BZW(QUNIXJO_w>|KttIV&x#hgbEcJ zT$nHm7&dkWCF+#P)h}%F_6h9h@gvBPB1e)eY4Rk>lqy%UZ0YhP%$OnNC30xROSM|W zcJd^qN)DHxLW9oPX7ni1jw~*GYl}_iR(rgoE@98XVYGog^k2P6e%X^ohg&W-xpnB z{AC>5GHl?$$zwimquJ=vr&F&!mR}|?4y!z>1q}7AKV-Ua4r2*2dZ!5NEbRHBV#qTy4GX{p)R(=)^{!;L$`#8w-SK?-TxkPm@z zWJF0Si5rtmGHC~tQA#<{AXHkZ8W$sVW_+t-AUutg+%Z$p&@-f#8Jw5W|9nDo~bJ8Esu4 zL#}?&!(dyYWO!I(AIT~!N$*&S-Z$^$;}JWo03~T>pM@r)I@dr`boz${Th@7z*(fUMkzLWLWZP=@G|W-K};|K4V$_LfDry* zV@jx@kOEGCras&3s%CvWGRY;Id~#kwu+QN6K7|Md@Cs4v)H&l*a;*hsMd!_PeToOAS1*|ejN zNBiKihtuWdfe0ql%o8I!^@u~G)~Nwg%Pln)0}V6PRCCQW+^n*SEV3+e32sNiJwEy6 zn}2?7B3ZF&6@YvPo_H)$$}lfIl)%CW{~T1{`3=ZCl`$;#F(Ac#jBx^a9Rd@mzy;zb z7cE$suwbAAAn1Svo@)ya=7Aqk)CvF>&;hO{L<|_%1qHvliq9A*5)XkSAMY?4?zTaW zcd)}F%5X#)g2$pRK&=u}tIR&|Q4Vo6uZYC>4m3{l3}`Ho8BVOmD6X-+RV-o=dJuyb z(5J;Ma*=!ngh?G9g_=kpj5Cyq#zOyYaFob~SQ3KCmt`?i?oactH6-tim zfF41aNox0)7=EK2*Xjsn!a$x;a;pn*D1;A{kq&oYja;vM=}ugVn)i8aC(pPk6O%}c z=q2$P#VAIOpdnOf&?Bcdg{cvLs??=2l^N0dsZ*62RjA&=iB)x~Rk3=DW_-e_x%?_K zzN*Wx>e83K%;hi9>dRmP|5KQ3WveiYDOb6!LKAhpD=}9Ah*i{Kdwu0AV5_(YDl)T* z%PcHn4|`a_GPbdfZR|3sh|Ijsm91v&B$d=igA#^3oYENeutqg>iq!ei_eQp? zFMe%gnqquszy0;vcW%*NSr$XUz$oxeYYE^Z&a%M`7I4=X%ryz$;-(h9Fotou#0?vj z!3GxaqkyWDVmyk8|2&x`6F02l6tnoI5_T|*V+@QX9Q@P4{(Z(eDfCfQ`LW98N0dXyN!678KbwAUs zm93%@e!xSMoZKC$*kKG-I3f=#I&bj0AP1CU0=~@nX?_DO=s^=&Ye3d7PxgynpE4S# zhb}avBOPcm?yypp(%n2(c$I(rFH`}{CzCgQa@&5J{hwktWeDuQtOu0m$ay>cdhSzBaj_i z$bkngNP^>*d7{>(vUG^{-J_A{9w3SHoDpH?WRJ277QgsNyAXyn#32tJ=L5(&0SS@E z0ur(K#4S=z?v=B=KSh*g>W|izneHMNbz32+mhA8@= z21BI6%Zkx8KSynnQp-f6G2F&C$kC2?++!X2AXQ}qvJYZA;@A{F`%uWBcA;1tVHf9u z#?v5oj?+C3c85e9(t!89#{m+4*Sp{E5O_#@0uqrR{NW?<3B@n|6OE6ACmJ95$$O&m zmbbhr|2%OEPh@`co!30{RB;Q@kG}M#PdVySk9wH1zV$FodFVB7`S_X9(jxlCJqo@R zeqdu57zLVh@Iok0Kc<3Y39?^y| zFoB3TSRC!2r{`RN;{q2AL@`R!P{{O$+ZCn}%paAAw z-p!rd*_{F^ASCEr-#y^oMPT3g9R*gP1^QjdnH&acV99kL2Y#Rjc3>=wpvjG(2$G-& zUZCGWpxq&$|E(X~>7N-L0(iB<330_fU;`}7R^c4Z#|$6x6`%2yMXG2T^Bo})TAA~i z|BNLaS*r*{eCWb4V8gex1V3cb!dV}BWJA_z-#y^N*Ub*GRYD;k+y0$h`kf(qbw>Q* z8U4i|{>331=3n`#;r^{3!l+#yF54bDO&Y>s9d3pm2I8d9Aswz^Py}Ki=Hc2U;vX&> zBqAcWjMlWA!`GpOJRF0&6%JGc(8vH`y{Ve0MMn`Pp(&nXnl0gV2@TK)1USrxDYSwV zf`ihegs)|x7ETKnY8}^sVLpUkA;`fa+M)arqZ_W_8|u(7CL`Q6;~Ng6F-D^_9^*4Q zV>3>p9sVIDTFN)9LuG6QI1Ixkaw1f~+b8l|T3}aJ9A8(UqC38$Z>gg3O_@L>{~0He z0xS%Ja;${H<)S}g9rkHoJVYBNL|Y>uLLn4F9>_u7i4-%;Nmt2C1#3_5zRwscZu2COAWH@}_M1|E5$%C2vaQR5mG; z`sN;N!jx7im0l^5%BC~$Xls^cG<4?Cz$dVI5C<*D&~nSW@EmCgp$LH!l1ri+&9hGHu2bn16`sHTdjq~>BayaPYvAS|dQf|9~8 z(BkW$WWN2}SHx+mv0|ML>#*Lbhdks1gvLWVh-*=%XuEza z$cC)Qjx5O@jWh5mD6HjRngT2w19dUby}D^A$^@|TtIPr{&H}8!@*01t;{vS&KgdJx zy+SLfY{MRHRHQ5@oWjGl0>oBp#6s;b=t4c{LN{1#H_$>ibOSncEheZ#JCs8^IAv3| z<}^gZG-N~Crftc#t=qmW+`?!!1cNNhR>}@0u3|$!4d0ylr%TkVKFQ^=3U1C8ZXfL| z!o36#B`mZ49?~AI(cbNRDD5Rkg~}Q&R9r4pI4;tj|AOa!F6f@Z(uVHmUc%?n!YQC` z>RtlsqQdH;E-jz}EyOPE%C7CwF73)f?(VMcb`LH1Zugi&@OFTv zHt+IU!}2;qG6aJ&Sc5YJgY^bOFI?~T2I({a=`@6|_=Ydqs;%0_t;k|(_yQ^QLT@q< zZ|!=n=}K;b4nw_GlF-PTzxpan5TE~Il;H+&DjposjfKz-11$9E<1R1*H*m%%Ed(pA z=+dv!Mun|rZhcm8C}=PRV+<&$aOU1E{U$BuTCNKxt>>Bo>8dX5 z*6{4!@a&ocE$Fa0^sp?TLl2t+CIoR0V?sHo|3f(#aT1rq5;w6DE3q?_LljT36eIBv z?=TLh?&rQR28Y5ac(4kuFiD!iD}xtQA>j%z9rG6AChm1q z1~_n$I{wMr~5Lv1eWGPAydNAI%JMk^_dbT6BN zNuRVmr?g71G)n_BK2l-h_!9vEbU>3b{`xHb)+Ivk^wY(%!N#=AHZ)o615b)ZWgPXa z?gJ1>!z@UHQX@4G5j9aG^;9SIQA@Q_PqjZlHCK1_Q9lP*%R^W{$F`1xJeW0FpY>TU z2V1wbTh}r+#I;<{wOmu|FHo#EWJF$5EJgRVUt=_22e!3NEiPxYM(6Uh>as3>^hZ0b zV~4azi}XpObW5kSDKu?j5B9{y|MhZg>pX-8M-=smcr|I4wrQXCY0ttegq@%oHEOr^ zXuq~>qxS4H#cbd9QM-1G?6zg_Hg5kma0j<=4>xfaw{gFAZ6|kc!#3EtHb`)U(uAEk zOSf{@Hf#&EN|=gvZ#Q>$w|9Rxc!zf?OoAxnLU^AydZ)K~ueYhVL@vBHe8+b#c*J~* zgnY~QNxZi}n71wP_jmI*e1rEa*usDVxO%HLg3rP+q{1u=Lnw+j)t0+*b zE=&R}Y&eHcD`S5+h=;g{dvr(>ZDI2AM{_uZ>q06xID&uoSFpE?&$x_F!avwTNzk}< ze}sY#mTx(i zce$5;IhcpJn2$M`k9R7NIhv=rny-163xqFVIh)71oX7btY`I6&`JLy&E(nA$2*YKV ziZa-OGVB7?`~%etI-(Q0qVK|eH#&URc`j&qq$`7@_xF3(Ii~NzGT4Ha|HGTVIZVvC zsL#2le|o8ZI;fk(sIR)Hd%CN81gm>_OvE~^*Ls_SgsIE9o1c28^E#;8d8&uZukZS+ z^ZKb1dr0&;mM?oNH=j@c7P9t7OorNj;x@^M#m@>Zwco5Yr-YUD?UU8z8~;(hHM_Wr z`?xc^y07~eEuTUI|7cwPEgeUDO!t$}(QM?<+tg8qm1SaJ|2x1N_F)e^!56&2A3VY* zyuu%Rz&E_ZKYUtvz=-#pf5y*=miv*P2mGRJjKz1V|0Z#j$E_h-|?{Mq9)U}Af|cl+2U zAJEMF)oZ=o-#y;rWGv?6F%*5=|2^CHoYdhPx{u;FcZkxbee}_^(UHaT0lwSI3f<>D zXH{eVn8@M^9KX;N5Aw>KlN9?^MTc)zrC@XHTCjI|5btlW0++M~i|KnsOsjr!tvFm0FUhEn6$6 zQY|WP|5&Sr2~WwImTg;EvuDwsjaHWIwzhBC#&s(f?p(Wd@zT|McW++4cGIp+JD9NG z!h``QM!cA@+i%~S3AwtEK`KAdMrf3b=4uDyIDZ>vj}6P0(&E9-)!bhR_wn0t5c-@%6$ zKYp8F^W@Qg-(Gfow#Vcmw`&*g-932l^s(Cq4%;wTsjUm}AYC+K&cFi=Oin?WbR+J! zp%#o#!UbM7)qOdmvnUnB2tUByzy6UVWWf*YY$!5LuSZvY77h#N1#ul?7=bd~y z|Jtv!|5Ou@AyTj@ki#K~JW0a{Z!!+6BbjWn$>u=R%E{r1%xX%1KD>}N5xWx5M0xnZ z=bN@>EYr+0(M(fK!oFz-o_#=)2b|AdA<;*JS^=lZJ^6(2%8#G}E~W;rEY#4WYCCko zK2uWEr7X2XPNxyQJaMIb&RLVKY&eZZ#ZNsA71U8hEtS+$O*NI%Rms%U)mLB4=A3(Q z9BIGL{<{+v*ck2gK%}NpkWfd7JyOZvBK@aWM|~A(S(+eCHmaH^4bVhz_*rS5c3MS? zmqW;yBiwPtCBxiv(e0uOF4%3?-FM-QSKfK)t=Har@kLkPebE)yUvdGSL*Ri4|DNNJ zgAummkWDtRgyDxb=_TTbd-Vl$>_-5t5`^{j+nSQ-%?_*_Ewa(l`tK zRCL&9X`TsCX_Z~F=AENt*(07SRQ6{`Wt)ksRw82U%WPSK=bObWA!FTm)velUb@9zw z>#e!&dfs)x<|6E|#rB%ru-&zq>Z{qFy4^6+h+~gJoN2@v`P!LGGL0XLQC3=+;zu5A zU}=aHJ$+6*SfFW|nepUMdR%gwg;w0c$#EtL%c}y-FeZM6sT7=-^dSf8InpkhY_iR6 z-SyXDk6re5)ka%hsl|3%>@?)y0})3sVFedl?!)Jvd)|phKFK)cj!YZ%|A`75q#1ez zOv|xX3iHNs+P)>ty$|20rfh3g{GN-Bc5#^GG5N<6nQn=lb{6|~_WSYAU;q8>)xCB9 zY1akbwLc|knbRKo+-Hz$#jiq`svqj&^@my%gBZ^s1~H29jAu}@n$`pcHM98) zXlRoj;xuP5zi(9DT7M}1#M?LY0kbZ)skoW{7P?}Om#DS%0 z=wTP~zzU5BF;n3ATdhQb4GS`4SHoPHv3`a#qwq4Az0}?o|2bH+q6){SBjMclOd=B& zF2s5?`Nuxu(J`|`;}G(?gC{H+R;oRH49~|x782045Fw^W zSyLGWEUIu2N!?rO&T>{cq^|F@%mQsnp4z!%x&(9#83yJ4agQ1jCTeDkL_6^sT;UFv zxWzT@agiI`ZMHL_(5OZ=xM7WQV1l}pa6};%>r$`9A(b4_#{$FCrp$gs9!vaDkX~CQ zEe<89T3QxSTT2u`DMd-~HEMcm6I=j|}qq18|d@UCiLsUf5SjqQBLER;N!NkWlwQLd)^KSth+z$z_JSBb?FBDXVbor* z!l_Z6YE`eA)vb1Qs!1K|Qp=jwvlexzLk;R&|BHIloZfV&Ih|=tUs~92sPwVxAZcYs z8q%70gtJE>iDrzV6tQT=EtrArTlkgAceQ3Qu7Qq9XxCnGz=SqDB1Cd%H7(zOM@aSo z#)X*T7--(J3gc{A`Ccw&GGW9INB{tV58MMePy;jbobckn?B40^b9?)n%uoP$jAR~+ zC7=nfNYp~CwRl4oPMrmii~Q9kH~Gm?o^qA1oaHS~wa7t^>MB@aNUlWf?<`e4tq#v~(dh8ZN03 za>N$oyEAcS!GnRXo$W6$L{0X=h%-DP{|QuZ!z>i;Jq(4N@6PfKe_1l*gcNxu&O{6^ zGXAbVG&!um07MmX?sCabp7NEq{N*h#@|jy<^DvKj74)!(MXaJ4v0w%?99)g*$^l<# z05eGR@eYfpB^&K<^GCojkm~WO??!qS6$hnn2?>G(7hwDG1%81hAe<$l5JK^f|AHs5 zgZX(^PUL!@eWk89$bXi1LIf?7d1MtaT=lA=#VQFgV4nT$cmMn0|Nbg;J_}%A!zJ_} zi&b#r8q8n@a>30U9D&^GMGjbj#Xe$w*lioW;U4Vm7)&8)I%^m*Nc(_~N~Gi|m)(!=}p!!LC7%@CcDG36*fwMvms}ZxBv_7GxnA#NisM;s5Yz>6)$(04QF<0Ej>$ zAJz>q$N?WhqPz?Ty>3tjlS1rzV*_tv51^SQ$ z*UksnK~ZL_eEe<=8PNg*3?>8*Az&dRVq(A!4|m|@57sHHZsGA-uKsS${=mTg*q{{c z;1o}B5C*{x5@8TpF%e)f7G-f3X|Wb<@fKmx6?O3yb+HPF;1`MD2Zo>sh7k#du^5lB z2!N3Yuz(Ftu?mzR8l@2n|Dq8Kyg&)O01L373brxU=5PL%Pzk}{7&3w%(xD#Qp&a-R z>B#CDi~$qk0AJ#u#6H3Y$uJ(G2lpiIIyhq%8nOF;Y&I4I4xK_9P+;IVzzpzkA@NWV zQefaZU=p&05kBApfxrozUK{dNBoky(7^2>0V)o9$ewK{!!b%cG zZPmaa6Tkr+&+CD1ZX~;Q%H8B|5+ZI-mnQ;sQE=0ct~V_CY6Yav8AU z7pT$|Tp<&%G814C43<$Ev9TLBPYLZ{89-tl+@Tui>KU#f9jM{y?qwcTW`>H0O=bnB z(rnFK=oLoe7>?m0|Kx%9_>KmnV?qcLDVP8u;ea9g;U5;WF;yW2kZSGzK@sQy4>#f& zoWKMm)82TpGd+`KcH$Tmf)rv%Ch|e6vcVa;FbyDKuPmw>#31reEfIKSf;H01PmXHba6M!~yl>su;K- zALe1p?j;Y5;Un^aez=1i@R1|ptsy`mA|z0mT7e>T0W`1y8~&0rMbb$MvnCXABSK){ zQUU;Ob3h5S;da974q_5vkR|S6FwP+#xbR)Vpc3W*3o8m5x?vw!%?`k>Kt(bKHlQPh zG9)Y@IYaa(|NG!Lf^#0Q;VKis4%k38Q!WcKfit_|8U#zMpg|m1EFH$pUicu)gp(gE zkvkj+9;mPD?!-DwffP<-K8N8K{IUZ3?oehXSWE&ynLv1iO(gQ694yqV ztbxV&!5BbH#N@ycjDh<8VS;oEJkV1guz`A(v{SDmK1%}@Mq@OFp;SQwH2BgR>T^~3 zqb6ULti;`C)zvtveiu z7GB{!J+)r#wINJF7ie`u!cI@8^kg2nYLcKKn@xK7xJO9-qlE*0Uf%b8+3sd z|8${FbPs0%*E&AS?|9ZrIRI-B_iEuTA$X7`=Am26@E@q*UAh3>HbOfksvbCE5L7J_ z68CdE0vzn%)v~}2?i3_0fCDIi1Gc2fg>v6UGjh<(m}9_p#n!Y z)qWv*LDv-o)zxMaFgfCI|G@#!Ppq`*6Et@twBbj)2Bs>3c(CqFvSAv6w;aqt7K%3t zl{Y|`7a)Jhd>Ocb8?hz`78VwiCHUc8&w(S-wOufQBizBFn4u%I71hAjfqzzG|GD<% z2BCaGVkl|g4|4Q1BX=Y60T&vfZSO^0T9y?SXaUoMEL5aCXm1)WCK!k~7_8xllOc(d zVG3oTi3wO1P=OXuA&RH?6j0$5F5wigxMq_EgP4kh!8nY2uO>{!XlLSJ&mwY_0bbg4 zBe=n$xIs8&lS;)HW3~2#QwKcT!Qe~KiZTN;GRX*w#Rstg~ z=2ASOp&iby4eR)lF}cTRVjmJh9%`b3(SjTb1QT>84m#rKD#{%=0vsX_3^F-rvB3`T zSmuZz14JSS1lgj*i5uEjI5#34SfPf^25!$`3>`U5C|QAZ;+2`XnVX6x|ETvMthXl6 z*eu>{Bl6%~Dxo8gu8^HI)!4w9e^wq6A%tBm3zUEcNHhq*imZ0D9uN>Dlz|lrA(2I_ z3&J1|f>&?g!-c=DD6>M{2;PZQdpg4nYncMq(`H8=|3+|IGxb|1PWj`mc$^ zXgYb&7`g%@v|SLPBd)=s#GxZNH`P2Bu%~q%GQreL4hwc5IXglDQosqy)~=p`8LB}X zRQmR)fu8MIYic)ua_4H=1zkkRUkZj`4#8jyCSeXiVJyL6cDrFVffp(vgM?bLiMzO^ zVkSiMAX;I9{h^x6;vUpfO(lyX5|tRbp(8r_)C$$OcaH^n{F0%)KJy85Gi-~{|tBk(~SuCT#GTO5+1681oiNQuPv z$HaAf%28Yccf0X>3gS)n5!wxT4KBjiEVzyPDEoF_G42*8mEQ%wnCz>pR8 zALaoc%)!X3JGuPtxvJqB{5%-0ffIrO5;%bmI3W)ZeX-&|jpUoeyI`BsJkq&aCXPV@ zUx6m>pUSe7I@RnT+ILk0kRUA2IfXULHYdpH+@T8doWWdEe$xrC*eS5|3b629 zt}yD~HHxD)>Z3e?8=l?V5gv>`hqD?NCg340?jcfG&s{dydvlaZDK^y-;ouX#5iwu~ z+Wghnz!f_o6OQ2*Y?36{p&nu#8p5^Pq70q#iksrN<88i~W8%sU!W1SL+l3+@;KgJ) z*n>SH5jvOSZ{7y~7?6G3AgN^V}f8Wy$2ya zN=VsV;y`4?0ggQ)yRG1KzurRw-~@;u!*zC<9_fPI3~(C zCD9^bql6FMManmVA42__%)uiTJk`{Y@Nd&!H=r4pu>PEJ5bzHbpty-wLI3t|75sb@ zp3C(7@91P6@XJc@F@N?y7bZ9vAsXH#9v&?s9z@syYt9Cu)iXy6c_TRX)N-8mKa(G@ zVQa&Y=5lWHq+i{kKjw~q)Ijam)_~F?&C$HS(VQ*(pY7QsK@-Z~{57Ez(trKczuHQn z89w3t<6jo&So!TgU@Ih=l?m|?Hhuu&-#=Vj3Kk3_Fd;r-3>iX8C~%&Yi4(IxyofQQ z#*G|1di)47q{xvZOPV~1GUY~o|K?=^|C5EH%$YQ6+PsM~XU!};dBW@o)Mk~6S%zBS zx$~$}rHNEJeF`98a9pK22L1ry{r(E?>xfP_at>{hP2+oFv)ZFth#10IH8M$*R(6Yd`M z@vKwn!qTO%x7(N+oO|3#>bvv(`mUm7a?=_6eGt28;9;!gyUu)aF zB6bfOn}{Bt$JXNWuejQk7BF4%nqn@B_nBsoy7n49*ed%jR{Kb(lC@;B&u4Yn$2!+- zL)ParFAvu8UFa;uxad3RFSC*msNyS)g`AdA@Ci-}5Rxgs{`_{;D)^DgbuIbdbihS5 zX_DJR{2E5W-QnMPE7Nc-zpZya5;_g-(mq&89QT)`H>ddRCCcF6 zZM`qToEdw{Pt(e*)l=Y9w%r{ADz9A=2OL!vB_i*K)3RQ6yB$0pDPeEN2zBi*D{6g^ zOwUrJuUv$Mf6au_ZA$bTu8SB4&axLTNR$YWwN6yG`U%3y5y?E5^>nvGs$`C-G315b zNkJzJ4T~n3OUW?1&EyxZq9R$M4gm5Vw%u5#R23O@pVV|oV%H}*YPnJjrv}%Fv3S1H z4NFF6P!5*zY{Z0mtxraM`~s6e4SD6;Me{EL*z_*G^nFAOTGi#z9A-GPHn?dLpCl7R z4BvFDlqU#g9O^T4sP#A4;i&G7JNhNzlaO&qwep zrYj|W;LO!{80a?|BxMfS!MklB^hNHfLT%ZQchjSW7o62{;Ctv|Usz#zfTg>gN-pu2 zipYhp34gfd*>h|ZlCV#!RU&J2VWkyFeRn<@SC|V#+ftG0>x`;0TWWREv~T4a@W^#2 zW$^LHoyG)EE&C^o)Vutsg3y&jD=BvAW$L(~NX9mx6E4$MUZ&xyTZIx{`^8bq!CCFJ z*7#qS;pKL^pw8C#7{oQ%&X!TcpG`%%%?%?U=xw8~qn$}!Y$jm`b7VQ)qy=tDC8_Wz z)eEsK;vlotQTC3H<#ds3+V+K3H3t;6aK)@*KPb2Gs5BYdnw<>Z#;s7MWJ){f05?oJ zy!y3t&qZm7GRel;w2^;VB&X~7g7V_+94*rBbfWPcck1VNU88R;Ud`xle1a?{+w7=N z3uZDa?<%=L;JKP@M&C}{NIlAt0Vl41<;b;L#?s1b))fWxg+|#E>DRUz-~Zrf`*R%o z%xMw!GsbnQ}R%fDSJ4AKadZf&AB1mO&M{I6}&JhivMF*+vdjAQ@LSnPq z&>d2De6F*cI5UpeEZy!ii?!d)X+`ywG+5mwO}{x#`O%hOZF3(mBU-WsfedXY;gXfr z2MTHiGhsF)^o7IhS&pSNyfXn`zN61%>lipKCi_y%D&R3I??=a5w9~CjsuHlIViSE0 zScvbSG4Xks>59 zN?Q;ThJy39>emVG@ZyT4644uD!_Oo}!A$n|v(Zj3b~lI%I8wVkJ6da6+&$EErM8vg z6!8`@V$n23-nKC?5W}|So?}wxJ1f2FT;6z9 zY0o4!O0fX3!7R;vL)AUy_aQ3x6aOjH?uH2zLFd+Se!pY z&A&L;NBfs%@x|enB4pz4!l+UY*O;6Egj=$_gJPiY3btMY#GpE^U_rl1++@_8ZxIo| zoiG_KW_G-oL-zK>S4Yfb{2h5~FvjU7Esu%5dGfM6;|y?}UwK>nUk}IAlnea5>GdCC z(?q}gpG0k*xQ{D2lW#Bb&%F1hzKS<__;X#%8`J%IMj^;YG=RL_ZJk@LzswX46;6n)s1+xWYCNb@yy&_?_^X?_LCdy~GeIaIPGKEQ&rm>=;f(|KB(I(2-_l^@*h`tGA$fcq z;$W*1kR^eNH6zjzg!&N&6<>NJ7|d$^H1RP|+0};5J|>+Rk!*!rCLO~HrSaD#Fd;ep z=dR{IxngK;rXplDp%hAL5RE@7>!v!Z5PK?8ausz&Uz$eM!CdQCb05lR^9Ek}P zBeCJHj<9mX(^`vYI+ra$!E4=)(8>nsD1lm&@wBo1EsEcgrr>R%0FNA8lv5%!qG5uO zK=&?K4+`!iI&M=j(4!0H_!G}J8kqT4($g5vABy*)1ejw3GqS-t$%I9%>A84^JD}o9 z14s^GB$m-QuEY9jl~786Gj()yo~T+ZtCCHLu?O6^;TMmqy#J_;KL)@#e=_!bKgJC} zBD;?yuN0y0N@flphh(q13NFR=`)hqNAxS(WZs`K0N0Pipv2>5*B=>ePI(HqwPDlsD zSBH{tACN&-2%+5;ZH^giT&wml97*+vuESGtXgq|MHk! zmn7;4lAmO%E}`b~D&%c^q$jcr2;Jb(`B&dF)&Er|2c;)90Z3+E@)!%!d!~l`CG}oz zOMYRh4026;xk^5(6oQ!zC9kGvX7M(X^(L=L6&p=)^wxA<6};hp`9|+0*@dt_)Q8mj zjZyL&j-xcX2$FAxBurRo1%^B>FCi+z5nbV;!mHXcI2klV>8S*q2-*O5Z);XjdX)pD zn9#vnfo45DwoG~eiM$#K1yi6)IEn0Gq`9*m#l_og-K6J+|M<&H`k%yIq}nbiPQEG7 zjA}>BG{#x|tVlL9n`YfAJ~kUv?N@p{?p0>4i%uXqLvmE(Jm>5jHA$D0Y{%wo>xFE0 zZ}3fN6lSPv7oS~^Xb``xdhSs!d?d$z3VhZ{a<0qM_={<_~9SiT&L=I~T9r%ox)(THV=@We^8I+MgyvY!% z>LR>*Aw-PvV26xL$!pXYD1H?M#YGswcrnGakWES<_?TD%`{lcFFR}}7{AQ@C3kKSF z375Da^+r)ilYot$(Xw&~t@0a(Y$*GN1NU(m8#+ljq)gzRcu=2*)CD5oEYbDGK5NoJ z2DgHBuS74~;vwX@rEt}$2+#h zpXPwT+0m^Ei?CdQJT7h7qJEyq+8^50MM1F;Kj&W+#m*IwTRAdWWn*jVkp-=vfHXS0 zbik^!YPn-$Eh?FOZx%I=%JMd=p*C$E%~3T~$M)8?xO{G9PY_?8C?p9zKWWtqcYnC) z3%(>GxJUJLT{{{{U98Qt0dqy z?^L#<`mG*TS|9S8VL#d<@Z{S2!)vF(uJY+kyH;&UZRsAiEE1$e!M7u_l2g&rvdlE15hF}g4}a>@8mUdS4%LwZN*w5*x~+TItOzTo_@ zj_vV24YXtZ0@^IdOE|32w`xu|zS%X<;mk4#PJZEEnFmpvZ1QYDMauT`>jBng2F&?- zrHwP_j|)>LIdD>Z87rY*C8$iB22Otu8eI$|;*ro#Bi#_P+DL{0w1oS%ndP+YzzZQHJJ`$GbO@crn(tpO)sS zLpj_j-kp&RpccU@S2E;huUkB1ggZ3-x34IJ22UkDQqYC<`4#0a2W&dG*N20>o5)kGH|5w{b82;u5rulaRv;m1uj~ z4>^ke6PUF6z?h)t{im?dC z=XaE|(=7EgFS^YG#=P$(yndqZX?|Jy)>ZNhKZq6ox z4Aq9?_^TL#SWYU`y19ibF0XzbNzIAvLse4BdA~$NxhxOL?ZzTmF@to?Qy&@*P{PZs z9~Wi0R-AgXMldZEW@anz!8YPhyWa@AsMAdSsr0Jt@7D+^RvwR{TTR!kQ<^ZF#}#HkHB;-E_v@z=8*nnt zQaqCH6BzX?9X+=Al&H!-{%$m#5|7Mx4XbWi^Oa!2hj}@>Zq6m9-7tFZH%A|chq*SU z+7WP*d_hF>p*nuX{hft zU01}+{9Me>{JNhs-`hR_2Q1Dto8eoO-e^(gzfAuS%Ow6P{Wf7~g7cbhk}4EU;G!pA z^1%B2uZKfo_gXJ&y{%|fx~ z(U;ASG8XZQ@IY4^ivBm>&(|ni95%~VxFgZTI9h+n;NRI*) ze*FG-#2@0G??rvuvv9k{Z#X0;-=K7yg!0KJT>~e*UpPiR);WndA5NfZno!I9)0%

    Z;um+)2JcPpM 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%0DPaz%NVMsoE)L`^^+pEc6p*@iQgpr(u89*%;@8 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 `!lqCkCC2Gv8&0Zdldnr+IS)x)tOEDQ&y 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

      6AWilTqG@sZm01v6l zPgtbbI}X`3noOB)YzdoS$bV5}T_j8 z-?05s6)tiNMKL@162UV!OMYf|8wqnw`OBX0okU(B~y2lSPq!C5TYgl}szU zvp=zBcra!-Y$UAM?o>iUFd0u; z`hj+@Z5GA)?h~tPMR8&yOA-bk__+cbte9(xCB>oillz;Zza($f@L#tKggp*k?I~Y- z>N-$e5J=;`pG#yayy|2p6bk= z=2ezPSu7tXr)gbUI#>2Ra@Q7K`sO5x8*R}ZLrMF2Z|+ZnuPbFWvrDsQQD@!tQ_7z)4a z`gDbZnk)X)$5nwY{+zA#h@(^3A>o^&Q-!mQq=}g@)?&AFuvsYyL684cd9O65`Qw4p z340Fu&Sx)l3M?0EcGDX9iowtdBX066xKiCTRlON2{A};bqkL~<#b}4CdmL+1N@SBW z0J+1M##^R}hEdQ{@#C>VafGwY@`q_8L$M#bTLgPYV_^rz_Zew7K0Ge#CmXiDjMNkT zlg68m%oM%y-{(W!7}XA~a9lsT_x3wfbhvS9+RKkdeqZW193J0WNGXl7i;5{iZ+;%d ztmCrO^L_P^t7X_tO|+CdIVx&7sytdwETd0oK~B?`c}=NuYvt40Bj$Pvrolc?Qc{t; z1Qn$Ui`twvXwc%``&4Oec(g4(v?H!a$?2{d?yi|oxi`Um`1pL^L212=`_J2>1Nf1~ zu=^pP>SSg7kXz|UcxYc(@gTJFc=7oO5zmDZPl6e{wdfu%Iro`#-`SP>U$v_1P>*rq zDjVwKP(~gFS02?aZcS^2)yS&*4xYvw_lxAJ9p|cplxWdvIn5fLhpQ@-<@*Qjfy;gF z1GA`qV1>uIS^oNClyEg>of29S&()`@e_s?as*W)os{u_)SS$l*jvnZAC)huTMR`vE z*}QmRd%A&2Q545m^HmCc5ke-_kJAP%MZ83RcylXZjwZ+W9#OYm5dpQ9u0_qh3!xSWIR0}*)gxsk9oSv}ru?C-nu0@tl@=<;z(WJ?wrK>%O`@X&5P8|hP z80w}-eOi8^vCc>T`fQ8679@cK8H6z=DN@d-G1>C7-G66R22qdlDah8UrbSU2d$A4j zud$yk;GT%s9SQrKF?cI*@KA7$^7FPHvMup*18b;Hyq@mlS(=u_suKv};&KE~Z`N{G z@$;uf^Uu$gNDGLBxeC6hV|eAwsFQhI%jpCHR|oeGDb>eqVpbm#3kFY%!I(CTyA3PIHj1=S8g zZEbe70|AxI3zgmal*@Wu;J!AhrhK_x6)bd1BV^F|MsL1eP2^HbS;)w7&*0CQ9=;Ht zs8E`Hg9+81QJuHSD_`BD2D4r#Q-2{dnM<=lUqoYr0) zLCsSk>m?Qo5k+~RpE{Yat;`>5fj-kZA59@)`=;`>5kcuKX&cp6=P`1M&f3eE@`doY7ExpN_emG_b@W%1zjn86@(XK{_PTaf7YRrg;WP91 zU(!?hDiXAr8IaWH^{V@AlSqhyxyEWEOhMRlW;S@fDXe%Y1Sp~dy7n!<4xcLnQ*jl#%f4qv&ER2QopSE>HRGjoz&r z0-1Rpn3hmm;PJMd_pK!Q=R*6OC6b`L^dAODRR^;uV;@g;4_7uitVs zwU7vUR~)xA5_p%rXvuw{kliX?Mb=uuAZ9%qK>GTY1z)1Fv!zBk$o1x}1ExgL``UWP z`$ENw+R?zeR{lnpR-|_8THf0Rjs}+b)4C*y)>c4MIf}nz^)0eVqCFqZEWjUCcLw

      b>uc;)fcaz1I$| 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∾}_Fluh1|r-+QMp;HEIdtvGV0n18p6pK^1QtaOfZ zvvGI5$KBXLC3b$N{OEdpfMS-4|29H{Iezdfw>9~`0ioZvj2 z1b#YL+A{s6LTiU|4i0vd+Oa|6bD{HeVQg_}!Ltk8b}ELUzUD-}tFU;w$+fsC zJ-YFoQWY0Cl!mAmKe(1_SY6|}f3)fBA3dD;n7?b%)=Icag}4&%8PI4jeSdIPqVY`P z^G@~jhIn}P{q@x3K`W!CAl76uQ@6_C^KJ6PWtjF_A~IS-WYVL1`C|vXEPiYGX?sNhmx8*zVwYRv)|ZSVSp7&oIi`9A z{pJgody2dFN_bv+s!IPDXQsW&k3VdQ30?~M$Df4forJ&!x7Y2=(g=SHRHtP41n_GJPI zv#tg5;8sHKz2grxvxlC4F?!??wddmza+XN)G-%N-<>$O=GaV4+k@*w~`1qp`XaCb? z8Vt@3)G8EuDN+^meh$WU(x#>LVPX=@@O;iB5G=NTDX}If06r8KQV{b=;P-o6d*S&8Kk{<1zZ}oB3AGnSlBGN9j-IS7y0?40c zz}g>@SMc?}-r^4(KKt7zyIUU^b7nZYM~nU#4Rq>QBGWX}?%@llIzx zJ!!LXb|1hOtlse_;$<*+t;tnyFfeN{P1oLbys^VouLRrgwdsrR^2!8r5l@M6bgT>FIS>xAl> zaYJ^9zn}Tk@+91P$+h0lGTvlE7Wfm%C_?9qK>KvxE5(){)A;O&6#oR7$Q&Q>?7iRM zC!wD_BJ*UKa~L_}(0)vldiDVQd2Nv#IsI|%lX5S31{I>d3~0 z{F%U84N^PfXoPd!{_6y7%epJm#_MxAS)B_x>*xLned`nXIcpOlWl8G>fo~gd2C?h< zw2H>$)SXLBLKM;Y0gt_l2%=*Csvx@$$ zdp)!!p9sr6$`A033pkY8I0UR67mA+pc%4Y(91=Q(~nf zimP-oN7(n}6^XlSI{!-yu}CyGqq29NEV6JaMzOqyo(?i<9~*tIKR423Rw;MY{|$_X z@!ReV2Nqe#;icPaECd@{V9hbHYyJ#r-XIo@<*(Zrh$RsUKqV^u+(!FV6_{~j$ZMK_LsM7rtfF@Ko+~)Sx;_rCPZ8zIH6ojU^=B~%TE`~%b{=a~6 ztSJwhn`(=|c5eb^ehftk@Aph!2)by;)Ae5JRH2gRuRFVWl$$@wi8&r2H>3X>7`LBf zE8nm`bKfTS1B|qgiM_E78-dV85g}A|ZD$~I#@DJtj9^`fZz`g8xUkBh{{@WG=RVB^ z!e~bt6T+SMQAr&8$*M#$Y($#I3tnjLgyI=^5%{t>3@A!)dC*OBu3rzEB`b>}ncFeV z?kBiGp1AgcrAB3U#h1PyS)`l9%av$}3QEyg0F2A?#aHYEFnK(1?-VjTHli$Zebl(= z7}YmC%!%7OpU1_gwzxh?xL=I?7cjn`LH8zyDHekL(N=;Pk^5AX8-Q$6hWc>)l{ZL7 zkbw)H+y>zXgoVlGKfripC~m=VX?d!Fph`*Cf@y>kq*cwfZjd~tO1J1lP>&c+?%PBS z2=|L!{a=F^`(_cjc8E!N>0rLD;0*TnsYY1!O8fSc>ah!8i}Gld_-&BFwBQ01u(}P9 zzv|Ha{vLB)A2eB+#kqhxAJ=6IGw#%f4jMfdEAcv2C$)bEPV~aMo2t+&h@!d-Q^!14 zi{n@($7#A8Nl)-}wIxSNAjf|I!Q;1J}li2i2LCOFy0RQrI3a}p@v}=%m0M_U75bRdD8c?%Q0+YGksK9WgAxe*7s)g z_Fb?fY@BtHb?Ea~|N9ue&C^@hZ4)Icm?&382@f*||L23%*iP|hD>2N+t|-@l*BhFg zcd^sca0SjVbl9%(TL?x^!2X&19#o1baXyJ+Ss&kmmb64qVmp+)Q^=4c1~fDrhT_p6 z*8LS4*Ao>B^HO98ElYkC%W#6LQ6gRgjx5zuUH5ja1i!{s8j@oqP&xxf39=+31a*&Y zs;7wl9t3X`8Jv)g){iVdo{#fOi(c(Yh5Q=IM3C(#e1MfAWxrDd8V=k5d-RN)+LvVE z4XPXu$knb1Bwc1d{*f+3+$q+rYBz3_AJcmcpmKPHPy_n|eGX}ln36UU@%#fAmn_4} z%fk?UI>HdZ?I*lvK;(LzDGt=yCdB&w0gMZfOaGOn2%?S z0W%}jqwdwHMDQ39+X-H{wB)a4q1w#b7*F@#NnfWmr7h(a`FpsINXvE0=Gcv6tFhZ5iiS29`}U8^I>9JsyeZF zv}o^%2;xy32_Efux%I5os@4jat3Q5FmY5-Yc~v{U$7JFL>VhUD8G`j<8cq&4ny zotcJxQB&!~RYY5TwANXLXYP{Kp19FAh6j{Q=6mguc&j*CV8=CIKjx6d`pN7)GGX@8 z78T1=KKbJl$P4Dd$(R6h4VO*9YXB3Iet22%@u;^?rwtgS{h3Fl?M0`nT_d;;zPB8cWE_s#;8yVK#h^u?9UPOP_k`&#=mD?PDE^aR2rnSc8c8{d z4KmFv(VQ=B87zQ0xJ4KU0mu41?GpOqGdXjioj%)VvXzh{%1>hPu)F4?q&wXuNAj2I82c0(`zU#A8dldYH;$)Y#?^e8vpvbt ze~B}gBJVv5t%P7d^{l_4T77rHOntuvi*@m1)Vyq`Pz`L;cf~n=U)xE9g71w9#_(=L zp7;shHUVV2`K%hgmdAiF`Yjip6R`tDKe3N1dfUNk420$n-&g4fLBDT`TI++`5NMmg zLQ4q*=)rsf66{=|#sX=`wxEE&;>hkBEA3CdZ|3WXLwmYj!R#+bf~NnFBNRbihuATyje^@5j{d{Efpp$p0klpSZ~cWFKC`9Ucik3)qWsFP34a2f-aIhsLjz7_DC*fe(Dn%e6?xM$TqV2s4Kc zYg?XH@Ln*H!9$Wk)GZi@t*)h8-0v1lok4+Wt_VMd(5l7l#5}x-jzSXagGm{bM-W29 zWI}+8aGzwI{yI5X4f=dW49&#`ai;rC;D_LNg65^&JZl5LYM}R6`hy8VzeRom4x7J1 zp+tQmD4j+T8$$U~8mi}nV0`FMr~;SjVg0=<+}tEg0gS;V1)8i4TD}T<`V?;VM9|`d zA{YdB(h?px9KQM(Kn@>~qUzxK6o&DUWO^cK$^%$NTBuW^?ExZFhiUB@FsUsy!x24Q zT7#m>Ld~uaE;LY^pkSHP)#ceyehx<~aYlxeMQLb49L6Gu+AN)edm>x%kVS%`iKJk| zW}&xWt7dNoRc{?^7$JjGrd zAW5pgm1)6AImI0_Q1|n@XAFC&x40H1qKbJUP8=Z-9wNy?MG>XKsk0-cl*L15P@FNi zTs+0sBO>2My0~6>&3h#H9wNz4$EZ_cY|tkX5Rt=*pQOhd$tmaSl$I#Q zhd?_5*Cg%~IGt?uH$*}%wU#4gMK);52{{`Pf~?Q)oL3gAV)UgO9@TByCi{D;wKr*2 z3oYeF((?N`y!ViGVWx)J&wT zDCbmo?O5tV3l|Aw2qglJB@zS^)eI?9Eglne@*DjFD;)?N(1_*-;|lxi{d=udKf?4??ncWHP$b~n8(Xyq-3{aVz4pC$e_xFVw^ ztB1c_oKX|@96PQsiez9Ewj6e#(5*a-1DMK%Rf|PeGO`#5+A;Cclh8KVF|30E#im`l z2hnbz%9EojL}v;`PqG<_k)3!UX}4FxaHGfvTMmnq7-jr2<)f7Xs^!6g?o&yz3A>I6 zX3pu;Xt7#oui~zqCsllP6+!LZ4xb2a*o)GWB=CnME;P_?r!A+DtI1W%HGGQ64@&Zb z(8Tr}FMA|mG!f@}A}Qu$0*R{cnXoEHE3z~rX`E55_8iZhbYRjDs_tw_f54R?;y+Z> z;&D`Cwa4j{p@c^h?TMp35g^=(N52|*h&2bGoYtYv)S?TySFa#PM-gp`mxzu+SUdj{VV^y?*%nSL{g0z=Lnq1agLc;?_OvG>XX`EWmP|y^ z)(&0UwlLcQS0Pl>80@Q{K;y)!ZVj~Mf2L9mol>@KRipk9LfExVzZsk{M0D}igM8Zi zLe6y?&!BpsQF{=nAU!bIU(fG7ii}zqurSmV?5i+qPGSt+bsL+FdI{`$5rcaP^)Q{G ze_XSBW}R})ha(jca*36&<95`}_JCQ}zzEx54n@piBlkYqPXS;a!7Z7uXdFcBz4!)k9N{UG0V9C=I)&;C4mLHTSqCE?z$r~?zH9TRc`IG*U< zx_AnDwK{%UdTRp)evPvKFpSR}P3@d5Ud^VR6qTz6QBFJc{{=X8w3(e5X?K{^WDJ!H z_J`TJWBb|$q4swF?E?w7g$bAYjt_;U`9*i2xm1O^y%Hphha|C#{E#29ANNRO84QX= z5jq<=f*Z|0gOo;ec$bh4l~s)*4UJY;)fOs_l0W=OuNuJ^?}u?7Yh~#V)%EK18wI9~ z#@mfWER6PNm;4d>Ep#{*OFHflCOEA(ZikwzNP@gjHQvNBK3O%fx)v{Y`e#0S9A*f4 zQFwfxw0bssG6i~4o@H|Bb^MB@xP9DXLvN~Qe0+EO%X8I~kl^TB)no(dBy`*qoPLce zi_6C2l={ph>f0pxd6nAQAa>^@)SFqt+B6|rb&9b2Mg#_#(##_1_hpt@nzu@FUf(>Y zS>%by(!su}G*$7n+3?qncg#61k-A7DXS}x=evxUR^I7VDbJfiAJQLH*O4G8e1yg_K z-=)!&-XJ}^AK%G}=hQ?-W_1=MMCNtu=UL7dI!`*;?IXqGu&H_e^7qOJcS^R1-@4CL|FPJad=^CQ6#Dlh|Weyjavos@|9;8GR zAGd&;W7!|Xwx_q;A(($GfSvjFxAXy&OtwNa@pHqINJC#E(ck8^V5KtdZzq z@KRmQg7?pr6#LbG9p3a4tC~4w-6E^uv}=983+*ey{-CXnOf2_ItWC16gjuf5v95lV zUY&?r|Ay8)2c*`Yt(_UX=zH@VIeG{X4=|O2@&VKuvY>n7q z`Fv@Ed~yr!VvG8Hjg)PRK41eacbiGH*sf*$`EA?VVvAFG?Pz(MH(;k9b4So&nofU5 zG+^U3byrfffQ4;)W?CP&+LmC_P@;NohivBjZLgDTzn^xK!(bm{bg%e)Pa1vGMrz*> zed`O`mUjFa-^Mq&_=88HgLaVvm5YOKxjW9}xpZ%XN|Oh8)oZf3hd$NWNXi?5UHcZI zN1^Cheq9H=xoc|iI|h?SW7bCr4u?sT`<4dBb;m~m=*Kdm$KbQgoQ)r87l&Ur4l=7D zM=1^`na{^20S-C=hlSO0#qTEs)<^!zhYejP1?YP*xu@1dGqj7R6$aZ??+0Mfv+pCj z9bKzkxo16-#}m~*2hh)zlOaj+iy!Z?Qb_Dxn*hrH>jJpEK%qF0k`W-CqP5Y4K_@sz`MUzm+}xVYbA=0 zqtwT0=)DBP4QKz-H$L&_ZpB#i-iYX+WRnyn}X1%!@-BF3nma$Vmu@Qss|IQ=NV1{ z8aDqK{v$(MlkwkUOs#-p7$`&t6awl=R9gowkWH(ZzS`>QNiT90r2!>-KDm085NZ}&=l&66>S((?oR%1T;2QyHPyybeunBh!nS{M8 zt|9TtT^-N2M{^|c6E#9mcxUy0o@KV-6E-j5lD_}17}M~qoB!K4X*mxLD$IcHw_Df{ z7-@#>P+W~AL%Z3;t8|oC%A*7ff-^XA6ux1&AcTTpi|uHZ=A)gMuz|n*j$UqBKg2#G z-a*sA$nB<78k|Db=}aVbPgeYaEYamfIgKPqUB3TQ&*OOiOYG~z zmfHwgN}>3$U-?0%U9)u&W&(5~wWB$DN?%9;>ES`H-^1~tD{UQ3+Sd_|kpBGSqvI)L z6y)2(!bEANatqq9a&>Ipi%*dn5Y+qvN~-t1qoSgpHYerkNw@=!2=o!C&JaCFPbfpV zp9EN3EwAFVy5r#mTP_xG{86OhPlV>qur}UNGmbn-Uy~$7juJ9;;Pi z+HboOB?#Nsl4T^V;$gWP&8HWCk}q1Og$p9V=%H5!m6u(w52u&iPzWqnJ+K5HF($-M zRaanCzO$=7Oc|Ezeq2qv>w%9L)Ab;!=h^iTWdzI3Fm0OM&Hp3D`{`GEtE>w7N)N#Xix94Mf@O~?zd-h(} za?1DC;xn56Rej7yjEOv{rs;Xy^WE?9ysrlGjyp2tDiOI#cAH%)`YM+Yh^V+F`C7{L zvOVGX=(`4uC)5*F+VFj{Yn5WSF7al=P7hT%w;2!VC-#<(*&qh|o)wWHjuJtJxXAL?o&Rk+u&_RS^f{$hkk z=xw7F4ol4{%{Un}?Ce;zie64s$5{ET68t&nyM?ZcvQYeJEwxA!{fLW&U)v#l^lA{a zQE_$XrzX7}8j_qHPf&;5gSuwuza+Xz;sBaq<7I$1d2V78$7x4tz4OmQ0WQO?yJeO46&Hm4fBUr<4k{V$R}n z<>fmyk7~D4@qOzrkXA*1i==!BC7UcCc~wiM`*NN7@~^JQ3l;5=ph*eYS2Mp~)=xsI>GTI2N3`dZd%m$-krgVAm+ zV{sQc@hCdSIs~lqVHfT#SrrGF4{aR#)n4U4*016pJH9f0R+|~yC_ehzaUSRRqeDok z?tP*BX5zEre5JVh1A@g~+svBITHgxPzf6ExtiLdv^c{OLp z&?2-_Zpd65Kj3X?gHVFXV3x3*MHPz@F!my)SDc`cyPv`1RLx;|2ueqiBrnt9ypd!l z(v}Cy%XYrQx4HjbO~f(0DAFezOZX;^m0fiTs)88j8Gf57{PP?uY38i>Mz*cqAUJL! z?PRa;cJk2P{uiQ8LlT^&cD^IHSciU*!u)o6dqO-<-0WO;?|W)K^tklpcTH7NjJc&@ z%kp38&y62;rg3t{(sGwat#9YHlP$^W0siOqIo1p3Pg&qI(Z|?AeyW|8c z!@$YKq-4KpdWe{}?zd`}hWd_ueSd-R-|goEnLpP?bK3^qSj}?2W*_#IG)*Z?j{J>( z-dG@S*E6ra%j4`k7V;OIx7N9x^&mOC$`v##u6F;av3@jH?XW0@e&>kdf2Q{)ShJ~b z()hXaOxE+C@xr85Rg3-wTZB;4HMv&%X7;)CfzZS~n@4X=_Ei_JpY~gTdrzA7wX%#~ z8`Uq5k;Cj8^?kvE^YZ73KMl9JVxNwHkcpY(_skNpH?AyHWaP5j96dmm+&?!GJAT%)mh}k7*If#%WzkMpk<72|+cior^S{b38a8J? z?qx+Akavho-{<$3!7j9YithVT4k?CdmCU(6ThBvL!$bh>U5a@|I={(FlG_@gXLZB3%lWx(lXE2U7Eg zuze4qXOLt_55aE?VUd;i*psKB4Su2rRpWwqTgCX(L01hR;U`J%bT=_ASyBGbt#6^y zvLdqSq0+daicbm(Pod2?VQR8M-?hSuU4w=2-FPCyT-?G8WCe@}!$Y{j&17Yiy}}cV z!XyU6B+J72|3?6UGk(luhH!{AayW-pQ-^kFGkBPXhm?kV_=SG>hiJrxMiqC0m_~$n zbbEJ*gUEn?|CfP`=z)&dc#s&0AvlTtSBaKLf|!VbJ-3OR*oj+cc3lXHGpJZ#XK#yW zilK;nHb;q{$cinLh+&s_ve<&6*oLI|hPN0#x$uj?7>vR=jKo-s0+9><5NC5%XXz7Z zdiFGY<~O#`i!Fp`)_9GG24`{xG>tYkkES%vm^Q2sc+{vr{BVxwn2zeWj_lZu$>)h~ zSdJ=KbE&v|k0*~hq-)doiuG1wS%;6OI6uhqj-zOZ0I5K8LqY_piw1d+2$YZ*Bxw9N zPNMdY4yixaBV#+Wk5-q7v3QX^IFMW;ksS$-y9kmGsgL`ZivDNj_yMn%B9Xbht+U z`G~72pnZg#gj1m1hL`$@pfE$7{wbTg8J`e(HPjiMaub>c8lV?Co^{edOG%;5m7n1D zp^@a8xWl2=Nt-CzHr=_RB-)`a`l1->o<9bfGuogg`hYgdG8w9&bh)D*>7hT`hr)R| zELx;BdZc=on@UQg6d9RLnxZ(Gqa!J$PFZ+W`lMI7pjrx_T-v2bDx5+(9ZNc;2TGt74hWe?bF^!qZqIufudP)16uo8+ptnyjjNdCZzJ zzIv?CDy)3-4-Y!6ALFc_daW%f5GTs5Ayci7daZURu0Bex9pk17fvmxruIkE*?7A`T ziV*Oct7>{S|Ij@Hv99%MulITo{(!D*_pdk^u(&j^24S$pgs}9gu*qbu(h{uUIWKe`nsjrim@3>s~hXE6a}#%E3zZov0kZJCVR5Q%COR+vXc6-+M2K~|I0D|Ll7kU zS1o(9FKek5Ym`0fv((D4GOLLF3OYkew9V?MM>}mv3pGp2w58;(LEAV{8$44>wI-9Z zPpgVq3l9Wgvs@cY_iC7WdJbVbwh>#l7vrvItEsQEw*T6;Zd);kiX7*uwlu4)c6+xJ zGn8Dpw{$D6e+#%11FAe(qF5WXVq3R}+pCTluc{;vN(;G>`?Cd0xs7|dhMT#Po3C-( zkN?oQQj58uTeO?|wHsx*r~A37TdZmN5Af-_T8p}|TeaXS5OeFeY@549Yp|vJJOlB% zeha+RD!jd$w2uqB$lJAnO1rJYyTt3d&3nAh3%#=W4}c`Sy)(S(|5LoTI}nGPy$%P{EMy^Avt)yupEA;0shF!igx-pdO38@|@Nzg^S6I7^ei zFc3g93eO-AL{kfC&;|Ir3E4mp+wc#kKoF(?MhJ|zllu!1zdmKoGwZ#>Cx zOv#p<#$5zM-~a|B{4;>S!w^giSFAL1zze|h55eHYq9YGu+{y}hPbXA2vOLSQT+6n6 z%eb7&y1dK0+{?WT23Y_Gz%0zcJj}*i%)-nDV4%#)+|13)%xn`Jlh%P5`FD!tMy-O?`o(lFi2S@1J6{~gmVUChY*%+!p{;2h58jLz>o z&+(kkuE5Xx{Ljn4#{?Y|zoIj#-~tSy6$cFfQ~et^APv*O4|Dtr@_f$LEX)o8G;aV5 z#SqFDZ8l_J%D|Hiub|3O0}CQe(sC`=k95*Deb;!M*LuCzeBIZ6t=BWXjkH|TzMRv_ zJk31)&E!nZ=iCYZ;Li1&&qj^Zbxg>HJQC7yA5qO99&iFm@Cy#j%@HjTwY&zm(8I)V z)=HDs8l4Taa0(wy3UNKxv_02zWY>S4+q%8myxrTr{oBB81qT7e1tHx3K->?J!&OiP zSWpE@-~~z$-OFtdRqznJECv-#G?9SOY7IQ~|IpEp0}i!4-sHW+IfUE6o!;ub-t67p z?p-$wVca!Q-4?OZVsP4_yxnHg1>K!C_dp7e6ADUP-ULqIMU)7{oZ!c-;5g0T4nEA# z?97Lq%o1MV5q{wmF3cLf;2hrI9sb}R9^wv8*zaB9CZ5}(5z|@V1!bMz>C*+4pwZj# z4!YpcYZJx=p5q06PUmPEdeY+p0p$N6YNF` zfDLDy56pnto{&CV5aSvh57_Y0k;BS5|DNdWS=$yQ4$x2xj~?leKIxMF=*)BJn4amH zzUiFa>6u>XlpgA!KI)Xt49oxxrjF{Tp6aY_>ZV=|t`6(39_!3d4Yq#kxPA?~zU#Zr z4Zi;Czb+2KKJ3Jv4AxK%)?n=FuK84&J^F z>5vcXzz*Wh)IL7s>ZlSuzBO%}$5L+PS{~0qoe5*U*xt;|*SzL!j@&KL*TQVg=bQ=0 z@C$Ox9{#`%^rQf(|_GAP)czIU%j+7;mZ&;)?Ji4xaw;ARqD~Kk_7B z@+N=sn+^adRM)xhh(PVC2i z?CMYs>fr3%K<(OI59!eD=|JwYy)_-8jygjuHgb+xe?4m4To6R#31k5AGOo6-5a7Cy@ra)~Zwf;l zkMfTH_>dp@l0W&BPx9x}>6h>LH9s~u5A#J6>8}3jx8CdAFznWV^ycvF^|1Q*;O$ed z(6qgdBmv~?A{p!6ViyDvX-vmaPVfYe=vmG6S)C5su1{Qa|na~55o}P zvi+xtU;Q}xeAUAb9$)#~|KI)I|NY<}{^BqGn_o1ZPc%4BG?1?9qCfQ4;OoME>`Kq{ ztncmlun!&bEC+lNBf<3m!A~GRe+3O5JeaOtxogazJ%d>6-^72!EMCM&>=qd=9XlS{ z7ERCvSrPlMVnS_*Jl?YUMvR9VKrves$ILrO`JGu z<;t0J*R5VXeCg8V+s99;&zkJ&spD4dq0q0jIC|s)a%4zy^Y*m@r84C(o{UYOMx9zU z!lA1RN`)O;_H5d<|83unN_FjS-o1VQ1|D4aaN=p(5_@YgIkC8N>)z$2mv1?B?%WN= zM=jkrcB%K_Gbc{+Gs3RX#1jV-ti^f+ zvo1y%-BE|S8r8Y6FKcwvaW5ami7v?K@FLPKBkf`)NxG7BC`o9bi7T$+rlhh;t17C< zqKP1i=%414v@0*^`l_xQcf@IkD6;Aj=ejsr;zGUkzF~(SY~l;W6nTisuTMY!l*y>n zBqX#@Lk~r?|0qo4V6;(38I2>3G$f^TQcEkv^ioYT<#ba|J53|hPDh>eQBzNKln*}k zSXEV4S1lw~S!XQ-kwzM^_10W*t)y2+dhHbxVTWa0b}Z+|Ad5t@t|p-@#!7v;N;Igk zps9u%b?T{eA7e0ivn4q<`zD`%N zW}{6<|C(zFqAA>P52A=ZZFl;ozYm8))87cR@66A@-Dux+u z%Bd$EgZQBa6F$NSY7SoJ)Muhs@YF?PiywcyKE{^P$!^Op$2?I-eCD}x&p!t}bkRpA zJ#@}H>f&^gRUf${phHcg(L7X*Rp~~Y7PeSqr>0iHeS#9GYx;m1o_Mc|KhQ9IQhd=m zwXJE}?Rp)85-ZHl%KI8?x=9CXgOtIfkTAM{)1!aFIDE5g68~oyJV`0OHOS|u-ye)~ zVhaDv_vgR=*(xbr00lTe0v6DK2Si}YS{5_Ty)F)nVpXkd6)a3d4Hr|RhBES@jrbv@ z|AP}jh_|-(l6i1wd4owC+oZQ7hZI91QSlAHxM2=_$O9(%UY|mlwf4p&=|!B2?oo8#>k+8`ZU6= zfzW=-|!0WETtlN!@HOz+g0PIjWxo$GvOJK;G`dA4&FqR3!9qg8Ydrpgr1fM!aLcC=(-jNR-C(THB@ z4wf36$0lJjJeja@CI+iS9(wo>orR$gnD|CCC?b-3VC_!v(G#DtIn??&5hvU{Dmaz8 z)B)Y&98ZO6RLOA;a!j?VRJCeWvAWf(R`nZICC6923Rba(m8@qSYg)}3*0O4~t8TSw zROLF?sJ6qdcg1Tw+7S=F?)4pi1uS6i@s4{8wy^Jj2R!bP*u~-l9{PB!|2`zEk9<_t zviq0^JLch1n|O~WnKckPm0`AL5j0r}9hR>gVJlf3Ef0_iRnSoB(NWG8W?_hwNJ&}= zlg83LP;?F8Fp&qsAu^SFz{EMsao zJY_0Z*~;^M@|EkW-?I95uK+G=V(~HA%Fg4r*~(VfloCf}L>L#v5>~Hp6{}S-Dz;(x zumNG*5-~n753Q`=1&yJ>?j(d2h1ekvcP0l%7(*NShzE0d5|Wm*!+Y+F5B!88WKQev znifMUcbPnDQVYe&S4MTJRlRCfx4P9?rZ0ZG{8YPwIkA$hY@K3~EuHLx9c2sXgoSnC zLh#|WvCT8dZWA;)q#<=YivuEXp^bbvH5-!-;y=!D5F_FV9Jee@r^T(^OlI;ZNiB7{ zM}2Bnx7*$ChIhQ>jcQq6^&GV(Y-4e)>zSZA$^T%7HXv+_|2MM&6P0)7*Q4-6!uZyXU=fmbcvHFL$|pr+SWf zAeOQz1sk}Ff@Y(XP#MiKI3{p~2xCiXe98`x=)!-#()F!t<#K-QTVGhi-1G95`Mu+@SjyUF zAHUPqwy@Q~?T$Gd*^wSWDgY@g?32Y=>rF@Exw-xj&p#V>i}b6X{pnwS z`{NJ)_uIn$_s4(!^}m1q=RXyb5QXzYKlE$A0yIGNBR>HwzXfE#1?<1^g9-?w2nigD zT;K_6NCj$`g@Gct4osGJUlXK06Wa0aS!hO^?bXyClh^St-kFB6Q1G@6B^ z=)WA~zxCU{@w>l!G6q91I15{?*^4a?dzmhXHddGg{F{Y%$f1NV_3gQm;@(0 zqAfIqR(J(nNQGJ8!Tys9TX+f`M8h;x!+$VC|29-ZG<3r^G($P$KcJvPI1Il$L=<1( z!#?!GKLo@;6vRO!#6mR0|4W5F6oy4)#71;PVKBr&B(b`;sDTG+AVo=(!~-NmVMsq{+=WH_L}AE8Nc06ZOa)_L1cUPxqPr;ADVa35 zsaaUWPz*(CXoq1uuWSfDV*o{Ez(y?W!(9N4EyNR0(8owRg;s!tVMqmR^uvG1Mxfxs zi8#oDEJ&#sNI@h>f@H>s>_dc<$cnVc|BFmWjMT`1)WeR9imuZMZLkGxn4hiFIYY?_ zW6GLtnLgCe7OiM}{J<_J z+PSc4KH~YcXCcWOT1R3euWyJ4c;GdJus?&qG<-ZFeN>5k1O-$0!edCHj?p@Z=pPD$V;zkqAAzBCN>TEKxhj z+c*d}G6;P*2dO)Udq~Qda6^OG2W&V7U1$ZcB+V`KLR~=3)KtyYWX;xe&DVs@*p$uL zq|Ms2&D+Gy+|?(+mF+jhj;h}?z{)~{I{@)&r`sLtl0-}2+dcBnE#Z~8Ku!0wb2{x&jQs^L~+q$ zI0kR<(P20SAtllw9fl)C(j$dUSb&8uY*Jl#(kOM(DTPuhmC`E3QYn3fS71_DXw4)| z(jgU7A^lMw{ZVW{(=|8T$taBx$3fKz!mJw?lXoa=xtc`O~U4YS8Mb~sy z*L9`QRCQOO_)2z_*LfXPQ>fKk)m0`%%_B8aHGNY!#hQ@YG^1)uWTnoQ;8U~P$*`)g zck2)G%7%Dw7)edf|8D(OJjtckP>oI<23VL+dIi~#71@zJ)pz|St0UQzRoVJ%)qG5e zmIbPN^+J6`(lc#SVU<%lHCX(R3I>~qgr!iu0@M+0FaJQVZ+M5zqS%)JhhgZr7>y5# zSW&tBiO%{5eCUN>(Aur#+OGB5uLaw%72B~T+p;y=vqjsqRok^?+qQMvw}soX{fA(f z2)doyy2abO)myve+q~^ty&bi9UD?4U+>w>pncdf4y;*?WS*@#10cp?58cd-DRB7FY z+L$kLxQCE~33(WXk0s6b(AcWAiFXjxXGPuAEiaSZsb_LsDSTblbqc{P+}gEWbrnne zwAWnaQZMCK|8H2+Vbxj4*$)75Njgo~Wxa>K;z@>;R-vG>b0DHm>)g*R*?*`es^zYl z*oSjCUDXBO@D(rFCEwYoRMiAiFdftNHB%t*_?6%JrQiCEUn5P^_if+xCDQb5 zO(vbvCf!newbfdk)!S8Bm?ceG2T~ORM1=x>l+z?U>3Z{q>63oNe$#_sOlPrjNIEGgk z(E5CZ|6}-_`J4!Bh~S*i2cnJPIi}-wqhY&jTpYgQmil2h4OTQQVkL!A0nSxhJzyt} zRVe1t#61RJ72Z7_keMuFQ-$q9G>#$goYQ6}Y5Hsw=B;^(E@omz=3`doWM<}N zK4xdoUS!qdJ-&%IZcoqjV>iVH_Z4J9uGNc0WR~5+Ce9OF-O|JrQb(54eIPk49?u@e z1{kG?(rkrc$Yh@QDFOWlQt;%Pcn9&~1u{UwWFzQ~0uU~M4a|Ts^Wh1E9ttd?sfb4C z|B069il*p`w&;w;=q2ldO331!on~tG6W|dl$Nk|y2F)NvO>ZUzs10Y*%-#Eh;?tC3 zeg#&X%~|cbrbOu$Y+z2F0Lyy5=b+dJ(U=GoW(}Lzhwus_OK6>fhU%zRX#R0%sptre z&geV#k31epgOv@g)0QB1Q*ZbMBVB1FZt0i4&zO!6w#E~CHRnaH=_&qKIWk>G_n z(CzUi?=9->C2IuVK2YEm?)GM)u>ND?u2Qs4ZsjIb*d_|mFa=$hE~ns!S;+2*__mz* z=O7Ab&iR8#Q1At3@CJAA2Z!(om+%Rv@Cvu^3&-#b*YFMJ@DBIz4_EMi2=Nh*1Q9QB z5;yS_5ApLJ3U2slgJo~`mT}^>rKX$+_||4_KJEd&)%r%{mWb}BPzh6j1vicj(7;r| z#)+jCFQ?`lPe2aki1N0e@+r6SD#!9G*YYgq@-6rBE(h~37xOSD^D#Gb|1$pv@=)_M zXY)08^EQX`H<$A`r}H_t^EyxSEzff`Cx(i+^FPOPJ3sS5FY`ht^fo8-L^pIS2L^F? zacS=A8JBdiYtT&tH+QCu;R)-^PH80tV6?7P95ob`C~{qrjn{68SGb85ZgP?#16AlF zx{>u+FAf$zxjw%eiokU&$@O06^3582Gb=pXUAU6eTuI(VYZOpg>Re%OsXZLp37h8w-35N8@K6cI| zvVyJj2|hPWhl+X+E=2K zpNO3Q2e21=us@1h2>Y`)`?N>fW1?nFmHt11WfdG7toMH~Ghhd_%E7o=|m|VDhFGXv~0ej3@;!0D~;}d@u<8 z(Fc9f7yZ&l{nJ-{(`WtEZ~fJG{n&^7*?;}omwnrxebmna|Ip`s-v9i6@cq#D{oM!t z-5>toFMiV>e&J_+-~R_Nc>d>ie&&yU=x_eeuYS;%e(bmY<=1}eum0`Nf}-GkiYWhy znEv$Ve(~@A^{4*#XaDV&|Mvg>>5qT-e}C`4e*NeF<_Cx@{|5RiXz(DygbEijZ0PWz zHe1>rQmlxO(GL;;HgfckLk&NRB1e)eY4Rk>lqy%UY*}z1%zyr3(yVFoCeEBT!O;vA z5+OTs+lCSyYKaR{q-0bTBj%Ktq$*aXQmtzBD%Px8w{q?3^()x0VRe!%YZj-Kvuf9} zZR_?e+_-Y*{u4;hC0>&eC+2lHiwDQRf?pVVxR249|0hYPxS7@WG33aSCr_qp*|I-U zF+*WPsP9|RqI0?=<#I}x_9%wO!>FLy}%0!B5^@5 z@{Jdo{7fiHh;igEp0H~^{5tmRl4-u|?cF!5&BG4D108xBuQ{c;{JEtXSe@3i=hLrm z|32*R`uFqi@BgfJkqHN!8XX9h0uW0$0fY?54Uv#ALTr#+U?_ZHU4R*Ch|+%@dT7=$ zG__*TI|H4^3mK#(^@nQ2)FMU}_{lgUjWyc1)rUFixFdfX<~1N?lXwsq4vO@1B$BlN z!NGAGNpX-UDl|!9U_P+pqmO0HB-24PZOJ2;|6yJxPbizsvrjuPg=R^LrFqg~DPCBW zNG5gKc_*HE>bWPMefs$)pn(bss2(>MdP5E~D7q-4j2?Oe5q4sc!=a5@+UTQ$4BBU* zk9ztkq?&G8=RldjWNN9WvW2Rtt^UL6tEt91E3CB2S}U%%>guYkz2@qxuD}ZWE3pG% za~GB@0V$a_C~(BVTOV)~lM_x1#6e&Ku>;qZ-TL>XnBj^$u9lj?#MwD96=lglNiEgX zQ&IgxRTi$0d#_sj{Nq6f9UL%$SsCTI9T40WxVU`@?#RjNOAwdIa)>X>|4d8^$9Dj*JTuKT)9jBf;(e2innTS26H=!^ zGmuk{z%&&Y;GAqT({EW&(=I!TB0^07H+?nMS!=yD*Ij!ZravK`s|z{mW-}Vlcid78 zOvS`^G#m0P{WaZn+kH3QdF#D5-+jLo_PL>utu8J!$#D%$<#dWO`9GTvt|l&B!~{A`qsNp*>8|_! zJMh5^KRof@imkaWozreROt_1_c=6FoKRxx;TkkvUvCnQ|?YD;xlkPC_em(i+n}0s~ z>5H2^=bn3?JL&4nKR^BT+kd}J|Lkx7&o+g>|NQQHhra<5uz&_Upyc$YJnk`XAkG6{ z{17O?2~x0v7G#s7SiTf4Z-*{~VF-neGZiI&S@5u4Y+7e>&DR=gq>vzRp^ zGSG-r?4cIJD8@08(L+$|q7-BDMe)h7jBb1*9OI~^<7sb!{PSNLVX{ULwo#6L{39U4 zc*Z-fu!Vb!VIUK!$VEDli+ALp8j;vXMpCkpmPFtn`&Y;*O7fDP{3Iv`=*a#-QjeVs zB`Q;?%IamZdwC?HnZ6qWqQ$?+WaOs!wE7v3QmJ)%;hk_D9&}Vvz^=_XY$e$Ir7EFm9t7I#y+0FI`vXM+GA~`GC(eCE58(l1EQ>)s)$u){} zjcjOFE8E!uD6Os)>uEDf+uic^otxR8P1g$BB=)wryEW}dQES}glGd}ijV*JdJ6hyU zRJqcT-{=~yN#tTK_}_m@xE2N)#WaE(~DQ|dQ-jbb?X_2f>qpZw=VC!FI>4O z-v-k6ywJrjfTVhXcT=8DG!w!`& ze<^HV50luW{}~SPa7(OWkAj$*DPA#*KYU^rV|K(bzA->k`df4Em&VU6D2{_{PaThK zfjt&(je#uWC5w~D$m21CMXY2dQ#qSXu4B(M{8^kpNvO(|MLoKC_9U{8KL1xzDP+^PBUmWik7?(0`t3`vje4Q-YSbhJLgq z0lmE=7x>26qH!RBA9d)@453lZ7SHZ`%St!*DZ zo6=h4|MjxBE$$Oq+uI@@H@Zt`i*83-&gp*l1a&F{bODNmZ|)U4%QGhUD~D>_A|}ab zw8c}NK4c(c7?;o-C}6>ARzUo4z<>!bPQE*2sJ!Ro^9Mi742nt5d*F?}w9k{ix`6L{ zAnG`}(xYBHc4O72GG2Ms~KRVL4E_T1++suK!_A+6Db?c73?U>s%tE=9^ zuV>xuc86Tq14neZcaZLEzdPW83HP~LJtk{MZ{QQ3x4bhPxVS95+M%xa$qU}>oIa;d z|H19T!~d7^p7$E#V|R9z&eQLR|2*oqIC$4)UXPsTUD#7EdohJxb}Jx`@Z-ds{QD3KlkAqzxfzkJ?25DdDF*`_|Ct+cb-jpk?Owg*#G{2kbn8$ zm!A3HKYxz2ul$+}-}>l(zg&PHW%lo$kM4&*{y~;+c{-5(Nrip>1>iP8ANlp))k&TJ zCZNddAM4HCym+4iMxa~BpTL=)1YTfVs9yylAO?0ITTo!ybsrnup9e;u26E8!SzrmS z;Oh_|DG473vY-s+4+BQuHKZWe&7cl?i3{@G0YcyomY@cPAoYP-5XvA3dJhf;{}2ft z;rY3l;}K!|IbjfnRPKG<|8)ly&Y(Uiq2W=5{cWKRMwAyuUKTc?7+zl&N)Zm8VHzT# zZE+6@e&HFS;Tsm;Q{5mP0u}7p;T`s#6-wV8+MgEwp#>Q7Cy zBDlR`TAZRR<Y3qKasuD^^AI72+}AkQB4bia zqf_8yPUa*l8wY zie*tyrc(ChVqPX`YMp7)RA{JXi%_L&zNXT}W;xB~XRc;Ywx&hkW^Qf{aT=y)CZ=z4 zrDc+YaQd8XqULcX1!%ftNi=8AJ!fa`7jo7naEgR=rrdK%rglnaa@yudd}qaBCvR?N zTrQ_cpl88_=X#PSce>|$!l%8dXKMCleTL>q;Ag$b=YFy$Yue|30%*GFXLKUPbXvhT z-Y0^Nn}9ATU;d_n9%zJan}UufgO+D^u1tnf+k|pxg(|0iQiL|RK@%W>4h}tN9wr7qi|AZ|729<1t2OvRp3@MEg zr)&=Bkrrr@BE%#(OOpo13)q5`{#udJCX!NTLl}az1jYa;Km$NP10X;E2!;yeLYUrK zjgl#rn(0E!LUe3I0c3y$On{&cY6J*CV8p<-)ak2@DSwu!gEj;|#6Xi!00RW-pkC?( zSbzZp1`;UhqEad6%x8!8r=BK+8&Cj8GytZqYM^ealg@(UcW!LcsUn06aD)M@ zDz8oe1{mr_2!V{ss-N9yqvq+OE`%s>1O;e7ukvaHa0Cg=gOC#Ih0*Gj;^?g!#1n8t z0X!?OT0op`L}6Gfq#0|inx{edz(!Dj1Ar^99sox?|4Fr)Yl30xs5x<$Z9|V1cnL-gXB(b+*Yo5 z8tKYvYvE=tmyCg6RDc0MKn7%h1pGq*^eq5UwSEW~b{iZP;e+L6kw~`YQ!I zFLIm!BcSE*#@OKMD@-^9BeX!5Zp01XoA6dIj>#?9(o6O_#5_>JKTydF9PMa|Z;)Lt z%bxE;@WUi9fe+Mx3*5jzNI{S~1pEpa`4VnHQAPldFYAgb@|v&VDldc{FpLc__R{ZT zK=6&pFYE$YWmxcvN$~tquu8}-2dfwcFRTV{#|W302WN0h{O4_^aEFz!M7A&r!*C22 zuL5H(2zr!-O=%vMkRsE!VOw*YYU4SI|N7DMRPwCZ{>P zvK+5OF1uG1&u|&DaWRvZ9mg&nEAujY*D(w8FsDQ`GjkKearxfyGkfthOY=>JcsiUZ?iM6u{YcEa?NuxL$g2kRy(UP zKP&M-8y7%#b3Z3EZxu8*A2d8W^h0N}I8QJ`BQ!}GfS5^Pzb5HkFMfX!{cUKAbZF@IUakpKIw^V`mZ=3g0k@s1vcT=JFal1EBvG-)l_fWyN zblbO3(RX(1cTVAVcl-BF@pobixK06hc^i045jbWmI7}gUdpr1pt2Jo5^JQ13g#UMS zkFiHzIEH8VOELI|gZN27c!ZOsvg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-792811ca]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-792811ca]{padding:96px 32px 168px}}.code[data-v-792811ca]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-792811ca]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-792811ca]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-792811ca]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-792811ca]{padding-top:20px}.link[data-v-792811ca]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-792811ca]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-c14bfc45]{display:none}.VPDocAsideOutline.has-outline[data-v-c14bfc45]{display:block}.content[data-v-c14bfc45]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-c14bfc45]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-c14bfc45]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-9da12f1d]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-9da12f1d]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-87be45d1]{margin-top:64px}.edit-info[data-v-87be45d1]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-87be45d1]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-87be45d1]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-87be45d1]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-87be45d1]{margin-right:8px}.prev-next[data-v-87be45d1]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-87be45d1]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-87be45d1]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-87be45d1]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-87be45d1]{margin-left:auto;text-align:right}.desc[data-v-87be45d1]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-87be45d1]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-c43247eb]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-c43247eb]{padding:0 48px}}@media (min-width: 960px){.container[data-v-c43247eb]{width:100%;padding:0 64px}}.vp-doc[data-v-c43247eb] .VPHomeSponsors,.vp-doc[data-v-c43247eb] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-c43247eb] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-c43247eb] .VPHomeSponsors a,.vp-doc[data-v-c43247eb] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-c9ba27ad]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-c9ba27ad]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-c9ba27ad]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-c9ba27ad]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-c9ba27ad]{color:var(--vp-c-text-1)}.icon[data-v-c9ba27ad]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-c9ba27ad]{font-size:14px}.icon[data-v-c9ba27ad]{font-size:16px}}.open>.icon[data-v-c9ba27ad]{transform:rotate(90deg)}.items[data-v-c9ba27ad]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-c9ba27ad]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-c9ba27ad]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-c9ba27ad]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-c9ba27ad]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-c9ba27ad]{transition:all .2s ease-out}.flyout-leave-active[data-v-c9ba27ad]{transition:all .15s ease-in}.flyout-enter-from[data-v-c9ba27ad],.flyout-leave-to[data-v-c9ba27ad]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-b79b56d4]{opacity:1}.moon[data-v-b79b56d4],.dark .sun[data-v-b79b56d4]{opacity:0}.dark .moon[data-v-b79b56d4]{opacity:1}.dark .VPSwitchAppearance[data-v-b79b56d4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-ead91a81]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-ead91a81]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-97491713]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-97491713] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-97491713] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-97491713] .group:last-child{padding-bottom:0}.VPMenu[data-v-97491713] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-97491713] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-97491713] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-97491713] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-9b536d0b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-9b536d0b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-9b536d0b]{display:none}}.trans-title[data-v-9b536d0b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-9b536d0b],.item.social-links[data-v-9b536d0b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-9b536d0b]{min-width:176px}.appearance-action[data-v-9b536d0b]{margin-right:-2px}.social-links-list[data-v-9b536d0b]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-492ea56d]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-492ea56d]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-40788ea0]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-40788ea0]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-40788ea0]:not(.home){background-color:transparent}.VPNavBar[data-v-40788ea0]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-40788ea0]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-40788ea0]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-40788ea0]{padding:0}}.container[data-v-40788ea0]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-40788ea0],.container>.content[data-v-40788ea0]{pointer-events:none}.container[data-v-40788ea0] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-40788ea0]{max-width:100%}}.title[data-v-40788ea0]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-40788ea0]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-40788ea0]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-40788ea0]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-40788ea0]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-40788ea0]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-40788ea0]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-40788ea0]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-40788ea0]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-40788ea0]{column-gap:.5rem}}.menu+.translations[data-v-40788ea0]:before,.menu+.appearance[data-v-40788ea0]:before,.menu+.social-links[data-v-40788ea0]:before,.translations+.appearance[data-v-40788ea0]:before,.appearance+.social-links[data-v-40788ea0]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-40788ea0]:before,.translations+.appearance[data-v-40788ea0]:before{margin-right:16px}.appearance+.social-links[data-v-40788ea0]:before{margin-left:16px}.social-links[data-v-40788ea0]{margin-right:-8px}.divider[data-v-40788ea0]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-40788ea0]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-40788ea0]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-40788ea0]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-40788ea0]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-40788ea0]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-40788ea0]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-2b89f08b]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-2b89f08b]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-d45ba3e8]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-d45ba3e8]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-c9df2649]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-c9df2649]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-c9df2649]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-c9df2649]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-c9df2649]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-c9df2649]{transform:rotate(45deg)}.button[data-v-c9df2649]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-c9df2649]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-c9df2649]{transition:transform .25s}.group[data-v-c9df2649]:first-child{padding-top:0}.group+.group[data-v-c9df2649],.group+.item[data-v-c9df2649]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-382f42e9]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-382f42e9],.VPNavScreen.fade-leave-active[data-v-382f42e9]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-382f42e9],.VPNavScreen.fade-leave-active .container[data-v-382f42e9]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-382f42e9],.VPNavScreen.fade-leave-to[data-v-382f42e9]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-382f42e9],.VPNavScreen.fade-leave-to .container[data-v-382f42e9]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-382f42e9]{display:none}}.container[data-v-382f42e9]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-382f42e9],.menu+.appearance[data-v-382f42e9],.translations+.appearance[data-v-382f42e9]{margin-top:24px}.menu+.social-links[data-v-382f42e9]{margin-top:16px}.appearance+.social-links[data-v-382f42e9]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-2ea20db7]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-2ea20db7]{padding-bottom:10px}.item[data-v-2ea20db7]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-2ea20db7]{cursor:pointer}.indicator[data-v-2ea20db7]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-2ea20db7],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-2ea20db7],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-2ea20db7],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-2ea20db7]{background-color:var(--vp-c-brand-1)}.link[data-v-2ea20db7]{display:flex;align-items:center;flex-grow:1}.text[data-v-2ea20db7]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-2ea20db7]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-2ea20db7],.VPSidebarItem.level-2 .text[data-v-2ea20db7],.VPSidebarItem.level-3 .text[data-v-2ea20db7],.VPSidebarItem.level-4 .text[data-v-2ea20db7],.VPSidebarItem.level-5 .text[data-v-2ea20db7]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-2ea20db7],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-2ea20db7],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-2ea20db7],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-2ea20db7],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-2ea20db7],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-2ea20db7]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-1.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-2.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-3.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-4.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-5.has-active>.item>.text[data-v-2ea20db7],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-2ea20db7],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-2ea20db7],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-2ea20db7],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-2ea20db7],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-2ea20db7],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-2ea20db7]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-2ea20db7],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-2ea20db7],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-2ea20db7],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-2ea20db7],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-2ea20db7],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-2ea20db7]{color:var(--vp-c-brand-1)}.caret[data-v-2ea20db7]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-2ea20db7]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-2ea20db7]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-2ea20db7]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-2ea20db7]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-2ea20db7],.VPSidebarItem.level-2 .items[data-v-2ea20db7],.VPSidebarItem.level-3 .items[data-v-2ea20db7],.VPSidebarItem.level-4 .items[data-v-2ea20db7],.VPSidebarItem.level-5 .items[data-v-2ea20db7]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-2ea20db7]{display:none}.VPSidebar[data-v-ec846e01]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-ec846e01]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-ec846e01]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-ec846e01]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-ec846e01]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-ec846e01]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-ec846e01]{outline:0}.group+.group[data-v-ec846e01]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-ec846e01]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.enjoyer{margin-top:.5rem;margin-bottom:0rem;border-radius:14px;padding-top:.2rem;padding-bottom:.2rem;position:relative;font-size:.9rem;font-weight:700;line-height:1.1rem;display:flex;align-items:center;justify-content:center;width:100%;gap:1rem;background-color:var(--vp-c-bg-alt);border:2px solid var(--vp-c-bg-alt);transition:border-color .5s}.enjoyer:hover{border:2px solid var(--vp-c-brand-light)}.enjoyer img{transition:transform .5s;transform:scale(1.25)}.enjoyer:hover img{transform:scale(1.75)}.enjoyer .heading{background-image:linear-gradient(120deg,#b047ff 16%,var(--vp-c-brand-lighter),var(--vp-c-brand-lighter));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.enjoyer .extra-info{color:var(--vp-c-text-1);opacity:0;font-size:.7rem;padding-left:.1rem;transition:opacity .5s}.enjoyer:hover .extra-info{opacity:.9}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}@font-face{font-family:JuliaMono-Regular;src:url(https://cdn.jsdelivr.net/gh/cormullion/juliamono/webfonts/JuliaMono-Regular.woff2)}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: JuliaMono-Regular, monospace}.mono{font-feature-settings:"calt" 0}.mono pre,.mono code{font-family:JuliaMono-Light}:root{--julia-blue: #4063D8;--julia-purple: #9558B2;--julia-red: #CB3C33;--julia-green: #389826;--vp-c-brand: #389826;--vp-c-brand-light: #3dd027;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: #212425}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #9558B2 30%, #CB3C33);--vp-home-hero-image-background-image: linear-gradient(-45deg, #9558B2 30%, #389826 30%, #CB3C33);--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-c-black: hsl(220 20% 9%);--vp-c-black-pure: hsl(220, 24%, 4%);--vp-c-black-soft: hsl(220 16% 13%);--vp-c-black-mute: hsl(220 14% 17%);--vp-c-gray: hsl(220 8% 56%);--vp-c-gray-dark-1: hsl(220 10% 39%);--vp-c-gray-dark-2: hsl(220 12% 28%);--vp-c-gray-dark-3: hsl(220 12% 23%);--vp-c-gray-dark-4: hsl(220 14% 17%);--vp-c-gray-dark-5: hsl(220 16% 13%);--vp-custom-block-info-bg: hsl(220 14% 17%)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}mjx-container>svg{display:block;margin:auto}mjx-container{padding:.5rem 0}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto;display:inline-block}:root{--vp-c-brand-1: #CB3C33;--vp-c-brand-2: #CB3C33;--vp-c-brand-3: #CB3C33;--vp-c-sponsor: #ca2971;--vitest-c-sponsor-hover: #c13071}.dark{--vp-c-brand-1: #91dd33;--vp-c-brand-2: #91dd33;--vp-c-brand-3: #91dd33;--vp-c-sponsor: #91dd33;--vitest-c-sponsor-hover: #e51370}:root:not(.dark) .dark-only{display:none}:root:is(.dark) .light-only{display:none}.VPLocalSearchBox[data-v-f5c68218]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-f5c68218]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-f5c68218]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-f5c68218]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-f5c68218]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-f5c68218]{padding:0 8px}}.search-bar[data-v-f5c68218]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-f5c68218]{display:block;font-size:18px}.navigate-icon[data-v-f5c68218]{display:block;font-size:14px}.search-icon[data-v-f5c68218]{margin:8px}@media (max-width: 767px){.search-icon[data-v-f5c68218]{display:none}}.search-input[data-v-f5c68218]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-f5c68218]{padding:6px 4px}}.search-actions[data-v-f5c68218]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-f5c68218]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-f5c68218]{display:none}}.search-actions button[data-v-f5c68218]{padding:8px}.search-actions button[data-v-f5c68218]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-f5c68218]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-f5c68218]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-f5c68218]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-f5c68218]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-f5c68218]{display:none}}.search-keyboard-shortcuts kbd[data-v-f5c68218]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-f5c68218]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-f5c68218]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-f5c68218]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-f5c68218]{margin:8px}}.titles[data-v-f5c68218]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-f5c68218]{display:flex;align-items:center;gap:4px}.title.main[data-v-f5c68218]{font-weight:500}.title-icon[data-v-f5c68218]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-f5c68218]{opacity:.5}.result.selected[data-v-f5c68218]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-f5c68218]{position:relative}.excerpt[data-v-f5c68218]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-f5c68218]{opacity:1}.excerpt[data-v-f5c68218] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-f5c68218] mark,.excerpt[data-v-f5c68218] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-f5c68218] .vp-code-group .tabs{display:none}.excerpt[data-v-f5c68218] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-f5c68218]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-f5c68218]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-f5c68218],.result.selected .title-icon[data-v-f5c68218]{color:var(--vp-c-brand-1)!important}.no-results[data-v-f5c68218]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-f5c68218]{flex:none} diff --git a/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.js b/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.js new file mode 100644 index 000000000..265dd7aa9 --- /dev/null +++ b/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.js @@ -0,0 +1,303 @@ +import{_ as h,c as s,m as A,a,a4 as n,o as i}from"./chunks/framework.BfjuC5t1.js";const XA=JSON.parse('{"title":"Training a Neural ODE to Model Gravitational Waveforms","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/advanced/1_GravitationalWaveForm.md","filePath":"tutorials/advanced/1_GravitationalWaveForm.md","lastUpdated":null}'),t={name:"tutorials/advanced/1_GravitationalWaveForm.md"},e=n(`

      Training a Neural ODE to Model Gravitational Waveforms

      This code is adapted from Astroinformatics/ScientificMachineLearning

      The code has been minimally adapted from Keith et. al. 2021 which originally used Flux.jl

      Package Imports

      julia
      using Lux, ComponentArrays, LineSearches, LuxAMDGPU, LuxCUDA, OrdinaryDiffEq, Optimization,
      +      OptimizationOptimJL, Printf, Random, SciMLSensitivity
      +using CairoMakie
      +
      +CUDA.allowscalar(false)

      Define some Utility Functions

      Tip

      This section can be skipped. It defines functions to simulate the model, however, from a scientific machine learning perspective, isn't super relevant.

      `,7),l={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},p={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.819ex",height:"1.658ex",role:"img",focusable:"false",viewBox:"0 -583 4782.1 733","aria-hidden":"true"},k=n('',1),E=[k],r=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"r"),A("mo",null,"="),A("msub",null,[A("mi",null,"r"),A("mn",null,"1")]),A("mo",null,"−"),A("msub",null,[A("mi",null,"r"),A("mn",null,"2")])])],-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.008ex",height:"1.339ex",role:"img",focusable:"false",viewBox:"0 -442 887.6 592","aria-hidden":"true"},C=n('',1),o=[C],g=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("msub",null,[A("mi",null,"r"),A("mn",null,"1")])])],-1),f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.008ex",height:"1.339ex",role:"img",focusable:"false",viewBox:"0 -442 887.6 592","aria-hidden":"true"},y=n('',1),u=[y],I=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("msub",null,[A("mi",null,"r"),A("mn",null,"2")])])],-1),F=n(`
      julia
      function one2two(path, m₁, m₂)
      +    M = m₁ + m₂
      +    r₁ = m₂ / M .* path
      +    r₂ = -m₁ / M .* path
      +    return r₁, r₂
      +end
      one2two (generic function with 1 method)
      `,2),c={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"24.527ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 10840.9 1000","aria-hidden":"true"},B=n('',1),T=[B],m=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mo",{stretchy:"false"},"("),A("mi",null,"χ"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",null,","),A("mi",null,"ϕ"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},"↦"),A("mo",{stretchy:"false"},"("),A("mi",null,"x"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",null,","),A("mi",null,"y"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},")")])],-1),b=n(`
      julia
      @views function soln2orbit(soln, model_params=nothing)
      +    @assert size(soln, 1)  [2, 4] "size(soln,1) must be either 2 or 4"
      +
      +    if size(soln, 1) == 2
      +        χ = soln[1, :]
      +        ϕ = soln[2, :]
      +
      +        @assert length(model_params)==3 "model_params must have length 3 when size(soln,2) = 2"
      +        p, M, e = model_params
      +    else
      +        χ = soln[1, :]
      +        ϕ = soln[2, :]
      +        p = soln[3, :]
      +        e = soln[4, :]
      +    end
      +
      +    r = p ./ (1 .+ e .* cos.(χ))
      +    x = r .* cos.(ϕ)
      +    y = r .* sin.(ϕ)
      +
      +    orbit = vcat(x', y')
      +    return orbit
      +end
      soln2orbit (generic function with 2 methods)

      This function uses second-order one-sided difference stencils at the endpoints; see https://doi.org/10.1090/S0025-5718-1988-0935077-0

      julia
      function d_dt(v::AbstractVector, dt)
      +    a = -3 / 2 * v[1] + 2 * v[2] - 1 / 2 * v[3]
      +    b = (v[3:end] .- v[1:(end - 2)]) / 2
      +    c = 3 / 2 * v[end] - 2 * v[end - 1] + 1 / 2 * v[end - 2]
      +    return [a; b; c] / dt
      +end
      d_dt (generic function with 1 method)

      This function uses second-order one-sided difference stencils at the endpoints; see https://doi.org/10.1090/S0025-5718-1988-0935077-0

      julia
      function d2_dt2(v::AbstractVector, dt)
      +    a = 2 * v[1] - 5 * v[2] + 4 * v[3] - v[4]
      +    b = v[1:(end - 2)] .- 2 * v[2:(end - 1)] .+ v[3:end]
      +    c = 2 * v[end] - 5 * v[end - 1] + 4 * v[end - 2] - v[end - 3]
      +    return [a; b; c] / (dt^2)
      +end
      d2_dt2 (generic function with 1 method)

      Now we define a function to compute the trace-free moment tensor from the orbit

      julia
      function orbit2tensor(orbit, component, mass=1)
      +    x = orbit[1, :]
      +    y = orbit[2, :]
      +
      +    Ixx = x .^ 2
      +    Iyy = y .^ 2
      +    Ixy = x .* y
      +    trace = Ixx .+ Iyy
      +
      +    if component[1] == 1 && component[2] == 1
      +        tmp = Ixx .- trace ./ 3
      +    elseif component[1] == 2 && component[2] == 2
      +        tmp = Iyy .- trace ./ 3
      +    else
      +        tmp = Ixy
      +    end
      +
      +    return mass .* tmp
      +end
      +
      +function h_22_quadrupole_components(dt, orbit, component, mass=1)
      +    mtensor = orbit2tensor(orbit, component, mass)
      +    mtensor_ddot = d2_dt2(mtensor, dt)
      +    return 2 * mtensor_ddot
      +end
      +
      +function h_22_quadrupole(dt, orbit, mass=1)
      +    h11 = h_22_quadrupole_components(dt, orbit, (1, 1), mass)
      +    h22 = h_22_quadrupole_components(dt, orbit, (2, 2), mass)
      +    h12 = h_22_quadrupole_components(dt, orbit, (1, 2), mass)
      +    return h11, h12, h22
      +end
      +
      +function h_22_strain_one_body(dt::T, orbit) where {T}
      +    h11, h12, h22 = h_22_quadrupole(dt, orbit)
      +
      +    h₊ = h11 - h22
      +    hₓ = T(2) * h12
      +
      +    scaling_const =(T(π) / 5)
      +    return scaling_const * h₊, -scaling_const * hₓ
      +end
      +
      +function h_22_quadrupole_two_body(dt, orbit1, mass1, orbit2, mass2)
      +    h11_1, h12_1, h22_1 = h_22_quadrupole(dt, orbit1, mass1)
      +    h11_2, h12_2, h22_2 = h_22_quadrupole(dt, orbit2, mass2)
      +    h11 = h11_1 + h11_2
      +    h12 = h12_1 + h12_2
      +    h22 = h22_1 + h22_2
      +    return h11, h12, h22
      +end
      +
      +function h_22_strain_two_body(dt::T, orbit1, mass1, orbit2, mass2) where {T}
      +    # compute (2,2) mode strain from orbits of BH 1 of mass1 and BH2 of mass 2
      +
      +    @assert abs(mass1 + mass2 - 1.0)<1e-12 "Masses do not sum to unity"
      +
      +    h11, h12, h22 = h_22_quadrupole_two_body(dt, orbit1, mass1, orbit2, mass2)
      +
      +    h₊ = h11 - h22
      +    hₓ = T(2) * h12
      +
      +    scaling_const =(T(π) / 5)
      +    return scaling_const * h₊, -scaling_const * hₓ
      +end
      +
      +function compute_waveform(dt::T, soln, mass_ratio, model_params=nothing) where {T}
      +    @assert mass_ratio1 "mass_ratio must be <= 1"
      +    @assert mass_ratio0 "mass_ratio must be non-negative"
      +
      +    orbit = soln2orbit(soln, model_params)
      +    if mass_ratio > 0
      +        m₂ = inv(T(1) + mass_ratio)
      +        m₁ = mass_ratio * m₂
      +
      +        orbit₁, orbit₂ = one2two(orbit, m₁, m₂)
      +        waveform = h_22_strain_two_body(dt, orbit1, mass1, orbit2, mass2)
      +    else
      +        waveform = h_22_strain_one_body(dt, orbit)
      +    end
      +    return waveform
      +end
      compute_waveform (generic function with 2 methods)

      Simulating the True Model

      RelativisticOrbitModel defines system of odes which describes motion of point like particle in schwarzschild background, uses

      `,13),U={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.117ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3587.6 1000","aria-hidden":"true"},K=n('',1),P=[K],z=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"1"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"χ")])],-1),D={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.049ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3557.6 1000","aria-hidden":"true"},Z=n('',1),R=[Z],O=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"2"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"ϕ")])],-1),W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},M={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.138ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 503 636","aria-hidden":"true"},w=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D45D",d:"M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z",style:{"stroke-width":"3"}})])])],-1),H=[w],j=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"p")])],-1),N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.378ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 1051 683","aria-hidden":"true"},L=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D440",d:"M289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629Z",style:{"stroke-width":"3"}})])])],-1),G=[L],S=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"M")])],-1),J={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.054ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 466 453","aria-hidden":"true"},_=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D452",d:"M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z",style:{"stroke-width":"3"}})])])],-1),$=[_],AA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"e")])],-1),sA=n(`
      julia
      function RelativisticOrbitModel(u, (p, M, e), t)
      +    χ, ϕ = u
      +
      +    numer = (p - 2 - 2 * e * cos(χ)) * (1 + e * cos(χ))^2
      +    denom = sqrt((p - 2)^2 - 4 * e^2)
      +
      +    χ̇ = numer * sqrt(p - 6 - 2 * e * cos(χ)) / (M * (p^2) * denom)
      +    ϕ̇ = numer / (M * (p^(3 / 2)) * denom)
      +
      +    return [χ̇, ϕ̇]
      +end
      +
      +mass_ratio = 0.0         # test particle
      +u0 = Float64[π, 0.0]     # initial conditions
      +datasize = 250
      +tspan = (0.0f0, 6.0f4)   # timespace for GW waveform
      +tsteps = range(tspan[1], tspan[2]; length=datasize)  # time at each timestep
      +dt_data = tsteps[2] - tsteps[1]
      +dt = 100.0
      +const ode_model_params = [100.0, 1.0, 0.5]; # p, M, e

      Let's simulate the true model and plot the results using OrdinaryDiffEq.jl

      julia
      prob = ODEProblem(RelativisticOrbitModel, u0, tspan, ode_model_params)
      +soln = Array(solve(prob, RK4(); saveat=tsteps, dt, adaptive=false))
      +waveform = first(compute_waveform(dt_data, soln, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s = scatter!(ax, tsteps, waveform; markershape=:circle,
      +        markersize=12, markeralpha=0.25, alpha=0.5)
      +
      +    axislegend(ax, [[l, s]], ["Waveform Data"])
      +
      +    fig
      +end

      Defiing a Neural Network Model

      Next, we define the neural network model that takes 1 input (time) and has two outputs. We'll make a function ODE_model that takes the initial conditions, neural network parameters and a time as inputs and returns the derivatives.

      It is typically never recommended to use globals but incase you do use them, make sure to mark them as const.

      We will deviate from the standard Neural Network initialization and use WeightInitializers.jl,

      julia
      const nn = Chain(Base.Fix1(broadcast, cos),
      +    Dense(1 => 32, cos; init_weight=truncated_normal(; std=1e-4)),
      +    Dense(32 => 32, cos; init_weight=truncated_normal(; std=1e-4)),
      +    Dense(32 => 2; init_weight=truncated_normal(; std=1e-4)))
      +ps, st = Lux.setup(Xoshiro(), nn)
      ((layer_1 = NamedTuple(), layer_2 = (weight = Float32[-0.00011973267; -6.019302f-5; 9.096157f-5; 4.2661748f-5; 9.349409f-7; 0.00016044428; -9.652911f-6; -0.00013854839; 9.681807f-6; -2.8657123f-5; 0.00017334803; 2.4411342f-5; 9.011604f-5; 5.220362f-5; 0.00024906726; -2.4143723f-5; 0.00012566449; -4.8479058f-5; 4.074634f-5; 1.0247664f-5; -0.0001859722; 3.7356087f-5; -7.656956f-5; -1.2043876f-5; -8.47999f-5; -2.4505294f-5; -7.9587626f-5; -0.00022258626; -0.0001703838; 2.2777765f-5; 4.271127f-5; 6.0953906f-5;;], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_3 = (weight = Float32[-1.0062973f-5 -0.0001435936 7.171802f-5 3.4863042f-6 0.00017328089 6.824237f-5 -0.00012931744 7.675739f-6 0.00022924854 -0.00011960628 0.00011614925 -0.00013504615 4.9548744f-5 1.507356f-5 -0.00010520048 9.820607f-5 0.00011530446 -5.298501f-5 3.924124f-5 -8.876832f-5 6.5198125f-5 4.548969f-5 5.3590033f-5 -0.000111658905 8.5903535f-5 -3.4463697f-5 0.00013809335 1.6326525f-5 6.29639f-5 6.3808046f-5 5.5576777f-5 -0.0001310525; -7.0357426f-5 9.636652f-5 -2.7267588f-5 -5.7131452f-5 0.00015933493 9.020348f-5 -1.280962f-5 -1.5835829f-5 1.2373991f-5 -0.0003102026 -1.5455973f-5 -5.0626495f-5 -7.3990675f-5 0.00022303218 -5.265653f-5 5.5802695f-5 0.000119704986 2.3875706f-5 2.6456584f-5 -1.1514318f-5 3.4455326f-5 8.091209f-5 -1.6922031f-5 -9.741731f-5 -0.00013727894 -9.3055656f-5 0.00014561473 -0.00012389639 5.852755f-5 -0.000109424866 -4.5462173f-5 0.00021897774; -5.4261145f-5 0.000121771845 0.00020005245 2.6634425f-5 -2.619291f-5 -0.00020373413 -1.2680036f-6 3.037937f-5 -5.047399f-5 -1.8179611f-6 9.946187f-5 5.8790112f-5 -0.00014307268 3.3849017f-5 -0.00016031059 2.021655f-6 -3.0627314f-5 4.2110256f-5 -2.9767696f-5 0.00021924138 2.025092f-5 0.00011184174 -0.00019683011 2.243284f-5 6.390769f-5 1.2823031f-6 0.00012127408 8.413545f-5 5.0939067f-5 -3.1260803f-5 7.489051f-5 -0.000117571406; 8.286847f-5 5.6977842f-5 -0.00011781059 -9.9578145f-5 -1.48217305f-5 7.6619406f-5 7.078823f-5 -1.2595202f-5 -1.8840798f-5 0.00013955703 7.530427f-5 -3.0709045f-5 0.0002204093 0.00010372281 0.00010360437 -4.6901005f-6 0.000103564205 9.927554f-5 0.00015315072 0.00016233182 -6.378829f-5 0.00027685237 -0.00022597678 0.00013754105 9.243972f-5 -0.00012381934 -0.00010605406 -0.0001433673 -2.6276277f-5 -0.00013443631 -0.00011772916 5.814016f-5; -0.00016425819 3.8754493f-5 -0.00016896137 6.288182f-5 -0.00023414425 -9.0244575f-5 -5.2501702f-5 1.4775569f-5 4.904329f-5 -1.5052479f-5 -2.7051257f-5 -3.614626f-5 0.00012460808 -0.00018959433 5.600226f-5 -5.7855483f-5 3.128997f-5 9.41794f-5 8.772447f-6 -0.00014428626 -3.1018924f-5 1.3908119f-6 -4.760862f-7 -0.00012216585 1.242881f-5 4.9815384f-7 -0.00010849579 -0.00010241591 0.00014788071 -8.60535f-5 -8.829287f-5 -5.122713f-5; 0.00011356168 2.7072892f-5 -9.253048f-5 -9.7144235f-5 -5.3558386f-5 -7.102739f-5 -0.00018623754 0.00013162836 -1.5184637f-5 -9.944188f-5 0.00014779605 -2.3400253f-5 -6.563826f-5 -7.489051f-5 -0.00012160472 -7.8382036f-5 9.002087f-5 -1.4130239f-5 3.6039422f-5 -0.00011180349 -6.0440257f-6 -0.0001540761 -5.739455f-6 5.1871833f-5 6.2550454f-5 -2.9444225f-5 4.1011826f-6 7.9901416f-5 5.603711f-5 -1.4256181f-5 3.4426583f-5 4.9856906f-5; -3.286154f-5 7.116674f-5 -4.1574076f-6 -0.00015561515 4.6678346f-5 0.0001754534 3.814063f-7 -0.00022762116 5.648911f-5 4.255361f-5 -8.870969f-5 1.8850651f-5 3.7530056f-6 -4.5058187f-5 -7.086632f-5 -0.0001447943 -9.620589f-5 0.000102021324 0.00017278506 -1.789651f-5 -0.00019770837 -0.00012196603 -0.00020703816 0.00014147113 0.000104440216 0.00011035788 1.3612266f-6 8.4339816f-5 0.00018007657 8.51515f-6 -2.6068446f-5 -8.29233f-5; -0.00017980425 0.00024446344 7.396711f-5 -0.00021361737 3.724509f-5 1.4738594f-5 0.000136625 2.9866022f-5 3.47192f-5 9.010391f-5 -0.00019570945 4.4907054f-5 9.772386f-6 -7.9038015f-5 -0.00033689776 -4.9428443f-5 4.496193f-5 -5.6542092f-5 -6.9646762f-6 -0.00019470662 5.1095558f-5 -0.00014013774 -9.7984426f-5 -0.00011226721 0.00031234138 -9.5950694f-5 -0.00014004567 4.6424328f-5 -4.7736758f-5 7.010866f-5 1.6203121f-5 4.6829777f-5; -8.708018f-5 -0.00016045521 -7.2275757f-6 6.393291f-5 0.00011965771 0.00011464074 -4.5697686f-7 8.0861464f-5 0.0001022533 5.646368f-5 0.000116467454 0.00017300091 2.5471847f-5 0.00020660755 -4.3006254f-5 0.00012930758 -1.0878323f-5 0.00011079276 0.00020138327 -0.00015660196 9.4770485f-6 3.581487f-5 -8.650456f-7 -0.00014728917 -4.715184f-5 -0.00010080215 2.8409338f-5 -6.403153f-5 0.00015295464 -0.00017042554 1.3564003f-6 -0.00011035926; -9.573557f-5 -6.596612f-5 4.345059f-5 0.00010860645 0.00019122523 5.4775028f-5 8.066031f-5 -6.302869f-5 2.8398154f-5 5.9679318f-5 4.9511655f-5 0.00012019725 7.560769f-5 3.4006407f-5 -7.405292f-6 -3.3514407f-5 -0.00013196601 8.2634935f-5 -1.6556698f-5 0.00011844044 -2.1374497f-5 -5.9172984f-5 0.0002714602 9.1502596f-5 -2.4370893f-5 -6.784604f-5 2.7011944f-5 -0.00012285201 -0.00018385517 9.90055f-5 1.537271f-5 -9.662465f-5; -0.00013863033 0.00012131699 4.4665827f-5 4.008011f-5 -0.00029301443 0.00010328879 -0.0001005913 6.607562f-5 8.064893f-5 -1.5013011f-5 -8.330572f-5 -4.4715736f-5 6.1474464f-5 -0.000120070705 -4.839504f-5 -1.6226278f-6 -7.70251f-5 -5.7063782f-5 6.19982f-5 6.2265244f-5 -5.091939f-5 -0.000121028796 -8.224875f-5 -6.8355905f-5 -5.8808615f-5 6.492918f-5 8.943161f-5 6.348348f-5 -0.00019190085 -0.00010643892 3.577843f-6 -4.6126414f-5; 0.00012505539 -3.8034304f-5 -0.00018813847 2.5143841f-5 -1.5800473f-5 5.7095695f-6 0.00012570035 8.26293f-5 -2.4939525f-5 5.9741706f-5 1.7747216f-5 -1.7496443f-5 8.440886f-5 9.904175f-5 -2.7824995f-5 6.900068f-5 8.423556f-5 -0.00012994438 0.00016383445 -8.6308886f-5 0.0001719667 8.853987f-5 -0.00011011876 -1.8455012f-5 8.94854f-5 -0.00011606892 7.799474f-6 -5.584804f-5 -8.175717f-5 -1.3835867f-5 -9.989124f-5 3.248445f-5; 0.0001143422 0.00012731152 0.00018125362 -6.4191668f-6 0.00016003738 -2.7765425f-5 -0.0001555723 -4.8895436f-5 0.0001035261 -0.00012203125 -2.6826072f-5 1.8942063f-5 4.4934506f-5 -0.000106232124 2.2164802f-6 -0.00018457786 -2.8980878f-5 -2.7131715f-5 3.6822305f-5 -0.00012809213 0.00017954524 6.7248395f-5 6.213277f-5 7.3543066f-5 -8.91384f-5 8.050668f-5 9.043197f-5 0.00011347448 -2.4456815f-5 -0.00014946179 0.00019021088 -0.00018729462; 9.272404f-5 1.8320108f-5 7.896093f-5 0.00017118001 -0.0001250922 2.291453f-5 6.254659f-5 0.000116823874 -3.7232323f-5 -7.725545f-5 -1.972598f-5 -1.9868286f-5 2.5172509f-5 -5.481218f-5 0.00016046854 4.3901264f-6 -6.932835f-5 7.142715f-5 2.5496958f-5 -3.063386f-5 0.00016012261 -7.974759f-5 3.226735f-5 0.000104737555 -4.9273913f-5 -3.3438133f-5 0.00020110856 -0.00013596313 0.00015645802 -0.00012764387 0.00010554395 7.904172f-6; 7.832622f-5 0.00011860157 5.266906f-5 -7.044353f-5 3.933173f-5 1.6427433f-5 -0.00011026127 -4.351902f-5 0.00022462536 7.477401f-5 -9.0549554f-5 0.00016367993 -3.6606558f-5 5.467878f-5 -2.690087f-5 4.4372475f-5 -1.575863f-5 3.407016f-5 6.962714f-6 -0.00011319172 -1.3054113f-5 -4.122088f-5 3.6056736f-5 9.1263464f-5 7.2483024f-5 -0.00016864711 7.967744f-5 2.6180001f-5 -0.00015273914 -1.9276631f-5 6.645485f-5 -9.559493f-5; 4.3957913f-5 0.00014572433 -1.4306217f-5 -7.624112f-5 -2.9588346f-5 0.00014455158 4.0845338f-5 6.834219f-5 -9.741042f-5 -0.00014014456 -1.6901933f-5 1.7843891f-5 -0.00010838938 4.6790734f-5 0.00019295757 -6.0569873f-5 -0.00013637965 -3.0474872f-5 0.0001037594 0.00019073563 6.419302f-7 -0.00013129206 -0.000105330306 -1.7867922f-5 0.000115244446 -1.6840724f-5 -0.00016233283 0.000109826695 -5.968982f-7 -0.00013197932 -0.00013100801 8.5669435f-6; 9.623581f-6 -5.6304347f-5 -4.3870004f-5 0.0002447548 0.00017727955 -4.4379878f-5 -8.2319966f-5 0.000109945286 -6.691387f-6 4.3810637f-6 4.286829f-5 -0.00012954461 -0.000112196445 -6.5902816f-5 6.441595f-5 0.00012012445 1.5023467f-5 -0.00011764802 0.00012402602 -0.00021996978 6.3675914f-5 -9.014398f-5 0.00010708526 -0.00020586811 0.00012778126 7.886614f-5 -0.00013825842 -6.0239498f-5 2.3244516f-5 -3.6498983f-5 8.609585f-5 2.1549386f-5; 7.344093f-5 9.49406f-5 -7.0200425f-5 -3.4793175f-5 -1.9189849f-5 -3.8277554f-5 0.00011976373 -2.1197337f-5 -8.067376f-5 -3.2448952f-5 -7.225808f-6 -2.4172796f-5 -3.2152413f-5 3.2865668f-5 -2.211482f-5 -4.6703088f-5 -0.00023568759 -3.9639992f-5 -3.4805715f-5 0.00017792893 7.392999f-5 -0.000108427135 1.9616336f-5 1.4932766f-5 0.00014690605 -6.202372f-5 -4.172182f-5 0.00020422452 3.4323224f-5 1.6616243f-5 -0.00014446728 6.3973195f-5; -2.8892682f-5 -9.694493f-5 2.6234446f-5 -3.5557365f-5 1.9830559f-5 -0.00016544068 -7.2985036f-5 -1.26402165f-5 0.00016205726 -0.00019165275 3.345725f-5 2.944733f-5 -7.4804484f-5 -6.582739f-6 2.4713332f-5 0.0001649914 7.26928f-6 -0.00022154477 9.388105f-5 5.7786277f-5 0.00014243826 -3.4910674f-5 9.038743f-5 -5.1882926f-6 -9.168539f-5 0.00022661644 2.6507185f-5 0.00025639276 -4.074251f-5 -6.5140506f-5 8.830005f-5 0.00012997884; 3.4252414f-5 1.7978846f-5 0.000169445 0.00018952793 -8.011082f-5 6.781402f-5 0.000120731675 1.5522899f-5 2.1491327f-5 -0.00013182944 -1.638258f-5 -9.910352f-5 1.763488f-5 -5.268952f-5 0.0001341999 0.00012931575 2.0700243f-5 -7.521594f-5 -8.710873f-5 -0.00025061367 -4.814495f-5 -5.369676f-5 8.906928f-5 -0.00012929876 3.5379262f-6 0.00019203326 -0.0001413457 0.00011003606 2.02384f-5 2.5250322f-6 -4.823328f-6 0.00017709933; 0.00010651335 3.9165167f-5 7.6804965f-5 0.00018133184 8.555229f-5 6.652526f-5 -0.00012029219 -7.9235f-5 -0.00020872283 -1.1949973f-5 -0.00013770128 -5.876042f-5 -4.9586248f-5 -9.1145936f-5 -0.00010791469 2.2212389f-5 2.3586554f-5 0.00013769098 0.000111135545 -9.670577f-5 -9.732586f-5 8.423925f-6 0.00017610678 9.734474f-5 1.8881644f-6 1.411364f-5 -5.9431986f-5 -1.2221734f-5 -8.04621f-5 -6.966804f-5 0.00023346557 -6.003869f-5; -3.876047f-5 0.00014561284 -4.148563f-5 8.296341f-5 -6.987597f-5 0.00013355879 -0.00011680688 4.320796f-6 3.716612f-5 -4.7806792f-5 -9.4781724f-5 5.3489697f-5 -1.4912613f-5 8.296775f-5 2.3379346f-6 -1.0566036f-5 -0.000108239285 -7.448106f-5 -3.0216563f-5 7.662209f-5 0.00014964533 -0.00011516985 -3.5049095f-5 -3.0671647f-5 -3.2881521f-6 -3.6293895f-5 7.330256f-7 -3.5557747f-5 4.4640456f-5 8.841141f-5 6.586005f-5 -0.00017228896; -1.24846265f-5 0.0001208953 0.00014398887 4.5776145f-5 -0.000115045936 -5.9687086f-6 6.0125035f-6 6.8744295f-5 8.819092f-6 6.5838617f-6 -8.074785f-6 8.18883f-6 8.1181395f-5 0.00016108702 2.6273632f-5 -3.1020445f-5 9.508686f-6 4.0793813f-5 -0.0001408116 3.1298189f-6 2.3511593f-5 -8.186044f-5 -0.00010960179 -0.00016496978 4.405605f-6 -6.639267f-5 -0.000101537495 7.49069f-6 0.00010797909 3.2122553f-5 0.00019854389 6.8400455f-5; -0.00017579607 4.488868f-5 -7.397126f-8 2.2734788f-5 4.2988877f-6 -0.00012200552 4.1339466f-5 2.328481f-5 4.1465668f-5 8.132256f-6 8.115436f-5 1.3009662f-5 -1.9977986f-5 -0.0001287793 -9.6333824f-5 2.874979f-5 -5.3080348f-5 -5.785651f-5 -6.20475f-5 5.9302507f-5 2.9213074f-5 9.509549f-5 -3.0428158f-5 0.00017109046 0.00020654775 5.3617234f-5 0.00010196593 0.0002069366 2.0894107f-5 1.6600687f-5 -7.48392f-5 0.00012764451; -1.6030723f-5 -1.9729712f-5 2.562178f-5 0.00022121618 0.00018367641 4.139218f-5 7.6101554f-5 0.00019930796 7.185698f-5 7.8943165f-5 -7.644431f-5 4.3318218f-5 -1.3253722f-5 -2.1225085f-5 -0.00016582398 -0.00018792605 -1.3799033f-5 0.0002778923 -0.000105594445 0.000120767974 3.4850607f-5 -4.4116554f-5 3.988118f-5 -4.367971f-5 0.00016983895 -4.00821f-5 -8.422913f-5 1.4080487f-5 9.899427f-6 4.9401973f-5 -3.4165874f-5 -7.69171f-5; 4.1773757f-5 0.00014913613 0.000126567 0.00017125023 -6.546571f-5 0.00033155672 0.00011466273 7.809752f-5 6.979409f-5 3.1921016f-5 6.510741f-5 -8.501913f-5 6.257237f-5 0.00011156401 -9.156247f-5 9.0500354f-5 9.2775146f-5 -6.766979f-6 -1.7866389f-5 -2.7544174f-5 -4.399843f-5 7.5294745f-5 0.00011452333 -8.9779605f-5 -0.0001744599 -0.00013224669 9.717873f-5 0.00013802775 2.7223847f-5 6.938874f-5 -0.00015714747 -3.729033f-5; -0.00010186369 1.8786994f-5 1.1669726f-5 3.7432466f-5 0.00014849601 -8.1198996f-5 1.2223435f-5 3.6235957f-5 -6.6038585f-5 -0.00020149031 -8.3387975f-5 -1.1616641f-5 3.861739f-5 5.2266863f-5 0.00017672828 -3.6429665f-5 0.0001213096 -0.0001294468 -9.729489f-5 0.00011058528 -4.197558f-6 0.00019134328 8.317239f-5 6.726744f-5 2.998288f-5 -0.0001831322 7.862825f-5 0.00014545645 -3.136986f-5 0.00011239314 0.0001090515 7.624094f-5; 0.00010192903 -6.524324f-5 7.143097f-5 -8.02076f-5 -1.0315073f-5 -7.236077f-5 -0.00015450438 -7.5828546f-5 -0.00017704595 5.233977f-5 -3.8811017f-5 -7.597749f-5 0.00018876392 -0.00013852713 -1.1569201f-5 -2.537716f-5 -0.00022445363 -4.2580206f-5 -0.00011457844 -0.00017382255 -1.9114601f-5 3.0382655f-5 9.44476f-5 -4.1854648f-5 0.00017476828 9.583724f-5 8.147809f-5 9.057342f-5 -0.00016546999 8.475024f-5 4.4872453f-5 8.55354f-5; 4.9008333f-5 -0.00015482772 -2.9896846f-5 -7.672894f-5 -7.277536f-5 -1.7218908f-5 -2.0766205f-5 0.00015757453 0.00016821099 0.00012837019 -0.00016522144 2.8738874f-5 -3.516303f-5 -0.000107145315 8.35585f-5 -1.5251731f-5 1.805957f-5 0.00013188834 -0.000100679004 0.00015572732 -8.925097f-5 0.00017002202 0.00010146622 -0.00024448716 0.00016385132 1.8185434f-5 -3.342352f-5 7.46513f-5 -0.00013326635 6.0554674f-5 7.850088f-5 -5.4996348f-5; -0.000119494725 -0.00025112068 0.00011172785 9.278077f-6 1.7621252f-5 -1.15393295f-5 3.6610567f-5 -2.8657137f-6 -4.93761f-5 3.655143f-5 -0.00012682205 -8.361162f-6 0.00018711382 -2.9714225f-5 3.2761087f-5 0.00015201842 -0.00010104727 -0.00012077274 -9.988359f-6 -0.00014403982 -7.473175f-5 -2.1082627f-5 -0.00021641343 2.9726623f-5 0.00014701443 -0.00015106272 2.60452f-5 -0.00020045234 7.8442135f-5 -6.923768f-5 5.397001f-5 4.615466f-6; -1.7326232f-5 -4.5282093f-5 -1.1445137f-5 6.4935935f-5 9.0735455f-5 -1.1834731f-5 -2.7228747f-5 -1.252255f-6 -8.46312f-5 -4.548237f-6 -2.6095266f-5 3.601256f-5 7.6172396f-6 -4.7420755f-5 -0.00021223628 1.2169157f-5 0.0001208721 -4.9286413f-5 -4.5233795f-5 -0.00019525501 2.342413f-5 -0.0001615138 -4.1510673f-5 4.5838387f-5 -0.00022700398 -6.700035f-5 -7.5483396f-5 -4.520957f-6 6.766729f-5 4.7984697f-5 0.00010202208 -7.772921f-5; 0.0001495528 0.00020418811 3.9540133f-5 -6.3646266f-6 6.240287f-5 0.00015583959 -9.5992895f-5 5.6563535f-5 7.875602f-5 -8.022817f-6 -6.209155f-5 3.4326014f-5 6.877887f-5 -8.3817555f-5 -9.155829f-5 -2.6342583f-5 -1.791582f-5 -7.3701696f-5 3.1804808f-5 -0.00022330634 -8.917969f-6 -0.00024460425 0.00014764017 7.990559f-5 1.008664f-5 0.00013233775 -0.00021250913 -6.5767315f-5 -0.00010873815 -2.6074382f-5 -8.926506f-5 -8.4303254f-5], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_4 = (weight = Float32[0.00011602808 -0.000120417775 7.054768f-5 -0.0001364321 1.0047987f-5 -8.540841f-5 -2.2970164f-5 -3.7272024f-5 7.4761874f-6 1.3028075f-5 1.06746675f-5 -4.7827394f-5 3.6491794f-5 -8.778504f-5 -3.844625f-5 9.919472f-5 -9.7661235f-5 2.755268f-5 1.7365865f-5 -4.661768f-5 -0.00011277104 -2.358428f-5 0.00014879108 -0.00028839387 -8.063303f-5 -1.4004848f-5 5.652013f-5 4.9286264f-5 0.000105819985 4.3599415f-5 -0.00013917121 -0.000105863226; -9.1772155f-5 -0.00017995205 4.675251f-7 -5.2920554f-5 0.00014703989 0.00018397685 -6.5224354f-5 3.4467295f-5 5.9178594f-5 -0.00023862447 -6.239535f-5 -7.785182f-5 1.7593879f-5 -1.3778444f-5 6.928703f-5 -8.063013f-5 4.069519f-5 1.616499f-5 0.00013895672 8.854975f-5 0.00012469526 -4.8969636f-5 6.860495f-5 -1.4344437f-5 9.547716f-5 5.0288338f-5 -2.761656f-5 9.424831f-5 -0.0001829136 -8.509033f-5 -5.9762977f-5 2.7484823f-5], bias = Float32[0.0; 0.0;;])), (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple(), layer_4 = NamedTuple()))

      Similar to most DL frameworks, Lux defaults to using Float32, however, in this case we need Float64

      julia
      const params = ComponentArray{Float64}(ps)
      +
      +const nn_model = StatefulLuxLayer(nn, st)
      Lux.StatefulLuxLayer{true, Lux.Chain{@NamedTuple{layer_1::Lux.WrappedFunction{Base.Fix1{typeof(broadcast), typeof(cos)}}, layer_2::Lux.Dense{true, typeof(cos), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(cos), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}, layer_4::Lux.Dense{true, typeof(identity), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}}, Nothing}, Nothing, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}, layer_4::@NamedTuple{}}}(Chain(), nothing, (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple(), layer_4 = NamedTuple()), nothing)

      Now we define a system of odes which describes motion of point like particle with Newtonian physics, uses

      `,14),iA={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},aA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.117ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3587.6 1000","aria-hidden":"true"},nA=n('',1),hA=[nA],tA=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"1"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"χ")])],-1),eA={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},lA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.049ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3557.6 1000","aria-hidden":"true"},pA=n('',1),kA=[pA],EA=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"2"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"ϕ")])],-1),rA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},dA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.138ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 503 636","aria-hidden":"true"},QA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D45D",d:"M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z",style:{"stroke-width":"3"}})])])],-1),CA=[QA],oA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"p")])],-1),gA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},fA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.378ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 1051 683","aria-hidden":"true"},vA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D440",d:"M289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629Z",style:{"stroke-width":"3"}})])])],-1),yA=[vA],uA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"M")])],-1),IA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},FA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.054ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 466 453","aria-hidden":"true"},cA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D452",d:"M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z",style:{"stroke-width":"3"}})])])],-1),qA=[cA],BA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"e")])],-1),TA=n(`
      julia
      function ODE_model(u, nn_params, t)
      +    χ, ϕ = u
      +    p, M, e = ode_model_params
      +
      +    # In this example we know that \`st\` is am empty NamedTuple hence we can safely ignore
      +    # it, however, in general, we should use \`st\` to store the state of the neural network.
      +    y = 1 .+ nn_model([first(u)], nn_params)
      +
      +    numer = (1 + e * cos(χ))^2
      +    denom = M * (p^(3 / 2))
      +
      +    χ̇ = (numer / denom) * y[1]
      +    ϕ̇ = (numer / denom) * y[2]
      +
      +    return [χ̇, ϕ̇]
      +end
      ODE_model (generic function with 1 method)

      Let us now simulate the neural network model and plot the results. We'll use the untrained neural network parameters to simulate the model.

      julia
      prob_nn = ODEProblem(ODE_model, u0, tspan, params)
      +soln_nn = Array(solve(prob_nn, RK4(); u0, p=params, saveat=tsteps, dt, adaptive=false))
      +waveform_nn = first(compute_waveform(dt_data, soln_nn, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l1 = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s1 = scatter!(ax, tsteps, waveform; markershape=:circle, markersize=12,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2)
      +
      +    l2 = lines!(ax, tsteps, waveform_nn; linewidth=2, alpha=0.75)
      +    s2 = scatter!(ax, tsteps, waveform_nn; markershape=:circle,
      +        markersize=12, markeralpha=0.25, alpha=0.5, strokewidth=2)
      +
      +    axislegend(ax, [[l1, s1], [l2, s2]],
      +        ["Waveform Data", "Waveform Neural Net (Untrained)"]; position=:lb)
      +
      +    fig
      +end

      Setting Up for Training the Neural Network

      Next, we define the objective (loss) function to be minimized when training the neural differential equations.

      julia
      function loss(θ)
      +    pred = Array(solve(prob_nn, RK4(); u0, p=θ, saveat=tsteps, dt, adaptive=false))
      +    pred_waveform = first(compute_waveform(dt_data, pred, mass_ratio, ode_model_params))
      +    loss = sum(abs2, waveform .- pred_waveform)
      +    return loss, pred_waveform
      +end
      loss (generic function with 1 method)

      Warmup the loss function

      julia
      loss(params)
      (0.17215171721421207, [-0.024249801535431388, -0.02346585418572156, -0.022681906836011435, -0.021357317180048352, -0.019464416988440935, -0.016963046554685536, -0.013800484708468138, -0.00990849440296376, -0.00520559267126083, 0.0004032969641172105, 0.007017656891419924, 0.014720493495480241, 0.02353090231748062, 0.033276169354516875, 0.043314705833896336, 0.05188106697558526, 0.054700333055434175, 0.0427238357065267, 0.002423105357175596, -0.06575883215773011, -0.11027317642844461, -0.07678253350835433, -0.0072353830951188206, 0.03869619541269424, 0.054302679477350145, 0.053010890392771556, 0.044889237694299845, 0.034846679863281424, 0.024936638661368058, 0.015923083057834027, 0.008021668513541608, 0.0012311811425605268, -0.004529475034590188, -0.009361716233634384, -0.013364035775378412, -0.016620815901878253, -0.019203788197126054, -0.021169013129862177, -0.022559076807699988, -0.023404004269245684, -0.023722253289358303, -0.023521083092865745, -0.022797843963709284, -0.021537669920586207, -0.019715602687456514, -0.017294276511174298, -0.014223184402618666, -0.010438139233305582, -0.005860520949963716, -0.00039881752053247047, 0.006043962037684947, 0.013554593203308008, 0.022161982187542492, 0.03173508798113943, 0.041733947747754976, 0.050644402047554236, 0.05475043416740677, 0.045981405841294294, 0.011152289366379492, -0.05420462270255706, -0.10786003980798775, -0.08685899277206673, -0.01774186110866609, 0.0338250226807328, 0.053499201452751846, 0.05400660035342886, 0.04644819440068384, 0.03644347334895938, 0.026379742162639767, 0.01716279566038105, 0.009056918301880643, 0.0020871637830344454, -0.003833000649596514, -0.008796465842887504, -0.012913937856553289, -0.01626587145143468, -0.018934307254695595, -0.02097197454005451, -0.0224295200316549, -0.023335406713336643, -0.023712900244009478, -0.02357041802509943, -0.022906394593631228, -0.021710058883234875, -0.019958459751178312, -0.01761360308066557, -0.014633651841338422, -0.010950330269378201, -0.006496278517170611, -0.00117520713687785, 0.00509967877361141, 0.012423985228668584, 0.02082949459404453, 0.03022588244507418, 0.04015436535793723, 0.049323788875630895, 0.05450738977182879, 0.04854762140980133, 0.018910188751749105, -0.042502139586782596, -0.10315104867281276, -0.09558611000472392, -0.028939522297792744, 0.02803995234799488, 0.052223130646726956, 0.054837231555989026, 0.04797944252126462, 0.03806268827600256, 0.027862360747976808, 0.018437229466984544, 0.010129000748480839, 0.002967092500939512, -0.0031100197038603306, -0.0082161156668996, -0.012446121061225964, -0.015901568755078654, -0.018652617240000398, -0.020768350144362, -0.02229141599601115, -0.023260958394085672, -0.023697093505961463, -0.02361282939105417, -0.023009218865298837, -0.021874751751256145, -0.020191745724326714, -0.017923246391015904, -0.015030312218619087, -0.011447676185503672, -0.0071116709655967255, -0.0019285321933857303, 0.00418515298414508, 0.011326237661996849, 0.01953487303756195, 0.02874787822057803, 0.03858428047507269, 0.047938884837366906, 0.05401544627420644, 0.05050337220632601, 0.0256911577239574, -0.030974995521538738, -0.09638900641676833, -0.102573566871294, -0.040619015798842875, 0.021284462092519427, 0.05040555779361737, 0.05546518394540094, 0.04946935076603893, 0.03970253564114501, 0.029377636383265602, 0.01975531095702029, 0.01123161885375543, 0.003879775858755852, -0.0023695397955581397, -0.00761096830444328, -0.011966053312152423, -0.015522255130645694, -0.018364387021327692, -0.020552878493211888, -0.022147379737285706, -0.02317926869799286, -0.02367518135491305, -0.023649303371970062, -0.02310461742752934, -0.02203298018800196, -0.020414371431591624, -0.018224930107454487, -0.015413676223328199, -0.011928852014086397, -0.007709193266232499, -0.0026602412566282306, 0.0032996827586000317, 0.010262587199066909, 0.018274577343534007, 0.027303342429091142, 0.03702853083260528, 0.0465057213069404, 0.05331917019944852, 0.051918238954459836, 0.03153306060791138, -0.019910122722075096, -0.08788362950254597, -0.10750094646131855, -0.05250722342833319, 0.013532854861997918, 0.0479619737149416, 0.055852146956217485, 0.050901076175073945, 0.04135375329743446, 0.03093541376814808, 0.02110756232480277, 0.01237125722871237, 0.004818557596569256, -0.0015962956792808102, -0.006991680144950654, -0.011469023119692376, -0.015132311698807245, -0.018060132121416765, -0.020332234338905318, -0.021995136036621243, -0.023091139245199024, -0.023646409526520064, -0.023679578179550936, -0.023193543086071973, -0.022182036958480172, -0.02063327847752358, -0.018513107066246644, -0.015785984296997794, -0.012396365770967076, -0.008287656846264849, -0.003368634740061504, 0.0024402092108903213, 0.00922922779343203, 0.017051490948011293, 0.02589298414209541, 0.03549058692942278, 0.04503937218323815, 0.05245167905094164, 0.05286401786344559, 0.0364818425938837, -0.009505948227704146, -0.07802438838691865, -0.11013670289983736, -0.06425595915170446, 0.004772010596095392, 0.04482024983889405, 0.055946769355377436, 0.05225496995452235, 0.04301460045508618, 0.03252435619257789, 0.022501895668115328, 0.013547176658980737, 0.0057907331212782714, -0.0008020753538423008, -0.006349674377069929, -0.01095520031828327, -0.014727439711552081, -0.017748123886680903, -0.02010087532816729, -0.021835155048116412, -0.0229959341098181, -0.023611652701661365, -0.02370339152416624, -0.023275956637742234, -0.022325259983575547, -0.020841440939984492, -0.018793020521969617, -0.016146637502150406, -0.012849766519993163, -0.008848805202157648, -0.004847843884322281])

      Now let us define a callback function to store the loss over time

      julia
      const losses = Float64[]
      +
      +function callback(θ, l, pred_waveform)
      +    push!(losses, l)
      +    @printf "Training %10s Iteration: %5d %10s Loss: %.10f\\n" "" length(losses) "" l
      +    return false
      +end
      callback (generic function with 1 method)

      Training the Neural Network

      Training uses the BFGS optimizers. This seems to give good results because the Newtonian model seems to give a very good initial guess

      julia
      adtype = Optimization.AutoZygote()
      +optf = Optimization.OptimizationFunction((x, p) -> loss(x), adtype)
      +optprob = Optimization.OptimizationProblem(optf, params)
      +res = Optimization.solve(
      +    optprob, BFGS(; initial_stepnorm=0.01, linesearch=LineSearches.BackTracking());
      +    callback, maxiters=1000)
      retcode: Success
      +u: ComponentVector{Float64}(layer_1 = Float64[], layer_2 = (weight = [-0.00011973267100973714; -6.019301872584702e-5; 9.096157009471292e-5; 4.266174801152644e-5; 9.349408855980382e-7; 0.00016044428048176378; -9.652911103319343e-6; -0.0001385483919874571; 9.681806659489127e-6; -2.8657123039017627e-5; 0.00017334803123936343; 2.4411341655644033e-5; 9.011603833644094e-5; 5.220362072567235e-5; 0.0002490672632118383; -2.4143722839640925e-5; 0.00012566449004216483; -4.847905802303613e-5; 4.074634125572134e-5; 1.0247664249599429e-5; -0.0001859721960498307; 3.735608697743877e-5; -7.656955858682703e-5; -1.2043876267849151e-5; -8.479990356138734e-5; -2.4505294277351263e-5; -7.95876258051809e-5; -0.00022258625540396467; -0.00017038380610754774; 2.2777765479984303e-5; 4.27112718170935e-5; 6.095390563132088e-5;;], bias = [-1.164825726562541e-16; 7.32997919745033e-18; 9.983766760539752e-17; 7.770460759065174e-17; 1.7788999500159933e-18; 1.4588208534933488e-16; -1.2507218408227132e-17; -1.251678622168931e-16; 1.2733169472004439e-17; 7.135391304264406e-18; 2.484754549107743e-16; 6.723620038833896e-18; -2.2857880932878122e-17; 1.1538087757854018e-16; 2.463886399288879e-16; -1.3610381677146602e-17; 9.87350838026452e-17; -4.603549365892236e-17; 5.6417112338565525e-18; 2.1427353925903686e-17; -1.7516937468067382e-16; 9.686404129065536e-17; -1.1068338528151916e-16; -4.679508920209203e-18; 2.5985377908932743e-17; 2.0807714940635198e-17; -1.2025065573329291e-16; -2.2061612577673057e-16; -1.8567883300781978e-17; 2.482936980343263e-18; 3.4047360819198803e-18; 2.173035420130597e-18;;]), layer_3 = (weight = [-1.0061051374231235e-5 -0.0001435916774186004 7.171994459566595e-5 3.4882259809725193e-6 0.0001732828104890276 6.824429240293579e-5 -0.00012931552098380893 7.677660529568793e-6 0.00022925046598756195 -0.00011960435856381964 0.00011615116911923022 -0.00013504423165942132 4.9550665631964246e-5 1.5075481338853033e-5 -0.00010519855911629895 9.820798825457177e-5 0.00011530637950852913 -5.2983089493510066e-5 3.924316208794128e-5 -8.876639819719384e-5 6.520004628907118e-5 4.54916126058287e-5 5.359195440759037e-5 -0.00011165698285695655 8.590545715049844e-5 -3.446177558872437e-5 0.0001380952753846818 1.632844671472133e-5 6.296582526044495e-5 6.380996731094503e-5 5.557869828989134e-5 -0.0001310505749403198; -7.035733811956914e-5 9.636661037635938e-5 -2.7267500046794955e-5 -5.7131364302980244e-5 0.0001593350176682785 9.020356868692558e-5 -1.2809531983142202e-5 -1.5835740998076307e-5 1.2374078904182701e-5 -0.0003102025069545866 -1.5455885078912935e-5 -5.062640717536254e-5 -7.399058755421144e-5 0.00022303227218632536 -5.265644300546716e-5 5.5802782879406165e-5 0.00011970507388302038 2.3875793556877868e-5 2.6456672129067134e-5 -1.1514230538371901e-5 3.4455414277695585e-5 8.091217808957168e-5 -1.692194324444572e-5 -9.741722111524122e-5 -0.0001372788532188075 -9.305556828788522e-5 0.0001456148171547888 -0.000123896300794363 5.852763628187465e-5 -0.00010942477762167383 -4.5462085255925074e-5 0.00021897783211731302; -5.4259894708870824e-5 0.00012177309585758837 0.0002000537050168512 2.663567542704249e-5 -2.6191660394305017e-5 -0.00020373288239562497 -1.2667532285363746e-6 3.0380619906002633e-5 -5.047274058078849e-5 -1.8167106912177227e-6 9.94631180635115e-5 5.8791362649300245e-5 -0.00014307143388059756 3.3850267614707524e-5 -0.00016030934162183824 2.0229054786807387e-6 -3.062606370286228e-5 4.211150630517336e-5 -2.976644569052881e-5 0.00021924263168848616 2.025217040289681e-5 0.00011184299259703118 -0.00019682885718275532 2.2434090029220385e-5 6.390894017904274e-5 1.2835534750604354e-6 0.00012127533304528576 8.413669897497975e-5 5.094031698325898e-5 -3.125955222849255e-5 7.489175809105353e-5 -0.00011757015559333028; 8.287123114749126e-5 5.6980601816385334e-5 -0.00011780782892421003 -9.957538508861785e-5 -1.4818970835409752e-5 7.662216581117524e-5 7.079098782450589e-5 -1.2592442312985069e-5 -1.8838037926986118e-5 0.00013955978852645128 7.530702919645007e-5 -3.0706285310959205e-5 0.00022041206307656967 0.00010372556630935908 0.0001036071282712616 -4.687340829338635e-6 0.00010356696498527327 9.927829728875734e-5 0.00015315347468894462 0.00016233458359674242 -6.378553166108842e-5 0.00027685512964562096 -0.00022597401925414693 0.0001375438098464596 9.244247690256669e-5 -0.00012381657665646984 -0.0001060513002314226 -0.00014336454273257543 -2.6273517273907963e-5 -0.00013443355214367962 -0.00011772640368254384 5.8142917855357026e-5; -0.00016426227840953705 3.8750406823709946e-5 -0.00016896545741135337 6.287773693085625e-5 -0.00023414833150699074 -9.024866186905255e-5 -5.250578862277114e-5 1.4771482605049232e-5 4.903920388070612e-5 -1.5056565749805115e-5 -2.7055343813336912e-5 -3.6150345400787905e-5 0.00012460399273889032 -0.00018959841428684904 5.59981734875745e-5 -5.7859569202523714e-5 3.128588185403491e-5 9.417531226401265e-5 8.768360097489355e-6 -0.00014429034228331664 -3.1023010811836416e-5 1.3867254517356232e-6 -4.801726652450645e-7 -0.00012216993228893042 1.2424723430490129e-5 4.940673727242762e-7 -0.00010849987767530952 -0.00010241999290539078 0.00014787662338108665 -8.605758659203735e-5 -8.829695899865612e-5 -5.123121547174407e-5; 0.00011356015108418405 2.7071366793328487e-5 -9.253200317374982e-5 -9.714576065648294e-5 -5.355991145820394e-5 -7.102891452717263e-5 -0.0001862390612868223 0.00013162683405340648 -1.518616266452973e-5 -9.944340620763597e-5 0.00014779452118916057 -2.3401778372270137e-5 -6.563978734533861e-5 -7.489203329073166e-5 -0.0001216062423108395 -7.838356162296618e-5 9.001934319627299e-5 -1.4131764538385097e-5 3.603789679714524e-5 -0.00011180501808753271 -6.045551282049059e-6 -0.00015407762605804915 -5.7409806058285545e-6 5.1870307806031467e-5 6.254892884413106e-5 -2.9445750834336582e-5 4.0996570251584335e-6 7.989989041478042e-5 5.6035586175374077e-5 -1.4257706817214027e-5 3.442505710068212e-5 4.985538050191626e-5; -3.286226457697843e-5 7.116601226021708e-5 -4.15813339481313e-6 -0.00015561588044642346 4.6677620032421246e-5 0.00017545267654219408 3.806805023551872e-7 -0.0002276218856581526 5.648838303619153e-5 4.2552883298919666e-5 -8.8710416109675e-5 1.8849925238607527e-5 3.752279765248412e-6 -4.505891230786999e-5 -7.086704683154194e-5 -0.00014479503262686448 -9.620661696084314e-5 0.00010202059818999055 0.00017278433550250842 -1.789723502719685e-5 -0.00019770909968195506 -0.0001219667592681094 -0.00020703888550764658 0.00014147040381663563 0.00010443949029882698 0.00011035715759367784 1.360500830340939e-6 8.433908986496139e-5 0.00018007584911407747 8.514423809681148e-6 -2.6069172251884462e-5 -8.292402891806152e-5; -0.00017980657479471705 0.00024446112025782406 7.396478418980086e-5 -0.0002136196960576644 3.7242764176536686e-5 1.4736269133794072e-5 0.0001366226827145707 2.9863697148027907e-5 3.47168754730061e-5 9.010158488547151e-5 -0.00019571177448356433 4.4904729532047025e-5 9.770061535735622e-6 -7.90403389486311e-5 -0.0003369000876203486 -4.9430767592073575e-5 4.495960480438479e-5 -5.654441678177726e-5 -6.96700066089494e-6 -0.00019470894379753953 5.109323343517696e-5 -0.00014014006204650042 -9.7986750677022e-5 -0.0001122695355092022 0.00031233905270949217 -9.595301866045517e-5 -0.00014004799207884675 4.642200316326408e-5 -4.7739081980902574e-5 7.010633659103584e-5 1.6200796619726213e-5 4.682745226330068e-5; -8.707791502237676e-5 -0.00016045294259091404 -7.225309299964217e-6 6.393517461257629e-5 0.00011965997319786588 0.00011464300397201168 -4.54710484138598e-7 8.086373046389994e-5 0.00010225556971856165 5.646594573628806e-5 0.00011646972044254061 0.00017300317623304866 2.547411341803254e-5 0.00020660982037080955 -4.300398731141527e-5 0.00012930984295091323 -1.0876056957927053e-5 0.00011079502647627679 0.00020138553728467438 -0.0001565996973018465 9.479314858608428e-6 3.5817138187136965e-5 -8.627792131726496e-7 -0.00014728690811314856 -4.714957330141975e-5 -0.00010079988359355636 2.8411604862788284e-5 -6.40292601834721e-5 0.00015295690892380145 -0.00017042327462111866 1.3586666549750098e-6 -0.00011035699216298325; -9.573348773018575e-5 -6.596403084302646e-5 4.3452674684080424e-5 0.0001086085367870683 0.00019122731925846927 5.4777113357978367e-5 8.066239849824373e-5 -6.302660306291173e-5 2.8400239055481803e-5 5.968140346623821e-5 4.951374018955726e-5 0.00012019933371731891 7.560977708009373e-5 3.4008492614810506e-5 -7.40320631568984e-6 -3.3512321285234095e-5 -0.00013196392221915754 8.263702063515544e-5 -1.6554612490727632e-5 0.0001184425246475442 -2.1372411471843687e-5 -5.917089850016113e-5 0.0002714622724607726 9.150468128893434e-5 -2.436880725043461e-5 -6.784395639158907e-5 2.7014029067791572e-5 -0.00012284992674441712 -0.00018385308333281611 9.90075832970615e-5 1.5374796087707215e-5 -9.662256609488611e-5; -0.0001386334265873324 0.00012131389618733525 4.466273409779281e-5 4.0077018155701514e-5 -0.000293017518316645 0.00010328569575795903 -0.00010059439276230318 6.60725267778643e-5 8.064584059755521e-5 -1.5016103617397162e-5 -8.330881294676601e-5 -4.471882905929094e-5 6.147137125371105e-5 -0.00012007379748976322 -4.8398131667590425e-5 -1.6257205572562293e-6 -7.702819178230204e-5 -5.706687491621391e-5 6.199510923468868e-5 6.226215143104288e-5 -5.092248150611338e-5 -0.00012103188831244262 -8.225184186013564e-5 -6.83589974243825e-5 -5.881170775975113e-5 6.492609051636674e-5 8.942851806640524e-5 6.348038684230833e-5 -0.00019190394280593512 -0.00010644201441320344 3.5747502522860244e-6 -4.612950627344092e-5; 0.0001250565109943609 -3.803318398477016e-5 -0.00018813734644263657 2.5144961880325354e-5 -1.5799352725113988e-5 5.7106899179346915e-6 0.00012570146642920253 8.263042397392838e-5 -2.4938404778911087e-5 5.9742826094773044e-5 1.7748336147079163e-5 -1.7495322056308855e-5 8.44099776872094e-5 9.904286704786649e-5 -2.7823874945736187e-5 6.900179866297774e-5 8.423667892875199e-5 -0.00012994326246607512 0.00016383557519239006 -8.6307765771014e-5 0.00017196782570625947 8.854098993415589e-5 -0.00011011763857150038 -1.8453891273199884e-5 8.948652245398976e-5 -0.00011606780029305586 7.800594146283569e-6 -5.584691828754987e-5 -8.175605037887088e-5 -1.3834746853351565e-5 -9.989011599154583e-5 3.248557183487831e-5; 0.00011434342265331033 0.00012731274434102046 0.00018125484599934054 -6.417941888661596e-6 0.00016003860470575705 -2.7764200452097264e-5 -0.00015557107438596475 -4.889421073401694e-5 0.00010352732603407882 -0.00012203002300609445 -2.6824847039266858e-5 1.8943287402204494e-5 4.4935731027201774e-5 -0.00010623089950329312 2.217705075053717e-6 -0.0001845766357591615 -2.8979652809521424e-5 -2.7130490009744172e-5 3.68235294145288e-5 -0.00012809090297466653 0.00017954646570343495 6.724961964848815e-5 6.213399571336061e-5 7.354429068712e-5 -8.913717213815875e-5 8.05079059928416e-5 9.043319256945682e-5 0.00011347570650014396 -2.4455589694285724e-5 -0.00014946056511050618 0.0001902121027951816 -0.0001872933910208075; 9.272676705521143e-5 1.8322835406517704e-5 7.896366021967646e-5 0.00017118274134490438 -0.00012508947967644816 2.2917257031868047e-5 6.254931812081441e-5 0.00011682660131853179 -3.7229595742887346e-5 -7.725272136367971e-5 -1.972325245945651e-5 -1.986555927642713e-5 2.5175235881113238e-5 -5.4809451664102274e-5 0.0001604712657201476 4.3928535736040505e-6 -6.932562375070117e-5 7.142987904743973e-5 2.5499685383050703e-5 -3.063113164599101e-5 0.00016012533759136348 -7.974486053781748e-5 3.227007853937703e-5 0.00010474028257094274 -4.927118554106664e-5 -3.3435405763798376e-5 0.00020111128704528649 -0.00013596040063635267 0.00015646074333132401 -0.00012764114345982755 0.00010554667695332115 7.906899175661163e-6; 7.832724304684747e-5 0.00011860259337631721 5.2670081005678974e-5 -7.044250878457183e-5 3.933275229578696e-5 1.6428454274902315e-5 -0.00011026025231180859 -4.351799861829582e-5 0.00022462637798676126 7.477503322811628e-5 -9.054853353369269e-5 0.0001636809488460592 -3.6605536932576863e-5 5.4679802362124905e-5 -2.689984967070993e-5 4.437349571312617e-5 -1.5757608251401417e-5 3.40711799268775e-5 6.963734905775995e-6 -0.00011319070244858188 -1.3053092059964766e-5 -4.121985830201956e-5 3.6057756462149665e-5 9.12644850374371e-5 7.24840451781786e-5 -0.00016864608687533223 7.967846113538016e-5 2.618102235067694e-5 -0.00015273812232258918 -1.927561015540892e-5 6.645587063908374e-5 -9.559390809804468e-5; 4.395724791089245e-5 0.00014572366963243983 -1.430688170961995e-5 -7.624178651617007e-5 -2.9589010225158635e-5 0.0001445509162322753 4.084467327907547e-5 6.83415248232083e-5 -9.741108333123053e-5 -0.000140145227121088 -1.690259777836923e-5 1.7843226672134975e-5 -0.00010839004498570191 4.6790069248396125e-5 0.00019295690181304044 -6.057053796843751e-5 -0.000136380311957456 -3.047553654773248e-5 0.00010375873280559563 0.00019073496987680766 6.412655721426998e-7 -0.00013129272956297842 -0.00010533097047022557 -1.7868586653043936e-5 0.00011524378096788207 -1.684138878494626e-5 -0.0001623334926961828 0.0001098260301687941 -5.975628454852906e-7 -0.00013197998741538395 -0.0001310086761777206 8.566278850645178e-6; 9.623619802120242e-6 -5.630430780572467e-5 -4.3869965453516974e-5 0.00024475484212755575 0.00017727959027408977 -4.4379839097267536e-5 -8.231992717471553e-5 0.00010994532465131353 -6.6913481771491425e-6 4.381102711455937e-6 4.286832961381729e-5 -0.00012954457372531874 -0.00011219640612241469 -6.590277655620708e-5 6.441599077672971e-5 0.00012012449121696296 1.5023506306285124e-5 -0.00011764798284846008 0.0001240260561405437 -0.00021996973839693348 6.367595312779148e-5 -9.014393902022972e-5 0.00010708529850828807 -0.00020586807397764752 0.0001277812942805455 7.886618084169345e-5 -0.00013825837697938672 -6.023945854965306e-5 2.3244555335373996e-5 -3.649894381512534e-5 8.609589246928112e-5 2.154942455829471e-5; 7.344085085115635e-5 9.494051979764576e-5 -7.020050773952866e-5 -3.47932569051327e-5 -1.9189931240717726e-5 -3.827763660900955e-5 0.00011976364973143876 -2.1197418878173714e-5 -8.067384127151951e-5 -3.2449034311313e-5 -7.22589041778535e-6 -2.4172878088748843e-5 -3.2152495382789145e-5 3.2865585548833235e-5 -2.211490258140586e-5 -4.670317006038299e-5 -0.0002356876744082825 -3.964007422418125e-5 -3.4805797018080755e-5 0.0001779288481562698 7.392990434219423e-5 -0.00010842721761527265 1.9616254089313873e-5 1.4932683793275775e-5 0.00014690596932688015 -6.202380112462474e-5 -4.1721903958560575e-5 0.00020422443546031936 3.432314175789525e-5 1.6616160305246882e-5 -0.00014446736398475972 6.397311286910648e-5; -2.889110084245857e-5 -9.694335068663901e-5 2.623602693754153e-5 -3.555578342959509e-5 1.9832140137146786e-5 -0.00016543909925125145 -7.298345491610604e-5 -1.263863515808677e-5 0.00016205883974587405 -0.0001916511731137912 3.345883186235264e-5 2.9448911559007385e-5 -7.480290270498576e-5 -6.5811576091851305e-6 2.4714913419702998e-5 0.00016499298606911512 7.270861428393781e-6 -0.00022154319350695494 9.388262941181445e-5 5.77878587905397e-5 0.0001424398457715654 -3.490909267886745e-5 9.038901287974353e-5 -5.186711237478518e-6 -9.168380830990655e-5 0.00022661801875481217 2.6508766208710216e-5 0.0002563943368699689 -4.074092913973853e-5 -6.513892487012006e-5 8.830162795172779e-5 0.00012998042319347757; 3.4253720196827494e-5 1.798015150689254e-5 0.00016944630956550123 0.00018952923314919035 -8.010951237246969e-5 6.78153261569533e-5 0.00012073298025916682 1.5524204764910925e-5 2.149263277806693e-5 -0.00013182813231560087 -1.6381275007925054e-5 -9.910221374320468e-5 1.7636186067648297e-5 -5.268821437220784e-5 0.00013420120708449297 0.0001293170604649312 2.0701548829489878e-5 -7.521463371540164e-5 -8.710742654238543e-5 -0.00025061236042256115 -4.8143643970444945e-5 -5.369545428856913e-5 8.907058841123349e-5 -0.00012929745239398095 3.539231921423221e-6 0.00019203456363448267 -0.00014134440093493936 0.00011003736622204161 2.023970560093449e-5 2.5263379038769733e-6 -4.822022082404726e-6 0.0001771006315275394; 0.00010651349173860798 3.9165310846895345e-5 7.680510923966967e-5 0.00018133198198631633 8.555243283046649e-5 6.65254034917068e-5 -0.00012029204783027752 -7.923485219942257e-5 -0.00020872269062090432 -1.1949828438789084e-5 -0.00013770113702628667 -5.8760274731300263e-5 -4.9586103449089304e-5 -9.114579126469563e-5 -0.00010791454525895475 2.2212533332661305e-5 2.3586697972516312e-5 0.00013769112291049437 0.00011113568933217088 -9.670562696408242e-5 -9.732571317579523e-5 8.424068875340751e-6 0.00017610692764867306 9.734488292599335e-5 1.8883087537894795e-6 1.4113784056119665e-5 -5.9431841981110864e-5 -1.222159000315467e-5 -8.046195700297032e-5 -6.96678992593451e-5 0.0002334657171392091 -6.003854406879061e-5; -3.876086405363789e-5 0.000145612443948611 -4.148602304632778e-5 8.296301463849755e-5 -6.987636218547931e-5 0.00013355839407302655 -0.00011680727105124031 4.3204024863198634e-6 3.7165725434877764e-5 -4.780718584663334e-5 -9.478211789393522e-5 5.348930360048908e-5 -1.4913006206934854e-5 8.296735838519333e-5 2.3375410095351004e-6 -1.0566429163756406e-5 -0.0001082396781654274 -7.448145400269038e-5 -3.021695622885222e-5 7.662169743560146e-5 0.00014964493972946297 -0.0001151702460716674 -3.5049489024114195e-5 -3.067204009277854e-5 -3.2885456945411235e-6 -3.6294288956579837e-5 7.326320500207757e-7 -3.555814030697972e-5 4.464006203341562e-5 8.841101886935429e-5 6.585965390548024e-5 -0.00017228935096647653; -1.2483372642958471e-5 0.00012089655740529559 0.00014399012673057686 4.577739912311878e-5 -0.00011504468181991542 -5.967454739947039e-6 6.013757342964474e-6 6.874554912902037e-5 8.820345670040062e-6 6.585115557038457e-6 -8.073531148330143e-6 8.190084031605252e-6 8.11826490691684e-5 0.00016108827787794465 2.6274885954248864e-5 -3.101919116924134e-5 9.509940014327816e-6 4.0795067093505825e-5 -0.0001408103393030505 3.1310727310599164e-6 2.3512846951414083e-5 -8.18591846607777e-5 -0.00010960053384659647 -0.0001649685267464404 4.406858920637707e-6 -6.639141554368278e-5 -0.00010153624077683168 7.491944075073239e-6 0.00010798034293220528 3.212380636360881e-5 0.00019854514050640496 6.840170920005323e-5; -0.00017579407514072337 4.489067422460228e-5 -7.197556366128503e-8 2.2736783911255665e-5 4.300883382399852e-6 -0.00012200352440355486 4.1341462100405944e-5 2.3286806289109545e-5 4.146766358522396e-5 8.13425166475701e-6 8.115635345223869e-5 1.301165801911046e-5 -1.997599039109328e-5 -0.0001287773026991497 -9.633182863707405e-5 2.8751785329092656e-5 -5.3078352458537016e-5 -5.785451295318533e-5 -6.204550091874262e-5 5.9304502691390684e-5 2.9215069197227447e-5 9.509748841870187e-5 -3.0426162731007075e-5 0.0001710924573568783 0.00020654974131380363 5.361922948273493e-5 0.00010196792781121315 0.000206938597592508 2.0896103059054496e-5 1.660268234323378e-5 -7.48372019291711e-5 0.0001276465066336227; -1.60281667731119e-5 -1.9727156303778913e-5 2.5624336795805126e-5 0.0002212187339510293 0.0001836789690615149 4.1394736636921116e-5 7.610411035879564e-5 0.00019931051998448856 7.185953496540945e-5 7.894572105309916e-5 -7.644175433505005e-5 4.332077356688684e-5 -1.3251165672921795e-5 -2.122252930253917e-5 -0.00016582142210519454 -0.00018792349668634117 -1.3796476868238477e-5 0.00027789486399437154 -0.00010559188898601651 0.00012077053021225195 3.485316325260262e-5 -4.4113997991150856e-5 3.98837348812216e-5 -4.367715313397303e-5 0.00016984150921510918 -4.0079544977704e-5 -8.422657059687666e-5 1.4083042752643364e-5 9.901982831267487e-6 4.940452914619832e-5 -3.41633183224602e-5 -7.691454606079752e-5; 4.177785845965673e-5 0.00014914023373420454 0.0001265711008818302 0.00017125432819738403 -6.546161133883859e-5 0.0003315608165939517 0.00011466683386969963 7.810161801895931e-5 6.979819332627229e-5 3.1925116818449625e-5 6.511150892033518e-5 -8.501502710715354e-5 6.257647070013419e-5 0.00011156811266117955 -9.155836854924752e-5 9.050445547472268e-5 9.27792472429886e-5 -6.762877856099075e-6 -1.786228753190584e-5 -2.754007331532779e-5 -4.3994327679736175e-5 7.529884638642367e-5 0.0001145274337977617 -8.97755042751728e-5 -0.00017445579836932387 -0.00013224258404080248 9.718283141408786e-5 0.00013803185462158617 2.7227947757592813e-5 6.939284245162795e-5 -0.00015714337027021338 -3.728622945346778e-5; -0.00010186136050951435 1.8789323529485844e-5 1.1672055460358934e-5 3.7434796193989666e-5 0.0001484983383295165 -8.119666590692177e-5 1.222576492975152e-5 3.6238286792196844e-5 -6.603625506730367e-5 -0.00020148798494236216 -8.338564503110973e-5 -1.1614311280284342e-5 3.86197186332639e-5 5.2269193200768884e-5 0.00017673061092743052 -3.642733490895133e-5 0.00012131192643092138 -0.00012944446489317128 -9.729256116887287e-5 0.00011058760874104137 -4.195228303898123e-6 0.00019134560870835842 8.317471810979716e-5 6.72697730794587e-5 2.9985210584265498e-5 -0.00018312987076686354 7.863057698951943e-5 0.00014545877793232335 -3.1367528482684385e-5 0.00011239547320539483 0.00010905382960001258 7.624326981268932e-5; 0.00010192715870302892 -6.524511247321899e-5 7.142910197230408e-5 -8.020947263490455e-5 -1.0316943025699973e-5 -7.236264338629764e-5 -0.00015450624761784601 -7.583041571692478e-5 -0.00017704781914277154 5.233789868738397e-5 -3.881288632313899e-5 -7.597936184525612e-5 0.00018876205302162434 -0.00013852900139668946 -1.1571070735788319e-5 -2.5379029302584267e-5 -0.00022445549968310753 -4.258207611188304e-5 -0.00011458031060088479 -0.00017382442440053598 -1.91164707028623e-5 3.0380784828722702e-5 9.444572804581578e-5 -4.1856517618598036e-5 0.00017476641385669176 9.583537046650304e-5 8.147621718321227e-5 9.057154982672157e-5 -0.00016547185789007933 8.474836811741688e-5 4.487058338794814e-5 8.553353125548059e-5; 4.900922637414417e-5 -0.000154826828050608 -2.9895952805709688e-5 -7.672804507212121e-5 -7.277446432755613e-5 -1.7218015030562925e-5 -2.0765311758912264e-5 0.00015757541974987927 0.0001682118802515854 0.00012837107921466852 -0.00016522054805439193 2.8739767246117575e-5 -3.516213631275628e-5 -0.00010714442190266579 8.355939486742737e-5 -1.5250838017271136e-5 1.8060464086990835e-5 0.0001318892375517694 -0.00010067811102391554 0.0001557282141827111 -8.925007726550458e-5 0.00017002290975750095 0.00010146711271470889 -0.0002444862709429051 0.000163852213760656 1.818632723978417e-5 -3.342262583220846e-5 7.465219665997806e-5 -0.00013326545898355744 6.0555567203375304e-5 7.850177486641925e-5 -5.499545453250801e-5; -0.00011949762882137913 -0.00025112358742333346 0.00011172494816421646 9.275173960504754e-6 1.7618349028651443e-5 -1.1542232987953863e-5 3.660766344111685e-5 -2.8686171215320368e-6 -4.9379003376799704e-5 3.654852809560827e-5 -0.00012682495469630388 -8.364065598271848e-6 0.00018711091945008474 -2.9717128546307235e-5 3.275818346017579e-5 0.00015201551252104665 -0.00010105017316233472 -0.0001207756435003642 -9.991262578096234e-6 -0.00014404272258687495 -7.473465701036349e-5 -2.1085530880355043e-5 -0.00021641633828110176 2.972371987127045e-5 0.00014701153087955912 -0.00015106562239523654 2.60422963212703e-5 -0.00020045524468580904 7.843923196491998e-5 -6.924058141592579e-5 5.3967105140345805e-5 4.612562515123608e-6; -1.732914151749008e-5 -4.528500230468802e-5 -1.1448045914096435e-5 6.493302626234313e-5 9.073254605221222e-5 -1.1837639793015286e-5 -2.723165616577822e-5 -1.2551640546472034e-6 -8.463411231593561e-5 -4.551146137483005e-6 -2.6098174746802816e-5 3.6009650468376435e-5 7.6143304814989134e-6 -4.742366454399268e-5 -0.00021223918756532482 1.2166248236216557e-5 0.00012086919141633674 -4.928932193967629e-5 -4.523670449804695e-5 -0.00019525791740113269 2.342122152382682e-5 -0.00016151671170325227 -4.1513582434950056e-5 4.5835478342386437e-5 -0.0002270068931446655 -6.700325920780472e-5 -7.54863054661333e-5 -4.523866298604078e-6 6.766438437094556e-5 4.798178761314311e-5 0.00010201917157440278 -7.773211709524491e-5; 0.0001495518057810956 0.00020418711702514773 3.953914111772107e-5 -6.365618527335629e-6 6.240187704971275e-5 0.00015583859695763455 -9.599388666974163e-5 5.6562542714540895e-5 7.875502834504688e-5 -8.023809267608356e-6 -6.209254442072207e-5 3.4325022544369584e-5 6.87778787425581e-5 -8.38185465807251e-5 -9.155928509132557e-5 -2.6343574599006666e-5 -1.791681151079214e-5 -7.370268812227703e-5 3.1803815919564016e-5 -0.00022330733426205592 -8.918961237923293e-6 -0.00024460524090390393 0.0001476391748030524 7.990460054425742e-5 1.0085648146932791e-5 0.00013233675909869608 -0.00021251011875282548 -6.576830727569789e-5 -0.00010873914524270921 -2.6075373706400867e-5 -8.926604877050693e-5 -8.430424585530198e-5], bias = [1.921786307209035e-9; 8.789190050134396e-11; 1.2504148812771212e-9; 2.759638658565189e-9; -4.0864654563959214e-9; -1.5256145600285591e-9; -7.257926362306835e-10; -2.32442960482532e-9; 2.26637932249765e-9; 2.085537853776543e-9; -3.0927651263003428e-9; 1.1204678255460235e-9; 1.224877475321225e-9; 2.7271956201550424e-9; 1.020909304245852e-9; -6.646559494382461e-10; 3.899342734955543e-11; -8.234145849406738e-11; 1.581324318981226e-9; 1.3057169819360422e-9; 1.4432009549384312e-10; -3.935652982223644e-10; 1.2538523267575744e-9; 1.9956939078962535e-9; 2.55591752995915e-9; 4.101057123727002e-9; 2.329851411471181e-9; -1.8697572701351324e-9; 8.933663432767605e-10; -2.903453407028585e-9; -2.9091078170073337e-9; -9.91884728601028e-10;;]), layer_4 = (weight = [-0.0005572566820208557 -0.0007937026262524729 -0.0006027371350159636 -0.0008097167570915016 -0.0006632364353912129 -0.0007586931955229081 -0.0006962550015859167 -0.0007105567364154836 -0.0006658085334180905 -0.0006602566700924333 -0.0006626099449352349 -0.0007211122134551628 -0.0006367930196168518 -0.0007610696972092854 -0.0007117310752981213 -0.0005740901170262534 -0.0007709460867192456 -0.0006457321711362864 -0.0006559189228036226 -0.00071990248582105 -0.0007860558927556543 -0.00069686912726478 -0.0005244937356517977 -0.0009616786115207227 -0.0007539177071414011 -0.0006872892690566108 -0.0006167645875060232 -0.0006239984997886235 -0.0005674648472694767 -0.0006296852286443204 -0.0008124558416854573 -0.0007791480513692754; 0.00014216770893870395 5.398784074717275e-5 0.00023440740675234172 0.00018101927179873937 0.00038097963229907544 0.0004179167254411029 0.00016871553604570189 0.0002684071421866321 0.00029311844363497764 -4.684615903553573e-6 0.0001715444594282229 0.00015608806149225427 0.0002515337605158771 0.00022016138424090162 0.00030322691643611805 0.00015330975900653944 0.0002746350862441426 0.0002501048844999265 0.0003728965915869229 0.00032248962985238777 0.0003586351545196296 0.00018497025779880998 0.0003025448352555981 0.00021959541944993648 0.0003294169957206736 0.00028422808379670095 0.00020632328939831497 0.00032818817391118334 5.102628667107437e-5 0.00014884949250286642 0.00017417684072532018 0.00026142470856713477], bias = [-0.0006732848512731586; 0.00023393989498430928;;]))

      Visualizing the Results

      Let us now plot the loss over time

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Iteration", ylabel="Loss")
      +
      +    lines!(ax, losses; linewidth=4, alpha=0.75)
      +    scatter!(ax, 1:length(losses), losses; markershape=:circle,
      +        markersize=12, markeralpha=0.25, strokewidth=2)
      +
      +    fig
      +end

      Finally let us visualize the results

      julia
      prob_nn = ODEProblem(ODE_model, u0, tspan, res.u)
      +soln_nn = Array(solve(prob_nn, RK4(); u0, p=res.u, saveat=tsteps, dt, adaptive=false))
      +waveform_nn_trained = first(compute_waveform(
      +    dt_data, soln_nn, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l1 = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s1 = scatter!(ax, tsteps, waveform; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    l2 = lines!(ax, tsteps, waveform_nn; linewidth=2, alpha=0.75)
      +    s2 = scatter!(ax, tsteps, waveform_nn; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    l3 = lines!(ax, tsteps, waveform_nn_trained; linewidth=2, alpha=0.75)
      +    s3 = scatter!(ax, tsteps, waveform_nn_trained; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    axislegend(ax, [[l1, s1], [l2, s2], [l3, s3]],
      +        ["Waveform Data", "Waveform Neural Net (Untrained)", "Waveform Neural Net"];
      +        position=:lb)
      +
      +    fig
      +end

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.600 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,31);function mA(bA,UA,VA,KA,PA,zA){return i(),s("div",null,[e,A("p",null,[a("We need a very crude 2-body path. Assume the 1-body motion is a newtonian 2-body position vector "),A("mjx-container",l,[(i(),s("svg",p,E)),r]),a(" and use Newtonian formulas to get "),A("mjx-container",d,[(i(),s("svg",Q,o)),g]),a(", "),A("mjx-container",f,[(i(),s("svg",v,u)),I]),a(" (e.g. Theoretical Mechanics of Particles and Continua 4.3)")]),F,A("p",null,[a("Next we define a function to perform the change of variables: "),A("mjx-container",c,[(i(),s("svg",q,T)),m])]),b,A("mjx-container",U,[(i(),s("svg",V,P)),z]),A("mjx-container",D,[(i(),s("svg",X,R)),O]),A("p",null,[a("where, "),A("mjx-container",W,[(i(),s("svg",M,H)),j]),a(", "),A("mjx-container",N,[(i(),s("svg",x,G)),S]),a(", and "),A("mjx-container",J,[(i(),s("svg",Y,$)),AA]),a(" are constants")]),sA,A("mjx-container",iA,[(i(),s("svg",aA,hA)),tA]),A("mjx-container",eA,[(i(),s("svg",lA,kA)),EA]),A("p",null,[a("where, "),A("mjx-container",rA,[(i(),s("svg",dA,CA)),oA]),a(", "),A("mjx-container",gA,[(i(),s("svg",fA,yA)),uA]),a(", and "),A("mjx-container",IA,[(i(),s("svg",FA,qA)),BA]),a(" are constants")]),TA])}const ZA=h(t,[["render",mA]]);export{XA as __pageData,ZA as default}; diff --git a/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.lean.js b/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.lean.js new file mode 100644 index 000000000..cb485ab96 --- /dev/null +++ b/v0.5.30/assets/tutorials_advanced_1_GravitationalWaveForm.md.CwWPFlQf.lean.js @@ -0,0 +1 @@ +import{_ as h,c as s,m as A,a,a4 as n,o as i}from"./chunks/framework.BfjuC5t1.js";const XA=JSON.parse('{"title":"Training a Neural ODE to Model Gravitational Waveforms","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/advanced/1_GravitationalWaveForm.md","filePath":"tutorials/advanced/1_GravitationalWaveForm.md","lastUpdated":null}'),t={name:"tutorials/advanced/1_GravitationalWaveForm.md"},e=n("",7),l={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},p={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.819ex",height:"1.658ex",role:"img",focusable:"false",viewBox:"0 -583 4782.1 733","aria-hidden":"true"},k=n("",1),E=[k],r=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"r"),A("mo",null,"="),A("msub",null,[A("mi",null,"r"),A("mn",null,"1")]),A("mo",null,"−"),A("msub",null,[A("mi",null,"r"),A("mn",null,"2")])])],-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.008ex",height:"1.339ex",role:"img",focusable:"false",viewBox:"0 -442 887.6 592","aria-hidden":"true"},C=n("",1),o=[C],g=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("msub",null,[A("mi",null,"r"),A("mn",null,"1")])])],-1),f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.008ex",height:"1.339ex",role:"img",focusable:"false",viewBox:"0 -442 887.6 592","aria-hidden":"true"},y=n("",1),u=[y],I=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("msub",null,[A("mi",null,"r"),A("mn",null,"2")])])],-1),F=n("",2),c={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"24.527ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 10840.9 1000","aria-hidden":"true"},B=n("",1),T=[B],m=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mo",{stretchy:"false"},"("),A("mi",null,"χ"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",null,","),A("mi",null,"ϕ"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},"↦"),A("mo",{stretchy:"false"},"("),A("mi",null,"x"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",null,","),A("mi",null,"y"),A("mo",{stretchy:"false"},"("),A("mi",null,"t"),A("mo",{stretchy:"false"},")"),A("mo",{stretchy:"false"},")")])],-1),b=n("",13),U={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.117ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3587.6 1000","aria-hidden":"true"},K=n("",1),P=[K],z=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"1"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"χ")])],-1),D={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.049ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3557.6 1000","aria-hidden":"true"},Z=n("",1),R=[Z],O=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"2"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"ϕ")])],-1),W={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},M={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.138ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 503 636","aria-hidden":"true"},w=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D45D",d:"M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z",style:{"stroke-width":"3"}})])])],-1),H=[w],j=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"p")])],-1),N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.378ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 1051 683","aria-hidden":"true"},L=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D440",d:"M289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629Z",style:{"stroke-width":"3"}})])])],-1),G=[L],S=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"M")])],-1),J={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.054ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 466 453","aria-hidden":"true"},_=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D452",d:"M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z",style:{"stroke-width":"3"}})])])],-1),$=[_],AA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"e")])],-1),sA=n("",14),iA={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},aA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.117ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3587.6 1000","aria-hidden":"true"},nA=n("",1),hA=[nA],tA=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"1"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"χ")])],-1),eA={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},lA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.049ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3557.6 1000","aria-hidden":"true"},pA=n("",1),kA=[pA],EA=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"u"),A("mo",{stretchy:"false"},"["),A("mn",null,"2"),A("mo",{stretchy:"false"},"]"),A("mo",null,"="),A("mi",null,"ϕ")])],-1),rA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},dA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.138ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 503 636","aria-hidden":"true"},QA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D45D",d:"M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z",style:{"stroke-width":"3"}})])])],-1),CA=[QA],oA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"p")])],-1),gA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},fA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.378ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 1051 683","aria-hidden":"true"},vA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D440",d:"M289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629Z",style:{"stroke-width":"3"}})])])],-1),yA=[vA],uA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"M")])],-1),IA={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},FA={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.054ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 466 453","aria-hidden":"true"},cA=A("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[A("g",{"data-mml-node":"math"},[A("g",{"data-mml-node":"mi"},[A("path",{"data-c":"1D452",d:"M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z",style:{"stroke-width":"3"}})])])],-1),qA=[cA],BA=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"e")])],-1),TA=n("",31);function mA(bA,UA,VA,KA,PA,zA){return i(),s("div",null,[e,A("p",null,[a("We need a very crude 2-body path. Assume the 1-body motion is a newtonian 2-body position vector "),A("mjx-container",l,[(i(),s("svg",p,E)),r]),a(" and use Newtonian formulas to get "),A("mjx-container",d,[(i(),s("svg",Q,o)),g]),a(", "),A("mjx-container",f,[(i(),s("svg",v,u)),I]),a(" (e.g. Theoretical Mechanics of Particles and Continua 4.3)")]),F,A("p",null,[a("Next we define a function to perform the change of variables: "),A("mjx-container",c,[(i(),s("svg",q,T)),m])]),b,A("mjx-container",U,[(i(),s("svg",V,P)),z]),A("mjx-container",D,[(i(),s("svg",X,R)),O]),A("p",null,[a("where, "),A("mjx-container",W,[(i(),s("svg",M,H)),j]),a(", "),A("mjx-container",N,[(i(),s("svg",x,G)),S]),a(", and "),A("mjx-container",J,[(i(),s("svg",Y,$)),AA]),a(" are constants")]),sA,A("mjx-container",iA,[(i(),s("svg",aA,hA)),tA]),A("mjx-container",eA,[(i(),s("svg",lA,kA)),EA]),A("p",null,[a("where, "),A("mjx-container",rA,[(i(),s("svg",dA,CA)),oA]),a(", "),A("mjx-container",gA,[(i(),s("svg",fA,yA)),uA]),a(", and "),A("mjx-container",IA,[(i(),s("svg",FA,qA)),BA]),a(" are constants")]),TA])}const ZA=h(t,[["render",mA]]);export{XA as __pageData,ZA as default}; diff --git a/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.js b/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.js new file mode 100644 index 000000000..d11de334d --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.js @@ -0,0 +1,239 @@ +import{_ as e,c as a,m as s,a as n,a4 as t,o as i}from"./chunks/framework.BfjuC5t1.js";const K=JSON.parse('{"title":"Julia & Lux for the Uninitiated","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/1_Basics.md","filePath":"tutorials/beginner/1_Basics.md","lastUpdated":null}'),l={name:"tutorials/beginner/1_Basics.md"},p=t(`

      Julia & Lux for the Uninitiated

      This is a quick intro to Lux loosely based on:

      1. PyTorch's tutorial.

      2. Flux's tutorial.

      3. Jax's tutorial.

      It introduces basic Julia programming, as well Zygote, a source-to-source automatic differentiation (AD) framework in Julia. We'll use these tools to build a very simple neural network. Let's start with importing Lux.jl

      julia
      using Lux, Random

      Now let us control the randomness in our code using proper Pseudo Random Number Generator (PRNG)

      julia
      rng = Random.default_rng()
      +Random.seed!(rng, 0)
      Random.TaskLocalRNG()

      Arrays

      The starting point for all of our models is the Array (sometimes referred to as a Tensor in other frameworks). This is really just a list of numbers, which might be arranged into a shape like a square. Let's write down an array with three elements.

      julia
      x = [1, 2, 3]
      3-element Vector{Int64}:
      + 1
      + 2
      + 3

      Here's a matrix – a square array with four elements.

      julia
      x = [1 2; 3 4]
      2×2 Matrix{Int64}:
      + 1  2
      + 3  4

      We often work with arrays of thousands of elements, and don't usually write them down by hand. Here's how we can create an array of 5×3 = 15 elements, each a random number from zero to one.

      julia
      x = rand(rng, 5, 3)
      5×3 Matrix{Float64}:
      + 0.455238   0.746943   0.193291
      + 0.547642   0.746801   0.116989
      + 0.773354   0.97667    0.899766
      + 0.940585   0.0869468  0.422918
      + 0.0296477  0.351491   0.707534

      There's a few functions like this; try replacing rand with ones, zeros, or randn.

      By default, Julia works stores numbers is a high-precision format called Float64. In ML we often don't need all those digits, and can ask Julia to work with Float32 instead. We can even ask for more digits using BigFloat.

      julia
      x = rand(BigFloat, 5, 3)
      5×3 Matrix{BigFloat}:
      + 0.981339    0.793159  0.459019
      + 0.043883    0.624384  0.56055
      + 0.164786    0.524008  0.0355555
      + 0.414769    0.577181  0.621958
      + 0.00823197  0.30215   0.655881
      julia
      x = rand(Float32, 5, 3)
      5×3 Matrix{Float32}:
      + 0.567794   0.369178   0.342539
      + 0.0985227  0.201145   0.587206
      + 0.776598   0.148248   0.0851708
      + 0.723731   0.0770206  0.839303
      + 0.404728   0.230954   0.679087

      We can ask the array how many elements it has.

      julia
      length(x)
      15

      Or, more specifically, what size it has.

      julia
      size(x)
      (5, 3)

      We sometimes want to see some elements of the array on their own.

      julia
      x
      5×3 Matrix{Float32}:
      + 0.567794   0.369178   0.342539
      + 0.0985227  0.201145   0.587206
      + 0.776598   0.148248   0.0851708
      + 0.723731   0.0770206  0.839303
      + 0.404728   0.230954   0.679087
      julia
      x[2, 3]
      0.58720636f0

      This means get the second row and the third column. We can also get every row of the third column.

      julia
      x[:, 3]
      5-element Vector{Float32}:
      + 0.34253937
      + 0.58720636
      + 0.085170805
      + 0.8393034
      + 0.67908657

      We can add arrays, and subtract them, which adds or subtracts each element of the array.

      julia
      x + x
      5×3 Matrix{Float32}:
      + 1.13559   0.738356  0.685079
      + 0.197045  0.40229   1.17441
      + 1.5532    0.296496  0.170342
      + 1.44746   0.154041  1.67861
      + 0.809456  0.461908  1.35817
      julia
      x - x
      5×3 Matrix{Float32}:
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0

      Julia supports a feature called broadcasting, using the . syntax. This tiles small arrays (or single numbers) to fill bigger ones.

      julia
      x .+ 1
      5×3 Matrix{Float32}:
      + 1.56779  1.36918  1.34254
      + 1.09852  1.20114  1.58721
      + 1.7766   1.14825  1.08517
      + 1.72373  1.07702  1.8393
      + 1.40473  1.23095  1.67909

      We can see Julia tile the column vector 1:5 across all rows of the larger array.

      julia
      zeros(5, 5) .+ (1:5)
      5×5 Matrix{Float64}:
      + 1.0  1.0  1.0  1.0  1.0
      + 2.0  2.0  2.0  2.0  2.0
      + 3.0  3.0  3.0  3.0  3.0
      + 4.0  4.0  4.0  4.0  4.0
      + 5.0  5.0  5.0  5.0  5.0

      The x' syntax is used to transpose a column 1:5 into an equivalent row, and Julia will tile that across columns.

      julia
      zeros(5, 5) .+ (1:5)'
      5×5 Matrix{Float64}:
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0

      We can use this to make a times table.

      julia
      (1:5) .* (1:5)'
      5×5 Matrix{Int64}:
      + 1   2   3   4   5
      + 2   4   6   8  10
      + 3   6   9  12  15
      + 4   8  12  16  20
      + 5  10  15  20  25

      Finally, and importantly for machine learning, we can conveniently do things like matrix multiply.

      julia
      W = randn(5, 10)
      +x = rand(10)
      +W * x
      5-element Vector{Float64}:
      +  1.2197981041108443
      + -2.62625877100596
      + -2.8573820474674845
      + -2.4319346874291314
      +  1.0108668577150213

      Julia's arrays are very powerful, and you can learn more about what they can do here.

      CUDA Arrays

      CUDA functionality is provided separately by the CUDA.jl package. If you have a GPU and LuxCUDA is installed, Lux will provide CUDA capabilities. For additional details on backends see the manual section.

      You can manually add CUDA. Once CUDA is loaded you can move any array to the GPU with the cu function (or the gpu function exported by \`Lux\`\`), and it supports all of the above operations with the same syntax.

      julia
      using LuxCUDA, LuxAMDGPU
      +
      +if LuxCUDA.functional()
      +    x_cu = cu(rand(5, 3))
      +    @show x_cu
      +elseif LuxAMDGPU.functional() # Similarly, for AMDGPU
      +    x_amd = roc(rand(5, 3))
      +    @show x_amd
      +end
      5×3 CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
      + 0.857126  0.681728  0.73806
      + 0.191956  0.506485  0.622865
      + 0.857257  0.663036  0.239756
      + 0.54452   0.503186  0.27993
      + 0.833518  0.975649  0.967811

      (Im)mutability

      Lux as you might have read is Immutable by convention which means that the core library is built without any form of mutation and all functions are pure. However, we don't enforce it in any form. We do strongly recommend that users extending this framework for their respective applications don't mutate their arrays.

      julia
      x = reshape(1:8, 2, 4)
      2×4 reshape(::UnitRange{Int64}, 2, 4) with eltype Int64:
      + 1  3  5  7
      + 2  4  6  8

      To update this array, we should first copy the array.

      julia
      x_copy = copy(x)
      +view(x_copy, :, 1) .= 0
      +
      +println("Original Array ", x)
      +println("Mutated Array ", x_copy)
      Original Array [1 3 5 7; 2 4 6 8]
      +Mutated Array [0 3 5 7; 0 4 6 8]

      Note that our current default AD engine (Zygote) is unable to differentiate through this mutation, however, for these specialized cases it is quite trivial to write custom backward passes. (This problem will be fixed once we move towards Enzyme.jl)

      Managing Randomness

      We rely on the Julia StdLib Random for managing the randomness in our execution. First, we create an PRNG (pseudorandom number generator) and seed it.

      julia
      rng = Xoshiro(0)     # Creates a Xoshiro PRNG with seed 0
      Random.Xoshiro(0xdb2fa90498613fdf, 0x48d73dc42d195740, 0x8c49bc52dc8a77ea, 0x1911b814c02405e8, 0x22a21880af5dc689)

      If we call any function that relies on rng and uses it via randn, rand, etc. rng will be mutated. As we have already established we care a lot about immutability, hence we should use Lux.replicate on PRNGs before using them.

      First, let us run a random number generator 3 times with the replicated rng.

      julia
      random_vectors = Vector{Vector{Float64}}(undef, 3)
      +for i in 1:3
      +    random_vectors[i] = rand(Lux.replicate(rng), 10)
      +    println("Iteration $i ", random_vectors[i])
      +end
      +@assert random_vectors[1]  random_vectors[2]  random_vectors[3]
      Iteration 1 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 2 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 3 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]

      As expected we get the same output. We can remove the replicate call and we will get different outputs.

      julia
      for i in 1:3
      +    println("Iteration $i ", rand(rng, 10))
      +end
      Iteration 1 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 2 [0.018743665453639813, 0.8601828553599953, 0.6556360448565952, 0.7746656838366666, 0.7817315740767116, 0.5553797706980106, 0.1261990389976131, 0.4488101521328277, 0.624383955429775, 0.05657739601024536]
      +Iteration 3 [0.19597391412112541, 0.6830945313415872, 0.6776220912718907, 0.6456416023530093, 0.6340362477836592, 0.5595843665394066, 0.5675557670686644, 0.34351700231383653, 0.7237308297251812, 0.3691778381831775]

      Automatic Differentiation

      Julia has quite a few (maybe too many) AD tools. For the purpose of this tutorial, we will use:

      1. ForwardDiff.jl – For Jacobian-Vector Product (JVP)

      2. Zygote.jl – For Vector-Jacobian Product (VJP)

      Slight Detour: We have had several questions regarding if we will be considering any other AD system for the reverse-diff backend. For now we will stick to Zygote.jl, however once we have tested Lux extensively with Enzyme.jl, we will make the switch.

      Even though, theoretically, a VJP (Vector-Jacobian product - reverse autodiff) and a JVP (Jacobian-Vector product - forward-mode autodiff) are similar—they compute a product of a Jacobian and a vector—they differ by the computational complexity of the operation. In short, when you have a large number of parameters (hence a wide matrix), a JVP is less efficient computationally than a VJP, and, conversely, a JVP is more efficient when the Jacobian matrix is a tall matrix.

      julia
      using ComponentArrays, ForwardDiff, Zygote

      Gradients

      `,90),h={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.781ex"},xmlns:"http://www.w3.org/2000/svg",width:"13.013ex",height:"2.737ex",role:"img",focusable:"false",viewBox:"0 -864.9 5751.9 1209.9","aria-hidden":"true"},r=t('',1),k=[r],o=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"f"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mfrac",null,[s("mn",null,"1"),s("mn",null,"2")]),s("msup",null,[s("mi",null,"x"),s("mi",null,"T")]),s("mi",null,"x")])],-1),c={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.494ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4638.6 1000","aria-hidden":"true"},T=t('',1),g=[T],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",{mathvariant:"normal"},"∇"),s("mi",null,"f"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mi",null,"x")])],-1),E=t(`
      julia
      f(x) = x' * x / 2
      +∇f(x) = x  # \`∇\` can be typed as \`\\nabla<TAB>\`
      +v = randn(rng, Float32, 4)
      4-element Vector{Float32}:
      + -0.4051151
      + -0.4593922
      +  0.92155594
      +  1.1871622

      Let's use ForwardDiff and Zygote to compute the gradients.

      julia
      println("Actual Gradient: ", ∇f(v))
      +println("Computed Gradient via Reverse Mode AD (Zygote): ", only(Zygote.gradient(f, v)))
      +println("Computed Gradient via Forward Mode AD (ForwardDiff): ", ForwardDiff.gradient(f, v))
      Actual Gradient: Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]
      +Computed Gradient via Reverse Mode AD (Zygote): Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]
      +Computed Gradient via Forward Mode AD (ForwardDiff): Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]

      Note that AD.gradient will only work for scalar valued outputs.

      Jacobian-Vector Product

      I will defer the discussion on forward-mode AD to https://book.sciml.ai/notes/08-Forward-Mode_Automatic_Differentiation_(AD)_via_High_Dimensional_Algebras/. Here let us just look at a mini example on how to use it.

      julia
      f(x) = x .* x ./ 2
      +x = randn(rng, Float32, 5)
      +v = ones(Float32, 5)
      5-element Vector{Float32}:
      + 1.0
      + 1.0
      + 1.0
      + 1.0
      + 1.0

      Construct the pushforward function. We will write out the function here but in practice we recommend using SparseDiffTools.auto_jacvec!

      First we need to create a Tag for ForwardDiff. It is enough to know that this is something that you must do. For more details, see the ForwardDiff Documentation!

      julia
      struct TestTag end

      Going in the details of what is function is doing is beyond the scope of this tutorial. But in short, it is constructing a new Dual Vector with the partials set to the input to the pushforward function. When this is propagated through the original function we get the value and the jvp

      julia
      function pushforward_forwarddiff(f, x)
      +    T = eltype(x)
      +    function pushforward(v)
      +        v_ = reshape(v, axes(x))
      +        y = ForwardDiff.Dual{
      +            ForwardDiff.Tag{TestTag, T}, T, 1}.(x, ForwardDiff.Partials.(tuple.(v_)))
      +        res = vec(f(y))
      +        return ForwardDiff.value.(res), vec(ForwardDiff.partials.(res, 1))
      +    end
      +    return pushforward
      +end
      +
      +pf_f = pushforward_forwarddiff(f, x)
      (::Main.var"##225".var"#pushforward#1"{typeof(Main.var"##225".f), Vector{Float32}, DataType}) (generic function with 1 method)

      Compute the jvp.

      julia
      val, jvp = pf_f(v)
      +println("Computed Value: f(", x, ") = ", val)
      +println("JVP: ", jvp[1])
      Computed Value: f(Float32[-0.877497, 1.1953009, -0.057005208, 0.25055695, 0.09351656]) = Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736]
      +JVP: -0.877497

      Vector-Jacobian Product

      Using the same function and inputs, let us compute the VJP.

      julia
      val, pb_f = Zygote.pullback(f, x)
      (Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736], Zygote.var"#75#76"{Zygote.Pullback{Tuple{typeof(Main.var"##225".f), Vector{Float32}}, Tuple{Zygote.var"#3796#back#1207"{Zygote.var"#1203#1206"{Vector{Float32}, Vector{Float32}}}, Zygote.var"#3860#back#1233"{Zygote.ZBack{ChainRules.var"#slash_pullback_scalar#1558"{Vector{Float32}, Int64}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), Vector{Float32}}, Tuple{}}}}}(∂(f)))

      Compute the vjp.

      julia
      vjp = only(pb_f(v))
      +println("Computed Value: f(", x, ") = ", val)
      +println("VJP: ", vjp[1])
      Computed Value: f(Float32[-0.877497, 1.1953009, -0.057005208, 0.25055695, 0.09351656]) = Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736]
      +VJP: -0.877497

      Linear Regression

      `,27),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"40.51ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 17905.2 1000","aria-hidden":"true"},F=t('',1),C=[F],b=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{fence:"false",stretchy:"false"},"{"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,","),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",{stretchy:"false"},")"),s("mo",null,","),s("mi",null,"i"),s("mo",null,"∈"),s("mo",{fence:"false",stretchy:"false"},"{"),s("mn",null,"1"),s("mo",null,","),s("mo",null,"…"),s("mo",null,","),s("mi",null,"k"),s("mo",{fence:"false",stretchy:"false"},"}"),s("mo",null,","),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"∈"),s("msup",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{mathvariant:"double-struck"},"R")]),s("mi",null,"n")]),s("mo",null,","),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"∈"),s("msup",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{mathvariant:"double-struck"},"R")]),s("mi",null,"m")]),s("mo",{fence:"false",stretchy:"false"},"}")])],-1),v={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},f={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.05ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.371ex",height:"1.595ex",role:"img",focusable:"false",viewBox:"0 -683 1048 705","aria-hidden":"true"},w=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D44A",d:"M436 683Q450 683 486 682T553 680Q604 680 638 681T677 682Q695 682 695 674Q695 670 692 659Q687 641 683 639T661 637Q636 636 621 632T600 624T597 615Q597 603 613 377T629 138L631 141Q633 144 637 151T649 170T666 200T690 241T720 295T759 362Q863 546 877 572T892 604Q892 619 873 628T831 637Q817 637 817 647Q817 650 819 660Q823 676 825 679T839 682Q842 682 856 682T895 682T949 681Q1015 681 1034 683Q1048 683 1048 672Q1048 666 1045 655T1038 640T1028 637Q1006 637 988 631T958 617T939 600T927 584L923 578L754 282Q586 -14 585 -15Q579 -22 561 -22Q546 -22 542 -17Q539 -14 523 229T506 480L494 462Q472 425 366 239Q222 -13 220 -15T215 -19Q210 -22 197 -22Q178 -22 176 -15Q176 -12 154 304T131 622Q129 631 121 633T82 637H58Q51 644 51 648Q52 671 64 683H76Q118 680 176 680Q301 680 313 683H323Q329 677 329 674T327 656Q322 641 318 637H297Q236 634 232 620Q262 160 266 136L501 550L499 587Q496 629 489 632Q483 636 447 637Q428 637 422 639T416 648Q416 650 418 660Q419 664 420 669T421 676T424 680T428 682T436 683Z",style:{"stroke-width":"3"}})])])],-1),x=[w],D=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"W")])],-1),A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"0.971ex",height:"1.595ex",role:"img",focusable:"false",viewBox:"0 -694 429 705","aria-hidden":"true"},L=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D44F",d:"M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z",style:{"stroke-width":"3"}})])])],-1),H=[L],B=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"b")])],-1),M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.65ex"},xmlns:"http://www.w3.org/2000/svg",width:"17.577ex",height:"2.347ex",role:"img",focusable:"false",viewBox:"0 -750 7769 1037.2","aria-hidden":"true"},j=t('',1),Z=[j],P=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("msub",null,[s("mi",null,"f"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"W"),s("mo",null,","),s("mi",null,"b")])]),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mi",null,"W"),s("mi",null,"x"),s("mo",null,"+"),s("mi",null,"b")])],-1),q={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.819ex"},xmlns:"http://www.w3.org/2000/svg",width:"34.144ex",height:"6.757ex",role:"img",focusable:"false",viewBox:"0 -1740.7 15091.8 2986.6","aria-hidden":"true"},U=t('',1),J=[U],R=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"L"),s("mo",{stretchy:"false"},"("),s("mi",null,"W"),s("mo",null,","),s("mi",null,"b"),s("mo",{stretchy:"false"},")"),s("mo",{stretchy:"false"},"⟶"),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"1")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"k")])]),s("mfrac",null,[s("mn",null,"1"),s("mn",null,"2")]),s("mo",{"data-mjx-texclass":"ORD"},"∥"),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"f"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"W"),s("mo",null,","),s("mi",null,"b")])]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",{stretchy:"false"},")"),s("msubsup",null,[s("mo",{"data-mjx-texclass":"ORD"},"∥"),s("mn",null,"2"),s("mn",null,"2")])])],-1),G=t(`

      We can write f from scratch, but to demonstrate Lux, let us use the Dense layer.

      julia
      model = Dense(10 => 5)
      +
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      Random.TaskLocalRNG()

      Let us initialize the parameters and states (in this case it is empty) for the model.

      julia
      ps, st = Lux.setup(rng, model)
      +ps = ps |> ComponentArray
      ComponentVector{Float32}(weight = Float32[-0.5583162 0.3457679 0.50863314 0.60294497 0.23095794 0.16602759 5.5791984f-6 0.61324424 -0.35419345 0.039559156; -0.05661944 -0.4899126 0.31236076 0.47100115 -0.5062956 -0.20445547 -0.03762182 0.5370978 0.22614014 0.27704597; 0.5198015 0.55730057 -0.34535396 -0.21587563 -0.12729146 -0.51019937 0.46597028 0.2918885 0.20849374 -0.4068233; 0.06026341 -0.11202827 0.31218112 0.14536527 -0.3413506 0.40088427 -0.48716235 -0.15096173 0.42526972 -0.3576447; 0.23414856 -0.5949539 -0.26137677 0.21756552 0.34443143 0.25046515 -0.049256783 -0.48404032 0.08254115 -0.5224755], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0;;])

      Set problem dimensions.

      julia
      n_samples = 20
      +x_dim = 10
      +y_dim = 5
      5

      Generate random ground truth W and b.

      julia
      W = randn(rng, Float32, y_dim, x_dim)
      +b = randn(rng, Float32, y_dim)
      5-element Vector{Float32}:
      +  0.68468636
      + -0.57578707
      +  0.0594993
      + -0.9436797
      +  1.5164032

      Generate samples with additional noise.

      julia
      x_samples = randn(rng, Float32, x_dim, n_samples)
      +y_samples = W * x_samples .+ b .+ 0.01f0 .* randn(rng, Float32, y_dim, n_samples)
      +println("x shape: ", size(x_samples), "; y shape: ", size(y_samples))
      x shape: (10, 20); y shape: (5, 20)

      For updating our parameters let's use Optimisers.jl. We will use Stochastic Gradient Descent (SGD) with a learning rate of 0.01.

      julia
      using Optimisers
      +
      +opt = Optimisers.Descent(0.01f0)
      Descent(0.01f0)

      Initialize the initial state of the optimiser

      julia
      opt_state = Optimisers.setup(opt, ps)
      Leaf(Descent(0.01), nothing)

      Define the loss function

      julia
      function mse(model, ps, st, X, y)
      +    y_pred, st_new = model(X, ps, st)
      +    return sum(abs2, y_pred .- y), st_new
      +end
      +mse(weight, bias, X, y) = sum(abs2, weight * X .+ bias .- y)
      +loss_function(ps, X, y) = mse(model, ps, st, X, y)
      +
      +println("Loss Value with ground true parameters: ", mse(W, b, x_samples, y_samples))
      +
      +for i in 1:100
      +    # In actual code, don't use globals. But here I will simply for the sake of
      +    # demonstration
      +    global ps, st, opt_state
      +    # Compute the gradient using the pullback API to update the states
      +    (loss, st), pb_f = Zygote.pullback(loss_function, ps, x_samples, y_samples)
      +    # We pass nothing as the seed for \`st\`, since we don't want to propagate any gradient
      +    # for st
      +    gs = pb_f((one(loss), nothing))[1]
      +    # Update model parameters
      +    # \`Optimisers.update\` can be used if mutation is not desired
      +    opt_state, ps = Optimisers.update!(opt_state, ps, gs)
      +    (i % 10 == 1 || i == 100) && println(lazy"Loss Value after $i iterations: $loss")
      +end
      Loss Value with ground true parameters: 0.009175307
      +┌ Warning: Assignment to \`pb_f\` in soft scope is ambiguous because a global variable by the same name exists: \`pb_f\` will be treated as a new local. Disambiguate by using \`local pb_f\` to suppress this warning or \`global pb_f\` to assign to the existing global variable.
      +└ @ /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs/src/tutorials/beginner/1_Basics.md:15
      +Loss Value after 1 iterations: 812.3374
      +Loss Value after 11 iterations: 5.479181
      +Loss Value after 21 iterations: 0.806523
      +Loss Value after 31 iterations: 0.1775011
      +Loss Value after 41 iterations: 0.046897847
      +Loss Value after 51 iterations: 0.015412594
      +Loss Value after 61 iterations: 0.007253055
      +Loss Value after 71 iterations: 0.0050410302
      +Loss Value after 81 iterations: 0.0044205473
      +Loss Value after 91 iterations: 0.004241652
      +Loss Value after 100 iterations: 0.0041917767

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.518 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,29);function S(O,W,N,z,X,$){return i(),a("div",null,[p,s("p",null,[n("For our first example, consider a simple function computing "),s("mjx-container",h,[(i(),a("svg",d,k)),o]),n(", where "),s("mjx-container",c,[(i(),a("svg",Q,g)),u])]),E,s("p",null,[n("Finally, now let us consider a linear regression problem. From a set of data-points "),s("mjx-container",m,[(i(),a("svg",y,C)),b]),n(", we try to find a set of parameters "),s("mjx-container",v,[(i(),a("svg",f,x)),D]),n(" and "),s("mjx-container",A,[(i(),a("svg",_,H)),B]),n(", s.t. "),s("mjx-container",M,[(i(),a("svg",V,Z)),P]),n(", which minimizes the mean squared error:")]),s("mjx-container",q,[(i(),a("svg",I,J)),R]),G])}const ss=e(l,[["render",S]]);export{K as __pageData,ss as default}; diff --git a/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.lean.js b/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.lean.js new file mode 100644 index 000000000..d49f3e21c --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_1_Basics.md.sRzg70M2.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,m as s,a as n,a4 as t,o as i}from"./chunks/framework.BfjuC5t1.js";const K=JSON.parse('{"title":"Julia & Lux for the Uninitiated","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/1_Basics.md","filePath":"tutorials/beginner/1_Basics.md","lastUpdated":null}'),l={name:"tutorials/beginner/1_Basics.md"},p=t("",90),h={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.781ex"},xmlns:"http://www.w3.org/2000/svg",width:"13.013ex",height:"2.737ex",role:"img",focusable:"false",viewBox:"0 -864.9 5751.9 1209.9","aria-hidden":"true"},r=t("",1),k=[r],o=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"f"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mfrac",null,[s("mn",null,"1"),s("mn",null,"2")]),s("msup",null,[s("mi",null,"x"),s("mi",null,"T")]),s("mi",null,"x")])],-1),c={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.494ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4638.6 1000","aria-hidden":"true"},T=t("",1),g=[T],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",{mathvariant:"normal"},"∇"),s("mi",null,"f"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mi",null,"x")])],-1),E=t("",27),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"40.51ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 17905.2 1000","aria-hidden":"true"},F=t("",1),C=[F],b=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{fence:"false",stretchy:"false"},"{"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,","),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",{stretchy:"false"},")"),s("mo",null,","),s("mi",null,"i"),s("mo",null,"∈"),s("mo",{fence:"false",stretchy:"false"},"{"),s("mn",null,"1"),s("mo",null,","),s("mo",null,"…"),s("mo",null,","),s("mi",null,"k"),s("mo",{fence:"false",stretchy:"false"},"}"),s("mo",null,","),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"∈"),s("msup",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{mathvariant:"double-struck"},"R")]),s("mi",null,"n")]),s("mo",null,","),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"∈"),s("msup",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{mathvariant:"double-struck"},"R")]),s("mi",null,"m")]),s("mo",{fence:"false",stretchy:"false"},"}")])],-1),v={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},f={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.05ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.371ex",height:"1.595ex",role:"img",focusable:"false",viewBox:"0 -683 1048 705","aria-hidden":"true"},w=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D44A",d:"M436 683Q450 683 486 682T553 680Q604 680 638 681T677 682Q695 682 695 674Q695 670 692 659Q687 641 683 639T661 637Q636 636 621 632T600 624T597 615Q597 603 613 377T629 138L631 141Q633 144 637 151T649 170T666 200T690 241T720 295T759 362Q863 546 877 572T892 604Q892 619 873 628T831 637Q817 637 817 647Q817 650 819 660Q823 676 825 679T839 682Q842 682 856 682T895 682T949 681Q1015 681 1034 683Q1048 683 1048 672Q1048 666 1045 655T1038 640T1028 637Q1006 637 988 631T958 617T939 600T927 584L923 578L754 282Q586 -14 585 -15Q579 -22 561 -22Q546 -22 542 -17Q539 -14 523 229T506 480L494 462Q472 425 366 239Q222 -13 220 -15T215 -19Q210 -22 197 -22Q178 -22 176 -15Q176 -12 154 304T131 622Q129 631 121 633T82 637H58Q51 644 51 648Q52 671 64 683H76Q118 680 176 680Q301 680 313 683H323Q329 677 329 674T327 656Q322 641 318 637H297Q236 634 232 620Q262 160 266 136L501 550L499 587Q496 629 489 632Q483 636 447 637Q428 637 422 639T416 648Q416 650 418 660Q419 664 420 669T421 676T424 680T428 682T436 683Z",style:{"stroke-width":"3"}})])])],-1),x=[w],D=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"W")])],-1),A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"0.971ex",height:"1.595ex",role:"img",focusable:"false",viewBox:"0 -694 429 705","aria-hidden":"true"},L=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D44F",d:"M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z",style:{"stroke-width":"3"}})])])],-1),H=[L],B=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"b")])],-1),M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.65ex"},xmlns:"http://www.w3.org/2000/svg",width:"17.577ex",height:"2.347ex",role:"img",focusable:"false",viewBox:"0 -750 7769 1037.2","aria-hidden":"true"},j=t("",1),Z=[j],P=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("msub",null,[s("mi",null,"f"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"W"),s("mo",null,","),s("mi",null,"b")])]),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",{stretchy:"false"},")"),s("mo",null,"="),s("mi",null,"W"),s("mi",null,"x"),s("mo",null,"+"),s("mi",null,"b")])],-1),q={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.819ex"},xmlns:"http://www.w3.org/2000/svg",width:"34.144ex",height:"6.757ex",role:"img",focusable:"false",viewBox:"0 -1740.7 15091.8 2986.6","aria-hidden":"true"},U=t("",1),J=[U],R=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"L"),s("mo",{stretchy:"false"},"("),s("mi",null,"W"),s("mo",null,","),s("mi",null,"b"),s("mo",{stretchy:"false"},")"),s("mo",{stretchy:"false"},"⟶"),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"1")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"k")])]),s("mfrac",null,[s("mn",null,"1"),s("mn",null,"2")]),s("mo",{"data-mjx-texclass":"ORD"},"∥"),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"f"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"W"),s("mo",null,","),s("mi",null,"b")])]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",{stretchy:"false"},")"),s("msubsup",null,[s("mo",{"data-mjx-texclass":"ORD"},"∥"),s("mn",null,"2"),s("mn",null,"2")])])],-1),G=t("",29);function S(O,W,N,z,X,$){return i(),a("div",null,[p,s("p",null,[n("For our first example, consider a simple function computing "),s("mjx-container",h,[(i(),a("svg",d,k)),o]),n(", where "),s("mjx-container",c,[(i(),a("svg",Q,g)),u])]),E,s("p",null,[n("Finally, now let us consider a linear regression problem. From a set of data-points "),s("mjx-container",m,[(i(),a("svg",y,C)),b]),n(", we try to find a set of parameters "),s("mjx-container",v,[(i(),a("svg",f,x)),D]),n(" and "),s("mjx-container",A,[(i(),a("svg",_,H)),B]),n(", s.t. "),s("mjx-container",M,[(i(),a("svg",V,Z)),P]),n(", which minimizes the mean squared error:")]),s("mjx-container",q,[(i(),a("svg",I,J)),R]),G])}const ss=e(l,[["render",S]]);export{K as __pageData,ss as default}; diff --git a/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.js b/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.js new file mode 100644 index 000000000..49e34f1d2 --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.js @@ -0,0 +1,116 @@ +import{_ as t,c as i,m as A,a,a4 as s,o as n}from"./chunks/framework.BfjuC5t1.js";const Q=JSON.parse('{"title":"Fitting a Polynomial using MLP","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/2_PolynomialFitting.md","filePath":"tutorials/beginner/2_PolynomialFitting.md","lastUpdated":null}'),l={name:"tutorials/beginner/2_PolynomialFitting.md"},e=s(`

      Fitting a Polynomial using MLP

      In this tutorial we will fit a MultiLayer Perceptron (MLP) on data generated from a polynomial.

      Package Imports

      julia
      using Lux, ADTypes, LuxAMDGPU, LuxCUDA, Optimisers, Printf, Random, Statistics, Zygote
      +using CairoMakie

      Dataset

      `,5),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.599ex",height:"2.351ex",role:"img",focusable:"false",viewBox:"0 -833.9 5126.6 1038.9","aria-hidden":"true"},h=s('',1),k=[h],r=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"y"),A("mo",null,"="),A("msup",null,[A("mi",null,"x"),A("mn",null,"2")]),A("mo",null,"−"),A("mn",null,"2"),A("mi",null,"x")])],-1),d=s(`
      julia
      function generate_data(rng::AbstractRNG)
      +    x = reshape(collect(range(-2.0f0, 2.0f0, 128)), (1, 128))
      +    y = evalpoly.(x, ((0, -2, 1),)) .+ randn(rng, (1, 128)) .* 0.1f0
      +    return (x, y)
      +end
      generate_data (generic function with 1 method)

      Initialize the random number generator and fetch the dataset.

      julia
      rng = MersenneTwister()
      +Random.seed!(rng, 12345)
      +
      +(x, y) = generate_data(rng)
      (Float32[-2.0 -1.968504 -1.9370079 -1.9055119 -1.8740157 -1.8425196 -1.8110236 -1.7795275 -1.7480315 -1.7165354 -1.6850394 -1.6535434 -1.6220472 -1.5905511 -1.5590551 -1.527559 -1.496063 -1.464567 -1.4330709 -1.4015749 -1.3700787 -1.3385826 -1.3070866 -1.2755905 -1.2440945 -1.2125984 -1.1811024 -1.1496063 -1.1181102 -1.0866141 -1.0551181 -1.023622 -0.992126 -0.96062994 -0.92913383 -0.8976378 -0.86614174 -0.8346457 -0.8031496 -0.77165353 -0.7401575 -0.70866144 -0.6771653 -0.6456693 -0.61417323 -0.5826772 -0.5511811 -0.51968503 -0.48818898 -0.4566929 -0.42519686 -0.39370078 -0.36220473 -0.33070865 -0.2992126 -0.26771653 -0.23622048 -0.20472442 -0.17322835 -0.14173229 -0.11023622 -0.07874016 -0.047244094 -0.015748031 0.015748031 0.047244094 0.07874016 0.11023622 0.14173229 0.17322835 0.20472442 0.23622048 0.26771653 0.2992126 0.33070865 0.36220473 0.39370078 0.42519686 0.4566929 0.48818898 0.51968503 0.5511811 0.5826772 0.61417323 0.6456693 0.6771653 0.70866144 0.7401575 0.77165353 0.8031496 0.8346457 0.86614174 0.8976378 0.92913383 0.96062994 0.992126 1.023622 1.0551181 1.0866141 1.1181102 1.1496063 1.1811024 1.2125984 1.2440945 1.2755905 1.3070866 1.3385826 1.3700787 1.4015749 1.4330709 1.464567 1.496063 1.527559 1.5590551 1.5905511 1.6220472 1.6535434 1.6850394 1.7165354 1.7480315 1.7795275 1.8110236 1.8425196 1.8740157 1.9055119 1.9370079 1.968504 2.0], [8.11723579535073 7.8972862806322315 7.667572185253954 7.493641443881164 7.328542256257643 7.1081451188446065 6.754145700236098 6.73844851250885 6.698323804024227 6.3637494708272655 6.270117709011731 6.2419372753805 5.816280759896085 5.718319527208828 5.741347639508506 5.258118446989299 5.268165780092538 5.195746082529355 5.032704772846244 4.733409783966572 4.520239616672976 4.369386593776045 4.107888442446331 4.182845399340577 4.002249800810884 3.8969011895086174 3.910820824989613 3.646440085736948 3.3343752660206305 3.3980378243437745 3.1887817476268587 2.9930802717826603 3.018980452144523 2.690492107796345 2.8576513349182378 2.4778283273281008 2.452401424624867 2.401875695877283 2.2896425232872755 2.2812518842985035 1.9742292519472466 1.7663454774622869 1.7829663021691418 1.6248666914928798 1.635090436697959 1.4887378757184528 1.4396068206428336 1.5047223947023354 1.2439428212858357 1.1770575798169982 1.0519113712665473 0.8008025630753797 0.8011788202541421 0.7702484835053167 0.9010273188596704 0.48114290312426095 0.4605012716399809 0.42308333113261615 0.2890108900859864 0.3324716507588617 0.2126899641074972 0.2560113968739265 0.08350192481301627 0.046225582753114294 -0.16118930624459 -0.013928769802494537 -0.030805824695545894 -0.10629780224701328 -0.17643440564041185 -0.2494508100897751 -0.3322350480467481 -0.45414851684613733 -0.6965624404632386 -0.38861245182183696 -0.4708530312086873 -0.6274991143463677 -0.5617763080815885 -0.6438360803492721 -0.7565600800322707 -0.5662591600023589 -0.6591533520776037 -0.9166793344639054 -0.8520467822193756 -0.9507226194240974 -1.0248823046771698 -0.97772916365376 -0.8199294436184201 -0.9080088282844027 -0.9682665790685976 -1.031816361263047 -0.9296919748814573 -1.1145618706755287 -1.2139119971536336 -1.0157839085777947 -0.9417175810509869 -0.9783498813733602 -0.9123675448444001 -1.138088633455826 -1.1212038088290894 -0.911429094488635 -1.023486657428913 -0.9287179111905346 -1.0396518660677925 -1.0370046468920306 -0.9846375721966646 -0.833026219703481 -0.8200258902651266 -0.789500663251252 -0.9068267920931062 -0.7284236770750803 -0.7093213401368348 -0.7048862544448803 -0.6215870033126495 -0.5892481295457608 -0.8462913756395639 -0.5544688796856879 -0.5805399434794658 -0.5761396334948753 -0.5851955365208916 -0.5561461874821676 -0.1969227628706652 -0.34073487813889014 -0.2738635064414512 -0.1425063756241582 -0.18330825579933746 -0.054321035831595324 -0.21213293699653427 0.049985105882301])

      Let's visualize the dataset

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    l = lines!(ax, x[1, :], x -> evalpoly(x, (0, -2, 1)); linewidth=3, color=:blue)
      +    s = scatter!(ax, x[1, :], y[1, :]; markersize=12, alpha=0.5,
      +        color=:orange, strokecolor=:black, strokewidth=2)
      +
      +    axislegend(ax, [l, s], ["True Quadratic Function", "Data Points"])
      +
      +    fig
      +end

      Neural Network

      For this problem, you should not be using a neural network. But let's still do that!

      julia
      model = Chain(Dense(1 => 16, relu), Dense(16 => 1))
      Chain(
      +    layer_1 = Dense(1 => 16, relu),     # 32 parameters
      +    layer_2 = Dense(16 => 1),           # 17 parameters
      +)         # Total: 49 parameters,
      +          #        plus 0 states.

      Optimizer

      We will use Adam from Optimisers.jl

      julia
      opt = Adam(0.03f0)
      Adam(0.03, (0.9, 0.999), 1.0e-8)

      Loss Function

      We will use the Lux.Training API so we need to ensure that our loss function takes 4 inputs – model, parameters, states and data. The function must return 3 values – loss, updated_state, and any computed statistics.

      julia
      function loss_function(model, ps, st, data)
      +    y_pred, st = Lux.apply(model, data[1], ps, st)
      +    mse_loss = mean(abs2, y_pred .- data[2])
      +    return mse_loss, st, ()
      +end
      loss_function (generic function with 1 method)

      Training

      First we will create a Lux.Experimental.TrainState which is essentially a convenience wrapper over parameters, states and optimizer states.

      julia
      tstate = Lux.Experimental.TrainState(rng, model, opt)
      Lux.Experimental.TrainState{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.relu), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, @NamedTuple{layer_1::@NamedTuple{weight::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, bias::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, layer_2::@NamedTuple{weight::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, bias::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}}, @NamedTuple{layer_1::@NamedTuple{weight::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}, bias::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}}, layer_2::@NamedTuple{weight::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}, bias::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}}}}(Chain(), (layer_1 = (weight = Float32[0.36222202; 0.23371002; -0.49825558; -0.18142056; -0.13757975; -0.50849473; 0.13773328; -0.035294008; 0.21778254; 0.04964345; -0.56594235; -0.45329624; -0.08787567; 0.5648949; 0.5260752; -0.07562564;;], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_2 = (weight = Float32[-0.14330137 -0.39328107 -0.18253882 -0.55998546 -0.5919335 -0.3069779 -0.39085856 -0.4838621 0.3979575 0.5851314 0.24242708 0.35374007 0.10175798 0.29761198 -0.34761065 -0.05758927], bias = Float32[0.0;;])), (layer_1 = NamedTuple(), layer_2 = NamedTuple()), (layer_1 = (weight = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], (0.9, 0.999))), bias = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], (0.9, 0.999)))), layer_2 = (weight = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0], Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0], (0.9, 0.999))), bias = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0;;], Float32[0.0;;], (0.9, 0.999))))), 0)

      Now we will use Zygote for our AD requirements.

      julia
      vjp_rule = AutoZygote()
      ADTypes.AutoZygote()

      Finally the training loop.

      julia
      function main(tstate::Lux.Experimental.TrainState, vjp, data, epochs)
      +    data = data .|> gpu_device()
      +    for epoch in 1:epochs
      +        grads, loss, stats, tstate = Lux.Training.compute_gradients(
      +            vjp, loss_function, data, tstate)
      +        if epoch % 50 == 1 || epoch == epochs
      +            @printf "Epoch: %3d \\t Loss: %.5g\\n" epoch loss
      +        end
      +        tstate = Lux.Training.apply_gradients(tstate, grads)
      +    end
      +    return tstate
      +end
      +
      +dev_cpu = cpu_device()
      +dev_gpu = gpu_device()
      +
      +tstate = main(tstate, vjp_rule, (x, y), 250)
      +y_pred = dev_cpu(Lux.apply(tstate.model, dev_gpu(x), tstate.parameters, tstate.states)[1])
      Epoch:   1 	 Loss: 9.4373
      +Epoch:  51 	 Loss: 0.086228
      +Epoch: 101 	 Loss: 0.033642
      +Epoch: 151 	 Loss: 0.021989
      +Epoch: 201 	 Loss: 0.017344
      +Epoch: 250 	 Loss: 0.013794

      Let's plot the results

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    l = lines!(ax, x[1, :], x -> evalpoly(x, (0, -2, 1)); linewidth=3)
      +    s1 = scatter!(ax, x[1, :], y[1, :]; markersize=12, alpha=0.5,
      +        color=:orange, strokecolor=:black, strokewidth=2)
      +    s2 = scatter!(ax, x[1, :], y_pred[1, :]; markersize=12, alpha=0.5,
      +        color=:green, strokecolor=:black, strokewidth=2)
      +
      +    axislegend(ax, [l, s1, s2], ["True Quadratic Function", "Actual Data", "Predictions"])
      +
      +    fig
      +end

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.600 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,38);function g(o,I,f,v,C,u){return n(),i("div",null,[e,A("p",null,[a("Generate 128 datapoints from the polynomial "),A("mjx-container",p,[(n(),i("svg",E,k)),r]),a(".")]),d])}const y=t(l,[["render",g]]);export{Q as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.lean.js b/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.lean.js new file mode 100644 index 000000000..8169fa04c --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_2_PolynomialFitting.md.d77bE0Yd.lean.js @@ -0,0 +1 @@ +import{_ as t,c as i,m as A,a,a4 as s,o as n}from"./chunks/framework.BfjuC5t1.js";const Q=JSON.parse('{"title":"Fitting a Polynomial using MLP","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/2_PolynomialFitting.md","filePath":"tutorials/beginner/2_PolynomialFitting.md","lastUpdated":null}'),l={name:"tutorials/beginner/2_PolynomialFitting.md"},e=s("",5),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.599ex",height:"2.351ex",role:"img",focusable:"false",viewBox:"0 -833.9 5126.6 1038.9","aria-hidden":"true"},h=s("",1),k=[h],r=A("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[A("mi",null,"y"),A("mo",null,"="),A("msup",null,[A("mi",null,"x"),A("mn",null,"2")]),A("mo",null,"−"),A("mn",null,"2"),A("mi",null,"x")])],-1),d=s("",38);function g(o,I,f,v,C,u){return n(),i("div",null,[e,A("p",null,[a("Generate 128 datapoints from the polynomial "),A("mjx-container",p,[(n(),i("svg",E,k)),r]),a(".")]),d])}const y=t(l,[["render",g]]);export{Q as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.js b/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.js new file mode 100644 index 000000000..4c62e5aae --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.js @@ -0,0 +1,381 @@ +import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Training a Simple LSTM","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/3_SimpleRNN.md","filePath":"tutorials/beginner/3_SimpleRNN.md","lastUpdated":null}'),p={name:"tutorials/beginner/3_SimpleRNN.md"},l=n(`

      Training a Simple LSTM

      In this tutorial we will go over using a recurrent neural network to classify clockwise and anticlockwise spirals. By the end of this tutorial you will be able to:

      1. Create custom Lux models.

      2. Become familiar with the Lux recurrent neural network API.

      3. Training using Optimisers.jl and Zygote.jl.

      Package Imports

      julia
      using ADTypes, Lux, LuxAMDGPU, LuxCUDA, JLD2, MLUtils, Optimisers, Zygote, Printf, Random,
      +      Statistics

      Dataset

      We will use MLUtils to generate 500 (noisy) clockwise and 500 (noisy) anticlockwise spirals. Using this data we will create a MLUtils.DataLoader. Our dataloader will give us sequences of size 2 × seq_len × batch_size and we need to predict a binary value whether the sequence is clockwise or anticlockwise.

      julia
      function get_dataloaders(; dataset_size=1000, sequence_length=50)
      +    # Create the spirals
      +    data = [MLUtils.Datasets.make_spiral(sequence_length) for _ in 1:dataset_size]
      +    # Get the labels
      +    labels = vcat(repeat([0.0f0], dataset_size ÷ 2), repeat([1.0f0], dataset_size ÷ 2))
      +    clockwise_spirals = [reshape(d[1][:, 1:sequence_length], :, sequence_length, 1)
      +                         for d in data[1:(dataset_size ÷ 2)]]
      +    anticlockwise_spirals = [reshape(
      +                                 d[1][:, (sequence_length + 1):end], :, sequence_length, 1)
      +                             for d in data[((dataset_size ÷ 2) + 1):end]]
      +    x_data = Float32.(cat(clockwise_spirals..., anticlockwise_spirals...; dims=3))
      +    # Split the dataset
      +    (x_train, y_train), (x_val, y_val) = splitobs((x_data, labels); at=0.8, shuffle=true)
      +    # Create DataLoaders
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize=128, shuffle=true),
      +        # Don't shuffle the validation data
      +        DataLoader(collect.((x_val, y_val)); batchsize=128, shuffle=false))
      +end
      get_dataloaders (generic function with 1 method)

      Creating a Classifier

      We will be extending the Lux.AbstractExplicitContainerLayer type for our custom model since it will contain a lstm block and a classifier head.

      We pass the fieldnames lstm_cell and classifier to the type to ensure that the parameters and states are automatically populated and we don't have to define Lux.initialparameters and Lux.initialstates.

      To understand more about container layers, please look at Container Layer.

      julia
      struct SpiralClassifier{L, C} <:
      +       Lux.AbstractExplicitContainerLayer{(:lstm_cell, :classifier)}
      +    lstm_cell::L
      +    classifier::C
      +end

      We won't define the model from scratch but rather use the Lux.LSTMCell and Lux.Dense.

      julia
      function SpiralClassifier(in_dims, hidden_dims, out_dims)
      +    return SpiralClassifier(
      +        LSTMCell(in_dims => hidden_dims), Dense(hidden_dims => out_dims, sigmoid))
      +end
      Main.var"##225".SpiralClassifier

      We can use default Lux blocks – Recurrence(LSTMCell(in_dims => hidden_dims) – instead of defining the following. But let's still do it for the sake of it.

      Now we need to define the behavior of the Classifier when it is invoked.

      julia
      function (s::SpiralClassifier)(
      +        x::AbstractArray{T, 3}, ps::NamedTuple, st::NamedTuple) where {T}
      +    # First we will have to run the sequence through the LSTM Cell
      +    # The first call to LSTM Cell will create the initial hidden state
      +    # See that the parameters and states are automatically populated into a field called
      +    # \`lstm_cell\` We use \`eachslice\` to get the elements in the sequence without copying,
      +    # and \`Iterators.peel\` to split out the first element for LSTM initialization.
      +    x_init, x_rest = Iterators.peel(Lux._eachslice(x, Val(2)))
      +    (y, carry), st_lstm = s.lstm_cell(x_init, ps.lstm_cell, st.lstm_cell)
      +    # Now that we have the hidden state and memory in \`carry\` we will pass the input and
      +    # \`carry\` jointly
      +    for x in x_rest
      +        (y, carry), st_lstm = s.lstm_cell((x, carry), ps.lstm_cell, st_lstm)
      +    end
      +    # After running through the sequence we will pass the output through the classifier
      +    y, st_classifier = s.classifier(y, ps.classifier, st.classifier)
      +    # Finally remember to create the updated state
      +    st = merge(st, (classifier=st_classifier, lstm_cell=st_lstm))
      +    return vec(y), st
      +end

      Defining Accuracy, Loss and Optimiser

      Now let's define the binarycrossentropy loss. Typically it is recommended to use logitbinarycrossentropy since it is more numerically stable, but for the sake of simplicity we will use binarycrossentropy.

      julia
      function xlogy(x, y)
      +    result = x * log(y)
      +    return ifelse(iszero(x), zero(result), result)
      +end
      +
      +function binarycrossentropy(y_pred, y_true)
      +    y_pred = y_pred .+ eps(eltype(y_pred))
      +    return mean(@. -xlogy(y_true, y_pred) - xlogy(1 - y_true, 1 - y_pred))
      +end
      +
      +function compute_loss(model, ps, st, (x, y))
      +    y_pred, st = model(x, ps, st)
      +    return binarycrossentropy(y_pred, y), st, (; y_pred=y_pred)
      +end
      +
      +matches(y_pred, y_true) = sum((y_pred .> 0.5f0) .== y_true)
      +accuracy(y_pred, y_true) = matches(y_pred, y_true) / length(y_pred)
      accuracy (generic function with 1 method)

      Training the Model

      julia
      function main()
      +    # Get the dataloaders
      +    (train_loader, val_loader) = get_dataloaders()
      +
      +    # Create the model
      +    model = SpiralClassifier(2, 8, 1)
      +    rng = Xoshiro(0)
      +
      +    dev = gpu_device()
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(0.01f0); transform_variables=dev)
      +
      +    for epoch in 1:25
      +        # Train the model
      +        for (x, y) in train_loader
      +            x = x |> dev
      +            y = y |> dev
      +
      +            gs, loss, _, train_state = Lux.Experimental.compute_gradients(
      +                AutoZygote(), compute_loss, (x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +
      +            @printf "Epoch [%3d]: Loss %4.5f\\n" epoch loss
      +        end
      +
      +        # Validate the model
      +        st_ = Lux.testmode(train_state.states)
      +        for (x, y) in val_loader
      +            x = x |> dev
      +            y = y |> dev
      +            loss, st_, ret = compute_loss(model, train_state.parameters, st_, (x, y))
      +            acc = accuracy(ret.y_pred, y)
      +            @printf "Validation: Loss %4.5f Accuracy %4.5f\\n" loss acc
      +        end
      +    end
      +
      +    return (train_state.parameters, train_state.states) |> cpu_device()
      +end
      +
      +ps_trained, st_trained = main()
      Epoch [  1]: Loss 0.56263
      +Epoch [  1]: Loss 0.50622
      +Epoch [  1]: Loss 0.46754
      +Epoch [  1]: Loss 0.45518
      +Epoch [  1]: Loss 0.43237
      +Epoch [  1]: Loss 0.40357
      +Epoch [  1]: Loss 0.37433
      +Validation: Loss 0.36939 Accuracy 1.00000
      +Validation: Loss 0.38321 Accuracy 1.00000
      +Epoch [  2]: Loss 0.37481
      +Epoch [  2]: Loss 0.35556
      +Epoch [  2]: Loss 0.32647
      +Epoch [  2]: Loss 0.32097
      +Epoch [  2]: Loss 0.29943
      +Epoch [  2]: Loss 0.28412
      +Epoch [  2]: Loss 0.26005
      +Validation: Loss 0.25919 Accuracy 1.00000
      +Validation: Loss 0.26821 Accuracy 1.00000
      +Epoch [  3]: Loss 0.26588
      +Epoch [  3]: Loss 0.24159
      +Epoch [  3]: Loss 0.23038
      +Epoch [  3]: Loss 0.22152
      +Epoch [  3]: Loss 0.20744
      +Epoch [  3]: Loss 0.20136
      +Epoch [  3]: Loss 0.18646
      +Validation: Loss 0.18102 Accuracy 1.00000
      +Validation: Loss 0.18637 Accuracy 1.00000
      +Epoch [  4]: Loss 0.17623
      +Epoch [  4]: Loss 0.16670
      +Epoch [  4]: Loss 0.16627
      +Epoch [  4]: Loss 0.15707
      +Epoch [  4]: Loss 0.15225
      +Epoch [  4]: Loss 0.14029
      +Epoch [  4]: Loss 0.13672
      +Validation: Loss 0.12918 Accuracy 1.00000
      +Validation: Loss 0.13293 Accuracy 1.00000
      +Epoch [  5]: Loss 0.12726
      +Epoch [  5]: Loss 0.12789
      +Epoch [  5]: Loss 0.11814
      +Epoch [  5]: Loss 0.10943
      +Epoch [  5]: Loss 0.10736
      +Epoch [  5]: Loss 0.10008
      +Epoch [  5]: Loss 0.09878
      +Validation: Loss 0.09405 Accuracy 1.00000
      +Validation: Loss 0.09701 Accuracy 1.00000
      +Epoch [  6]: Loss 0.09387
      +Epoch [  6]: Loss 0.08977
      +Epoch [  6]: Loss 0.08546
      +Epoch [  6]: Loss 0.08282
      +Epoch [  6]: Loss 0.07942
      +Epoch [  6]: Loss 0.07283
      +Epoch [  6]: Loss 0.07509
      +Validation: Loss 0.06955 Accuracy 1.00000
      +Validation: Loss 0.07227 Accuracy 1.00000
      +Epoch [  7]: Loss 0.06925
      +Epoch [  7]: Loss 0.06594
      +Epoch [  7]: Loss 0.06383
      +Epoch [  7]: Loss 0.05994
      +Epoch [  7]: Loss 0.05758
      +Epoch [  7]: Loss 0.05775
      +Epoch [  7]: Loss 0.05475
      +Validation: Loss 0.05197 Accuracy 1.00000
      +Validation: Loss 0.05449 Accuracy 1.00000
      +Epoch [  8]: Loss 0.05228
      +Epoch [  8]: Loss 0.05002
      +Epoch [  8]: Loss 0.04655
      +Epoch [  8]: Loss 0.04395
      +Epoch [  8]: Loss 0.04409
      +Epoch [  8]: Loss 0.04332
      +Epoch [  8]: Loss 0.04139
      +Validation: Loss 0.03915 Accuracy 1.00000
      +Validation: Loss 0.04145 Accuracy 1.00000
      +Epoch [  9]: Loss 0.03956
      +Epoch [  9]: Loss 0.03666
      +Epoch [  9]: Loss 0.03553
      +Epoch [  9]: Loss 0.03384
      +Epoch [  9]: Loss 0.03446
      +Epoch [  9]: Loss 0.03219
      +Epoch [  9]: Loss 0.02961
      +Validation: Loss 0.02991 Accuracy 1.00000
      +Validation: Loss 0.03203 Accuracy 1.00000
      +Epoch [ 10]: Loss 0.03070
      +Epoch [ 10]: Loss 0.02812
      +Epoch [ 10]: Loss 0.02747
      +Epoch [ 10]: Loss 0.02620
      +Epoch [ 10]: Loss 0.02516
      +Epoch [ 10]: Loss 0.02568
      +Epoch [ 10]: Loss 0.02363
      +Validation: Loss 0.02351 Accuracy 1.00000
      +Validation: Loss 0.02541 Accuracy 1.00000
      +Epoch [ 11]: Loss 0.02379
      +Epoch [ 11]: Loss 0.02360
      +Epoch [ 11]: Loss 0.02179
      +Epoch [ 11]: Loss 0.02033
      +Epoch [ 11]: Loss 0.02039
      +Epoch [ 11]: Loss 0.01950
      +Epoch [ 11]: Loss 0.02115
      +Validation: Loss 0.01913 Accuracy 1.00000
      +Validation: Loss 0.02080 Accuracy 1.00000
      +Epoch [ 12]: Loss 0.01892
      +Epoch [ 12]: Loss 0.01786
      +Epoch [ 12]: Loss 0.01832
      +Epoch [ 12]: Loss 0.01683
      +Epoch [ 12]: Loss 0.01617
      +Epoch [ 12]: Loss 0.01823
      +Epoch [ 12]: Loss 0.01779
      +Validation: Loss 0.01608 Accuracy 1.00000
      +Validation: Loss 0.01752 Accuracy 1.00000
      +Epoch [ 13]: Loss 0.01481
      +Epoch [ 13]: Loss 0.01561
      +Epoch [ 13]: Loss 0.01593
      +Epoch [ 13]: Loss 0.01432
      +Epoch [ 13]: Loss 0.01573
      +Epoch [ 13]: Loss 0.01389
      +Epoch [ 13]: Loss 0.01494
      +Validation: Loss 0.01388 Accuracy 1.00000
      +Validation: Loss 0.01514 Accuracy 1.00000
      +Epoch [ 14]: Loss 0.01335
      +Epoch [ 14]: Loss 0.01329
      +Epoch [ 14]: Loss 0.01391
      +Epoch [ 14]: Loss 0.01310
      +Epoch [ 14]: Loss 0.01329
      +Epoch [ 14]: Loss 0.01209
      +Epoch [ 14]: Loss 0.01129
      +Validation: Loss 0.01222 Accuracy 1.00000
      +Validation: Loss 0.01335 Accuracy 1.00000
      +Epoch [ 15]: Loss 0.01293
      +Epoch [ 15]: Loss 0.01176
      +Epoch [ 15]: Loss 0.01128
      +Epoch [ 15]: Loss 0.01138
      +Epoch [ 15]: Loss 0.01119
      +Epoch [ 15]: Loss 0.01150
      +Epoch [ 15]: Loss 0.01013
      +Validation: Loss 0.01094 Accuracy 1.00000
      +Validation: Loss 0.01196 Accuracy 1.00000
      +Epoch [ 16]: Loss 0.01111
      +Epoch [ 16]: Loss 0.01155
      +Epoch [ 16]: Loss 0.01045
      +Epoch [ 16]: Loss 0.01038
      +Epoch [ 16]: Loss 0.00986
      +Epoch [ 16]: Loss 0.00926
      +Epoch [ 16]: Loss 0.01058
      +Validation: Loss 0.00990 Accuracy 1.00000
      +Validation: Loss 0.01085 Accuracy 1.00000
      +Epoch [ 17]: Loss 0.00961
      +Epoch [ 17]: Loss 0.00939
      +Epoch [ 17]: Loss 0.01024
      +Epoch [ 17]: Loss 0.00949
      +Epoch [ 17]: Loss 0.00934
      +Epoch [ 17]: Loss 0.00900
      +Epoch [ 17]: Loss 0.00861
      +Validation: Loss 0.00904 Accuracy 1.00000
      +Validation: Loss 0.00990 Accuracy 1.00000
      +Epoch [ 18]: Loss 0.00919
      +Epoch [ 18]: Loss 0.00851
      +Epoch [ 18]: Loss 0.00921
      +Epoch [ 18]: Loss 0.00895
      +Epoch [ 18]: Loss 0.00814
      +Epoch [ 18]: Loss 0.00790
      +Epoch [ 18]: Loss 0.00914
      +Validation: Loss 0.00831 Accuracy 1.00000
      +Validation: Loss 0.00911 Accuracy 1.00000
      +Epoch [ 19]: Loss 0.00879
      +Epoch [ 19]: Loss 0.00821
      +Epoch [ 19]: Loss 0.00771
      +Epoch [ 19]: Loss 0.00754
      +Epoch [ 19]: Loss 0.00763
      +Epoch [ 19]: Loss 0.00819
      +Epoch [ 19]: Loss 0.00725
      +Validation: Loss 0.00767 Accuracy 1.00000
      +Validation: Loss 0.00842 Accuracy 1.00000
      +Epoch [ 20]: Loss 0.00766
      +Epoch [ 20]: Loss 0.00682
      +Epoch [ 20]: Loss 0.00756
      +Epoch [ 20]: Loss 0.00719
      +Epoch [ 20]: Loss 0.00725
      +Epoch [ 20]: Loss 0.00777
      +Epoch [ 20]: Loss 0.00760
      +Validation: Loss 0.00713 Accuracy 1.00000
      +Validation: Loss 0.00783 Accuracy 1.00000
      +Epoch [ 21]: Loss 0.00663
      +Epoch [ 21]: Loss 0.00737
      +Epoch [ 21]: Loss 0.00708
      +Epoch [ 21]: Loss 0.00655
      +Epoch [ 21]: Loss 0.00692
      +Epoch [ 21]: Loss 0.00675
      +Epoch [ 21]: Loss 0.00652
      +Validation: Loss 0.00664 Accuracy 1.00000
      +Validation: Loss 0.00730 Accuracy 1.00000
      +Epoch [ 22]: Loss 0.00615
      +Epoch [ 22]: Loss 0.00571
      +Epoch [ 22]: Loss 0.00629
      +Epoch [ 22]: Loss 0.00674
      +Epoch [ 22]: Loss 0.00678
      +Epoch [ 22]: Loss 0.00690
      +Epoch [ 22]: Loss 0.00588
      +Validation: Loss 0.00621 Accuracy 1.00000
      +Validation: Loss 0.00684 Accuracy 1.00000
      +Epoch [ 23]: Loss 0.00587
      +Epoch [ 23]: Loss 0.00625
      +Epoch [ 23]: Loss 0.00642
      +Epoch [ 23]: Loss 0.00557
      +Epoch [ 23]: Loss 0.00585
      +Epoch [ 23]: Loss 0.00597
      +Epoch [ 23]: Loss 0.00643
      +Validation: Loss 0.00583 Accuracy 1.00000
      +Validation: Loss 0.00642 Accuracy 1.00000
      +Epoch [ 24]: Loss 0.00560
      +Epoch [ 24]: Loss 0.00568
      +Epoch [ 24]: Loss 0.00568
      +Epoch [ 24]: Loss 0.00549
      +Epoch [ 24]: Loss 0.00585
      +Epoch [ 24]: Loss 0.00556
      +Epoch [ 24]: Loss 0.00554
      +Validation: Loss 0.00549 Accuracy 1.00000
      +Validation: Loss 0.00604 Accuracy 1.00000
      +Epoch [ 25]: Loss 0.00557
      +Epoch [ 25]: Loss 0.00522
      +Epoch [ 25]: Loss 0.00536
      +Epoch [ 25]: Loss 0.00513
      +Epoch [ 25]: Loss 0.00540
      +Epoch [ 25]: Loss 0.00509
      +Epoch [ 25]: Loss 0.00569
      +Validation: Loss 0.00517 Accuracy 1.00000
      +Validation: Loss 0.00570 Accuracy 1.00000

      Saving the Model

      We can save the model using JLD2 (and any other serialization library of your choice) Note that we transfer the model to CPU before saving. Additionally, we recommend that you don't save the model

      julia
      @save "trained_model.jld2" {compress = true} ps_trained st_trained

      Let's try loading the model

      julia
      @load "trained_model.jld2" ps_trained st_trained
      2-element Vector{Symbol}:
      + :ps_trained
      + :st_trained

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.141 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,38),h=[l];function e(t,k,c,E,r,d){return i(),a("div",null,h)}const y=s(p,[["render",e]]);export{g as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.lean.js b/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.lean.js new file mode 100644 index 000000000..706d05303 --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_3_SimpleRNN.md.SS1AvA0i.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework.BfjuC5t1.js";const g=JSON.parse('{"title":"Training a Simple LSTM","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/3_SimpleRNN.md","filePath":"tutorials/beginner/3_SimpleRNN.md","lastUpdated":null}'),p={name:"tutorials/beginner/3_SimpleRNN.md"},l=n("",38),h=[l];function e(t,k,c,E,r,d){return i(),a("div",null,h)}const y=s(p,[["render",e]]);export{g as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.js b/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.js new file mode 100644 index 000000000..3f7d2566d --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.js @@ -0,0 +1,115 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"MNIST Classification with SimpleChains","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/4_SimpleChains.md","filePath":"tutorials/beginner/4_SimpleChains.md","lastUpdated":null}'),t={name:"tutorials/beginner/4_SimpleChains.md"},l=n(`

      MNIST Classification with SimpleChains

      SimpleChains.jl is an excellent framework for training small neural networks. In this tutorial we will demonstrate how to use the same API as Lux.jl to train a model using SimpleChains.jl. We will use the tutorial from SimpleChains.jl as a reference.

      Package Imports

      julia
      using Lux, ADTypes, MLUtils, Optimisers, Zygote, OneHotArrays, Random, Statistics, Printf
      +import MLDatasets: MNIST
      +import SimpleChains: static

      Loading MNIST

      julia
      function loadmnist(batchsize, train_split)
      +    # Load MNIST
      +    N = 2000
      +    dataset = MNIST(; split=:train)
      +    imgs = dataset.features[:, :, 1:N]
      +    labels_raw = dataset.targets[1:N]
      +
      +    # Process images into (H,W,C,BS) batches
      +    x_data = Float32.(reshape(imgs, size(imgs, 1), size(imgs, 2), 1, size(imgs, 3)))
      +    y_data = onehotbatch(labels_raw, 0:9)
      +    (x_train, y_train), (x_test, y_test) = splitobs((x_data, y_data); at=train_split)
      +
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize, shuffle=true),
      +        # Don't shuffle the test data
      +        DataLoader(collect.((x_test, y_test)); batchsize, shuffle=false))
      +end
      loadmnist (generic function with 1 method)

      Define the Model

      julia
      lux_model = Chain(Conv((5, 5), 1 => 6, relu), MaxPool((2, 2)),
      +    Conv((5, 5), 6 => 16, relu), MaxPool((2, 2)), FlattenLayer(3),
      +    Chain(Dense(256 => 128, relu), Dense(128 => 84, relu), Dense(84 => 10)))
      Chain(
      +    layer_1 = Conv((5, 5), 1 => 6, relu),  # 156 parameters
      +    layer_2 = MaxPool((2, 2)),
      +    layer_3 = Conv((5, 5), 6 => 16, relu),  # 2_416 parameters
      +    layer_4 = MaxPool((2, 2)),
      +    layer_5 = FlattenLayer(),
      +    layer_6 = Dense(256 => 128, relu),  # 32_896 parameters
      +    layer_7 = Dense(128 => 84, relu),   # 10_836 parameters
      +    layer_8 = Dense(84 => 10),          # 850 parameters
      +)         # Total: 47_154 parameters,
      +          #        plus 0 states.

      We now need to convert the lux_model to SimpleChains.jl. We need to do this by defining the ToSimpleChainsAdaptor and providing the input dimensions.

      julia
      adaptor = ToSimpleChainsAdaptor((static(28), static(28), static(1)))
      +simple_chains_model = adaptor(lux_model)
      SimpleChainsLayer()  # 47_154 parameters

      Helper Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(model, ps, st, (x, y))
      +    y_pred, st = model(x, ps, st)
      +    return logitcrossentropy(y_pred, y), st, (;)
      +end
      +
      +function accuracy(model, ps, st, dataloader)
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    for (x, y) in dataloader
      +        target_class = onecold(y)
      +        predicted_class = onecold(Array(first(model(x, ps, st))))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 1 method)

      Define the Training Loop

      julia
      function train(model; rng=Xoshiro(0), kwargs...)
      +    train_dataloader, test_dataloader = loadmnist(128, 0.9)
      +
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(3.0f-4); transform_variables=identity)
      +
      +    ### Lets train the model
      +    nepochs = 10
      +    for epoch in 1:nepochs
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            (gs, _, _, train_state) = Lux.Experimental.compute_gradients(
      +                AutoZygote(), loss, (x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +        end
      +        ttime = time() - stime
      +
      +        tr_acc = accuracy(
      +            model, train_state.parameters, train_state.states, train_dataloader) * 100
      +        te_acc = accuracy(
      +            model, train_state.parameters, train_state.states, test_dataloader) * 100
      +
      +        @printf "[%2d/%2d] \\t Time %.2fs \\t Training Accuracy: %.2f%% \\t Test Accuracy: %.2f%%\\n" epoch nepochs ttime tr_acc te_acc
      +    end
      +end
      train (generic function with 1 method)

      Finally Training the Model

      First we will train the Lux model

      julia
      train(lux_model)
      [ 1/10] 	 Time 84.57s 	 Training Accuracy: 24.11% 	 Test Accuracy: 24.00%
      +[ 2/10] 	 Time 48.82s 	 Training Accuracy: 46.89% 	 Test Accuracy: 47.50%
      +[ 3/10] 	 Time 48.37s 	 Training Accuracy: 68.06% 	 Test Accuracy: 67.50%
      +[ 4/10] 	 Time 48.83s 	 Training Accuracy: 74.33% 	 Test Accuracy: 72.50%
      +[ 5/10] 	 Time 48.44s 	 Training Accuracy: 80.61% 	 Test Accuracy: 79.00%
      +[ 6/10] 	 Time 44.90s 	 Training Accuracy: 82.83% 	 Test Accuracy: 82.50%
      +[ 7/10] 	 Time 47.44s 	 Training Accuracy: 84.72% 	 Test Accuracy: 83.00%
      +[ 8/10] 	 Time 49.94s 	 Training Accuracy: 85.61% 	 Test Accuracy: 84.00%
      +[ 9/10] 	 Time 49.01s 	 Training Accuracy: 85.83% 	 Test Accuracy: 84.50%
      +[10/10] 	 Time 48.72s 	 Training Accuracy: 87.61% 	 Test Accuracy: 85.50%

      Now we will train the SimpleChains model

      julia
      train(simple_chains_model)
      [ 1/10] 	 Time 885.21s 	 Training Accuracy: 29.78% 	 Test Accuracy: 27.00%
      +[ 2/10] 	 Time 15.95s 	 Training Accuracy: 40.83% 	 Test Accuracy: 38.00%
      +[ 3/10] 	 Time 15.94s 	 Training Accuracy: 60.06% 	 Test Accuracy: 55.50%
      +[ 4/10] 	 Time 15.94s 	 Training Accuracy: 66.33% 	 Test Accuracy: 62.00%
      +[ 5/10] 	 Time 15.94s 	 Training Accuracy: 74.28% 	 Test Accuracy: 71.00%
      +[ 6/10] 	 Time 15.95s 	 Training Accuracy: 80.33% 	 Test Accuracy: 76.00%
      +[ 7/10] 	 Time 15.94s 	 Training Accuracy: 82.94% 	 Test Accuracy: 81.00%
      +[ 8/10] 	 Time 15.96s 	 Training Accuracy: 83.61% 	 Test Accuracy: 80.50%
      +[ 9/10] 	 Time 15.95s 	 Training Accuracy: 85.61% 	 Test Accuracy: 82.00%
      +[10/10] 	 Time 15.94s 	 Training Accuracy: 87.06% 	 Test Accuracy: 84.00%

      On my local machine we see a 3-4x speedup when using SimpleChains.jl. The conditions of the server this documentation is being built on is not ideal for CPU benchmarking hence, the speedup may not be as significant and even there might be regressions.

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%

      This page was generated using Literate.jl.

      `,32),p=[l];function h(e,k,r,d,E,g){return a(),i("div",null,p)}const o=s(t,[["render",h]]);export{y as __pageData,o as default}; diff --git a/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.lean.js b/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.lean.js new file mode 100644 index 000000000..a1c7fab41 --- /dev/null +++ b/v0.5.30/assets/tutorials_beginner_4_SimpleChains.md.CoBtejGc.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"MNIST Classification with SimpleChains","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/beginner/4_SimpleChains.md","filePath":"tutorials/beginner/4_SimpleChains.md","lastUpdated":null}'),t={name:"tutorials/beginner/4_SimpleChains.md"},l=n("",32),p=[l];function h(e,k,r,d,E,g){return a(),i("div",null,p)}const o=s(t,[["render",h]]);export{y as __pageData,o as default}; diff --git a/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.js b/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.js new file mode 100644 index 000000000..5b9447015 --- /dev/null +++ b/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.js @@ -0,0 +1 @@ +import{V as c,a as s,b as r,c as u}from"./chunks/theme.BUqgOrlt.js";import{c as g,J as a,w as t,p as i,o as d,a as n}from"./chunks/framework.BfjuC5t1.js";const L=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"tutorials/index.md","filePath":"tutorials/index.md","lastUpdated":null}'),p={name:"tutorials/index.md"},f=Object.assign(p,{setup(h){const e='',l=[{avatar:"https://github.com/LuxDL.png",name:"Julia & Lux for the Uninitiated",desc:"A tutorial on how to get started with Julia and Lux for those who have never used Julia before.",links:[{icon:{svg:e},link:"beginner/1_Basics"}]},{avatar:"https://github.com/LuxDL.png",name:"Fitting a Polynomial using MLP",desc:"Learn the Basics of Lux by fitting a Multi-Layer Perceptron to a Polynomial.",links:[{icon:{svg:e},link:"beginner/2_PolynomialFitting"}]},{avatar:"https://github.com/LuxDL.png",name:"Training a Simple LSTM",desc:"Learn the API for defining Recurrent Models in Lux.",links:[{icon:{svg:e},link:"beginner/3_SimpleRNN"}]},{avatar:"https://github.com/PumasAI.png",name:"Use SimpleChains.jl as a Backend",desc:"Learn how to train small neural networks really fast",links:[{icon:{svg:e},link:"beginner/4_SimpleChains"}]}],o=[{avatar:"https://github.com/SciML.png",name:"MNIST Classification using Neural ODE",desc:"Train a Neural ODE to classify MNIST Images.",links:[{icon:{svg:e},link:"intermediate/1_NeuralODE"}]},{avatar:"https://github.com/TuringLang.png",name:"Bayesian Neural Networks",desc:"Figure out how to use Probabilistic Programming Frameworks like Turing with Lux.",links:[{icon:{svg:e},link:"intermediate/2_BayesianNN"}]},{avatar:"https://github.com/LuxDL.png",name:"Training a HyperNetwork",desc:"In this tutorial we will train a hypernetwork to work on multiple datasets by predicting neural network parameters.",orgLink:"intermediate/3_HyperNet",links:[{icon:{svg:e},link:"intermediate/3_HyperNet"}]}],m=[{avatar:"https://github.com/SciML.png",name:"Neural ODE to Model Gravitational Waveforms",desc:"Training a Neural ODE to fit simulated data of gravitational waveforms.",links:[{icon:{svg:e},link:"advanced/1_GravitationalWaveForm"}]}];return(v,b)=>(d(),g("div",null,[a(i(u),null,{default:t(()=>[a(i(c),null,{title:t(()=>[n("Tutorials")]),_:1}),a(i(s),null,{title:t(()=>[n("Beginners Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:l})]),_:1}),a(i(s),null,{title:t(()=>[n("Intermediate Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:o})]),_:1}),a(i(s),null,{title:t(()=>[n("Advanced Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:m})]),_:1})]),_:1})]))}});export{L as __pageData,f as default}; diff --git a/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.lean.js b/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.lean.js new file mode 100644 index 000000000..5b9447015 --- /dev/null +++ b/v0.5.30/assets/tutorials_index.md.jZj6-Wv9.lean.js @@ -0,0 +1 @@ +import{V as c,a as s,b as r,c as u}from"./chunks/theme.BUqgOrlt.js";import{c as g,J as a,w as t,p as i,o as d,a as n}from"./chunks/framework.BfjuC5t1.js";const L=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"tutorials/index.md","filePath":"tutorials/index.md","lastUpdated":null}'),p={name:"tutorials/index.md"},f=Object.assign(p,{setup(h){const e='',l=[{avatar:"https://github.com/LuxDL.png",name:"Julia & Lux for the Uninitiated",desc:"A tutorial on how to get started with Julia and Lux for those who have never used Julia before.",links:[{icon:{svg:e},link:"beginner/1_Basics"}]},{avatar:"https://github.com/LuxDL.png",name:"Fitting a Polynomial using MLP",desc:"Learn the Basics of Lux by fitting a Multi-Layer Perceptron to a Polynomial.",links:[{icon:{svg:e},link:"beginner/2_PolynomialFitting"}]},{avatar:"https://github.com/LuxDL.png",name:"Training a Simple LSTM",desc:"Learn the API for defining Recurrent Models in Lux.",links:[{icon:{svg:e},link:"beginner/3_SimpleRNN"}]},{avatar:"https://github.com/PumasAI.png",name:"Use SimpleChains.jl as a Backend",desc:"Learn how to train small neural networks really fast",links:[{icon:{svg:e},link:"beginner/4_SimpleChains"}]}],o=[{avatar:"https://github.com/SciML.png",name:"MNIST Classification using Neural ODE",desc:"Train a Neural ODE to classify MNIST Images.",links:[{icon:{svg:e},link:"intermediate/1_NeuralODE"}]},{avatar:"https://github.com/TuringLang.png",name:"Bayesian Neural Networks",desc:"Figure out how to use Probabilistic Programming Frameworks like Turing with Lux.",links:[{icon:{svg:e},link:"intermediate/2_BayesianNN"}]},{avatar:"https://github.com/LuxDL.png",name:"Training a HyperNetwork",desc:"In this tutorial we will train a hypernetwork to work on multiple datasets by predicting neural network parameters.",orgLink:"intermediate/3_HyperNet",links:[{icon:{svg:e},link:"intermediate/3_HyperNet"}]}],m=[{avatar:"https://github.com/SciML.png",name:"Neural ODE to Model Gravitational Waveforms",desc:"Training a Neural ODE to fit simulated data of gravitational waveforms.",links:[{icon:{svg:e},link:"advanced/1_GravitationalWaveForm"}]}];return(v,b)=>(d(),g("div",null,[a(i(u),null,{default:t(()=>[a(i(c),null,{title:t(()=>[n("Tutorials")]),_:1}),a(i(s),null,{title:t(()=>[n("Beginners Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:l})]),_:1}),a(i(s),null,{title:t(()=>[n("Intermediate Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:o})]),_:1}),a(i(s),null,{title:t(()=>[n("Advanced Tutorials")]),members:t(()=>[a(i(r),{size:"small",members:m})]),_:1})]),_:1})]))}});export{L as __pageData,f as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.js b/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.js new file mode 100644 index 000000000..470d7c3f4 --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.js @@ -0,0 +1,253 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"MNIST Classification using Neural ODEs","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/1_NeuralODE.md","filePath":"tutorials/intermediate/1_NeuralODE.md","lastUpdated":null}'),t={name:"tutorials/intermediate/1_NeuralODE.md"},e=n(`

      MNIST Classification using Neural ODEs

      To understand Neural ODEs, users should look up these lecture notes. We recommend users to directly use DiffEqFlux.jl, instead of implementing Neural ODEs from scratch.

      Package Imports

      julia
      using Lux, ComponentArrays, SciMLSensitivity, LuxAMDGPU, LuxCUDA, Optimisers,
      +      OrdinaryDiffEq, Random, Statistics, Zygote, OneHotArrays, InteractiveUtils, Printf
      +import MLDatasets: MNIST
      +import MLUtils: DataLoader, splitobs
      +
      +CUDA.allowscalar(false)

      Loading MNIST

      julia
      function loadmnist(batchsize, train_split)
      +    # Load MNIST: Only 1500 for demonstration purposes
      +    N = 1500
      +    dataset = MNIST(; split=:train)
      +    imgs = dataset.features[:, :, 1:N]
      +    labels_raw = dataset.targets[1:N]
      +
      +    # Process images into (H,W,C,BS) batches
      +    x_data = Float32.(reshape(imgs, size(imgs, 1), size(imgs, 2), 1, size(imgs, 3)))
      +    y_data = onehotbatch(labels_raw, 0:9)
      +    (x_train, y_train), (x_test, y_test) = splitobs((x_data, y_data); at=train_split)
      +
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize, shuffle=true),
      +        # Don't shuffle the test data
      +        DataLoader(collect.((x_test, y_test)); batchsize, shuffle=false))
      +end
      loadmnist (generic function with 1 method)

      Define the Neural ODE Layer

      The NeuralODE is a ContainerLayer, which stores a model. The parameters and states of the NeuralODE are same as those of the underlying model.

      julia
      struct NeuralODE{M <: Lux.AbstractExplicitLayer, So, T, K} <:
      +       Lux.AbstractExplicitContainerLayer{(:model,)}
      +    model::M
      +    solver::So
      +    tspan::T
      +    kwargs::K
      +end
      +
      +function NeuralODE(
      +        model::Lux.AbstractExplicitLayer; solver=Tsit5(), tspan=(0.0f0, 1.0f0), kwargs...)
      +    return NeuralODE(model, solver, tspan, kwargs)
      +end
      Main.var"##225".NeuralODE

      OrdinaryDiffEq.jl can deal with non-Vector Inputs! However, certain discrete sensitivities like ReverseDiffAdjoint can't handle non-Vector inputs. Hence, we need to convert the input and output of the ODE solver to a Vector.

      julia
      function (n::NeuralODE)(x, ps, st)
      +    function dudt(u, p, t)
      +        u_, st = n.model(reshape(u, size(x)), p, st)
      +        return vec(u_)
      +    end
      +    prob = ODEProblem{false}(ODEFunction{false}(dudt), vec(x), n.tspan, ps)
      +    return solve(prob, n.solver; n.kwargs...), st
      +end
      +
      +@views diffeqsol_to_array(l::Int, x::ODESolution) = reshape(last(x.u), (l, :))
      +@views diffeqsol_to_array(l::Int, x::AbstractMatrix) = reshape(x[:, end], (l, :))
      diffeqsol_to_array (generic function with 2 methods)

      Create and Initialize the Neural ODE Layer

      julia
      function create_model(model_fn=NeuralODE; dev=gpu_device(), use_named_tuple::Bool=false,
      +        sensealg=InterpolatingAdjoint(; autojacvec=ZygoteVJP()))
      +    # Construct the Neural ODE Model
      +    model = Chain(FlattenLayer(),
      +        Dense(784 => 20, tanh),
      +        model_fn(Chain(Dense(20 => 10, tanh), Dense(10 => 10, tanh), Dense(10 => 20, tanh));
      +            save_everystep=false, reltol=1.0f-3,
      +            abstol=1.0f-3, save_start=false, sensealg),
      +        Base.Fix1(diffeqsol_to_array, 20),
      +        Dense(20 => 10))
      +
      +    rng = Random.default_rng()
      +    Random.seed!(rng, 0)
      +
      +    ps, st = Lux.setup(rng, model)
      +    ps = (use_named_tuple ? ps : ComponentArray(ps)) |> dev
      +    st = st |> dev
      +
      +    return model, ps, st
      +end
      create_model (generic function with 2 methods)

      Define Utility Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(x, y, model, ps, st)
      +    y_pred, st = model(x, ps, st)
      +    return logitcrossentropy(y_pred, y), st
      +end
      +
      +function accuracy(model, ps, st, dataloader; dev=gpu_device())
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    cpu_dev = cpu_device()
      +    for (x, y) in dataloader
      +        target_class = onecold(y)
      +        predicted_class = onecold(cpu_dev(first(model(dev(x), ps, st))))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 1 method)

      Training

      julia
      function train(model_function; cpu::Bool=false, kwargs...)
      +    dev = cpu ? cpu_device() : gpu_device()
      +    model, ps, st = create_model(model_function; dev, kwargs...)
      +
      +    # Training
      +    train_dataloader, test_dataloader = loadmnist(128, 0.9)
      +
      +    opt = Adam(0.001f0)
      +    st_opt = Optimisers.setup(opt, ps)
      +
      +    ### Warmup the Model
      +    img = dev(train_dataloader.data[1][:, :, :, 1:1])
      +    lab = dev(train_dataloader.data[2][:, 1:1])
      +    loss(img, lab, model, ps, st)
      +    (l, _), back = pullback(p -> loss(img, lab, model, p, st), ps)
      +    back((one(l), nothing))
      +
      +    ### Lets train the model
      +    nepochs = 9
      +    for epoch in 1:nepochs
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            x = dev(x)
      +            y = dev(y)
      +            (l, st), back = pullback(p -> loss(x, y, model, p, st), ps)
      +            ### We need to add \`nothing\`s equal to the number of returned values - 1
      +            gs = back((one(l), nothing))[1]
      +            st_opt, ps = Optimisers.update(st_opt, ps, gs)
      +        end
      +        ttime = time() - stime
      +
      +        tr_acc = accuracy(model, ps, st, train_dataloader; dev)
      +        te_acc = accuracy(model, ps, st, test_dataloader; dev)
      +        @printf "[%d/%d] \\t Time %.2fs \\t Training Accuracy: %.5f%% \\t Test Accuracy: %.5f%%\\n" epoch nepochs ttime tr_acc te_acc
      +    end
      +end
      +
      +train(NeuralODE)
      [1/9] 	 Time 3.31s 	 Training Accuracy: 0.50741% 	 Test Accuracy: 0.45333%
      +[2/9] 	 Time 0.30s 	 Training Accuracy: 0.70741% 	 Test Accuracy: 0.66667%
      +[3/9] 	 Time 0.44s 	 Training Accuracy: 0.77852% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.27s 	 Training Accuracy: 0.81037% 	 Test Accuracy: 0.75333%
      +[5/9] 	 Time 0.30s 	 Training Accuracy: 0.82667% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.33s 	 Training Accuracy: 0.84148% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.34s 	 Training Accuracy: 0.85481% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 0.35s 	 Training Accuracy: 0.86815% 	 Test Accuracy: 0.82000%
      +[9/9] 	 Time 0.34s 	 Training Accuracy: 0.87407% 	 Test Accuracy: 0.84000%

      We can also change the sensealg and train the model! GaussAdjoint allows you to use any arbitrary parameter structure and not just a flat vector (ComponentArray).

      julia
      train(NeuralODE; sensealg=GaussAdjoint(; autojacvec=ZygoteVJP()), use_named_tuple=true)
      [1/9] 	 Time 2.41s 	 Training Accuracy: 0.49630% 	 Test Accuracy: 0.38000%
      +[2/9] 	 Time 0.32s 	 Training Accuracy: 0.70593% 	 Test Accuracy: 0.65333%
      +[3/9] 	 Time 0.25s 	 Training Accuracy: 0.78296% 	 Test Accuracy: 0.72000%
      +[4/9] 	 Time 0.33s 	 Training Accuracy: 0.80889% 	 Test Accuracy: 0.74000%
      +[5/9] 	 Time 0.36s 	 Training Accuracy: 0.82370% 	 Test Accuracy: 0.76667%
      +[6/9] 	 Time 0.37s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.37s 	 Training Accuracy: 0.85630% 	 Test Accuracy: 0.81333%
      +[8/9] 	 Time 0.34s 	 Training Accuracy: 0.86370% 	 Test Accuracy: 0.82000%
      +[9/9] 	 Time 0.28s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82667%

      But remember some AD backends like ReverseDiff is not GPU compatible. For a model this size, you will notice that training time is significantly lower for training on CPU than on GPU.

      julia
      train(NeuralODE; sensealg=InterpolatingAdjoint(; autojacvec=ReverseDiffVJP()), cpu=true)
      [1/9] 	 Time 1.04s 	 Training Accuracy: 0.50963% 	 Test Accuracy: 0.43333%
      +[2/9] 	 Time 0.26s 	 Training Accuracy: 0.69630% 	 Test Accuracy: 0.66000%
      +[3/9] 	 Time 0.24s 	 Training Accuracy: 0.77926% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.24s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76667%
      +[5/9] 	 Time 0.25s 	 Training Accuracy: 0.82519% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.25s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.25s 	 Training Accuracy: 0.85333% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 0.25s 	 Training Accuracy: 0.86593% 	 Test Accuracy: 0.81333%
      +[9/9] 	 Time 0.25s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82000%

      For completeness, let's also test out discrete sensitivities!

      julia
      train(NeuralODE; sensealg=ReverseDiffAdjoint(), cpu=true)
      [1/9] 	 Time 7.18s 	 Training Accuracy: 0.50963% 	 Test Accuracy: 0.43333%
      +[2/9] 	 Time 6.91s 	 Training Accuracy: 0.69630% 	 Test Accuracy: 0.66000%
      +[3/9] 	 Time 6.87s 	 Training Accuracy: 0.77926% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 7.30s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76667%
      +[5/9] 	 Time 8.68s 	 Training Accuracy: 0.82519% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 9.59s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 9.60s 	 Training Accuracy: 0.85333% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 9.82s 	 Training Accuracy: 0.86593% 	 Test Accuracy: 0.81333%
      +[9/9] 	 Time 9.71s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82000%

      Alternate Implementation using Stateful Layer

      Starting v0.5.5, Lux provides a Lux.Experimental.StatefulLuxLayer which can be used to avoid the Boxing of st.

      julia
      struct StatefulNeuralODE{M <: Lux.AbstractExplicitLayer, So, T, K} <:
      +       Lux.AbstractExplicitContainerLayer{(:model,)}
      +    model::M
      +    solver::So
      +    tspan::T
      +    kwargs::K
      +end
      +
      +function StatefulNeuralODE(
      +        model::Lux.AbstractExplicitLayer; solver=Tsit5(), tspan=(0.0f0, 1.0f0), kwargs...)
      +    return StatefulNeuralODE(model, solver, tspan, kwargs)
      +end
      +
      +function (n::StatefulNeuralODE)(x, ps, st)
      +    st_model = Lux.StatefulLuxLayer(n.model, ps, st)
      +    dudt(u, p, t) = st_model(u, p)
      +    prob = ODEProblem{false}(ODEFunction{false}(dudt), x, n.tspan, ps)
      +    return solve(prob, n.solver; n.kwargs...), st_model.st
      +end

      Train the new Stateful Neural ODE

      julia
      train(StatefulNeuralODE)
      [1/9] 	 Time 1.33s 	 Training Accuracy: 0.49852% 	 Test Accuracy: 0.40667%
      +[2/9] 	 Time 0.32s 	 Training Accuracy: 0.70296% 	 Test Accuracy: 0.66667%
      +[3/9] 	 Time 0.35s 	 Training Accuracy: 0.78074% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.54s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76000%
      +[5/9] 	 Time 0.31s 	 Training Accuracy: 0.82000% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.32s 	 Training Accuracy: 0.84444% 	 Test Accuracy: 0.79333%
      +[7/9] 	 Time 0.37s 	 Training Accuracy: 0.85704% 	 Test Accuracy: 0.82000%
      +[8/9] 	 Time 0.38s 	 Training Accuracy: 0.87037% 	 Test Accuracy: 0.80667%
      +[9/9] 	 Time 0.39s 	 Training Accuracy: 0.88000% 	 Test Accuracy: 0.82667%

      We might not see a significant difference in the training time, but let us investigate the type stabilities of the layers.

      Type Stability

      julia
      model, ps, st = create_model(NeuralODE)
      +
      +model_stateful, ps_stateful, st_stateful = create_model(StatefulNeuralODE)
      +
      +x = gpu_device()(ones(Float32, 28, 28, 1, 3));

      NeuralODE is not type stable due to the boxing of st

      julia
      @code_warntype model(x, ps, st)
      MethodInstance for (::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing})(::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}, ::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}, ::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}})
      +  from (c::Lux.Chain)(x, ps, st::NamedTuple) @ Lux /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/layers/containers.jl:477
      +Arguments
      +  c::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}
      +  x::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}
      +  ps::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}
      +  st::Core.Const((layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple()), layer_4 = NamedTuple(), layer_5 = NamedTuple()))
      +Body::TUPLE{CUDA.CUARRAY{FLOAT32, 2, CUDA.MEM.DEVICEBUFFER}, NAMEDTUPLE{(:LAYER_1, :LAYER_2, :LAYER_3, :LAYER_4, :LAYER_5), <:TUPLE{@NAMEDTUPLE{}, @NAMEDTUPLE{}, ANY, @NAMEDTUPLE{}, @NAMEDTUPLE{}}}}
      +1 ─ %1 = Base.getproperty(c, :layers)::@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}
      +│   %2 = Lux.applychain(%1, x, ps, st)::TUPLE{CUDA.CUARRAY{FLOAT32, 2, CUDA.MEM.DEVICEBUFFER}, NAMEDTUPLE{(:LAYER_1, :LAYER_2, :LAYER_3, :LAYER_4, :LAYER_5), <:TUPLE{@NAMEDTUPLE{}, @NAMEDTUPLE{}, ANY, @NAMEDTUPLE{}, @NAMEDTUPLE{}}}}
      +└──      return %2

      We avoid the problem entirely by using StatefulNeuralODE

      julia
      @code_warntype model_stateful(x, ps_stateful, st_stateful)
      MethodInstance for (::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing})(::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}, ::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}, ::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}})
      +  from (c::Lux.Chain)(x, ps, st::NamedTuple) @ Lux /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/layers/containers.jl:477
      +Arguments
      +  c::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}
      +  x::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}
      +  ps::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}
      +  st::Core.Const((layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple()), layer_4 = NamedTuple(), layer_5 = NamedTuple()))
      +Body::Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}}}
      +1 ─ %1 = Base.getproperty(c, :layers)::@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}
      +│   %2 = Lux.applychain(%1, x, ps, st)::Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}}}
      +└──      return %2

      Note, that we still recommend using this layer internally and not exposing this as the default API to the users.

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 3.443 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,53),l=[e];function p(h,k,r,d,E,y){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.lean.js b/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.lean.js new file mode 100644 index 000000000..c54537abe --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_1_NeuralODE.md.BYoRK3MI.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"MNIST Classification using Neural ODEs","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/1_NeuralODE.md","filePath":"tutorials/intermediate/1_NeuralODE.md","lastUpdated":null}'),t={name:"tutorials/intermediate/1_NeuralODE.md"},e=n("",53),l=[e];function p(h,k,r,d,E,y){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.js b/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.js new file mode 100644 index 000000000..74ebfbde8 --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.js @@ -0,0 +1,197 @@ +import{_ as n,c as i,m as A,a4 as s,o as a}from"./chunks/framework.BfjuC5t1.js";const t="/v0.5.30/assets/results.Dao8ZugC.gif",f=JSON.parse('{"title":"Bayesian Neural Network","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/2_BayesianNN.md","filePath":"tutorials/intermediate/2_BayesianNN.md","lastUpdated":null}'),e={name:"tutorials/intermediate/2_BayesianNN.md"},E=s(`

      Bayesian Neural Network

      We borrow this tutorial from the official Turing Docs. We will show how the explicit parameterization of Lux enables first-class composability with packages which expect flattened out parameter vectors.

      We will use Turing.jl with Lux.jl to implement implementing a classification algorithm. Lets start by importing the relevant libraries.

      julia
      # Import libraries
      +using Lux, Turing, CairoMakie, Random, Tracker, Functors, LinearAlgebra
      +
      +# Sampling progress
      +Turing.setprogress!(true);
      [ Info: [Turing]: progress logging is enabled globally
      +[ Info: [AdvancedVI]: global PROGRESS is set as true

      Generating data

      Our goal here is to use a Bayesian neural network to classify points in an artificial dataset. The code below generates data points arranged in a box-like pattern and displays a graph of the dataset we'll be working with.

      julia
      # Number of points to generate
      +N = 80
      +M = round(Int, N / 4)
      +rng = Random.default_rng()
      +Random.seed!(rng, 1234)
      +
      +# Generate artificial data
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +xt1s = Array([[x1s[i] + 0.5f0; x2s[i] + 0.5f0] for i in 1:M])
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +append!(xt1s, Array([[x1s[i] - 5.0f0; x2s[i] - 5.0f0] for i in 1:M]))
      +
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +xt0s = Array([[x1s[i] + 0.5f0; x2s[i] - 5.0f0] for i in 1:M])
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +append!(xt0s, Array([[x1s[i] - 5.0f0; x2s[i] + 0.5f0] for i in 1:M]))
      +
      +# Store all the data for later
      +xs = [xt1s; xt0s]
      +ts = [ones(2 * M); zeros(2 * M)]
      +
      +# Plot data points
      +
      +function plot_data()
      +    x1 = first.(xt1s)
      +    y1 = last.(xt1s)
      +    x2 = first.(xt0s)
      +    y2 = last.(xt0s)
      +
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    scatter!(ax, x1, y1; markersize=16, color=:red, strokecolor=:black, strokewidth=2)
      +    scatter!(ax, x2, y2; markersize=16, color=:blue, strokecolor=:black, strokewidth=2)
      +
      +    return fig
      +end
      +
      +plot_data()

      Building the Neural Network

      The next step is to define a feedforward neural network where we express our parameters as distributions, and not single points as with traditional neural networks. For this we will use Dense to define liner layers and compose them via Chain, both are neural network primitives from Lux. The network nn we will create will have two hidden layers with tanh activations and one output layer with sigmoid activation, as shown below.

      The nn is an instance that acts as a function and can take data, parameters and current state as inputs and output predictions. We will define distributions on the neural network parameters.

      julia
      # Construct a neural network using Lux
      +nn = Chain(Dense(2 => 3, tanh), Dense(3 => 2, tanh), Dense(2 => 1, sigmoid))
      +
      +# Initialize the model weights and state
      +ps, st = Lux.setup(rng, nn)
      +
      +Lux.parameterlength(nn) # number of paraemters in NN
      20

      The probabilistic model specification below creates a parameters variable, which has IID normal variables. The parameters represents all parameters of our neural net (weights and biases).

      julia
      # Create a regularization term and a Gaussian prior variance term.
      +alpha = 0.09
      +sig = sqrt(1.0 / alpha)
      3.3333333333333335

      Construct named tuple from a sampled parameter vector. We could also use ComponentArrays here and simply broadcast to avoid doing this. But let's do it this way to avoid dependencies.

      julia
      function vector_to_parameters(ps_new::AbstractVector, ps::NamedTuple)
      +    @assert length(ps_new) == Lux.parameterlength(ps)
      +    i = 1
      +    function get_ps(x)
      +        z = reshape(view(ps_new, i:(i + length(x) - 1)), size(x))
      +        i += length(x)
      +        return z
      +    end
      +    return fmap(get_ps, ps)
      +end
      vector_to_parameters (generic function with 1 method)

      To interface with external libraries it is often desirable to use the StatefulLuxLayer to automatically handle the neural network states.

      julia
      const model = StatefulLuxLayer(nn, st)
      +
      +# Specify the probabilistic model.
      +@model function bayes_nn(xs, ts)
      +    # Sample the parameters
      +    nparameters = Lux.parameterlength(nn)
      +    parameters ~ MvNormal(zeros(nparameters), Diagonal(abs2.(sig .* ones(nparameters))))
      +
      +    # Forward NN to make predictions
      +    preds = Lux.apply(model, xs, vector_to_parameters(parameters, ps))
      +
      +    # Observe each prediction.
      +    for i in eachindex(ts)
      +        ts[i] ~ Bernoulli(preds[i])
      +    end
      +end
      bayes_nn (generic function with 2 methods)

      Inference can now be performed by calling sample. We use the HMC sampler here.

      julia
      # Perform inference.
      +N = 5000
      +ch = sample(bayes_nn(reduce(hcat, xs), ts), HMC(0.05, 4; adtype=AutoTracker()), N)
      Chains MCMC chain (5000×30×1 Array{Float64, 3}):
      +
      +Iterations        = 1:1:5000
      +Number of chains  = 1
      +Samples per chain = 5000
      +Wall duration     = 24.99 seconds
      +Compute duration  = 24.99 seconds
      +parameters        = parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14], parameters[15], parameters[16], parameters[17], parameters[18], parameters[19], parameters[20]
      +internals         = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, numerical_error, step_size, nom_step_size
      +
      +Summary Statistics
      +      parameters      mean       std      mcse   ess_bulk   ess_tail      rhat   ess_per_sec
      +          Symbol   Float64   Float64   Float64    Float64    Float64   Float64       Float64
      +
      +   parameters[1]   -0.5133    1.8835    0.5330    13.1888    25.0326    1.4853        0.5277
      +   parameters[2]   -5.3361    2.4104    0.6377    15.5139    36.9602    1.0376        0.6208
      +   parameters[3]    0.3151    0.6835    0.1441    27.6358    50.3442    1.1216        1.1058
      +   parameters[4]    1.9624    3.7648    1.1478    11.5629    25.5317    2.0118        0.4627
      +   parameters[5]   -0.0914    0.6013    0.0858    52.3129    54.6520    1.1223        2.0932
      +   parameters[6]    4.9348    2.3882    0.6909    12.4651    22.5599    1.8704        0.4988
      +   parameters[7]   -1.6494    2.7707    0.8306    11.9136    35.7353    1.9059        0.4767
      +   parameters[8]   -0.3367    1.5561    0.3957    15.3027    35.5527    1.2732        0.6123
      +   parameters[9]   -0.6247    1.7715    0.4439    16.1582    41.0067    1.0886        0.6465
      +  parameters[10]   -0.0485    2.6496    0.7711    12.0002    18.2390    1.6173        0.4802
      +  parameters[11]   -2.7777    2.4100    0.6937    13.2493    54.0054    1.2589        0.5301
      +  parameters[12]    1.7397    2.7286    0.8144    12.5350    30.6674    1.3093        0.5016
      +  parameters[13]   -1.3065    3.0122    0.9212    11.3718    29.5307    1.8415        0.4550
      +  parameters[14]    2.1359    1.7145    0.4376    16.0168    29.9135    1.1185        0.6409
      +  parameters[15]   -2.2917    1.1075    0.2143    27.1032    53.9717    1.0339        1.0845
      +  parameters[16]   -1.8241    1.7783    0.4754    14.8255    44.7465    1.2380        0.5932
      +  parameters[17]   -2.9541    1.0941    0.1964    32.4857    49.3634    1.0550        1.2998
      +  parameters[18]   -2.9283    3.1083    0.9424    13.4337    49.1159    1.4880        0.5375
      +  parameters[19]   -5.8506    1.2702    0.1981    41.3283    64.0949    1.0032        1.6537
      +  parameters[20]   -3.6909    1.8615    0.5266    13.1481    52.3750    1.6064        0.5261
      +
      +Quantiles
      +      parameters      2.5%     25.0%     50.0%     75.0%     97.5%
      +          Symbol   Float64   Float64   Float64   Float64   Float64
      +
      +   parameters[1]   -2.9584   -2.1586   -0.3884    0.5613    4.2684
      +   parameters[2]   -9.8741   -7.2592   -4.9623   -3.2715   -1.7035
      +   parameters[3]   -0.6888   -0.1073    0.1721    0.5713    2.2193
      +   parameters[4]   -5.7669   -1.4891    3.0249    5.1736    7.8110
      +   parameters[5]   -1.2037   -0.4726   -0.1166    0.2270    1.2686
      +   parameters[6]    1.5300    2.9517    4.4678    6.7396   10.5049
      +   parameters[7]   -5.8618   -4.2435   -1.3364    0.6954    3.0399
      +   parameters[8]   -3.2162   -1.3171   -0.3432    0.4455    3.4264
      +   parameters[9]   -4.2319   -1.6828   -0.5051    0.6070    2.9411
      +  parameters[10]   -6.1276   -1.8893    0.2035    1.6808    4.6669
      +  parameters[11]   -6.8391   -4.9499   -2.5672   -0.5826    1.1874
      +  parameters[12]   -3.4081   -0.4600    2.2126    3.9338    5.8529
      +  parameters[13]   -6.1325   -3.7644   -2.1160    1.6571    3.6084
      +  parameters[14]   -1.1205    1.0660    1.9677    3.1250    5.5755
      +  parameters[15]   -4.6287   -3.0619   -2.1911   -1.5340   -0.1136
      +  parameters[16]   -5.3259   -3.0340   -1.9008   -0.9440    1.7702
      +  parameters[17]   -5.6472   -3.5470   -2.8160   -2.2108   -1.0283
      +  parameters[18]   -6.7277   -5.2922   -4.2915    0.7602    2.7335
      +  parameters[19]   -8.5012   -6.5957   -5.8670   -5.0328   -3.3450
      +  parameters[20]   -6.7333   -5.1577   -3.8273   -2.2208   -0.3195

      Now we extract the parameter samples from the sampled chain as θ (this is of size 5000 x 20 where 5000 is the number of iterations and 20 is the number of parameters). We'll use these primarily to determine how good our model's classifier is.

      julia
      # Extract all weight and bias parameters.
      +θ = MCMCChains.group(ch, :parameters).value;

      Prediction Visualization

      julia
      # A helper to run the nn through data \`x\` using parameters \`θ\`
      +nn_forward(x, θ) = model(x, vector_to_parameters(θ, ps))
      +
      +# Plot the data we have.
      +fig = plot_data()
      +
      +# Find the index that provided the highest log posterior in the chain.
      +_, i = findmax(ch[:lp])
      +
      +# Extract the max row value from i.
      +i = i.I[1]
      +
      +# Plot the posterior distribution with a contour plot
      +x1_range = collect(range(-6; stop=6, length=25))
      +x2_range = collect(range(-6; stop=6, length=25))
      +Z = [nn_forward([x1, x2], θ[i, :])[1] for x1 in x1_range, x2 in x2_range]
      +contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +fig

      The contour plot above shows that the MAP method is not too bad at classifying our data. Now we can visualize our predictions.

      `,32),l={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-3.222ex"},xmlns:"http://www.w3.org/2000/svg",width:"46.264ex",height:"6.301ex",role:"img",focusable:"false",viewBox:"0 -1361 20448.8 2785.1","aria-hidden":"true"},p=s('',1),g=[p],r=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")"),A("mo",null,"="),A("msub",null,[A("mo",{"data-mjx-texclass":"OP"},"∫"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ")])]),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"θ"),A("mo",{stretchy:"false"},")"),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mi",null,"θ"),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")"),A("mo",null,"≈"),A("munder",null,[A("mo",{"data-mjx-texclass":"OP"},"∑"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ"),A("mo",null,"∼"),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mi",null,"θ"),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")")])]),A("msub",null,[A("mi",null,"f"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ")])]),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{stretchy:"false"},")")])],-1),k=s(`

      The nn_predict function takes the average predicted value from a network parameterized by weights drawn from the MCMC chain.

      julia
      # Return the average predicted value across multiple weights.
      +nn_predict(x, θ, num) = mean([first(nn_forward(x, view(θ, i, :))) for i in 1:10:num])
      nn_predict (generic function with 1 method)

      Next, we use the nn_predict function to predict the value at a sample of points where the x1 and x2 coordinates range between -6 and 6. As we can see below, we still have a satisfactory fit to our data, and more importantly, we can also see where the neural network is uncertain about its predictions much easier–-those regions between cluster boundaries.

      Plot the average prediction.

      julia
      fig = plot_data()
      +
      +n_end = 1500
      +x1_range = collect(range(-6; stop=6, length=25))
      +x2_range = collect(range(-6; stop=6, length=25))
      +Z = [nn_predict([x1, x2], θ, n_end)[1] for x1 in x1_range, x2 in x2_range]
      +contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +fig

      Suppose we are interested in how the predictive power of our Bayesian neural network evolved between samples. In that case, the following graph displays an animation of the contour plot generated from the network weights in samples 1 to 5,000.

      julia
      fig = plot_data()
      +Z = [first(nn_forward([x1, x2], θ[1, :])) for x1 in x1_range, x2 in x2_range]
      +c = contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +record(fig, "results.gif", 1:250:size(θ, 1)) do i
      +    fig.current_axis[].title = "Iteration: $i"
      +    Z = [first(nn_forward([x1, x2], θ[i, :])) for x1 in x1_range, x2 in x2_range]
      +    c[3] = Z
      +    return fig
      +end
      "results.gif"

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%

      This page was generated using Literate.jl.

      `,16);function d(C,Q,B,I,v,o){return a(),i("div",null,[E,A("mjx-container",l,[(a(),i("svg",h,g)),r]),k])}const y=n(e,[["render",d]]);export{f as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.lean.js b/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.lean.js new file mode 100644 index 000000000..0ea627784 --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_2_BayesianNN.md.Di-SHgr7.lean.js @@ -0,0 +1 @@ +import{_ as n,c as i,m as A,a4 as s,o as a}from"./chunks/framework.BfjuC5t1.js";const t="/v0.5.30/assets/results.Dao8ZugC.gif",f=JSON.parse('{"title":"Bayesian Neural Network","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/2_BayesianNN.md","filePath":"tutorials/intermediate/2_BayesianNN.md","lastUpdated":null}'),e={name:"tutorials/intermediate/2_BayesianNN.md"},E=s("",32),l={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-3.222ex"},xmlns:"http://www.w3.org/2000/svg",width:"46.264ex",height:"6.301ex",role:"img",focusable:"false",viewBox:"0 -1361 20448.8 2785.1","aria-hidden":"true"},p=s("",1),g=[p],r=A("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[A("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")"),A("mo",null,"="),A("msub",null,[A("mo",{"data-mjx-texclass":"OP"},"∫"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ")])]),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"θ"),A("mo",{stretchy:"false"},")"),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mi",null,"θ"),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")"),A("mo",null,"≈"),A("munder",null,[A("mo",{"data-mjx-texclass":"OP"},"∑"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ"),A("mo",null,"∼"),A("mi",null,"p"),A("mo",{stretchy:"false"},"("),A("mi",null,"θ"),A("mo",{"data-mjx-texclass":"ORD",stretchy:"false"},"|"),A("mi",null,"X"),A("mo",null,","),A("mi",null,"α"),A("mo",{stretchy:"false"},")")])]),A("msub",null,[A("mi",null,"f"),A("mrow",{"data-mjx-texclass":"ORD"},[A("mi",null,"θ")])]),A("mo",{stretchy:"false"},"("),A("mrow",{"data-mjx-texclass":"ORD"},[A("mover",null,[A("mi",null,"x"),A("mo",{stretchy:"false"},"~")])]),A("mo",{stretchy:"false"},")")])],-1),k=s("",16);function d(C,Q,B,I,v,o){return a(),i("div",null,[E,A("mjx-container",l,[(a(),i("svg",h,g)),r]),k])}const y=n(e,[["render",d]]);export{f as __pageData,y as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.js b/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.js new file mode 100644 index 000000000..c1486426b --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.js @@ -0,0 +1,206 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"Training a HyperNetwork on MNIST and FashionMNIST","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/3_HyperNet.md","filePath":"tutorials/intermediate/3_HyperNet.md","lastUpdated":null}'),h={name:"tutorials/intermediate/3_HyperNet.md"},t=n(`

      Training a HyperNetwork on MNIST and FashionMNIST

      Package Imports

      julia
      using Lux, ADTypes, ComponentArrays, LuxAMDGPU, LuxCUDA, MLDatasets, MLUtils, OneHotArrays,
      +      Optimisers, Printf, Random, Setfield, Statistics, Zygote
      +
      +CUDA.allowscalar(false)

      Loading Datasets

      julia
      function load_dataset(::Type{dset}, n_train::Int, n_eval::Int, batchsize::Int) where {dset}
      +    imgs, labels = dset(:train)[1:n_train]
      +    x_train, y_train = reshape(imgs, 28, 28, 1, n_train), onehotbatch(labels, 0:9)
      +
      +    imgs, labels = dset(:test)[1:n_eval]
      +    x_test, y_test = reshape(imgs, 28, 28, 1, n_eval), onehotbatch(labels, 0:9)
      +
      +    return (DataLoader((x_train, y_train); batchsize=min(batchsize, n_train), shuffle=true),
      +        DataLoader((x_test, y_test); batchsize=min(batchsize, n_eval), shuffle=false))
      +end
      +
      +function load_datasets(n_train=1024, n_eval=32, batchsize=256)
      +    return load_dataset.((MNIST, FashionMNIST), n_train, n_eval, batchsize)
      +end
      load_datasets (generic function with 4 methods)

      Implement a HyperNet Layer

      julia
      struct HyperNet{W <: Lux.AbstractExplicitLayer, C <: Lux.AbstractExplicitLayer, A} <:
      +       Lux.AbstractExplicitContainerLayer{(:weight_generator, :core_network)}
      +    weight_generator::W
      +    core_network::C
      +    ca_axes::A
      +end
      +
      +function HyperNet(w::Lux.AbstractExplicitLayer, c::Lux.AbstractExplicitLayer)
      +    ca_axes = Lux.initialparameters(Random.default_rng(), c) |> ComponentArray |> getaxes
      +    return HyperNet(w, c, ca_axes)
      +end
      +
      +function Lux.initialparameters(rng::AbstractRNG, h::HyperNet)
      +    return (weight_generator=Lux.initialparameters(rng, h.weight_generator),)
      +end
      +
      +function (hn::HyperNet)(x, ps, st::NamedTuple)
      +    ps_new, st_ = hn.weight_generator(x, ps.weight_generator, st.weight_generator)
      +    @set! st.weight_generator = st_
      +    return ComponentArray(vec(ps_new), hn.ca_axes), st
      +end
      +
      +function (hn::HyperNet)((x, y)::T, ps, st::NamedTuple) where {T <: Tuple}
      +    ps_ca, st = hn(x, ps, st)
      +    pred, st_ = hn.core_network(y, ps_ca, st.core_network)
      +    @set! st.core_network = st_
      +    return pred, st
      +end

      Create and Initialize the HyperNet

      julia
      function create_model()
      +    # Doesn't need to be a MLP can have any Lux Layer
      +    core_network = Chain(FlattenLayer(), Dense(784, 256, relu), Dense(256, 10))
      +    weight_generator = Chain(Embedding(2 => 32), Dense(32, 64, relu),
      +        Dense(64, Lux.parameterlength(core_network)))
      +
      +    model = HyperNet(weight_generator, core_network)
      +    return model
      +end
      create_model (generic function with 1 method)

      Define Utility Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(model, ps, st, (data_idx, x, y))
      +    y_pred, st = model((data_idx, x), ps, st)
      +    return logitcrossentropy(y_pred, y), st, (;)
      +end
      +
      +function accuracy(model, ps, st, dataloader, data_idx, gdev=gpu_device())
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    cpu_dev = cpu_device()
      +    for (x, y) in dataloader
      +        x = x |> gdev
      +        y = y |> gdev
      +        target_class = onecold(cpu_dev(y))
      +        predicted_class = onecold(cpu_dev(model((data_idx, x), ps, st)[1]))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 2 methods)

      Training

      julia
      function train()
      +    model = create_model()
      +    dataloaders = load_datasets()
      +
      +    dev = gpu_device()
      +
      +    rng = Xoshiro(0)
      +
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(3.0f-4); transform_variables=dev)
      +
      +    ### Lets train the model
      +    nepochs = 10
      +    for epoch in 1:nepochs, data_idx in 1:2
      +        train_dataloader, test_dataloader = dataloaders[data_idx]
      +
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            x = x |> dev
      +            y = y |> dev
      +            (gs, _, _, train_state) = Lux.Experimental.compute_gradients(
      +                AutoZygote(), loss, (data_idx, x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +        end
      +        ttime = time() - stime
      +
      +        train_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                train_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +        test_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                test_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +
      +        data_name = data_idx == 1 ? "MNIST" : "FashionMNIST"
      +
      +        @printf "[%3d/%3d] \\t %12s \\t Time %.5fs \\t Training Accuracy: %.2f%% \\t Test Accuracy: %.2f%%\\n" epoch nepochs data_name ttime train_acc test_acc
      +    end
      +
      +    println()
      +
      +    for data_idx in 1:2
      +        train_dataloader, test_dataloader = dataloaders[data_idx]
      +        train_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                train_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +        test_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                test_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +
      +        data_name = data_idx == 1 ? "MNIST" : "FashionMNIST"
      +
      +        @printf "[FINAL] \\t %12s \\t Training Accuracy: %.2f%% \\t Test Accuracy: %.2f%%\\n" data_name train_acc test_acc
      +    end
      +end
      +
      +train()
      [  1/ 10] 	        MNIST 	 Time 62.70427s 	 Training Accuracy: 76.27% 	 Test Accuracy: 78.12%
      +[  1/ 10] 	 FashionMNIST 	 Time 0.17746s 	 Training Accuracy: 54.98% 	 Test Accuracy: 50.00%
      +[  2/ 10] 	        MNIST 	 Time 0.03860s 	 Training Accuracy: 75.49% 	 Test Accuracy: 71.88%
      +[  2/ 10] 	 FashionMNIST 	 Time 0.05287s 	 Training Accuracy: 56.45% 	 Test Accuracy: 65.62%
      +[  3/ 10] 	        MNIST 	 Time 0.03839s 	 Training Accuracy: 81.84% 	 Test Accuracy: 78.12%
      +[  3/ 10] 	 FashionMNIST 	 Time 0.03281s 	 Training Accuracy: 62.21% 	 Test Accuracy: 56.25%
      +[  4/ 10] 	        MNIST 	 Time 0.03007s 	 Training Accuracy: 82.62% 	 Test Accuracy: 81.25%
      +[  4/ 10] 	 FashionMNIST 	 Time 0.03060s 	 Training Accuracy: 66.41% 	 Test Accuracy: 56.25%
      +[  5/ 10] 	        MNIST 	 Time 0.03625s 	 Training Accuracy: 81.54% 	 Test Accuracy: 81.25%
      +[  5/ 10] 	 FashionMNIST 	 Time 0.02937s 	 Training Accuracy: 65.72% 	 Test Accuracy: 71.88%
      +[  6/ 10] 	        MNIST 	 Time 0.03049s 	 Training Accuracy: 90.53% 	 Test Accuracy: 90.62%
      +[  6/ 10] 	 FashionMNIST 	 Time 0.02975s 	 Training Accuracy: 69.14% 	 Test Accuracy: 62.50%
      +[  7/ 10] 	        MNIST 	 Time 0.04204s 	 Training Accuracy: 92.68% 	 Test Accuracy: 90.62%
      +[  7/ 10] 	 FashionMNIST 	 Time 0.02972s 	 Training Accuracy: 75.10% 	 Test Accuracy: 68.75%
      +[  8/ 10] 	        MNIST 	 Time 0.03066s 	 Training Accuracy: 93.85% 	 Test Accuracy: 90.62%
      +[  8/ 10] 	 FashionMNIST 	 Time 0.03352s 	 Training Accuracy: 74.02% 	 Test Accuracy: 71.88%
      +[  9/ 10] 	        MNIST 	 Time 0.02887s 	 Training Accuracy: 94.53% 	 Test Accuracy: 93.75%
      +[  9/ 10] 	 FashionMNIST 	 Time 0.03016s 	 Training Accuracy: 76.76% 	 Test Accuracy: 71.88%
      +[ 10/ 10] 	        MNIST 	 Time 0.02880s 	 Training Accuracy: 94.73% 	 Test Accuracy: 87.50%
      +[ 10/ 10] 	 FashionMNIST 	 Time 0.02935s 	 Training Accuracy: 80.08% 	 Test Accuracy: 65.62%
      +
      +[FINAL] 	        MNIST 	 Training Accuracy: 91.70% 	 Test Accuracy: 78.12%
      +[FINAL] 	 FashionMNIST 	 Training Accuracy: 80.08% 	 Test Accuracy: 65.62%

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 3.443 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      `,22),p=[t];function l(k,e,r,E,d,g){return a(),i("div",null,p)}const F=s(h,[["render",l]]);export{c as __pageData,F as default}; diff --git a/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.lean.js b/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.lean.js new file mode 100644 index 000000000..15df1741a --- /dev/null +++ b/v0.5.30/assets/tutorials_intermediate_3_HyperNet.md.DFqj-uR3.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const c=JSON.parse('{"title":"Training a HyperNetwork on MNIST and FashionMNIST","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/intermediate/3_HyperNet.md","filePath":"tutorials/intermediate/3_HyperNet.md","lastUpdated":null}'),h={name:"tutorials/intermediate/3_HyperNet.md"},t=n("",22),p=[t];function l(k,e,r,E,d,g){return a(),i("div",null,p)}const F=s(h,[["render",l]]);export{c as __pageData,F as default}; diff --git a/v0.5.30/ecosystem.html b/v0.5.30/ecosystem.html new file mode 100644 index 000000000..bf8dc4870 --- /dev/null +++ b/v0.5.30/ecosystem.html @@ -0,0 +1,24 @@ + + + + + + Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Ecosystem

      Frameworks Extending Lux.jl

      DiffEqFlux.jl

      DiffEqFlux.jl

      Universal neural differential equations with O(1) backprop, GPUs, and stiff+non-stiff DE solvers, demonstrating scientific machine learning (SciML) and physics-informed machine learning methods

      SciMLSensitivity.jl

      SciMLSensitivity.jl

      A component of the DiffEq ecosystem for enabling sensitivity analysis for scientific machine learning (SciML). Optimize-then-discretize, discretize-then-optimize, adjoint methods, and more for ODEs, SDEs, DDEs, DAEs, etc.

      NeuralPDE.jl

      NeuralPDE.jl

      Physics-Informed Neural Networks (PINN) and Deep BSDE Solvers of Differential Equations for Scientific Machine Learning (SciML) accelerated simulation

      NeuralLyapunov.jl

      NeuralLyapunov.jl

      A library for searching for neural Lyapunov functions in Julia

      DeepEquilibriumNetworks.jl

      DeepEquilibriumNetworks.jl

      Implicit Layer Machine Learning via Deep Equilibrium Networks, O(1) backpropagation with accelerated convergence

      AbstractCosmologicalEmulators.jl

      AbstractCosmologicalEmulators.jl

      Repository containing the abstract interface to the emulators used in the CosmologicalEmulators organization

      ContinuousNormalizingFlows.jl

      ContinuousNormalizingFlows.jl

      Implementations of Infinitesimal Continuous Normalizing Flows Algorithms in Julia

      Sophon.jl

      Sophon.jl

      Efficient, Accurate, and Streamlined Training of Physics-Informed Neural Networks

      DataDrivenDiffEq.jl

      DataDrivenDiffEq.jl

      Data driven modeling and automated discovery of dynamical systems for the SciML Scientific Machine Learning organization

      NeuralGraphPDE.jl

      NeuralGraphPDE.jl

      Integrating Neural Ordinary Differential Equations, the Method of Lines, and Graph Neural Networks

      Solaris.jl

      Solaris.jl

      Lightweight module for fusing physical and neural models

      Boltz.jl

      Boltz.jl

      Accelerate your ML research using pre-built Deep Learning Models with Lux

      GeometricMachineLearning.jl

      GeometricMachineLearning.jl

      Structure Preserving Machine Learning Models in Julia

      Automatic Differentiation

      Zygote.jl

      Zygote.jl

      Lux.jl default choice for AD

      Tracker.jl

      Tracker.jl

      Well tested and robust AD library (might fail on edge cases)

      ForwardDiff.jl

      ForwardDiff.jl

      For forward mode AD support

      ReverseDiff.jl

      ReverseDiff.jl

      Tape based reverse mode AD (might fail on edge cases and doesn't work on GPU)

      Enzyme.jl

      Enzyme.jl

      Experimental Support but will become the Future Default

      Data Manipulation, Data Loading & Datasets

      Augmentor.jl

      Augmentor.jl

      Data augmentation for machine learning

      MLUtils.jl

      MLUtils.jl

      Utilities and abstractions for Machine Learning tasks

      MLDatasets.jl

      MLDatasets.jl

      Utility package for accessing common Machine Learning datasets in Julia

      Images.jl

      Images.jl

      An image library for Julia

      DataAugmentation.jl

      DataAugmentation.jl

      Flexible data augmentation library for machine and deep learning

      Neural Network Primitives

      NNlib.jl

      NNlib.jl

      Neural Network primitives with multiple backends

      LuxLib.jl

      LuxLib.jl

      Backend for Lux.jl

      Optimization

      Optimization.jl

      Optimization.jl

      Unified API for Optimization in Julia

      Optimisers.jl

      Optimisers.jl

      Optimisers.jl defines many standard optimisers and utilities for learning loops

      ParameterSchedulers.jl

      ParameterSchedulers.jl

      Common hyperparameter scheduling for ML

      Parameter Manipulation

      Functors.jl

      Functors.jl

      Parameterise all the things

      ComponentArrays.jl

      ComponentArrays.jl

      Arrays with arbitrarily nested named components

      Serialization

      Serialization.jl

      Serialization.jl

      Provides serialization of Julia objects

      JLD2.jl

      JLD2.jl

      HDF5-compatible file format in pure Julia

      Testing Utilities

      FiniteDiff.jl

      FiniteDiff.jl

      Fast non-allocating calculations of gradients, Jacobians, and Hessians with sparsity support

      FiniteDifferences.jl

      FiniteDifferences.jl

      High accuracy derivatives, estimated via numerical finite differences (formerly FDM.jl)

      JET.jl

      JET.jl

      JET employs Julia's type inference system to detect potential bugs and type instabilities

      LuxTestUtils.jl

      LuxTestUtils.jl

      Collection of Functions useful for testing various packages in the Lux Ecosystem

      Training Visualization & Logging

      MLFlowClient.jl

      MLFlowClient.jl

      Julia client for MLFlow

      TensorBoardLogger.jl

      TensorBoardLogger.jl

      Easy peasy logging to TensorBoard with Julia

      Wandb.jl

      Wandb.jl

      Unofficial Julia bindings for logging experiments to wandb.ai

      + + + + \ No newline at end of file diff --git a/v0.5.30/favicon-16x16.png b/v0.5.30/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..1365c74d4c56e9456469255d0bd1991cfd2a8a1a GIT binary patch literal 555 zcmV+`0@VG9P)Px$R^Gu;!fF6_V49?UL1Si1SKxEJ>MKe4Z=H$t#__SoFkzH{BJ ziHn~ezP^1o%aAA(;gWnKWI}p}gktS<`{0*}>1uQG)~-j3*N4$73lMIXfJyK>;E7-k zxMt`AZv{g{-|#%JL3{?@2ebm;!L)#7P!I6}a|L_=v0LU@ZekDI2eyH5W*M!Hpk=&_ z=s`*#SVPR%JkApL90RqD+z%YGi0YtFfj?kofd#>|r9I%|f~STG(-VP8NWeOFl^SVX z244lOB2UTu0lhT7hqM8VW2TV5%X~GoLv@BXxeJ!iSU?es8Sj<&VHp31US+KgVa|gV z^L$rQZbY2fybiIkVJ)(un1LI>IxuWp%Oqw?8K9D&o{G`;k%^7F@PE*bYVw{0f^neI t(NvofB%G$yGNgIcBAsSQ>(?|v`~|U5!ymfWSnB`)002ovPDHLkV1o6!{Z9Y@ literal 0 HcmV?d00001 diff --git a/v0.5.30/favicon-32x32.png b/v0.5.30/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a303c49e06e527ad86646a1ff791b84ad9861d86 GIT binary patch literal 1158 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 S9j~)iMTYlX@2^011^x$m@$V=A literal 0 HcmV?d00001 diff --git a/v0.5.30/hashmap.json b/v0.5.30/hashmap.json new file mode 100644 index 000000000..14cbe8435 --- /dev/null +++ b/v0.5.30/hashmap.json @@ -0,0 +1 @@ +{"index.md":"B9NbXpl6","ecosystem.md":"CmsIcYxR","introduction_citation.md":"B4ZpJtEk","tutorials_index.md":"jZj6-Wv9","manual_weight_initializers.md":"_StOXcgy","api_accelerator_support_luxcuda.md":"D46lK8Gh","api_accelerator_support_luxamdgpu.md":"qoeTbLKY","api_lux_switching_frameworks.md":"D8TUetx8","api_lux_utilities.md":"Dh0D4iq-","manual_freezing_model_parameters.md":"B_lUuLCd","api_accelerator_support_luxdeviceutils.md":"BXWwkWYm","introduction_index.md":"BGT8f-rY","introduction_overview.md":"CYVQehqb","manual_dispatch_custom_input.md":"Ln2h9dji","api_building_blocks_weightinitializers.md":"6GPvJ2xM","api_building_blocks_luxlib.md":"B6OT9gA7","tutorials_beginner_3_simplernn.md":"SS1AvA0i","tutorials_beginner_4_simplechains.md":"CoBtejGc","manual_gpu_management.md":"DUY-sneY","api_lux_contrib.md":"DdRrnWLR","api_testing_functionality_luxtestutils.md":"DiE0Lkt7","api_domain_specific_modeling_boltz.md":"KvKJdetm","introduction_resources.md":"jcqOsVfN","manual_migrate_from_flux.md":"CGt97TpW","api_building_blocks_luxcore.md":"CXlTipX8","manual_debugging.md":"Cng6aRvr","manual_interface.md":"ypfbSQ9y","tutorials_intermediate_3_hypernet.md":"DFqj-uR3","tutorials_intermediate_1_neuralode.md":"BYoRK3MI","tutorials_beginner_1_basics.md":"sRzg70M2","tutorials_beginner_2_polynomialfitting.md":"d77bE0Yd","tutorials_intermediate_2_bayesiannn.md":"Di-SHgr7","api_lux_layers.md":"BLLg0WBY","tutorials_advanced_1_gravitationalwaveform.md":"CwWPFlQf"} diff --git a/v0.5.30/index.html b/v0.5.30/index.html new file mode 100644 index 000000000..fc55429fa --- /dev/null +++ b/v0.5.30/index.html @@ -0,0 +1,24 @@ + + + + + + Lux.jl Documentation + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v0.5.30/introduction/citation.html b/v0.5.30/introduction/citation.html new file mode 100644 index 000000000..19dda13b9 --- /dev/null +++ b/v0.5.30/introduction/citation.html @@ -0,0 +1,39 @@ + + + + + + Citation | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Citation

      If you found this library to be useful in academic work, then please cite:

      bibtex
      @software{pal2023lux,
      +  author    = {Pal, Avik},
      +  title     = {{Lux: Explicit Parameterization of Deep Neural Networks in Julia}},
      +  month     = {April},
      +  year      = 2023,
      +  note      = {If you use this software, please cite it as below.},
      +  publisher = {Zenodo},
      +  version   = {v0.5.0},
      +  doi       = {10.5281/zenodo.7808904},
      +  url       = {https://doi.org/10.5281/zenodo.7808904}
      +}
      bibtex
      @thesis{pal2023efficient,
      +  title     = {{On Efficient Training \& Inference of Neural Differential Equations}},
      +  author    = {Pal, Avik},
      +  year      = {2023},
      +  school    = {Massachusetts Institute of Technology}
      +}
      + + + + \ No newline at end of file diff --git a/v0.5.30/introduction/index.html b/v0.5.30/introduction/index.html new file mode 100644 index 000000000..04e50139c --- /dev/null +++ b/v0.5.30/introduction/index.html @@ -0,0 +1,111 @@ + + + + + + Getting Started | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Getting Started

      Installation

      Install Julia v1.10 or above. Lux.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

      julia
      pkg> add Lux

      Alternatively, you can also do

      julia
      import Pkg; Pkg.add("Lux")

      Quickstart

      Pre-Requisites

      You need to install Optimisers and Zygote if not done already. Pkg.add(["Optimisers", "Zygote"])

      julia
      using Lux, Random, Optimisers, Zygote
      +# using LuxCUDA, LuxAMDGPU, Metal # Optional packages for GPU support

      We take randomness very seriously

      julia
      # Seeding
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      Random.TaskLocalRNG()

      Build the model

      julia
      # Construct the layer
      +model = Chain(Dense(128, 256, tanh), Chain(Dense(256, 1, tanh), Dense(1, 10)))
      Chain(
      +    layer_1 = Dense(128 => 256, tanh_fast),  # 33_024 parameters
      +    layer_2 = Dense(256 => 1, tanh_fast),  # 257 parameters
      +    layer_3 = Dense(1 => 10),           # 20 parameters
      +)         # Total: 33_301 parameters,
      +          #        plus 0 states.

      Models don't hold parameters and states so initialize them. From there on, we just use our standard AD and Optimisers API.

      julia
      # Get the device determined by Lux
      +device = gpu_device()
      +
      +# Parameter and State Variables
      +ps, st = Lux.setup(rng, model) .|> device
      +
      +# Dummy Input
      +x = rand(rng, Float32, 128, 2) |> device
      +
      +# Run the model
      +y, st = Lux.apply(model, x, ps, st)
      +
      +# Gradients
      +## Pullback API to capture change in state
      +(l, st_), pb = pullback(p -> Lux.apply(model, x, p, st), ps)
      +gs = pb((one.(l), nothing))[1]
      +
      +# Optimization
      +st_opt = Optimisers.setup(Adam(0.0001f0), ps)
      +st_opt, ps = Optimisers.update(st_opt, ps, gs)
      ((layer_1 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.00313608 0.00806096 … 0.00476192 0.00732118; -0.00447309 -0.0119719 … -0.00822211 -0.0110335; … ; -0.00294453 -0.00749935 … -0.00426221 -0.00678769; 0.000750543 0.00195163 … 0.00120731 0.00178011], Float32[9.83485f-7 6.49782f-6 … 2.26756f-6 5.3599f-6; 2.00083f-6 1.43324f-5 … 6.76022f-6 1.21738f-5; … ; 8.67016f-7 5.62395f-6 … 1.81662f-6 4.60721f-6; 5.63307f-8 3.80882f-7 … 1.45758f-7 3.16876f-7], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.00954525; -0.0146331; … ; -0.00881351; 0.00233261;;], Float32[9.11106f-6; 2.14125f-5; … ; 7.76769f-6; 5.44098f-7;;], (0.81, 0.998001)))), layer_2 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[-0.0104967 0.0714637 … -0.0224641 0.108277], Float32[1.10179f-5 0.000510699 … 5.04628f-5 0.00117238], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.178909;;], Float32[0.0032008;;], (0.81, 0.998001)))), layer_3 = (weight = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[-0.105128; -0.105128; … ; -0.105128; -0.105128;;], Float32[0.00110518; 0.00110518; … ; 0.00110518; 0.00110518;;], (0.81, 0.998001))), bias = Leaf(Adam(0.0001, (0.9, 0.999), 1.0e-8), (Float32[0.2; 0.2; … ; 0.2; 0.2;;], Float32[0.00399995; 0.00399995; … ; 0.00399995; 0.00399995;;], (0.81, 0.998001))))), (layer_1 = (weight = Float32[-0.11044693 0.10963185 … 0.097855344 -0.009167461; -0.0110904 0.07588978 … -0.03180492 0.088967875; … ; 0.01864451 -0.034903362 … -0.016194405 0.019176451; -0.09216565 -0.047490627 … -0.08869007 0.009417342], bias = Float32[-9.999999f-5; 9.999998f-5; … ; 9.999999f-5; -9.9999954f-5;;]), layer_2 = (weight = Float32[0.05391791 -0.103956826 … -0.050862882 0.020512676], bias = Float32[-0.0001;;]), layer_3 = (weight = Float32[-0.6546853; 0.6101978; … ; 0.41120994; 0.5494141;;], bias = Float32[-0.0001; -0.0001; … ; -0.0001; -0.0001;;])))

      Defining Custom Layers

      julia
      using Lux, Random, Optimisers, Zygote
      +# using LuxCUDA, LuxAMDGPU, Metal # Optional packages for GPU support
      +import Lux.Experimental: @compact

      We will define a custom MLP using the @compact macro. The macro takes in a list of parameters, layers and states, and a function defining the forward pass of the neural network.

      julia
      n_in = 1
      +n_out = 1
      +nlayers = 3
      +
      +model = @compact(w1=Dense(n_in, 128),
      +    w2=[Dense(128, 128) for i in 1:nlayers],
      +    w3=Dense(128, n_out),
      +    act=relu) do x
      +    embed = act(w1(x))
      +    for w in w2
      +        embed = act(w(embed))
      +    end
      +    out = w3(embed)
      +    return out
      +end
      @compact(
      +    w1 = Dense(1 => 128),               # 256 parameters
      +    w2 = NamedTuple(
      +        1 = Dense(128 => 128),          # 16_512 parameters
      +        2 = Dense(128 => 128),          # 16_512 parameters
      +        3 = Dense(128 => 128),          # 16_512 parameters
      +    ),
      +    w3 = Dense(128 => 1),               # 129 parameters
      +    act = relu,
      +) do x 
      +    embed = act(w1(x))
      +    for w = w2
      +        embed = act(w(embed))
      +    end
      +    out = w3(embed)
      +    return out
      +end       # Total: 49_921 parameters,
      +          #        plus 1 states.

      We can initialize the model and train it with the same code as before!

      julia
      ps, st = Lux.setup(Xoshiro(0), model)
      +
      +model(randn(n_in, 32), ps, st)  # 1×32 Matrix as output.
      +
      +x_data = collect(-2.0f0:0.1f0:2.0f0)'
      +y_data = 2 .* x_data .- x_data .^ 3
      +st_opt = Optimisers.setup(Adam(), ps)
      +
      +for epoch in 1:1000
      +    global st  # Put this in a function in real use-cases
      +    (loss, st), pb = Zygote.pullback(ps) do p
      +        y, st_ = model(x_data, p, st)
      +        return sum(abs2, y .- y_data), st_
      +    end
      +    gs = only(pb((one(loss), nothing)))
      +    epoch % 100 == 1 && println("Epoch: $(epoch) | Loss: $(loss)")
      +    Optimisers.update!(st_opt, ps, gs)
      +end
      Epoch: 1 | Loss: 84.32512
      +Epoch: 101 | Loss: 0.08861052
      +Epoch: 201 | Loss: 0.007037298
      +Epoch: 301 | Loss: 0.005391656
      +Epoch: 401 | Loss: 0.014058021
      +Epoch: 501 | Loss: 0.0022117028
      +Epoch: 601 | Loss: 0.0015865607
      +Epoch: 701 | Loss: 0.21984956
      +Epoch: 801 | Loss: 0.00019668281
      +Epoch: 901 | Loss: 0.0018975141

      Additional Packages

      LuxDL hosts various packages that provide additional functionality for Lux.jl. All packages mentioned in this documentation are available via the Julia General Registry.

      You can install all those packages via import Pkg; Pkg.add(<package name>).

      GPU Support

      GPU Support for Lux.jl requires loading additional packages:

      + + + + \ No newline at end of file diff --git a/v0.5.30/introduction/overview.html b/v0.5.30/introduction/overview.html new file mode 100644 index 000000000..8c59ae614 --- /dev/null +++ b/v0.5.30/introduction/overview.html @@ -0,0 +1,24 @@ + + + + + + Why we wrote Lux? | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Why we wrote Lux?

      Julia already has quite a few well established Neural Network Frameworks – Flux & KNet. However, certain design elements – Coupled Model and Parameters & Internal Mutations – associated with these frameworks make them less compiler and user friendly. Making changes to address these problems in the respective frameworks would be too disruptive for users. Here comes in Lux: a neural network framework built completely using pure functions to make it both compiler and autodiff friendly.

      Design Principles

      • Layers must be immutable – cannot store any parameter/state but rather store the information to construct them

      • Layers are pure functions

      • Layers return a Tuple containing the result and the updated state

      • Given same inputs the outputs must be same – yes this must hold true even for stochastic functions. Randomness must be controlled using rngs passed in the state.

      • Easily extensible

      • Extensive Testing – All layers and features are tested across all supported AD backends across all supported hardware backends.

      Why use Lux over Flux?

      • Neural Networks for SciML: For SciML Applications (Neural ODEs, Deep Equilibrium Models) solvers typically expect a monolithic parameter vector. Flux enables this via its destructure mechanism, but destructure comes with various edge cases and limitations. Lux forces users to make an explicit distinction between state variables and parameter variables to avoid these issues. Also, it comes battery-included for distributed training.

      • Sensible display of Custom Layers – Ever wanted to see Pytorch like Network printouts or wondered how to extend the pretty printing of Flux's layers? Lux handles all of that by default.

      • Truly immutable models - No unexpected internal mutations since all layers are implemented as pure functions. All layers are also deterministic given the parameters and state: if a layer is supposed to be stochastic (say Dropout), the state must contain a seed which is then updated after the function call.

      • Easy Parameter Manipulation – By separating parameter data and layer structures, Lux makes implementing WeightNorm, SpectralNorm, etc. downright trivial. Without this separation, it is much harder to pass such parameters around without mutations which AD systems don't like.

      • Small Neural Networks on CPU – Lux is developed for training large neural networks. For smaller architectures, we recommend using SimpleChains.jl or even better use it in conjunction with Lux via ToSimpleChainsAdaptor.

      • Reliability – We have learned from the mistakes of the past with Flux and everything in our core framework is extensively tested, along with downstream CI to ensure that everything works as expected.

      Why not use Lux (and Julia for traditional Deep Learning in general) ?

      • Lack of Large Models Support – Classical deep learning is not Lux's primary focus. For these, python frameworks like PyTorch and Jax are better suited.

      • XLA Support – Lux doesn't compile to XLA which means no TPU support unfortunately.

      + + + + \ No newline at end of file diff --git a/v0.5.30/introduction/resources.html b/v0.5.30/introduction/resources.html new file mode 100644 index 000000000..51463d35b --- /dev/null +++ b/v0.5.30/introduction/resources.html @@ -0,0 +1,24 @@ + + + + + + Resources to Get Started | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Resources to Get Started

      • Go through the Quickstart Example.

      • Read the introductory tutorials on Julia and Lux.

      • Go through the examples sorted based on their complexity in the documentation.

      Have More Questions?

      For usage related questions, please use Github Discussions or JuliaLang Discourse (machine learning domain) which allows questions and answers to be indexed. To report bugs use github issues or even better send in a pull request.

      + + + + \ No newline at end of file diff --git a/v0.5.30/lux-logo-dark.svg b/v0.5.30/lux-logo-dark.svg new file mode 100644 index 000000000..ae8cbe3d9 --- /dev/null +++ b/v0.5.30/lux-logo-dark.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.5.30/lux-logo.svg b/v0.5.30/lux-logo.svg new file mode 100644 index 000000000..0ba3c9000 --- /dev/null +++ b/v0.5.30/lux-logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.5.30/manual/debugging.html b/v0.5.30/manual/debugging.html new file mode 100644 index 000000000..8b6f816aa --- /dev/null +++ b/v0.5.30/manual/debugging.html @@ -0,0 +1,144 @@ + + + + + + Debugging Lux Models | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Debugging Lux Models

      Debugging DNNs can be very painful. Especially with the gigantic stacktraces for Lux, it is even harder to pin-point to which particular layer errored out. This page describes some useful tools that ship with Lux, that can help you debug your models.

      TL;DR

      Simply wrap your model with Lux.Experimental.@debug!!

      Don't Forget

      Remember to use the non Debug mode model after you finish debugging. Debug mode models are way slower.

      Let us construct a model which has an obviously incorrect dimension. In this example, you will see how easy it is to pin-point the problematic layer.

      Incorrect Model Specification: Dimension Mismatch Problems

      julia
      using Lux, Random
      +
      +model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 3), Dense(1 => 1)),
      +    BatchNorm(1); disable_optimizations=true)
      +
      +model_debug = Lux.Experimental.@debug_mode model
      Chain(
      +    layer_1 = DebugLayer(
      +        layer = Dense(1 => 16, relu),   # 32 parameters
      +    ),
      +    layer_2 = Chain(
      +        layer_1 = DebugLayer(
      +            layer = Dense(16 => 3),     # 51 parameters
      +        ),
      +        layer_2 = DebugLayer(
      +            layer = Dense(1 => 1),      # 2 parameters
      +        ),
      +    ),
      +    layer_3 = DebugLayer(
      +        layer = BatchNorm(1, affine=true, track_stats=true),  # 2 parameters, plus 3
      +    ),
      +)         # Total: 87 parameters,
      +          #        plus 3 states.

      Note that we can use the parameters and states for model itself in model_debug, no need to make any changes. If you ran the original model this is the kind of error you would see:

      julia
      rng = Xoshiro(0)
      +
      +ps, st = Lux.setup(rng, model)
      +x = randn(rng, Float32, 1, 1)
      +
      +try
      +    model(x, ps, st)
      +catch e
      +    println(e)
      +end
      DimensionMismatch("A has dimensions (1,1) but B has dimensions (3,1)")

      Ofcourse, this error will come with a detailed stacktrace, but it is still not very useful. Now let's try using the debug mode model:

      julia
      try
      +    model_debug(x, ps, st)
      +catch e
      +    println(e)
      +end
      [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
      +[ Info: Running Layer: Dense(16 => 3) at location model.layers.layer_2.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (3, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (3, 1)
      +[ Info: Running Layer: Dense(1 => 1) at location model.layers.layer_2.layers.layer_2!
      +┌ Error: Layer Dense(1 => 1) failed!! This layer is present at location model.layers.layer_2.layers.layer_2
      +└ @ Lux.Experimental /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/contrib/debug.jl:110
      +DimensionMismatch("A has dimensions (1,1) but B has dimensions (3,1)")

      See now we know that model.layers.layer_2.layers.layer_2 is the problematic layer. Let us fix that layer and see what happens:

      julia
      model = Chain(Dense(1 => 16, relu),
      +    Chain(Dense(16 => 3),  // [!code --]
      +    Chain(Dense(16 => 1),  // [!code ++]
      +        Dense(1 => 1)),
      +    BatchNorm(1); disable_optimizations=true)
      julia
      model_fixed = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), Dense(1 => 1)),
      +    BatchNorm(1); disable_optimizations=true)
      +
      +ps, st = Lux.setup(rng, model_fixed)
      +
      +model_fixed(x, ps, st)
      (Float32[0.0;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[-0.01397949], running_var = Float32[NaN], training = Val{true}())))

      Voila!! We have tracked down and fixed the problem.

      Tracking down NaNs

      Have you encountered those pesky little NaNs in your training? They are very hard to track down. We will create an artificially simulate NaNs in our model and see how we can track the offending layer.

      We can set nan_check to :forward, :backward or :both to check for NaNs in the debug model. (or even disable it by setting it to :none)

      julia
      model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), Dense(1 => 1)),
      +    BatchNorm(1); disable_optimizations=true)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +model_debug = Lux.Experimental.@debug_mode model nan_check=:both
      Chain(
      +    layer_1 = DebugLayer(
      +        layer = Dense(1 => 16, relu),   # 32 parameters
      +    ),
      +    layer_2 = Chain(
      +        layer_1 = DebugLayer(
      +            layer = Dense(16 => 1),     # 17 parameters
      +        ),
      +        layer_2 = DebugLayer(
      +            layer = Dense(1 => 1),      # 2 parameters
      +        ),
      +    ),
      +    layer_3 = DebugLayer(
      +        layer = BatchNorm(1, affine=true, track_stats=true),  # 2 parameters, plus 3
      +    ),
      +)         # Total: 53 parameters,
      +          #        plus 3 states.

      Let us set a value in the parameter to NaN:

      julia
      ps.layer_2.layer_2.weight[1, 1] = NaN
      NaN

      Now let us run the model

      julia
      model(x, ps, st)
      (Float32[NaN;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[NaN], running_var = Float32[NaN], training = Val{true}())))

      Ah as expected our output is NaN. But is is not very clear how to track where the first NaN occurred. Let's run the debug model and check:

      julia
      try
      +    model_debug(x, ps, st)
      +catch e
      +    println(e)
      +end
      [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
      +[ Info: Running Layer: Dense(16 => 1) at location model.layers.layer_2.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: Dense(1 => 1) at location model.layers.layer_2.layers.layer_2!
      +DomainError((weight = Float32[NaN;;], bias = Float32[0.0;;]), "NaNs detected in parameters of layer Dense(1 => 1) at location model.layers.layer_2.layers.layer_2")

      And we have figured it out! The first NaN occurred in the parameters of model.layers.layer_2.layers.layer_2! But what if NaN occurs in the reverse pass! Let us define a custom layer and introduce a fake NaN in the backward pass.

      julia
      using ChainRulesCore, Zygote
      +
      +const CRC = ChainRulesCore
      +
      +offending_layer(x) = 2 .* x
      offending_layer (generic function with 1 method)
      julia
      model = Chain(Dense(1 => 16, relu), Chain(Dense(16 => 1), offending_layer),
      +    BatchNorm(1); disable_optimizations=true)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +model(x, ps, st)
      (Float32[0.0;;], (layer_1 = NamedTuple(), layer_2 = (layer_1 = NamedTuple(), layer_2 = NamedTuple()), layer_3 = (running_mean = Float32[-0.092828535], running_var = Float32[NaN], training = Val{true}())))

      Let us define a custom backward pass to introduce some NaNs:

      julia
      function CRC.rrule(::typeof(offending_layer), x)
      +    y = offending_layer(x)
      +    function ∇offending_layer(Δ)
      +        Δ[1] = NaN
      +        return NoTangent(), Δ
      +    end
      +    return y, ∇offending_layer
      +end

      Let us compute the gradient of the layer now:

      julia
      Zygote.gradient(ps -> sum(first(model(x, ps, st))), ps)
      ((layer_1 = (weight = Float32[0.0; NaN; … ; NaN; 0.0;;], bias = Float32[0.0; NaN; … ; NaN; 0.0;;]), layer_2 = (layer_1 = (weight = Float32[NaN NaN … NaN NaN], bias = Float32[NaN;;]), layer_2 = nothing), layer_3 = (scale = Float32[0.0], bias = Fill(1.0f0, 1))),)

      Oh no!! A NaN is present in the gradient of ps. Let us run the debug model and see where the NaN occurred:

      julia
      model_debug = Lux.Experimental.@debug_mode model nan_check=:both
      +
      +try
      +    Zygote.gradient(ps -> sum(first(model_debug(x, ps, st))), ps)
      +catch e
      +    println(e)
      +end
      [ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: Dense(1 => 16, relu) at location model.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (16, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (16, 1)
      +[ Info: Running Layer: Dense(16 => 1) at location model.layers.layer_2.layers.layer_1!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
      +[ Info: Input Type: Matrix{Float32} | Input Structure: (1, 1)
      +[ Info: Running Layer: BatchNorm(1, affine=true, track_stats=true) at location model.layers.layer_3!
      +[ Info: Output Type: Matrix{Float32} | Output Structure: (1, 1)
      +DomainError(Float32[NaN;;], "NaNs detected in pullback output for WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2!")

      And there you go our debug layer prints that the problem is in WrappedFunction(offending_layer) at location model.layers.layer_2.layers.layer_2! Once we fix the pullback of the layer, we will fix the NaNs.

      Conclusion

      In this manual section, we have discussed tracking down errors in Lux models. We have covered tracking incorrect model specifications and NaNs in forward and backward passes. However, remember that this is an Experimental feature, and there might be edge cases that don't work correctly. If you find any such cases, please open an issue on GitHub!

      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/dispatch_custom_input.html b/v0.5.30/manual/dispatch_custom_input.html new file mode 100644 index 000000000..5e86a2b38 --- /dev/null +++ b/v0.5.30/manual/dispatch_custom_input.html @@ -0,0 +1,81 @@ + + + + + + Dispatching on Custom Input Types | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Dispatching on Custom Input Types

      Which function should participate in dispatch?

      • Defining a dispatch on (::Layer)(x::MyInputType, ps, st::NamedTuple) is inconvenient, since it requires the user to define a new method for every layer type.

      • (::AbstractExplicitLayer)(x::MyInputType, ps, st::NamedTuple) doesn't work.

      • Instead, we need to define the dispatch on Lux.apply(::AbstractExplicitLayer, x::MyInputType, ps, st::NamedTuple).

      Concrete Example

      Consider Neural ODEs. In these models, often time we want to every iteration of the neural network to take the current time as input. Here, we won't go through implementing an entire Neural ODE model. Instead we will define a time dependent version of Chain.

      Time-Dependent Chain Implementation

      julia
      using Lux, Random
      +
      +struct TDChain{L <: NamedTuple} <: Lux.AbstractExplicitContainerLayer{(:layers,)}
      +    layers::L
      +end
      +
      +function (l::TDChain)((x, t)::Tuple, ps, st::NamedTuple)
      +    # Concatenate along the 2nd last dimension
      +    sz = ntuple(i -> i == ndims(x) - 1 ? 1 : size(x, i), ndims(x))
      +    t_ = ones(eltype(x), sz) .* t  # Needs to be modified for GPU
      +    for name in keys(l.layers)
      +        x, st_ = Lux.apply(getfield(l.layers, name), cat(x, t_; dims=ndims(x) - 1),
      +                           getfield(ps, name), getfield(st, name))
      +        st = merge(st, NamedTuple{(name,)}((st_,)))
      +    end
      +    return x, st
      +end
      +
      +model = Chain(Dense(3, 4), TDChain((; d1=Dense(5, 4), d2=Dense(5, 4))), Dense(4, 1))
      Chain(
      +    layer_1 = Dense(3 => 4),            # 16 parameters
      +    layer_2 = TDChain(
      +        layers = NamedTuple(
      +            d1 = Dense(5 => 4),         # 24 parameters
      +            d2 = Dense(5 => 4),         # 24 parameters
      +        ),
      +    ),
      +    layer_3 = Dense(4 => 1),            # 5 parameters
      +)         # Total: 69 parameters,
      +          #        plus 0 states.

      Running the TDChain

      julia
      rng = MersenneTwister(0)
      +ps, st = Lux.setup(rng, model)
      +x = randn(rng, Float32, 3, 2)
      +
      +try
      +    model(x, ps, st)
      +catch e
      +    Base.showerror(stdout, e)
      +end
      MethodError: no method matching (::Main.TDChain{@NamedTuple{d1::Dense{true, typeof(identity), typeof(glorot_uniform), typeof(zeros32)}, d2::Dense{true, typeof(identity), typeof(glorot_uniform), typeof(zeros32)}}})(::Matrix{Float32}, ::@NamedTuple{d1::@NamedTuple{weight::Matrix{Float32}, bias::Matrix{Float32}}, d2::@NamedTuple{weight::Matrix{Float32}, bias::Matrix{Float32}}}, ::@NamedTuple{d1::@NamedTuple{}, d2::@NamedTuple{}})
      +
      +Closest candidates are:
      +  (::Main.TDChain)(!Matched::Tuple, ::Any, ::NamedTuple)
      +   @ Main dispatch_custom_input.md:29

      Writing the Correct Dispatch Rules

      • Create a Custom Layer storing the time.
      julia
      struct ArrayAndTime{A <: AbstractArray, T <: Real}
      +    array::A
      +    time::T
      +end
      • Define the dispatch on Lux.apply(::AbstractExplicitLayer, x::ArrayAndTime, ps, st::NamedTuple).
      julia
      function Lux.apply(layer::Lux.AbstractExplicitLayer, x::ArrayAndTime, ps, st::NamedTuple)
      +    y, st = layer(x.array, ps, st)
      +    return ArrayAndTime(y, x.time), st
      +end
      +
      +function Lux.apply(layer::TDChain, x::ArrayAndTime, ps, st::NamedTuple)
      +    y, st = layer((x.array, x.time), ps, st)
      +    return ArrayAndTime(y, x.time), st
      +end
      • Run the model.
      julia
      xt = ArrayAndTime(x, 10.0f0)
      +
      +model(xt, ps, st)[1]
      Main.ArrayAndTime{Matrix{Float32}, Float32}(Float32[4.8016562 5.174927], 10.0f0)

      Using the Same Input for Non-TD Models

      Writing proper dispatch means we can simply replace the TDChain with a Chain (of course with dimension corrections) and the pipeline still works.

      julia
      model = Chain(Dense(3, 4), Chain((; d1=Dense(4, 4), d2=Dense(4, 4))), Dense(4, 1))
      +
      +ps, st = Lux.setup(rng, model)
      +
      +model(xt, ps, st)[1]
      Main.ArrayAndTime{Matrix{Float32}, Float32}(Float32[-0.08124366 -1.1121564], 10.0f0)
      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/freezing_model_parameters.html b/v0.5.30/manual/freezing_model_parameters.html new file mode 100644 index 000000000..accddc7d3 --- /dev/null +++ b/v0.5.30/manual/freezing_model_parameters.html @@ -0,0 +1,82 @@ + + + + + + Freezing Model Parameters | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Freezing Model Parameters

      Warning

      API for freezing parameters should be considered experimental at this point.

      In this manual entry, we will go over how to freeze certain parameters in a model.

      Freezing Layers of a Particular Kind

      To freeze a particular kind of layer, let's say Dense in the following example. We can use Lux.Experimental.@layer_map and freeze layers if they are of type Dense.

      julia
      using Lux, Random
      +
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      +
      +model = Chain(Dense(3, 4), Chain(Dense(4, 4), Dropout(0.5f0), BatchNorm(4)),
      +    Dense(4, 1); disable_optimizations=true)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +x = randn(rng, Float32, 3, 2)
      +
      +model(x, ps, st)
      +
      +function freeze_dense(d::Lux.Dense, ps, st, ::String)
      +    return Lux.freeze(d, ps, st, (:weight, :bias))
      +end
      +freeze_dense(l, ps, st, name) = (l, ps, st)
      +
      +model_frozen, ps_frozen, st_frozen = Lux.Experimental.@layer_map freeze_dense model ps st
      +
      +model_frozen(x, ps_frozen, st_frozen)
      (Float32[-0.53158027 0.53158027], (layer_1 = (frozen_params = (weight = Float32[-0.026350189 -0.5554656 -0.35653266; -0.17461072 0.6705545 0.29924855; -0.8935247 -0.42453378 -0.3020351; -0.7988979 -0.7666331 -0.7104237], bias = Float32[0.0; 0.0; 0.0; 0.0;;]), states = NamedTuple()), layer_2 = (layer_1 = (frozen_params = (weight = Float32[-0.47289538 -0.680748 0.1764085 0.34383082; 0.42747158 -0.13819042 -0.109261915 -0.6143286; -0.35790488 -0.20881107 0.70390546 0.48137343; 0.82561636 0.38187847 0.05779423 -0.35181466], bias = Float32[0.0; 0.0; 0.0; 0.0;;]), states = NamedTuple()), layer_2 = (rng = Random.Xoshiro(0x7c071df294e77583, 0xd36a58e0d4ae463e, 0x84df7ccd14e8a7b8, 0x727006748bb9e892, 0x22a21880af5dc689), training = Val{true}()), layer_3 = (running_mean = Float32[0.0, 0.021013658, -0.057823665, 0.0], running_var = Float32[0.9, 0.9088315, 0.9668715, 0.9], training = Val{true}())), layer_3 = (frozen_params = (weight = Float32[0.3981135 0.45468387 -0.07694905 0.8353388], bias = Float32[0.0;;]), states = NamedTuple())))

      Freezing by Layer Name

      When the function in layer_map is called, the 4th argument is the name of the layer. For example, if you want to freeze the 1st layer inside the inner Chain. The name for this would be <model>.layer_2.layer_1.

      julia
      
      +function freeze_by_name(d, ps, st, name::String)
      +    if name == "model.layer_2.layer_1"
      +        return Lux.Experimental.freeze(d, ps, st, (:weight, :bias))
      +    else
      +        return d, ps, st
      +    end
      +end
      julia
      
      +function freeze_dense(d::Dense, ps, st, ::String)
      +    return Lux.Experimental.freeze(d, ps, st, (:weight, :bias))
      +end
      +freeze_dense(l, ps, st, _) = (l, ps, st)

      Freezing Part of the Parameters

      Instead of freezing all the parameters, we can simply specify (:weight,) to freeze only the weight parameter while training the bias parameter.

      julia
      
      +function freeze_by_name(d, ps, st, name::String)
      +    if name == "model.layer_2.layer_1"
      +        return Lux.freeze(d, ps, st, (:weight,))
      +    else
      +        return d, ps, st
      +    end
      +end
      julia
      
      +function freeze_by_name(d, ps, st, name::String)
      +    if name == "model.layer_2.layer_1"
      +        return Lux.freeze(d, ps, st, (:weight, :bias))
      +    else
      +        return d, ps, st
      +    end
      +end

      Freezing Part of a Chain

      Starting v0.4.22, we can directly index into a Chain. So freezing a part of a Chain, is extremely easy.

      julia
      using Lux, Random
      +
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      +
      +model = Chain(Dense(3, 4), Dense(4, 4), Dropout(0.5f0), BatchNorm(4), Dense(4, 1))
      +
      +model_frozen = Chain(model[1:2], Lux.freeze(model[3:4]), model[5])
      +ps, st = Lux.setup(rng, model_frozen)
      +
      +x = randn(rng, Float32, 3, 2)
      +
      +model_frozen(x, ps, st)
      (Float32[-0.53158027 0.53158027], (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (frozen_params = (layer_3 = NamedTuple(), layer_4 = (scale = Float32[1.0, 1.0, 1.0, 1.0], bias = Float32[0.0, 0.0, 0.0, 0.0])), states = (layer_3 = (rng = Random.Xoshiro(0x7c071df294e77583, 0xd36a58e0d4ae463e, 0x84df7ccd14e8a7b8, 0x727006748bb9e892, 0x22a21880af5dc689), training = Val{true}()), layer_4 = (running_mean = Float32[0.0, 0.021013658, -0.057823665, 0.0], running_var = Float32[0.9, 0.9088315, 0.9668715, 0.9], training = Val{true}()))), layer_4 = NamedTuple()))
      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/gpu_management.html b/v0.5.30/manual/gpu_management.html new file mode 100644 index 000000000..5ebc3be11 --- /dev/null +++ b/v0.5.30/manual/gpu_management.html @@ -0,0 +1,49 @@ + + + + + + GPU Management | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      GPU Management

      Info

      Starting from v0.5, Lux has transitioned to a new GPU management system. The old system using cpu and gpu functions is still in place but will be removed in v0.6. Using the old functions might lead to performance regressions if used inside performance critical code.

      Lux.jl can handle multiple GPU backends. Currently, the following backends are supported:

      julia
      using Lux, LuxCUDA, LuxAMDGPU  # Important to load trigger packages
      +
      +supported_gpu_backends()
      ("CUDA", "AMDGPU", "Metal")

      Metal Support

      Support for Metal GPUs should be considered extremely experimental at this point.

      Automatic Backend Management (Recommended Approach)

      Automatic Backend Management is done by two simple functions: cpu_device and gpu_device.

      • cpu_device: This is a simple function and just returns a LuxCPUDevice object.
      julia
      cdev = cpu_device()
      (::LuxCPUDevice) (generic function with 5 methods)
      julia
      x_cpu = randn(Float32, 3, 2)
      3×2 Matrix{Float32}:
      +  0.433884   0.229779
      + -0.459193  -1.95972
      + -0.541064  -1.40102
      • gpu_device: This function performs automatic GPU device selection and returns an object.
        1. If no GPU is available, it returns a LuxCPUDevice object.

        2. If a LocalPreferences file is present, then the backend specified in the file is used. To set a backend, use Lux.gpu_backend!(<backend_name>). (a) If the trigger package corresponding to the device is not loaded, then a warning is displayed. (b) If no LocalPreferences file is present, then the first working GPU with loaded trigger package is used.

      julia
      gdev = gpu_device()
      +
      +x_gpu = x_cpu |> gdev
      3×2 CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
      +  0.433884   0.229779
      + -0.459193  -1.95972
      + -0.541064  -1.40102
      julia
      (x_gpu |> cdev)  x_cpu
      true

      Manual Backend Management

      Automatic Device Selection can be circumvented by directly using LuxCPUDevice and AbstractLuxGPUDevice objects.

      julia
      cdev = LuxCPUDevice()
      +
      +x_cpu = randn(Float32, 3, 2)
      +
      +if LuxCUDA.functional()
      +    gdev = LuxCUDADevice()
      +    x_gpu = x_cpu |> gdev
      +elseif LuxAMDGPU.functional()
      +    gdev = LuxAMDGPUDevice()
      +    x_gpu = x_cpu |> gdev
      +else
      +    @info "No GPU is available. Using CPU."
      +    x_gpu = x_cpu
      +end
      +
      +(x_gpu |> cdev)  x_cpu
      true
      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/interface.html b/v0.5.30/manual/interface.html new file mode 100644 index 000000000..bfc43d85b --- /dev/null +++ b/v0.5.30/manual/interface.html @@ -0,0 +1,115 @@ + + + + + + Lux Interface | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Lux Interface

      Tip

      If you just want to define compatibility with Lux without actually using any of the other functionality provided by Lux (like layers), it is recommended to depend on LuxCore.jl instead of Lux.jl. LuxCore.jl is a significantly lighter dependency.

      First let's set the expectations straight.

      • Do you have to follow the interface? No.

      • Should you follow it? Probably yes.

      • Why? It provides the ability for frameworks built on top of Lux to be cross compatible. Additionally, any new functionality built into Lux, will just work for your framework.

      Warning

      The interface is optional for frameworks being developed independent of Lux. All functionality in the core library (and officially supported ones) must adhere to the interface

      Layer Interface

      Singular Layer

      If the layer doesn't contain any other Lux layer, then it is a Singular Layer. This means it should optionally subtype Lux.AbstractExplicitLayer but mandatorily define all the necessary functions mentioned in the docstrings. Consider a simplified version of Dense called Linear.

      First, setup the architectural details for this layer. Note, that the architecture doesn't contain any mutable structure like arrays. When in doubt, remember, once constructed a model architecture cannot change.

      Tip

      For people coming from Flux.jl background this might be weird. We recommend checking out the Flux to Lux migration guide first before proceeding.

      julia
      using Lux, Random
      +
      +struct Linear{F1, F2} <: Lux.AbstractExplicitLayer
      +    in_dims::Int
      +    out_dims::Int
      +    init_weight::F1
      +    init_bias::F2
      +end
      +
      +function Linear(in_dims::Int, out_dims::Int; init_weight=Lux.glorot_uniform,
      +    init_bias=Lux.zeros32)
      +    return Linear{typeof(init_weight), typeof(init_bias)}(in_dims, out_dims, init_weight,
      +        init_bias)
      +end
      +
      +l = Linear(2, 4)
      Linear()

      Next, we need to implement functions which return the parameters and states for the layer. In case of Linear, the parameters are weight and bias while the states are empty. States become important when defining layers like BatchNorm, WeightNorm, etc. The recommended data structure for returning parameters is a NamedTuple, though anything satisfying the Parameter Interface is valid.

      julia
      function Lux.initialparameters(rng::AbstractRNG, l::Linear)
      +    return (weight=l.init_weight(rng, l.out_dims, l.in_dims),
      +            bias=l.init_bias(rng, l.out_dims, 1))
      +end
      +
      +Lux.initialstates(::AbstractRNG, ::Linear) = NamedTuple()

      You could also implement Lux.parameterlength and Lux.statelength to prevent wasteful reconstruction of the parameters and states.

      julia
      # This works
      +println("Parameter Length: ", Lux.parameterlength(l), "; State Length: ",
      +    Lux.statelength(l))
      +
      +# But still recommened to define these
      +Lux.parameterlength(l::Linear) = l.out_dims * l.in_dims + l.out_dims
      +
      +Lux.statelength(::Linear) = 0
      Parameter Length: 12; State Length: 0

      Tip

      You might notice that we don't pass in a PRNG for these functions. If your parameter length and/or state length depend on a random number generator, you should think really hard about what you are trying to do and why.

      Now, we need to define how the layer works. For this you make your layer a function with exactly 3 arguments – x the input, ps the parameters, and st the states. This function must return two things – y the output, and st_new the updated state.

      julia
      function (l::Linear)(x::AbstractMatrix, ps, st::NamedTuple)
      +    y = ps.weight * x .+ ps.bias
      +    return y, st
      +end

      Finally, let's run this layer. If you have made this far into the documentation, we don't feel you need a refresher on that.

      julia
      rng = Random.default_rng()
      +Random.seed!(rng, 0)
      +
      +ps, st = Lux.setup(rng, l)
      +
      +println("Parameter Length: ", Lux.parameterlength(l), "; State Length: ",
      +    Lux.statelength(l))
      +
      +x = randn(rng, Float32, 2, 1)
      +
      +Lux.apply(l, x, ps, st) # or `l(x, ps, st)`
      (Float32[-0.15276335; 0.45325348; 1.0207279; 0.78226817;;], NamedTuple())

      Container Layer

      If your layer comprises of other Lux layers, then it is a Container Layer. Note that you could treat it as a Singular Layer, and it is still fine. FWIW, if you cannot subtype your layer with Lux.AbstractExplicitContainerLayer then you should go down the Singular Layer route. But subtyping allows us to bypass some of these common definitions. Let us now define a layer, which is basically a composition of two linear layers.

      julia
      struct ComposedLinear{L1, L2} <: Lux.AbstractExplicitContainerLayer{(:linear_1, :linear_2)}
      +    linear_1::L1
      +    linear_2::L2
      +end
      +
      +function (cl::ComposedLinear)(x::AbstractMatrix, ps, st::NamedTuple)
      +    # To access the parameters and states for `linear_1` we do `ps.linear_1` and
      +    # `st.linear_1`. Similarly for `linear_2`
      +    y, st_l1 = cl.linear_1(x, ps.linear_1, st.linear_1)
      +    y, st_l2 = cl.linear_2(y, ps.linear_2, st.linear_2)
      +    # Finally, we need to return the new state which has the exact structure as `st`
      +    return y, (linear_1 = st_l1, linear_2 = st_l2)
      +end

      Here, you will notice we have passed (:linear_1, :linear_2) to the supertype. It essentially informs the type that, <obj>.linear_1 and <obj>.linear_2 are Lux layers and we need to construct parameters and states for those. Let's construct these and see:

      julia
      model = ComposedLinear(Linear(2, 4), Linear(4, 2))
      +display(model)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +println("Parameters: ", ps)
      +println("States: ", st)
      +
      +println("Parameter Length: ", Lux.parameterlength(model), "; State Length: ",
      +    Lux.statelength(model))
      +
      +x = randn(rng, Float32, 2, 1)
      +
      +Lux.apply(model, x, ps, st) # or `model(x, ps, st)`
      (Float32[1.3410565; 0.78000563;;], (linear_1 = NamedTuple(), linear_2 = NamedTuple()))

      Parameter Interface

      We accept any parameter type as long as we can fetch the parameters using getproperty(obj, :parameter_name). This allows us to simultaneously support NamedTuples and ComponentArrays. Let us go through a concrete example of what it means. Consider Dense which expects two parameters named weight and bias.

      Info

      If you are defining your own parameter type, it is your responsibility to make sure that it works with the AutoDiff System you are using.

      julia
      using Lux, Random
      +
      +d = Dense(2, 3)
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      +
      +ps_default, st = Lux.setup(rng, d)
      +
      +x = randn(rng, Float32, 2, 1)
      +
      +println("Result with `NamedTuple` parameters: ", first(d(x, ps_default, st)))
      Result with `NamedTuple` parameters: Float32[1.135916; 0.7668784; -1.0876652;;]

      Let, us define a custom parameter type with fields myweight and mybias but if we try to access weight we get back myweight, similar for bias.

      Warning

      This is for demonstrative purposes, don't try this at home!

      julia
      struct DenseLayerParameters{W, B}
      +    myweight::W
      +    mybias::B
      +end
      +
      +function Base.getproperty(ps::DenseLayerParameters, x::Symbol)
      +    if x == :weight
      +        return getfield(ps, :myweight)
      +    elseif x == :bias
      +        return getfield(ps, :mybias)
      +    end
      +    return getfield(ps, x)
      +end
      +
      +ps = DenseLayerParameters(ps_default.weight, ps_default.bias)
      +
      +println("Result with `DenseLayerParameters` parameters: ", first(d(x, ps, st)))
      Result with `DenseLayerParameters` parameters: Float32[1.135916; 0.7668784; -1.0876652;;]

      The takeaway from this shouldn't be – lets define weird parameter types. Simply because you can do weird things like this doesn't mean you should, since it only leads to bugs.

      Instead this shows the flexibility you have for how your parameters can be structured.

      State Interface

      States are always type constrained to be NamedTuple. The structure of the input state must match that of the output state, i.e. keys(st_in) == keys(st_out). This doesn't imply that types of the input and output state match. To generate efficient code, we often do dispatch on the state, for example, Dropout, BatchNorm, etc.

      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/migrate_from_flux.html b/v0.5.30/manual/migrate_from_flux.html new file mode 100644 index 000000000..dd9d817b4 --- /dev/null +++ b/v0.5.30/manual/migrate_from_flux.html @@ -0,0 +1,98 @@ + + + + + + Migrating from Flux to Lux | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Migrating from Flux to Lux

      For the core library layers like Dense, Conv, etc. we have intentionally kept the API very similar to Flux. In most cases, replacing using Flux with using Lux should be enough to get you started. We cover the additional changes that you will have to make in the following example.

      julia
      using Lux, Random, NNlib, Zygote
      +
      +model = Chain(Dense(2 => 4), BatchNorm(4, relu), Dense(4 => 2))
      +rng = Random.default_rng()
      +x = randn(rng, Float32, 2, 4)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +model(x, ps, st)
      +
      +gradient(ps -> sum(first(model(x, ps, st))), ps)
      julia
      using Flux, Random, NNlib, Zygote
      +
      +model = Chain(Dense(2 => 4), BatchNorm(4, relu), Dense(4 => 2))
      +rng = Random.default_rng()
      +x = randn(rng, Float32, 2, 4)
      +
      +
      +
      +model(x)
      +
      +gradient(model -> sum(model(x)), model)

      Implementing Custom Layers

      Flux and Lux operate under extremely different design philosophies regarding how layers should be implemented. A summary of the differences would be:

      • Flux stores everything in a single struct and relies on Functors.@functor and Flux.trainable to distinguish between trainable and non-trainable parameters.

      • Lux relies on the user to define Lux.initialparameters and Lux.initialstates to distinguish between trainable parameters (called "parameters") and non-trainable parameters (called "states"). Additionally, Lux layers define the model architecture, hence device transfer utilities like gpu_device, cpu_device, etc. cannot be applied on Lux layers, instead they need to be applied on the parameters and states.

      Let's work through a concrete example to demonstrate this. We will implement a very simple layer that computes A×B×x where A is not trainable and B is trainable.

      julia
      using Lux, Random, NNlib, Zygote
      +
      +struct LuxLinear <: Lux.AbstractExplicitLayer
      +    init_A
      +    init_B
      +end
      +
      +function LuxLinear(A::AbstractArray, B::AbstractArray)
      +    # Storing Arrays or any mutable structure inside a Lux Layer is not recommended
      +    # instead we will convert this to a function to perform lazy initialization
      +    return LuxLinear(() -> copy(A), () -> copy(B))
      +end
      +
      +# `B` is a parameter
      +Lux.initialparameters(::AbstractRNG, layer::LuxLinear) = (B=layer.init_B(),)
      +
      +# `A` is a state
      +Lux.initialstates(::AbstractRNG, layer::LuxLinear) = (A=layer.init_A(),)
      +
      +(l::LuxLinear)(x, ps, st) = st.A * ps.B * x, st
      julia
      using Flux, Random, NNlib, Zygote, Optimisers
      +
      +struct FluxLinear
      +    A
      +    B
      +end
      +
      +
      +
      +
      +
      +
      +
      +# `A` is not trainable
      +Optimisers.trainable(f::FluxLinear) = (B=f.B,)
      +
      +# Needed so that both `A` and `B` can be transfered between devices
      +Flux.@functor FluxLinear
      +
      +(l::FluxLinear)(x) = l.A * l.B * x

      Now let us run the model.

      julia
      rng = Random.default_rng()
      +model = LuxLinear(randn(rng, 2, 4), randn(rng, 4, 2))
      +x = randn(rng, 2, 1)
      +
      +ps, st = Lux.setup(rng, model)
      +
      +model(x, ps, st)
      +
      +gradient(ps -> sum(first(model(x, ps, st))), ps)
      julia
      rng = Random.default_rng()
      +model = FluxLinear(randn(rng, 2, 4), randn(rng, 4, 2))
      +x = randn(rng, 2, 1)
      +
      +
      +
      +model(x)
      +
      +gradient(model -> sum(model(x)), model)

      To reiterate some important points:

      • Don't store mutables like Arrays inside a Lux Layer.

      • Parameters and States should be constructured inside the respective initial* functions.

      Certain Important Implementation Details

      Training/Inference Mode

      Flux supports a mode called :auto which automatically decides if the user is training the model or running inference. This is the default mode for Flux.BatchNorm, Flux.GroupNorm, Flux.Dropout, etc. Lux doesn't support this mode (specifically to keep code simple and do exactly what the user wants), hence our default mode is training. This can be changed using Lux.testmode.

      Can we still use Flux Layers?

      If you have Flux loaded in your code, you can use the function FromFluxAdaptor to automatically convert your model to Lux. Note that in case a native Lux counterpart isn't available, we fallback to using Optimisers.destructure.

      + + + + \ No newline at end of file diff --git a/v0.5.30/manual/weight_initializers.html b/v0.5.30/manual/weight_initializers.html new file mode 100644 index 000000000..527b09488 --- /dev/null +++ b/v0.5.30/manual/weight_initializers.html @@ -0,0 +1,53 @@ + + + + + + Initializing Weights | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Initializing Weights

      WeightInitializers.jl provides common weight initialization schemes for deep learning models.

      julia
      using WeightInitializers, Random
      +
      +# Fixing rng
      +rng = Random.MersenneTwister(42)
      Random.MersenneTwister(42)
      julia
      # Explicit rng call
      +weights = kaiming_normal(rng, 2, 5)
      2×5 Matrix{Float32}:
      + -0.351662   0.0171745   1.12442   -0.296372   -1.67094
      + -0.281053  -0.18941    -0.724099   0.0987538   0.634549
      julia
      # Default rng call
      +weights = kaiming_normal(2, 5)
      2×5 Matrix{Float32}:
      + -0.227513  -0.265372   0.265788  1.29955  -0.192836
      +  0.687611   0.454679  -0.433656  0.20548   0.292002
      julia
      # Passing kwargs (if needed) with explicit rng call
      +weights_cl = kaiming_normal(rng; gain=1.0)
      +weights = weights_cl(2, 5)
      2×5 Matrix{Float32}:
      + 0.484056   0.231723   0.164379   0.306147   0.18365
      + 0.0836414  0.666965  -0.396323  -0.711329  -0.382971
      julia
      # Passing kwargs (if needed) with default rng call
      +weights_cl = kaiming_normal(; gain=1.0)
      +weights = weights_cl(2, 5)
      2×5 Matrix{Float32}:
      + -0.160876  -0.187646   0.18794   0.918918  -0.136356
      +  0.486214   0.321506  -0.306641  0.145296   0.206476

      To generate weights directly on GPU, pass in a CUDA.RNG. (Note that this is currently implemented only for NVIDIA GPUs)

      julia
      using LuxCUDA
      +
      +weights = kaiming_normal(CUDA.default_rng(), 2, 5)
      2×5 CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
      + -0.152879  0.151805  0.115322  0.0608437  -0.357408
      + -0.671014  0.283396  0.260171  0.425698   -0.701588

      You can also generate Complex Numbers:

      julia
      weights = kaiming_normal(CUDA.default_rng(), ComplexF32, 2, 5)
      2×5 CuArray{ComplexF32, 2, CUDA.Mem.DeviceBuffer}:
      + -0.239414-0.306575im  0.0877513-0.485896im  …  -0.328706-0.340686im
      + 0.0245199-0.04416im    0.252702-0.161867im       0.41303-0.533871im

      Quick examples

      The package is meant to be working with deep learning libraries such as (F)Lux. All the methods take as input the chosen rng type and the dimension for the array.

      julia
      weights = init(rng, dims...)

      The rng is optional, if not specified a default one will be used.

      julia
      weights = init(dims...)

      If there is the need to use keyword arguments the methods can be called with just the rng (optionally) and the keywords to get in return a function behaving like the two examples above.

      julia
      weights_init = init(rng; kwargs...)
      +weights = weights_init(rng, dims...)
      +
      +# Or
      +
      +weights_init = init(; kwargs...)
      +weights = weights_init(dims...)
      + + + + \ No newline at end of file diff --git a/v0.5.30/siteinfo.js b/v0.5.30/siteinfo.js new file mode 100644 index 000000000..5f84163a4 --- /dev/null +++ b/v0.5.30/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.5.30"; diff --git a/v0.5.30/tutorials/advanced/1_GravitationalWaveForm.html b/v0.5.30/tutorials/advanced/1_GravitationalWaveForm.html new file mode 100644 index 000000000..382708877 --- /dev/null +++ b/v0.5.30/tutorials/advanced/1_GravitationalWaveForm.html @@ -0,0 +1,326 @@ + + + + + + Training a Neural ODE to Model Gravitational Waveforms | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Training a Neural ODE to Model Gravitational Waveforms

      This code is adapted from Astroinformatics/ScientificMachineLearning

      The code has been minimally adapted from Keith et. al. 2021 which originally used Flux.jl

      Package Imports

      julia
      using Lux, ComponentArrays, LineSearches, LuxAMDGPU, LuxCUDA, OrdinaryDiffEq, Optimization,
      +      OptimizationOptimJL, Printf, Random, SciMLSensitivity
      +using CairoMakie
      +
      +CUDA.allowscalar(false)

      Define some Utility Functions

      Tip

      This section can be skipped. It defines functions to simulate the model, however, from a scientific machine learning perspective, isn't super relevant.

      We need a very crude 2-body path. Assume the 1-body motion is a newtonian 2-body position vector r=r1r2 and use Newtonian formulas to get r1, r2 (e.g. Theoretical Mechanics of Particles and Continua 4.3)

      julia
      function one2two(path, m₁, m₂)
      +    M = m₁ + m₂
      +    r₁ = m₂ / M .* path
      +    r₂ = -m₁ / M .* path
      +    return r₁, r₂
      +end
      one2two (generic function with 1 method)

      Next we define a function to perform the change of variables: (χ(t),ϕ(t))(x(t),y(t))

      julia
      @views function soln2orbit(soln, model_params=nothing)
      +    @assert size(soln, 1)  [2, 4] "size(soln,1) must be either 2 or 4"
      +
      +    if size(soln, 1) == 2
      +        χ = soln[1, :]
      +        ϕ = soln[2, :]
      +
      +        @assert length(model_params)==3 "model_params must have length 3 when size(soln,2) = 2"
      +        p, M, e = model_params
      +    else
      +        χ = soln[1, :]
      +        ϕ = soln[2, :]
      +        p = soln[3, :]
      +        e = soln[4, :]
      +    end
      +
      +    r = p ./ (1 .+ e .* cos.(χ))
      +    x = r .* cos.(ϕ)
      +    y = r .* sin.(ϕ)
      +
      +    orbit = vcat(x', y')
      +    return orbit
      +end
      soln2orbit (generic function with 2 methods)

      This function uses second-order one-sided difference stencils at the endpoints; see https://doi.org/10.1090/S0025-5718-1988-0935077-0

      julia
      function d_dt(v::AbstractVector, dt)
      +    a = -3 / 2 * v[1] + 2 * v[2] - 1 / 2 * v[3]
      +    b = (v[3:end] .- v[1:(end - 2)]) / 2
      +    c = 3 / 2 * v[end] - 2 * v[end - 1] + 1 / 2 * v[end - 2]
      +    return [a; b; c] / dt
      +end
      d_dt (generic function with 1 method)

      This function uses second-order one-sided difference stencils at the endpoints; see https://doi.org/10.1090/S0025-5718-1988-0935077-0

      julia
      function d2_dt2(v::AbstractVector, dt)
      +    a = 2 * v[1] - 5 * v[2] + 4 * v[3] - v[4]
      +    b = v[1:(end - 2)] .- 2 * v[2:(end - 1)] .+ v[3:end]
      +    c = 2 * v[end] - 5 * v[end - 1] + 4 * v[end - 2] - v[end - 3]
      +    return [a; b; c] / (dt^2)
      +end
      d2_dt2 (generic function with 1 method)

      Now we define a function to compute the trace-free moment tensor from the orbit

      julia
      function orbit2tensor(orbit, component, mass=1)
      +    x = orbit[1, :]
      +    y = orbit[2, :]
      +
      +    Ixx = x .^ 2
      +    Iyy = y .^ 2
      +    Ixy = x .* y
      +    trace = Ixx .+ Iyy
      +
      +    if component[1] == 1 && component[2] == 1
      +        tmp = Ixx .- trace ./ 3
      +    elseif component[1] == 2 && component[2] == 2
      +        tmp = Iyy .- trace ./ 3
      +    else
      +        tmp = Ixy
      +    end
      +
      +    return mass .* tmp
      +end
      +
      +function h_22_quadrupole_components(dt, orbit, component, mass=1)
      +    mtensor = orbit2tensor(orbit, component, mass)
      +    mtensor_ddot = d2_dt2(mtensor, dt)
      +    return 2 * mtensor_ddot
      +end
      +
      +function h_22_quadrupole(dt, orbit, mass=1)
      +    h11 = h_22_quadrupole_components(dt, orbit, (1, 1), mass)
      +    h22 = h_22_quadrupole_components(dt, orbit, (2, 2), mass)
      +    h12 = h_22_quadrupole_components(dt, orbit, (1, 2), mass)
      +    return h11, h12, h22
      +end
      +
      +function h_22_strain_one_body(dt::T, orbit) where {T}
      +    h11, h12, h22 = h_22_quadrupole(dt, orbit)
      +
      +    h₊ = h11 - h22
      +    hₓ = T(2) * h12
      +
      +    scaling_const =(T(π) / 5)
      +    return scaling_const * h₊, -scaling_const * hₓ
      +end
      +
      +function h_22_quadrupole_two_body(dt, orbit1, mass1, orbit2, mass2)
      +    h11_1, h12_1, h22_1 = h_22_quadrupole(dt, orbit1, mass1)
      +    h11_2, h12_2, h22_2 = h_22_quadrupole(dt, orbit2, mass2)
      +    h11 = h11_1 + h11_2
      +    h12 = h12_1 + h12_2
      +    h22 = h22_1 + h22_2
      +    return h11, h12, h22
      +end
      +
      +function h_22_strain_two_body(dt::T, orbit1, mass1, orbit2, mass2) where {T}
      +    # compute (2,2) mode strain from orbits of BH 1 of mass1 and BH2 of mass 2
      +
      +    @assert abs(mass1 + mass2 - 1.0)<1e-12 "Masses do not sum to unity"
      +
      +    h11, h12, h22 = h_22_quadrupole_two_body(dt, orbit1, mass1, orbit2, mass2)
      +
      +    h₊ = h11 - h22
      +    hₓ = T(2) * h12
      +
      +    scaling_const =(T(π) / 5)
      +    return scaling_const * h₊, -scaling_const * hₓ
      +end
      +
      +function compute_waveform(dt::T, soln, mass_ratio, model_params=nothing) where {T}
      +    @assert mass_ratio1 "mass_ratio must be <= 1"
      +    @assert mass_ratio0 "mass_ratio must be non-negative"
      +
      +    orbit = soln2orbit(soln, model_params)
      +    if mass_ratio > 0
      +        m₂ = inv(T(1) + mass_ratio)
      +        m₁ = mass_ratio * m₂
      +
      +        orbit₁, orbit₂ = one2two(orbit, m₁, m₂)
      +        waveform = h_22_strain_two_body(dt, orbit1, mass1, orbit2, mass2)
      +    else
      +        waveform = h_22_strain_one_body(dt, orbit)
      +    end
      +    return waveform
      +end
      compute_waveform (generic function with 2 methods)

      Simulating the True Model

      RelativisticOrbitModel defines system of odes which describes motion of point like particle in schwarzschild background, uses

      u[1]=χu[2]=ϕ

      where, p, M, and e are constants

      julia
      function RelativisticOrbitModel(u, (p, M, e), t)
      +    χ, ϕ = u
      +
      +    numer = (p - 2 - 2 * e * cos(χ)) * (1 + e * cos(χ))^2
      +    denom = sqrt((p - 2)^2 - 4 * e^2)
      +
      +    χ̇ = numer * sqrt(p - 6 - 2 * e * cos(χ)) / (M * (p^2) * denom)
      +    ϕ̇ = numer / (M * (p^(3 / 2)) * denom)
      +
      +    return [χ̇, ϕ̇]
      +end
      +
      +mass_ratio = 0.0         # test particle
      +u0 = Float64[π, 0.0]     # initial conditions
      +datasize = 250
      +tspan = (0.0f0, 6.0f4)   # timespace for GW waveform
      +tsteps = range(tspan[1], tspan[2]; length=datasize)  # time at each timestep
      +dt_data = tsteps[2] - tsteps[1]
      +dt = 100.0
      +const ode_model_params = [100.0, 1.0, 0.5]; # p, M, e

      Let's simulate the true model and plot the results using OrdinaryDiffEq.jl

      julia
      prob = ODEProblem(RelativisticOrbitModel, u0, tspan, ode_model_params)
      +soln = Array(solve(prob, RK4(); saveat=tsteps, dt, adaptive=false))
      +waveform = first(compute_waveform(dt_data, soln, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s = scatter!(ax, tsteps, waveform; markershape=:circle,
      +        markersize=12, markeralpha=0.25, alpha=0.5)
      +
      +    axislegend(ax, [[l, s]], ["Waveform Data"])
      +
      +    fig
      +end

      Defiing a Neural Network Model

      Next, we define the neural network model that takes 1 input (time) and has two outputs. We'll make a function ODE_model that takes the initial conditions, neural network parameters and a time as inputs and returns the derivatives.

      It is typically never recommended to use globals but incase you do use them, make sure to mark them as const.

      We will deviate from the standard Neural Network initialization and use WeightInitializers.jl,

      julia
      const nn = Chain(Base.Fix1(broadcast, cos),
      +    Dense(1 => 32, cos; init_weight=truncated_normal(; std=1e-4)),
      +    Dense(32 => 32, cos; init_weight=truncated_normal(; std=1e-4)),
      +    Dense(32 => 2; init_weight=truncated_normal(; std=1e-4)))
      +ps, st = Lux.setup(Xoshiro(), nn)
      ((layer_1 = NamedTuple(), layer_2 = (weight = Float32[-0.00011973267; -6.019302f-5; 9.096157f-5; 4.2661748f-5; 9.349409f-7; 0.00016044428; -9.652911f-6; -0.00013854839; 9.681807f-6; -2.8657123f-5; 0.00017334803; 2.4411342f-5; 9.011604f-5; 5.220362f-5; 0.00024906726; -2.4143723f-5; 0.00012566449; -4.8479058f-5; 4.074634f-5; 1.0247664f-5; -0.0001859722; 3.7356087f-5; -7.656956f-5; -1.2043876f-5; -8.47999f-5; -2.4505294f-5; -7.9587626f-5; -0.00022258626; -0.0001703838; 2.2777765f-5; 4.271127f-5; 6.0953906f-5;;], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_3 = (weight = Float32[-1.0062973f-5 -0.0001435936 7.171802f-5 3.4863042f-6 0.00017328089 6.824237f-5 -0.00012931744 7.675739f-6 0.00022924854 -0.00011960628 0.00011614925 -0.00013504615 4.9548744f-5 1.507356f-5 -0.00010520048 9.820607f-5 0.00011530446 -5.298501f-5 3.924124f-5 -8.876832f-5 6.5198125f-5 4.548969f-5 5.3590033f-5 -0.000111658905 8.5903535f-5 -3.4463697f-5 0.00013809335 1.6326525f-5 6.29639f-5 6.3808046f-5 5.5576777f-5 -0.0001310525; -7.0357426f-5 9.636652f-5 -2.7267588f-5 -5.7131452f-5 0.00015933493 9.020348f-5 -1.280962f-5 -1.5835829f-5 1.2373991f-5 -0.0003102026 -1.5455973f-5 -5.0626495f-5 -7.3990675f-5 0.00022303218 -5.265653f-5 5.5802695f-5 0.000119704986 2.3875706f-5 2.6456584f-5 -1.1514318f-5 3.4455326f-5 8.091209f-5 -1.6922031f-5 -9.741731f-5 -0.00013727894 -9.3055656f-5 0.00014561473 -0.00012389639 5.852755f-5 -0.000109424866 -4.5462173f-5 0.00021897774; -5.4261145f-5 0.000121771845 0.00020005245 2.6634425f-5 -2.619291f-5 -0.00020373413 -1.2680036f-6 3.037937f-5 -5.047399f-5 -1.8179611f-6 9.946187f-5 5.8790112f-5 -0.00014307268 3.3849017f-5 -0.00016031059 2.021655f-6 -3.0627314f-5 4.2110256f-5 -2.9767696f-5 0.00021924138 2.025092f-5 0.00011184174 -0.00019683011 2.243284f-5 6.390769f-5 1.2823031f-6 0.00012127408 8.413545f-5 5.0939067f-5 -3.1260803f-5 7.489051f-5 -0.000117571406; 8.286847f-5 5.6977842f-5 -0.00011781059 -9.9578145f-5 -1.48217305f-5 7.6619406f-5 7.078823f-5 -1.2595202f-5 -1.8840798f-5 0.00013955703 7.530427f-5 -3.0709045f-5 0.0002204093 0.00010372281 0.00010360437 -4.6901005f-6 0.000103564205 9.927554f-5 0.00015315072 0.00016233182 -6.378829f-5 0.00027685237 -0.00022597678 0.00013754105 9.243972f-5 -0.00012381934 -0.00010605406 -0.0001433673 -2.6276277f-5 -0.00013443631 -0.00011772916 5.814016f-5; -0.00016425819 3.8754493f-5 -0.00016896137 6.288182f-5 -0.00023414425 -9.0244575f-5 -5.2501702f-5 1.4775569f-5 4.904329f-5 -1.5052479f-5 -2.7051257f-5 -3.614626f-5 0.00012460808 -0.00018959433 5.600226f-5 -5.7855483f-5 3.128997f-5 9.41794f-5 8.772447f-6 -0.00014428626 -3.1018924f-5 1.3908119f-6 -4.760862f-7 -0.00012216585 1.242881f-5 4.9815384f-7 -0.00010849579 -0.00010241591 0.00014788071 -8.60535f-5 -8.829287f-5 -5.122713f-5; 0.00011356168 2.7072892f-5 -9.253048f-5 -9.7144235f-5 -5.3558386f-5 -7.102739f-5 -0.00018623754 0.00013162836 -1.5184637f-5 -9.944188f-5 0.00014779605 -2.3400253f-5 -6.563826f-5 -7.489051f-5 -0.00012160472 -7.8382036f-5 9.002087f-5 -1.4130239f-5 3.6039422f-5 -0.00011180349 -6.0440257f-6 -0.0001540761 -5.739455f-6 5.1871833f-5 6.2550454f-5 -2.9444225f-5 4.1011826f-6 7.9901416f-5 5.603711f-5 -1.4256181f-5 3.4426583f-5 4.9856906f-5; -3.286154f-5 7.116674f-5 -4.1574076f-6 -0.00015561515 4.6678346f-5 0.0001754534 3.814063f-7 -0.00022762116 5.648911f-5 4.255361f-5 -8.870969f-5 1.8850651f-5 3.7530056f-6 -4.5058187f-5 -7.086632f-5 -0.0001447943 -9.620589f-5 0.000102021324 0.00017278506 -1.789651f-5 -0.00019770837 -0.00012196603 -0.00020703816 0.00014147113 0.000104440216 0.00011035788 1.3612266f-6 8.4339816f-5 0.00018007657 8.51515f-6 -2.6068446f-5 -8.29233f-5; -0.00017980425 0.00024446344 7.396711f-5 -0.00021361737 3.724509f-5 1.4738594f-5 0.000136625 2.9866022f-5 3.47192f-5 9.010391f-5 -0.00019570945 4.4907054f-5 9.772386f-6 -7.9038015f-5 -0.00033689776 -4.9428443f-5 4.496193f-5 -5.6542092f-5 -6.9646762f-6 -0.00019470662 5.1095558f-5 -0.00014013774 -9.7984426f-5 -0.00011226721 0.00031234138 -9.5950694f-5 -0.00014004567 4.6424328f-5 -4.7736758f-5 7.010866f-5 1.6203121f-5 4.6829777f-5; -8.708018f-5 -0.00016045521 -7.2275757f-6 6.393291f-5 0.00011965771 0.00011464074 -4.5697686f-7 8.0861464f-5 0.0001022533 5.646368f-5 0.000116467454 0.00017300091 2.5471847f-5 0.00020660755 -4.3006254f-5 0.00012930758 -1.0878323f-5 0.00011079276 0.00020138327 -0.00015660196 9.4770485f-6 3.581487f-5 -8.650456f-7 -0.00014728917 -4.715184f-5 -0.00010080215 2.8409338f-5 -6.403153f-5 0.00015295464 -0.00017042554 1.3564003f-6 -0.00011035926; -9.573557f-5 -6.596612f-5 4.345059f-5 0.00010860645 0.00019122523 5.4775028f-5 8.066031f-5 -6.302869f-5 2.8398154f-5 5.9679318f-5 4.9511655f-5 0.00012019725 7.560769f-5 3.4006407f-5 -7.405292f-6 -3.3514407f-5 -0.00013196601 8.2634935f-5 -1.6556698f-5 0.00011844044 -2.1374497f-5 -5.9172984f-5 0.0002714602 9.1502596f-5 -2.4370893f-5 -6.784604f-5 2.7011944f-5 -0.00012285201 -0.00018385517 9.90055f-5 1.537271f-5 -9.662465f-5; -0.00013863033 0.00012131699 4.4665827f-5 4.008011f-5 -0.00029301443 0.00010328879 -0.0001005913 6.607562f-5 8.064893f-5 -1.5013011f-5 -8.330572f-5 -4.4715736f-5 6.1474464f-5 -0.000120070705 -4.839504f-5 -1.6226278f-6 -7.70251f-5 -5.7063782f-5 6.19982f-5 6.2265244f-5 -5.091939f-5 -0.000121028796 -8.224875f-5 -6.8355905f-5 -5.8808615f-5 6.492918f-5 8.943161f-5 6.348348f-5 -0.00019190085 -0.00010643892 3.577843f-6 -4.6126414f-5; 0.00012505539 -3.8034304f-5 -0.00018813847 2.5143841f-5 -1.5800473f-5 5.7095695f-6 0.00012570035 8.26293f-5 -2.4939525f-5 5.9741706f-5 1.7747216f-5 -1.7496443f-5 8.440886f-5 9.904175f-5 -2.7824995f-5 6.900068f-5 8.423556f-5 -0.00012994438 0.00016383445 -8.6308886f-5 0.0001719667 8.853987f-5 -0.00011011876 -1.8455012f-5 8.94854f-5 -0.00011606892 7.799474f-6 -5.584804f-5 -8.175717f-5 -1.3835867f-5 -9.989124f-5 3.248445f-5; 0.0001143422 0.00012731152 0.00018125362 -6.4191668f-6 0.00016003738 -2.7765425f-5 -0.0001555723 -4.8895436f-5 0.0001035261 -0.00012203125 -2.6826072f-5 1.8942063f-5 4.4934506f-5 -0.000106232124 2.2164802f-6 -0.00018457786 -2.8980878f-5 -2.7131715f-5 3.6822305f-5 -0.00012809213 0.00017954524 6.7248395f-5 6.213277f-5 7.3543066f-5 -8.91384f-5 8.050668f-5 9.043197f-5 0.00011347448 -2.4456815f-5 -0.00014946179 0.00019021088 -0.00018729462; 9.272404f-5 1.8320108f-5 7.896093f-5 0.00017118001 -0.0001250922 2.291453f-5 6.254659f-5 0.000116823874 -3.7232323f-5 -7.725545f-5 -1.972598f-5 -1.9868286f-5 2.5172509f-5 -5.481218f-5 0.00016046854 4.3901264f-6 -6.932835f-5 7.142715f-5 2.5496958f-5 -3.063386f-5 0.00016012261 -7.974759f-5 3.226735f-5 0.000104737555 -4.9273913f-5 -3.3438133f-5 0.00020110856 -0.00013596313 0.00015645802 -0.00012764387 0.00010554395 7.904172f-6; 7.832622f-5 0.00011860157 5.266906f-5 -7.044353f-5 3.933173f-5 1.6427433f-5 -0.00011026127 -4.351902f-5 0.00022462536 7.477401f-5 -9.0549554f-5 0.00016367993 -3.6606558f-5 5.467878f-5 -2.690087f-5 4.4372475f-5 -1.575863f-5 3.407016f-5 6.962714f-6 -0.00011319172 -1.3054113f-5 -4.122088f-5 3.6056736f-5 9.1263464f-5 7.2483024f-5 -0.00016864711 7.967744f-5 2.6180001f-5 -0.00015273914 -1.9276631f-5 6.645485f-5 -9.559493f-5; 4.3957913f-5 0.00014572433 -1.4306217f-5 -7.624112f-5 -2.9588346f-5 0.00014455158 4.0845338f-5 6.834219f-5 -9.741042f-5 -0.00014014456 -1.6901933f-5 1.7843891f-5 -0.00010838938 4.6790734f-5 0.00019295757 -6.0569873f-5 -0.00013637965 -3.0474872f-5 0.0001037594 0.00019073563 6.419302f-7 -0.00013129206 -0.000105330306 -1.7867922f-5 0.000115244446 -1.6840724f-5 -0.00016233283 0.000109826695 -5.968982f-7 -0.00013197932 -0.00013100801 8.5669435f-6; 9.623581f-6 -5.6304347f-5 -4.3870004f-5 0.0002447548 0.00017727955 -4.4379878f-5 -8.2319966f-5 0.000109945286 -6.691387f-6 4.3810637f-6 4.286829f-5 -0.00012954461 -0.000112196445 -6.5902816f-5 6.441595f-5 0.00012012445 1.5023467f-5 -0.00011764802 0.00012402602 -0.00021996978 6.3675914f-5 -9.014398f-5 0.00010708526 -0.00020586811 0.00012778126 7.886614f-5 -0.00013825842 -6.0239498f-5 2.3244516f-5 -3.6498983f-5 8.609585f-5 2.1549386f-5; 7.344093f-5 9.49406f-5 -7.0200425f-5 -3.4793175f-5 -1.9189849f-5 -3.8277554f-5 0.00011976373 -2.1197337f-5 -8.067376f-5 -3.2448952f-5 -7.225808f-6 -2.4172796f-5 -3.2152413f-5 3.2865668f-5 -2.211482f-5 -4.6703088f-5 -0.00023568759 -3.9639992f-5 -3.4805715f-5 0.00017792893 7.392999f-5 -0.000108427135 1.9616336f-5 1.4932766f-5 0.00014690605 -6.202372f-5 -4.172182f-5 0.00020422452 3.4323224f-5 1.6616243f-5 -0.00014446728 6.3973195f-5; -2.8892682f-5 -9.694493f-5 2.6234446f-5 -3.5557365f-5 1.9830559f-5 -0.00016544068 -7.2985036f-5 -1.26402165f-5 0.00016205726 -0.00019165275 3.345725f-5 2.944733f-5 -7.4804484f-5 -6.582739f-6 2.4713332f-5 0.0001649914 7.26928f-6 -0.00022154477 9.388105f-5 5.7786277f-5 0.00014243826 -3.4910674f-5 9.038743f-5 -5.1882926f-6 -9.168539f-5 0.00022661644 2.6507185f-5 0.00025639276 -4.074251f-5 -6.5140506f-5 8.830005f-5 0.00012997884; 3.4252414f-5 1.7978846f-5 0.000169445 0.00018952793 -8.011082f-5 6.781402f-5 0.000120731675 1.5522899f-5 2.1491327f-5 -0.00013182944 -1.638258f-5 -9.910352f-5 1.763488f-5 -5.268952f-5 0.0001341999 0.00012931575 2.0700243f-5 -7.521594f-5 -8.710873f-5 -0.00025061367 -4.814495f-5 -5.369676f-5 8.906928f-5 -0.00012929876 3.5379262f-6 0.00019203326 -0.0001413457 0.00011003606 2.02384f-5 2.5250322f-6 -4.823328f-6 0.00017709933; 0.00010651335 3.9165167f-5 7.6804965f-5 0.00018133184 8.555229f-5 6.652526f-5 -0.00012029219 -7.9235f-5 -0.00020872283 -1.1949973f-5 -0.00013770128 -5.876042f-5 -4.9586248f-5 -9.1145936f-5 -0.00010791469 2.2212389f-5 2.3586554f-5 0.00013769098 0.000111135545 -9.670577f-5 -9.732586f-5 8.423925f-6 0.00017610678 9.734474f-5 1.8881644f-6 1.411364f-5 -5.9431986f-5 -1.2221734f-5 -8.04621f-5 -6.966804f-5 0.00023346557 -6.003869f-5; -3.876047f-5 0.00014561284 -4.148563f-5 8.296341f-5 -6.987597f-5 0.00013355879 -0.00011680688 4.320796f-6 3.716612f-5 -4.7806792f-5 -9.4781724f-5 5.3489697f-5 -1.4912613f-5 8.296775f-5 2.3379346f-6 -1.0566036f-5 -0.000108239285 -7.448106f-5 -3.0216563f-5 7.662209f-5 0.00014964533 -0.00011516985 -3.5049095f-5 -3.0671647f-5 -3.2881521f-6 -3.6293895f-5 7.330256f-7 -3.5557747f-5 4.4640456f-5 8.841141f-5 6.586005f-5 -0.00017228896; -1.24846265f-5 0.0001208953 0.00014398887 4.5776145f-5 -0.000115045936 -5.9687086f-6 6.0125035f-6 6.8744295f-5 8.819092f-6 6.5838617f-6 -8.074785f-6 8.18883f-6 8.1181395f-5 0.00016108702 2.6273632f-5 -3.1020445f-5 9.508686f-6 4.0793813f-5 -0.0001408116 3.1298189f-6 2.3511593f-5 -8.186044f-5 -0.00010960179 -0.00016496978 4.405605f-6 -6.639267f-5 -0.000101537495 7.49069f-6 0.00010797909 3.2122553f-5 0.00019854389 6.8400455f-5; -0.00017579607 4.488868f-5 -7.397126f-8 2.2734788f-5 4.2988877f-6 -0.00012200552 4.1339466f-5 2.328481f-5 4.1465668f-5 8.132256f-6 8.115436f-5 1.3009662f-5 -1.9977986f-5 -0.0001287793 -9.6333824f-5 2.874979f-5 -5.3080348f-5 -5.785651f-5 -6.20475f-5 5.9302507f-5 2.9213074f-5 9.509549f-5 -3.0428158f-5 0.00017109046 0.00020654775 5.3617234f-5 0.00010196593 0.0002069366 2.0894107f-5 1.6600687f-5 -7.48392f-5 0.00012764451; -1.6030723f-5 -1.9729712f-5 2.562178f-5 0.00022121618 0.00018367641 4.139218f-5 7.6101554f-5 0.00019930796 7.185698f-5 7.8943165f-5 -7.644431f-5 4.3318218f-5 -1.3253722f-5 -2.1225085f-5 -0.00016582398 -0.00018792605 -1.3799033f-5 0.0002778923 -0.000105594445 0.000120767974 3.4850607f-5 -4.4116554f-5 3.988118f-5 -4.367971f-5 0.00016983895 -4.00821f-5 -8.422913f-5 1.4080487f-5 9.899427f-6 4.9401973f-5 -3.4165874f-5 -7.69171f-5; 4.1773757f-5 0.00014913613 0.000126567 0.00017125023 -6.546571f-5 0.00033155672 0.00011466273 7.809752f-5 6.979409f-5 3.1921016f-5 6.510741f-5 -8.501913f-5 6.257237f-5 0.00011156401 -9.156247f-5 9.0500354f-5 9.2775146f-5 -6.766979f-6 -1.7866389f-5 -2.7544174f-5 -4.399843f-5 7.5294745f-5 0.00011452333 -8.9779605f-5 -0.0001744599 -0.00013224669 9.717873f-5 0.00013802775 2.7223847f-5 6.938874f-5 -0.00015714747 -3.729033f-5; -0.00010186369 1.8786994f-5 1.1669726f-5 3.7432466f-5 0.00014849601 -8.1198996f-5 1.2223435f-5 3.6235957f-5 -6.6038585f-5 -0.00020149031 -8.3387975f-5 -1.1616641f-5 3.861739f-5 5.2266863f-5 0.00017672828 -3.6429665f-5 0.0001213096 -0.0001294468 -9.729489f-5 0.00011058528 -4.197558f-6 0.00019134328 8.317239f-5 6.726744f-5 2.998288f-5 -0.0001831322 7.862825f-5 0.00014545645 -3.136986f-5 0.00011239314 0.0001090515 7.624094f-5; 0.00010192903 -6.524324f-5 7.143097f-5 -8.02076f-5 -1.0315073f-5 -7.236077f-5 -0.00015450438 -7.5828546f-5 -0.00017704595 5.233977f-5 -3.8811017f-5 -7.597749f-5 0.00018876392 -0.00013852713 -1.1569201f-5 -2.537716f-5 -0.00022445363 -4.2580206f-5 -0.00011457844 -0.00017382255 -1.9114601f-5 3.0382655f-5 9.44476f-5 -4.1854648f-5 0.00017476828 9.583724f-5 8.147809f-5 9.057342f-5 -0.00016546999 8.475024f-5 4.4872453f-5 8.55354f-5; 4.9008333f-5 -0.00015482772 -2.9896846f-5 -7.672894f-5 -7.277536f-5 -1.7218908f-5 -2.0766205f-5 0.00015757453 0.00016821099 0.00012837019 -0.00016522144 2.8738874f-5 -3.516303f-5 -0.000107145315 8.35585f-5 -1.5251731f-5 1.805957f-5 0.00013188834 -0.000100679004 0.00015572732 -8.925097f-5 0.00017002202 0.00010146622 -0.00024448716 0.00016385132 1.8185434f-5 -3.342352f-5 7.46513f-5 -0.00013326635 6.0554674f-5 7.850088f-5 -5.4996348f-5; -0.000119494725 -0.00025112068 0.00011172785 9.278077f-6 1.7621252f-5 -1.15393295f-5 3.6610567f-5 -2.8657137f-6 -4.93761f-5 3.655143f-5 -0.00012682205 -8.361162f-6 0.00018711382 -2.9714225f-5 3.2761087f-5 0.00015201842 -0.00010104727 -0.00012077274 -9.988359f-6 -0.00014403982 -7.473175f-5 -2.1082627f-5 -0.00021641343 2.9726623f-5 0.00014701443 -0.00015106272 2.60452f-5 -0.00020045234 7.8442135f-5 -6.923768f-5 5.397001f-5 4.615466f-6; -1.7326232f-5 -4.5282093f-5 -1.1445137f-5 6.4935935f-5 9.0735455f-5 -1.1834731f-5 -2.7228747f-5 -1.252255f-6 -8.46312f-5 -4.548237f-6 -2.6095266f-5 3.601256f-5 7.6172396f-6 -4.7420755f-5 -0.00021223628 1.2169157f-5 0.0001208721 -4.9286413f-5 -4.5233795f-5 -0.00019525501 2.342413f-5 -0.0001615138 -4.1510673f-5 4.5838387f-5 -0.00022700398 -6.700035f-5 -7.5483396f-5 -4.520957f-6 6.766729f-5 4.7984697f-5 0.00010202208 -7.772921f-5; 0.0001495528 0.00020418811 3.9540133f-5 -6.3646266f-6 6.240287f-5 0.00015583959 -9.5992895f-5 5.6563535f-5 7.875602f-5 -8.022817f-6 -6.209155f-5 3.4326014f-5 6.877887f-5 -8.3817555f-5 -9.155829f-5 -2.6342583f-5 -1.791582f-5 -7.3701696f-5 3.1804808f-5 -0.00022330634 -8.917969f-6 -0.00024460425 0.00014764017 7.990559f-5 1.008664f-5 0.00013233775 -0.00021250913 -6.5767315f-5 -0.00010873815 -2.6074382f-5 -8.926506f-5 -8.4303254f-5], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_4 = (weight = Float32[0.00011602808 -0.000120417775 7.054768f-5 -0.0001364321 1.0047987f-5 -8.540841f-5 -2.2970164f-5 -3.7272024f-5 7.4761874f-6 1.3028075f-5 1.06746675f-5 -4.7827394f-5 3.6491794f-5 -8.778504f-5 -3.844625f-5 9.919472f-5 -9.7661235f-5 2.755268f-5 1.7365865f-5 -4.661768f-5 -0.00011277104 -2.358428f-5 0.00014879108 -0.00028839387 -8.063303f-5 -1.4004848f-5 5.652013f-5 4.9286264f-5 0.000105819985 4.3599415f-5 -0.00013917121 -0.000105863226; -9.1772155f-5 -0.00017995205 4.675251f-7 -5.2920554f-5 0.00014703989 0.00018397685 -6.5224354f-5 3.4467295f-5 5.9178594f-5 -0.00023862447 -6.239535f-5 -7.785182f-5 1.7593879f-5 -1.3778444f-5 6.928703f-5 -8.063013f-5 4.069519f-5 1.616499f-5 0.00013895672 8.854975f-5 0.00012469526 -4.8969636f-5 6.860495f-5 -1.4344437f-5 9.547716f-5 5.0288338f-5 -2.761656f-5 9.424831f-5 -0.0001829136 -8.509033f-5 -5.9762977f-5 2.7484823f-5], bias = Float32[0.0; 0.0;;])), (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple(), layer_4 = NamedTuple()))

      Similar to most DL frameworks, Lux defaults to using Float32, however, in this case we need Float64

      julia
      const params = ComponentArray{Float64}(ps)
      +
      +const nn_model = StatefulLuxLayer(nn, st)
      Lux.StatefulLuxLayer{true, Lux.Chain{@NamedTuple{layer_1::Lux.WrappedFunction{Base.Fix1{typeof(broadcast), typeof(cos)}}, layer_2::Lux.Dense{true, typeof(cos), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(cos), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}, layer_4::Lux.Dense{true, typeof(identity), PartialFunctions.PartialFunction{nothing, nothing, typeof(WeightInitializers.truncated_normal), Tuple{}, @NamedTuple{std::Float64}}, typeof(WeightInitializers.zeros32)}}, Nothing}, Nothing, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}, layer_4::@NamedTuple{}}}(Chain(), nothing, (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple(), layer_4 = NamedTuple()), nothing)

      Now we define a system of odes which describes motion of point like particle with Newtonian physics, uses

      u[1]=χu[2]=ϕ

      where, p, M, and e are constants

      julia
      function ODE_model(u, nn_params, t)
      +    χ, ϕ = u
      +    p, M, e = ode_model_params
      +
      +    # In this example we know that `st` is am empty NamedTuple hence we can safely ignore
      +    # it, however, in general, we should use `st` to store the state of the neural network.
      +    y = 1 .+ nn_model([first(u)], nn_params)
      +
      +    numer = (1 + e * cos(χ))^2
      +    denom = M * (p^(3 / 2))
      +
      +    χ̇ = (numer / denom) * y[1]
      +    ϕ̇ = (numer / denom) * y[2]
      +
      +    return [χ̇, ϕ̇]
      +end
      ODE_model (generic function with 1 method)

      Let us now simulate the neural network model and plot the results. We'll use the untrained neural network parameters to simulate the model.

      julia
      prob_nn = ODEProblem(ODE_model, u0, tspan, params)
      +soln_nn = Array(solve(prob_nn, RK4(); u0, p=params, saveat=tsteps, dt, adaptive=false))
      +waveform_nn = first(compute_waveform(dt_data, soln_nn, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l1 = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s1 = scatter!(ax, tsteps, waveform; markershape=:circle, markersize=12,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2)
      +
      +    l2 = lines!(ax, tsteps, waveform_nn; linewidth=2, alpha=0.75)
      +    s2 = scatter!(ax, tsteps, waveform_nn; markershape=:circle,
      +        markersize=12, markeralpha=0.25, alpha=0.5, strokewidth=2)
      +
      +    axislegend(ax, [[l1, s1], [l2, s2]],
      +        ["Waveform Data", "Waveform Neural Net (Untrained)"]; position=:lb)
      +
      +    fig
      +end

      Setting Up for Training the Neural Network

      Next, we define the objective (loss) function to be minimized when training the neural differential equations.

      julia
      function loss(θ)
      +    pred = Array(solve(prob_nn, RK4(); u0, p=θ, saveat=tsteps, dt, adaptive=false))
      +    pred_waveform = first(compute_waveform(dt_data, pred, mass_ratio, ode_model_params))
      +    loss = sum(abs2, waveform .- pred_waveform)
      +    return loss, pred_waveform
      +end
      loss (generic function with 1 method)

      Warmup the loss function

      julia
      loss(params)
      (0.17215171721421207, [-0.024249801535431388, -0.02346585418572156, -0.022681906836011435, -0.021357317180048352, -0.019464416988440935, -0.016963046554685536, -0.013800484708468138, -0.00990849440296376, -0.00520559267126083, 0.0004032969641172105, 0.007017656891419924, 0.014720493495480241, 0.02353090231748062, 0.033276169354516875, 0.043314705833896336, 0.05188106697558526, 0.054700333055434175, 0.0427238357065267, 0.002423105357175596, -0.06575883215773011, -0.11027317642844461, -0.07678253350835433, -0.0072353830951188206, 0.03869619541269424, 0.054302679477350145, 0.053010890392771556, 0.044889237694299845, 0.034846679863281424, 0.024936638661368058, 0.015923083057834027, 0.008021668513541608, 0.0012311811425605268, -0.004529475034590188, -0.009361716233634384, -0.013364035775378412, -0.016620815901878253, -0.019203788197126054, -0.021169013129862177, -0.022559076807699988, -0.023404004269245684, -0.023722253289358303, -0.023521083092865745, -0.022797843963709284, -0.021537669920586207, -0.019715602687456514, -0.017294276511174298, -0.014223184402618666, -0.010438139233305582, -0.005860520949963716, -0.00039881752053247047, 0.006043962037684947, 0.013554593203308008, 0.022161982187542492, 0.03173508798113943, 0.041733947747754976, 0.050644402047554236, 0.05475043416740677, 0.045981405841294294, 0.011152289366379492, -0.05420462270255706, -0.10786003980798775, -0.08685899277206673, -0.01774186110866609, 0.0338250226807328, 0.053499201452751846, 0.05400660035342886, 0.04644819440068384, 0.03644347334895938, 0.026379742162639767, 0.01716279566038105, 0.009056918301880643, 0.0020871637830344454, -0.003833000649596514, -0.008796465842887504, -0.012913937856553289, -0.01626587145143468, -0.018934307254695595, -0.02097197454005451, -0.0224295200316549, -0.023335406713336643, -0.023712900244009478, -0.02357041802509943, -0.022906394593631228, -0.021710058883234875, -0.019958459751178312, -0.01761360308066557, -0.014633651841338422, -0.010950330269378201, -0.006496278517170611, -0.00117520713687785, 0.00509967877361141, 0.012423985228668584, 0.02082949459404453, 0.03022588244507418, 0.04015436535793723, 0.049323788875630895, 0.05450738977182879, 0.04854762140980133, 0.018910188751749105, -0.042502139586782596, -0.10315104867281276, -0.09558611000472392, -0.028939522297792744, 0.02803995234799488, 0.052223130646726956, 0.054837231555989026, 0.04797944252126462, 0.03806268827600256, 0.027862360747976808, 0.018437229466984544, 0.010129000748480839, 0.002967092500939512, -0.0031100197038603306, -0.0082161156668996, -0.012446121061225964, -0.015901568755078654, -0.018652617240000398, -0.020768350144362, -0.02229141599601115, -0.023260958394085672, -0.023697093505961463, -0.02361282939105417, -0.023009218865298837, -0.021874751751256145, -0.020191745724326714, -0.017923246391015904, -0.015030312218619087, -0.011447676185503672, -0.0071116709655967255, -0.0019285321933857303, 0.00418515298414508, 0.011326237661996849, 0.01953487303756195, 0.02874787822057803, 0.03858428047507269, 0.047938884837366906, 0.05401544627420644, 0.05050337220632601, 0.0256911577239574, -0.030974995521538738, -0.09638900641676833, -0.102573566871294, -0.040619015798842875, 0.021284462092519427, 0.05040555779361737, 0.05546518394540094, 0.04946935076603893, 0.03970253564114501, 0.029377636383265602, 0.01975531095702029, 0.01123161885375543, 0.003879775858755852, -0.0023695397955581397, -0.00761096830444328, -0.011966053312152423, -0.015522255130645694, -0.018364387021327692, -0.020552878493211888, -0.022147379737285706, -0.02317926869799286, -0.02367518135491305, -0.023649303371970062, -0.02310461742752934, -0.02203298018800196, -0.020414371431591624, -0.018224930107454487, -0.015413676223328199, -0.011928852014086397, -0.007709193266232499, -0.0026602412566282306, 0.0032996827586000317, 0.010262587199066909, 0.018274577343534007, 0.027303342429091142, 0.03702853083260528, 0.0465057213069404, 0.05331917019944852, 0.051918238954459836, 0.03153306060791138, -0.019910122722075096, -0.08788362950254597, -0.10750094646131855, -0.05250722342833319, 0.013532854861997918, 0.0479619737149416, 0.055852146956217485, 0.050901076175073945, 0.04135375329743446, 0.03093541376814808, 0.02110756232480277, 0.01237125722871237, 0.004818557596569256, -0.0015962956792808102, -0.006991680144950654, -0.011469023119692376, -0.015132311698807245, -0.018060132121416765, -0.020332234338905318, -0.021995136036621243, -0.023091139245199024, -0.023646409526520064, -0.023679578179550936, -0.023193543086071973, -0.022182036958480172, -0.02063327847752358, -0.018513107066246644, -0.015785984296997794, -0.012396365770967076, -0.008287656846264849, -0.003368634740061504, 0.0024402092108903213, 0.00922922779343203, 0.017051490948011293, 0.02589298414209541, 0.03549058692942278, 0.04503937218323815, 0.05245167905094164, 0.05286401786344559, 0.0364818425938837, -0.009505948227704146, -0.07802438838691865, -0.11013670289983736, -0.06425595915170446, 0.004772010596095392, 0.04482024983889405, 0.055946769355377436, 0.05225496995452235, 0.04301460045508618, 0.03252435619257789, 0.022501895668115328, 0.013547176658980737, 0.0057907331212782714, -0.0008020753538423008, -0.006349674377069929, -0.01095520031828327, -0.014727439711552081, -0.017748123886680903, -0.02010087532816729, -0.021835155048116412, -0.0229959341098181, -0.023611652701661365, -0.02370339152416624, -0.023275956637742234, -0.022325259983575547, -0.020841440939984492, -0.018793020521969617, -0.016146637502150406, -0.012849766519993163, -0.008848805202157648, -0.004847843884322281])

      Now let us define a callback function to store the loss over time

      julia
      const losses = Float64[]
      +
      +function callback(θ, l, pred_waveform)
      +    push!(losses, l)
      +    @printf "Training %10s Iteration: %5d %10s Loss: %.10f\n" "" length(losses) "" l
      +    return false
      +end
      callback (generic function with 1 method)

      Training the Neural Network

      Training uses the BFGS optimizers. This seems to give good results because the Newtonian model seems to give a very good initial guess

      julia
      adtype = Optimization.AutoZygote()
      +optf = Optimization.OptimizationFunction((x, p) -> loss(x), adtype)
      +optprob = Optimization.OptimizationProblem(optf, params)
      +res = Optimization.solve(
      +    optprob, BFGS(; initial_stepnorm=0.01, linesearch=LineSearches.BackTracking());
      +    callback, maxiters=1000)
      retcode: Success
      +u: ComponentVector{Float64}(layer_1 = Float64[], layer_2 = (weight = [-0.00011973267100973714; -6.019301872584702e-5; 9.096157009471292e-5; 4.266174801152644e-5; 9.349408855980382e-7; 0.00016044428048176378; -9.652911103319343e-6; -0.0001385483919874571; 9.681806659489127e-6; -2.8657123039017627e-5; 0.00017334803123936343; 2.4411341655644033e-5; 9.011603833644094e-5; 5.220362072567235e-5; 0.0002490672632118383; -2.4143722839640925e-5; 0.00012566449004216483; -4.847905802303613e-5; 4.074634125572134e-5; 1.0247664249599429e-5; -0.0001859721960498307; 3.735608697743877e-5; -7.656955858682703e-5; -1.2043876267849151e-5; -8.479990356138734e-5; -2.4505294277351263e-5; -7.95876258051809e-5; -0.00022258625540396467; -0.00017038380610754774; 2.2777765479984303e-5; 4.27112718170935e-5; 6.095390563132088e-5;;], bias = [-1.164825726562541e-16; 7.32997919745033e-18; 9.983766760539752e-17; 7.770460759065174e-17; 1.7788999500159933e-18; 1.4588208534933488e-16; -1.2507218408227132e-17; -1.251678622168931e-16; 1.2733169472004439e-17; 7.135391304264406e-18; 2.484754549107743e-16; 6.723620038833896e-18; -2.2857880932878122e-17; 1.1538087757854018e-16; 2.463886399288879e-16; -1.3610381677146602e-17; 9.87350838026452e-17; -4.603549365892236e-17; 5.6417112338565525e-18; 2.1427353925903686e-17; -1.7516937468067382e-16; 9.686404129065536e-17; -1.1068338528151916e-16; -4.679508920209203e-18; 2.5985377908932743e-17; 2.0807714940635198e-17; -1.2025065573329291e-16; -2.2061612577673057e-16; -1.8567883300781978e-17; 2.482936980343263e-18; 3.4047360819198803e-18; 2.173035420130597e-18;;]), layer_3 = (weight = [-1.0061051374231235e-5 -0.0001435916774186004 7.171994459566595e-5 3.4882259809725193e-6 0.0001732828104890276 6.824429240293579e-5 -0.00012931552098380893 7.677660529568793e-6 0.00022925046598756195 -0.00011960435856381964 0.00011615116911923022 -0.00013504423165942132 4.9550665631964246e-5 1.5075481338853033e-5 -0.00010519855911629895 9.820798825457177e-5 0.00011530637950852913 -5.2983089493510066e-5 3.924316208794128e-5 -8.876639819719384e-5 6.520004628907118e-5 4.54916126058287e-5 5.359195440759037e-5 -0.00011165698285695655 8.590545715049844e-5 -3.446177558872437e-5 0.0001380952753846818 1.632844671472133e-5 6.296582526044495e-5 6.380996731094503e-5 5.557869828989134e-5 -0.0001310505749403198; -7.035733811956914e-5 9.636661037635938e-5 -2.7267500046794955e-5 -5.7131364302980244e-5 0.0001593350176682785 9.020356868692558e-5 -1.2809531983142202e-5 -1.5835740998076307e-5 1.2374078904182701e-5 -0.0003102025069545866 -1.5455885078912935e-5 -5.062640717536254e-5 -7.399058755421144e-5 0.00022303227218632536 -5.265644300546716e-5 5.5802782879406165e-5 0.00011970507388302038 2.3875793556877868e-5 2.6456672129067134e-5 -1.1514230538371901e-5 3.4455414277695585e-5 8.091217808957168e-5 -1.692194324444572e-5 -9.741722111524122e-5 -0.0001372788532188075 -9.305556828788522e-5 0.0001456148171547888 -0.000123896300794363 5.852763628187465e-5 -0.00010942477762167383 -4.5462085255925074e-5 0.00021897783211731302; -5.4259894708870824e-5 0.00012177309585758837 0.0002000537050168512 2.663567542704249e-5 -2.6191660394305017e-5 -0.00020373288239562497 -1.2667532285363746e-6 3.0380619906002633e-5 -5.047274058078849e-5 -1.8167106912177227e-6 9.94631180635115e-5 5.8791362649300245e-5 -0.00014307143388059756 3.3850267614707524e-5 -0.00016030934162183824 2.0229054786807387e-6 -3.062606370286228e-5 4.211150630517336e-5 -2.976644569052881e-5 0.00021924263168848616 2.025217040289681e-5 0.00011184299259703118 -0.00019682885718275532 2.2434090029220385e-5 6.390894017904274e-5 1.2835534750604354e-6 0.00012127533304528576 8.413669897497975e-5 5.094031698325898e-5 -3.125955222849255e-5 7.489175809105353e-5 -0.00011757015559333028; 8.287123114749126e-5 5.6980601816385334e-5 -0.00011780782892421003 -9.957538508861785e-5 -1.4818970835409752e-5 7.662216581117524e-5 7.079098782450589e-5 -1.2592442312985069e-5 -1.8838037926986118e-5 0.00013955978852645128 7.530702919645007e-5 -3.0706285310959205e-5 0.00022041206307656967 0.00010372556630935908 0.0001036071282712616 -4.687340829338635e-6 0.00010356696498527327 9.927829728875734e-5 0.00015315347468894462 0.00016233458359674242 -6.378553166108842e-5 0.00027685512964562096 -0.00022597401925414693 0.0001375438098464596 9.244247690256669e-5 -0.00012381657665646984 -0.0001060513002314226 -0.00014336454273257543 -2.6273517273907963e-5 -0.00013443355214367962 -0.00011772640368254384 5.8142917855357026e-5; -0.00016426227840953705 3.8750406823709946e-5 -0.00016896545741135337 6.287773693085625e-5 -0.00023414833150699074 -9.024866186905255e-5 -5.250578862277114e-5 1.4771482605049232e-5 4.903920388070612e-5 -1.5056565749805115e-5 -2.7055343813336912e-5 -3.6150345400787905e-5 0.00012460399273889032 -0.00018959841428684904 5.59981734875745e-5 -5.7859569202523714e-5 3.128588185403491e-5 9.417531226401265e-5 8.768360097489355e-6 -0.00014429034228331664 -3.1023010811836416e-5 1.3867254517356232e-6 -4.801726652450645e-7 -0.00012216993228893042 1.2424723430490129e-5 4.940673727242762e-7 -0.00010849987767530952 -0.00010241999290539078 0.00014787662338108665 -8.605758659203735e-5 -8.829695899865612e-5 -5.123121547174407e-5; 0.00011356015108418405 2.7071366793328487e-5 -9.253200317374982e-5 -9.714576065648294e-5 -5.355991145820394e-5 -7.102891452717263e-5 -0.0001862390612868223 0.00013162683405340648 -1.518616266452973e-5 -9.944340620763597e-5 0.00014779452118916057 -2.3401778372270137e-5 -6.563978734533861e-5 -7.489203329073166e-5 -0.0001216062423108395 -7.838356162296618e-5 9.001934319627299e-5 -1.4131764538385097e-5 3.603789679714524e-5 -0.00011180501808753271 -6.045551282049059e-6 -0.00015407762605804915 -5.7409806058285545e-6 5.1870307806031467e-5 6.254892884413106e-5 -2.9445750834336582e-5 4.0996570251584335e-6 7.989989041478042e-5 5.6035586175374077e-5 -1.4257706817214027e-5 3.442505710068212e-5 4.985538050191626e-5; -3.286226457697843e-5 7.116601226021708e-5 -4.15813339481313e-6 -0.00015561588044642346 4.6677620032421246e-5 0.00017545267654219408 3.806805023551872e-7 -0.0002276218856581526 5.648838303619153e-5 4.2552883298919666e-5 -8.8710416109675e-5 1.8849925238607527e-5 3.752279765248412e-6 -4.505891230786999e-5 -7.086704683154194e-5 -0.00014479503262686448 -9.620661696084314e-5 0.00010202059818999055 0.00017278433550250842 -1.789723502719685e-5 -0.00019770909968195506 -0.0001219667592681094 -0.00020703888550764658 0.00014147040381663563 0.00010443949029882698 0.00011035715759367784 1.360500830340939e-6 8.433908986496139e-5 0.00018007584911407747 8.514423809681148e-6 -2.6069172251884462e-5 -8.292402891806152e-5; -0.00017980657479471705 0.00024446112025782406 7.396478418980086e-5 -0.0002136196960576644 3.7242764176536686e-5 1.4736269133794072e-5 0.0001366226827145707 2.9863697148027907e-5 3.47168754730061e-5 9.010158488547151e-5 -0.00019571177448356433 4.4904729532047025e-5 9.770061535735622e-6 -7.90403389486311e-5 -0.0003369000876203486 -4.9430767592073575e-5 4.495960480438479e-5 -5.654441678177726e-5 -6.96700066089494e-6 -0.00019470894379753953 5.109323343517696e-5 -0.00014014006204650042 -9.7986750677022e-5 -0.0001122695355092022 0.00031233905270949217 -9.595301866045517e-5 -0.00014004799207884675 4.642200316326408e-5 -4.7739081980902574e-5 7.010633659103584e-5 1.6200796619726213e-5 4.682745226330068e-5; -8.707791502237676e-5 -0.00016045294259091404 -7.225309299964217e-6 6.393517461257629e-5 0.00011965997319786588 0.00011464300397201168 -4.54710484138598e-7 8.086373046389994e-5 0.00010225556971856165 5.646594573628806e-5 0.00011646972044254061 0.00017300317623304866 2.547411341803254e-5 0.00020660982037080955 -4.300398731141527e-5 0.00012930984295091323 -1.0876056957927053e-5 0.00011079502647627679 0.00020138553728467438 -0.0001565996973018465 9.479314858608428e-6 3.5817138187136965e-5 -8.627792131726496e-7 -0.00014728690811314856 -4.714957330141975e-5 -0.00010079988359355636 2.8411604862788284e-5 -6.40292601834721e-5 0.00015295690892380145 -0.00017042327462111866 1.3586666549750098e-6 -0.00011035699216298325; -9.573348773018575e-5 -6.596403084302646e-5 4.3452674684080424e-5 0.0001086085367870683 0.00019122731925846927 5.4777113357978367e-5 8.066239849824373e-5 -6.302660306291173e-5 2.8400239055481803e-5 5.968140346623821e-5 4.951374018955726e-5 0.00012019933371731891 7.560977708009373e-5 3.4008492614810506e-5 -7.40320631568984e-6 -3.3512321285234095e-5 -0.00013196392221915754 8.263702063515544e-5 -1.6554612490727632e-5 0.0001184425246475442 -2.1372411471843687e-5 -5.917089850016113e-5 0.0002714622724607726 9.150468128893434e-5 -2.436880725043461e-5 -6.784395639158907e-5 2.7014029067791572e-5 -0.00012284992674441712 -0.00018385308333281611 9.90075832970615e-5 1.5374796087707215e-5 -9.662256609488611e-5; -0.0001386334265873324 0.00012131389618733525 4.466273409779281e-5 4.0077018155701514e-5 -0.000293017518316645 0.00010328569575795903 -0.00010059439276230318 6.60725267778643e-5 8.064584059755521e-5 -1.5016103617397162e-5 -8.330881294676601e-5 -4.471882905929094e-5 6.147137125371105e-5 -0.00012007379748976322 -4.8398131667590425e-5 -1.6257205572562293e-6 -7.702819178230204e-5 -5.706687491621391e-5 6.199510923468868e-5 6.226215143104288e-5 -5.092248150611338e-5 -0.00012103188831244262 -8.225184186013564e-5 -6.83589974243825e-5 -5.881170775975113e-5 6.492609051636674e-5 8.942851806640524e-5 6.348038684230833e-5 -0.00019190394280593512 -0.00010644201441320344 3.5747502522860244e-6 -4.612950627344092e-5; 0.0001250565109943609 -3.803318398477016e-5 -0.00018813734644263657 2.5144961880325354e-5 -1.5799352725113988e-5 5.7106899179346915e-6 0.00012570146642920253 8.263042397392838e-5 -2.4938404778911087e-5 5.9742826094773044e-5 1.7748336147079163e-5 -1.7495322056308855e-5 8.44099776872094e-5 9.904286704786649e-5 -2.7823874945736187e-5 6.900179866297774e-5 8.423667892875199e-5 -0.00012994326246607512 0.00016383557519239006 -8.6307765771014e-5 0.00017196782570625947 8.854098993415589e-5 -0.00011011763857150038 -1.8453891273199884e-5 8.948652245398976e-5 -0.00011606780029305586 7.800594146283569e-6 -5.584691828754987e-5 -8.175605037887088e-5 -1.3834746853351565e-5 -9.989011599154583e-5 3.248557183487831e-5; 0.00011434342265331033 0.00012731274434102046 0.00018125484599934054 -6.417941888661596e-6 0.00016003860470575705 -2.7764200452097264e-5 -0.00015557107438596475 -4.889421073401694e-5 0.00010352732603407882 -0.00012203002300609445 -2.6824847039266858e-5 1.8943287402204494e-5 4.4935731027201774e-5 -0.00010623089950329312 2.217705075053717e-6 -0.0001845766357591615 -2.8979652809521424e-5 -2.7130490009744172e-5 3.68235294145288e-5 -0.00012809090297466653 0.00017954646570343495 6.724961964848815e-5 6.213399571336061e-5 7.354429068712e-5 -8.913717213815875e-5 8.05079059928416e-5 9.043319256945682e-5 0.00011347570650014396 -2.4455589694285724e-5 -0.00014946056511050618 0.0001902121027951816 -0.0001872933910208075; 9.272676705521143e-5 1.8322835406517704e-5 7.896366021967646e-5 0.00017118274134490438 -0.00012508947967644816 2.2917257031868047e-5 6.254931812081441e-5 0.00011682660131853179 -3.7229595742887346e-5 -7.725272136367971e-5 -1.972325245945651e-5 -1.986555927642713e-5 2.5175235881113238e-5 -5.4809451664102274e-5 0.0001604712657201476 4.3928535736040505e-6 -6.932562375070117e-5 7.142987904743973e-5 2.5499685383050703e-5 -3.063113164599101e-5 0.00016012533759136348 -7.974486053781748e-5 3.227007853937703e-5 0.00010474028257094274 -4.927118554106664e-5 -3.3435405763798376e-5 0.00020111128704528649 -0.00013596040063635267 0.00015646074333132401 -0.00012764114345982755 0.00010554667695332115 7.906899175661163e-6; 7.832724304684747e-5 0.00011860259337631721 5.2670081005678974e-5 -7.044250878457183e-5 3.933275229578696e-5 1.6428454274902315e-5 -0.00011026025231180859 -4.351799861829582e-5 0.00022462637798676126 7.477503322811628e-5 -9.054853353369269e-5 0.0001636809488460592 -3.6605536932576863e-5 5.4679802362124905e-5 -2.689984967070993e-5 4.437349571312617e-5 -1.5757608251401417e-5 3.40711799268775e-5 6.963734905775995e-6 -0.00011319070244858188 -1.3053092059964766e-5 -4.121985830201956e-5 3.6057756462149665e-5 9.12644850374371e-5 7.24840451781786e-5 -0.00016864608687533223 7.967846113538016e-5 2.618102235067694e-5 -0.00015273812232258918 -1.927561015540892e-5 6.645587063908374e-5 -9.559390809804468e-5; 4.395724791089245e-5 0.00014572366963243983 -1.430688170961995e-5 -7.624178651617007e-5 -2.9589010225158635e-5 0.0001445509162322753 4.084467327907547e-5 6.83415248232083e-5 -9.741108333123053e-5 -0.000140145227121088 -1.690259777836923e-5 1.7843226672134975e-5 -0.00010839004498570191 4.6790069248396125e-5 0.00019295690181304044 -6.057053796843751e-5 -0.000136380311957456 -3.047553654773248e-5 0.00010375873280559563 0.00019073496987680766 6.412655721426998e-7 -0.00013129272956297842 -0.00010533097047022557 -1.7868586653043936e-5 0.00011524378096788207 -1.684138878494626e-5 -0.0001623334926961828 0.0001098260301687941 -5.975628454852906e-7 -0.00013197998741538395 -0.0001310086761777206 8.566278850645178e-6; 9.623619802120242e-6 -5.630430780572467e-5 -4.3869965453516974e-5 0.00024475484212755575 0.00017727959027408977 -4.4379839097267536e-5 -8.231992717471553e-5 0.00010994532465131353 -6.6913481771491425e-6 4.381102711455937e-6 4.286832961381729e-5 -0.00012954457372531874 -0.00011219640612241469 -6.590277655620708e-5 6.441599077672971e-5 0.00012012449121696296 1.5023506306285124e-5 -0.00011764798284846008 0.0001240260561405437 -0.00021996973839693348 6.367595312779148e-5 -9.014393902022972e-5 0.00010708529850828807 -0.00020586807397764752 0.0001277812942805455 7.886618084169345e-5 -0.00013825837697938672 -6.023945854965306e-5 2.3244555335373996e-5 -3.649894381512534e-5 8.609589246928112e-5 2.154942455829471e-5; 7.344085085115635e-5 9.494051979764576e-5 -7.020050773952866e-5 -3.47932569051327e-5 -1.9189931240717726e-5 -3.827763660900955e-5 0.00011976364973143876 -2.1197418878173714e-5 -8.067384127151951e-5 -3.2449034311313e-5 -7.22589041778535e-6 -2.4172878088748843e-5 -3.2152495382789145e-5 3.2865585548833235e-5 -2.211490258140586e-5 -4.670317006038299e-5 -0.0002356876744082825 -3.964007422418125e-5 -3.4805797018080755e-5 0.0001779288481562698 7.392990434219423e-5 -0.00010842721761527265 1.9616254089313873e-5 1.4932683793275775e-5 0.00014690596932688015 -6.202380112462474e-5 -4.1721903958560575e-5 0.00020422443546031936 3.432314175789525e-5 1.6616160305246882e-5 -0.00014446736398475972 6.397311286910648e-5; -2.889110084245857e-5 -9.694335068663901e-5 2.623602693754153e-5 -3.555578342959509e-5 1.9832140137146786e-5 -0.00016543909925125145 -7.298345491610604e-5 -1.263863515808677e-5 0.00016205883974587405 -0.0001916511731137912 3.345883186235264e-5 2.9448911559007385e-5 -7.480290270498576e-5 -6.5811576091851305e-6 2.4714913419702998e-5 0.00016499298606911512 7.270861428393781e-6 -0.00022154319350695494 9.388262941181445e-5 5.77878587905397e-5 0.0001424398457715654 -3.490909267886745e-5 9.038901287974353e-5 -5.186711237478518e-6 -9.168380830990655e-5 0.00022661801875481217 2.6508766208710216e-5 0.0002563943368699689 -4.074092913973853e-5 -6.513892487012006e-5 8.830162795172779e-5 0.00012998042319347757; 3.4253720196827494e-5 1.798015150689254e-5 0.00016944630956550123 0.00018952923314919035 -8.010951237246969e-5 6.78153261569533e-5 0.00012073298025916682 1.5524204764910925e-5 2.149263277806693e-5 -0.00013182813231560087 -1.6381275007925054e-5 -9.910221374320468e-5 1.7636186067648297e-5 -5.268821437220784e-5 0.00013420120708449297 0.0001293170604649312 2.0701548829489878e-5 -7.521463371540164e-5 -8.710742654238543e-5 -0.00025061236042256115 -4.8143643970444945e-5 -5.369545428856913e-5 8.907058841123349e-5 -0.00012929745239398095 3.539231921423221e-6 0.00019203456363448267 -0.00014134440093493936 0.00011003736622204161 2.023970560093449e-5 2.5263379038769733e-6 -4.822022082404726e-6 0.0001771006315275394; 0.00010651349173860798 3.9165310846895345e-5 7.680510923966967e-5 0.00018133198198631633 8.555243283046649e-5 6.65254034917068e-5 -0.00012029204783027752 -7.923485219942257e-5 -0.00020872269062090432 -1.1949828438789084e-5 -0.00013770113702628667 -5.8760274731300263e-5 -4.9586103449089304e-5 -9.114579126469563e-5 -0.00010791454525895475 2.2212533332661305e-5 2.3586697972516312e-5 0.00013769112291049437 0.00011113568933217088 -9.670562696408242e-5 -9.732571317579523e-5 8.424068875340751e-6 0.00017610692764867306 9.734488292599335e-5 1.8883087537894795e-6 1.4113784056119665e-5 -5.9431841981110864e-5 -1.222159000315467e-5 -8.046195700297032e-5 -6.96678992593451e-5 0.0002334657171392091 -6.003854406879061e-5; -3.876086405363789e-5 0.000145612443948611 -4.148602304632778e-5 8.296301463849755e-5 -6.987636218547931e-5 0.00013355839407302655 -0.00011680727105124031 4.3204024863198634e-6 3.7165725434877764e-5 -4.780718584663334e-5 -9.478211789393522e-5 5.348930360048908e-5 -1.4913006206934854e-5 8.296735838519333e-5 2.3375410095351004e-6 -1.0566429163756406e-5 -0.0001082396781654274 -7.448145400269038e-5 -3.021695622885222e-5 7.662169743560146e-5 0.00014964493972946297 -0.0001151702460716674 -3.5049489024114195e-5 -3.067204009277854e-5 -3.2885456945411235e-6 -3.6294288956579837e-5 7.326320500207757e-7 -3.555814030697972e-5 4.464006203341562e-5 8.841101886935429e-5 6.585965390548024e-5 -0.00017228935096647653; -1.2483372642958471e-5 0.00012089655740529559 0.00014399012673057686 4.577739912311878e-5 -0.00011504468181991542 -5.967454739947039e-6 6.013757342964474e-6 6.874554912902037e-5 8.820345670040062e-6 6.585115557038457e-6 -8.073531148330143e-6 8.190084031605252e-6 8.11826490691684e-5 0.00016108827787794465 2.6274885954248864e-5 -3.101919116924134e-5 9.509940014327816e-6 4.0795067093505825e-5 -0.0001408103393030505 3.1310727310599164e-6 2.3512846951414083e-5 -8.18591846607777e-5 -0.00010960053384659647 -0.0001649685267464404 4.406858920637707e-6 -6.639141554368278e-5 -0.00010153624077683168 7.491944075073239e-6 0.00010798034293220528 3.212380636360881e-5 0.00019854514050640496 6.840170920005323e-5; -0.00017579407514072337 4.489067422460228e-5 -7.197556366128503e-8 2.2736783911255665e-5 4.300883382399852e-6 -0.00012200352440355486 4.1341462100405944e-5 2.3286806289109545e-5 4.146766358522396e-5 8.13425166475701e-6 8.115635345223869e-5 1.301165801911046e-5 -1.997599039109328e-5 -0.0001287773026991497 -9.633182863707405e-5 2.8751785329092656e-5 -5.3078352458537016e-5 -5.785451295318533e-5 -6.204550091874262e-5 5.9304502691390684e-5 2.9215069197227447e-5 9.509748841870187e-5 -3.0426162731007075e-5 0.0001710924573568783 0.00020654974131380363 5.361922948273493e-5 0.00010196792781121315 0.000206938597592508 2.0896103059054496e-5 1.660268234323378e-5 -7.48372019291711e-5 0.0001276465066336227; -1.60281667731119e-5 -1.9727156303778913e-5 2.5624336795805126e-5 0.0002212187339510293 0.0001836789690615149 4.1394736636921116e-5 7.610411035879564e-5 0.00019931051998448856 7.185953496540945e-5 7.894572105309916e-5 -7.644175433505005e-5 4.332077356688684e-5 -1.3251165672921795e-5 -2.122252930253917e-5 -0.00016582142210519454 -0.00018792349668634117 -1.3796476868238477e-5 0.00027789486399437154 -0.00010559188898601651 0.00012077053021225195 3.485316325260262e-5 -4.4113997991150856e-5 3.98837348812216e-5 -4.367715313397303e-5 0.00016984150921510918 -4.0079544977704e-5 -8.422657059687666e-5 1.4083042752643364e-5 9.901982831267487e-6 4.940452914619832e-5 -3.41633183224602e-5 -7.691454606079752e-5; 4.177785845965673e-5 0.00014914023373420454 0.0001265711008818302 0.00017125432819738403 -6.546161133883859e-5 0.0003315608165939517 0.00011466683386969963 7.810161801895931e-5 6.979819332627229e-5 3.1925116818449625e-5 6.511150892033518e-5 -8.501502710715354e-5 6.257647070013419e-5 0.00011156811266117955 -9.155836854924752e-5 9.050445547472268e-5 9.27792472429886e-5 -6.762877856099075e-6 -1.786228753190584e-5 -2.754007331532779e-5 -4.3994327679736175e-5 7.529884638642367e-5 0.0001145274337977617 -8.97755042751728e-5 -0.00017445579836932387 -0.00013224258404080248 9.718283141408786e-5 0.00013803185462158617 2.7227947757592813e-5 6.939284245162795e-5 -0.00015714337027021338 -3.728622945346778e-5; -0.00010186136050951435 1.8789323529485844e-5 1.1672055460358934e-5 3.7434796193989666e-5 0.0001484983383295165 -8.119666590692177e-5 1.222576492975152e-5 3.6238286792196844e-5 -6.603625506730367e-5 -0.00020148798494236216 -8.338564503110973e-5 -1.1614311280284342e-5 3.86197186332639e-5 5.2269193200768884e-5 0.00017673061092743052 -3.642733490895133e-5 0.00012131192643092138 -0.00012944446489317128 -9.729256116887287e-5 0.00011058760874104137 -4.195228303898123e-6 0.00019134560870835842 8.317471810979716e-5 6.72697730794587e-5 2.9985210584265498e-5 -0.00018312987076686354 7.863057698951943e-5 0.00014545877793232335 -3.1367528482684385e-5 0.00011239547320539483 0.00010905382960001258 7.624326981268932e-5; 0.00010192715870302892 -6.524511247321899e-5 7.142910197230408e-5 -8.020947263490455e-5 -1.0316943025699973e-5 -7.236264338629764e-5 -0.00015450624761784601 -7.583041571692478e-5 -0.00017704781914277154 5.233789868738397e-5 -3.881288632313899e-5 -7.597936184525612e-5 0.00018876205302162434 -0.00013852900139668946 -1.1571070735788319e-5 -2.5379029302584267e-5 -0.00022445549968310753 -4.258207611188304e-5 -0.00011458031060088479 -0.00017382442440053598 -1.91164707028623e-5 3.0380784828722702e-5 9.444572804581578e-5 -4.1856517618598036e-5 0.00017476641385669176 9.583537046650304e-5 8.147621718321227e-5 9.057154982672157e-5 -0.00016547185789007933 8.474836811741688e-5 4.487058338794814e-5 8.553353125548059e-5; 4.900922637414417e-5 -0.000154826828050608 -2.9895952805709688e-5 -7.672804507212121e-5 -7.277446432755613e-5 -1.7218015030562925e-5 -2.0765311758912264e-5 0.00015757541974987927 0.0001682118802515854 0.00012837107921466852 -0.00016522054805439193 2.8739767246117575e-5 -3.516213631275628e-5 -0.00010714442190266579 8.355939486742737e-5 -1.5250838017271136e-5 1.8060464086990835e-5 0.0001318892375517694 -0.00010067811102391554 0.0001557282141827111 -8.925007726550458e-5 0.00017002290975750095 0.00010146711271470889 -0.0002444862709429051 0.000163852213760656 1.818632723978417e-5 -3.342262583220846e-5 7.465219665997806e-5 -0.00013326545898355744 6.0555567203375304e-5 7.850177486641925e-5 -5.499545453250801e-5; -0.00011949762882137913 -0.00025112358742333346 0.00011172494816421646 9.275173960504754e-6 1.7618349028651443e-5 -1.1542232987953863e-5 3.660766344111685e-5 -2.8686171215320368e-6 -4.9379003376799704e-5 3.654852809560827e-5 -0.00012682495469630388 -8.364065598271848e-6 0.00018711091945008474 -2.9717128546307235e-5 3.275818346017579e-5 0.00015201551252104665 -0.00010105017316233472 -0.0001207756435003642 -9.991262578096234e-6 -0.00014404272258687495 -7.473465701036349e-5 -2.1085530880355043e-5 -0.00021641633828110176 2.972371987127045e-5 0.00014701153087955912 -0.00015106562239523654 2.60422963212703e-5 -0.00020045524468580904 7.843923196491998e-5 -6.924058141592579e-5 5.3967105140345805e-5 4.612562515123608e-6; -1.732914151749008e-5 -4.528500230468802e-5 -1.1448045914096435e-5 6.493302626234313e-5 9.073254605221222e-5 -1.1837639793015286e-5 -2.723165616577822e-5 -1.2551640546472034e-6 -8.463411231593561e-5 -4.551146137483005e-6 -2.6098174746802816e-5 3.6009650468376435e-5 7.6143304814989134e-6 -4.742366454399268e-5 -0.00021223918756532482 1.2166248236216557e-5 0.00012086919141633674 -4.928932193967629e-5 -4.523670449804695e-5 -0.00019525791740113269 2.342122152382682e-5 -0.00016151671170325227 -4.1513582434950056e-5 4.5835478342386437e-5 -0.0002270068931446655 -6.700325920780472e-5 -7.54863054661333e-5 -4.523866298604078e-6 6.766438437094556e-5 4.798178761314311e-5 0.00010201917157440278 -7.773211709524491e-5; 0.0001495518057810956 0.00020418711702514773 3.953914111772107e-5 -6.365618527335629e-6 6.240187704971275e-5 0.00015583859695763455 -9.599388666974163e-5 5.6562542714540895e-5 7.875502834504688e-5 -8.023809267608356e-6 -6.209254442072207e-5 3.4325022544369584e-5 6.87778787425581e-5 -8.38185465807251e-5 -9.155928509132557e-5 -2.6343574599006666e-5 -1.791681151079214e-5 -7.370268812227703e-5 3.1803815919564016e-5 -0.00022330733426205592 -8.918961237923293e-6 -0.00024460524090390393 0.0001476391748030524 7.990460054425742e-5 1.0085648146932791e-5 0.00013233675909869608 -0.00021251011875282548 -6.576830727569789e-5 -0.00010873914524270921 -2.6075373706400867e-5 -8.926604877050693e-5 -8.430424585530198e-5], bias = [1.921786307209035e-9; 8.789190050134396e-11; 1.2504148812771212e-9; 2.759638658565189e-9; -4.0864654563959214e-9; -1.5256145600285591e-9; -7.257926362306835e-10; -2.32442960482532e-9; 2.26637932249765e-9; 2.085537853776543e-9; -3.0927651263003428e-9; 1.1204678255460235e-9; 1.224877475321225e-9; 2.7271956201550424e-9; 1.020909304245852e-9; -6.646559494382461e-10; 3.899342734955543e-11; -8.234145849406738e-11; 1.581324318981226e-9; 1.3057169819360422e-9; 1.4432009549384312e-10; -3.935652982223644e-10; 1.2538523267575744e-9; 1.9956939078962535e-9; 2.55591752995915e-9; 4.101057123727002e-9; 2.329851411471181e-9; -1.8697572701351324e-9; 8.933663432767605e-10; -2.903453407028585e-9; -2.9091078170073337e-9; -9.91884728601028e-10;;]), layer_4 = (weight = [-0.0005572566820208557 -0.0007937026262524729 -0.0006027371350159636 -0.0008097167570915016 -0.0006632364353912129 -0.0007586931955229081 -0.0006962550015859167 -0.0007105567364154836 -0.0006658085334180905 -0.0006602566700924333 -0.0006626099449352349 -0.0007211122134551628 -0.0006367930196168518 -0.0007610696972092854 -0.0007117310752981213 -0.0005740901170262534 -0.0007709460867192456 -0.0006457321711362864 -0.0006559189228036226 -0.00071990248582105 -0.0007860558927556543 -0.00069686912726478 -0.0005244937356517977 -0.0009616786115207227 -0.0007539177071414011 -0.0006872892690566108 -0.0006167645875060232 -0.0006239984997886235 -0.0005674648472694767 -0.0006296852286443204 -0.0008124558416854573 -0.0007791480513692754; 0.00014216770893870395 5.398784074717275e-5 0.00023440740675234172 0.00018101927179873937 0.00038097963229907544 0.0004179167254411029 0.00016871553604570189 0.0002684071421866321 0.00029311844363497764 -4.684615903553573e-6 0.0001715444594282229 0.00015608806149225427 0.0002515337605158771 0.00022016138424090162 0.00030322691643611805 0.00015330975900653944 0.0002746350862441426 0.0002501048844999265 0.0003728965915869229 0.00032248962985238777 0.0003586351545196296 0.00018497025779880998 0.0003025448352555981 0.00021959541944993648 0.0003294169957206736 0.00028422808379670095 0.00020632328939831497 0.00032818817391118334 5.102628667107437e-5 0.00014884949250286642 0.00017417684072532018 0.00026142470856713477], bias = [-0.0006732848512731586; 0.00023393989498430928;;]))

      Visualizing the Results

      Let us now plot the loss over time

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Iteration", ylabel="Loss")
      +
      +    lines!(ax, losses; linewidth=4, alpha=0.75)
      +    scatter!(ax, 1:length(losses), losses; markershape=:circle,
      +        markersize=12, markeralpha=0.25, strokewidth=2)
      +
      +    fig
      +end

      Finally let us visualize the results

      julia
      prob_nn = ODEProblem(ODE_model, u0, tspan, res.u)
      +soln_nn = Array(solve(prob_nn, RK4(); u0, p=res.u, saveat=tsteps, dt, adaptive=false))
      +waveform_nn_trained = first(compute_waveform(
      +    dt_data, soln_nn, mass_ratio, ode_model_params))
      +
      +begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="Time", ylabel="Waveform")
      +
      +    l1 = lines!(ax, tsteps, waveform; linewidth=2, alpha=0.75)
      +    s1 = scatter!(ax, tsteps, waveform; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    l2 = lines!(ax, tsteps, waveform_nn; linewidth=2, alpha=0.75)
      +    s2 = scatter!(ax, tsteps, waveform_nn; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    l3 = lines!(ax, tsteps, waveform_nn_trained; linewidth=2, alpha=0.75)
      +    s3 = scatter!(ax, tsteps, waveform_nn_trained; markershape=:circle,
      +        markeralpha=0.25, alpha=0.5, strokewidth=2, markersize=12)
      +
      +    axislegend(ax, [[l1, s1], [l2, s2], [l3, s3]],
      +        ["Waveform Data", "Waveform Neural Net (Untrained)", "Waveform Neural Net"];
      +        position=:lb)
      +
      +    fig
      +end

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.600 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/beginner/1_Basics.html b/v0.5.30/tutorials/beginner/1_Basics.html new file mode 100644 index 000000000..876cba510 --- /dev/null +++ b/v0.5.30/tutorials/beginner/1_Basics.html @@ -0,0 +1,262 @@ + + + + + + Julia & Lux for the Uninitiated | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Julia & Lux for the Uninitiated

      This is a quick intro to Lux loosely based on:

      1. PyTorch's tutorial.

      2. Flux's tutorial.

      3. Jax's tutorial.

      It introduces basic Julia programming, as well Zygote, a source-to-source automatic differentiation (AD) framework in Julia. We'll use these tools to build a very simple neural network. Let's start with importing Lux.jl

      julia
      using Lux, Random

      Now let us control the randomness in our code using proper Pseudo Random Number Generator (PRNG)

      julia
      rng = Random.default_rng()
      +Random.seed!(rng, 0)
      Random.TaskLocalRNG()

      Arrays

      The starting point for all of our models is the Array (sometimes referred to as a Tensor in other frameworks). This is really just a list of numbers, which might be arranged into a shape like a square. Let's write down an array with three elements.

      julia
      x = [1, 2, 3]
      3-element Vector{Int64}:
      + 1
      + 2
      + 3

      Here's a matrix – a square array with four elements.

      julia
      x = [1 2; 3 4]
      2×2 Matrix{Int64}:
      + 1  2
      + 3  4

      We often work with arrays of thousands of elements, and don't usually write them down by hand. Here's how we can create an array of 5×3 = 15 elements, each a random number from zero to one.

      julia
      x = rand(rng, 5, 3)
      5×3 Matrix{Float64}:
      + 0.455238   0.746943   0.193291
      + 0.547642   0.746801   0.116989
      + 0.773354   0.97667    0.899766
      + 0.940585   0.0869468  0.422918
      + 0.0296477  0.351491   0.707534

      There's a few functions like this; try replacing rand with ones, zeros, or randn.

      By default, Julia works stores numbers is a high-precision format called Float64. In ML we often don't need all those digits, and can ask Julia to work with Float32 instead. We can even ask for more digits using BigFloat.

      julia
      x = rand(BigFloat, 5, 3)
      5×3 Matrix{BigFloat}:
      + 0.981339    0.793159  0.459019
      + 0.043883    0.624384  0.56055
      + 0.164786    0.524008  0.0355555
      + 0.414769    0.577181  0.621958
      + 0.00823197  0.30215   0.655881
      julia
      x = rand(Float32, 5, 3)
      5×3 Matrix{Float32}:
      + 0.567794   0.369178   0.342539
      + 0.0985227  0.201145   0.587206
      + 0.776598   0.148248   0.0851708
      + 0.723731   0.0770206  0.839303
      + 0.404728   0.230954   0.679087

      We can ask the array how many elements it has.

      julia
      length(x)
      15

      Or, more specifically, what size it has.

      julia
      size(x)
      (5, 3)

      We sometimes want to see some elements of the array on their own.

      julia
      x
      5×3 Matrix{Float32}:
      + 0.567794   0.369178   0.342539
      + 0.0985227  0.201145   0.587206
      + 0.776598   0.148248   0.0851708
      + 0.723731   0.0770206  0.839303
      + 0.404728   0.230954   0.679087
      julia
      x[2, 3]
      0.58720636f0

      This means get the second row and the third column. We can also get every row of the third column.

      julia
      x[:, 3]
      5-element Vector{Float32}:
      + 0.34253937
      + 0.58720636
      + 0.085170805
      + 0.8393034
      + 0.67908657

      We can add arrays, and subtract them, which adds or subtracts each element of the array.

      julia
      x + x
      5×3 Matrix{Float32}:
      + 1.13559   0.738356  0.685079
      + 0.197045  0.40229   1.17441
      + 1.5532    0.296496  0.170342
      + 1.44746   0.154041  1.67861
      + 0.809456  0.461908  1.35817
      julia
      x - x
      5×3 Matrix{Float32}:
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0
      + 0.0  0.0  0.0

      Julia supports a feature called broadcasting, using the . syntax. This tiles small arrays (or single numbers) to fill bigger ones.

      julia
      x .+ 1
      5×3 Matrix{Float32}:
      + 1.56779  1.36918  1.34254
      + 1.09852  1.20114  1.58721
      + 1.7766   1.14825  1.08517
      + 1.72373  1.07702  1.8393
      + 1.40473  1.23095  1.67909

      We can see Julia tile the column vector 1:5 across all rows of the larger array.

      julia
      zeros(5, 5) .+ (1:5)
      5×5 Matrix{Float64}:
      + 1.0  1.0  1.0  1.0  1.0
      + 2.0  2.0  2.0  2.0  2.0
      + 3.0  3.0  3.0  3.0  3.0
      + 4.0  4.0  4.0  4.0  4.0
      + 5.0  5.0  5.0  5.0  5.0

      The x' syntax is used to transpose a column 1:5 into an equivalent row, and Julia will tile that across columns.

      julia
      zeros(5, 5) .+ (1:5)'
      5×5 Matrix{Float64}:
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0
      + 1.0  2.0  3.0  4.0  5.0

      We can use this to make a times table.

      julia
      (1:5) .* (1:5)'
      5×5 Matrix{Int64}:
      + 1   2   3   4   5
      + 2   4   6   8  10
      + 3   6   9  12  15
      + 4   8  12  16  20
      + 5  10  15  20  25

      Finally, and importantly for machine learning, we can conveniently do things like matrix multiply.

      julia
      W = randn(5, 10)
      +x = rand(10)
      +W * x
      5-element Vector{Float64}:
      +  1.2197981041108443
      + -2.62625877100596
      + -2.8573820474674845
      + -2.4319346874291314
      +  1.0108668577150213

      Julia's arrays are very powerful, and you can learn more about what they can do here.

      CUDA Arrays

      CUDA functionality is provided separately by the CUDA.jl package. If you have a GPU and LuxCUDA is installed, Lux will provide CUDA capabilities. For additional details on backends see the manual section.

      You can manually add CUDA. Once CUDA is loaded you can move any array to the GPU with the cu function (or the gpu function exported by `Lux``), and it supports all of the above operations with the same syntax.

      julia
      using LuxCUDA, LuxAMDGPU
      +
      +if LuxCUDA.functional()
      +    x_cu = cu(rand(5, 3))
      +    @show x_cu
      +elseif LuxAMDGPU.functional() # Similarly, for AMDGPU
      +    x_amd = roc(rand(5, 3))
      +    @show x_amd
      +end
      5×3 CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}:
      + 0.857126  0.681728  0.73806
      + 0.191956  0.506485  0.622865
      + 0.857257  0.663036  0.239756
      + 0.54452   0.503186  0.27993
      + 0.833518  0.975649  0.967811

      (Im)mutability

      Lux as you might have read is Immutable by convention which means that the core library is built without any form of mutation and all functions are pure. However, we don't enforce it in any form. We do strongly recommend that users extending this framework for their respective applications don't mutate their arrays.

      julia
      x = reshape(1:8, 2, 4)
      2×4 reshape(::UnitRange{Int64}, 2, 4) with eltype Int64:
      + 1  3  5  7
      + 2  4  6  8

      To update this array, we should first copy the array.

      julia
      x_copy = copy(x)
      +view(x_copy, :, 1) .= 0
      +
      +println("Original Array ", x)
      +println("Mutated Array ", x_copy)
      Original Array [1 3 5 7; 2 4 6 8]
      +Mutated Array [0 3 5 7; 0 4 6 8]

      Note that our current default AD engine (Zygote) is unable to differentiate through this mutation, however, for these specialized cases it is quite trivial to write custom backward passes. (This problem will be fixed once we move towards Enzyme.jl)

      Managing Randomness

      We rely on the Julia StdLib Random for managing the randomness in our execution. First, we create an PRNG (pseudorandom number generator) and seed it.

      julia
      rng = Xoshiro(0)     # Creates a Xoshiro PRNG with seed 0
      Random.Xoshiro(0xdb2fa90498613fdf, 0x48d73dc42d195740, 0x8c49bc52dc8a77ea, 0x1911b814c02405e8, 0x22a21880af5dc689)

      If we call any function that relies on rng and uses it via randn, rand, etc. rng will be mutated. As we have already established we care a lot about immutability, hence we should use Lux.replicate on PRNGs before using them.

      First, let us run a random number generator 3 times with the replicated rng.

      julia
      random_vectors = Vector{Vector{Float64}}(undef, 3)
      +for i in 1:3
      +    random_vectors[i] = rand(Lux.replicate(rng), 10)
      +    println("Iteration $i ", random_vectors[i])
      +end
      +@assert random_vectors[1]  random_vectors[2]  random_vectors[3]
      Iteration 1 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 2 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 3 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]

      As expected we get the same output. We can remove the replicate call and we will get different outputs.

      julia
      for i in 1:3
      +    println("Iteration $i ", rand(rng, 10))
      +end
      Iteration 1 [0.4552384158732863, 0.5476424498276177, 0.7733535276924052, 0.9405848223512736, 0.02964765308691042, 0.74694291453392, 0.7468008914093891, 0.9766699015845924, 0.08694684883050086, 0.35149138733595564]
      +Iteration 2 [0.018743665453639813, 0.8601828553599953, 0.6556360448565952, 0.7746656838366666, 0.7817315740767116, 0.5553797706980106, 0.1261990389976131, 0.4488101521328277, 0.624383955429775, 0.05657739601024536]
      +Iteration 3 [0.19597391412112541, 0.6830945313415872, 0.6776220912718907, 0.6456416023530093, 0.6340362477836592, 0.5595843665394066, 0.5675557670686644, 0.34351700231383653, 0.7237308297251812, 0.3691778381831775]

      Automatic Differentiation

      Julia has quite a few (maybe too many) AD tools. For the purpose of this tutorial, we will use:

      1. ForwardDiff.jl – For Jacobian-Vector Product (JVP)

      2. Zygote.jl – For Vector-Jacobian Product (VJP)

      Slight Detour: We have had several questions regarding if we will be considering any other AD system for the reverse-diff backend. For now we will stick to Zygote.jl, however once we have tested Lux extensively with Enzyme.jl, we will make the switch.

      Even though, theoretically, a VJP (Vector-Jacobian product - reverse autodiff) and a JVP (Jacobian-Vector product - forward-mode autodiff) are similar—they compute a product of a Jacobian and a vector—they differ by the computational complexity of the operation. In short, when you have a large number of parameters (hence a wide matrix), a JVP is less efficient computationally than a VJP, and, conversely, a JVP is more efficient when the Jacobian matrix is a tall matrix.

      julia
      using ComponentArrays, ForwardDiff, Zygote

      Gradients

      For our first example, consider a simple function computing f(x)=12xTx, where f(x)=x

      julia
      f(x) = x' * x / 2
      +∇f(x) = x  # `∇` can be typed as `\nabla<TAB>`
      +v = randn(rng, Float32, 4)
      4-element Vector{Float32}:
      + -0.4051151
      + -0.4593922
      +  0.92155594
      +  1.1871622

      Let's use ForwardDiff and Zygote to compute the gradients.

      julia
      println("Actual Gradient: ", ∇f(v))
      +println("Computed Gradient via Reverse Mode AD (Zygote): ", only(Zygote.gradient(f, v)))
      +println("Computed Gradient via Forward Mode AD (ForwardDiff): ", ForwardDiff.gradient(f, v))
      Actual Gradient: Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]
      +Computed Gradient via Reverse Mode AD (Zygote): Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]
      +Computed Gradient via Forward Mode AD (ForwardDiff): Float32[-0.4051151, -0.4593922, 0.92155594, 1.1871622]

      Note that AD.gradient will only work for scalar valued outputs.

      Jacobian-Vector Product

      I will defer the discussion on forward-mode AD to https://book.sciml.ai/notes/08-Forward-Mode_Automatic_Differentiation_(AD)_via_High_Dimensional_Algebras/. Here let us just look at a mini example on how to use it.

      julia
      f(x) = x .* x ./ 2
      +x = randn(rng, Float32, 5)
      +v = ones(Float32, 5)
      5-element Vector{Float32}:
      + 1.0
      + 1.0
      + 1.0
      + 1.0
      + 1.0

      Construct the pushforward function. We will write out the function here but in practice we recommend using SparseDiffTools.auto_jacvec!

      First we need to create a Tag for ForwardDiff. It is enough to know that this is something that you must do. For more details, see the ForwardDiff Documentation!

      julia
      struct TestTag end

      Going in the details of what is function is doing is beyond the scope of this tutorial. But in short, it is constructing a new Dual Vector with the partials set to the input to the pushforward function. When this is propagated through the original function we get the value and the jvp

      julia
      function pushforward_forwarddiff(f, x)
      +    T = eltype(x)
      +    function pushforward(v)
      +        v_ = reshape(v, axes(x))
      +        y = ForwardDiff.Dual{
      +            ForwardDiff.Tag{TestTag, T}, T, 1}.(x, ForwardDiff.Partials.(tuple.(v_)))
      +        res = vec(f(y))
      +        return ForwardDiff.value.(res), vec(ForwardDiff.partials.(res, 1))
      +    end
      +    return pushforward
      +end
      +
      +pf_f = pushforward_forwarddiff(f, x)
      (::Main.var"##225".var"#pushforward#1"{typeof(Main.var"##225".f), Vector{Float32}, DataType}) (generic function with 1 method)

      Compute the jvp.

      julia
      val, jvp = pf_f(v)
      +println("Computed Value: f(", x, ") = ", val)
      +println("JVP: ", jvp[1])
      Computed Value: f(Float32[-0.877497, 1.1953009, -0.057005208, 0.25055695, 0.09351656]) = Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736]
      +JVP: -0.877497

      Vector-Jacobian Product

      Using the same function and inputs, let us compute the VJP.

      julia
      val, pb_f = Zygote.pullback(f, x)
      (Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736], Zygote.var"#75#76"{Zygote.Pullback{Tuple{typeof(Main.var"##225".f), Vector{Float32}}, Tuple{Zygote.var"#3796#back#1207"{Zygote.var"#1203#1206"{Vector{Float32}, Vector{Float32}}}, Zygote.var"#3860#back#1233"{Zygote.ZBack{ChainRules.var"#slash_pullback_scalar#1558"{Vector{Float32}, Int64}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), Vector{Float32}}, Tuple{}}}}}(∂(f)))

      Compute the vjp.

      julia
      vjp = only(pb_f(v))
      +println("Computed Value: f(", x, ") = ", val)
      +println("VJP: ", vjp[1])
      Computed Value: f(Float32[-0.877497, 1.1953009, -0.057005208, 0.25055695, 0.09351656]) = Float32[0.3850005, 0.71437216, 0.0016247969, 0.031389393, 0.0043726736]
      +VJP: -0.877497

      Linear Regression

      Finally, now let us consider a linear regression problem. From a set of data-points {(xi,yi),i{1,,k},xiRn,yiRm}, we try to find a set of parameters W and b, s.t. fW,b(x)=Wx+b, which minimizes the mean squared error:

      L(W,b)i=1k12yifW,b(xi)22

      We can write f from scratch, but to demonstrate Lux, let us use the Dense layer.

      julia
      model = Dense(10 => 5)
      +
      +rng = Random.default_rng()
      +Random.seed!(rng, 0)
      Random.TaskLocalRNG()

      Let us initialize the parameters and states (in this case it is empty) for the model.

      julia
      ps, st = Lux.setup(rng, model)
      +ps = ps |> ComponentArray
      ComponentVector{Float32}(weight = Float32[-0.5583162 0.3457679 0.50863314 0.60294497 0.23095794 0.16602759 5.5791984f-6 0.61324424 -0.35419345 0.039559156; -0.05661944 -0.4899126 0.31236076 0.47100115 -0.5062956 -0.20445547 -0.03762182 0.5370978 0.22614014 0.27704597; 0.5198015 0.55730057 -0.34535396 -0.21587563 -0.12729146 -0.51019937 0.46597028 0.2918885 0.20849374 -0.4068233; 0.06026341 -0.11202827 0.31218112 0.14536527 -0.3413506 0.40088427 -0.48716235 -0.15096173 0.42526972 -0.3576447; 0.23414856 -0.5949539 -0.26137677 0.21756552 0.34443143 0.25046515 -0.049256783 -0.48404032 0.08254115 -0.5224755], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0;;])

      Set problem dimensions.

      julia
      n_samples = 20
      +x_dim = 10
      +y_dim = 5
      5

      Generate random ground truth W and b.

      julia
      W = randn(rng, Float32, y_dim, x_dim)
      +b = randn(rng, Float32, y_dim)
      5-element Vector{Float32}:
      +  0.68468636
      + -0.57578707
      +  0.0594993
      + -0.9436797
      +  1.5164032

      Generate samples with additional noise.

      julia
      x_samples = randn(rng, Float32, x_dim, n_samples)
      +y_samples = W * x_samples .+ b .+ 0.01f0 .* randn(rng, Float32, y_dim, n_samples)
      +println("x shape: ", size(x_samples), "; y shape: ", size(y_samples))
      x shape: (10, 20); y shape: (5, 20)

      For updating our parameters let's use Optimisers.jl. We will use Stochastic Gradient Descent (SGD) with a learning rate of 0.01.

      julia
      using Optimisers
      +
      +opt = Optimisers.Descent(0.01f0)
      Descent(0.01f0)

      Initialize the initial state of the optimiser

      julia
      opt_state = Optimisers.setup(opt, ps)
      Leaf(Descent(0.01), nothing)

      Define the loss function

      julia
      function mse(model, ps, st, X, y)
      +    y_pred, st_new = model(X, ps, st)
      +    return sum(abs2, y_pred .- y), st_new
      +end
      +mse(weight, bias, X, y) = sum(abs2, weight * X .+ bias .- y)
      +loss_function(ps, X, y) = mse(model, ps, st, X, y)
      +
      +println("Loss Value with ground true parameters: ", mse(W, b, x_samples, y_samples))
      +
      +for i in 1:100
      +    # In actual code, don't use globals. But here I will simply for the sake of
      +    # demonstration
      +    global ps, st, opt_state
      +    # Compute the gradient using the pullback API to update the states
      +    (loss, st), pb_f = Zygote.pullback(loss_function, ps, x_samples, y_samples)
      +    # We pass nothing as the seed for `st`, since we don't want to propagate any gradient
      +    # for st
      +    gs = pb_f((one(loss), nothing))[1]
      +    # Update model parameters
      +    # `Optimisers.update` can be used if mutation is not desired
      +    opt_state, ps = Optimisers.update!(opt_state, ps, gs)
      +    (i % 10 == 1 || i == 100) && println(lazy"Loss Value after $i iterations: $loss")
      +end
      Loss Value with ground true parameters: 0.009175307
      +┌ Warning: Assignment to `pb_f` in soft scope is ambiguous because a global variable by the same name exists: `pb_f` will be treated as a new local. Disambiguate by using `local pb_f` to suppress this warning or `global pb_f` to assign to the existing global variable.
      +└ @ /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs/src/tutorials/beginner/1_Basics.md:15
      +Loss Value after 1 iterations: 812.3374
      +Loss Value after 11 iterations: 5.479181
      +Loss Value after 21 iterations: 0.806523
      +Loss Value after 31 iterations: 0.1775011
      +Loss Value after 41 iterations: 0.046897847
      +Loss Value after 51 iterations: 0.015412594
      +Loss Value after 61 iterations: 0.007253055
      +Loss Value after 71 iterations: 0.0050410302
      +Loss Value after 81 iterations: 0.0044205473
      +Loss Value after 91 iterations: 0.004241652
      +Loss Value after 100 iterations: 0.0041917767

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.518 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/beginner/2_PolynomialFitting.html b/v0.5.30/tutorials/beginner/2_PolynomialFitting.html new file mode 100644 index 000000000..23cee6c27 --- /dev/null +++ b/v0.5.30/tutorials/beginner/2_PolynomialFitting.html @@ -0,0 +1,139 @@ + + + + + + Fitting a Polynomial using MLP | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Fitting a Polynomial using MLP

      In this tutorial we will fit a MultiLayer Perceptron (MLP) on data generated from a polynomial.

      Package Imports

      julia
      using Lux, ADTypes, LuxAMDGPU, LuxCUDA, Optimisers, Printf, Random, Statistics, Zygote
      +using CairoMakie

      Dataset

      Generate 128 datapoints from the polynomial y=x22x.

      julia
      function generate_data(rng::AbstractRNG)
      +    x = reshape(collect(range(-2.0f0, 2.0f0, 128)), (1, 128))
      +    y = evalpoly.(x, ((0, -2, 1),)) .+ randn(rng, (1, 128)) .* 0.1f0
      +    return (x, y)
      +end
      generate_data (generic function with 1 method)

      Initialize the random number generator and fetch the dataset.

      julia
      rng = MersenneTwister()
      +Random.seed!(rng, 12345)
      +
      +(x, y) = generate_data(rng)
      (Float32[-2.0 -1.968504 -1.9370079 -1.9055119 -1.8740157 -1.8425196 -1.8110236 -1.7795275 -1.7480315 -1.7165354 -1.6850394 -1.6535434 -1.6220472 -1.5905511 -1.5590551 -1.527559 -1.496063 -1.464567 -1.4330709 -1.4015749 -1.3700787 -1.3385826 -1.3070866 -1.2755905 -1.2440945 -1.2125984 -1.1811024 -1.1496063 -1.1181102 -1.0866141 -1.0551181 -1.023622 -0.992126 -0.96062994 -0.92913383 -0.8976378 -0.86614174 -0.8346457 -0.8031496 -0.77165353 -0.7401575 -0.70866144 -0.6771653 -0.6456693 -0.61417323 -0.5826772 -0.5511811 -0.51968503 -0.48818898 -0.4566929 -0.42519686 -0.39370078 -0.36220473 -0.33070865 -0.2992126 -0.26771653 -0.23622048 -0.20472442 -0.17322835 -0.14173229 -0.11023622 -0.07874016 -0.047244094 -0.015748031 0.015748031 0.047244094 0.07874016 0.11023622 0.14173229 0.17322835 0.20472442 0.23622048 0.26771653 0.2992126 0.33070865 0.36220473 0.39370078 0.42519686 0.4566929 0.48818898 0.51968503 0.5511811 0.5826772 0.61417323 0.6456693 0.6771653 0.70866144 0.7401575 0.77165353 0.8031496 0.8346457 0.86614174 0.8976378 0.92913383 0.96062994 0.992126 1.023622 1.0551181 1.0866141 1.1181102 1.1496063 1.1811024 1.2125984 1.2440945 1.2755905 1.3070866 1.3385826 1.3700787 1.4015749 1.4330709 1.464567 1.496063 1.527559 1.5590551 1.5905511 1.6220472 1.6535434 1.6850394 1.7165354 1.7480315 1.7795275 1.8110236 1.8425196 1.8740157 1.9055119 1.9370079 1.968504 2.0], [8.11723579535073 7.8972862806322315 7.667572185253954 7.493641443881164 7.328542256257643 7.1081451188446065 6.754145700236098 6.73844851250885 6.698323804024227 6.3637494708272655 6.270117709011731 6.2419372753805 5.816280759896085 5.718319527208828 5.741347639508506 5.258118446989299 5.268165780092538 5.195746082529355 5.032704772846244 4.733409783966572 4.520239616672976 4.369386593776045 4.107888442446331 4.182845399340577 4.002249800810884 3.8969011895086174 3.910820824989613 3.646440085736948 3.3343752660206305 3.3980378243437745 3.1887817476268587 2.9930802717826603 3.018980452144523 2.690492107796345 2.8576513349182378 2.4778283273281008 2.452401424624867 2.401875695877283 2.2896425232872755 2.2812518842985035 1.9742292519472466 1.7663454774622869 1.7829663021691418 1.6248666914928798 1.635090436697959 1.4887378757184528 1.4396068206428336 1.5047223947023354 1.2439428212858357 1.1770575798169982 1.0519113712665473 0.8008025630753797 0.8011788202541421 0.7702484835053167 0.9010273188596704 0.48114290312426095 0.4605012716399809 0.42308333113261615 0.2890108900859864 0.3324716507588617 0.2126899641074972 0.2560113968739265 0.08350192481301627 0.046225582753114294 -0.16118930624459 -0.013928769802494537 -0.030805824695545894 -0.10629780224701328 -0.17643440564041185 -0.2494508100897751 -0.3322350480467481 -0.45414851684613733 -0.6965624404632386 -0.38861245182183696 -0.4708530312086873 -0.6274991143463677 -0.5617763080815885 -0.6438360803492721 -0.7565600800322707 -0.5662591600023589 -0.6591533520776037 -0.9166793344639054 -0.8520467822193756 -0.9507226194240974 -1.0248823046771698 -0.97772916365376 -0.8199294436184201 -0.9080088282844027 -0.9682665790685976 -1.031816361263047 -0.9296919748814573 -1.1145618706755287 -1.2139119971536336 -1.0157839085777947 -0.9417175810509869 -0.9783498813733602 -0.9123675448444001 -1.138088633455826 -1.1212038088290894 -0.911429094488635 -1.023486657428913 -0.9287179111905346 -1.0396518660677925 -1.0370046468920306 -0.9846375721966646 -0.833026219703481 -0.8200258902651266 -0.789500663251252 -0.9068267920931062 -0.7284236770750803 -0.7093213401368348 -0.7048862544448803 -0.6215870033126495 -0.5892481295457608 -0.8462913756395639 -0.5544688796856879 -0.5805399434794658 -0.5761396334948753 -0.5851955365208916 -0.5561461874821676 -0.1969227628706652 -0.34073487813889014 -0.2738635064414512 -0.1425063756241582 -0.18330825579933746 -0.054321035831595324 -0.21213293699653427 0.049985105882301])

      Let's visualize the dataset

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    l = lines!(ax, x[1, :], x -> evalpoly(x, (0, -2, 1)); linewidth=3, color=:blue)
      +    s = scatter!(ax, x[1, :], y[1, :]; markersize=12, alpha=0.5,
      +        color=:orange, strokecolor=:black, strokewidth=2)
      +
      +    axislegend(ax, [l, s], ["True Quadratic Function", "Data Points"])
      +
      +    fig
      +end

      Neural Network

      For this problem, you should not be using a neural network. But let's still do that!

      julia
      model = Chain(Dense(1 => 16, relu), Dense(16 => 1))
      Chain(
      +    layer_1 = Dense(1 => 16, relu),     # 32 parameters
      +    layer_2 = Dense(16 => 1),           # 17 parameters
      +)         # Total: 49 parameters,
      +          #        plus 0 states.

      Optimizer

      We will use Adam from Optimisers.jl

      julia
      opt = Adam(0.03f0)
      Adam(0.03, (0.9, 0.999), 1.0e-8)

      Loss Function

      We will use the Lux.Training API so we need to ensure that our loss function takes 4 inputs – model, parameters, states and data. The function must return 3 values – loss, updated_state, and any computed statistics.

      julia
      function loss_function(model, ps, st, data)
      +    y_pred, st = Lux.apply(model, data[1], ps, st)
      +    mse_loss = mean(abs2, y_pred .- data[2])
      +    return mse_loss, st, ()
      +end
      loss_function (generic function with 1 method)

      Training

      First we will create a Lux.Experimental.TrainState which is essentially a convenience wrapper over parameters, states and optimizer states.

      julia
      tstate = Lux.Experimental.TrainState(rng, model, opt)
      Lux.Experimental.TrainState{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.relu), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, @NamedTuple{layer_1::@NamedTuple{weight::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, bias::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, layer_2::@NamedTuple{weight::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, bias::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}}, @NamedTuple{layer_1::@NamedTuple{weight::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}, bias::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}}, layer_2::@NamedTuple{weight::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}, bias::Optimisers.Leaf{Optimisers.Adam, Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}}}}}}(Chain(), (layer_1 = (weight = Float32[0.36222202; 0.23371002; -0.49825558; -0.18142056; -0.13757975; -0.50849473; 0.13773328; -0.035294008; 0.21778254; 0.04964345; -0.56594235; -0.45329624; -0.08787567; 0.5648949; 0.5260752; -0.07562564;;], bias = Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;]), layer_2 = (weight = Float32[-0.14330137 -0.39328107 -0.18253882 -0.55998546 -0.5919335 -0.3069779 -0.39085856 -0.4838621 0.3979575 0.5851314 0.24242708 0.35374007 0.10175798 0.29761198 -0.34761065 -0.05758927], bias = Float32[0.0;;])), (layer_1 = NamedTuple(), layer_2 = NamedTuple()), (layer_1 = (weight = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], (0.9, 0.999))), bias = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], Float32[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;;], (0.9, 0.999)))), layer_2 = (weight = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0], Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0], (0.9, 0.999))), bias = Leaf(Adam(0.03, (0.9, 0.999), 1.0e-8), (Float32[0.0;;], Float32[0.0;;], (0.9, 0.999))))), 0)

      Now we will use Zygote for our AD requirements.

      julia
      vjp_rule = AutoZygote()
      ADTypes.AutoZygote()

      Finally the training loop.

      julia
      function main(tstate::Lux.Experimental.TrainState, vjp, data, epochs)
      +    data = data .|> gpu_device()
      +    for epoch in 1:epochs
      +        grads, loss, stats, tstate = Lux.Training.compute_gradients(
      +            vjp, loss_function, data, tstate)
      +        if epoch % 50 == 1 || epoch == epochs
      +            @printf "Epoch: %3d \t Loss: %.5g\n" epoch loss
      +        end
      +        tstate = Lux.Training.apply_gradients(tstate, grads)
      +    end
      +    return tstate
      +end
      +
      +dev_cpu = cpu_device()
      +dev_gpu = gpu_device()
      +
      +tstate = main(tstate, vjp_rule, (x, y), 250)
      +y_pred = dev_cpu(Lux.apply(tstate.model, dev_gpu(x), tstate.parameters, tstate.states)[1])
      Epoch:   1 	 Loss: 9.4373
      +Epoch:  51 	 Loss: 0.086228
      +Epoch: 101 	 Loss: 0.033642
      +Epoch: 151 	 Loss: 0.021989
      +Epoch: 201 	 Loss: 0.017344
      +Epoch: 250 	 Loss: 0.013794

      Let's plot the results

      julia
      begin
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    l = lines!(ax, x[1, :], x -> evalpoly(x, (0, -2, 1)); linewidth=3)
      +    s1 = scatter!(ax, x[1, :], y[1, :]; markersize=12, alpha=0.5,
      +        color=:orange, strokecolor=:black, strokewidth=2)
      +    s2 = scatter!(ax, x[1, :], y_pred[1, :]; markersize=12, alpha=0.5,
      +        color=:green, strokecolor=:black, strokewidth=2)
      +
      +    axislegend(ax, [l, s1, s2], ["True Quadratic Function", "Actual Data", "Predictions"])
      +
      +    fig
      +end

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.600 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/beginner/3_SimpleRNN.html b/v0.5.30/tutorials/beginner/3_SimpleRNN.html new file mode 100644 index 000000000..001f6eef9 --- /dev/null +++ b/v0.5.30/tutorials/beginner/3_SimpleRNN.html @@ -0,0 +1,404 @@ + + + + + + Training a Simple LSTM | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Training a Simple LSTM

      In this tutorial we will go over using a recurrent neural network to classify clockwise and anticlockwise spirals. By the end of this tutorial you will be able to:

      1. Create custom Lux models.

      2. Become familiar with the Lux recurrent neural network API.

      3. Training using Optimisers.jl and Zygote.jl.

      Package Imports

      julia
      using ADTypes, Lux, LuxAMDGPU, LuxCUDA, JLD2, MLUtils, Optimisers, Zygote, Printf, Random,
      +      Statistics

      Dataset

      We will use MLUtils to generate 500 (noisy) clockwise and 500 (noisy) anticlockwise spirals. Using this data we will create a MLUtils.DataLoader. Our dataloader will give us sequences of size 2 × seq_len × batch_size and we need to predict a binary value whether the sequence is clockwise or anticlockwise.

      julia
      function get_dataloaders(; dataset_size=1000, sequence_length=50)
      +    # Create the spirals
      +    data = [MLUtils.Datasets.make_spiral(sequence_length) for _ in 1:dataset_size]
      +    # Get the labels
      +    labels = vcat(repeat([0.0f0], dataset_size ÷ 2), repeat([1.0f0], dataset_size ÷ 2))
      +    clockwise_spirals = [reshape(d[1][:, 1:sequence_length], :, sequence_length, 1)
      +                         for d in data[1:(dataset_size ÷ 2)]]
      +    anticlockwise_spirals = [reshape(
      +                                 d[1][:, (sequence_length + 1):end], :, sequence_length, 1)
      +                             for d in data[((dataset_size ÷ 2) + 1):end]]
      +    x_data = Float32.(cat(clockwise_spirals..., anticlockwise_spirals...; dims=3))
      +    # Split the dataset
      +    (x_train, y_train), (x_val, y_val) = splitobs((x_data, labels); at=0.8, shuffle=true)
      +    # Create DataLoaders
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize=128, shuffle=true),
      +        # Don't shuffle the validation data
      +        DataLoader(collect.((x_val, y_val)); batchsize=128, shuffle=false))
      +end
      get_dataloaders (generic function with 1 method)

      Creating a Classifier

      We will be extending the Lux.AbstractExplicitContainerLayer type for our custom model since it will contain a lstm block and a classifier head.

      We pass the fieldnames lstm_cell and classifier to the type to ensure that the parameters and states are automatically populated and we don't have to define Lux.initialparameters and Lux.initialstates.

      To understand more about container layers, please look at Container Layer.

      julia
      struct SpiralClassifier{L, C} <:
      +       Lux.AbstractExplicitContainerLayer{(:lstm_cell, :classifier)}
      +    lstm_cell::L
      +    classifier::C
      +end

      We won't define the model from scratch but rather use the Lux.LSTMCell and Lux.Dense.

      julia
      function SpiralClassifier(in_dims, hidden_dims, out_dims)
      +    return SpiralClassifier(
      +        LSTMCell(in_dims => hidden_dims), Dense(hidden_dims => out_dims, sigmoid))
      +end
      Main.var"##225".SpiralClassifier

      We can use default Lux blocks – Recurrence(LSTMCell(in_dims => hidden_dims) – instead of defining the following. But let's still do it for the sake of it.

      Now we need to define the behavior of the Classifier when it is invoked.

      julia
      function (s::SpiralClassifier)(
      +        x::AbstractArray{T, 3}, ps::NamedTuple, st::NamedTuple) where {T}
      +    # First we will have to run the sequence through the LSTM Cell
      +    # The first call to LSTM Cell will create the initial hidden state
      +    # See that the parameters and states are automatically populated into a field called
      +    # `lstm_cell` We use `eachslice` to get the elements in the sequence without copying,
      +    # and `Iterators.peel` to split out the first element for LSTM initialization.
      +    x_init, x_rest = Iterators.peel(Lux._eachslice(x, Val(2)))
      +    (y, carry), st_lstm = s.lstm_cell(x_init, ps.lstm_cell, st.lstm_cell)
      +    # Now that we have the hidden state and memory in `carry` we will pass the input and
      +    # `carry` jointly
      +    for x in x_rest
      +        (y, carry), st_lstm = s.lstm_cell((x, carry), ps.lstm_cell, st_lstm)
      +    end
      +    # After running through the sequence we will pass the output through the classifier
      +    y, st_classifier = s.classifier(y, ps.classifier, st.classifier)
      +    # Finally remember to create the updated state
      +    st = merge(st, (classifier=st_classifier, lstm_cell=st_lstm))
      +    return vec(y), st
      +end

      Defining Accuracy, Loss and Optimiser

      Now let's define the binarycrossentropy loss. Typically it is recommended to use logitbinarycrossentropy since it is more numerically stable, but for the sake of simplicity we will use binarycrossentropy.

      julia
      function xlogy(x, y)
      +    result = x * log(y)
      +    return ifelse(iszero(x), zero(result), result)
      +end
      +
      +function binarycrossentropy(y_pred, y_true)
      +    y_pred = y_pred .+ eps(eltype(y_pred))
      +    return mean(@. -xlogy(y_true, y_pred) - xlogy(1 - y_true, 1 - y_pred))
      +end
      +
      +function compute_loss(model, ps, st, (x, y))
      +    y_pred, st = model(x, ps, st)
      +    return binarycrossentropy(y_pred, y), st, (; y_pred=y_pred)
      +end
      +
      +matches(y_pred, y_true) = sum((y_pred .> 0.5f0) .== y_true)
      +accuracy(y_pred, y_true) = matches(y_pred, y_true) / length(y_pred)
      accuracy (generic function with 1 method)

      Training the Model

      julia
      function main()
      +    # Get the dataloaders
      +    (train_loader, val_loader) = get_dataloaders()
      +
      +    # Create the model
      +    model = SpiralClassifier(2, 8, 1)
      +    rng = Xoshiro(0)
      +
      +    dev = gpu_device()
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(0.01f0); transform_variables=dev)
      +
      +    for epoch in 1:25
      +        # Train the model
      +        for (x, y) in train_loader
      +            x = x |> dev
      +            y = y |> dev
      +
      +            gs, loss, _, train_state = Lux.Experimental.compute_gradients(
      +                AutoZygote(), compute_loss, (x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +
      +            @printf "Epoch [%3d]: Loss %4.5f\n" epoch loss
      +        end
      +
      +        # Validate the model
      +        st_ = Lux.testmode(train_state.states)
      +        for (x, y) in val_loader
      +            x = x |> dev
      +            y = y |> dev
      +            loss, st_, ret = compute_loss(model, train_state.parameters, st_, (x, y))
      +            acc = accuracy(ret.y_pred, y)
      +            @printf "Validation: Loss %4.5f Accuracy %4.5f\n" loss acc
      +        end
      +    end
      +
      +    return (train_state.parameters, train_state.states) |> cpu_device()
      +end
      +
      +ps_trained, st_trained = main()
      Epoch [  1]: Loss 0.56263
      +Epoch [  1]: Loss 0.50622
      +Epoch [  1]: Loss 0.46754
      +Epoch [  1]: Loss 0.45518
      +Epoch [  1]: Loss 0.43237
      +Epoch [  1]: Loss 0.40357
      +Epoch [  1]: Loss 0.37433
      +Validation: Loss 0.36939 Accuracy 1.00000
      +Validation: Loss 0.38321 Accuracy 1.00000
      +Epoch [  2]: Loss 0.37481
      +Epoch [  2]: Loss 0.35556
      +Epoch [  2]: Loss 0.32647
      +Epoch [  2]: Loss 0.32097
      +Epoch [  2]: Loss 0.29943
      +Epoch [  2]: Loss 0.28412
      +Epoch [  2]: Loss 0.26005
      +Validation: Loss 0.25919 Accuracy 1.00000
      +Validation: Loss 0.26821 Accuracy 1.00000
      +Epoch [  3]: Loss 0.26588
      +Epoch [  3]: Loss 0.24159
      +Epoch [  3]: Loss 0.23038
      +Epoch [  3]: Loss 0.22152
      +Epoch [  3]: Loss 0.20744
      +Epoch [  3]: Loss 0.20136
      +Epoch [  3]: Loss 0.18646
      +Validation: Loss 0.18102 Accuracy 1.00000
      +Validation: Loss 0.18637 Accuracy 1.00000
      +Epoch [  4]: Loss 0.17623
      +Epoch [  4]: Loss 0.16670
      +Epoch [  4]: Loss 0.16627
      +Epoch [  4]: Loss 0.15707
      +Epoch [  4]: Loss 0.15225
      +Epoch [  4]: Loss 0.14029
      +Epoch [  4]: Loss 0.13672
      +Validation: Loss 0.12918 Accuracy 1.00000
      +Validation: Loss 0.13293 Accuracy 1.00000
      +Epoch [  5]: Loss 0.12726
      +Epoch [  5]: Loss 0.12789
      +Epoch [  5]: Loss 0.11814
      +Epoch [  5]: Loss 0.10943
      +Epoch [  5]: Loss 0.10736
      +Epoch [  5]: Loss 0.10008
      +Epoch [  5]: Loss 0.09878
      +Validation: Loss 0.09405 Accuracy 1.00000
      +Validation: Loss 0.09701 Accuracy 1.00000
      +Epoch [  6]: Loss 0.09387
      +Epoch [  6]: Loss 0.08977
      +Epoch [  6]: Loss 0.08546
      +Epoch [  6]: Loss 0.08282
      +Epoch [  6]: Loss 0.07942
      +Epoch [  6]: Loss 0.07283
      +Epoch [  6]: Loss 0.07509
      +Validation: Loss 0.06955 Accuracy 1.00000
      +Validation: Loss 0.07227 Accuracy 1.00000
      +Epoch [  7]: Loss 0.06925
      +Epoch [  7]: Loss 0.06594
      +Epoch [  7]: Loss 0.06383
      +Epoch [  7]: Loss 0.05994
      +Epoch [  7]: Loss 0.05758
      +Epoch [  7]: Loss 0.05775
      +Epoch [  7]: Loss 0.05475
      +Validation: Loss 0.05197 Accuracy 1.00000
      +Validation: Loss 0.05449 Accuracy 1.00000
      +Epoch [  8]: Loss 0.05228
      +Epoch [  8]: Loss 0.05002
      +Epoch [  8]: Loss 0.04655
      +Epoch [  8]: Loss 0.04395
      +Epoch [  8]: Loss 0.04409
      +Epoch [  8]: Loss 0.04332
      +Epoch [  8]: Loss 0.04139
      +Validation: Loss 0.03915 Accuracy 1.00000
      +Validation: Loss 0.04145 Accuracy 1.00000
      +Epoch [  9]: Loss 0.03956
      +Epoch [  9]: Loss 0.03666
      +Epoch [  9]: Loss 0.03553
      +Epoch [  9]: Loss 0.03384
      +Epoch [  9]: Loss 0.03446
      +Epoch [  9]: Loss 0.03219
      +Epoch [  9]: Loss 0.02961
      +Validation: Loss 0.02991 Accuracy 1.00000
      +Validation: Loss 0.03203 Accuracy 1.00000
      +Epoch [ 10]: Loss 0.03070
      +Epoch [ 10]: Loss 0.02812
      +Epoch [ 10]: Loss 0.02747
      +Epoch [ 10]: Loss 0.02620
      +Epoch [ 10]: Loss 0.02516
      +Epoch [ 10]: Loss 0.02568
      +Epoch [ 10]: Loss 0.02363
      +Validation: Loss 0.02351 Accuracy 1.00000
      +Validation: Loss 0.02541 Accuracy 1.00000
      +Epoch [ 11]: Loss 0.02379
      +Epoch [ 11]: Loss 0.02360
      +Epoch [ 11]: Loss 0.02179
      +Epoch [ 11]: Loss 0.02033
      +Epoch [ 11]: Loss 0.02039
      +Epoch [ 11]: Loss 0.01950
      +Epoch [ 11]: Loss 0.02115
      +Validation: Loss 0.01913 Accuracy 1.00000
      +Validation: Loss 0.02080 Accuracy 1.00000
      +Epoch [ 12]: Loss 0.01892
      +Epoch [ 12]: Loss 0.01786
      +Epoch [ 12]: Loss 0.01832
      +Epoch [ 12]: Loss 0.01683
      +Epoch [ 12]: Loss 0.01617
      +Epoch [ 12]: Loss 0.01823
      +Epoch [ 12]: Loss 0.01779
      +Validation: Loss 0.01608 Accuracy 1.00000
      +Validation: Loss 0.01752 Accuracy 1.00000
      +Epoch [ 13]: Loss 0.01481
      +Epoch [ 13]: Loss 0.01561
      +Epoch [ 13]: Loss 0.01593
      +Epoch [ 13]: Loss 0.01432
      +Epoch [ 13]: Loss 0.01573
      +Epoch [ 13]: Loss 0.01389
      +Epoch [ 13]: Loss 0.01494
      +Validation: Loss 0.01388 Accuracy 1.00000
      +Validation: Loss 0.01514 Accuracy 1.00000
      +Epoch [ 14]: Loss 0.01335
      +Epoch [ 14]: Loss 0.01329
      +Epoch [ 14]: Loss 0.01391
      +Epoch [ 14]: Loss 0.01310
      +Epoch [ 14]: Loss 0.01329
      +Epoch [ 14]: Loss 0.01209
      +Epoch [ 14]: Loss 0.01129
      +Validation: Loss 0.01222 Accuracy 1.00000
      +Validation: Loss 0.01335 Accuracy 1.00000
      +Epoch [ 15]: Loss 0.01293
      +Epoch [ 15]: Loss 0.01176
      +Epoch [ 15]: Loss 0.01128
      +Epoch [ 15]: Loss 0.01138
      +Epoch [ 15]: Loss 0.01119
      +Epoch [ 15]: Loss 0.01150
      +Epoch [ 15]: Loss 0.01013
      +Validation: Loss 0.01094 Accuracy 1.00000
      +Validation: Loss 0.01196 Accuracy 1.00000
      +Epoch [ 16]: Loss 0.01111
      +Epoch [ 16]: Loss 0.01155
      +Epoch [ 16]: Loss 0.01045
      +Epoch [ 16]: Loss 0.01038
      +Epoch [ 16]: Loss 0.00986
      +Epoch [ 16]: Loss 0.00926
      +Epoch [ 16]: Loss 0.01058
      +Validation: Loss 0.00990 Accuracy 1.00000
      +Validation: Loss 0.01085 Accuracy 1.00000
      +Epoch [ 17]: Loss 0.00961
      +Epoch [ 17]: Loss 0.00939
      +Epoch [ 17]: Loss 0.01024
      +Epoch [ 17]: Loss 0.00949
      +Epoch [ 17]: Loss 0.00934
      +Epoch [ 17]: Loss 0.00900
      +Epoch [ 17]: Loss 0.00861
      +Validation: Loss 0.00904 Accuracy 1.00000
      +Validation: Loss 0.00990 Accuracy 1.00000
      +Epoch [ 18]: Loss 0.00919
      +Epoch [ 18]: Loss 0.00851
      +Epoch [ 18]: Loss 0.00921
      +Epoch [ 18]: Loss 0.00895
      +Epoch [ 18]: Loss 0.00814
      +Epoch [ 18]: Loss 0.00790
      +Epoch [ 18]: Loss 0.00914
      +Validation: Loss 0.00831 Accuracy 1.00000
      +Validation: Loss 0.00911 Accuracy 1.00000
      +Epoch [ 19]: Loss 0.00879
      +Epoch [ 19]: Loss 0.00821
      +Epoch [ 19]: Loss 0.00771
      +Epoch [ 19]: Loss 0.00754
      +Epoch [ 19]: Loss 0.00763
      +Epoch [ 19]: Loss 0.00819
      +Epoch [ 19]: Loss 0.00725
      +Validation: Loss 0.00767 Accuracy 1.00000
      +Validation: Loss 0.00842 Accuracy 1.00000
      +Epoch [ 20]: Loss 0.00766
      +Epoch [ 20]: Loss 0.00682
      +Epoch [ 20]: Loss 0.00756
      +Epoch [ 20]: Loss 0.00719
      +Epoch [ 20]: Loss 0.00725
      +Epoch [ 20]: Loss 0.00777
      +Epoch [ 20]: Loss 0.00760
      +Validation: Loss 0.00713 Accuracy 1.00000
      +Validation: Loss 0.00783 Accuracy 1.00000
      +Epoch [ 21]: Loss 0.00663
      +Epoch [ 21]: Loss 0.00737
      +Epoch [ 21]: Loss 0.00708
      +Epoch [ 21]: Loss 0.00655
      +Epoch [ 21]: Loss 0.00692
      +Epoch [ 21]: Loss 0.00675
      +Epoch [ 21]: Loss 0.00652
      +Validation: Loss 0.00664 Accuracy 1.00000
      +Validation: Loss 0.00730 Accuracy 1.00000
      +Epoch [ 22]: Loss 0.00615
      +Epoch [ 22]: Loss 0.00571
      +Epoch [ 22]: Loss 0.00629
      +Epoch [ 22]: Loss 0.00674
      +Epoch [ 22]: Loss 0.00678
      +Epoch [ 22]: Loss 0.00690
      +Epoch [ 22]: Loss 0.00588
      +Validation: Loss 0.00621 Accuracy 1.00000
      +Validation: Loss 0.00684 Accuracy 1.00000
      +Epoch [ 23]: Loss 0.00587
      +Epoch [ 23]: Loss 0.00625
      +Epoch [ 23]: Loss 0.00642
      +Epoch [ 23]: Loss 0.00557
      +Epoch [ 23]: Loss 0.00585
      +Epoch [ 23]: Loss 0.00597
      +Epoch [ 23]: Loss 0.00643
      +Validation: Loss 0.00583 Accuracy 1.00000
      +Validation: Loss 0.00642 Accuracy 1.00000
      +Epoch [ 24]: Loss 0.00560
      +Epoch [ 24]: Loss 0.00568
      +Epoch [ 24]: Loss 0.00568
      +Epoch [ 24]: Loss 0.00549
      +Epoch [ 24]: Loss 0.00585
      +Epoch [ 24]: Loss 0.00556
      +Epoch [ 24]: Loss 0.00554
      +Validation: Loss 0.00549 Accuracy 1.00000
      +Validation: Loss 0.00604 Accuracy 1.00000
      +Epoch [ 25]: Loss 0.00557
      +Epoch [ 25]: Loss 0.00522
      +Epoch [ 25]: Loss 0.00536
      +Epoch [ 25]: Loss 0.00513
      +Epoch [ 25]: Loss 0.00540
      +Epoch [ 25]: Loss 0.00509
      +Epoch [ 25]: Loss 0.00569
      +Validation: Loss 0.00517 Accuracy 1.00000
      +Validation: Loss 0.00570 Accuracy 1.00000

      Saving the Model

      We can save the model using JLD2 (and any other serialization library of your choice) Note that we transfer the model to CPU before saving. Additionally, we recommend that you don't save the model

      julia
      @save "trained_model.jld2" {compress = true} ps_trained st_trained

      Let's try loading the model

      julia
      @load "trained_model.jld2" ps_trained st_trained
      2-element Vector{Symbol}:
      + :ps_trained
      + :st_trained

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 4.141 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/beginner/4_SimpleChains.html b/v0.5.30/tutorials/beginner/4_SimpleChains.html new file mode 100644 index 000000000..2a25f1eb6 --- /dev/null +++ b/v0.5.30/tutorials/beginner/4_SimpleChains.html @@ -0,0 +1,138 @@ + + + + + + MNIST Classification with SimpleChains | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      MNIST Classification with SimpleChains

      SimpleChains.jl is an excellent framework for training small neural networks. In this tutorial we will demonstrate how to use the same API as Lux.jl to train a model using SimpleChains.jl. We will use the tutorial from SimpleChains.jl as a reference.

      Package Imports

      julia
      using Lux, ADTypes, MLUtils, Optimisers, Zygote, OneHotArrays, Random, Statistics, Printf
      +import MLDatasets: MNIST
      +import SimpleChains: static

      Loading MNIST

      julia
      function loadmnist(batchsize, train_split)
      +    # Load MNIST
      +    N = 2000
      +    dataset = MNIST(; split=:train)
      +    imgs = dataset.features[:, :, 1:N]
      +    labels_raw = dataset.targets[1:N]
      +
      +    # Process images into (H,W,C,BS) batches
      +    x_data = Float32.(reshape(imgs, size(imgs, 1), size(imgs, 2), 1, size(imgs, 3)))
      +    y_data = onehotbatch(labels_raw, 0:9)
      +    (x_train, y_train), (x_test, y_test) = splitobs((x_data, y_data); at=train_split)
      +
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize, shuffle=true),
      +        # Don't shuffle the test data
      +        DataLoader(collect.((x_test, y_test)); batchsize, shuffle=false))
      +end
      loadmnist (generic function with 1 method)

      Define the Model

      julia
      lux_model = Chain(Conv((5, 5), 1 => 6, relu), MaxPool((2, 2)),
      +    Conv((5, 5), 6 => 16, relu), MaxPool((2, 2)), FlattenLayer(3),
      +    Chain(Dense(256 => 128, relu), Dense(128 => 84, relu), Dense(84 => 10)))
      Chain(
      +    layer_1 = Conv((5, 5), 1 => 6, relu),  # 156 parameters
      +    layer_2 = MaxPool((2, 2)),
      +    layer_3 = Conv((5, 5), 6 => 16, relu),  # 2_416 parameters
      +    layer_4 = MaxPool((2, 2)),
      +    layer_5 = FlattenLayer(),
      +    layer_6 = Dense(256 => 128, relu),  # 32_896 parameters
      +    layer_7 = Dense(128 => 84, relu),   # 10_836 parameters
      +    layer_8 = Dense(84 => 10),          # 850 parameters
      +)         # Total: 47_154 parameters,
      +          #        plus 0 states.

      We now need to convert the lux_model to SimpleChains.jl. We need to do this by defining the ToSimpleChainsAdaptor and providing the input dimensions.

      julia
      adaptor = ToSimpleChainsAdaptor((static(28), static(28), static(1)))
      +simple_chains_model = adaptor(lux_model)
      SimpleChainsLayer()  # 47_154 parameters

      Helper Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(model, ps, st, (x, y))
      +    y_pred, st = model(x, ps, st)
      +    return logitcrossentropy(y_pred, y), st, (;)
      +end
      +
      +function accuracy(model, ps, st, dataloader)
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    for (x, y) in dataloader
      +        target_class = onecold(y)
      +        predicted_class = onecold(Array(first(model(x, ps, st))))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 1 method)

      Define the Training Loop

      julia
      function train(model; rng=Xoshiro(0), kwargs...)
      +    train_dataloader, test_dataloader = loadmnist(128, 0.9)
      +
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(3.0f-4); transform_variables=identity)
      +
      +    ### Lets train the model
      +    nepochs = 10
      +    for epoch in 1:nepochs
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            (gs, _, _, train_state) = Lux.Experimental.compute_gradients(
      +                AutoZygote(), loss, (x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +        end
      +        ttime = time() - stime
      +
      +        tr_acc = accuracy(
      +            model, train_state.parameters, train_state.states, train_dataloader) * 100
      +        te_acc = accuracy(
      +            model, train_state.parameters, train_state.states, test_dataloader) * 100
      +
      +        @printf "[%2d/%2d] \t Time %.2fs \t Training Accuracy: %.2f%% \t Test Accuracy: %.2f%%\n" epoch nepochs ttime tr_acc te_acc
      +    end
      +end
      train (generic function with 1 method)

      Finally Training the Model

      First we will train the Lux model

      julia
      train(lux_model)
      [ 1/10] 	 Time 84.57s 	 Training Accuracy: 24.11% 	 Test Accuracy: 24.00%
      +[ 2/10] 	 Time 48.82s 	 Training Accuracy: 46.89% 	 Test Accuracy: 47.50%
      +[ 3/10] 	 Time 48.37s 	 Training Accuracy: 68.06% 	 Test Accuracy: 67.50%
      +[ 4/10] 	 Time 48.83s 	 Training Accuracy: 74.33% 	 Test Accuracy: 72.50%
      +[ 5/10] 	 Time 48.44s 	 Training Accuracy: 80.61% 	 Test Accuracy: 79.00%
      +[ 6/10] 	 Time 44.90s 	 Training Accuracy: 82.83% 	 Test Accuracy: 82.50%
      +[ 7/10] 	 Time 47.44s 	 Training Accuracy: 84.72% 	 Test Accuracy: 83.00%
      +[ 8/10] 	 Time 49.94s 	 Training Accuracy: 85.61% 	 Test Accuracy: 84.00%
      +[ 9/10] 	 Time 49.01s 	 Training Accuracy: 85.83% 	 Test Accuracy: 84.50%
      +[10/10] 	 Time 48.72s 	 Training Accuracy: 87.61% 	 Test Accuracy: 85.50%

      Now we will train the SimpleChains model

      julia
      train(simple_chains_model)
      [ 1/10] 	 Time 885.21s 	 Training Accuracy: 29.78% 	 Test Accuracy: 27.00%
      +[ 2/10] 	 Time 15.95s 	 Training Accuracy: 40.83% 	 Test Accuracy: 38.00%
      +[ 3/10] 	 Time 15.94s 	 Training Accuracy: 60.06% 	 Test Accuracy: 55.50%
      +[ 4/10] 	 Time 15.94s 	 Training Accuracy: 66.33% 	 Test Accuracy: 62.00%
      +[ 5/10] 	 Time 15.94s 	 Training Accuracy: 74.28% 	 Test Accuracy: 71.00%
      +[ 6/10] 	 Time 15.95s 	 Training Accuracy: 80.33% 	 Test Accuracy: 76.00%
      +[ 7/10] 	 Time 15.94s 	 Training Accuracy: 82.94% 	 Test Accuracy: 81.00%
      +[ 8/10] 	 Time 15.96s 	 Training Accuracy: 83.61% 	 Test Accuracy: 80.50%
      +[ 9/10] 	 Time 15.95s 	 Training Accuracy: 85.61% 	 Test Accuracy: 82.00%
      +[10/10] 	 Time 15.94s 	 Training Accuracy: 87.06% 	 Test Accuracy: 84.00%

      On my local machine we see a 3-4x speedup when using SimpleChains.jl. The conditions of the server this documentation is being built on is not ideal for CPU benchmarking hence, the speedup may not be as significant and even there might be regressions.

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/index.html b/v0.5.30/tutorials/index.html new file mode 100644 index 000000000..2fc83cd9f --- /dev/null +++ b/v0.5.30/tutorials/index.html @@ -0,0 +1,24 @@ + + + + + + Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Tutorials

      Beginners Tutorials

      Julia & Lux for the Uninitiated

      Julia & Lux for the Uninitiated

      A tutorial on how to get started with Julia and Lux for those who have never used Julia before.

      Fitting a Polynomial using MLP

      Fitting a Polynomial using MLP

      Learn the Basics of Lux by fitting a Multi-Layer Perceptron to a Polynomial.

      Training a Simple LSTM

      Training a Simple LSTM

      Learn the API for defining Recurrent Models in Lux.

      Use SimpleChains.jl as a Backend

      Use SimpleChains.jl as a Backend

      Learn how to train small neural networks really fast

      Intermediate Tutorials

      MNIST Classification using Neural ODE

      MNIST Classification using Neural ODE

      Train a Neural ODE to classify MNIST Images.

      Bayesian Neural Networks

      Bayesian Neural Networks

      Figure out how to use Probabilistic Programming Frameworks like Turing with Lux.

      Training a HyperNetwork

      Training a HyperNetwork

      In this tutorial we will train a hypernetwork to work on multiple datasets by predicting neural network parameters.

      Advanced Tutorials

      Neural ODE to Model Gravitational Waveforms

      Neural ODE to Model Gravitational Waveforms

      Training a Neural ODE to fit simulated data of gravitational waveforms.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/intermediate/1_NeuralODE.html b/v0.5.30/tutorials/intermediate/1_NeuralODE.html new file mode 100644 index 000000000..99ea29b6d --- /dev/null +++ b/v0.5.30/tutorials/intermediate/1_NeuralODE.html @@ -0,0 +1,276 @@ + + + + + + MNIST Classification using Neural ODEs | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      MNIST Classification using Neural ODEs

      To understand Neural ODEs, users should look up these lecture notes. We recommend users to directly use DiffEqFlux.jl, instead of implementing Neural ODEs from scratch.

      Package Imports

      julia
      using Lux, ComponentArrays, SciMLSensitivity, LuxAMDGPU, LuxCUDA, Optimisers,
      +      OrdinaryDiffEq, Random, Statistics, Zygote, OneHotArrays, InteractiveUtils, Printf
      +import MLDatasets: MNIST
      +import MLUtils: DataLoader, splitobs
      +
      +CUDA.allowscalar(false)

      Loading MNIST

      julia
      function loadmnist(batchsize, train_split)
      +    # Load MNIST: Only 1500 for demonstration purposes
      +    N = 1500
      +    dataset = MNIST(; split=:train)
      +    imgs = dataset.features[:, :, 1:N]
      +    labels_raw = dataset.targets[1:N]
      +
      +    # Process images into (H,W,C,BS) batches
      +    x_data = Float32.(reshape(imgs, size(imgs, 1), size(imgs, 2), 1, size(imgs, 3)))
      +    y_data = onehotbatch(labels_raw, 0:9)
      +    (x_train, y_train), (x_test, y_test) = splitobs((x_data, y_data); at=train_split)
      +
      +    return (
      +        # Use DataLoader to automatically minibatch and shuffle the data
      +        DataLoader(collect.((x_train, y_train)); batchsize, shuffle=true),
      +        # Don't shuffle the test data
      +        DataLoader(collect.((x_test, y_test)); batchsize, shuffle=false))
      +end
      loadmnist (generic function with 1 method)

      Define the Neural ODE Layer

      The NeuralODE is a ContainerLayer, which stores a model. The parameters and states of the NeuralODE are same as those of the underlying model.

      julia
      struct NeuralODE{M <: Lux.AbstractExplicitLayer, So, T, K} <:
      +       Lux.AbstractExplicitContainerLayer{(:model,)}
      +    model::M
      +    solver::So
      +    tspan::T
      +    kwargs::K
      +end
      +
      +function NeuralODE(
      +        model::Lux.AbstractExplicitLayer; solver=Tsit5(), tspan=(0.0f0, 1.0f0), kwargs...)
      +    return NeuralODE(model, solver, tspan, kwargs)
      +end
      Main.var"##225".NeuralODE

      OrdinaryDiffEq.jl can deal with non-Vector Inputs! However, certain discrete sensitivities like ReverseDiffAdjoint can't handle non-Vector inputs. Hence, we need to convert the input and output of the ODE solver to a Vector.

      julia
      function (n::NeuralODE)(x, ps, st)
      +    function dudt(u, p, t)
      +        u_, st = n.model(reshape(u, size(x)), p, st)
      +        return vec(u_)
      +    end
      +    prob = ODEProblem{false}(ODEFunction{false}(dudt), vec(x), n.tspan, ps)
      +    return solve(prob, n.solver; n.kwargs...), st
      +end
      +
      +@views diffeqsol_to_array(l::Int, x::ODESolution) = reshape(last(x.u), (l, :))
      +@views diffeqsol_to_array(l::Int, x::AbstractMatrix) = reshape(x[:, end], (l, :))
      diffeqsol_to_array (generic function with 2 methods)

      Create and Initialize the Neural ODE Layer

      julia
      function create_model(model_fn=NeuralODE; dev=gpu_device(), use_named_tuple::Bool=false,
      +        sensealg=InterpolatingAdjoint(; autojacvec=ZygoteVJP()))
      +    # Construct the Neural ODE Model
      +    model = Chain(FlattenLayer(),
      +        Dense(784 => 20, tanh),
      +        model_fn(Chain(Dense(20 => 10, tanh), Dense(10 => 10, tanh), Dense(10 => 20, tanh));
      +            save_everystep=false, reltol=1.0f-3,
      +            abstol=1.0f-3, save_start=false, sensealg),
      +        Base.Fix1(diffeqsol_to_array, 20),
      +        Dense(20 => 10))
      +
      +    rng = Random.default_rng()
      +    Random.seed!(rng, 0)
      +
      +    ps, st = Lux.setup(rng, model)
      +    ps = (use_named_tuple ? ps : ComponentArray(ps)) |> dev
      +    st = st |> dev
      +
      +    return model, ps, st
      +end
      create_model (generic function with 2 methods)

      Define Utility Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(x, y, model, ps, st)
      +    y_pred, st = model(x, ps, st)
      +    return logitcrossentropy(y_pred, y), st
      +end
      +
      +function accuracy(model, ps, st, dataloader; dev=gpu_device())
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    cpu_dev = cpu_device()
      +    for (x, y) in dataloader
      +        target_class = onecold(y)
      +        predicted_class = onecold(cpu_dev(first(model(dev(x), ps, st))))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 1 method)

      Training

      julia
      function train(model_function; cpu::Bool=false, kwargs...)
      +    dev = cpu ? cpu_device() : gpu_device()
      +    model, ps, st = create_model(model_function; dev, kwargs...)
      +
      +    # Training
      +    train_dataloader, test_dataloader = loadmnist(128, 0.9)
      +
      +    opt = Adam(0.001f0)
      +    st_opt = Optimisers.setup(opt, ps)
      +
      +    ### Warmup the Model
      +    img = dev(train_dataloader.data[1][:, :, :, 1:1])
      +    lab = dev(train_dataloader.data[2][:, 1:1])
      +    loss(img, lab, model, ps, st)
      +    (l, _), back = pullback(p -> loss(img, lab, model, p, st), ps)
      +    back((one(l), nothing))
      +
      +    ### Lets train the model
      +    nepochs = 9
      +    for epoch in 1:nepochs
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            x = dev(x)
      +            y = dev(y)
      +            (l, st), back = pullback(p -> loss(x, y, model, p, st), ps)
      +            ### We need to add `nothing`s equal to the number of returned values - 1
      +            gs = back((one(l), nothing))[1]
      +            st_opt, ps = Optimisers.update(st_opt, ps, gs)
      +        end
      +        ttime = time() - stime
      +
      +        tr_acc = accuracy(model, ps, st, train_dataloader; dev)
      +        te_acc = accuracy(model, ps, st, test_dataloader; dev)
      +        @printf "[%d/%d] \t Time %.2fs \t Training Accuracy: %.5f%% \t Test Accuracy: %.5f%%\n" epoch nepochs ttime tr_acc te_acc
      +    end
      +end
      +
      +train(NeuralODE)
      [1/9] 	 Time 3.31s 	 Training Accuracy: 0.50741% 	 Test Accuracy: 0.45333%
      +[2/9] 	 Time 0.30s 	 Training Accuracy: 0.70741% 	 Test Accuracy: 0.66667%
      +[3/9] 	 Time 0.44s 	 Training Accuracy: 0.77852% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.27s 	 Training Accuracy: 0.81037% 	 Test Accuracy: 0.75333%
      +[5/9] 	 Time 0.30s 	 Training Accuracy: 0.82667% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.33s 	 Training Accuracy: 0.84148% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.34s 	 Training Accuracy: 0.85481% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 0.35s 	 Training Accuracy: 0.86815% 	 Test Accuracy: 0.82000%
      +[9/9] 	 Time 0.34s 	 Training Accuracy: 0.87407% 	 Test Accuracy: 0.84000%

      We can also change the sensealg and train the model! GaussAdjoint allows you to use any arbitrary parameter structure and not just a flat vector (ComponentArray).

      julia
      train(NeuralODE; sensealg=GaussAdjoint(; autojacvec=ZygoteVJP()), use_named_tuple=true)
      [1/9] 	 Time 2.41s 	 Training Accuracy: 0.49630% 	 Test Accuracy: 0.38000%
      +[2/9] 	 Time 0.32s 	 Training Accuracy: 0.70593% 	 Test Accuracy: 0.65333%
      +[3/9] 	 Time 0.25s 	 Training Accuracy: 0.78296% 	 Test Accuracy: 0.72000%
      +[4/9] 	 Time 0.33s 	 Training Accuracy: 0.80889% 	 Test Accuracy: 0.74000%
      +[5/9] 	 Time 0.36s 	 Training Accuracy: 0.82370% 	 Test Accuracy: 0.76667%
      +[6/9] 	 Time 0.37s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.37s 	 Training Accuracy: 0.85630% 	 Test Accuracy: 0.81333%
      +[8/9] 	 Time 0.34s 	 Training Accuracy: 0.86370% 	 Test Accuracy: 0.82000%
      +[9/9] 	 Time 0.28s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82667%

      But remember some AD backends like ReverseDiff is not GPU compatible. For a model this size, you will notice that training time is significantly lower for training on CPU than on GPU.

      julia
      train(NeuralODE; sensealg=InterpolatingAdjoint(; autojacvec=ReverseDiffVJP()), cpu=true)
      [1/9] 	 Time 1.04s 	 Training Accuracy: 0.50963% 	 Test Accuracy: 0.43333%
      +[2/9] 	 Time 0.26s 	 Training Accuracy: 0.69630% 	 Test Accuracy: 0.66000%
      +[3/9] 	 Time 0.24s 	 Training Accuracy: 0.77926% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.24s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76667%
      +[5/9] 	 Time 0.25s 	 Training Accuracy: 0.82519% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.25s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 0.25s 	 Training Accuracy: 0.85333% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 0.25s 	 Training Accuracy: 0.86593% 	 Test Accuracy: 0.81333%
      +[9/9] 	 Time 0.25s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82000%

      For completeness, let's also test out discrete sensitivities!

      julia
      train(NeuralODE; sensealg=ReverseDiffAdjoint(), cpu=true)
      [1/9] 	 Time 7.18s 	 Training Accuracy: 0.50963% 	 Test Accuracy: 0.43333%
      +[2/9] 	 Time 6.91s 	 Training Accuracy: 0.69630% 	 Test Accuracy: 0.66000%
      +[3/9] 	 Time 6.87s 	 Training Accuracy: 0.77926% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 7.30s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76667%
      +[5/9] 	 Time 8.68s 	 Training Accuracy: 0.82519% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 9.59s 	 Training Accuracy: 0.84074% 	 Test Accuracy: 0.78667%
      +[7/9] 	 Time 9.60s 	 Training Accuracy: 0.85333% 	 Test Accuracy: 0.80667%
      +[8/9] 	 Time 9.82s 	 Training Accuracy: 0.86593% 	 Test Accuracy: 0.81333%
      +[9/9] 	 Time 9.71s 	 Training Accuracy: 0.87704% 	 Test Accuracy: 0.82000%

      Alternate Implementation using Stateful Layer

      Starting v0.5.5, Lux provides a Lux.Experimental.StatefulLuxLayer which can be used to avoid the Boxing of st.

      julia
      struct StatefulNeuralODE{M <: Lux.AbstractExplicitLayer, So, T, K} <:
      +       Lux.AbstractExplicitContainerLayer{(:model,)}
      +    model::M
      +    solver::So
      +    tspan::T
      +    kwargs::K
      +end
      +
      +function StatefulNeuralODE(
      +        model::Lux.AbstractExplicitLayer; solver=Tsit5(), tspan=(0.0f0, 1.0f0), kwargs...)
      +    return StatefulNeuralODE(model, solver, tspan, kwargs)
      +end
      +
      +function (n::StatefulNeuralODE)(x, ps, st)
      +    st_model = Lux.StatefulLuxLayer(n.model, ps, st)
      +    dudt(u, p, t) = st_model(u, p)
      +    prob = ODEProblem{false}(ODEFunction{false}(dudt), x, n.tspan, ps)
      +    return solve(prob, n.solver; n.kwargs...), st_model.st
      +end

      Train the new Stateful Neural ODE

      julia
      train(StatefulNeuralODE)
      [1/9] 	 Time 1.33s 	 Training Accuracy: 0.49852% 	 Test Accuracy: 0.40667%
      +[2/9] 	 Time 0.32s 	 Training Accuracy: 0.70296% 	 Test Accuracy: 0.66667%
      +[3/9] 	 Time 0.35s 	 Training Accuracy: 0.78074% 	 Test Accuracy: 0.71333%
      +[4/9] 	 Time 0.54s 	 Training Accuracy: 0.80741% 	 Test Accuracy: 0.76000%
      +[5/9] 	 Time 0.31s 	 Training Accuracy: 0.82000% 	 Test Accuracy: 0.78000%
      +[6/9] 	 Time 0.32s 	 Training Accuracy: 0.84444% 	 Test Accuracy: 0.79333%
      +[7/9] 	 Time 0.37s 	 Training Accuracy: 0.85704% 	 Test Accuracy: 0.82000%
      +[8/9] 	 Time 0.38s 	 Training Accuracy: 0.87037% 	 Test Accuracy: 0.80667%
      +[9/9] 	 Time 0.39s 	 Training Accuracy: 0.88000% 	 Test Accuracy: 0.82667%

      We might not see a significant difference in the training time, but let us investigate the type stabilities of the layers.

      Type Stability

      julia
      model, ps, st = create_model(NeuralODE)
      +
      +model_stateful, ps_stateful, st_stateful = create_model(StatefulNeuralODE)
      +
      +x = gpu_device()(ones(Float32, 28, 28, 1, 3));

      NeuralODE is not type stable due to the boxing of st

      julia
      @code_warntype model(x, ps, st)
      MethodInstance for (::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing})(::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}, ::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}, ::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}})
      +  from (c::Lux.Chain)(x, ps, st::NamedTuple) @ Lux /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/layers/containers.jl:477
      +Arguments
      +  c::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}
      +  x::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}
      +  ps::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}
      +  st::Core.Const((layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple()), layer_4 = NamedTuple(), layer_5 = NamedTuple()))
      +Body::TUPLE{CUDA.CUARRAY{FLOAT32, 2, CUDA.MEM.DEVICEBUFFER}, NAMEDTUPLE{(:LAYER_1, :LAYER_2, :LAYER_3, :LAYER_4, :LAYER_5), <:TUPLE{@NAMEDTUPLE{}, @NAMEDTUPLE{}, ANY, @NAMEDTUPLE{}, @NAMEDTUPLE{}}}}
      +1 ─ %1 = Base.getproperty(c, :layers)::@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".NeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}
      +│   %2 = Lux.applychain(%1, x, ps, st)::TUPLE{CUDA.CUARRAY{FLOAT32, 2, CUDA.MEM.DEVICEBUFFER}, NAMEDTUPLE{(:LAYER_1, :LAYER_2, :LAYER_3, :LAYER_4, :LAYER_5), <:TUPLE{@NAMEDTUPLE{}, @NAMEDTUPLE{}, ANY, @NAMEDTUPLE{}, @NAMEDTUPLE{}}}}
      +└──      return %2

      We avoid the problem entirely by using StatefulNeuralODE

      julia
      @code_warntype model_stateful(x, ps_stateful, st_stateful)
      MethodInstance for (::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing})(::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}, ::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}, ::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}})
      +  from (c::Lux.Chain)(x, ps, st::NamedTuple) @ Lux /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/src/layers/containers.jl:477
      +Arguments
      +  c::Lux.Chain{@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}
      +  x::CUDA.CuArray{Float32, 4, CUDA.Mem.DeviceBuffer}
      +  ps::ComponentArrays.ComponentVector{Float32, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}, Tuple{ComponentArrays.Axis{(layer_1 = 1:0, layer_2 = ViewAxis(1:15700, Axis(weight = ViewAxis(1:15680, ShapedAxis((20, 784))), bias = ViewAxis(15681:15700, ShapedAxis((20, 1))))), layer_3 = ViewAxis(15701:16240, Axis(layer_1 = ViewAxis(1:210, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))), layer_2 = ViewAxis(211:320, Axis(weight = ViewAxis(1:100, ShapedAxis((10, 10))), bias = ViewAxis(101:110, ShapedAxis((10, 1))))), layer_3 = ViewAxis(321:540, Axis(weight = ViewAxis(1:200, ShapedAxis((20, 10))), bias = ViewAxis(201:220, ShapedAxis((20, 1))))))), layer_4 = 16241:16240, layer_5 = ViewAxis(16241:16450, Axis(weight = ViewAxis(1:200, ShapedAxis((10, 20))), bias = ViewAxis(201:210, ShapedAxis((10, 1))))))}}}
      +  st::Core.Const((layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = (layer_1 = NamedTuple(), layer_2 = NamedTuple(), layer_3 = NamedTuple()), layer_4 = NamedTuple(), layer_5 = NamedTuple()))
      +Body::Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}}}
      +1 ─ %1 = Base.getproperty(c, :layers)::@NamedTuple{layer_1::Lux.FlattenLayer{Nothing}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Main.var"##225".StatefulNeuralODE{Lux.Chain{@NamedTuple{layer_1::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_2::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}, layer_3::Lux.Dense{true, typeof(NNlib.tanh_fast), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}, Nothing}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, Tuple{Float32, Float32}, Base.Pairs{Symbol, Any, NTuple{5, Symbol}, @NamedTuple{save_everystep::Bool, reltol::Float32, abstol::Float32, save_start::Bool, sensealg::SciMLSensitivity.InterpolatingAdjoint{0, true, Val{:central}, SciMLSensitivity.ZygoteVJP}}}}, layer_4::Lux.WrappedFunction{Base.Fix1{typeof(Main.var"##225".diffeqsol_to_array), Int64}}, layer_5::Lux.Dense{true, typeof(identity), typeof(WeightInitializers.glorot_uniform), typeof(WeightInitializers.zeros32)}}
      +│   %2 = Lux.applychain(%1, x, ps, st)::Tuple{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, @NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{layer_1::@NamedTuple{}, layer_2::@NamedTuple{}, layer_3::@NamedTuple{}}, layer_4::@NamedTuple{}, layer_5::@NamedTuple{}}}
      +└──      return %2

      Note, that we still recommend using this layer internally and not exposing this as the default API to the users.

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 3.443 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/intermediate/2_BayesianNN.html b/v0.5.30/tutorials/intermediate/2_BayesianNN.html new file mode 100644 index 000000000..cbb63726c --- /dev/null +++ b/v0.5.30/tutorials/intermediate/2_BayesianNN.html @@ -0,0 +1,220 @@ + + + + + + Bayesian Neural Network | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Bayesian Neural Network

      We borrow this tutorial from the official Turing Docs. We will show how the explicit parameterization of Lux enables first-class composability with packages which expect flattened out parameter vectors.

      We will use Turing.jl with Lux.jl to implement implementing a classification algorithm. Lets start by importing the relevant libraries.

      julia
      # Import libraries
      +using Lux, Turing, CairoMakie, Random, Tracker, Functors, LinearAlgebra
      +
      +# Sampling progress
      +Turing.setprogress!(true);
      [ Info: [Turing]: progress logging is enabled globally
      +[ Info: [AdvancedVI]: global PROGRESS is set as true

      Generating data

      Our goal here is to use a Bayesian neural network to classify points in an artificial dataset. The code below generates data points arranged in a box-like pattern and displays a graph of the dataset we'll be working with.

      julia
      # Number of points to generate
      +N = 80
      +M = round(Int, N / 4)
      +rng = Random.default_rng()
      +Random.seed!(rng, 1234)
      +
      +# Generate artificial data
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +xt1s = Array([[x1s[i] + 0.5f0; x2s[i] + 0.5f0] for i in 1:M])
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +append!(xt1s, Array([[x1s[i] - 5.0f0; x2s[i] - 5.0f0] for i in 1:M]))
      +
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +xt0s = Array([[x1s[i] + 0.5f0; x2s[i] - 5.0f0] for i in 1:M])
      +x1s = rand(rng, Float32, M) * 4.5f0;
      +x2s = rand(rng, Float32, M) * 4.5f0;
      +append!(xt0s, Array([[x1s[i] - 5.0f0; x2s[i] + 0.5f0] for i in 1:M]))
      +
      +# Store all the data for later
      +xs = [xt1s; xt0s]
      +ts = [ones(2 * M); zeros(2 * M)]
      +
      +# Plot data points
      +
      +function plot_data()
      +    x1 = first.(xt1s)
      +    y1 = last.(xt1s)
      +    x2 = first.(xt0s)
      +    y2 = last.(xt0s)
      +
      +    fig = Figure()
      +    ax = CairoMakie.Axis(fig[1, 1]; xlabel="x", ylabel="y")
      +
      +    scatter!(ax, x1, y1; markersize=16, color=:red, strokecolor=:black, strokewidth=2)
      +    scatter!(ax, x2, y2; markersize=16, color=:blue, strokecolor=:black, strokewidth=2)
      +
      +    return fig
      +end
      +
      +plot_data()

      Building the Neural Network

      The next step is to define a feedforward neural network where we express our parameters as distributions, and not single points as with traditional neural networks. For this we will use Dense to define liner layers and compose them via Chain, both are neural network primitives from Lux. The network nn we will create will have two hidden layers with tanh activations and one output layer with sigmoid activation, as shown below.

      The nn is an instance that acts as a function and can take data, parameters and current state as inputs and output predictions. We will define distributions on the neural network parameters.

      julia
      # Construct a neural network using Lux
      +nn = Chain(Dense(2 => 3, tanh), Dense(3 => 2, tanh), Dense(2 => 1, sigmoid))
      +
      +# Initialize the model weights and state
      +ps, st = Lux.setup(rng, nn)
      +
      +Lux.parameterlength(nn) # number of paraemters in NN
      20

      The probabilistic model specification below creates a parameters variable, which has IID normal variables. The parameters represents all parameters of our neural net (weights and biases).

      julia
      # Create a regularization term and a Gaussian prior variance term.
      +alpha = 0.09
      +sig = sqrt(1.0 / alpha)
      3.3333333333333335

      Construct named tuple from a sampled parameter vector. We could also use ComponentArrays here and simply broadcast to avoid doing this. But let's do it this way to avoid dependencies.

      julia
      function vector_to_parameters(ps_new::AbstractVector, ps::NamedTuple)
      +    @assert length(ps_new) == Lux.parameterlength(ps)
      +    i = 1
      +    function get_ps(x)
      +        z = reshape(view(ps_new, i:(i + length(x) - 1)), size(x))
      +        i += length(x)
      +        return z
      +    end
      +    return fmap(get_ps, ps)
      +end
      vector_to_parameters (generic function with 1 method)

      To interface with external libraries it is often desirable to use the StatefulLuxLayer to automatically handle the neural network states.

      julia
      const model = StatefulLuxLayer(nn, st)
      +
      +# Specify the probabilistic model.
      +@model function bayes_nn(xs, ts)
      +    # Sample the parameters
      +    nparameters = Lux.parameterlength(nn)
      +    parameters ~ MvNormal(zeros(nparameters), Diagonal(abs2.(sig .* ones(nparameters))))
      +
      +    # Forward NN to make predictions
      +    preds = Lux.apply(model, xs, vector_to_parameters(parameters, ps))
      +
      +    # Observe each prediction.
      +    for i in eachindex(ts)
      +        ts[i] ~ Bernoulli(preds[i])
      +    end
      +end
      bayes_nn (generic function with 2 methods)

      Inference can now be performed by calling sample. We use the HMC sampler here.

      julia
      # Perform inference.
      +N = 5000
      +ch = sample(bayes_nn(reduce(hcat, xs), ts), HMC(0.05, 4; adtype=AutoTracker()), N)
      Chains MCMC chain (5000×30×1 Array{Float64, 3}):
      +
      +Iterations        = 1:1:5000
      +Number of chains  = 1
      +Samples per chain = 5000
      +Wall duration     = 24.99 seconds
      +Compute duration  = 24.99 seconds
      +parameters        = parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], parameters[7], parameters[8], parameters[9], parameters[10], parameters[11], parameters[12], parameters[13], parameters[14], parameters[15], parameters[16], parameters[17], parameters[18], parameters[19], parameters[20]
      +internals         = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, numerical_error, step_size, nom_step_size
      +
      +Summary Statistics
      +      parameters      mean       std      mcse   ess_bulk   ess_tail      rhat   ess_per_sec
      +          Symbol   Float64   Float64   Float64    Float64    Float64   Float64       Float64
      +
      +   parameters[1]   -0.5133    1.8835    0.5330    13.1888    25.0326    1.4853        0.5277
      +   parameters[2]   -5.3361    2.4104    0.6377    15.5139    36.9602    1.0376        0.6208
      +   parameters[3]    0.3151    0.6835    0.1441    27.6358    50.3442    1.1216        1.1058
      +   parameters[4]    1.9624    3.7648    1.1478    11.5629    25.5317    2.0118        0.4627
      +   parameters[5]   -0.0914    0.6013    0.0858    52.3129    54.6520    1.1223        2.0932
      +   parameters[6]    4.9348    2.3882    0.6909    12.4651    22.5599    1.8704        0.4988
      +   parameters[7]   -1.6494    2.7707    0.8306    11.9136    35.7353    1.9059        0.4767
      +   parameters[8]   -0.3367    1.5561    0.3957    15.3027    35.5527    1.2732        0.6123
      +   parameters[9]   -0.6247    1.7715    0.4439    16.1582    41.0067    1.0886        0.6465
      +  parameters[10]   -0.0485    2.6496    0.7711    12.0002    18.2390    1.6173        0.4802
      +  parameters[11]   -2.7777    2.4100    0.6937    13.2493    54.0054    1.2589        0.5301
      +  parameters[12]    1.7397    2.7286    0.8144    12.5350    30.6674    1.3093        0.5016
      +  parameters[13]   -1.3065    3.0122    0.9212    11.3718    29.5307    1.8415        0.4550
      +  parameters[14]    2.1359    1.7145    0.4376    16.0168    29.9135    1.1185        0.6409
      +  parameters[15]   -2.2917    1.1075    0.2143    27.1032    53.9717    1.0339        1.0845
      +  parameters[16]   -1.8241    1.7783    0.4754    14.8255    44.7465    1.2380        0.5932
      +  parameters[17]   -2.9541    1.0941    0.1964    32.4857    49.3634    1.0550        1.2998
      +  parameters[18]   -2.9283    3.1083    0.9424    13.4337    49.1159    1.4880        0.5375
      +  parameters[19]   -5.8506    1.2702    0.1981    41.3283    64.0949    1.0032        1.6537
      +  parameters[20]   -3.6909    1.8615    0.5266    13.1481    52.3750    1.6064        0.5261
      +
      +Quantiles
      +      parameters      2.5%     25.0%     50.0%     75.0%     97.5%
      +          Symbol   Float64   Float64   Float64   Float64   Float64
      +
      +   parameters[1]   -2.9584   -2.1586   -0.3884    0.5613    4.2684
      +   parameters[2]   -9.8741   -7.2592   -4.9623   -3.2715   -1.7035
      +   parameters[3]   -0.6888   -0.1073    0.1721    0.5713    2.2193
      +   parameters[4]   -5.7669   -1.4891    3.0249    5.1736    7.8110
      +   parameters[5]   -1.2037   -0.4726   -0.1166    0.2270    1.2686
      +   parameters[6]    1.5300    2.9517    4.4678    6.7396   10.5049
      +   parameters[7]   -5.8618   -4.2435   -1.3364    0.6954    3.0399
      +   parameters[8]   -3.2162   -1.3171   -0.3432    0.4455    3.4264
      +   parameters[9]   -4.2319   -1.6828   -0.5051    0.6070    2.9411
      +  parameters[10]   -6.1276   -1.8893    0.2035    1.6808    4.6669
      +  parameters[11]   -6.8391   -4.9499   -2.5672   -0.5826    1.1874
      +  parameters[12]   -3.4081   -0.4600    2.2126    3.9338    5.8529
      +  parameters[13]   -6.1325   -3.7644   -2.1160    1.6571    3.6084
      +  parameters[14]   -1.1205    1.0660    1.9677    3.1250    5.5755
      +  parameters[15]   -4.6287   -3.0619   -2.1911   -1.5340   -0.1136
      +  parameters[16]   -5.3259   -3.0340   -1.9008   -0.9440    1.7702
      +  parameters[17]   -5.6472   -3.5470   -2.8160   -2.2108   -1.0283
      +  parameters[18]   -6.7277   -5.2922   -4.2915    0.7602    2.7335
      +  parameters[19]   -8.5012   -6.5957   -5.8670   -5.0328   -3.3450
      +  parameters[20]   -6.7333   -5.1577   -3.8273   -2.2208   -0.3195

      Now we extract the parameter samples from the sampled chain as θ (this is of size 5000 x 20 where 5000 is the number of iterations and 20 is the number of parameters). We'll use these primarily to determine how good our model's classifier is.

      julia
      # Extract all weight and bias parameters.
      +θ = MCMCChains.group(ch, :parameters).value;

      Prediction Visualization

      julia
      # A helper to run the nn through data `x` using parameters `θ`
      +nn_forward(x, θ) = model(x, vector_to_parameters(θ, ps))
      +
      +# Plot the data we have.
      +fig = plot_data()
      +
      +# Find the index that provided the highest log posterior in the chain.
      +_, i = findmax(ch[:lp])
      +
      +# Extract the max row value from i.
      +i = i.I[1]
      +
      +# Plot the posterior distribution with a contour plot
      +x1_range = collect(range(-6; stop=6, length=25))
      +x2_range = collect(range(-6; stop=6, length=25))
      +Z = [nn_forward([x1, x2], θ[i, :])[1] for x1 in x1_range, x2 in x2_range]
      +contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +fig

      The contour plot above shows that the MAP method is not too bad at classifying our data. Now we can visualize our predictions.

      p(x~|X,α)=θp(x~|θ)p(θ|X,α)θp(θ|X,α)fθ(x~)

      The nn_predict function takes the average predicted value from a network parameterized by weights drawn from the MCMC chain.

      julia
      # Return the average predicted value across multiple weights.
      +nn_predict(x, θ, num) = mean([first(nn_forward(x, view(θ, i, :))) for i in 1:10:num])
      nn_predict (generic function with 1 method)

      Next, we use the nn_predict function to predict the value at a sample of points where the x1 and x2 coordinates range between -6 and 6. As we can see below, we still have a satisfactory fit to our data, and more importantly, we can also see where the neural network is uncertain about its predictions much easier–-those regions between cluster boundaries.

      Plot the average prediction.

      julia
      fig = plot_data()
      +
      +n_end = 1500
      +x1_range = collect(range(-6; stop=6, length=25))
      +x2_range = collect(range(-6; stop=6, length=25))
      +Z = [nn_predict([x1, x2], θ, n_end)[1] for x1 in x1_range, x2 in x2_range]
      +contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +fig

      Suppose we are interested in how the predictive power of our Bayesian neural network evolved between samples. In that case, the following graph displays an animation of the contour plot generated from the network weights in samples 1 to 5,000.

      julia
      fig = plot_data()
      +Z = [first(nn_forward([x1, x2], θ[1, :])) for x1 in x1_range, x2 in x2_range]
      +c = contour!(x1_range, x2_range, Z; linewidth=3, colormap=:seaborn_bright)
      +record(fig, "results.gif", 1:250:size(θ, 1)) do i
      +    fig.current_axis[].title = "Iteration: $i"
      +    Z = [first(nn_forward([x1, x2], θ[i, :])) for x1 in x1_range, x2 in x2_range]
      +    c[3] = Z
      +    return fig
      +end
      "results.gif"

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/v0.5.30/tutorials/intermediate/3_HyperNet.html b/v0.5.30/tutorials/intermediate/3_HyperNet.html new file mode 100644 index 000000000..4fafbb14e --- /dev/null +++ b/v0.5.30/tutorials/intermediate/3_HyperNet.html @@ -0,0 +1,229 @@ + + + + + + Training a HyperNetwork on MNIST and FashionMNIST | Lux.jl Documentation + + + + + + + + + + + + + +
      Skip to content

      Training a HyperNetwork on MNIST and FashionMNIST

      Package Imports

      julia
      using Lux, ADTypes, ComponentArrays, LuxAMDGPU, LuxCUDA, MLDatasets, MLUtils, OneHotArrays,
      +      Optimisers, Printf, Random, Setfield, Statistics, Zygote
      +
      +CUDA.allowscalar(false)

      Loading Datasets

      julia
      function load_dataset(::Type{dset}, n_train::Int, n_eval::Int, batchsize::Int) where {dset}
      +    imgs, labels = dset(:train)[1:n_train]
      +    x_train, y_train = reshape(imgs, 28, 28, 1, n_train), onehotbatch(labels, 0:9)
      +
      +    imgs, labels = dset(:test)[1:n_eval]
      +    x_test, y_test = reshape(imgs, 28, 28, 1, n_eval), onehotbatch(labels, 0:9)
      +
      +    return (DataLoader((x_train, y_train); batchsize=min(batchsize, n_train), shuffle=true),
      +        DataLoader((x_test, y_test); batchsize=min(batchsize, n_eval), shuffle=false))
      +end
      +
      +function load_datasets(n_train=1024, n_eval=32, batchsize=256)
      +    return load_dataset.((MNIST, FashionMNIST), n_train, n_eval, batchsize)
      +end
      load_datasets (generic function with 4 methods)

      Implement a HyperNet Layer

      julia
      struct HyperNet{W <: Lux.AbstractExplicitLayer, C <: Lux.AbstractExplicitLayer, A} <:
      +       Lux.AbstractExplicitContainerLayer{(:weight_generator, :core_network)}
      +    weight_generator::W
      +    core_network::C
      +    ca_axes::A
      +end
      +
      +function HyperNet(w::Lux.AbstractExplicitLayer, c::Lux.AbstractExplicitLayer)
      +    ca_axes = Lux.initialparameters(Random.default_rng(), c) |> ComponentArray |> getaxes
      +    return HyperNet(w, c, ca_axes)
      +end
      +
      +function Lux.initialparameters(rng::AbstractRNG, h::HyperNet)
      +    return (weight_generator=Lux.initialparameters(rng, h.weight_generator),)
      +end
      +
      +function (hn::HyperNet)(x, ps, st::NamedTuple)
      +    ps_new, st_ = hn.weight_generator(x, ps.weight_generator, st.weight_generator)
      +    @set! st.weight_generator = st_
      +    return ComponentArray(vec(ps_new), hn.ca_axes), st
      +end
      +
      +function (hn::HyperNet)((x, y)::T, ps, st::NamedTuple) where {T <: Tuple}
      +    ps_ca, st = hn(x, ps, st)
      +    pred, st_ = hn.core_network(y, ps_ca, st.core_network)
      +    @set! st.core_network = st_
      +    return pred, st
      +end

      Create and Initialize the HyperNet

      julia
      function create_model()
      +    # Doesn't need to be a MLP can have any Lux Layer
      +    core_network = Chain(FlattenLayer(), Dense(784, 256, relu), Dense(256, 10))
      +    weight_generator = Chain(Embedding(2 => 32), Dense(32, 64, relu),
      +        Dense(64, Lux.parameterlength(core_network)))
      +
      +    model = HyperNet(weight_generator, core_network)
      +    return model
      +end
      create_model (generic function with 1 method)

      Define Utility Functions

      julia
      logitcrossentropy(y_pred, y) = mean(-sum(y .* logsoftmax(y_pred); dims=1))
      +
      +function loss(model, ps, st, (data_idx, x, y))
      +    y_pred, st = model((data_idx, x), ps, st)
      +    return logitcrossentropy(y_pred, y), st, (;)
      +end
      +
      +function accuracy(model, ps, st, dataloader, data_idx, gdev=gpu_device())
      +    total_correct, total = 0, 0
      +    st = Lux.testmode(st)
      +    cpu_dev = cpu_device()
      +    for (x, y) in dataloader
      +        x = x |> gdev
      +        y = y |> gdev
      +        target_class = onecold(cpu_dev(y))
      +        predicted_class = onecold(cpu_dev(model((data_idx, x), ps, st)[1]))
      +        total_correct += sum(target_class .== predicted_class)
      +        total += length(target_class)
      +    end
      +    return total_correct / total
      +end
      accuracy (generic function with 2 methods)

      Training

      julia
      function train()
      +    model = create_model()
      +    dataloaders = load_datasets()
      +
      +    dev = gpu_device()
      +
      +    rng = Xoshiro(0)
      +
      +    train_state = Lux.Experimental.TrainState(
      +        rng, model, Adam(3.0f-4); transform_variables=dev)
      +
      +    ### Lets train the model
      +    nepochs = 10
      +    for epoch in 1:nepochs, data_idx in 1:2
      +        train_dataloader, test_dataloader = dataloaders[data_idx]
      +
      +        stime = time()
      +        for (x, y) in train_dataloader
      +            x = x |> dev
      +            y = y |> dev
      +            (gs, _, _, train_state) = Lux.Experimental.compute_gradients(
      +                AutoZygote(), loss, (data_idx, x, y), train_state)
      +            train_state = Lux.Experimental.apply_gradients(train_state, gs)
      +        end
      +        ttime = time() - stime
      +
      +        train_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                train_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +        test_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                test_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +
      +        data_name = data_idx == 1 ? "MNIST" : "FashionMNIST"
      +
      +        @printf "[%3d/%3d] \t %12s \t Time %.5fs \t Training Accuracy: %.2f%% \t Test Accuracy: %.2f%%\n" epoch nepochs data_name ttime train_acc test_acc
      +    end
      +
      +    println()
      +
      +    for data_idx in 1:2
      +        train_dataloader, test_dataloader = dataloaders[data_idx]
      +        train_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                train_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +        test_acc = round(
      +            accuracy(model, train_state.parameters, train_state.states,
      +                test_dataloader, data_idx, dev) * 100;
      +            digits=2)
      +
      +        data_name = data_idx == 1 ? "MNIST" : "FashionMNIST"
      +
      +        @printf "[FINAL] \t %12s \t Training Accuracy: %.2f%% \t Test Accuracy: %.2f%%\n" data_name train_acc test_acc
      +    end
      +end
      +
      +train()
      [  1/ 10] 	        MNIST 	 Time 62.70427s 	 Training Accuracy: 76.27% 	 Test Accuracy: 78.12%
      +[  1/ 10] 	 FashionMNIST 	 Time 0.17746s 	 Training Accuracy: 54.98% 	 Test Accuracy: 50.00%
      +[  2/ 10] 	        MNIST 	 Time 0.03860s 	 Training Accuracy: 75.49% 	 Test Accuracy: 71.88%
      +[  2/ 10] 	 FashionMNIST 	 Time 0.05287s 	 Training Accuracy: 56.45% 	 Test Accuracy: 65.62%
      +[  3/ 10] 	        MNIST 	 Time 0.03839s 	 Training Accuracy: 81.84% 	 Test Accuracy: 78.12%
      +[  3/ 10] 	 FashionMNIST 	 Time 0.03281s 	 Training Accuracy: 62.21% 	 Test Accuracy: 56.25%
      +[  4/ 10] 	        MNIST 	 Time 0.03007s 	 Training Accuracy: 82.62% 	 Test Accuracy: 81.25%
      +[  4/ 10] 	 FashionMNIST 	 Time 0.03060s 	 Training Accuracy: 66.41% 	 Test Accuracy: 56.25%
      +[  5/ 10] 	        MNIST 	 Time 0.03625s 	 Training Accuracy: 81.54% 	 Test Accuracy: 81.25%
      +[  5/ 10] 	 FashionMNIST 	 Time 0.02937s 	 Training Accuracy: 65.72% 	 Test Accuracy: 71.88%
      +[  6/ 10] 	        MNIST 	 Time 0.03049s 	 Training Accuracy: 90.53% 	 Test Accuracy: 90.62%
      +[  6/ 10] 	 FashionMNIST 	 Time 0.02975s 	 Training Accuracy: 69.14% 	 Test Accuracy: 62.50%
      +[  7/ 10] 	        MNIST 	 Time 0.04204s 	 Training Accuracy: 92.68% 	 Test Accuracy: 90.62%
      +[  7/ 10] 	 FashionMNIST 	 Time 0.02972s 	 Training Accuracy: 75.10% 	 Test Accuracy: 68.75%
      +[  8/ 10] 	        MNIST 	 Time 0.03066s 	 Training Accuracy: 93.85% 	 Test Accuracy: 90.62%
      +[  8/ 10] 	 FashionMNIST 	 Time 0.03352s 	 Training Accuracy: 74.02% 	 Test Accuracy: 71.88%
      +[  9/ 10] 	        MNIST 	 Time 0.02887s 	 Training Accuracy: 94.53% 	 Test Accuracy: 93.75%
      +[  9/ 10] 	 FashionMNIST 	 Time 0.03016s 	 Training Accuracy: 76.76% 	 Test Accuracy: 71.88%
      +[ 10/ 10] 	        MNIST 	 Time 0.02880s 	 Training Accuracy: 94.73% 	 Test Accuracy: 87.50%
      +[ 10/ 10] 	 FashionMNIST 	 Time 0.02935s 	 Training Accuracy: 80.08% 	 Test Accuracy: 65.62%
      +
      +[FINAL] 	        MNIST 	 Training Accuracy: 91.70% 	 Test Accuracy: 78.12%
      +[FINAL] 	 FashionMNIST 	 Training Accuracy: 80.08% 	 Test Accuracy: 65.62%

      Appendix

      julia
      using InteractiveUtils
      +InteractiveUtils.versioninfo()
      +if @isdefined(LuxCUDA) && CUDA.functional(); println(); CUDA.versioninfo(); end
      +if @isdefined(LuxAMDGPU) && LuxAMDGPU.functional(); println(); AMDGPU.versioninfo(); end
      Julia Version 1.10.2
      +Commit bd47eca2c8a (2024-03-01 10:14 UTC)
      +Build Info:
      +  Official https://julialang.org/ release
      +Platform Info:
      +  OS: Linux (x86_64-linux-gnu)
      +  CPU: 48 × AMD EPYC 7402 24-Core Processor
      +  WORD_SIZE: 64
      +  LIBM: libopenlibm
      +  LLVM: libLLVM-15.0.7 (ORCJIT, znver2)
      +Threads: 48 default, 0 interactive, 24 GC (on 2 virtual cores)
      +Environment:
      +  LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      +  JULIA_DEPOT_PATH = /root/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6
      +  JULIA_PROJECT = /var/lib/buildkite-agent/builds/gpuci-1/julialang/lux-dot-jl/docs
      +  JULIA_AMDGPU_LOGGING_ENABLED = true
      +  JULIA_DEBUG = Literate
      +  JULIA_CPU_THREADS = 2
      +  JULIA_NUM_THREADS = 48
      +  JULIA_LOAD_PATH = @:@v#.#:@stdlib
      +  JULIA_CUDA_HARD_MEMORY_LIMIT = 25%
      +
      +CUDA runtime 12.3, artifact installation
      +CUDA driver 12.4
      +NVIDIA driver 550.54.15
      +
      +CUDA libraries: 
      +- CUBLAS: 12.3.4
      +- CURAND: 10.3.4
      +- CUFFT: 11.0.12
      +- CUSOLVER: 11.5.4
      +- CUSPARSE: 12.2.0
      +- CUPTI: 21.0.0
      +- NVML: 12.0.0+550.54.15
      +
      +Julia packages: 
      +- CUDA: 5.2.0
      +- CUDA_Driver_jll: 0.7.0+1
      +- CUDA_Runtime_jll: 0.11.1+0
      +
      +Toolchain:
      +- Julia: 1.10.2
      +- LLVM: 15.0.7
      +
      +Environment:
      +- JULIA_CUDA_HARD_MEMORY_LIMIT: 25%
      +
      +1 device:
      +  0: NVIDIA A100-PCIE-40GB MIG 1g.5gb (sm_80, 3.443 GiB / 4.750 GiB available)
      +┌ Warning: LuxAMDGPU is loaded but the AMDGPU is not functional.
      +└ @ LuxAMDGPU ~/.cache/julia-buildkite-plugin/depots/01872db4-8c79-43af-ab7d-12abac4f24f6/packages/LuxAMDGPU/sGa0S/src/LuxAMDGPU.jl:19

      This page was generated using Literate.jl.

      + + + + \ No newline at end of file diff --git a/versions.js b/versions.js index 3862e532d..235ec52e6 100644 --- a/versions.js +++ b/versions.js @@ -5,5 +5,5 @@ var DOC_VERSIONS = [ "v0.3", "dev", ]; -var DOCUMENTER_NEWEST = "v0.5.29"; +var DOCUMENTER_NEWEST = "v0.5.30"; var DOCUMENTER_STABLE = "stable";

    ZW z>LvWci|0Ys_~}zA<#r!FpYB||^on+Us`%f%qy+jTHN#5H_iqB-3Ph=a%NV&Ad-gHw zl4kvsk9?lBv!OO#qTiYn;vKECa%fn4tT|~nfbKPSY6FQp8|vk7r?}G(%x$_VOxJ)1tWAXy zcO*??y!+8dxoc9|2dW^~GN;B|U287!Nm=LIaJ|ooF+aLwJ~NGa1&q?uVsgUYS0mKc z^NMXa(-R0U<;Xo`mUgC|{_3V_zm68nk4b20hpwkRQkMb*pZZl2rg(>RoxTxgS~q>5 zb7#x}f7-3WFBmEwNSeWAM6RG)CF_BlV(;Q7?x!tD9MS)>b17=hXlnJg>danU(&=^r z-)3(3ih3{goV}bHi+zaagq6RWx_bm``PwSmsO_Yvdpio+qC;yl?_p;yv+s7FpwBj+ zQai?Me5wWN2(b*{1y)CJlZqTYJZ35$0sP!^-i64 z`d(46qTZAIEg zkrG#q7P)*}dk)#g;1erffjC^O)0hAQnxgE(`z}fm7Ix$@FIwC;_oNa zQb&n&LZp+=b$_xc{dgqZKj`Ci-p9j(Ryc}Wu~;G%Dtxnv98OyN+DAJgu2V;>(~qs& zkMFpj*r+4-hRg21{p371)eP8HBbcxVziL&b4fi2d@`LnFB1U$xu*{2mR8p>ft_poh zSMe{nu_Rcv;3^rP@5-rh|9xug(~ls?I)#9qyBhPnOY%II$Co)f@D+Kv_-R{h zXnyH(AMtPjD&-$N=K_KvHgl>^4Qkuj!*!WJ;SH=1X9TjeBd-x-1AbEA=ZaACwu*`O z0>$QkuFPMm%7?1@#NE3ripz13?~-Ww-aowBr@cqTsggA3 z3*J}p+tOY*WsqHRX2`&Z9p9#Ro4ul0WWTiGS|uwMo;BEVjY$vB+Ym)-U6|ZqF;3$! zrN(UN4VB^Vp_&@OB&0&+WJq@9)n3uzf+f zznj$JjkJc79b(a6waK(YWIRJ!Az;Yhj+_A5DxQ;Kv6B~B21}U1912nRRMCh4kTHon zgbPU{0EAg->BR!bLNdrCvr;(nAvdf6$s-c7u*ozhQK>)$bE0}2sB+FpRM6te|9d$z zsI5ztZ;OpjIolBaY**(tM0%96Ey=yE_lNV?pF1vK9eCUcm|=EY0VN(v_@u(f(o4}T zDPatNGza`q^$)!d@XiKafG`2@@smOcv1e`|<84JnJ<$xy@d428$9~ES%Y{8c)7c^n zCH|?WB}1}yOj(oly=x^m+d|brlb`{e)F_{pX_W>XA3CIEa{FgYkrY``lAH5~dex~$_1`jOy7Z>Rpw0O{g&wfc8 zQ=iC8D4!jalOX>Fj04tz^xgg$v?*Z*31uAo@4$U-n?rDBUjS!7h(YY2#tQ$g;|q`r z6c%wSK>q>Ig@9dl3le8G5Au%?{(s&QOGwMY?0V1x?*aY^;4c7v0ez8T2t?=ziU<*Q zMO}m4;J1V=b6XHD85m<@a-6rmf|5WzKtBLaw>$69b&G*`@%w?2Zjkc6QO@>=?2gJu zMR{rB{F(XX^z=(DJg1{C4X|8La0Q*-*h>dA!_qQDU=a$>G17i^XM`|v+iBl(Iv zYKMTn2yGB%@URuq#LNm(UQD`(h0j;Ag2v$b`0g3dRV!}5!n zTEcQZP5dOYHo4Ry7aVg&nCFwJ2=gMA7n7(ac8`;5MfKxIOA+d#TpcGn)LMvumjl_h zo=TuG8$p7Bf?;A&ZWQJu%%NpI#B&ojr;fSBGH2qv7l(3@jmyn)W{liT=O16Sw9;6L z{+-oC>l{M`sr;;@i}Pi}QD426)og?M6l$x zS285gwp@ILu`&NdHn$V;c6%=3-X!G9AXa1=cvs@ZL_|Vzr9F`=Ah$kY%Ji~+lH_D= zL7O9Z_ZSs!;N;Rya`B7GUm$`~Ji@B)bdN(}y-bR7g;nIr$RbUF^}8O`al0rNtw&g9LmFGLLJ}WJawYEuP%qpMa8&>OX((BGB7iL zav?s(?X2X)K#H-Ts&MCC_gC4>xZM`an()wF`FE zPdn)sjI?+bN3B7c4y#bF(PghHNxk}6vvN;Hv9F)~fUp=P%q3OF#j%NXp`xxh9l&44 z=jAvS{$#zW>(Kg?qqK&v&9m7?f77mxS$qJamj}TvR_Dm;DMFOQlcdEP`#VYx52Zox z-mW5ry3tedKXOK9e4(}cBy7K?kQR(iqc`g3o>c4aj!5&8Dy-LeO~M~!p(oxiu2*ho zLn9%w#gIoN#i!|qhQWk6#pSD%kD|;?in_(rx~ssH%rag?Sjw^?0W77Lz6RlQyIDF6 zJtPH865f#Vfh;!wD{fUcKiApATY)Fe&3}eFxo$iE0yUeVWI=<02d`rfxL5(W8Fs#& zD|%!AIC-?{7S>{`YwSP(puevN~8bE$j8Jz9Ekdec7tG3laqtU^S2(R!)|IFZidr8 zM?Ea*~cX?!2l%ch2t}LH@d0Z>zRw?(&cvQi&qA_X^7*j~MH%?!Vm{?-F zxBBi%s!LWQvKy7tFNzyd(X@tmZZzX@Tb{P0yIXo%MwByDUZ8^EiY8{k;i2N8iQ%i^ z=I3y8RZ=4?%qcxrOT?;@#QKt{uBuaGJH6_0+swNcL+{P~?o~_`Dy-W}Ij@h=n5$$m zPtoC`@Ym^ek#5v99bXR=wJd zjkC{>G-$8y&Q^AI=k_wycCAiIO>0onge-b}zDm_Sv$$%Rk(O5D)@m)!-4Pb9g0h^u zVh2jIrA)hORnx4S@%M{8>DJ1qwA0qIT)o#W^aRELD#loE<*;gecZ7;xU5Y3uCuLxMY*o3kV_?;x+$zS;kApXLtMS$yDy3%qX zFNWaAY&g0y92u@ zQbSQ1ixw`%hGI1p=aS+zmtaRV{HoQ_OU}%)X#LBKwRe`NWyfuHEq*Pzj zXVW&bQTtMDwPtyPfwI0&(ghi4>tTYLV%}?Vd**`tkiz(DqP3o}&%U>P4c{lrKJboL z^hH{#Y32c&bC0Gi$z4)^L8>~3O-(n!s*Z?i)z}2Aa4%$Q34HV3-t;6~PAHrQ%^J{8?pu7zZ2WqILvIix5cu~< z2cS5?>}{Zqt>^b`6&34|EjYvDU1h5H-N!Qkr3KbR9i=&rdqxMYwJ0m9{g`QoK3J z?cQ5Vzb2bf7Il>LYlch)(|rSKi><>nC)z9uhdB=+A^FS0mScljN_~eq8=8idCM4_H zG{T8czae68BX6#A(^U_S-_%L17*8(OS4WSrha#&&T223QEl{~|7BfyaSz7=N42Lb> z%3JS(T`RT{dIlXGQ#j5jtzZBMTV?EOFgu|(rT=2*D1Wo5Xr!23jnWfO-Q)V}K` zQPAF~LWXiwq>i{&PH;LI(%};6myPrntCEkHhjpXzR-2Fb z;?5o{%&u2lp~a6=#+Yf+)B7V7QmmGvdM^_3J5kir`MNpE_bk-w@7%;%IkaWfWMdFa zI&~ZNV_lD@LhHQvD53w8J6|v>kiSdK*9hq4jh++qR_j;RT6dcOGoE5f( zq~yp`FeKufrjhV&sgVleT4Dqgp<$^YHUE{7hT^?!R9Z^$cSd|P<=|SYlvDI4_bb6x zBUNqy&2h9%Ys>FZe6p0@H=ko(*>F2F^hG3N#pa^oJW<}YvTQ#jp02r9yuaQ%V@$qf zF-TS58swLOSYUkM2Unw`XgE>f{4gPqssfm?bWjQ#u0=$U> z=Jc?I?J=zxqkVC^1)C?mTmKS4M9MvcSCCjBiVE>B8vdy<0&FPPkf)XE9zKE%O21G4yIA*H6;_4fUyD;Cwk#)oXq2pLv#nW zKCi?Bq0JBx(&sR;M_GIYVsuT}5`X3L?0#HUCIEfRY694F#>%4_U8i-?QcgI!EMm$b ze|F3!dvVx8aJI>fg4hLsYsLg=nX{3~4agk1r$@=A*_%tD?E}=XSD^TwKD=v zTbsGdLP#Hz5Kv-eM<|n~H}YOAR|fksLfmO+e(Bf_L$hkx8C9rVgb**Z#yVBTq_F`h zx7_~0Uy&l_(gGi`Do$>YtHgVtc=yFcWi^(RF7XDqC351j{-nWUU_hq-f-DWJURP`d zQl27WA&6oeim2D7*Rqs{fN&5ZS#{fIh`yD~MTVpH8+`BfQ;Mm&&BImP6~-L0j5^aG zpfQVy)3ozqs_zbK`E~|qW&^Mm;_uY#9MEC?0HP6vnN>K~GOq}+0D`(!D z_KhCJC4n&(Rv9mn#X)1YPbe6V0(KZ%QUk}{4@mO@D8+9?aNrDFW?~@uk-fB$7sXt2 zp!w|&*KrhF*4GZU2Ra}M3VYj}QWz|MKHtfai+Y0e3ltW3vB4Aw3>D!D%mkICL6Vqb zIFe5pBKQ*TWo!)tndBT=V_XknuGkqF8nHO-5G{60g) zG&u(uh-CmrXe@}S1_q@3x5jZolcBo?Q$_;a;)i2~87(XzdbV+Jgc^Q?^|&fDm~?<_ zgKV@dltBUpwhkDu+6Yx*ihJ3}f>ZtxMYD%v~@)Z4coYVX8t;{Z2RMDD zTg)1GWmmEBB z6)Unp=FYv;i`MeJ4N6T#?$DUoW_X7Vxx;g|155RgZrH-b6_n_zbndns7gfXw@I-_S z=99|J0_L&B2^6Xa5?Zwyn{A@`IVZcMG)JRy$?W0-Nt_t z3)w@ClC|O?A2jfk6wojb9xGDU@ob}0k-J~OXkyi4%n?*t6(Aeq=T4q}O~4&C)9pIp zSEf#5eBe&@86Y)2iI~s8zYsIvw$^eqxWjnmhv}Q}f2tUSb*-3WW-;wkMuR?5)9r0v z9Ou#4&U9%!-d)ea4s}6STGnrj282tVgI3cC&_yYIkm$fQf)739>1{wwLd=XRA%_Qr zgH%P%(qwyK$_2my@7VH^p|k!hPyE6Td1Quf${;A+o^S$0-F(RJ_M`r4S6_TD?O&YV z%6-pqEsgmp%T(~M<%hrK?={3V{GE>D!< z6Qdlgz)g~tye8quf|t1kRD+MdJ(zzer_XqFmGk1A>kSN8E3+A1l9xx{J=D$mTzj@p zAHI~COYX-r8k8uhroB2}RT4rsWerlyZgzAys8eaoj5})qIxjE!>Nez%0X7^uCbi^& z=z2u*@yu7B6PmT|~?rr(PMa8;)g!;T~!S^(GSvD7! zD4Z>Lz!lQ%JQ4g)Z^ z2G7<_%0*Fu1J+ER>Ss1H7})UdwHPg)5uxe+sN=y01JWxWOf|f&n$Jx%je+k3W>#W7 z=`b>@9*K8d1K1R%_F!BYQSUV-a=1bF2v^p#J ztp}B6;=xa<_LK;f4#(;8m1}416L3f)yyQt}q+Z3vnxnz6LzA>b@Nr}rfiV`{npCr_ z`fc}cAB$~fkc)&xgR6S|-?8fzxBtqZVq^q``rc(}hND0B__^CRI-QyU>w@Pa)?JO0 zbpid?-)3wku=Pz7EtEJLA*MEo0eoH-a9c9UFr~jCiTg@|U>ngiJ7zM!zZhkDwx3P} zY|>n?wnU8)5b-njb<9JlRPH&`cQXOg(&nNH;yP4^rfb{hAI=UHWeBO_M`36~qkhEV zT{xVFR9dT8N6(-4+f^tfq%eha8OW#0K01%+w8AoVg3kqCA+O`<>aE#<(xVl7Giu)Hr2v53$$PF_!5& zZ7c3aH_Be+GJ=ZDwvN3VD8xls0B8D|b`r;)enF_(- zh?E-F7uPBqy|2Km`ntwK_%w$Z=*eKKYrb*u8<&vwkG!J0hws8xOi zBr%OCi6aE@)zx|IQEI7Nx0Df^}3U)$Ma{Vq(ZUEejB!Hlk ztBXR&vMCKZ0B{FEHhFbP}_@MbbxQ!45l|k(`VSj14nL3`&|Vsv&j&- z8tluCu*-ER(Y*#K(m(O|n<=uvnRs$b{@*wk38N?yVp=K_A73UuQX9D+FDdzAy!ObG zKIz(8i>@#TrmL&&`%Ad&K3RFIb@@)a&bk^y+J3z{Gqbq5P2MMOc4?^9fOGKi;sA!utAc%nTXqcgS${X|TFu*Ad-$sq zhFwT(jgL!jE@zy^r~{0=zY(ZSsV zQ`j_Y@9&!riaF^!K=j%AFmxR;y2`+Fz<1Ecbqc4qR8~d+uCqUFQCIj!! zqyY|7ahrSJ`_YOsRb1*0bHIHMMx+ni?0LhAQ+H|}Pt)Pmf}_%nQY&WJQ&H->yMx}@ zhfxjolgyTaJO{g~<{Q+@u^v7aB~`v!{bpJ=a*i_hMPn`ioukjeCjXMY-L&?{QEx?2 z#RUTaf!#NyKHVApc^AC;%+z>4D(p{}SXDnid|0WX+xu}B+Ub~1^c~O4^nE&$(8UJg zJ|G9%>4WnbR|<0kG~uTRrWrKChU&N*b?oZ3Rw-y#$>}zI(AiLJ=LPxpb*K0Z&Ja3( zyHInY?i{sF@tnvEoSIO~+Q@=)LGW|Ws{kBh9L^8ZpW#XMp$P>ALk^B7=8bSju01;^ zb+WvZCFO8S0AWfV{V&x8B&O)Ki`Z+WZ~Up9q=>}a$GF%t-|aqH%N@?Y3i>MT#4WamuUyCCO{98U~66ci+clIow~>BEQfU?0HT55-qbHZRnE_4xIs zpT{(QR_aV;4d~;jTD&f`&85&^|%k%7#goXx-k|T<|RfdLzW{-Og^G>nF zCI!G;0KcpZ1p@%lfVgiTi2DGM{_YP){w9>^05Gw9wObXYv#cynnKyES9RSA!)-#2M42Vf_?cV^Yyhs`v!kM zd}o4GG5_`y3TQ{SwKWTyZ6ikVhrBW1?HnMytb8!v@-MH}+2jo;)ANxy3)_R^_a9sx z_l~-EwW*LV1#*_;EzT@N3)TjQK|Cpgqw@Cw8-{* z0gD%7j@&%fd)!sa1U_wPYr8X6b-`mDcljod`N2HJf%6kPHvPB3J;8!>A~EqXE@Y{g z6CZjnc=Zhdm5;o3)YDI@Nk2HsH}g>zNCJw7ZiNdxjqeWkP?LP}pSZF9#GhXhTKIkW z5woMIloEbX{OcTgZ^rJ+tkQs5{rH$OxVLDf>m=j65&8wXe0lfM+GsIuhmHz&}r-;QS2H`2B zZ>WD31Gy&v5L*INeNfJW(B!4kiRy58FDp!VqP)CzsxDNtwVfb2#RRfEFa@!(;>zWw zuMTEDdL4k_YIuJ^2;hWV1$z;sXh$sG*9MLC*s+sJGUTUcG8&E0L7@TyvE$WLM_gzd z+b^r(alXe?#1gTqQUi|SYYdlle;Ei^QHIYJXqWsw7s%Tx8#`iGnH(L)W$8=-KGlVl zNa^eh;_j0_;_3J^{-_WG#Qs3byg!Lgz{e}}Sk215(Myd;O#))?1je?2XU3B$0Qv8R zq8E^Yw!@-?mE*rluWuPFq&{p%9-)2@&ss4S<6lsy2FE$kqJH!5;C@Zg>VuT)kw1u!YRRmC0Or`)p2zHSM zX{*H#Z@tgT2U80I&fqAoE9Fs0)CgG3TR{O6M?sbD(CDXrZxOVxg9hp7%h@Yy)UVyw zm+QjDn3tU_{IEuz>yuao0tD7hJPK?=11v2AHoNZh?uRQff;YOtM=n+QtyrNncz!&w zT3TK@kw!{ihvlTEa!9N4pI~BnGm6`hI#hc=TjU*`<{stQCFI!&O#p|^*9`x)t4(Wy z3F;Ik2B!}MKp+HrNaBE|Uzyqj2@MMbyfCx6_~>%8yIVL60~8hj-v>~Kp|9;wK+#U* zFL45t4Jnih^{@drmtb17xrLn4kJ-@{HQtSy4hi>s!rBrz@!pbeI}&oV>YR@9%4&-3Rt?=aBr4)ISSS5C@&qbP z4g0X$8y?t&eKdUcLrS5_{8H2G?GW*Xh7gI_wx-V4#xD58$2lO=gAr*ZrvJQQFW7>b z$5+3C6liNo>RU4**zIhUir53-gWlciBcUWcD_%=4(Eu*C_E0MIP9Zgc4Mv^*4wk|c z2;5&79n{8(?aeABAB#zKJBlrB?DwQ7VT@Fk2{TUpuf zG}6PibvZuRozRiVt?sx|c4W#Z}yFEE%SRdFO@~o_}lfTz7_ln^rr2Bz@q$-mL1x zy3x7J{>+Mw@#3(yxB7>d7j?Od&H0tnKN4HFM5n=t*!=C=O5sebsj4Bt;)q`}zuwo) zyT~E6%#@(?-DZLXJy&?4+o(-sdaE_1#*+NziNz(|GSw1n3v2yZ*HJN$c{X$1NOj`U ztf2pBdhI;z_A@?T_pK5Ad``G`*f6D}q4MTg95Av4JQQ!6C;)L^A()2xE9$GrZ)z`* zy^dQFo_J;5F91D*@3o70zuTX4eWVN8YrVZsi5mhS@Y=+Nx>^x%u2&p=qx4I?SDxMO zVKnv(e%g8wLm8i(sr4|v5gW!Z3=(r6AxhRH9*PIzD%c^^&=CB%gK$c*ps)!<5pCbL z_Li^b>?dvv3G|X<06G12uFT z;p$oSfY@f!F6B-gi~ct(;LF7hc>*wmu%);2vy{a)qy;0KpsY~?(H56dHg6afP zD@84{fMkWI^hehu1;K(=<*7!$zq^j%tlaU@m>nPAQ4X$f*3>yQ`uk$#S0NT+GW(Ca zO3K?D#t-kjk=wf>6e;M{y_QrtI;+(EFD)Gdg6foC-`K;m9i+aHh!Ma(kc=dkKEl&gFhgMbe-*`lnr-2iwxiW*{))&xbQE3S0fHM%uxaBX3WVzq9zXWUYI zvah*FQs?%6V(M0Ah~xCi@@Nj+Y8}XJDM0M}K0C6YU;rXQl&fWd^&*NfWZcj}LiZC0 z=tmtX4WRYE+py2cwd9`c>(7;yYtDX3p1=G+&Ck!~Dv^@ttAEZHXKN=rV&o;C;o%ae zoN4K6+Lo3(V1KQ4Ix+phnV@-`oQ+LjeTm1cIZVd^G91_k}-f%WPbi87eC|98%^s*fGOUIFO zWqs_!P~mRNUPAo!w#)8U+q|MXWEgBd+w5u7J_m?>f0q|c0gB}Dch~gGSKfjJ_=aEhp#|nt%&>QFTC@8 zXXC?ju6C9MZmEw8dRu=jsF&`$y>%`DP_H9-xfGyCUSDvXl4wl-cDmgS03>Ort59v? zVoJFfd!SncXu1wygF{piccW=oWnB;(+p(+A#Ol)DANVEEf^lo|@APu|=z()Wkpuw< z!4b0dDb!XsU$fYs+9V+x;bF_mSA=Z-6@c2!aEzAa^ZX|SFA55(Tj7y>A<|A|@WrXW zuF0J=G3zmc-r0>I8Wc{vCG^X(tx?dv0Q67!1S``JegBmuCete&&^ zzpcCFM_aYc=L1Q3ZEhg$Pr+WypS*#K>XV{CjD2elJSM84IOsH&Dv2f>5CQ06)CHK& z#1GHwfbcJ`#m;^B9RG5*;^h8D`Gp_l?aad=hSDp3#g$VJ`DW?L13!t+qS~V%?D`4& z?<&)Ox*h%V*~4yoo0eD4akv{87jf%>7cs3jIPhMofZZW;mNCGVW!w^KN_1VB61zV- z`yMd_ft7RsjY8UVRNtwacfN=>?j9-HVBgB&rjq8U1u2WO8TlXpOq%|`tswq#R~7QM z^OJt_i$&zRW&-9B(04k3%PL*F!Kc8FsWw=Ag|+< zKv%%B6LX}BDS?z(<^wU?&fZdtwya}kt!KNPjvf~2tN>!oQvg{sK-eN%y~xVI%& zp@0?9?h{-eO#RL6K@kzHL4nP|!GZOyKH&_{*kr6@EZMV1$&T2cR|*v9#pFA8$iJM^ z%go(8uUrY3hcf^LxGnelB02Gu49;09FD5l_xpiK=G2oi1jZL_2A{;cX>r}7lBEmkm zz`*5q3-$zVz>&wl6FKM)I2GAEe56RTd$5Tq>UvF!RgQ@Ut z^#89d6gYITj0x-SXUbfxhs0mPi^oZXenQoou-Zcly#EmWcSvqFv;oF{gvGvA-dWgDzmnS=r*xjbjlqUZ@+H!u?5xg zCN1pkzD?eInXvtA!7(UH8qPI9;&Ph2 zqWrm=%q^3m+tS>k_&4*-6)KJj!CRxn!@>UT5hTyfA^+MeAih!2M`%}elA@^%GZ4V2 zpnEJQhIa9Gb8+?qW@4@s!zq*TwlTA+o2QGTt0&N#Uf#&rxIHn^ zsOJwc8t)$$?dyLcuu5iQT_)T1C2$?8+S@I!=B(WQW%xJAD%#6GBEk;+@diw2V zUI8K~z1uGxapJw1v!9EL8;r7HZx@^;B9T!>EcA#fzFp!RPQ|L& z_g}_h`3kW>7ps~XyD#&d>ich4`Cw1?kOvH>sHGF5;wDaI4`xL8Cb(L|fdO5*4Yx0~ zM819e_fPmB;yE{JL9m_;Dx9UJZjV-uRdCBK3RbsLSi&f%sM}u#$HYDm`>Y8A(h;*h zPfSf_;w(@JU&Dk0?wAA3(LX(1O|{I2dZ*6|D#AVQCmzu)rrML^@%3G zEmV8uN#xLkoMoTPqij+ZDLD}ii+ZA(T)(l(is-B|_is(8R>tQb^X>xW^1%W;1XfEL zO4`Us?ZSEeaDA)_`1!pH^Lpwn;tEYHTzwo}+;Kyme8c3gu~x`^ERaTs~5 z{g-#Ckxz)Z>38{Fx#=7%xl}R|NM8c1Zk_SIa@LXgv(mqM6>=+q?sZEiDh(Ei$SU4I zluq@D5=*CP?9;0VJzcKs9Cp){$Mod>L*7F*l- zCEDjYB}UpY5&?4G%Pua_G1n#$Z%2!ymCuMK_VSLG7H{StMSdDduD|3`#Y_zWfhf z>x9XC=bKG^s7%hRq5)G5Z%a|m?X>9E2gf)hR%GbY0<-%i>Bli8(?VcTt7+`J->FQq z=*yuxHkRd8qFMUAIsQP+!Bs;W<)Iy0$m`~THQ1J~&GLH9)InZ152V^*7P=Rt6wF-w zaL%sm>!4n?aPwlEv#6`5BiXzwk6wsZ&m#&oh0UjOx2o8mMPMLz=}$oVTp)Y_=4tH0})g^L{2~5(D4@0mS~Hao;~| z5S+E40jdX_;1Q<39>A{_Y2-UCNlABZlLOq&X-O|McXKs0<$!tcJC;D~hx=J3?jB~A z?p`L8)J|q5xwGn$?4L8MOdcSgg;_CDBJ1_N&N@o24#{@NVEk1t1-i=ov#7(D@<7rv zgFMa7TT35@R>O~DOXi;a4c6OQ)RE~`3EC}{uW0UIjk>^3;(q$Mh`gEz2OmA0o|%?8 zRxd3G%VtKH`|J8D$9}7A1s2%lWyw6q%)=zENfPIL4se-~rX0H3OW@|>hcmTbAu+W20u({;IEV(9E=HXt5>V-|XQqE`wTtE0}z6lU0a3Cw)y0&4+eW0ji= zcQsZ0t4N8L-=7e>^0x~{Rji)3Uvd`i5P6@T{by%o+I!&}i@`jDI|)&pByl++i&ofC z+nGmeXsb`9UKP@lIkpG@O2=SYFza%pT!oa4rJJT)u|!@>n#{V$wAU8aE{MBClm{|+ z0FV@l_Af2q^!=?PYB&BoT)v$)=+t2)pw>LK%V`}=2;|8YqOMxJwr75h8RlgvV~@_P z#iYLZ0M^ehytj>I{x?E-SMg|may)m$EutbAb(j6ktdKutQ1}2gI`YKI3&wwXgmkkp zQLUxHQ_#7`@$>(%+AMFp^+7u|U-(HO@@a1fAFMsc7Z}^I?yl3aZ_)|^=orUTH$-*W zDm-mqU+LS*@HeZ;_j0m~o7L!A*m#&&JKSm&aT#}~;mh4Z|1l6QY=#8lUtlIoE(g?A z9XJPBK>p@Zz2+y5HP1CR?Z@c=4g$adhO|+|75t4EnPMr2&%y>ZT>dJesqmS0LyTxE#=>tDXfT3Fce44g8a@(f(q zSzuLe{+m)GzDiNdFQpYz=!@#WkT#^a;#D|(Up1dU*@vkH!vd2DGNLyE;TrQ>#n-lKlbrV zm$5=($WU_}xu~PU{;Rpr10ePvB!F}9cD?{5C<~P4j0}A1D|I>X-uq}DUbbS4PoRy; zOjiV)_#f3^|Fxr{h};|(GNh1be5UKk$AO#ORgT|)?YJ2b-zKN9C8q$yx8ZD5q1-50 zprId+0ALW!n0G2I-sSKEl>4t%FuYP~`|iWbq+x%mJCLmG-_nrJLH^W}di|K&GJE-v zq(}nN%inrZB`)^e9wF5WXBuKZe!0QNu*{k%V-2_Smm4dXyq+FEWE2vFVt}$O*X}ZO zkq!*RR!UP`txnC>|p1~)DoJW$AZoRP){pD?i2uhU;hUP0m%MUaG))!+pXVG6WWxiKjIcE zo@`p^_)Nd`#`$=W)2bb1&;++CuC4L5`~2UP)xTLO+++90eCp2hPipda@24;$U);$} z{w>0vGVZK{T#OBxu5#R7Zb7!)& z{H5&drF=^E@={KI>96$Um6ZIPrRD70uXr*sjz}iqeKSbJxC|mtvjs?zENtTa3B~Yk zgi3Ho^!iF!&R$X-{vJ-seY+Fu3b4NZ&xPQ8WJbdSPe3>$a_u-cLJS?JA)Tkr*H{sW zWKTSa>|a^#-xR}TtqxSuFZLk|j7y+L69IWB>(i^wilxW(99`XQT+S5B%W>mmt+X4? zv*XAC&nL5)?c=$g&(l&pPWDqy|2#=^oL?UR-mnF}8vy)|VF&pbh{b^s6|d#oqc#-&QX4R}Rm|%2pZ?$jK@X4VjE9q(jDIg5`i<_7 zIkc098QR^`MgU27za3#W|H&V29nE%~Ji}#{iG2NN8ju@UdykWH#hs4SNgA!#hF-`7 zGHOk`9InTY^^tid{v!h)2S%oWj=~+8xMGL+NdWlTNyTG01oHy&g3B~wYz*Roz17bu zuu^mn;jUA~JT}YtwqAM(^}mS?hnc(6&+B;Ns7(t;^j% zu`1}~+i^jCU#8*KS7A_|U0I9Mm8B9fs+w-!!Wh*MU5E2Jd-#{13=HaSqM~4`za~n_ z80O#_yRuzm5BSZ#>g}8#5XR=!l=+8$B=4|Z$FSjyn^I)ik~-B)H|B`o%>$}0Tn@8t z;~NT=NC`k@wwTTQ{m0`?Q!{Db$+4-a8x`^tynBHDTHk-E_I4>1^~1h_o<&P8w`Lmfi+VXKwFuWCwa$Uw*HZ#MI zs5?cOFdITRMk!(SNJ7pZ7Msf-7R2cx2KmFi>@bP9GatKVh{Rm1LostbP$v zI3$Bl$rd;0X$v}Zv!pnfo%Z0<2PSOe9)|Iz2R+rhzKtCc?Klzvj3~wE!GR}vkyH?K>Wcf{jmEROvCVH5HUW|pdy^D8{J|HB!sFI@Kp4xOtIRL|O*PcpLKyJZ^G5S>$Nvnbs z7gWvZu>?!tJT)OG>-f#|Tc$n@qcJyZvP5DF4|#}D%P!~1d2g19&))Wv&i8RGEMss? zyi^!_TObTFubQ;(i!$fC(Y<};g3_`hx+&Ki;GHS_zA632>)*g^eZk&}wruuxqj99I&$jpncu$r0JQ(fhZ=4J#3_GLH zyzn%`8|Nrn{w>fml0oNn;}t@<0yO_edzxX*GnV1K6~mz{@E-N2U|KW(5jzYsm%~y2 z5Ch6wS7_FUbSPOz+U$65gZ(+`DcFU46!xdZr-F%Z4rjyoc5Yz$o3X}_;0|(sYpVKu zN(01N1=hbeo3hs*v$=zt;OB$nQD}-zV{O!q9c)Fg4v<+ z*^Z6v+N_r8wupC2C&n9BOD9*W?#=Ebb!d&2qiHo%C{tTCWl9v9tW?3_jH3qz!(`Md zw$smHydrQw6*C1zM>Fcx>3i(gR`ktghgd5>a^vg{tUeiI>u`L7)k{ZPSZy~G-#C8F zOz=k(U9YwM&28syA{qcIC&C_RvO62#x`|978Gr|ZSU*2>p zs0z6MbErJAtJp34DG9jq{=)P&Pyd#TBd6=cje14nk~k=z5`XiUMV~^73pzGmN~e&A zQ#Ne_{LswUG*R%+>Z_ap7pE7mz1x%2b-D4+6}{M(Q*3?p{NmjEPnE}}{lBgp-#WXs zWpOe5cVWBC!oufozxAJ||Mlwjw;x;9;>PX&wqMVyTAVzn|F;AdERz9%cXI&14B#z5 z1wa_fd1Wl}J=-D0Jx3(2qYU#PEJKqK=~t(;2Pn4?wluGVst|4LxJGPPI#v-}c_$`7 z-&SW4BU@!2mq?9VAhh{jz*4(0eDk8DARR$m>4S1KECe!?D~2G#lA#*`%G&`wo+&A+ zB)T{}ksC+E4w*GW14-}NR*j$?4RlPsZi*LjF!d+^^ZrUER+6*icEmNrRij_k&WB_X zj7WQ~NFiiemR+jH8m`x-Rf0^}4OXdtq_K6GGGMImNbbsG@rPi)s!WY`;r!)t0cmcP zU=zC;q!QIH*Gk`Sfx$1+z=*AT0Kl-k0&;jMVCt65>)v0v`BF<=vv)FkYLOa|v20{; zpN1MH*E%+?C09nzYqVt88Z9akRM(Wsjp733;scMS>w@j0zyBrG?pYCNqGi(MdnKAC4S{8V+)a?+t zMqqKDo3Uk|QDbAe8SVjfb@sD>v28uF#aM*Mu_hsXmBt*YmZEtNF(t7jgJefGN8KG})I$;WIKE{Nf8n3Vg zl9(HmCyJ7|G94+}u+E_!xKDA`Bi7F1HXO#}kZR;He{OEO3O6-P!y$5aVC$9d#>dh5 zazz%tZfJSYRkb%h9>v@2Acm&gs|MsG3vzI*|s9d@8-D?nb8{*@jPdJ%y?Q3cCoMHsQiZdx)tRwOy?A z&MD=oo1+>gj7n$bl-;Nq88USDh~+*V`dZJ4&7VQ<7Gs^2m%BMlXXy-F8l`AgxpC}T zkqT!$CsB)_u==89G(F>LBS5=_01J1&WQVU?m|)G(IyV`hA+o9Ud5ByiuvlU;w(Mi7 z9A26hI$(;-^jNI{2HlDzNQ*H;Vi%O0RjXq)OxCC@`|BP?p@b02a75;-Z%qQ`??sZE7=~w%8!sKZ7Rp(4KK#1Z;sLe)yBYeAI=7NX zgBrl}PD+mC|i$mw86{pc0yLY)sybs z4Q_H5mOT8_m^w~AsJ^EDfAwwk_v(erubWC)8_XYO{Wa@mmOtx3RxBH{{KoRS1!RwB zJ8qlRuF9xMwWu~p(?BBm)R6~;Q6f<&PLs4mGF_)ht=3mv>7QOOUp0Sw$%a^>&9=oB z*#)~}-?wvioxzD|wz%Xo5A$`NV4h{CT<-+uxyHGT(P6weV1@)|I(L!_kKRs zXZlIcc;2rEgcz7$hAbRHQlNzGa1_QuOmcx95P$&az#T$>2-yH(6}lsv&Ou+gOG7k8 zA^ry!a1FO{KR@MRj_@L<5JGxHKmw!}4V1f!70*rzS1VS8SK`|tOgDtoQ6vSYa3m&=R+q{O)@(un(2$2Me zC`JWNdJNDod zdSMtQV?L5Ng-a;oG1ADRtj)U9O*-mPjYGTGE>{=A0xgT{@79c!zSgea#h=@E$w;Fl zOQAIFoPGHCx+*D-Qmc#lYm8^rW=8Q14(Zq`YKD5Q`@Sqv3RMQy>BuJX7nD(P~*+$^t^R2lO* ze)b){&(C=uALSqUYkt&6{YqevFdOipK5*gxqAgCbBW}g#aViQ?Nw&00MOsP$>DM%u z?7Z&7Pd?*&etWu|C6{QB12%Ai+x5||+Z`LSX&bYctws+ciKxho-c2a})ymqf*3(8h zzDM@7PU}^@wfA*S5A>6+d$9k}o(t$)vJ!o>cRu4fkv~+w1yfH(axu_7AxK77lpq zM=`HcuR~*YbujmpU3h=|b{+7(>b=njpJtz7pUZZxeboGIy07!S>UaBW&kt$8WxsnP zIl28S{>`&xjxK015U?IlwOZEf76Kpkm3?cc&f@d-^xo4VZX=l}Ceat?Y9h*Ix&ChNk~*=Yg5hPw)j3$GMlB|B{A3WZ01Kbd%sdTgNU2TB$cLZ+3zNr)%hO8|hFlK2iyb&$MJgFMPoExr;F5S0#m z#uhiyk$ssgAVF`+Xxe!kWZ}A6{8E#xSkzB0;%iv7czIh6=s4yUtjdj5#E2_bZ(EwS zFpVoLmR?qyPLq9JbV~!ZiE?%@Ej3J?2XR{~fU1Weq1x5}&|3=fA)%&<2&sC8NjQdB zPsZ^0>Al+`sN?Y4f|hi_QBkx_u_Gi3$SyiUOd+Z}QcGv_^=x7ZZ90KkGwHH>j@U;2 zIp4oQISN$aB?pcMBB7lz!Y(QHby=Vr>S7@@0dy)KP>BJd>RZq)f*gwTNU;_6s>Bq~rGk#d( zZ3J-d5Og9kG;8%@!LqQu7~EoiITr>|bfnki{Km=B*WQ+PZ+m$Qb;t_bJeqn4)vDFx zD^!{0AsO>sR#=#r5ct(ttMD$lvO<2#PS6)J_vK>OOArRDYPCG3oHijZ`$YPYh&$ud zAY12_d<13lItq`o+Gi*o%4yAkXTL) z&H8(w!T;ThbdrG(gmXzVc?3#;J)w|OmTzpm z#u|jnraxp3*b<#wc5h&DdKza@*m0VK+^_rSla#A=EIAFk7c zCd=1JY(5J+=-v2R5}JqkGJi=K7)z(`tKgtTik_LTME4ebHNqDR3>12dCLZpq{&AlA{nBpXa zXn|S|Rk;68`-G}ulsU51<1R0;WPGh=wU*i=fu=AMdRo%2_gm$vWKax*F$rE6XHWHV zq>KD4i>`fcBq*wnM3A37s0s&{RtV?K*L)`=hL>(UYJ;JEHRreJg>HKi`?>Udd*4P8 z^9Qk7Rf+g<%;mC%f;d(I7545KB^M75gA zl)cKgYK1)V)jjeeB+`J6%h4@vAZ>tPQcFsVXAh(NyiozIZw%N=X#H%ulaK&-@dl8{ zF1_b^P@q=hEoXVrCvc?*TtQ&#~Mu0tDD! zN00zQ>t0o|?FKsKh$caIaNpEiBZsa52hbW}om%N%5#H2Td(MsCFV|^{?nL(Hft^M*DF=x^i5^n+ zer%x_DvptT`tTfn|KrQ#aB#}{#dEt10>G}Xtqwl~<;uDECi(mpklOoXcvxMuOIYW4 zsl5?3ZT&$iwXs2zkZ%}nX^p{c&dKA76I@2Kx}c~Us6z15U2Q}v+~%ZoiWaa%dN#MHTj{44VExvK(=#pl9_8s}2(@T;MTci*jGOmoLk zJT-#R(ifu~GgnZNFy9;>u>+!LUW#N;UK4~?h(nKIH<sO>^#Rb%`miLdhqO2frc`zz#Kn2 z;>?MX1drUPlktwmeeuibyM|P1D$g`%-^IUTDYpTp)2)^QssnW_U=|Br01!13g*X@mNJd zNj@-TD(J~tf&o45wQNueTNx(A^Ev$_VjpLv!N8<6Av{@x5G>?4>(Ks9o}r;1z_O61 zg;cH*Xnr%e01_GXae<3p4+j(p-dZrgWKmsUIx2I>33ZtsLetWrdB)JZ_z|&hn4zV67QNKkwV3krxCSky-{Qb!jb` z!+ZSeqXjoS&KFgdClx9Z8>nTeyhHO&Yk*wRGcz=wf*x&xLZ6YbGUT(~;Nn)VJKT*6 zEss2>Mg-Y$ z&8t!+GxCk!=eEQY4D^m(I*Y;Fhj^g15>oXwfy0TXR-y+-LMER4YZ>1RO_-Sltc(rq zwI>ztn^XB@Z>=!CRjI8{OuSYO0!mN2!a--oAhp%b>@A2{`kQ`wx`e`x_7jwj(mIn2_O7a_&q z=9t)r?#O3v(0V66Jb!``{G(cex5iO_^t-trqI-d;AZ!?_-AF8b(VILU2bgsDtf+1J{VBnz^I{G-}p$gA!!=@yTNlp?$2f zpg_hc+fm32Wyh;dtb`0|ENlS1*;${aUQe?jsfL(w5(mPvxDS21)DdvAwgMmxY(={z zC~|Q7ve4Ek)u`@Ui2YEWSwLTTgttmStT3i5+@y~!s1S!+67Mx`1(WhJL6`ccPB=xf zfmWXr?1VHW9;?M4x(``0eBvgXBDr#~dTDrI3n(+Bno%8nWh6w5-SgmSVC92X<`|06 zyivBqS%ZW%)`Xf4X0_!~)^Eh!VI4cS%Q+jPmXECS; zEaf{=f_aoMZ9oG&$;VYF5%{#XvWa7$D&@x@=&rq;Ca3edMIKzt4@+NCHZ_;n z`shX2eV)o!@ebnZleXm)F8rK6-3-(dL?Yd*Ame^o7h*?kkXMqN$fD3E@_1;)R$c6Q+nL}dY&nGu41loLK zzodXF$Wp0?7&CGanLG@wmIf3kY#YT)KPYS#>pdBqh)`)qCck?1hE4_g0Bvt{0~=zm zMF==;k(BLn$&9KAn+PoqfPgd$YN+dM=HLWd?W_j|)kGj;t&70@LH`%Y6|snTOHz1+^a&2zBUKJ&ayZ@3pLPQ zf~^Y83A_zF;URRd6o^STk90r!6EpSB(bg6L__?R+P219%1yYA5p_3j~Lay7K&j}S1 z<&Z+@Z~FDHSIT(4=-D8fE8z#m_Bq|p7I`BcpGg?e30;@%>@;6Z3)V@u?VKRgP@_j4 znhVt~DHxX^*me{YfV2?dqD|$gnmJsHY<89T!Cj+?L;$IzmrcIYg_ET5XNi9V;ymnR zs>2#sk+4j8vVWe=2!L@`(A#dW8U-FqOF3D@5n8GnUkn55BYY0ihpmCfIRaLTfq}&_F$a#ImQ2z#Ie)8{1X8kx{9hoeM)j2S$F*!v zb;0}b5WJ;i`1aeqC6+ZT& ziV+jkQyl-n22(RDU-`0TBIgOX+rz(}IPYa+cp8Fz9wsNh0=lN}mCw_pCt>0(q^uh@jB@C5h# z{N}DrncX&r>UYT!emwnxdla(-Nz90=g*N>3cQJUf4vMaKnJgb3@)6GD_DN3-deE~< zQMl%j1oIMN!}?iC(A=)jouNUkA6Vz;RRXyn4_3tB@y0??MzRyl*WPk!9KGWTxI|oa zg|ojl-1dgfyQT0@OVuO}hl!g!kt+d@dqAOQ+~wXJX6|6&`jn+d7-Hx+KJ@kg!1RTp zl5*8$y!)6PZxTfzWlJq@p#~CgU?^Uj1yrm{N_=I-4VG@+ne_k^G(ravOh!^9=%{b0 z_I@=j$aADPET|pO+~0pH~T z;u^hECfLvTsoBtE$MSrATWRN##Vd=QyZNK0!5fY~?thT>{L9~cMVBUraVT8<)J$oM zYW}Xc-~Ra#12R=BU>;}3O93*F_D%_H2;{F?#|_niErEfN5moKqN>I{ZIuT=FW4MA6 zOj&6s1D$PW2g1V5?EvJw86-Fm4V{Pp9lD&Fu(?HrQ^+_rsW#Nn!Yrq2&4B}pDiS*F z1SFTlS&H3H2_3Cv6*U%bHwTI6*Ct^amx-YRKC~!7W9k$F5T}q!L4E~|=|yyHcy*qUL9m$|`(eFPaFLetUgRoglsjdz z!d~LR9(XQKJz`v7C!d~8nDaeMwI+m!p&SSu*Qt!h7(;!6Q{jvATj63Rt}wYAF9Xy& z&2i}fuos-67)oRT)pkCHSI_{DR60^`FYOJd!8Y$V#(by6Xf~vJJE%0RbfddXciA+^ zZ+Ip<6OR?!!#lh+3MFWJ{gA@p2k)SB0lh%k6CchN(NwkGmkvzy?FO<` zKYq4r)S>nC!FRF-a+kixec&@k)JG&}i(So$OP!oOi9>jVLdqo99jWMX2K z2oW;lz)-c8N{=?TO8}eJ0~e$NHgC3<==k9OF-n`rqeGej@dE(KIVNe(Y^ceNI=hI zYH$(A*Tvi^La1!3qun+8Km?C%a<1l$E zoyoIk@SUplO&s1O)5ZB<-jO#$1K&`H=Al#4eVfTQ+nR*hC2_JVXDsyZ>T#S# zi=TcNl%VvNKP-@Bbfd6vGJ3B`h?rBD(B^x#nE)C5NpvBB7{k$&|F}fu5Hp803+jXt zcVL5T!-G-nGJSU0;xHD4_rTXg#r8Xoa;YWNcTst&s;Iwl*E8io?sZx(VfGB z&DgEmjdsbioK-Eaaecj>5*t5OL$+@8ynt$mQq}d&OP0ZA6dBCdCQ<5ZMwm6yl6!k4BQ~ zl7HHwR#%GzRimgnX-{%yJXico6}nH0LsOsW$y43=wXv-GK;Bcro@EboY;jr#Yrfz1yx9(gWuz( zJ(bXkLs8p)Z3C-6(|X$saQFnf5p?rq#WgCf3SlO`HL9ULOfaDjo~X8yx4@lqM0gz~ zsngmdQ{&w0Am{{INsrit!qQb-z8GP5E8YtjxI%AVST{oxXv3J>7Vj!igPKjFK)O3F}n{XJ|$-= zytV+qw^&iZWG9pALi00V=8N5dIl*swJbgt%Y<84zj~#%WvF9>{!!lz)#cGb+N71%FD@Q(BA>H@1gy|ehtU7E-AvoqH`!33=<_>6Y!Msq_ z6*iL(Ap`JQy1GP%x-~6h4uXCgFD#g9S={FX@k{X7E!b+ZD!UAj@Ez&(i>U^_>Dk#~ z1$W@z#Dq;qCV;BTy0$c5ja+MD>s1_d6_s2GN(KrxoPB&@_eaRGXw_W(gh;*HT)e?@S6a5%(NOSa5e!(FOGM;)hO^K z_{gCF-1RBKM;fBuwgd57g6q!i218_ULRZ-l;hr_$OqNL!UDuWS5MoL>$dr=8<|j~b z2x7CEK2T0?Ziruk)7e5zQ$=t3zXv+eNY?2hka%e{hb%k{>-ROfJzNuWB)XdtDYDcCdZqk7Cuf?xWcrIFCg>U|rkR&N05AWb`MqDuzn^V9tt3yhwthQdcD1zj)F{W0D8~&r@89O!wr$> zT~PSEkqk8QyR0Tg9FC~etzdy0q}$TBa1_XYjhM1p0z*v}a4X|L&_rOg$qt6;^!TG| zl1%6#AcTCN$T;`JKDibCDCOPdQ1HwP5O1seS9=Ha+HjukgqeC590x(J##P zGP11@A+ErwF7o=D+R6z1c*m6FQU@lvrB_GO`;}^iZ?;aIO!k)^g71IZL2brOGPkP< z(*&83@%akon#i@0!6ZhD4*{{ot`0Wm7~S6c66LlU_Es}Z1Z)^81OTtAkcMklNo=Gq zzBZLd-&*y!q`K!QUx!Ay8|+KdU?`Eg88cD~={N(|h=@2Z2pt%D7?qvHfkhK-7u&8F06>mr=K(M^2f~O%{1H(IC(Onu=FlGYG6HIo?H8S*E+-sRD-l$GEN`< ze*&YqC2{{e(Wt0P62;b1cX_iUAtf;(CX(Q-0rq<_heVQOHg>a>Y%Qf%-@x?wF)Z8g zz&{UdTP;_yab7@?7K=_OWP39MeYVh(3Vp36SJUyBE&*LHCl~%bFkmuD-z>9r!`oKF zw)qw1);~Ox#A_P}{K$mCxX-wm19V;!Zj^sKI#4>VLduk&-CFqH63&|JW!uV?tMd7Y zjfvvJ0%{%SLl=KZoT?h#sEEx z-1)HpaN0}Xs`1_e#5?}F90gi9j+Cv9?hcr$!-~s62T+}I}Ko0i{Rm3IuwLQj#O zYVuo#TEqy&Gj1!AYAwOY5h>)RNI}DHnj#4u$rZ$>^bhwe{nMi?m@3Fl739FsQd%*n z^Vf*Dop}d2FKVn-Vw+8&cXn4%S+{#2y|8>&vdw$06&thu>l+jDy81S4WU6z)7eM^U z6CjtXNn_u-tG52h!FZYL{s2ooP(#Chdxg0YV_jijZ=yRSgVUx=8)j+5a9z+`PM_a4;4)nGO;c)EfFA3n%WJmFreoR+wY87@xAiQg_$$eS8S(OE-kT= z$wVS|Ot!2GN3RY>=k_N+sUQWrC*-DnWiH z8ZRfj@WDD3!&#xSItJef!OAi5YAXc!prv<9ZFaaCAx|KHw&6r|5CHUW{@Rz1Yl66} zz?{dh(7X2uiDUb3&WN^so6+u&>4}R3i)yCmzbaxa%$AC@0eoCfAA!k3H5k4)J(f_;r? z1qNPjP)=*|F+C2yF#A=p!A3AJNe2}Tj4(E~Ug%BQnPt$uYU(~5&YWvKKmFRte8DtU zbJ&ysOF*>0x||!_a%?-P8-=XU7JA^f(Iq24=e@(8^htNKZ4dVJMzY!RML({Z4EkNO zGTGN1oo8Q3jr=(jBcz=}`TIYcK4#K~(bQl&(>;sPIQaD&q07c4F0k>i0)Ok(fm;SY zf-8Li0#eI=Yz~M696-CkH)0U&X|Zb6`>k&>^K>Z_;MVFaB=9{z7&g#8y8I&`2Bf2U ze}E2jG70aC2zZ_iLo_MXt6vfl&oA^`~!HDq|?(40)SPVa!Ym+QX%7HlQ z9uZ?o9Um$y)ygDb>&Gp0SfTali*dP1PQeP%bIH4fAU4_=z1|FU9oCNO&}WN2thVDu zW(U8wnODpdEmPSB63%cNgVkjiW=Gngi>8xjxr9bz4_GX= zFF@0weY75vBuC9($0k&`M)ZID@pgT+YBAUb=M0^9Gn^c67pf~$0&iBZe>PIlGmIyy zstb!_tdvm0H^$VXbW=+hQj_$jz&7H@c=^6S?`Bq5b)-e`8%J=d)IvxC6=oppPSZ+L zI;YUiqN5Z=P5Nz2$~XwCX~xT_(yzDLm?K#C*|#hy8mr(MNctq`R##F#p;~3IEma&4 zQw{zYCZ0r5yva3d8Y#c80@9yzqD`pL0TQexNVJ`e?-uzaE>#hb^tD}!#M{%}*-d=Z zWjXOJQK~-L`gZmtc2%wI2?#td*IK}!Mov$n@(QEY3o8@yt5BxX+R8JCwQR@;g_B}I zGN;aiv&RxjWv`v1J~RJyq~p5cq*IS~w@}>+(JeLBClenWE+!0xQ)-url!d^l!N*CP zgNRKlh$b1%LFPio&>K%v4T_)$2(h^E24Xyk$)(asi-jZ!$d97j>|jBYmQ&r+jVN+t3yVD5Q&$=jo8POzQjptXg^HL}PvOKH`H^QT0~<6dD~pG=4EkN_|kMy}WE$|8B2GhrL#pL}aX z_F!N^MV3HAjx*{qD8@zdOOU~(Gg$YXW-2Y*%?;P!5fbk5TUrN^WwQPYBXFd$tb%=9b7sPYn35! z^M`6Es5lO`6cQWrW=|HGqM!V#3%Kqgte?*tdTnTQC zGVC{V=aq_cOo67kWKkcl>>_x6BBSjNB4mouGUfdBq;QqC+FGUVqzC&MM#-Q6N`lTP z^)?ak^Xu{LeIX&?Obr8HLZcj-LN;a(VG1++6iw|H+%r0oV#;6HPKtls-jedh#<2#@*tLp!$yU_r?Bp;J9w2$syIzS;mEfmv&(694*?tjWC1+ z5uN@ObB3Mddn`NV1z81wZLr;az>IjPN=W#<*`3ED;-=f-+$BzLYcd}Nd?7}}K;Wt+ zM#7>ucIm!2g=>0aM0`jlU=8Dv$m)!~mcGGFXwVF!IX)w8f*ov4GpQ9!`gcsnl z=AuKkP3-XKltAT@r1ReQR6em|cy@c3J2P7pps0bFI32)a#Xc9_#vk_>`*x}Wr2XmF zpzd0Th z&eU3_h=&yRCLhS&Y)vcEph(uZf$qW(T5S^jur%L^opCIA%>rS4h;h!VHg4~&6F~w- zxdOs8C4;)7oVN7(gQ9rMhGkhB9U-<|lP3xiA_|=mN(Oh=W)3PN4f{|Mr9}5ec>quZ z+eLM6c8Ku2=+=g03NrDJ9W+q7@9nZnLw70YltZs#Y2GG?2}w zg)HO5J-f0K4e8i<=AFUb8qd+Vh1HeL5xkN9drmz7m}{$e)oUrPGX`#$CF1~lbqZx; zV1!@cMa6tNGC^TKz~s-&H!^pPp9~8|w^1rQ4VwLfT}y|HyqJ>*~?3=j3SLb$1TjAmcZbqYwf! z+vf$of>p3kpT~?8%a;u{{HHN)e+{Fw4p>X&n|8;)gEH82DDE12p0C26P1f3BwisIf z!+xjce7Tj?T~q*RYVbQBI`6y;8y;{=#9%wB^@w#$4n|qC4`g;Da{vKB&cZfPiQo|{ z{f|J#fvBHi9_5P##G?xIFtKRwDveC&hh!m}^`Q&7Z;B}c!A6vLO^UGdb4h{{1*Xm^ z^~P!65sAbPTki3f)u}((+vMOnp(H5+2VptW6JQ*Nn?rJ`z|u_pp6N4AGxMPtO=Ab7 z8?`X{_;ilCCeSCF{Q&GJ)5}bE{44ax20I*T=ARVhRuL$GO*W_g#>Trd)2pfqwWPcj zEEpxJt@XH(@MMRi7oNE=a)oP54d-dG{Am0bMvT$Jp7cSf2W$+4(R?`sMQ0B>V@`#g zl76NjTX{hW@@?nSQAj6Nm=}{|@nq_{0&R6Bekg_z>yYLfL*tgO>+QWxZEW-a=f{8z z3v^P|0|mL;u}|(xa;n@n{2Ht~_+9gqp4dL_5_!>1wiI})d!kJjWElBuLIJdpLj!Lf zok`xCct`Q7eTzHP(2~)kNq7sh*lI~6+-6&icLJ}e2#Tg=5R+2O$GuiVYSwfR4ZHOP z97q=lPKP)KDf9k-B_Z8$qCR5wqapFzOn_{M+5QyUuOY)BPcXDFS1c#4h{J87$h?ox zL>^%v!|_0mlaI9~EMxcgH4|zUq~X4x5V`>#ZR$Z-psxhHQ2?bFy51O- zegxe)SC2h}7Pb`i0gQc85T$Jt(on`INPA9uh2A`)MmMmQGPN(~NUQ6TPk`&@15GWw zM2b2o9=z8T@&pmEFcwrAVFfKZ6-JgC5Vk0snL2{-M>}e~c75aR`E3*z9>mBPh$>8l z-4kSC0rR4J_i?jNg3kmGXP#GQgXzxP_Prx(w?)a(o#|E}u5d_(`h&S?6Xo7p>bt*s z-p68+sb$<=I5Zbr%BDSv>GKA36YlKEvk~@XOK4ULV9{d`b*ln+6B5KjN9ejTS__*i zl=lyFB^EjuJrUf2$GTEXuNj1>acWo8BfKaYlk&Efcv74|!#59M8s6Q7OU zu47Y!RG&+mYA3nKGJ&Zeg>8&y{1eA#jKrrNfMBVEtKO|XDa`5$ z1VZg@pHhW0#*C&U)3lKY%%O;XtPj^!Gu}6y1obK`>^KPg=@^>6Z>BdVG*7T&WogVT zLTEu)e=|Yilm=8KiR`*F9H;620Hg3{lU>*W%KNA@gf6fAAyiXIW4xwjF@vb)m$`nqAn>4m#$g9vkkx*$~KWX5#? z;YW}2<6DT9aP~t)e|z`E8UlqHKGhmA9GB}Z6gYHFtZH&dvrh188W9r-GBdBvA%Yfl z34_Z#!2pa$Kw{DlL32QYIRsxuOdfi)FlO`kYWd_5pkwm~H9y%698ciG!A|lJV&U{> za1TzDF*x+Vc1myKmr7FS?p!Kx_uL8!D-#{^lex_!b4iG2dQm?y5>Ris`IOUD z@WvU@OU;iS%gAV&Z8$^wknCqR2PQ*-unfgLH_9Ra50DiZ_vk11{9Qg%Gs0qg$|4BN zCOO!%k2d#w<^CD|Wsfl;^P2oxAWd0-@op&|y$T&IiFlznl`GjxvR%rvEtI{f6iQ?x zinB5v)RgXCA|Yext3hv`M-|^ARg&q(+$ph2{I2{!B~KvsA62z4RuG#C}>Im>C{>_y<0PVHBK zyY_^IaNj8(=Mbie6)YT^?I1!I@lKyqRGo;;uepCe<{sBIDLm2UCAsG3)(K5D^H4l zJv|t=wFN$NGdKq|+6fb?Jnbi>+I4UZ1p3Jk~Htj^nOik#BX0?P%CulOWIHxbDboxRmE!D)N*;V4800DziDg3zomI+8) zwi+21Z7FSMPyfE-E#&4t{kh{U)aE{&vEv_&4TFyP0(+Pm&(>{#ni+Kt5hKKk88K;gm6AC05dx7i9;v!RN>u=#`9uYJ1}M;qhQjb_V>!awG*6%(MUW=) z#i;+hSTZbYbc#=27tZ6(^4DD!2xw-2j_+4Me)gH=*9=T~z7^}jn7568XwAkkU_4Ev zlY`(poYBefIPH_(=9vMy`unCxcS>>wdkPb}@XYW_(oWB`w_Ni7xw+`X9X8EVx;IGs z&krg=vRAS^VG;)u`QkDcY{ZS2#oMb0f z{IsSjx<=lO_oV``z2_q2*AhinpeRc&Pd+c>k29&G!fDkZdZvEwg(;$z{6Zee1Q3i7 zlfH=kOfe`;FtC#ze2tRI!(_WD1sj#!^9(rW2($t(XY#lo*wAO)4K0-Sod9kQUPZ4* zAqL=l)+pvNE?CabSnp8!#Ga7bZT2^r;etiXku^{R-rBjD<8VFoS$B7>2|oED@5N&= zGG#A0KM^lYvfn-&~4_^St#KF*-)+O-u%{?sE~-Z2B+ak5m!Q_CX{xro47^MMI`;6` zwM9+b0pZ@j@TqHs__s7CCaHXJb+NPes(|y`kre2u9SoI1ow+S3CV6zMa!4?yC69S- zK&owSUy?~SV56}cZyms9sXwzDdbu$?*y~gdfSU>xD09{K!|P7;hz`S!Kw?Mp^Qym7 z72=bX%`xLl9=e?6gEyg9%zGw|Md`vdp&8AWl1#W`xCBP=Iu@{AgFE< zLc%hRcWL@xzGMr%^z@48$HZexTgXrI>pb^G$BDFXJ{*E_Q35ITV>6r41w`D(nr735 zB4U$b(})Y*`18$#QxVg2W?uAa;mHhl?oMjSn)9;fOeZsjNQFX2*TSH((6--!j+?u> z;(c6oWQt_pivbiNY$mnt{Yce%`zP^8s6FLk$f5c9O(bxYOfLpN-rdr(q6z z9o_sd8u$dW3aC_)hdm7RmVT^v+do@PoccaME<_l~t$LK`uzLPu09f?V?tz@eghNa) zh;9uo_ayJkh|WkUDsLXM2%+J9UYZcrFDlHA{DVT(iZ0CweBwV$7;s)3j{wM(+!`$f zIWBI6_PS1hE%8kr98-BJ9CAh6k2y7331g8e_Jx2rvQ8w*lSMS3*Nqkfu01q-+$!Tk z+|O4|rl#4v-B$$z?M@+;wD!9fr&5j7P}{1KL`mczWCa&LV566^MS!m=v?1RGMwblo<`%w;+1^RZD-C?#ugr)U>n2m&9^g7XV>V2Ji*c8hC-ga;JvFZ+gA zFZ-khT>26AQeMrGWd59q!B^Ynq1+7=-^4!kaBmPr;HCD4$kPutI@mwumPmJ5tl4G8 z`?~ichjBqdnu8Sv2I!AE+P}cNZ#7-DCza|yI(BkAlPMx5CRvDP$&A{Z)f#FFgtnUJ zYp^*F#ZN)oC<2I)6ZvxI`Qc)&@lopr>~i5=GTOMlGu8Ct&v4X3!(EEDQ$3tChAp(i zsU+quRWtGNQ2IDg$49LOjSn%Rv?#$@%4X1U?et)I^4 zV}e9*rk}@5%yQTfZAHidzDOX^pwR~dgxembDc*ZT-J;-}dM18l$8>r2jGc;X7wMhR zLIG$1USk1RayNHga=U-s-vsZPdPBCW@)O-dw5^E&?UYJ-3?2ur zOi?|;f%hX$xHVxkBREpWX&PwjNoPWJtqL;L#L)6!1 zZ9?{0HB)MM=_?}4QL6hftze%RkLn9~U~EVjd1M0G?LgF`orceugZ2--Gs$MIQ`(2E zM_kBS$SStSK((T4%ku@I&)CnwTv=HkroE6d=K0gynXt&*mQqTwP&CLeRV@z7nteZ| zw-fD)KdlQFP#fZ9I38)t!iFMw(qujK3Y&O;i!96y+z+EW?p@r<3>eB_VTK zdgJ^wSN&M*E^na@l!$Z9q9*%Ys5j$SO;+$s z$MmBJS;&up!46xXRL}bLCNkeWoKW+<%?U&sfQcZ1ZDU(p628r2uK;uu)K43l+0qwv zP0R6O!-f}#!ui;FPt-w5EvUb-`4!NVas|4l_#MuOAk;Oe$*@opv%3CZgktHGov`gpOqiqXn zVTXH>i#55l1TKBNa%tiK-FardB$5Z5 zUEqZ55XN$dfLT#ebviP}<3^BRPA>{j5oQf5cuK0at>i!ia;c74vHvJZ^7#gxfoU?= zBMuRx46(5Z{%f}Z93(9En--cJnlb_)|NfmWAxthd1wNBxS|(7qi3BNZ4ca0USo?y0 z_9Mk&d^d6Zh(eY%D{!UA&;6T7v0e@__H0?x@p|+emo=Hs$h>3oT4a>_&G~_-r zK=mwOpfO1W7mV;yUyJob3(zI%o^~YZ%%BTQN3}%>P9X&c)QR|@eN-u;o}#Ad`;&Hz z47U3u>>&b`296aq3;23Y$Tl`{nPjLmBn$J!pFFYsarwrag5ujg2U0B;&-!-!M;KjY z#&!P`z`1TYExG|+3AIaD< zq#jhe81yUWY{iFqvgwBXOul;t(~e_G2mLs&7_LQW80GJbp(I;uu)X}5KwQGsnaQp( zJRwpLBnnrAY)!JPd7lw)BXL&jYf@TG6>g1soUm1|aZOndDfhcEBb;g!1GNLszgG|lMZnF8qF6Mru} z;x$i2@u)R`M9@MJ;DHwv?o`EA&r47zL*MkhRpWr#TO9yL1&iW53xs#sAf{JmP~J(y z6X8xnDn!9XJ6`xxq(HUP9Swk&ZfjI@m5e0D8T-SS3(2kH7 z1FQyW1f`H`@u8M-I2rci3)g+%YsuV2-Rtnp{EH`#s_&4jR)p9Ju(?0rwWg5eN_S30 zOF8{j715gu1hXc3KQG>rT^NG1`51n2MkTej6;JXUMem|r({XA~_T1?VA3b7HB`;W` zfEm>Q@N>{QuV+p?;I+?AC-sc5tX!>vZRd>ShS_HqiA0u|;5A3?-EMFMfiVOyrXL$3 zP~TKcrfZ%j2Wg(*0ra!XcVHFkab={hp?Y>tH}lFWXonanmQl&tevL35BaU{+Qh@&R z%5F$rHSv!i-*@V*l&Efq#M&n$MlPrd45HjEpxT+=j#$8A>FECDR!EpP1)|l^`-+Js zF138ceDLK(pSyEcWgvX9G~n~asZ%8-AoLf+D<<7|Jry80;OZRQ-|#Kx04fk1W#l1c zk%*sh^U59#EK6tkq^&qRxG^k+sSTq1uSNb0vY3{*R0UdZB^+CteYmccvjZ!- z>(w4t)-*Kjp7J9E;Yty-Wo;{x=Mu>%BqcL>>Mmtd$-SR~@#8S|O?sg$`LaFVQZeH) zvMP^!;hJP-RPQ*9^{+S_{X^BJFo&e${1=HMjw(HenLIw-Z>$`Q>na$RZWcs+* zHd)0~&;^a-VCcn1YeCyEAjWPB;gZ4?+NY9X-pJU!XinuE=n| zk$@tshhPZ&nAh%XAR+~!e1C!n?G0G4gl8ScP|9nU=rVb$;*U^n180V=lLxbNVS)z} zZOJ`5nFz`p#!;n=1TM3TaDGlm&|8V~R37a8Z z7=C{9M6*be)k!MLV0aU;r{PrtM|7x3dIdVzFVW@NOGnDd*CYsMXnjP9Fg0jL>*`NQ zp5vTlu7Fc--|D4DVlJr5sh*V+j7Iv009NI#d#O_a;$7Mz@T|a@xxtax_nGL*tdw=s zOF&3nbwt_*FzzfHDB%Xo`~Tp?h1drWa>eFTv~H~qU{1Rc+aSdX_B0a6`y6^Q1%8yA zE(VCwKr?+Kp%p&P$bb2Ywr$KHDV{b3U&&f0;7i)W=Ix2wky_mb?-UCYPg@h=;RSJt zN8f_4{glkjb?k(MVL3ORjGBS{_m=cCY0;2|!`zmcyM0{J-HKl)xpx5ES=BsW0Qc>i zDo$BUC4rr6N0G2ty6+SL0#mBj5-9;hdZ%$;yY(sk3vNA0%5;z=&j@t@+U@4*OFkP! zy3qfI?WW{^D0Dz@=%MtZZ{x_D>)Ba9bu&30L7I&uFSN2D$MI?^mC4Lj;#)k?NuP7R z#Ej@GWZ!??0MU6_c~UaT2+h3Dw?OjeyhsCM`Mas-11>P;y||i7cv(Q#e$Wcqr}8&x zmCyo%KL-9ZD8s#F&UPX9N`uF0QQk+cK1($yU}R| z=Wd(Y{xrt+Q^p)BRp$b|}jssR1 z23JL}JdECJ@H%x5HPXzzI?vrg&-}v(66#z$8f&mDQCx94pPQD(gLLqqD#-jEQfzL} zVVf#C6K2)u;b=J~IMHsW;!K}VQgnMTT!3Uoc_&P-g-C-6z3^bFNOK!z@Irm+a1VS^ zy`7*Ry^r16SgJ9d;CpV?a(XT!0-kiRQ4>f^Bl{$m4IO|hXnNv{ppRlTZ=LuG*+PCW zOkgQX1GmV__uN~+QfqkZVybx}N`^z{%y@q(Tgo~=pBPQsv`5pvp zR3nt!@X-KC!FlY5=PWpl3qAvjj_`Xf6cx@ayiYQ5DRJO=<}u_PJF6_P#6lW$Qou(~ zcSLwHRT!uk*p--MCoV|h6(1b)_qxG3cX|CICKc`0IYGWPHI7afi!+HDqPTF=_vb!g zgLfSC=lc&~Sb6Z7_Oi0ib<2h3Olw(FPLIuKLnCFha%L^Yrt(tRw7=`~lFPV|HR}yN z`}-}=lI_iJOb8y-6$OuqKjqJH|3n{FL7HZmYHyUHWnKlkINYBc+oDKD!06ub5L)O3 zHMi;Hm-9MT4Mu9B^yxw4r(b95w0==b^3Su#w!Xxf_lT z+7(P;^?l=c7MU^7xN-dWHKXaLe(~L{*D{!*6)EAl3V-@nZCOEHr;e08+D$KAe@}*y z2^qYN-kTG3YAj`taew4OvaK#j3NR4lWS(28!MXyh-i1T^qjBN|xX9rLo&DPDjLra8 zb%Y~RHcmrNwpJPA?|Owz6SJ9ia&?Qr%Wm|F-Z)L)V&T8xy|D7Q01Zpuf7rb0D@odJGXnJ`|mHLK@7hwSU0A@VNTt%GKgzz_T9A1XI*$xV7Jv}r1 zyb~+n@v*+7Qy9>Uw{o8batL09*P*jxdS@Hpokqq1-+-6l=@?dS!_a8p&}%$jQY(7H ztC*6){8?VY{9THNs&2lKzmAA`ved3nVDhQFNR49+Mwz-IM z4&S5QMc2B812FV!*!HNy1FhK2Lm2yy^jJOr0bYdvEG!!Nkh{SI-Mu&XRD0)G@fDNQ zpm*}*k-0%%1=vdl=gJ=+5X&r^3KC}nV#<5+aDl1@eS)XDm?)qW6&~_&q3&o7MsCUE z2fajYbC8fdKQ`geU+Ct&%%KY~zRtZ;=WNs*<1DCdP=m_r#kv9?yqBwS8Fg`IgB#-` z`paunn@Iw-V{rhK8=873YSH@i_X?nMSl;#uYrDR%40{*tot&}`1whe89Vq?^maLOU zIPK9eN1j~%k{5%BsG?|GwZtSO2iB7-wZ6WlK16l=4zT< zV}nu(_=Fv*#G@$JN?2gmEM?9t==3|Lfn^NYVjM=|`ar8sACokQ`x3u@IQ;i5FkZ06 zx;7G@O>K=mSXD1a*^IWDELXY7AO+ncM+r+TaH7ryn_IZ#kOeB?tFb|JFB%>b!~Z}0 z`xhcM=@l9_f(dKFzv&xaAkYgN9!}sB(&09JNKZY~#0z3=fg)S8+O#Bvp2oJG^ ziTDWE9NBh~Sxq^t2Ib%20DD1S`pgdrJPjzX2+u2UxXirzZ z5FYjj{kVaGd!6Zm1|tNXmf%$pSYU_AVV0{9T1&O4&eOMKi>P{-q6R4H`K0{k@Nb6g zWrz&fjH(EZISQ7F<0iZ!49DSq)dFdhq(~5~n|IqK0A41Zrb#J)r*L{drya_OL1Oj^ zE+Yh`GU}Dns!WN@WfMNPdeXC2RJXOJlDk9-oy8oPHr_z&_u8r=fEIEeg{TPW2Q$kt z2zvd{nj!nRLP*LzX@1ELxFQfOC!|n+m9{oBi;d4o`=34%%TKfmJoOj8|3Nq9ulv#|XOqMi+Uf zB2$+$?n$>Gf{x-*JH+bkeS zYBLN#P)icO!?1zEG#bvb29Gy9!|N7j!u0#tAec2BfT76=XJ9~2+VgVGlW5!P%%37w z#Y7f2HKL%2CqpM5E^@!<0{dmY+t>_U7XzI`^$|i9lImn&6Cy?Y?4xHLJsRT@&neN< z{S+q&j!X<{DA9wZQ`XgIPy8-8CeU<4#-VTlVXsjdw)B09L?n4#vm<@(+#`M=yR74! zM06WH+#{K_9aDdgIgx#p!dS*dw-Dy>w@xMk-Z!LlX*E<>q-@&ttD)8R#-@% zlH@`(?_xA`5hK9vc=?BC-KkIZZrA}j=|VqGZQ18o8g{DO-b7+a?zKe1JK`Gg6FYS= z0NzMN24#lO`W+=L;SIZc798dlA-0o#6GVUn1_l{&2@md_CcSM$_ozav=`#qin8p~p)T(6iZ- zn)()H`55dz`T;!mx6tbwtUAg-?H6)<=IZ^NY1Qy5wH@9mt;oyg?G|^;1mYEGx6!7w z5y@1dQv?MzRu!4mz;Hk!b$Ip-SxCpsc0C(!#E`@^pDdh+huB!2cs%JG-$@5{SzIf{ zefaxbhtw_03{Z$}uE9L7!9{ri)3{fWqzTyOE#k9Z4i_o#fvDi;G*iP@`6B<0UTgd> zusji|1d~H-m5hyrf?|mF(9pHs;8mO3ox_+>M>f1ZOFS{{Jyw*xjlAD$6BVRKiZnco zi;z?(n`3oParb`X4~_0v{cNg)2GsWveGRoJfN!y5?UMhSsB} zxy-0K2k)z)1QiP?^8TD^>*Smnb7X@1Qmv)ih_cv+Vs?}-~I!& zMM?*6w}C8B*;SO7lqNSM*8u|nt|>%vJ!DdlSrI?lJ@%jP7zneEgaTP8I}ZLm*XgP# zm>1aGq%%8dDrKYpi?3GMCiq41nGg`jXn=)efChsg4xB%6w9mlupwN+}znIbah(+n!@z8e(MST>ej`5W@eWNK z7wVW6?kLv*B}~0=8w!|I!s5TD&>mwRZtq}`Z6E#_bdU=v8Be^$XGpl2G1zDS&6`0M z3NEe?dd?bql3lzTi=Fu_Wo1U zhbpJc=fB;BokmG!f0K~Dt^z{*^zaY-m@-uk4m8fy)z(l`Q|p2b2L5jA?T7#2aFkFf zPpneeL%}DTw`w{MPiQFS(G0QCAX*%(hc&%;27@zn()ALbbml%RE?#Q0(V~6OLjNJr zVyKHWOVx+CRC8j)2gh~xYyQf9H0~atU5k~J*AkK=oAPdm20{e^Q6x)K1dOb)FAFcO z3atlF(e{7V%!hoj$@Q=aCvQ6|QD{9|*hw}cD))8G7E`2l&G9>Ab;R8#{n_pG2lqKF z;Pp$=(N6&;zg(#6PVWkHK#9|!UHdqm-0+N;$)}QW(=`?*m*hh)!x5D44-jjM7o`NME9dCqn~E^6@^}zWlw$B-&bVU>q`$}#O~c? zCq?F$w(=K3p%&eRp;fSGDOY@+*+pZ)dml(^ZH+bXpj10#+g)M!q67H?m-xkVD-pqj zNb`n6o-@^HGpPZu>3z#u4aaOUR(hY&B%F&~r$!Sgizp$}pMzf34ZZBG{U}bi0yXjZ zy}lC7YM>Le$se_d5}I}aRDx}|8+TAXgf z)oL!(@gs@?cAYIwc{&FMC^BCYlA%XGnh&+Qo+`YN5O)Gx2AE@z0U0p{BXRijzGe^j zJP)7M6g&OAlp$aGN$R4lh`I*ot9GTQnOBZL(oX`=lMb~L+Hqq(bE=S56IEjw(S@4> z??sgg!c8aEc&p)+kvFX1IvL(`bmZ>YXn0~Q1WFAuJz?~G<;@O9eYK_8kU}sOMykSd zzUayRN1ZT;(n=hC>jS+znx$$VC~>tL;JfYGX>f(Xu z^r4IT{OU;D$JpArnrkM~T#;xx>6q05c&{e-}|*5 ze;W3DI>P$-6>U^FmeE)>Sok zmj!{**E5>wsFg14J!?LVZSj84F&qj#Kae_h$|T5I_pRU3=3X5)N{I$^#vD@{q(IR; z^OsP#O)S?sa<;K6Z)um#q(8}k^11jUb|%b8A|dY6Z^C zWQitTw7+^cl&4HahuYqiKXf0b!Tkuzf!xmVC4(*kNw?8t7AcveSS{aPGjtLUBh8di z4a1e%dX#NMElVJ-x05%bOt2b8-&lC0T+Cp!cSW0tm`-*Ryf=Oa>k=sEo93MeA5*f3 zW}+y&F0RHWclRVYcXs5?rk#`7-|@$7H#~LcU-s4Qz0Rj)$yNnZ91K=a`(d2y=oQAy zJ1Q0Xg4%8_WtiRd+}8D9c3dbzctk5A;mwvUY9UE9xq{V_Ahj9Z7eG>W_;Tm5Np-nM zT6F{xi`|UXI_1amN@7AXLxWGU5qLF>`vUX@^|G&Z{F_H3Js~X>WXyEuUt18mzO~?S zy(|4X^1^1Ue&%UM8!ohCTcS62*tgQ>QM?k~j8jsBasptINo$&p3j(dh=aAGG(AqY+ z(_T0WN4Oz5L5DNZcJ@!J0qF1N9oR< zec1!d`ULbRUC|EQVlach3^}&S4AABDl~q@SWlVmT>G1PF2kRsQ#pH?kOn zqt7@8SI8tsMzP74QnJmvCzX@1@M@EJ8heM2w1g-W70k!L;hAenh$J{uCPC~z-rdjv zJz;oU-}^cVhSYgo1b?Zng*P1A!VOcMa!;A79u%$sTqF8d+cI2F{1ICku z4=#SXH6#-E{PKp4Gl$VNo8Ok*bJiUu!uSm=cjJ#t>r~$C+SC-D~-{r!_PDE{$Dr@#zdw0#Cw`TFgr8}vnYKk%1p&i^6v8`(2 zLTkc9LGF=-V~DXgtyoKzL8rW<7b=)hhGctFDtg#^>>|9d@hV-DHz2j5%O`m9qN)Z> zEqdI(DxEu@&27HkYOx_E^6mSa)j3OHxfj&4Qf82{Qz(q((`$NPH>U+|lGeeq;JE5V zS~(@VP5hD{7Wo!W3sTg3bVwo#`9(z-MU~q{PVsQPk25HJ)%Q{|d*Qv^A!Vu2Y^u|k zow_0Av%TIj|NNQZVRU6;rei*N?2#-M3NlS|r!!wnPQ6I=D}MVX=^x`i9R=dp5gwY) zMGB!~BjbXRAj?F=Nb5&t3uM6+m-oi126a?x$Cb9wG4@n5vkI!q^^Gp{XEQBh^F)Z* zS7}C8?A~8n%-G3nxmBYCw&}FR8tFCWY!rbVqPX@vZN?|fyq+$`8eixhe>9?Ko?}K< zJ24k;sbIDyV@)pp zj17Soa##2(cRQq^p(3a)S%%jPd?VkqV)pib=$cRz<;}b=kfZhe%c^FL!rP-QqnP=K zOsbwpasOETDr5k9sA}`K%$8A??lHN`GQ6DJBDdDPw&06z{)`)iAX7Qts6V3fUP)7y zvVp_ONvD02f-RM-*wvRm)Aa2@x4OIc%chp3#W|8IVMTOd{P>*F6B4xn2##6x_UTha zdmel0F_iQK8S-gLVs6DwOJM6-E4cqI|7ZvlSNPW>p#^%0cCYQMXZFwAHoJ9Iy6%!t zLNqwWumSC__DYRmLY{Wf;+X4PLg;vLd3a*9t;gq*Q}3v^9mlW*4IB_n@AM0~1nMSF zBrLDq_(D4z#i3+6z9~?10S&Jl?X_((k}!`CLnR+1D8MCZY?09rC}{XI7F z20321fn-8$9Bk`+{hq3t`hhOeh=lX$kQaQ~vCxsJ_kexVd$98I~!XnV4=@3xcX1 z$9f1Rl~pN>OkgDN*BD0Co^T5;7$rM<_KwZ1j`|cmDL*FN9pAp_LK)q-)CT{IoH zi;Y`t`*t()X+^N7qWveHJuMiWtIB<&06x&4@AwwOu!WFSHuwJ-!xna%YopfLU1gP{ zryadg_tUNpomeO2ywvc|r3^G$ z16@HbV?j93rFG+cvb-mb^7-Wa7jb@3Zuihj?RT49UyDc*{8Tw z?`p+c{d=?Ls(!gWn;VITg-D09xLH(HoZ_f59JwIXd$=4?LzO^v7%7{`M#?EitccJ^ zE6t9nZ%}ws>_gQ$er6p2EPAR+>pp-zQnNr*+10b(GxpvvBu?WZNp}=`6W>hPn^98PGb0pSR}he} zN*CBp%$&pm3@CT%WFmG)f)3;duJ%H+ATDCs!9M2trxyI&qTh?n#r0BZ1yrhGgXOLm zsq?{{Qly0RO%u_%#Lz}e)MnkZ_82RR?MGPf?|^bo{g?w04(-Jhfj~_I1uK8BcrM(< zlS$~R$5>WQ@4QNDj9KS2P*ow=AzKY#O=ut>wvdK!>=lqeLSe}W7_`grQ1%6?h_^UYB4H ztlq7qsz7Jg9As!T=kxjao;r`@Mtuo)IXEByN0gGND2nP~_b33vZ?sQ0y)HF2*DP#R%iszz+i zPaH-I!q)>aADE}zHMFoLwG}E~=cjOB=v3+SF%byTjwT;Z-J29$T|bb`pnXChExP9L zSEf2(iFWWtgb|Y7L#a2mw6`UPPaEK1J9;5N(CZq1O~tDd85g&uk_pFXDxYy|>1_UD zn@ovq08W=*{_%rgU&8ff!*%#tQV@Tf0ST*vrrE?M4jjDk@~;|?OPJ{1^y;S9E?<;) zUhK+r4lh?DGhgi$#JavSGhvqw@GT^jxDkyy`|58NCz+#cO-mKFAv<-x0Z2}D4ttJ7 zNCdxw4+?d)d=UN78DkUa(s(NEK|~}NO9)b z{wwY|qRw?NGmNZrn%n5@%*Q2eba(vKwQXy&$RbfZH1>$DnQg6xpq#&q6$nKkmN&FE z0P5r6$EXJtBqq}sJl1%7`f6U=v`I~xdEjZ$7tpqrPC)V#k-}${c0CS4nl0?!bo^%~ zpc{Sz=ZZguSD+n^!x2g3R+Sq^3TYyfG5xXdpXgx|Qe1Mnr)o4L$@m(f!xC~swb%gU zi}qZ>|X03agC83mj_-S=}8f29*aArnHrRl4R)pB2fuEJ z(K7Mess19=_KSwMX~G{n{j^xgQu9NX988C#L%X3|;sSP?K7!5`|H%|=#n~sd-q^6e zt+r!dv5VhrPkq>PBeFg={;6qdp}sZiPvkZ#b0fOh&dNOdn^%RwKG;3dh~xu&Au~nM zSX1LHh@C`VRNFV_hUV1RrX%ezd}l(5NMq|a#5uUV!$m!s`7yAI^RW^oz*o7xxh@-6x2p~h%h`Fy^^mR(00IvYqTaQ zH+Uo)esUV^1%C5-tqF3%Yw9R_uI`tNCOK`?)TV@l3(bhzaavwBpo7GNQ0?UG!+=wf z(w+fKx7T?>kle%2-c4fSOJc!?wKtGf$YvXt`<}bgb>tkU=pumfQ3rb9`F!9HqPbaM z{(%c(K?{N-{mj|k_&GMq4L92s`xc$_$@;Q2h2-<%J6vl2r<3_p%N(k@^&i#)9M5y$ zo%Cv3QB(CY!S)YE(Uv$OgV-6@>JJ$_x;~-5cXy-&r+ZA{y4Y?ic6)6892W=qQE-68 z@5;VdQ3_G-7Zdy#6WFbwyLcCI8uD;t8Cb4M6ffcivl&?yz`S?H=k$Z6wX(#OqxpRF zm@k2WTi@W#-*o97!7K)abqHGP4CM}Cjvf4hm(~=z<^}x*?}>yIWs_xq!nLisHB^jF znb2f_TZ`|Z>j7zDakGcSE^bTAk3rzjICN5mvHD4>nvhiMp|ey`zk<%7YC&RERcAVq zffD*l?r`+(2NlhH9fd>cyjI6+BTGtar;ZV+=bDHek`9#ZhW4ib{-lk|D0a?MkeKJS zt)^>s?h|l6tg+rY0vQf^`uZ(XoBsTjR;PIKnPw1^s8?J)C`w+&e|G zp>u-q&=+*|^rwlXH1gzWuaG(kxdq9nF6dg&LpYd7>y1?|P8X*0L-VgJN!+!|wv3_(o=!)*=t@LjCkYswY)PM7AWrK@uHb!nd9 zKKqdONV3Z=Kky>Bg3ygJwqe@;mzsVvImgGq`oT?F=lJRGzw1>q1{(l!g5nuQ7kGGz z5BeGm`)Z|nFD=(ADpPIpwY8Ws8%!pn>r4InMz7fUZIb5+@KyXotG|W*X48CMNYd&H z7bo_oe9A6N9_T*ovduCWgFg&l=B3we`BHY3L}FYdt_Gu~1%aC#umy~0a?SDzZUt#f zMne4@sX*F%gqghUD+O%(|9xr(rWA`4VhVpqDqrl4<=<$2Vwct)_D5jDq)e zpIOv2&e%R5x$;C3c%y#gO83UTufS#$I*!8$_(%9D^tX3H2eiRWa5UB=s~(E6B9~=6 zz!5kKFThq+GgnLYuiio4lrY-3=Q*+9*$1*HHnD0j0_l~;x)?=sVdrC5+P{()+AcVp zHae4gRU1A$<81Ss3K$qunlph?&Cu6MU(+68f*+)$jq1M`*^pe@(?7n42%}o+vCuvb zezQ2`SzvmK3Pbo`m=3@ofPfHc-67*3kM z=i(}8OD4bqQ-$H{UTY*xO+`T1Pxerd*>82W(+dU27xsfCqd!D`9-V`gJU5&QbkZ|s zgkL|fO~1COExMBLu=9n;u$)up7v4k>g5irGrc{_aeEY|3!QopA!b+~o>JiPVhN{qo z4LUvK#nZgXGy6Ef*kduB3=mV?EPdWSppPQODE@EP9ojfK8=Kx&gBsiXqV^nOpSP@| zX^((gEd68^*oMRq@|Z`>AK_s4FdK~}*hs6n#XEIT)b$6^YL2(-aAY=RdQ6j9f)vxp zvkAIV&Rqfyhne|6BisLuDQzumpn@$uj6cBZtcN&xpNj=95Uq{+o37jg@m@aNI=}wz zP;xEtTE!RBgZ{RWYP4Dotq3O+m9r*f=}4v|%ua)U#Y} z^{gkKB zBHmydPH+t_B+4WFhpbJl>&a-ap`p2z#&L8o7f~^|a(lU4ZULh#-c|wYK;o_tdamhD zMSU`o{uMr{%Fnrix^S{WCn_#eQCNR9M#yC{ z5y<_0^Tdv~GZ;p{^rU^#Q%U@3%hVehc@}K_ck6GjM&);)dR|wv3%AeD)lY&U z6qzw|O+G5%2IdWlCVneLNu!(~9EC+y$==rRBu)#llVvwiQy}O9gUzC@+8kLz);TNS z0E-?id|qpB7fs{iGN(imW2?7ul&t}@B+w@`=ZYv}ju_mVKV?HeSkj;&0Ar6b;g_v+ z-;Af9c1K-j1AQSV+0YB;+@4PE@EFSxdtin@{}WN5td8nDF+x#|vGh)2uZA|lO;1+f zBb}H-jygnx{KdwoYV4Y@V+ib84Dx9E1?>a&m2mr;w^UVhK(^m6?w{C<*D^iqgU3(# zQ(WydSK1C2hyk93Q?TGK;2PX&%I0%%G|6C_PnktGOQ>A9jW5KovJ9MuJyD-_0iK>j zi4`akb<29Xl;z1_qgSAWNBD4-9}!v(dia~V*DTs5TLW1p)Zlf?Bf8CZnG7K{w+ts) zM6kTxm(FmEFi1wH{66C1TSP}F@I5g4YFpfGTV zY=@x|v%Y;;THwxO?14QlgwH|QPVsXJ*I&Zf%?+P|rU%SxAwfobL?(0}VO|OPITZwH zTJ2zpy}Hn;T%w6^CDC&GMIxegs~KU#O+XKCHU$;@f3nB441nom5h6Wd-KK4~Wk?7M z%y?wO-jZyGuwlu|LOzKS1$ZDTgP_1WQ<69FdqkGPwQC-)6eouI*X@ufA(Z!=h4b!; z3#G2dzSrme*eKPNevA^thq|SnFxnWCEB-qCP+j|kBI9%4eg^D%6Y~f*$l5s1dBz7q zD24F=NQ$Kjg`xfo_DHB6wU-2TW$m5eCNxmWrbw5SFqqEkCGpfTp%LE|)KvN-nA#Qg z3{khTu?IQ{Ma^35q=2QxAx~pE4E#FaCFx=@>mW^_?S!wtlLeM$4+tcgN>N73SUkET zdKHaR84Q9M8<%_G$(S%_Xdnj_S9YMTCr@V|5tL`6Fe`~os0$Ef2di1rNZMNz0HUzq z*#sX3$AWs-9b0sUmUPV1TSt&|b%R3A`uv$rM*JY4e67$_PW%;tK)s!C8e{N%6v2jb zXrGzGAyyD*JNCoEH}QSsn5`4)@5UP3QxZBKBw@sz>|g^+%3ke|zcR?vP3dp14mH0Y z8h9mN9vw)U&2{N4nZoee?7mmfz_+JdOW*_?VXfDv$(6HSbO;=1(|6 z540dIbKI#oVFg?tCJtbnf`$B@a!vy0OAvh4)Ecj_otI)b$!iFv zM!3FAwn`az+JO6e&kG~DRTTe#SbY5ZFZX5T`<4y8H7_aiw}~)%ME;&F<-AEdG0tfE zF7J2xwbSUBsA#jbe_SX!peJF-+`hjf`-QDQdZUiR!$4aU|DMbXM$*w8YLVSUC;+3Vt2a)7$+Rzog6aS=Z*6;`QsY(nAxsv2)i==;N!c zH|>oyrne&@fPZU?$gz^{r#*8oU9XitZM}%&bA5X&HQJl8T0ntaZ|d~aL@;V9;^w$7 z1Curb4O6v*;ZN2@`_P%iuuJ09*xp6J5i#qjWiNE>q?bSDw}~NWMD+Cqb~vwd)1kPE zDa2*RDk9tu#0cw+3PN7egTuMW^Q20JejWTS4KhsRLGX_{gZkN@k1Pu znt%c3kQUC-cp3Tc{BS08<)b@j`;e}jsUeICW65Mfvo*$|y3b!XzVJKY^&1Hvo*3~=N^!?CNn@>S(^|rs65$l}Nd3A%W28^yXze8Z#R~Vw_m`~w|g~QRQ zncueG&OLrqT?@VXb^h7d$g}nL!kha3{zFO>n!x_*+8X!AKQCsV&CIQ=$!ib=t_>*G zLOKHfA%L-Wuy=KEP-+rq1^C{u`B0B)3$;e5kdbWv?n1>U6v#VdTfd;vmQ}*SOZWie z)swsHp$W*)UP zk}2SgpKz@MgfFvcM1Aa};DydUQ9IdUSG=2m@e1U;S(3!I8}wM0q%NaOB8X#^jC} z-Tt-j`Q1o&OM3?+0dZ}s#}^M3(Q;h!=6Qx41Q_i2bZ9KsYTF!Cx*NN@)8jLCnw^~N zxao1$H0k&E`EAa4&CNeX%UZWe6cDR{+&JgrsM-38j85b_jBk{fgr=vq^A)_qdPjsj3G!+s8UT90_lTP(GNP z&HY%ARW+JS; zz0~~hT&YVWH8t>n{zc2Gah7!$#aJr1#+oM}hsJQ-61a@ZtMsJWb`*?6)v7$Ag>!IT zu6u94c=Khoy%vf#%c20O+0d?Vfk`fLp4)m8!d3=O*Bg-?nd~T9uQ_<1IJ_U9v>+Hs zUcj=}5wKAsd)Jad7U9;5;oZcXZmKACq3e5S`W0&l?U4Va#BrtDc|ztWk~Q4t#P zLilt7VB9gioGKCzmkfehYmGM8qe0Pvg`8t-Poo2kjj{219Q9tXFIM}VTP7kobU%@k zT3T7Oj7d0)e9;CP5I=CYi;X7i>#UoRi<&>;zwrC#^oM4w5RBvP&EjyG}94=W@|1cGywkA;odn-KRzHO?U_|3`rO@UPoj>TH)5U zBQm^br`Euw2GRV-mxi0eL|lbtC3J(Ct)==Jwhs3XV$0LfTmm8F6Ds6jT4Vke9KJFw zDU;Y9ILwznB9XF*`HePI#@y$OytZfGqc65b7#g@P>C=1<2BE+l&tA;Udb0!f9jg4q zOo#)5cI+Z-<2a|3hCkP7GO6KfoPg(GEipB6vYMUjW&+wb2JgX7;Qzq0daQ^tXi3SK z_n?=4Fky70LQ)P=Sfe3u?-Xm)zV;6HoIbF{Pz!JrUedKr^J|`(+(`DCTX(SKKP1m0 z=jFVgW^VM}oZHs6Ft@+tJK};!qedx=W& z!j#fWVpAZ5rJBS>K;Pl~N|{{WZ@HnycH2{uE%&iYaDKyE*}<4y*#Fqo&7p$-|518$ zQWv+#1IDe1M4!z)T)M6Hy7D0v$?v?-Q=XSJv2@8)ID+c47nIcA8{vB(N3edZw0s&} z1r?&6QU9Y1#b2=1J65YjWyJ=#beo_Psz_nn2=aCG1Ym{obZrGeY*u}p7*U=`mmFAPY6`GUf`lWnrPgNb_VhgG11GQMcaeTlgc(Y0HI41rnBz=@?j8wm*twryH| z@D+zCqnzIb-gNCRR62t(+duvNlG{%8o1u4$x7}mWhd_u)i5|GFy$u@$VbjN=Fc^hB zQy1~Xc^7$5)1^u>qO6^gH>X}jdb2+voQ&EA0@8QqCYs_We4PV}ummy;b01;WEL~ju zzY|WftgL)y322wZ6Y3)^>~;yrKjD4y3Q6w1&s2%_IG5H^>j!fO_HD5~v$cD3_F1MD z_@gxuI8|5U;(kd`dbd`}y5zE*59cn_jahko$PsWiRFBVuWCfUdQ6N!?L#nJLBkM+K z2mi}Gxb1vxIm8P znzoeSgf7&k$7V|6luu{kh6oz*C8-cY^C&#`&4Mf9anvg7FA+`~ioDVB5*-$pFgE97 z&DFgfldJ6y{Pz#3S*K%AFhNa0m9AK*-6?rf{ld;JwLtd%{T3rsSbW`qKFt4qOSWEV zP3t1g8VGfO)t_BM=JYDi<|sh$Pd@6d-lTfqQ zQ7Db%h*=!+K}hZc{P17-D>OyN{X_1#rDoI>379~gh&X6AHUKw2RxT} zB~eN`B_g2T_!0OYxqdxY=@36`xKT*GrU;83yQkPt^~y(AXp#Jd6)_ z$uMq@uioDK*l0TLH4-@wy{&%0{aPjOm8__QiXp|4WFakvE6O{`V>=~kl$gEszT%@{ za|krB0g+Mzk%ljRw&3k37Cz$|He$YY2?Mz-`gYHzBiy^+!{IuGFnp5|%a>DOQrPyuFb z9mM9)>sz%8d!QrDmc*WZz9@@H1}wmP7v3N{11cFNxIfu1sReKBltOl}B{utkt=tax z>kG$b{x(L+6+4z8xO9#ez0N6?ZRsgKndmS$H1rt>!dmYB`FSTfUhalx0iA^OA#voE ztD~u5ix?r>JJ=3Hf3rlZH7pKr#V7JB%4aCv>oZ7{MDuD#LvWW;Vxdq>Q=R!Dg9v!p zSo|35*w^I9D-cPy0?uvi6s4#W?eQ#WGC5ong+|jm6;j@4_9hZ}jAB25=6qoq&5gttU2wR)CdXSR4d&cAiac4 zb`A4oi!QJuc|4U;78K~3KKLiqLlY9{tqeGpp@*jc4iBfmTD-xPB()VyiQZpE(>d)O zznjiT`StgoS35aQGfPS>a~jK{v_o@lK*!L9qJi1rG{g7^73Q~0V$Oq=mSg376THJ9 z;QLcoMK^1|9C^-Su(&oltrR$2r74>)d zqq$y+Vw{&%5_Gu1qo$?`PU;f9F|2Hcb@ZW^LU%M`r{wwyjg_^2QIKe7HuystL7PAi z*-EcF?6A(0cUzP8mJt##+BTeoU-M0-{v~UC8kxrw-AghwSgA%^mNE2#GcG5>)3`u6 z!&JuIP*#o5ON9EB-b9^&*&q;e{<~r>eVfXU*g7&YeCVV3m#JIucW@L2H2jlQybgE~ ztk!>JFRww53Kgpb!22IgGp?N0Yl_nXG45_8Fxk!3@6e3f!p|G<)?)HeB}OBI>4SXg z>k5(rqOGa4V_D}x5A?=3_aiF8*$V*Ct#~tT+7UdiMC%_o>C$%;1AFu1`*LzFF$e;? zzNQ@j=Pfn>SD2?-cv_#Yjd?mrFdMr-dAcKR8Xh@2GxsIgkUNu!o0RPKSc5(76}sZ> z=*~gZC4HXr5d1#=3|{Psyezu*Z3^XNfyyejltI#a))O*XWe=&Si=&ng+8}L|>f8W< zjE6FkwL5GOEh5T!**^ut)=WO|CB&}n64nTU8^NYKh^)X2gUbkJP-fbzZS2;z^l_IO zN-&x~AiEe|_sNA(vlc$k$sFNF-Pv~^U=qS09zdo9Pm9v&$Szb4M7!&+R^rK+3dw=_uAd+ zn2GEUWLS(^#PbX(tZ?QaFxV0tWz)H=FX5J1$gpD=GJD%1;+~jLY|nzI6bxcTVd354 zQWr1>Ul!u!S9wyCU1`#2MSFLWii<`NDU9)Am zwk=v4T9Wig%+IG4(LR%-eq!3;qD62h=IJsf6Bo)QirJwV&LW6M{!-**1jkB+jnSg<8h4?KA3FT-_Xm zu&o)I!Pa>U?!)~X_rs(SsODho$8!cVz-ezgvklV$c$d1c8+N->`i^*R($a`;WoD%bqBv~h zC~N_6C?f;CFqh!&5A%WBG)-lQBO)V&twurZWk;O^4^4xY5L;(dqarVEyvhrph1?D= z3FC0ZY!q#!$&i_$uR9=z3_O(ZsQ6VTgrThumaee^N{G^=l4` zc2N+?aq#3OMXp^qWM}-3M5885@%9Z2_uNiXILf)+08M{&l?BzJcd=f07j^cpI0aN` zRkJT`sq<<)GSZ+TZqcr+s!ExM3noD%1W#ER9ZGa0T(_z|5{;_gkp$M}lA%6}l?Frb z^hI;Q3r4GHB7!f&J#+!y=^B+^g?Ci|AGyjZjzfRGbQ2wvH-xbalKfE`R7+$d*4Uw&0?o1WD zx^zDTZx{J|mB|gHFcwvs;l1{d{SA0A!iRwAv!`NP( z0?+i;LwXZ~c_)}-0E78)p;75fFoIKBevo+-ZCZRzwJZLLjaYwWRu~R*$w{3YQsIz@`A#KiDRMOHq zc%mq8FfMt#koK{*uYcfhA|;4K-&Xl?cXXtRz;xlHG|oh^fl0ZAGLyizYoa<38D3yJ^Sj|<9Fi>W?@ z)^P>w?X7>_YhR8zJ{q%)vVU)jX++V?2k-r>FoD$ckb zS@W<{Ut2NRxDvpM8V(0xHD5eWhvAQ0Wd6IT@|U5^sklB7*&(c@9e&?JH93dnHhk<* zJ1UK0Jlx)O6h5)$xDo?xTSl$_0m3kVR$c_xt94QK6M zJn2@e`;Nv+Cam=kgZRMszO>a|c!Qmqd6%*s)|U}!Y7UIh7T_Hm@RWa8xTLB(-4x_R z&b~M2;{;XOJM|PdD-^xXtd&P-YITJd;sF_lr4}Qm#(9$9-Yk*qo~c9|vkc(CpFD#L z=7*=_oLoge6P+S9S?+lJzmx-$kLHP`BZcuuFC~drO0bu>s!2k``uNOsz)yl)L&jP{ zN31r}$*(=ik}=VG#>OS#&09qsnY9Hu5=_E_j`#g*t@S;Ccd|ES`?YMmOy%R!kl7`E zhz|V_mB>sbv-q>ulpI~sI%N=b3p0QeeauN;$5XoUg-G2A!Y7aM^*pAe=mY9O zpz5LHU27(Y2sT4A%o*Q-plytyQ_Ov2;vL=INTzobwI`JBl2vAqO+zGdS}>;9bb8Qg zdbQ6NJA=Xj-@!8onCi~aADi6#O8hfPWq@*qA?jJS5LQID2-tDu771lOGg%IAF`?3L zCz&OS*|1?kwm6_TvL%O0a*LA<=WuQr4_jO?%3Ja{Lbl{XS+b=7QNCPdB!tBNwcu9YdFlm2{gp+xh`|woC;4g#xTb+YaZ6?eLkTP_iE+oi;Pbt>{`#W@m{; zPy)k1WP%Ya2rD=ftda<<5h4iapLYa-TR#VL_ii>>ZbeWSN#Rm^TQ;QWCgEGFEEaVM3?5FI4+g1*{T6bM>^JO31g@FnDRAIPS} zu||?D!_(Y!w@dr|HKdO< z%yH9yJ#5WwvEU!~Y~Ot|<~$m0v7n{Mx#*TE@aR9Z7jB)$(`a@&Wybq{74-aWdL5FU zTGrLkMw5nfG>;<-$Y3~yq*C9sFaRMaLV%6|*{mp|CeAP$MxUljz$CLz_(MdNGy2pC zB8JAKSSJy<`6T0y;XRx=hZq(+q6wCQqWX~s<{E8hWvfC#AbN9vhPSzdU1;MP@JsmJ zm&w|i-#4T(m3ZA;l@g+QRT>X2*UsZGIGWVtm4}z7cJuFSZB;m#1AnvbegHEIVyy0B zwc<WNXbG)i;+@Gtu5=?qd31PSy689{i9J97Aj~B!%6#{Je zi_3Et?f$H!mICmjW@DPhx|$N#sM+%6YdxhuYSPEvJRd|R=+i9cMg z+T{UHLQm0COvh@08`4U~K*d z3vu9EJ&VsSMQ}|cTzeJVRR*aGYg?7}(ANTR=nwbH;pVp3V>X+M-`i^K>uw-of9@J! zD@#ASP}XYf`M*1*6f4YZT<*Be=!>7X0SA!=teZ$h<2g+hF6hFv7Ud6FlgFtl%Q~)qT724S+o{|C zICt(0{XTxaTm1rXinh?0g)t?ufZ9|>xqtgO1XB8caVHf|FofV6VEVq`OgY6I(Gi3u zCaG2E1X9(a3uscS(vAsNi;hj+czHVn(bdR{Q#CLED4+?bfhJwVX$Z!n4_Ag`#)WW*Q;8?DtXEfvMAGdZBJm#S64Hln} zhfsne!H|)mnbRsIp@>tD{n15*_0sczbzUW;@?GO>XlZgnrys*6`3>C1038?N|7Ay! z6rrpEdj0$J{dWhGUHNKcaBv9ZDMs$Re>Xqc^KIhm?M@)@WW9)iz3dP}P1twx9+|{N zBe0%CAg~f-S+TRM>6_+BOy6xu70BVH%~d2D&m}FIwasE07t)Qp>DKI4r6qnn2!L(D z1n~x7GlABDEklhMh=2k?zz0B~UV77ObAg17XknVHH~&PGV5c8~D~V&Xm0~9HL4H%hsR%f z@}iaHZ+73{PK}suZw3Ap${sTRPn&JNks_XlFa|2cHx6^_rbvTckJR7&14e(xwe-$O7AU& zkjC(Vg>}jtOj+p^f1AeC4fHRo$mO@TTs2$pqotN#49Of-R%??Qj>AUpcnk1-7BJAy z`Yi#QePkl6Sc;fDKS%_8t~Tz*Rus`lv{3-LcC05f3b|A|Nt#5qD|U~x>yn;A@6)P; z!S@r#fM5t5+cuO*9Lu1n$~5B=ZSxG%oblAM<~}%otNv58+A8;1B56GL3E#6k=eY~~ z&G{pc-8|JQr~EqEF6mN{XfxR(#stRb2(b)G`X6<&TIJe}MCdeAn8rnF=;~Uh+7fNI zI**i^9JVd9_HXNxAEDXU_NpMi`Ct_&*0xI>aYutX;-7mi^&bzTfI@8I4i`0shQ*c@^*iOusXkesEo04K-`9 z>{T*ky1Tk&Oc|LfDHu-~lKE0$^llt<@71 z^NyxSTjvS#1Ya0cS4L_G@>FGUi>~>!n>vqq|4cY$G58Az(5Sl;ZBtSrlUoSH)=5h4oBvq4sHM#?LJuIfE513YEj zNoCcjxg`cu4%fmPGIWHR%tR0;h*SNxSS#zIDwei+v!4v8b|%w>M;NjZa{qmFEBE@C zkjzK#5-Wn3!ePT=LSTxQX&EAU?S8Yu^L~HAr2?H>@mKyd| zmwV&PbwUs@x7oRMc`Jp(vs#Q{_}`MbO^5 zZ2^Lg!74UUrc|cbrC6+NaB~()g1;ha4qBVUBgEn@$rUR}fq!lvgoBR&-^xt=7l<+a z%XLMC_4Cr!!*y!wC2w4XP+K@wRY;K91t{?$P$W@9QLr3LY!8cs^!XztMz*|q5cX>W z8x+Pf<4JCB$cjtI;HuoSpl;j;fnD@#kP(+_#AYA;@Kna*Xn{8sw?zwv1E549oxg-k z|1DC1NHc%%b(1zgOW~rrpAw_@aW+FkO98P4&_Znr(SzZTl}u|Ef^gTJkbn5$N-^tV z-vtnLe8Yci%@T6PQ(Z7*2NuJ;5v-z0RaOwoVAd6a3r*rd; zSyNOiUwmKmMZLYe%W?m9<5x2%=oJ2WKkHpDOTOQXWxiUT<}TOX`c872*=prJzNY*W z5#@F_dHT4nRFsTT?$H@t$(OWgG&NF}jLhHOV>?*lk4g7X z%9X%UNNMr!BW%~DIZ!pe+F^`K%loP8QYKWkG2Q9!+-a28PjwCt+AX%brCnXuA6t|y zc>354OGWo?BfaUuuH6ftxC{dZsU)=axF=@^hT>k<$^hQs^#!af%MP^VU@#54Fo#^U zn(LKI`SzDr(=g?R!W1!9dALTu(~VMxb&QZtPezT4NrezBJ(@ILJ|dH!G|E->29M}4 z`4Zjt`;LNe$A0|8qsi?)m@3{Y-Rf!Ku4*Uoj9mZA$$F*2SkE4+G)CJYyXU&Ax33ZM zeLS7lI4SnR9Wb-|&>7=ZXP#Zv>iDMxkH>n@WXw< zDq(B4=P!sk!SYRAj{4~`g(=!N%3mldn)3`B=+WMePSq%b@C#J{$RcloM!5Rq9Wdpl z&YG5UsJ@7+IyPqnvl9{e$dZF9WaUM0mXbRj3tO*TPi#Eh(Yt3Ce=k~DqKWLM_j=z# zt@sZo^M?$d;*8B$@bXL33C+gX+|y1g)_4M8%Dbfw>F71!?5;}s>Ye(O=2Nje;38=! zz+-7`aM!6o>dhng9Ci=0>E&5rn=HMMzIyhhCiF9vCc@KZZQ&m?HM(eM`uX}6p@9{FaK1+kE`ihT1Ugb3DH1op^=%!MPmn7Vd9e$UO{pKBc=77C$i{H*cuQjf-@}tFy7TIG z2i7K{k@qF=BFn8RNvG`^Cobb-#dN=OaG>`oFPid(;d31S^NhMGrI8XbA} zFSeLPv@*i4>f*Lo1GVL{Jf-rTM(&#r=GHXff^i9>UzIdR+&6lxwCee>srbj+jinAj zjtg$0MSP@|D1C~KWl$h_ow#p;}w#vjF0At`k)zswLn~J+n}yd2~qlAe%wu1- zO>uvh{gP_dO<<{1-Pi#4_o1nXoAcg|-p6mZ#HTWJYv z3U=>;@ZG0MQ}CXKv$`X;8QR^Ai6ck|f*_Df7}H+BN7(P!JGp+p9|GrD0Dd;+wOc0b zenoA9@g;{5ZUG&2X4%$UOO*NXe%9p(as=&*O?J(+%Vh0K9rC$oY{~-PR zfm2d_-#!k-TbHb#p39PoRbHhQCpP@S9oJ8Q1u{H?E`F6zO^5d8IQ$<}L;A7={?yR3juYnRLyvRn%(CbnUu@)+@%#6-i^` zlzY-NqZMj2E8dsn>xRRJfn@nxRD)7EuU^8t}&SMBs+wM}Xy97~noWk=LSg8FT zi3GPy=c)`6^Uwr({Fo8*MB{wro==>lI{6Hqyz^wE4fSNWPEt)u8CkKNB%qhn^@%pj zvE8#aLv&RQJhB9xG)6WYM;DK=Jn;Q61>fW2c0bjqC%lXHN*&=N=cEywj|)^N+|-y!plamG%eDivI|2rBWJ5;K7mzUe%2%;sDqs8nd8A~EH~B5+^GY0;QONYE%F1`S9fLqqv# zYLx8mWVyHu+N=j&{7B~KSn^QpvX*p=Xo($mXkErN6kjE9#bJE&2}%K)j_ydz^oUq^ za0miW@XRpkv{c7Hk0VL%@ml{Tge}@8n5J??(qtO8&8pr1SnI}O9swzFMh!`+Zdg&~ zPT8L}t##tL>PO&l6(NQ5^m0s9dF*rEa`htSMJtxeV5qWgMG<9LCP%V+bd1cpJdL18 z&^lpFdQ&G$pD`7TE3W!LmS?B^eKeo=kyNncQpS@H)8=5xx2|wzL*E?uZNi>LJ(KuH zS*?#Ch;Xiyp11*4OK^gky2n3ZjN=zxZ8#wcnUiynNJ%l*tfT(Yt&W2>E4w=^tcgF& zs)NRf(EJDNdXsu@vWXsuF~gKX8{q&9BUw9@b2=M~mg;4N22LM&xh30(3%2Sx@xZi# zJ8TW4`!Brc_cTGAofK6(8Ybw5kvgLg$Hav#kRmE{tdh&eZF``s>n@@N0Wp8Ng)HM6J}#XV-7UUeOe}@@^pfq19V{`d{M?oeGWJ@ zyda=bd(PL4#-zM(MgBdPZJZWN)}kI>?&;kK+VA^iimm+XVSqqr!MHunf@l_(OdWwW z(GY0nl-6Vm#`;N6?n$s1%XE`ZVt!A=V_vdWT;YiADj3Q%)p|Ry{d+-DR_tV}4sHJ% z6Yzm6OVk{HewQ?YD27(tB!+8`Skm3I89B4#(%XcO8j#$)C#&~YG=a{-VcN51 z6G487jEpyL5k2`uBRHS-yvco6=2|J&&e*xKtjpHIL|P0&;_=lq>L$WNF%D$G{dfT! zGr6e6Zim34S%Ug)`q8?Dsae>Bcp16et;9cUNcw(d?!8Hm(A2~Pb!xM_x=o}*B0~5w z^24^*pd&8Rb}NAI^=0Bt=vRLk`EwUS&;kBLuPkg(yZ4pHQB@e8RU2lkVk+sL^A%)$ z1Vm)##BDqAfO4}PPZ7eEe_I^-^7`5zWu#|#_N?bU9f+AGXgNPKzl)D#&O`H$i?=%i zocx+yh|8L^VB{w>Tt-m}FG;i2EyKx)&IV3#mX10~g`iOG=wlWIztdsL)9_?a{Jr(TcN49T6d+O3* zpM-1L8BDwq_F{jlZE*5>QAW^JGt=FLgTkEeNgWM-|CA+$`F%kI%iG3DxQb~ zK0BB8KPPZ;r4e8dTY~<($sx59{n>fn{L6+wHqm54G1B5RrQ1~XLWA~du-fXqgUn)W z>vsLa`fMk5OY{)7L@FvNAGWeK+>4`$a09$8dq^g-EC#I_woT(qw_N+Mv5ZQwIO5ze zsVz#g2x2^H(>B^pgDC%%F?=}*kIQC0l$z{=c;Wj7%mVYRotc%DMD|At1qf)@=XPA6 z+RKHOj%LgO{Wm`7Bj7E!5w99v7f z5_fDm|BqiPo4UVv3i>qDi~Y z1T#k)NrS9blkO^lr#N5v9{R+sb39d1jlEwxv;g zJnPy3kXOC6RnhyiL722! zc6C9MwY6kdTnwprX=#$^xE6fSvu|Lb))#RoLawmEx4k085)DzHOp-eDv zP9T<|ckuN==UQ?QQtmipma6n$V*NGvVYg;1`2 z#8a;x+lpyD?GLjU9WOfVT}Xx*m5#;7OZPc^TM-A zb;c}g-Sb^9t~F8g@j$l(V@U+1PE(09GfPZ)UTe1b57;?~85*&=L&@q!Gqu?(y*Kq+ zG8C|as(?b1y|ZTvd(RL&PFQKUQXsd9bm(0o z+qfSv#Ut>kfKpplZ*<#7;KS3yqzR&2Y`V4rBpwpbGLvet8?@q}@XsZQg4&f*v*R`k zV$s3e7LZgau5Y}q8=PGrIAwv*OZqef_t15ONK8c0E(#@^t<|@b4s&z}NyuhU;tmgD z(-C!1imQj$3Gu_)X`#EO>ATy>Y_fP2o2b5)ifP&^`fONOE@%s;hb6MR=*JRr z8Bo7g(&t{*E%9GMwLgevrkDQIT3P_79G&gi##;BumtOJP7gunl(X1VYc&f$kOn=k& z^*OhMsEDE!XIasd_T?oj5Qf2)8KW=Q{Qc=r>={@;bNb+e~f0>{_AC z3L(QNmjbZzp}x%YGP%F-UypHj!3e8i= zN4Ft@p+(PkjZ4W_3KC@TMOsHaTggS*|FXC4_FXlVTY29Q=4OW^;wm3Qr{+v)D5zEV zAvo!*ex}Z%kkZ=yOgrh$e-M)*NvWmyhj=+?L5oca?IQd_V>U#3PE|zM9*cg@fdQYJ zq?O@$_TC>UTtkLjs8dH~H9TkYBF}v#J|(KVg>p~5l<3vd3no8#a_$kmC=Q%M;yHxJ zUJ%c0sgv8IIkKt!t2Z7s!5q^%Cr#4PYSnHgG0Y*g)^0FYIQ-0}ozBlAFZbbB##v}$ zU<9&WBJu_wIC8jJQ6{Z8&Qn!vb$aPt-kSRQPYWgrBbzUcB!OQ*@4yc;VGL33z%pDu zMb#ALA>3~A%DY2`M$Ss{ifwOK%)|ru_SLPkYVdt-9Ttw~ut`!_PVi_X$9%?avp}G! zIjR&A*v5%G7VyAMPA5E^Bj{TV9)i5W)J&-;bHEKb^~T%orI5*fm$vOlIa={N-PCqx zq+9-Bm|J$ZBXocNymw!8VUIPU_xK@u)b z3l1B_#1B}iR)t0s04LrX@$A!*amBcyJ9uZ@B<+;%orGI?F;yGSTxGBY%E$nq1_nuq zi$_P=*waDXGtdGhgiPRr=;7UQvF)ZiAqqgYgaK`}NhJ`TL<(2pcR=4h)mBgiGX3-0 z(;xE)%6KFSE?_MBV!!P*Se+g23wyeGI;6`gm0h%V^;^uK?H7lagp}8boS?G`3IPPo~7^oyBru01d`ht z^y9*+4_&qq^rJI1fPJ|f^rXqW1-ssXx+3nu?0F^ma6(f}ItqI5PvnQ1gcSOwD&db_ zCq@#0exVe4V=WPgDKPpc0C~;;@{ZHd5AjnkG}RvXg^{=ix`!C_N!;><#@i2elA%ci zbkM#oij4Eqk{yuHAA$e}G^3Lmkay}f|K*zg`0hF#ND*UBxWRSHMF&V{^VYLjKB&R|xZ)HGT`(yMdqQLQGU zX59|BVy}Is-}QlI5?ptL}C!X(8#!@=eN0POT;?(ka!P(R;E|?|1KSSDmM^ zFz%^S22PlgJ>6^2JPVH_kXtMzRH89p?{C!_`|ReV>J_q7U9m~s`t11Ckn-WS(Kb>w)SRgKr@PO<=t~>(I|^@-$Qpenh;>L%B;|W zW4qxlWItbLjjyDEVBwFvZ#K~1A5DrdmK2N>3#ua zyfI$QDZ)90Nfr+Yi;F~hOWZ{R?%v@AsH(0j^W4u+tkL+AWNM|f zM2&j@M)CCX$ehzdl^@zW(EFFE#M=h|w>&f71pF%5bOY07JEJ~8(~!_qfj9RrkgF{C zzxQ~&iK`4=AVm3g#ua@8h389U;Y`ZNq%)L@o!bOE-3EXLL+c=L6u~Fg;ddO3SOMvckM3Flg0|} zpA?y1)Y&86{|=u~Ir$TPFYe0ki-r(!xJ_}*-p_?kxD(iQhK~>oIvK1Ma?4F4Ivas< zZJKs*8YwfR{9BuU#&sX3+XH`3Eiklfqe@};>iNJJjU%Or_XZ&h@#e7|RVeo$ z9)sFA`4k}X747f%;qD+{zC=w#^oPJQEbY%O^oJ6Q&LIPL#rN!Q-#~RYATD9XN+0|{ zer^ZzR)RT)ySG)-n%GI?CwT@Z+6Y1-^}1vka!)+vp&2N}jACL;*LOYXkuc5SqBGrM z)CW4M$>&Z<%}HIX*)4mIM~i$?@e+>X^JRS=y&(vjEpe?bfT$Ct5-~_3__y_h7Oj)@;d<| zSg6TVB(&BD2KjDzyzTbA%Q^N>EVt1Lso|GRInA26Vmddx|9EeSNlGJ|hofFwu~YN! zCrbx`AFB>lPy6~BEB{n&xNPd9vd`?YW2lYWH^q_q7*H9|vng~G+s*ZIfVnoLDzbUc zbx=Z5hpMPKc^wql{E;KV&pW}=8jBb6`Fj!)(HFjVz4xo$emINY1}uT!{h4D@#x^eN z?-)(f0rhp=lvzR2qE?Yroz-p_`)x`;EaR9bD~=QG~ZalQpb<5T^tmL z560_*Mz5vYk8+VkVk6+ZkVoOGLu>N}QudM=w%ofWBEIiePqQm>RLldt7qL}EVy1BNKtRJai91L=!HaNAVGhlJKKw}}ECJwD6$ng*G7iCzDbu-MncH$^v0%=XuGW3bY{*FxI9q&k|d%lNQaaBqUH#jxN zd^(jDR$$t+TY;}b&6^Vu2GfJWu^sG$^a_=SZ5M$8kCf69z2{E-CQbU5{3CO$Cwky)4W^ojgtDH_km zvVd3)^u0Ij^iV2bn%uSE07-z-kpS=Wy3C}9YowEzI3)X!? zfn^@u{Fo*0{e@-tLP@!1qlt!@!G)b%i0C{YXg)Ko1m9r@o~0xE{kdxxCB^A9q{zOp zqQ%#U6X0D8vXBnvi>QHU^Wa7^|BeYSKw`v_?A_ioMwHyRWil;q*Q@?$ke-~jX4q5? zeZe$>Y}Pt!Lv*Y#qkTzOW;|F(g0wd*gS~Am#{8fA@E&?IO&ZcBpGXem;kMvY*m*|<{2gE`V zT~+!_l~6NvXvnDOGTJ*BTj?16C8aD!3fy;eI%$cl_w`D)4}2t~r^M_~g_vcI?u~2@{fyijV20jyz!igAD8`spy!;_FpqDD({OSb!|$q){R zWo}FEouFNqqu!_Ms^2G{{x>OkX6#*0l;DuG!aRfuNQWD|H|{NSKo(7R+mU*`1vda| zLw}6^2{^mqF3myI`Ba?$+WRIWpgIf;6vp?{9TSs4Lzt&I3oVh&Ly4R^m7}S z0|f{0;5SbY`P&mSOI^zVQMLMURYIe$^6zIo^EBKO3)Q?Mk3}%= zvdduCD_Aq0*ii@>TeAFcR8X~`3*Y9J*-(M(2&Ul`aIY!5PQqLhEtx{MnqW|r z1cJGPYpTB44lI}|2GMW8B6WG6iG>Z>m$+Kj6Ei+DUKgF&mq?)amWnG zbs1@D>jT>Ne7XL`D%K?#MqIT~)|b5k&% zp=&!i{*_X@0926tyKJ6-f>1fi}cl!Y7I@sVHD!C|1&I#~ek&b7md5b%4v^DTtbOX_ASEv%jX^#l7 zbX`6>7|9{a-(&=%+W6O)zxo0i}&w<(-;dlY(42sSh1lTFJ zsZG2urBm)-J19QKRORv6YPMOMB?oeUI>Wtf!UtquEYC;g!Yft5q9}85ZIBZH5oF{H%)Ly+|bKJ|)&p1g5NTtxjZ6#8E zh?(}&Y@;-qLpyBd-Q>!LA}QRPR#g4C##A@!U0!@i-iagiy^KdP>a#OPWE`d7jP-Qs zBsyq%l){Uiu@m%P(L*Tjb~JKzuFCYTt?)%gfE1QgjtalIbZA`Mo$<5 zZaM&;Xc0-3-Z=REc(fZ$@zpf?e?9(1uGcH23;K(MtC!xxmMqIlUp#WbYA^LEGD7DWhh6Xvy}|$cnJbxTMIg2a5!9SyC*4i z(9-H;9uFuj-|3albI$Mc69K(vh0z}q(p{lZj{3k*a}bKwz$4rsC$11zn@3QWWEUm1p||K#GbX{)Ten<`vXfK7?XCmq!FR&6KYwmAMXbMYK!Z+fzegOwBh ze%e8!Qiea#G#{)>9@l6@Y}1c!;+h!VTy2ocQ3B4 zY5gsD(oz4e zzlO8}#mt2f?bhiGC?UUCLJ|JF{WJQ)(^&XRculqEcdfmlpE8>u<5cNI#&1YPNB3{G zcYRe~aBRPY8}sobu(Y}ygvIAy$)P@YrHC!=OQ(t4F~rBQHw8Rl{4}w6&!-)D9!YFSW)YlL-K*NKk(yfIkeu4az zauVYp`VD2*AA?CAfR}d!!d%K(Ja||7?bqIL?um@-Qh_flJq_!18srw zz=rd_fc>t5_7z6-%h4&J;@0adz$?ET9e+J&j4Vtx@*BettHF{Mrv?!NqF1T6mpeDE z6S=B{X_H!Z==Tn}F0HjVsXrXEuZi{+rX>B{O}vtX#>YqZT;X%5lgC31C8*j@u(VhP?Z95?Q6uueVJw)pP5^A$%;b~aidL8G=08iO-4 zvb^&C$SC}1qv)F9pniv3;$G%iY;pgRcTZCC%nRio*dTYckeXhUQ?V|7drm7JW0uM> zzst(61$YDv@U-)}=M{l|hP1alAv!$1A>y8!)o@ewvh-M6-sYK4mLE?o?}$7^)9e>! zwT8#w*yJHoiHS*tDT}V8vWJnTvZ)D&B^Dvzt(~0%AZwBPzZZmfoC2DpNIT!7?9UI> zy$w<-4136gdYdD{@B|E08Fg(_8!K{XykXSl$vBd439QTL1G;24d@L%eSa_*=ak_h; zn3H3|TMM%^hUVncsHjO4^YGE!!W1=2YoH}qr7E+fk?}Hcdq?0sLK*1Y=M}c|(TJW& zU^(g1>;3zRFRsg_?a?p!iHy>jkV_3Q*yz37anj~~gz^WmJ(UjHK zx9z9f2fw&uwjMNBzn4|pa5}ijoA}Br{pHm=ZdUis6Z-FpY95}F-mO0mI!Gy#f73#2 zTf&!$*Tik;QXQfdLe(ZO?%0wtyK26W;GjtsNG2p1jK)*`V(4`@B>sh;1c<%I1udw* zJTrdKdBTt^5|KE-Ucn)b9S(=sIrwt-_e-O{3>3Bh^DO3!U*UtISpxnHbeEM84#lvgFjksm(GVf3Z8sD~e!slIqX4$%!_>`IMEYJo!){hNqaX z+3#eGc|?evWjn`F%-pyu^V9mF7%iF}C1`%kn_$Vxvhj9ch1XQWZruqkCW1k;ASE7p z*ZZd_`s9+8@ttbnOKCcIcYD9C3wh`(DAWL(_3BZ;JwX^D2GiMZbZg*yAbl#uDH*w{ z4{0+SVxlcrhnzU<#<{HmqpPm{yL%`em+Qi`o?>2pI&~PCiJiJ%&Axe(OdX zsEgjba8L#?b#k~XDY6x&`MT||gPM$90qm^!tWI+xqN$QO%52gR<-!Ts%`@V@0;eAHuiLSdo3YWonTD-&_omAd`ai_dbRUJ%leElvf;S>BjcX`I+ zsERwKLqbDHXP!;`jvMMgu-%c^@%#wep@yhdNO&hEThgI-yXFM+oJiIj!I4hcC zFoZ;Lg1Bb=mzMwJ&P;;<1UCjGJNMjvpK=aXbZ93F5aGm~Iztvtq#5eHV)#eBlDuro zCV6LsZi5RX?GR|s-xdF0jbeqILh?))N7yiG3e8ZbYYqnON2j^dwt^EcQo^5|3T|)M zj{530Tj!ReKl;Nj`D^KbJFK?n-t7+UNfzH)5K8W5g;d?gjn?M!B#xlA@~C%8TmNvv zZ>Llyp@J}vNu}{S;_XKmRSh^YhpHvICv2WZ;9RifWTR~f@s3w8lEc(TQn2$BiS26y z11prAWy&EJ`WBclUaDae5Gjvl>;u<2BxLvbu{8&hv+EgP-$;40) z2-fMsb1i!~R9)HAAL~iA{bm=1H}Rwu8iacN5ZY@5u1aZ|YCq5kBx5R(%G+u>0Qkek zFPxns;w^+?aDdn-mO~KR5x0yViA+E+ALBjb?UR$08W5Wux^INwZc!UFNZ8fXIRRZx zO&Lozb2L@Wfw7>?csC~oO1t(+eQEx*8fyi0Q;a$8ET5+(X>Jec;-GBc=+pj^6iFu_l|pzl+<9%42Ubhg6Str-%q40?n-he8QdER4P$X+FDeD&lbwp$pZPA_kcNr zn{VA$)RWmZ3o0=ih6__R$-g)(&FJcyO0Tf8OrX^8fJ?;*KR;yCz!}crn_Ji|e$vZ~ z7MK%n22%verm=Ufs|ZBpCSt6gse`Rgi^OPh?PCkVNdM<%xub!<1RM8B`?JLqJC4fs znT0RUh^TWc$#6`_i#*~vGz=aEkDL6L9JCH|8oD+gft^56nJM~ixjO7hJ3Kty@zju8 zwDB)-{S$aIh6-jDjT8|}%*_OM$%OwYdZCp{1co!$jaZ~!gX3%yY z6Oshsa;18l1xRuPFb4ZTEcVG%9tH?Yv106A;k$v999diHW@vt{$m{=cM~0dl!Djdt zqMKy`%M79_u%NWt7qw2bH=E7()p$5B5)b6Yk95^w(667;=M`0U1|SU6@h;5$NO7d{Zzr!r26-QTDrn@>q^Rl%_IrbhnlgJ)BY=gH%sa^5%Bv{a zsbjM?4)<(p*y+eg!EKCBo#or>*X2+!qs)-{=KJ&9(nnj&C#>Bn)!A0H;nU((3Lmy# z7?aVl8$zF+u_(pSoUsu=;8~;o;-UB83h;EhXjNg)CN@*lB`!x~HZ}_5eBpTEHUm)f z?xa;Rz(3hKc6TsSBJj(UBr#$;Qgo=%_j14_4JrxD8DbZ+v<1d zwD&9u74Y9R%>R`Ra4Xik1lAuBcW{;V{7>@ngeN$#Zz(|R*G<0U)>))3AG0g5O}vUG znJLg(^3osF0%kQYyq|67A`{)n*_eVHc3>cbT5040H&}CqQR40tL;AGL9~pT#inEwB zaoK7m3+I}F8@Hfip3^~*kPqer*ksO-Pp@DMJYk@Px{0qPZnPyS(ogFVcs84wG}0}@ zymJn>^=`PpVxMr>n`X{@_hqcD+E25PPt|BNP4{;1aCX~?N8i}4uk0)}p!#W1uk_LG zZYx2NQ1j_52A;#kiFUbeq}bmg1G0np9Gfl)6k- zx?e+;QczO%gvAyz;h;EE`OgUNb;gcybY_ojx>jtvs}w8Cqq3?LE4rE#C7ANIcwzie z(mIhU((cVpjDPIFxxF>$U7Xks9-Zew1czFuC~RR2qsLEE$*hA~J~U5TaTk(+GU$eVha2$GhG%9>i`$7038qH-Tg^;472ZqUJju z|Fy8Bnw;-@W~|F&xN(JnBGmNyce8s*%X*_hirDm`5;;_X8q0Ii`Y8purhL+bF9fNk zcZ=apTh^c@gJsWnZ%9RrJdpF~T@t{oeTVewuP}|31tAAj+-RJMOzbey^aqi?1UE`r zo90VjXiO14CbarvRl_I&LgRF7BW!+k8xp(Tb6ijA{SFrB<(@{L5ZK(stL6HC08c=$zb!3_4YyJ)c4qT!nXW{l zE0ZziVwpNXIEa9W$F#H>r6o%#7andFeA1;|%Vtw0VPO&~l`v_kY;iW0_Q}j_DgI)ae=b4fnJER$K9d2)$?K?6g&u4}?Mmr=RL0JaxFCEBw^(t#Ww4wdzfnD8~ zb*X(HsMlP7J7k{z>sR}^Kze6nJ1cl&AcDYRO>^8i(3&(m%QlhPGB8fzpib?bp44M(*XET zzoO+i<)8d3#@-ymx4i83;(!F36O^M?1UkjzEB{Rd?wsBxv}OUih1MzPwwM8z*DNIT0c#w&8|Z+CN;FR>EMCePu?XyB_L;lZc$2A)kpY zshiDC`E4EHlf`kex6{|$H#ZYZywbeL>{N$?XP;E39u7%_Dk?nGwET72_Q~WJ$m6i< z{YH9Fw7?}GKZ?fWCj?Jk`Zn1o7zv4!(miYn3oBznHQu18-LPA+^tVp~GcT$|snp#n z!{ZXG7+zjtMlMxMjjNz|xnxApXk`?2&q=kY)W>ZuVW@xY}@Lc|KzksthY?jH6|U zUj%`wJTKeDx2jkQYP3cfbtJzxB+)0wAXRT>mDz||-8W-K4XBN)2cBO_EErY%T%b%$ ze&x@K_OBi=pQgF-%Jh~SlQ>T+;afk(0%B4Ys#wXfhdCUS>!jZDWK^n!jj21Q1_#j2 zB?Xi7&(h54CeIXmEiH#-*u9nr>l{mWdWR29L~mYx46!=FEvI>pYm9?fhW3gb6Y1RP)ATs9fcFtZHtMfs=3!;A^$aS^sO(+I7xx_2&gY*i!-;v4l@JcRWU{R^qirQeGJ-WwL_$dsy7;E|z~k>%kV#-)(e- z71;k^h8gTz#*FeQ3%-NrO%_n*#DCDW8@2w$h3W6L;VzDp{+q09&LtwkH+)w(*$0`T zP~-_rN|;s_#e7h1k3MY-?!U|g6T|!aSlraEU&JmT#tBh0G4lR77hQIia7>Fv_V=?g zGTK?b%uQ^6z;7iY)kCRejOeIl2~uyTO6ELlZoY z5&eDLl|yIFfKKiD$86F`tPwdao%HY?%)R)X{^g@ZybelvQY>? zera&^RONJh?e(*>967Ax>b#K`oyePRnn2bEr&`$BMwrB-fKyxDYvi4@2KOtgwmKz+ zCI*#mmXf>$+FNXoeIE@V{#h_JtbPCP{ri1|Gc#Ao5WgCxx>L1e~I5MmWVHZ`ZF!6nJIB+5io328$xq0xB z`zmoExdu5DLE&jD`NC^{F~k8b_dJ1nrlpqtP!0a{7R-%Dw{>2^Gt&ptocW>lGKf9N zDfMsC&OxNQHYMfo8N-2ja9v?HnS04yVV{_LVPD{L+)H#)J#Q7wMN4wG9q71Tq%*OZ5!tZN^7_=zCc;19oN0Pn_dahu+lnwoePs z?qBeQ$uRU*kT7UB$JAWbVPd`|ksnwc8Iw%9QV=%&vLejpN=P!O-*j5_vlwPwcO}$E z+JxIqasU+cxmmmWxwxp?+8hudHYEDuf`(4}XGOYNvpOvLJm5c%bzLPOh>SL}V4(4_ znZ!H$hczz#cxxB0b-T`9j)vCGVQ?$;-j3O$@$UXJ<&Q^RSPvOK_(_j&<{eQ36R*R7 zHTP)e?o;3Q>$tYk@2LBc!|o<;P!xwKq@Ib2hP`*luSwe7)XXnGpmTN&hELP&iHxsi zW^09Z&`qkSVakGsBxSmrM)Zafb)&U>Bb#Du)0L z;UEs<3;0qNbR(xtN!)q8ykkT9rz&_zpw(({cflmO) zpoBU*2Qx~S=kX_r!nje7pJQ%%kb}i`u!}41wK2-a#uBN&A78{7;4D}lC7AO0w@HrZ z5o*%qP?D}gG~(y>Q9d8azMqkJ;&mCUM_l!OaSt)j7iSabLnJ1}W+*1D6sIn4ZOdFy zY7yTHP))!9Xtar}$REBA#|yk+HBFXjhDw!NW|{d+iY*cu�zBE;A6`RoYnYVbGchb9$^iIU2 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 literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 b/v0.5.30/assets/inter-roman-vietnamese.ClpjcLMQ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5a9f9cb9ca0cd78b6ea2f3e5c9d2838dc8895598 GIT binary patch literal 8492 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 a!Vc~9U7SGB8$q3Ii#9CnAx#qS0RRAsKuhfa literal 0 HcmV?d00001 diff --git a/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.js b/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.js new file mode 100644 index 000000000..dff319096 --- /dev/null +++ b/v0.5.30/assets/introduction_citation.md.B4ZpJtEk.js @@ -0,0 +1,16 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BfjuC5t1.js";const y=JSON.parse('{"title":"Citation","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/citation.md","filePath":"introduction/citation.md","lastUpdated":null}'),t={name:"introduction/citation.md"},h=n(`