From df49d3ff03c5a96bb3f1d0ef183278235cc639c4 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 10 Sep 2024 19:17:43 +0000 Subject: [PATCH] build based on 07a30ea --- dev/404.html | 4 +- dev/UserGuide/cache.html | 12 +- dev/UserGuide/chunk.html | 32 +- dev/UserGuide/combine.html | 12 +- dev/UserGuide/compute.html | 122 +++++++- dev/UserGuide/convert.html | 48 +-- dev/UserGuide/create.html | 20 +- dev/UserGuide/faq.html | 94 +++--- dev/UserGuide/group.html | 14 +- dev/UserGuide/read.html | 20 +- dev/UserGuide/select.html | 16 +- dev/UserGuide/types.html | 12 +- dev/UserGuide/write.html | 34 +- dev/api.html | 20 +- ...evW4.js => UserGuide_cache.md.BxJ3IRnF.js} | 4 +- .../UserGuide_cache.md.BxJ3IRnF.lean.js | 5 + .../UserGuide_cache.md.aYjxevW4.lean.js | 1 - ...cenL.js => UserGuide_chunk.md.DQmK3Tmu.js} | 24 +- .../UserGuide_chunk.md.DQmK3Tmu.lean.js | 83 +++++ .../UserGuide_chunk.md.DZgkcenL.lean.js | 1 - ..._r.js => UserGuide_combine.md.Bs3BBbp0.js} | 4 +- .../UserGuide_combine.md.Bs3BBbp0.lean.js | 28 ++ .../UserGuide_combine.md.CgXxcV_r.lean.js | 1 - ...Y9.js => UserGuide_compute.md.BPtHMXa2.js} | 114 ++++++- .../UserGuide_compute.md.BPtHMXa2.lean.js | 265 ++++++++++++++++ .../UserGuide_compute.md.CLq4k1Y9.lean.js | 1 - .../UserGuide_convert.md.CSe_wnNP.lean.js | 1 - ...NP.js => UserGuide_convert.md.D6pPrrfh.js} | 38 +-- .../UserGuide_convert.md.D6pPrrfh.lean.js | 78 +++++ ...H4V.js => UserGuide_create.md.D-fbNPyl.js} | 12 +- .../UserGuide_create.md.D-fbNPyl.lean.js | 48 +++ .../UserGuide_create.md.JoOy7H4V.lean.js | 1 - ...SW0c59.js => UserGuide_faq.md.BZaTxhVy.js} | 82 ++--- dev/assets/UserGuide_faq.md.BZaTxhVy.lean.js | 267 ++++++++++++++++ dev/assets/UserGuide_faq.md.CfSW0c59.lean.js | 1 - .../UserGuide_group.md.C3qv_f3u.lean.js | 1 - ..._f3u.js => UserGuide_group.md.De_4u3Mq.js} | 4 +- .../UserGuide_group.md.De_4u3Mq.lean.js | 190 ++++++++++++ ...nCx2-.js => UserGuide_read.md.BCQMfZ77.js} | 12 +- dev/assets/UserGuide_read.md.BCQMfZ77.lean.js | 74 +++++ dev/assets/UserGuide_read.md.i_gnCx2-.lean.js | 1 - .../UserGuide_select.md.BWVJxXiv.lean.js | 1 - ...Xiv.js => UserGuide_select.md.MJRJAz_y.js} | 8 +- .../UserGuide_select.md.MJRJAz_y.lean.js | 293 ++++++++++++++++++ dev/assets/UserGuide_types.md.B2iGHzIZ.js | 1 - .../UserGuide_types.md.B2iGHzIZ.lean.js | 1 - dev/assets/UserGuide_types.md.DAaXu8Uc.js | 1 + .../UserGuide_types.md.DAaXu8Uc.lean.js | 1 + ...kkA6.js => UserGuide_write.md.BtDfDOfT.js} | 24 +- .../UserGuide_write.md.BtDfDOfT.lean.js | 39 +++ .../UserGuide_write.md.C3OHkkA6.lean.js | 1 - ...{api.md.DU-CSbKR.js => api.md.DSVzzvyi.js} | 10 +- dev/assets/api.md.DSVzzvyi.lean.js | 13 + dev/assets/api.md.DU-CSbKR.lean.js | 1 - dev/assets/app.CpfmI-U1.js | 1 - dev/assets/app.Zoy_fPy7.js | 1 + ...qo.B7KFIfDV.jpeg => cgfvxvy.B7KFIfDV.jpeg} | Bin .../chunks/@localSearchIndexroot.CbO3e_5G.js | 1 - .../chunks/@localSearchIndexroot.DuMHLHSP.js | 1 + .../chunks/VPLocalSearchBox.CIQr89Xt.js | 7 - .../chunks/VPLocalSearchBox.tGRBlptZ.js | 7 + dev/assets/chunks/framework.Bwkmg46C.js | 17 + dev/assets/chunks/framework._h4tgM90.js | 17 - dev/assets/chunks/theme.CwYulWfl.js | 2 - dev/assets/chunks/theme.o12TANz8.js | 2 + .../development_contribute.md.BjKHzE54.js | 3 - ...development_contribute.md.BjKHzE54.lean.js | 1 - .../development_contribute.md.CPZprWRQ.js | 3 + ...development_contribute.md.CPZprWRQ.lean.js | 3 + .../development_contributors.md.BTH2E-fs.js | 1 + ...velopment_contributors.md.BTH2E-fs.lean.js | 1 + .../development_contributors.md.Ce2z0IUh.js | 1 - ...velopment_contributors.md.Ce2z0IUh.lean.js | 1 - dev/assets/fvajudo.CbmV3u64.jpeg | Bin 0 -> 37944 bytes ...EFW7umcj.js => get_started.md.2M_EpbbP.js} | 22 +- dev/assets/get_started.md.2M_EpbbP.lean.js | 56 ++++ dev/assets/get_started.md.EFW7umcj.lean.js | 1 - ...uv.xrZxBsPv.jpeg => hkbjqfv.xrZxBsPv.jpeg} | Bin ...ex.md.D-zmVfSn.js => index.md.DU-mPNT1.js} | 2 +- ...VfSn.lean.js => index.md.DU-mPNT1.lean.js} | 2 +- dev/assets/jthhtav.BmXbFoQB.png | Bin 0 -> 112271 bytes dev/assets/qrtcgza.B1F72mIS.png | Bin 82626 -> 0 bytes dev/assets/tlkgzfl.DA3FSb99.jpeg | Bin 39689 -> 0 bytes ...ls_mean_seasonal_cycle.md.BCu3jBkO.lean.js | 1 - ...orials_mean_seasonal_cycle.md.DnEN9eOf.js} | 46 +-- ...ls_mean_seasonal_cycle.md.DnEN9eOf.lean.js | 72 +++++ .../tutorials_other_tutorials.md.DMk6XJBb.js | 1 + ...orials_other_tutorials.md.DMk6XJBb.lean.js | 1 + .../tutorials_other_tutorials.md.DofrLRlZ.js | 1 - ...orials_other_tutorials.md.DofrLRlZ.lean.js | 1 - ... => tutorials_plottingmaps.md.C_xuWMeL.js} | 14 +- ...tutorials_plottingmaps.md.C_xuWMeL.lean.js | 50 +++ ...tutorials_plottingmaps.md._uyphNwM.lean.js | 1 - dev/assets/ulsahek.w0JksFmk.png | Bin 0 -> 82072 bytes ...vl.96k_BqPR.jpeg => vafryxt.96k_BqPR.jpeg} | Bin dev/assets/yrexdyf.Dk-HtvWS.png | Bin 116734 -> 0 bytes ...clpj.CBBZcGwj.png => zbtetzz.CBBZcGwj.png} | Bin dev/development/contribute.html | 12 +- dev/development/contributors.html | 12 +- dev/get_started.html | 32 +- dev/hashmap.json | 2 +- dev/index.html | 12 +- dev/tutorials/mean_seasonal_cycle.html | 56 ++-- dev/tutorials/other_tutorials.html | 12 +- dev/tutorials/plottingmaps.html | 22 +- 105 files changed, 2212 insertions(+), 484 deletions(-) rename dev/assets/{UserGuide_cache.md.aYjxevW4.js => UserGuide_cache.md.BxJ3IRnF.js} (64%) create mode 100644 dev/assets/UserGuide_cache.md.BxJ3IRnF.lean.js delete mode 100644 dev/assets/UserGuide_cache.md.aYjxevW4.lean.js rename dev/assets/{UserGuide_chunk.md.DZgkcenL.js => UserGuide_chunk.md.DQmK3Tmu.js} (86%) create mode 100644 dev/assets/UserGuide_chunk.md.DQmK3Tmu.lean.js delete mode 100644 dev/assets/UserGuide_chunk.md.DZgkcenL.lean.js rename dev/assets/{UserGuide_combine.md.CgXxcV_r.js => UserGuide_combine.md.Bs3BBbp0.js} (85%) create mode 100644 dev/assets/UserGuide_combine.md.Bs3BBbp0.lean.js delete mode 100644 dev/assets/UserGuide_combine.md.CgXxcV_r.lean.js rename dev/assets/{UserGuide_compute.md.CLq4k1Y9.js => UserGuide_compute.md.BPtHMXa2.js} (56%) create mode 100644 dev/assets/UserGuide_compute.md.BPtHMXa2.lean.js delete mode 100644 dev/assets/UserGuide_compute.md.CLq4k1Y9.lean.js delete mode 100644 dev/assets/UserGuide_convert.md.CSe_wnNP.lean.js rename dev/assets/{UserGuide_convert.md.CSe_wnNP.js => UserGuide_convert.md.D6pPrrfh.js} (73%) create mode 100644 dev/assets/UserGuide_convert.md.D6pPrrfh.lean.js rename dev/assets/{UserGuide_create.md.JoOy7H4V.js => UserGuide_create.md.D-fbNPyl.js} (83%) create mode 100644 dev/assets/UserGuide_create.md.D-fbNPyl.lean.js delete mode 100644 dev/assets/UserGuide_create.md.JoOy7H4V.lean.js rename dev/assets/{UserGuide_faq.md.CfSW0c59.js => UserGuide_faq.md.BZaTxhVy.js} (84%) create mode 100644 dev/assets/UserGuide_faq.md.BZaTxhVy.lean.js delete mode 100644 dev/assets/UserGuide_faq.md.CfSW0c59.lean.js delete mode 100644 dev/assets/UserGuide_group.md.C3qv_f3u.lean.js rename dev/assets/{UserGuide_group.md.C3qv_f3u.js => UserGuide_group.md.De_4u3Mq.js} (98%) create mode 100644 dev/assets/UserGuide_group.md.De_4u3Mq.lean.js rename dev/assets/{UserGuide_read.md.i_gnCx2-.js => UserGuide_read.md.BCQMfZ77.js} (91%) create mode 100644 dev/assets/UserGuide_read.md.BCQMfZ77.lean.js delete mode 100644 dev/assets/UserGuide_read.md.i_gnCx2-.lean.js delete mode 100644 dev/assets/UserGuide_select.md.BWVJxXiv.lean.js rename dev/assets/{UserGuide_select.md.BWVJxXiv.js => UserGuide_select.md.MJRJAz_y.js} (98%) create mode 100644 dev/assets/UserGuide_select.md.MJRJAz_y.lean.js delete mode 100644 dev/assets/UserGuide_types.md.B2iGHzIZ.js delete mode 100644 dev/assets/UserGuide_types.md.B2iGHzIZ.lean.js create mode 100644 dev/assets/UserGuide_types.md.DAaXu8Uc.js create mode 100644 dev/assets/UserGuide_types.md.DAaXu8Uc.lean.js rename dev/assets/{UserGuide_write.md.C3OHkkA6.js => UserGuide_write.md.BtDfDOfT.js} (81%) create mode 100644 dev/assets/UserGuide_write.md.BtDfDOfT.lean.js delete mode 100644 dev/assets/UserGuide_write.md.C3OHkkA6.lean.js rename dev/assets/{api.md.DU-CSbKR.js => api.md.DSVzzvyi.js} (60%) create mode 100644 dev/assets/api.md.DSVzzvyi.lean.js delete mode 100644 dev/assets/api.md.DU-CSbKR.lean.js delete mode 100644 dev/assets/app.CpfmI-U1.js create mode 100644 dev/assets/app.Zoy_fPy7.js rename dev/assets/{ngaxsqo.B7KFIfDV.jpeg => cgfvxvy.B7KFIfDV.jpeg} (100%) delete mode 100644 dev/assets/chunks/@localSearchIndexroot.CbO3e_5G.js create mode 100644 dev/assets/chunks/@localSearchIndexroot.DuMHLHSP.js delete mode 100644 dev/assets/chunks/VPLocalSearchBox.CIQr89Xt.js create mode 100644 dev/assets/chunks/VPLocalSearchBox.tGRBlptZ.js create mode 100644 dev/assets/chunks/framework.Bwkmg46C.js delete mode 100644 dev/assets/chunks/framework._h4tgM90.js delete mode 100644 dev/assets/chunks/theme.CwYulWfl.js create mode 100644 dev/assets/chunks/theme.o12TANz8.js delete mode 100644 dev/assets/development_contribute.md.BjKHzE54.js delete mode 100644 dev/assets/development_contribute.md.BjKHzE54.lean.js create mode 100644 dev/assets/development_contribute.md.CPZprWRQ.js create mode 100644 dev/assets/development_contribute.md.CPZprWRQ.lean.js create mode 100644 dev/assets/development_contributors.md.BTH2E-fs.js create mode 100644 dev/assets/development_contributors.md.BTH2E-fs.lean.js delete mode 100644 dev/assets/development_contributors.md.Ce2z0IUh.js delete mode 100644 dev/assets/development_contributors.md.Ce2z0IUh.lean.js create mode 100644 dev/assets/fvajudo.CbmV3u64.jpeg rename dev/assets/{get_started.md.EFW7umcj.js => get_started.md.2M_EpbbP.js} (78%) create mode 100644 dev/assets/get_started.md.2M_EpbbP.lean.js delete mode 100644 dev/assets/get_started.md.EFW7umcj.lean.js rename dev/assets/{gazrluv.xrZxBsPv.jpeg => hkbjqfv.xrZxBsPv.jpeg} (100%) rename dev/assets/{index.md.D-zmVfSn.js => index.md.DU-mPNT1.js} (96%) rename dev/assets/{index.md.D-zmVfSn.lean.js => index.md.DU-mPNT1.lean.js} (96%) create mode 100644 dev/assets/jthhtav.BmXbFoQB.png delete mode 100644 dev/assets/qrtcgza.B1F72mIS.png delete mode 100644 dev/assets/tlkgzfl.DA3FSb99.jpeg delete mode 100644 dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.lean.js rename dev/assets/{tutorials_mean_seasonal_cycle.md.BCu3jBkO.js => tutorials_mean_seasonal_cycle.md.DnEN9eOf.js} (81%) create mode 100644 dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.lean.js create mode 100644 dev/assets/tutorials_other_tutorials.md.DMk6XJBb.js create mode 100644 dev/assets/tutorials_other_tutorials.md.DMk6XJBb.lean.js delete mode 100644 dev/assets/tutorials_other_tutorials.md.DofrLRlZ.js delete mode 100644 dev/assets/tutorials_other_tutorials.md.DofrLRlZ.lean.js rename dev/assets/{tutorials_plottingmaps.md._uyphNwM.js => tutorials_plottingmaps.md.C_xuWMeL.js} (93%) create mode 100644 dev/assets/tutorials_plottingmaps.md.C_xuWMeL.lean.js delete mode 100644 dev/assets/tutorials_plottingmaps.md._uyphNwM.lean.js create mode 100644 dev/assets/ulsahek.w0JksFmk.png rename dev/assets/{pcibivl.96k_BqPR.jpeg => vafryxt.96k_BqPR.jpeg} (100%) delete mode 100644 dev/assets/yrexdyf.Dk-HtvWS.png rename dev/assets/{mzrclpj.CBBZcGwj.png => zbtetzz.CBBZcGwj.png} (100%) diff --git a/dev/404.html b/dev/404.html index 0b07bcf7..ee4d4728 100644 --- a/dev/404.html +++ b/dev/404.html @@ -8,14 +8,14 @@ - +
- + \ No newline at end of file diff --git a/dev/UserGuide/cache.html b/dev/UserGuide/cache.html index abaf45fb..12d55e72 100644 --- a/dev/UserGuide/cache.html +++ b/dev/UserGuide/cache.html @@ -8,21 +8,21 @@ - + - - - + + + -
Skip to content

Caching YAXArrays

For some applications like interactive plotting of large datasets it can not be avoided that the same data must be accessed several times. In these cases it can be useful to store recently accessed data in a cache. In YAXArrays this can be easily achieved using the cache function. For example, if we open a large dataset from a remote source and want to keep data in a cache of size 500MB one can use:

julia
using YAXArrays, Zarr
+    
Skip to content

Caching YAXArrays

For some applications like interactive plotting of large datasets it can not be avoided that the same data must be accessed several times. In these cases it can be useful to store recently accessed data in a cache. In YAXArrays this can be easily achieved using the cache function. For example, if we open a large dataset from a remote source and want to keep data in a cache of size 500MB one can use:

julia
using YAXArrays, Zarr
 ds = open_dataset("path/to/source")
 cachesize = 500 #MB
 cache(ds,maxsize = cachesize)

The above will wrap every array in the dataset into its own cache, where the 500MB are distributed equally across datasets. Alternatively individual caches can be applied to single YAXArrays

julia
yax = ds.avariable
 cache(yax,maxsize = 1000)
- + \ No newline at end of file diff --git a/dev/UserGuide/chunk.html b/dev/UserGuide/chunk.html index 67222609..bde41d54 100644 --- a/dev/UserGuide/chunk.html +++ b/dev/UserGuide/chunk.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Chunk YAXArrays

Thinking about chunking is important when it comes to analyzing your data, because in most situations this will not fit into memory, hence having the fastest read access to it is crucial for your workflows. For example, for geo-spatial data do you want fast access on time or space, or... think about it.

To determine the chunk size of the array representation on disk, call the setchunks function prior to saving.

Chunking YAXArrays

julia
using YAXArrays, Zarr
+    
Skip to content

Chunk YAXArrays

Thinking about chunking is important when it comes to analyzing your data, because in most situations this will not fit into memory, hence having the fastest read access to it is crucial for your workflows. For example, for geo-spatial data do you want fast access on time or space, or... think about it.

To determine the chunk size of the array representation on disk, call the setchunks function prior to saving.

Chunking YAXArrays

julia
using YAXArrays, Zarr
 a = YAXArray(rand(10,20))
 a_chunked = setchunks(a, (5,10))
 a_chunked.chunks
2×2 DiskArrays.GridChunks{2, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -46,14 +46,14 @@
  (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

Saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables: 
 x
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 y
 z
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
-  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

Set chunking by Variable

The following will set the chunk size for each Variable separately and results in exactly the same chunking as the example above

julia
using YAXArrays, Zarr
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking by Variable

The following will set the chunk size for each Variable separately and results in exactly the same chunking as the example above

julia
using YAXArrays, Zarr
 ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10)), z = YAXArray(rand(10,20,5)))
 dschunked = setchunks(ds,(x = (5,10), y = Dict("Dim_1"=>5), z = (Dim_1 = 5, Dim_2 = 10, Dim_3 = 2)))
 Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -70,14 +70,14 @@
  (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables: 
 x
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 y
 z
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
-  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

Set chunking for all variables

The following code snippet only works when all member variables of the dataset have the same shape and sets the output chunks for all arrays.

julia
using YAXArrays, Zarr
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking for all variables

The following code snippet only works when all member variables of the dataset have the same shape and sets the output chunks for all arrays.

julia
using YAXArrays, Zarr
 ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10,20)), z = YAXArray(rand(10,20)))
 dschunked = setchunks(ds,(5,10))
 Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -94,13 +94,13 @@
  (6:10, 1:10, 3:3)  (6:10, 11:20, 3:3)

saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-→ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+→ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 Variables: 
 x
 y
 z

Suggestions on how to improve or add to these examples is welcome.

- + \ No newline at end of file diff --git a/dev/UserGuide/combine.html b/dev/UserGuide/combine.html index 831b2e4b..4f08a02f 100644 --- a/dev/UserGuide/combine.html +++ b/dev/UserGuide/combine.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Combine YAXArrays

Data is often scattered across multiple files and corresponding arrays, e.g. one file per time step. This section describes methods on how to combine them into a single YAXArray.

cat along an existing dimension

Here we use cat to combine two arrays consisting of data from the first and the second half of a year into one single array containing the whole year. We glue the arrays along the first dimension using dims = 1: The resulting array whole_year still has one dimension, i.e. time, but with 12 instead of 6 elements.

julia
using YAXArrays
+    
Skip to content

Combine YAXArrays

Data is often scattered across multiple files and corresponding arrays, e.g. one file per time step. This section describes methods on how to combine them into a single YAXArray.

cat along an existing dimension

Here we use cat to combine two arrays consisting of data from the first and the second half of a year into one single array containing the whole year. We glue the arrays along the first dimension using dims = 1: The resulting array whole_year still has one dimension, i.e. time, but with 12 instead of 6 elements.

julia
using YAXArrays
 
 first_half = YAXArray((Dim{:time}(1:6),), rand(6))
 second_half = YAXArray((Dim{:time}(7:12),), rand(6))
@@ -45,7 +45,7 @@
 ├───────────────────────────────────────────────────── file size ┤ 
   file size: 96.0 bytes
 └────────────────────────────────────────────────────────────────┘
- + \ No newline at end of file diff --git a/dev/UserGuide/compute.html b/dev/UserGuide/compute.html index 00184552..623d055a 100644 --- a/dev/UserGuide/compute.html +++ b/dev/UserGuide/compute.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Compute YAXArrays

This section describes how to create new YAXArrays by performing operations on them.

  • Use arithmetics to add or multiply numbers to each element of an array

  • Use map to apply a more complex functions to every element of an array

  • Use mapslices to reduce a dimension, e.g. to get the mean over all time steps

  • Use mapCube to apply complex functions on an array that may change any dimensions

Let's start by creating an example dataset:

julia
using YAXArrays
+    
Skip to content

Compute YAXArrays

This section describes how to create new YAXArrays by performing operations on them.

  • Use arithmetics to add or multiply numbers to each element of an array

  • Use map to apply a more complex functions to every element of an array

  • Use mapslices to reduce a dimension, e.g. to get the mean over all time steps

  • Use mapCube to apply complex functions on an array that may change any dimensions

Let's start by creating an example dataset:

julia
using YAXArrays
 using Dates
 
 axlist = (
@@ -38,7 +38,7 @@
   :origin => "user guide"
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 35.16 KB
-└──────────────────────────────────────────────────────────────────────────────┘

Modify elements of a YAXArray

julia
a[1,2,3]
0.39569774546730574
julia
a[1,2,3] = 42
42
julia
a[1,2,3]
42.0

WARNING

Some arrays, e.g. those saved in a cloud object storage are immutable making any modification of the data impossible.

Arithmetics

Add a value to all elements of an array and save it as a new array:

julia
a2 = a .+ 5
╭──────────────────────────────╮
+└──────────────────────────────────────────────────────────────────────────────┘

Modify elements of a YAXArray

julia
a[1,2,3]
0.2141174000417737
julia
a[1,2,3] = 42
42
julia
a[1,2,3]
42.0

WARNING

Some arrays, e.g. those saved in a cloud object storage are immutable making any modification of the data impossible.

Arithmetics

Add a value to all elements of an array and save it as a new array:

julia
a2 = a .+ 5
╭──────────────────────────────╮
 │ 30×10×15 YAXArray{Float64,3} │
 ├──────────────────────────────┴───────────────────────────────────────── dims ┐
   ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
@@ -81,7 +81,97 @@
   Dict{String, Any}()
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 240.0 bytes
-└──────────────────────────────────────────────────────────────────────────────┘

mapCube

mapCube is the most flexible way to apply a function over subsets of an array. Dimensions may be added or removed.

Here we transform a raster array with spatial dimension lat and lon into a vector array having just one spatial dimension i.e. region. First, create the raster array:

julia
using YAXArrays
+└──────────────────────────────────────────────────────────────────────────────┘

mapCube

mapCube is the most flexible way to apply a function over subsets of an array. Dimensions may be added or removed.

Operations over several YAXArrays

Here, we will define a simple function, that will take as input several YAXArrays. But first, let's load the necessary packages.

julia
using YAXArrays, Zarr
+using Dates

Define function in space and time

julia
f(lo, la, t) = (lo + la + Dates.dayofyear(t))
f (generic function with 1 method)

now, mapCube requires this function to be wrapped as follows

julia
function g(xout, lo, la, t)
+    xout .= f.(lo, la, t)
+end
g (generic function with 1 method)

INFO

Note the . after f, this is because we will slice across time, namely, the function is broadcasted along this dimension.

Here, we do create YAXArrays only with the desired dimensions as

julia
julia> lon = YAXArray(Dim{:lon}(range(1, 15)))
╭──────────────────────────────╮
+15-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lon Sampled{Int64} 1:15 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 120.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> lat = YAXArray(Dim{:lat}(range(1, 10)))
╭──────────────────────────────╮
+10-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lat Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 80.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

And a time Cube's Axis

julia
tspan = Date("2022-01-01"):Day(1):Date("2022-01-30")
+time = YAXArray(Dim{:time}(tspan))
╭─────────────────────────────╮
+│ 30-element YAXArray{Date,1} │
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 240.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

note that the following can be extended to arbitrary YAXArrays with additional data and dimensions.

Let's generate a new cube using mapCube and saving the output directly into disk.

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims(), InDims(), InDims("time")),
+           outdims = OutDims("time", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+30×15×10 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

"time axis goes first"

Note that currently the time axis in the output cube goes first.

Check that it is working

julia
julia> gen_cube.data[1, :, :]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

but, we can generate a another cube with a different output order as follows

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims("lon"), InDims(), InDims()),
+           outdims = OutDims("lon", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+15×10×30 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

INFO

Note that now the broadcasted dimension is lon.

we can see this by slicing on the last dimension now

julia
gen_cube.data[:, :, 1]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

which outputs the same as the gen_cube.data[1, :, :] called above.

Creating a vector array

Here we transform a raster array with spatial dimension lat and lon into a vector array having just one spatial dimension i.e. region. First, create the raster array:

julia
using YAXArrays
 using DimensionalData
 using Dates
 
@@ -131,14 +221,14 @@
 ├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
 └──────────────────────────────────────────────────────────────────────────────┘
-  ↓ →  1.0        1.28571   1.57143     …  4.42857   4.71429     5.0
-  1.0  0.274566   0.534793  0.854262       0.110146  0.57064     0.19585
-  2.0  0.227196   0.1771    0.795952       0.395735  0.00766601  0.099476
-  3.0  0.382234   0.848547  0.249912       0.454773  0.0948468   0.0196535
-  ⋮                                     ⋱                        ⋮
-  8.0  0.0827623  0.791032  0.00929636     0.217969  0.028745    0.878439
-  9.0  0.219269   0.903682  0.861747       0.926123  0.689873    0.690915
- 10.0  0.142275   0.381645  0.284095    …  0.896381  0.501022    0.086277

Now we calculate the list of corresponding points for each region. This will be re-used for each point in time during the final mapCube. In addition, this avoids the allocation of unnecessary memory.

julia
regions = ["A", "B", "C", "D"]
+  ↓ →  1.0       1.28571    1.57143   …  4.42857   4.71429   5.0
+  1.0  0.111806  0.730896   0.390622     0.345419  0.886959  0.0322648
+  2.0  0.945136  0.2867     0.885515     0.636107  0.178756  0.535162
+  3.0  0.807073  0.0658503  0.951478     0.771082  0.110929  0.576982
+  ⋮                                   ⋱                      ⋮
+  8.0  0.571501  0.479832   0.401882     0.899889  0.917739  0.609885
+  9.0  0.225987  0.0376093  0.812919     0.80386   0.443763  0.226869
+ 10.0  0.335462  0.392626   0.980182  …  0.409798  0.437697  0.0388753

Now we calculate the list of corresponding points for each region. This will be re-used for each point in time during the final mapCube. In addition, this avoids the allocation of unnecessary memory.

julia
regions = ["A", "B", "C", "D"]
 points_of_regions = map(enumerate(regions)) do (i,region)
     region => findall(isequal(region), regions_mat)
 end |> Dict |> sort
OrderedCollections.OrderedDict{String, Vector{CartesianIndex{2}}} with 4 entries:
@@ -192,7 +282,7 @@
 mapCube(mymean, a, indims=InDims("time"), outdims=OutDims())

In the last example, mapCube was used to map the mymean function. mapslices is a convenient function that can replace mapCube, where you can omit defining an extra function with the output argument as an input (e.g. mymean). It is possible to simply use mapslice

julia
mapslices(mean  skipmissing, a, dims="time")

It is also possible to distribute easily the workload on a cluster, with little modification to the code. To do so, we use the ClusterManagers package.

julia
using Distributed
 using ClusterManagers
 addprocs(SlurmManager(10))
- + \ No newline at end of file diff --git a/dev/UserGuide/convert.html b/dev/UserGuide/convert.html index 3ab20eb2..fc51ee57 100644 --- a/dev/UserGuide/convert.html +++ b/dev/UserGuide/convert.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Convert YAXArrays

This section describes how to convert variables from types of other Julia packages into YAXArrays and vice versa.

WARNING

YAXArrays is designed to work with large datasets that are way larger than the memory. However, most types are designed to work in memory. Those conversions are only possible if the entire dataset fits into memory. In addition, metadata might be lost during conversion.

Convert Base.Array

Convert Base.Array to YAXArray:

julia
using YAXArrays
+    
Skip to content

Convert YAXArrays

This section describes how to convert variables from types of other Julia packages into YAXArrays and vice versa.

WARNING

YAXArrays is designed to work with large datasets that are way larger than the memory. However, most types are designed to work in memory. Those conversions are only possible if the entire dataset fits into memory. In addition, metadata might be lost during conversion.

Convert Base.Array

Convert Base.Array to YAXArray:

julia
using YAXArrays
 
 m = rand(5,10)
 a = YAXArray(m)
╭──────────────────────────╮
@@ -30,11 +30,11 @@
 ├────────────────────────────────────────────────────────── file size ┤ 
   file size: 400.0 bytes
 └─────────────────────────────────────────────────────────────────────┘

Convert YAXArray to Base.Array:

julia
m2 = collect(a.data)
5×10 Matrix{Float64}:
- 0.249608  0.00552544  0.56213   0.519169   …  0.450066  0.51539    0.574653
- 0.19875   0.470067    0.103211  0.856547      0.19776   0.260932   0.695295
- 0.528707  0.666155    0.839119  0.0321818     0.919695  0.836565   0.641424
- 0.665448  0.684161    0.158104  0.858738      0.243106  0.602045   0.671807
- 0.159698  0.848549    0.48712   0.0557879     0.511201  0.0943564  0.432317

Convert Raster

A Raster as defined in Rasters.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types:

julia
using Rasters
+ 0.982681  0.30872    0.991662  0.812941  …  0.785487  0.200921  0.56509
+ 0.255901  0.191475   0.91863   0.286567     0.697089  0.578499  0.559458
+ 0.802815  0.0792955  0.49635   0.153314     0.519502  0.595256  0.982369
+ 0.838723  0.418527   0.945523  0.681937     0.654553  0.869916  0.0806691
+ 0.8037    0.726055   0.370371  0.726514     0.46623   0.371407  0.795256

Convert Raster

A Raster as defined in Rasters.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types:

julia
using Rasters
 
 lon, lat = X(25:1:30), Y(25:1:30)
 time = Ti(2000:2024)
@@ -62,13 +62,13 @@
 
 └─────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26           27          28         29          30
- 25     0.940483   0.894856     0.496038    0.450453   0.630924    0.754794
- 26     0.437037   0.216039     0.301316    0.248116   0.810228    0.313254
- 27     0.896249   0.989218     0.0477079   0.89122    0.0261803   0.206706
- 28     0.708967   0.351027     0.26031     0.470138   0.840873    0.0133172
- 29     0.892941   0.00686917   0.035698    0.939528   0.510782    0.198741
- 30     0.646887   0.418673     0.907052    0.230079   0.02116     0.635883

Convert DimArray

A DimArray as defined in DimensionalData.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types.

Convert DimArray to YAXArray:

julia
using DimensionalData
+  ↓ →  25           26         27         28         29         30
+ 25     0.668356     0.238835   0.436044   0.152703   0.468086   0.158513
+ 26     0.906684     0.345557   0.739191   0.21762    0.76884    0.112142
+ 27     0.370883     0.471202   0.216082   0.40658    0.790483   0.033994
+ 28     0.469495     0.263308   0.951713   0.373742   0.307866   0.490098
+ 29     0.00465577   0.208669   0.982017   0.897845   0.337278   0.828301
+ 30     0.778578     0.948093   0.894081   0.818217   0.106047   0.92191

Convert DimArray

A DimArray as defined in DimensionalData.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types.

Convert DimArray to YAXArray:

julia
using DimensionalData
 using YAXArrayBase
 
 dim_arr = rand(X(1:5), Y(10.0:15.0), metadata = Dict{String, Any}())
@@ -89,13 +89,13 @@
 ├──────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
 └──────────────────────────────────────────────────────────────────┘
- ↓ →  10.0       11.0         12.0       13.0       14.0       15.0
- 1     0.308299   0.979944     0.813157   0.953172   0.18757    0.325188
- 2     0.372918   0.669206     0.946524   0.937779   0.810681   0.552949
- 3     0.261139   0.298312     0.662771   0.246061   0.773001   0.274429
- 4     0.402285   0.597315     0.43242    0.229361   0.868584   0.56698
- 5     0.987524   0.00346434   0.355755   0.961872   0.702858   0.491176

INFO

At the moment there is no support to save a DimArray directly into disk as a NetCDF or a Zarr file.

- + ↓ → 10.0 11.0 12.0 13.0 14.0 15.0 + 1 0.1495 0.0195499 0.921394 0.193496 0.445246 0.506692 + 2 0.888258 0.318317 0.6742 0.607539 0.234382 0.722903 + 3 0.464692 0.405837 0.610329 0.432667 0.387209 0.353383 + 4 0.657613 0.583472 0.379975 0.896276 0.425406 0.238368 + 5 0.404644 0.951713 0.0752454 0.0759995 0.412653 0.930755

INFO

At the moment there is no support to save a DimArray directly into disk as a NetCDF or a Zarr file.

+ \ No newline at end of file diff --git a/dev/UserGuide/create.html b/dev/UserGuide/create.html index ceae0894..601b68ec 100644 --- a/dev/UserGuide/create.html +++ b/dev/UserGuide/create.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Create YAXArrays and Datasets

This section describes how to create arrays and datasets by filling values directly.

Create a YAXArray

We can create a new YAXArray by filling the values directly:

julia
using YAXArrays
+    
Skip to content

Create YAXArrays and Datasets

This section describes how to create arrays and datasets by filling values directly.

Create a YAXArray

We can create a new YAXArray by filling the values directly:

julia
using YAXArrays
 a1 = YAXArray(rand(10, 20, 5))
╭─────────────────────────────╮
 │ 10×20×5 YAXArray{Float64,3} │
 ├─────────────────────────────┴────────────────────────────────── dims ┐
@@ -49,23 +49,23 @@
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 35.16 KB
 └──────────────────────────────────────────────────────────────────────────────┘
julia
a2.properties
Dict{Symbol, String} with 1 entry:
-  :origin => "user guide"
julia
a2.axes
↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  :origin => "user guide"
julia
a2.axes
(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
 → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
-↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points

Create a Dataset

julia
data3 = rand(30, 10, 15)
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)

Create a Dataset

julia
data3 = rand(30, 10, 15)
 a3 = YAXArray(axlist, data3, properties)
 
 arrays = Dict(:a2 => a2, :a3 => a3)
 ds = Dataset(; properties, arrays...)
YAXArray Dataset
 Shared Axes: 
-↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
 → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
-↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)
 Variables: 
 a2
 a3
 
 Properties: Dict(:origin => "user guide")
- + \ No newline at end of file diff --git a/dev/UserGuide/faq.html b/dev/UserGuide/faq.html index 5d00fb74..643874c1 100644 --- a/dev/UserGuide/faq.html +++ b/dev/UserGuide/faq.html @@ -8,31 +8,31 @@ - + - - - + + + -
Skip to content

Frequently Asked Questions (FAQ)

The purpose of this section is to do a collection of small convinient pieces of code on how to do simple things.

Extract the axes names from a Cube

julia
using YAXArrays
+    
Skip to content

Frequently Asked Questions (FAQ)

The purpose of this section is to do a collection of small convinient pieces of code on how to do simple things.

Extract the axes names from a Cube

julia
using YAXArrays
 using DimensionalData
julia
julia> c = YAXArray(rand(10, 10, 5))
╭─────────────────────────────╮
 10×10×5 YAXArray{Float64,3}
-├─────────────────────────────┴────────────────────────────────── dims ┐
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
-├──────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├─────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 3.91 KB
-└──────────────────────────────────────────────────────────────────────┘
julia
julia> caxes(c) # former way of doing it
Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> caxes(c) # former way of doing it
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

WARNING

To get the axes of a YAXArray use the dims function instead of the caxes function

julia
julia> dims(c)
Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

WARNING

To get the axes of a YAXArray use the dims function instead of the caxes function

julia
julia> dims(c)
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

INFO

Also, use DD.rebuild(ax, values) instead of axcopy(ax, values) to copy an axes with the same name but different values.

Obtain values from axes and data from the cube

There are two options to collect values from axes. In this examples the axis ranges from 1 to 10.

These two examples bring the same result

julia
collect(getAxis("Dim_1", c).val)
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

INFO

Also, use DD.rebuild(ax, values) instead of axcopy(ax, values) to copy an axes with the same name but different values.

Obtain values from axes and data from the cube

There are two options to collect values from axes. In this examples the axis ranges from 1 to 10.

These two examples bring the same result

julia
collect(getAxis("Dim_1", c).val)
 collect(c.axes[1].val)
10-element Vector{Int64}:
   1
   2
@@ -45,14 +45,14 @@
   9
  10

to collect data from a cube works exactly the same as doing it from an array

julia
julia> c[:, :, 1]
╭───────────────────────────╮
 10×10 YAXArray{Float64,2}
-├───────────────────────────┴────────────────────────── dims ┐
+├───────────────────────────┴──────────────────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} 1:10 ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} 1:10 ForwardOrdered Regular Points
-├────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├───────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 800.0 bytes
-└────────────────────────────────────────────────────────────┘

How do I concatenate cubes

It is possible to concatenate several cubes that shared the same dimensions using the [concatenatecubes]@ref function.

Let's create two dummy cubes

julia
using YAXArrays
+└──────────────────────────────────────────────────────────────────────────────┘

How do I concatenate cubes

It is possible to concatenate several cubes that shared the same dimensions using the [concatenatecubes]@ref function.

Let's create two dummy cubes

julia
using YAXArrays
 axlist = (
     Dim{:time}(range(1, 20, length=20)),
     Dim{:lon}(range(1, 10, length=10)),
@@ -76,9 +76,9 @@
   file size: 46.88 KB
 └──────────────────────────────────────────────────────────────────────────────┘

How do I subset a YAXArray ( Cube ) or Dataset?

These are the three main datatypes provided by the YAXArrays libray. You can find a description of them here. A Cube is no more than a YAXArray, so, we will not explicitly tell about a Cube.

Subsetting a YAXArray

Let's start by creating a dummy YAXArray.

Firstly, load the required libraries

julia
using YAXArrays
 using Dates # To generate the dates of the time axis
-using DimensionalData # To use the "Between" option for selecting data, however the intervals notation should be used instead, i.e. `a .. b`.

Define the time span of the YAXArray

julia
t = Date("2020-01-01"):Month(1):Date("2022-12-31")
Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create YAXArray axes

julia
axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
↓ Lon  1:10,
+using DimensionalData # To use the "Between" option for selecting data, however the intervals notation should be used instead, i.e. `a .. b`.

Define the time span of the YAXArray

julia
t = Date("2020-01-01"):Month(1):Date("2022-12-31")
Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create YAXArray axes

julia
axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
(↓ Lon  1:10,
 → Lat  1:10,
-↗ Time Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create the YAXArray

julia
y = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
╭────────────────────────────╮
+↗ Time Date("2020-01-01"):Dates.Month(1):Date("2022-12-01"))

create the YAXArray

julia
y = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
╭────────────────────────────╮
 │ 10×10×36 YAXArray{Int64,3} │
 ├────────────────────────────┴─────────────────────────────────────────── dims ┐
   ↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
@@ -139,16 +139,16 @@
 
 ds = Dataset(; var1=var1, var2=var2)
YAXArray Dataset
 Shared Axes: 
-↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+(↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
 → Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
-↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
 Variables: 
 var1
 var2
julia
ds_lonlat = ds[Lon=1 .. 5, Lat=5 .. 10]
YAXArray Dataset
 Shared Axes: 
-↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+(↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
 → Lat  Sampled{Int64} 5:10 ForwardOrdered Regular Points,
-↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
 Variables: 
 var1
 var2

Subsetting a Dataset whose variables share some but not all of their dimensions

In this case, if we subset by the common dimension/s, this works the same as for YAXArrays, Cubes, and datasets that share all their dimensions.

But we can also subset a variable by the values of another variable with which it shares some dimensions.

Warning

If your data is not loaded into memory, the selection will be too slow. So, you have load into memory, at least, the variable with which you make the selection.

Let's make an example.

julia
using YAXArrays
@@ -166,12 +166,12 @@
 
 ds = Dataset(; longitudes=longitudes, latitudes=latitudes, temperature=temperature)
YAXArray Dataset
 Shared Axes: 
-↓ points Sampled{Int64} 1:100 ForwardOrdered Regular Points
+(↓ points Sampled{Int64} 1:100 ForwardOrdered Regular Points)
 Variables: 
 longitudes
 latitudes
 temperature
-  ↓ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

Select all points between 20ºN and 85ºN, and 0ºE to 180ºE

julia
ds_subset = ds[points = Where(p-> ds["latitudes"][p]  >= 20 && ds["latitudes"][p]  <= 80 &&
+  (↓ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

Select all points between 20ºN and 85ºN, and 0ºE to 180ºE

julia
ds_subset = ds[points = Where(p-> ds["latitudes"][p]  >= 20 && ds["latitudes"][p]  <= 80 &&
                              ds["longitudes"][p] >= 0  && ds["longitudes"][p] <= 180
                              ) # Where
               ] # ds
YAXArray Dataset
@@ -179,12 +179,12 @@
 ()
 Variables: 
 longitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 latitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 temperature
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points,
-  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

If your dataset has been read from a file with Cube it is not loaded into memory, and you have to load the latitudes and longitudes YAXArrays into memory:

julia
latitudes_yasxa  = readcubedata(ds["latitudes"])
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

If your dataset has been read from a file with Cube it is not loaded into memory, and you have to load the latitudes and longitudes YAXArrays into memory:

julia
latitudes_yasxa  = readcubedata(ds["latitudes"])
 longitudes_yasxa = readcubedata(ds["longitudes"])
 ds_subset = ds[points = Where(p-> latitudes_yasxa[p]  >= 20 && latitudes_yasxa[p]  <= 80 &&
                              longitudes_yasxa[p] >= 0  && longitudes_yasxa[p] <= 180
@@ -194,12 +194,12 @@
 ()
 Variables: 
 longitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 latitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 temperature
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points,
-  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

How do I apply map algebra?

Our next step is map algebra computations. This can be done effectively using the 'map' function. For example:

Multiplying cubes with only spatio-temporal dimensions

julia
julia> map((x, y) -> x * y, ds1, ds2)
╭──────────────────────────────╮
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

How do I apply map algebra?

Our next step is map algebra computations. This can be done effectively using the 'map' function. For example:

Multiplying cubes with only spatio-temporal dimensions

julia
julia> map((x, y) -> x * y, ds1, ds2)
╭──────────────────────────────╮
 20×10×15 YAXArray{Float64,3}
 ├──────────────────────────────┴───────────────────────────────────────── dims ┐
 time Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
@@ -246,30 +246,30 @@
 fig, ax, obj = heatmap(classes;
     colormap=Makie.Categorical(cgrad([:grey15, :orangered, :snow3])))
 cbar = Colorbar(fig[1,2], obj)
-fig

Now we define the input cubes that will be considered for the iterable table

julia
t = CubeTable(values=ds1, classes=classes)
Datacube iterator with 1 subtables with fields: (:values, :classes, :time, :lon, :lat)
julia
using DataFrames
+fig

Now we define the input cubes that will be considered for the iterable table

julia
t = CubeTable(values=ds1, classes=classes)
Datacube iterator with 1 subtables with fields: (:values, :classes, :time, :lon, :lat)
julia
using DataFrames
 using OnlineStats
 ## visualization of the CubeTable
 c_tbl = DataFrame(t[1])
 first(c_tbl, 5)

In this line we calculate the Mean for each class

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes))
╭───────────────────────────────────────────────╮
 3-element YAXArray{Union{Missing, Float64},1}
-├───────────────────────────────────────────────┴────────────── dims ┐
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
 classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points
-├────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├───────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 24.0 bytes
-└────────────────────────────────────────────────────────────────────┘

We can also use more than one criteria for grouping the values. In the next example, the mean is calculated for each class and timestep.

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes, :time))
╭──────────────────────────────────────────╮
+└──────────────────────────────────────────────────────────────────────────────┘

We can also use more than one criteria for grouping the values. In the next example, the mean is calculated for each class and timestep.

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes, :time))
╭──────────────────────────────────────────╮
 3×20 YAXArray{Union{Missing, Float64},2}
-├──────────────────────────────────────────┴────────────────────── dims ┐
+├──────────────────────────────────────────┴───────────────────────────── dims ┐
 classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points,
 time    Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points
-├───────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├──────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 480.0 bytes
-└───────────────────────────────────────────────────────────────────────┘

How do I assing variable names to YAXArrays in a Dataset

One variable name

julia
julia> ds = YAXArrays.Dataset(; (:a => YAXArray(rand(10)),)...)
YAXArray Dataset
+└──────────────────────────────────────────────────────────────────────────────┘

How do I assing variable names to YAXArrays in a Dataset

One variable name

julia
julia> ds = YAXArrays.Dataset(; (:a => YAXArray(rand(10)),)...)
YAXArray Dataset
 Shared Axes:
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables:
 a

Multiple variable names

julia
keylist = (:a, :b, :c)
 varlist = (YAXArray(rand(10)), YAXArray(rand(10,5)), YAXArray(rand(2,5)))
julia
julia> ds = YAXArrays.Dataset(; (keylist .=> varlist)...)
YAXArray Dataset
@@ -277,14 +277,14 @@
 ()
 Variables:
 a
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 b
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
 c
-Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points,
-Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
- + (Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points, +Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
+ \ No newline at end of file diff --git a/dev/UserGuide/group.html b/dev/UserGuide/group.html index 54cb540c..7b269a8e 100644 --- a/dev/UserGuide/group.html +++ b/dev/UserGuide/group.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Group YAXArrays and Datasets

The following examples will use the groupby function to calculate temporal and spatial averages.

julia
using YAXArrays, DimensionalData
+    
Skip to content

Group YAXArrays and Datasets

The following examples will use the groupby function to calculate temporal and spatial averages.

julia
using YAXArrays, DimensionalData
 using NetCDF
 using Downloads
 using Dates
@@ -206,8 +206,8 @@
     colgap!(fig.layout, 5)
     rowgap!(fig.layout, 5)
     fig
-end

which shows a good agreement with the results first published by Joe Hamman.

- +end

which shows a good agreement with the results first published by Joe Hamman.

+ \ No newline at end of file diff --git a/dev/UserGuide/read.html b/dev/UserGuide/read.html index 82be61b0..5715837f 100644 --- a/dev/UserGuide/read.html +++ b/dev/UserGuide/read.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Read YAXArrays and Datasets

This section describes how to read files, URLs, and directories into YAXArrays and datasets.

Read Zarr

Open a Zarr store as a Dataset:

julia
using YAXArrays
+    
Skip to content

Read YAXArrays and Datasets

This section describes how to read files, URLs, and directories into YAXArrays and datasets.

Read Zarr

Open a Zarr store as a Dataset:

julia
using YAXArrays
 using Zarr
 path="gs://cmip6/CMIP6/ScenarioMIP/DKRZ/MPI-ESM1-2-HR/ssp585/r1i1p1f1/3hr/tas/gn/v20190710/"
 store = zopen(path, consolidated=true)
@@ -27,9 +27,9 @@
 Variables: 
 height
 tas
-  ↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  (↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
   → lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
-  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points
+  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
 
 Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)

We can set path to a URL, a local directory, or in this case to a cloud object storage path.

A zarr store may contain multiple arrays. Individual arrays can be accessed using subsetting:

julia
ds.tas
╭────────────────────────────────────╮
 │ 384×192×251288 YAXArray{Float32,3} │
@@ -58,9 +58,9 @@
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
@@ -91,7 +91,7 @@
 path = download("https://github.com/yeesian/ArchGDALDatasets/raw/307f8f0e584a39a050c042849004e6a2bd674f99/gdalworkshop/world.tif", "world.tif")
 # ds = open_dataset(path) # this is broken
 nothing
- + \ No newline at end of file diff --git a/dev/UserGuide/select.html b/dev/UserGuide/select.html index 1a16e58f..1b1ae3f3 100644 --- a/dev/UserGuide/select.html +++ b/dev/UserGuide/select.html @@ -8,25 +8,25 @@ - + - - - + + + -
Skip to content

Select YAXArrays and Datasets

The dimensions or axes of an YAXArray are named making it easier to subset or query certain ranges of an array. Let's open an example Dataset used to select certain elements:

julia
using YAXArrays
+    
Skip to content

Select YAXArrays and Datasets

The dimensions or axes of an YAXArray are named making it easier to subset or query certain ranges of an array. Let's open an example Dataset used to select certain elements:

julia
using YAXArrays
 using NetCDF
 using Downloads: download
 
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
@@ -310,7 +310,7 @@
   89.5

These values are defined as lookups in the package DimensionalData:

julia
lookup(tos, :lon)
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
 wrapping: 1.0:2.0:359.0

which is equivalent to:

julia
tos.lon.val
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
 wrapping: 1.0:2.0:359.0
- + \ No newline at end of file diff --git a/dev/UserGuide/types.html b/dev/UserGuide/types.html index 724d4bb9..f031efe9 100644 --- a/dev/UserGuide/types.html +++ b/dev/UserGuide/types.html @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content

Types

This section describes the data structures used to work with n-dimensional arrays in YAXArrays.

YAXArray

An Array stores a sequence of ordered elements of the same type usually across multiple dimensions or axes. For example, one can measure temperature across all time points of the time dimension or brightness values of a picture across X and Y dimensions. A one dimensional array is called Vector and a two dimensional array is called a Matrix. In many Machine Learning libraries, arrays are also called tensors. Arrays are designed to store dense spatial-temporal data stored in a grid, whereas a collection of sparse points is usually stored in data frames or relational databases.

A DimArray as defined by DimensionalData.jl adds names to the dimensions and their axes ticks for a given Array. These names can be used to access the data, e.g., by date instead of just by integer position.

A YAXArray is a subtype of a AbstractDimArray and adds functions to load and process the named arrays. For example, it can also handle very large arrays stored on disk that are too big to fit in memory. In addition, it provides functions for parallel computation.

Dataset

A Dataset is an ordered dictionary of YAXArrays that usually share dimensions. For example, it can bundle arrays storing temperature and precipitation that are measured at the same time points and the same locations. One also can store a picture in a Dataset with three arrays containing brightness values for red green and blue, respectively. Internally, those arrays are still separated allowing to chose different element types for each array. Analog to the (NetCDF Data Model)[https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html], a Dataset usually represents variables belonging to the same group.

(Data) Cube

A (Data) Cube is just a YAXArray in which arrays from a dataset are combined together by introducing a new dimension containing labels of which array the corresponding element came from. Unlike a Dataset, all arrays must have the same element type to be converted into a cube. This data structure is useful when we want to use all variables at once. For example, the arrays temperature and precipitation which are measured at the same locations and dates can be combined into a single cube. A more formal definition of Data Cubes are given in Mahecha et al. 2020

Dimension

A Dimension or axis as defined by DimensionalData.jl adds tick labels, e.g., to each row or column of an array. It's name is used to access particular subsets of that array.

- +
Skip to content

Types

This section describes the data structures used to work with n-dimensional arrays in YAXArrays.

YAXArray

An Array stores a sequence of ordered elements of the same type usually across multiple dimensions or axes. For example, one can measure temperature across all time points of the time dimension or brightness values of a picture across X and Y dimensions. A one dimensional array is called Vector and a two dimensional array is called a Matrix. In many Machine Learning libraries, arrays are also called tensors. Arrays are designed to store dense spatial-temporal data stored in a grid, whereas a collection of sparse points is usually stored in data frames or relational databases.

A DimArray as defined by DimensionalData.jl adds names to the dimensions and their axes ticks for a given Array. These names can be used to access the data, e.g., by date instead of just by integer position.

A YAXArray is a subtype of a AbstractDimArray and adds functions to load and process the named arrays. For example, it can also handle very large arrays stored on disk that are too big to fit in memory. In addition, it provides functions for parallel computation.

Dataset

A Dataset is an ordered dictionary of YAXArrays that usually share dimensions. For example, it can bundle arrays storing temperature and precipitation that are measured at the same time points and the same locations. One also can store a picture in a Dataset with three arrays containing brightness values for red green and blue, respectively. Internally, those arrays are still separated allowing to chose different element types for each array. Analog to the (NetCDF Data Model)[https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html], a Dataset usually represents variables belonging to the same group.

(Data) Cube

A (Data) Cube is just a YAXArray in which arrays from a dataset are combined together by introducing a new dimension containing labels of which array the corresponding element came from. Unlike a Dataset, all arrays must have the same element type to be converted into a cube. This data structure is useful when we want to use all variables at once. For example, the arrays temperature and precipitation which are measured at the same locations and dates can be combined into a single cube. A more formal definition of Data Cubes are given in Mahecha et al. 2020

Dimension

A Dimension or axis as defined by DimensionalData.jl adds tick labels, e.g., to each row or column of an array. It's name is used to access particular subsets of that array.

+ \ No newline at end of file diff --git a/dev/UserGuide/write.html b/dev/UserGuide/write.html index d6fa4db6..bb65e6ef 100644 --- a/dev/UserGuide/write.html +++ b/dev/UserGuide/write.html @@ -8,55 +8,55 @@ - + - - - + + + -
Skip to content

Write YAXArrays and Datasets

Create an example Dataset:

julia
using YAXArrays
+    
Skip to content

Write YAXArrays and Datasets

Create an example Dataset:

julia
using YAXArrays
 using NetCDF
 using Downloads: download
 
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
 Properties: Dict{String, Any}("cmor_version" => 0.96f0, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "Conventions" => "CF-1.0", "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Write Zarr

Save a single YAXArray to a directory:

julia
using Zarr
 savecube(ds.tos, "tos.zarr", driver=:zarr)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.zarr", driver=:zarr)

Write NetCDF

Save a single YAXArray to a directory:

julia
using NetCDF
-savecube(ds.tos, "tos.nc", driver=:netcdf)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.nc", driver=:netcdf)

Overwrite a Dataset

If a path already exists, an error will be thrown. Set overwrite=true to delete the existing dataset

julia
savedataset(ds, path="ds.zarr", driver=:zarr, overwrite=true)

DANGER

Again, setting overwrite will delete all your previous saved data.

Look at the doc string for more information

# YAXArrays.Datasets.savedatasetFunction.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


Append to a Dataset

New variables can be added to an existing dataset using the append=true keyword.

julia
ds2 = Dataset(z = YAXArray(rand(10,20,5)))
+savecube(ds.tos, "tos.nc", driver=:netcdf)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.nc", driver=:netcdf)

Overwrite a Dataset

If a path already exists, an error will be thrown. Set overwrite=true to delete the existing dataset

julia
savedataset(ds, path="ds.zarr", driver=:zarr, overwrite=true)

DANGER

Again, setting overwrite will delete all your previous saved data.

Look at the doc string for more information

# YAXArrays.Datasets.savedatasetFunction.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


Append to a Dataset

New variables can be added to an existing dataset using the append=true keyword.

julia
ds2 = Dataset(z = YAXArray(rand(10,20,5)))
 savedataset(ds2, path="ds.zarr", backend=:zarr, append=true)
julia
julia> open_dataset("ds.zarr", driver=:zarr)
YAXArray Dataset
 Shared Axes:
 ()
 Variables:
 tos
-lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  (lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 z
-Dim_1 Sampled{Int64} 1:1:10 ForwardOrdered Regular Points,
+  (Dim_1 Sampled{Int64} 1:1:10 ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} 1:1:20 ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} 1:1:5 ForwardOrdered Regular Points
+Dim_3 Sampled{Int64} 1:1:5 ForwardOrdered Regular Points)
 
 Properties: Dict{String, Any}("cmor_version" => 0.96, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "Conventions" => "CF-1.0", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Save Skeleton

Sometimes one merely wants to create a datacube "Skeleton" on disk and gradually fill it with data. Here we make use of FillArrays to create a YAXArray and write only the axis data and array metadata to disk, while no actual array data is copied:

julia
using YAXArrays, Zarr, FillArrays

create the Zeros array

julia
julia> a = YAXArray(Zeros(Union{Missing, Int32}, 10, 20))
╭─────────────────────────────────────────╮
 10×20 YAXArray{Union{Missing, Int32},2}
-├─────────────────────────────────────────┴────────────────────── dims ┐
+├─────────────────────────────────────────┴────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
-├──────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├─────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 800.0 bytes
-└──────────────────────────────────────────────────────────────────────┘

and save them as

julia
r = savecube(a, "skeleton.zarr", driver=:zarr, skeleton=true)

and check that all the values are missing

julia
all(ismissing,r[:,:])
true

If using FillArrays is not possible, using the zeros function works as well, though it does allocate the array in memory.

INFO

The skeleton argument is also available for savedataset.

- +└──────────────────────────────────────────────────────────────────────────────┘

and save them as

julia
r = savecube(a, "skeleton.zarr", driver=:zarr, skeleton=true)

and check that all the values are missing

julia
all(ismissing,r[:,:])
true

If using FillArrays is not possible, using the zeros function works as well, though it does allocate the array in memory.

INFO

The skeleton argument is also available for savedataset.

+ \ No newline at end of file diff --git a/dev/api.html b/dev/api.html index e45a5ce4..2fc337c8 100644 --- a/dev/api.html +++ b/dev/api.html @@ -8,29 +8,29 @@ - + - - - + + + -
Skip to content

API Reference

This section describes all available functions of this package.

Public API

# YAXArrays.getAxisMethod.
julia
getAxis(desc, c)

Given an Axis description and a cube, returns the corresponding axis of the cube. The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.CubesModule.

The functions provided by YAXArrays are supposed to work on different types of cubes. This module defines the interface for all Data types that

source


# YAXArrays.Cubes.YAXArrayType.
julia
YAXArray{T,N}

An array labelled with named axes that have values associated with them. It can wrap normal arrays or, more typically DiskArrays.

Fields

  • axes: Tuple of Dimensions containing the Axes of the Cube

  • data: length(axes)-dimensional array which holds the data, this can be a lazy DiskArray

  • properties: Metadata properties describing the content of the data

  • chunks: Representation of the chunking of the data

  • cleaner: Cleaner objects to track which objects to tidy up when the YAXArray goes out of scope

source


# YAXArrays.Cubes.caxesFunction.

Returns the axes of a Cube

source


# YAXArrays.Cubes.caxesMethod.
julia
caxes

Embeds Cube inside a new Cube

source


# YAXArrays.Cubes.concatenatecubesMethod.
julia
function concatenateCubes(cubelist, cataxis::CategoricalAxis)

Concatenates a vector of datacubes that have identical axes to a new single cube along the new axis cataxis

source


# YAXArrays.Cubes.readcubedataMethod.
julia
readcubedata(cube)

Given any array implementing the YAXArray interface it returns an in-memory YAXArray from it.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::YAXArray,chunks)

Resets the chunks of a YAXArray and returns a new YAXArray. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savecube on the resulting array. The chunks argument can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Cubes.subsetcubeFunction.

This function calculates a subset of a cube's data

source


# YAXArrays.DAT.InDimsType.
julia
InDims(axisdesc...;...)

Creates a description of an Input Data Cube for cube operations. Takes a single or multiple axis descriptions as first arguments. Alternatively a MovingWindow(@ref) struct can be passed to include neighbour slices of one or more axes in the computation. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

Keyword arguments

  • artype how shall the array be represented in the inner function. Defaults to Array, alternatives are DataFrame or AsAxisArray

  • filter define some filter to skip the computation, e.g. when all values are missing. Defaults to AllMissing(), possible values are AnyMissing(), AnyOcean(), StdZero(), NValid(n) (for at least n non-missing elements). It is also possible to provide a custom one-argument function that takes the array and returns true if the compuation shall be skipped and false otherwise.

  • window_oob_value if one of the input dimensions is a MowingWindow, this value will be used to fill out-of-bounds areas

source


# YAXArrays.DAT.MovingWindowType.
julia
MovingWindow(desc, pre, after)

Constructs a MovingWindow object to be passed to an InDims constructor to define that the axis in desc shall participate in the inner function (i.e. shall be looped over), but inside the inner function pre values before and after values after the center value will be passed as well.

For example passing MovingWindow("Time", 2, 0) will loop over the time axis and always pass the current time step plus the 2 previous steps. So in the inner function the array will have an additional dimension of size 3.

source


# YAXArrays.DAT.OutDimsMethod.
julia
OutDims(axisdesc;...)

Creates a description of an Output Data Cube for cube operations. Takes a single or a Vector/Tuple of axes as first argument. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

  • axisdesc: List of input axis names

  • backend : specifies the dataset backend to write data to, must be either :auto or a key in YAXArrayBase.backendlist

  • update : specifies wether the function operates inplace or if an output is returned

  • artype : specifies the Array type inside the inner function that is mapped over

  • chunksize: A Dict specifying the chunksizes for the output dimensions of the cube, or :input to copy chunksizes from input cube axes or :max to not chunk the inner dimensions

  • outtype: force the output type to a specific type, defaults to Any which means that the element type of the first input cube is used

source


# YAXArrays.DAT.CubeTableMethod.
julia
CubeTable()

Function to turn a DataCube object into an iterable table. Takes a list of as arguments, specified as a name=cube expression. For example CubeTable(data=cube1,country=cube2) would generate a Table with the entries data and country, where data contains the values of cube1 and country the values of cube2. The cubes are matched and broadcasted along their axes like in mapCube.

source


# YAXArrays.DAT.cubefittableMethod.
julia
cubefittable(tab,o,fitsym;post=getpostfunction(o),kwargs...)

Executes fittable on the CubeTable tab with the (Weighted-)OnlineStat o, looping through the values specified by fitsym. Finally, writes the results from the TableAggregator to an output data cube.

source


# YAXArrays.DAT.fittableMethod.
julia
fittable(tab,o,fitsym;by=(),weight=nothing)

Loops through an iterable table tab and thereby fitting an OnlineStat o with the values specified through fitsym. Optionally one can specify a field (or tuple) to group by. Any groupby specifier can either be a symbol denoting the entry to group by or an anynymous function calculating the group from a table row.

For example the following would caluclate a weighted mean over a cube weighted by grid cell area and grouped by country and month:

julia
fittable(iter,WeightedMean,:tair,weight=(i->abs(cosd(i.lat))),by=(i->month(i.time),:country))

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)
+    
Skip to content

API Reference

This section describes all available functions of this package.

Public API

# YAXArrays.getAxisMethod.
julia
getAxis(desc, c)

Given an Axis description and a cube, returns the corresponding axis of the cube. The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.CubesModule.

The functions provided by YAXArrays are supposed to work on different types of cubes. This module defines the interface for all Data types that

source


# YAXArrays.Cubes.YAXArrayType.
julia
YAXArray{T,N}

An array labelled with named axes that have values associated with them. It can wrap normal arrays or, more typically DiskArrays.

Fields

  • axes: Tuple of Dimensions containing the Axes of the Cube

  • data: length(axes)-dimensional array which holds the data, this can be a lazy DiskArray

  • properties: Metadata properties describing the content of the data

  • chunks: Representation of the chunking of the data

  • cleaner: Cleaner objects to track which objects to tidy up when the YAXArray goes out of scope

source


# YAXArrays.Cubes.caxesFunction.

Returns the axes of a Cube

source


# YAXArrays.Cubes.caxesMethod.
julia
caxes

Embeds Cube inside a new Cube

source


# YAXArrays.Cubes.concatenatecubesMethod.
julia
function concatenateCubes(cubelist, cataxis::CategoricalAxis)

Concatenates a vector of datacubes that have identical axes to a new single cube along the new axis cataxis

source


# YAXArrays.Cubes.readcubedataMethod.
julia
readcubedata(cube)

Given any array implementing the YAXArray interface it returns an in-memory YAXArray from it.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::YAXArray,chunks)

Resets the chunks of a YAXArray and returns a new YAXArray. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savecube on the resulting array. The chunks argument can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Cubes.subsetcubeFunction.

This function calculates a subset of a cube's data

source


# YAXArrays.DAT.InDimsType.
julia
InDims(axisdesc...;...)

Creates a description of an Input Data Cube for cube operations. Takes a single or multiple axis descriptions as first arguments. Alternatively a MovingWindow(@ref) struct can be passed to include neighbour slices of one or more axes in the computation. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

Keyword arguments

  • artype how shall the array be represented in the inner function. Defaults to Array, alternatives are DataFrame or AsAxisArray

  • filter define some filter to skip the computation, e.g. when all values are missing. Defaults to AllMissing(), possible values are AnyMissing(), AnyOcean(), StdZero(), NValid(n) (for at least n non-missing elements). It is also possible to provide a custom one-argument function that takes the array and returns true if the compuation shall be skipped and false otherwise.

  • window_oob_value if one of the input dimensions is a MowingWindow, this value will be used to fill out-of-bounds areas

source


# YAXArrays.DAT.MovingWindowType.
julia
MovingWindow(desc, pre, after)

Constructs a MovingWindow object to be passed to an InDims constructor to define that the axis in desc shall participate in the inner function (i.e. shall be looped over), but inside the inner function pre values before and after values after the center value will be passed as well.

For example passing MovingWindow("Time", 2, 0) will loop over the time axis and always pass the current time step plus the 2 previous steps. So in the inner function the array will have an additional dimension of size 3.

source


# YAXArrays.DAT.OutDimsMethod.
julia
OutDims(axisdesc;...)

Creates a description of an Output Data Cube for cube operations. Takes a single or a Vector/Tuple of axes as first argument. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

  • axisdesc: List of input axis names

  • backend : specifies the dataset backend to write data to, must be either :auto or a key in YAXArrayBase.backendlist

  • update : specifies wether the function operates inplace or if an output is returned

  • artype : specifies the Array type inside the inner function that is mapped over

  • chunksize: A Dict specifying the chunksizes for the output dimensions of the cube, or :input to copy chunksizes from input cube axes or :max to not chunk the inner dimensions

  • outtype: force the output type to a specific type, defaults to Any which means that the element type of the first input cube is used

source


# YAXArrays.DAT.CubeTableMethod.
julia
CubeTable()

Function to turn a DataCube object into an iterable table. Takes a list of as arguments, specified as a name=cube expression. For example CubeTable(data=cube1,country=cube2) would generate a Table with the entries data and country, where data contains the values of cube1 and country the values of cube2. The cubes are matched and broadcasted along their axes like in mapCube.

source


# YAXArrays.DAT.cubefittableMethod.
julia
cubefittable(tab,o,fitsym;post=getpostfunction(o),kwargs...)

Executes fittable on the CubeTable tab with the (Weighted-)OnlineStat o, looping through the values specified by fitsym. Finally, writes the results from the TableAggregator to an output data cube.

source


# YAXArrays.DAT.fittableMethod.
julia
fittable(tab,o,fitsym;by=(),weight=nothing)

Loops through an iterable table tab and thereby fitting an OnlineStat o with the values specified through fitsym. Optionally one can specify a field (or tuple) to group by. Any groupby specifier can either be a symbol denoting the entry to group by or an anynymous function calculating the group from a table row.

For example the following would caluclate a weighted mean over a cube weighted by grid cell area and grouped by country and month:

julia
fittable(iter,WeightedMean,:tair,weight=(i->abs(cosd(i.lat))),by=(i->month(i.time),:country))

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)
 
 Map a given function `fun` over slices of all cubes of the dataset `ds`. 
 Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.
 For Datasets, only one output cube can be specified.
 In contrast to the mapCube function for cubes, additional arguments for the inner function should be set as keyword arguments.
 
-For the specific keyword arguments see the docstring of the mapCube function for cubes.

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)

Map a given function fun over slices of the data cube cube. The additional arguments addargs will be forwarded to the inner function fun. Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.

Keyword arguments

  • max_cache=YAXDefaults.max_cache Float64 maximum size of blocks that are read into memory in bits e.g. max_cache=5.0e8. Or String. e.g. max_cache="10MB" ormax_cache=1GB``` defaults to approx 10Mb.

  • indims::InDims List of input cube descriptors of type InDims for each input data cube.

  • outdims::OutDims List of output cube descriptors of type OutDims for each output cube.

  • inplace does the function write to an output array inplace or return a single value> defaults to true

  • ispar boolean to determine if parallelisation should be applied, defaults to true if workers are available.

  • showprog boolean indicating if a ProgressMeter shall be shown

  • include_loopvars boolean to indicate if the varoables looped over should be added as function arguments

  • nthreads number of threads for the computation, defaults to Threads.nthreads for every worker.

  • loopchunksize determines the chunk sizes of variables which are looped over, a dict

  • kwargs additional keyword arguments are passed to the inner function

The first argument is always the function to be applied, the second is the input cube or a tuple of input cubes if needed.

source


# YAXArrays.Datasets.DatasetType.
julia
Dataset object which stores an `OrderedDict` of YAXArrays with Symbol keys.
+For the specific keyword arguments see the docstring of the mapCube function for cubes.

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)

Map a given function fun over slices of the data cube cube. The additional arguments addargs will be forwarded to the inner function fun. Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.

Keyword arguments

  • max_cache=YAXDefaults.max_cache Float64 maximum size of blocks that are read into memory in bits e.g. max_cache=5.0e8. Or String. e.g. max_cache="10MB" ormax_cache=1GB``` defaults to approx 10Mb.

  • indims::InDims List of input cube descriptors of type InDims for each input data cube.

  • outdims::OutDims List of output cube descriptors of type OutDims for each output cube.

  • inplace does the function write to an output array inplace or return a single value> defaults to true

  • ispar boolean to determine if parallelisation should be applied, defaults to true if workers are available.

  • showprog boolean indicating if a ProgressMeter shall be shown

  • include_loopvars boolean to indicate if the varoables looped over should be added as function arguments

  • nthreads number of threads for the computation, defaults to Threads.nthreads for every worker.

  • loopchunksize determines the chunk sizes of variables which are looped over, a dict

  • kwargs additional keyword arguments are passed to the inner function

The first argument is always the function to be applied, the second is the input cube or a tuple of input cubes if needed.

source


# YAXArrays.Datasets.DatasetType.
julia
Dataset object which stores an `OrderedDict` of YAXArrays with Symbol keys.
 a dictionary of CubeAxes and a Dictionary of general properties.
-A dictionary can hold cubes with differing axes. But it will share the common axes between the subcubes.

source


# YAXArrays.Datasets.DatasetMethod.

Dataset(; properties = Dict{String,Any}, cubes...)

Construct a YAXArray Dataset with global attributes properties a and a list of named YAXArrays cubes...

source


# YAXArrays.Datasets.CubeMethod.
julia
Cube(ds::Dataset; joinname="Variable")

Construct a single YAXArray from the dataset ds by concatenating the cubes in the datset on the joinname dimension.

source


# YAXArrays.Datasets.open_datasetMethod.

open_dataset(g; driver=:all)

Open the dataset at g with the given driver. The default driver will search for available drivers and tries to detect the useable driver from the filename extension.

source


# YAXArrays.Datasets.savecubeMethod.
julia
savecube(cube,name::String)

Save a YAXArray to the path.

Extended Help

The keyword arguments are:

  • name:

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • max_cache: The number of bits that are used as cache for the data handling.

  • backend: The backend, that is used to save the data. Falls back to searching the backend according to the extension of the path.

  • driver: The same setting as backend.

  • overwrite::Bool=false overwrite cube if it already exists

source


# YAXArrays.Datasets.savedatasetMethod.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


# YAXArrays.Datasets.to_datasetMethod.

to_dataset(c;datasetaxis = "Variable", layername = "layer")

Convert a Data Cube into a Dataset. It is possible to treat one of the Cube's axes as a "DatasetAxis" i.e. the cube will be split into different parts that become variables in the Dataset. If no such axis is specified or found, there will only be a single variable in the dataset with the name layername

source


Internal API

# YAXArrays.YAXDefaultsConstant.

Default configuration for YAXArrays, has the following fields:

  • workdir[]::String = "./" The default location for temporary cubes.

  • recal[]::Bool = false set to true if you want @loadOrGenerate to always recalculate the results.

  • chunksize[]::Any = :input Set the default output chunksize.

  • max_cache[]::Float64 = 1e8 The maximum cache used by mapCube.

  • cubedir[]::"" the default location for Cube() without an argument.

  • subsetextensions::Array{Any} = [] List of registered functions, that convert subsetting input into dimension boundaries.

source


# YAXArrays.findAxisMethod.
julia
findAxis(desc, c)

Internal function

Extended Help

Given an Axis description and a cube return the index of the Axis.

The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.getOutAxisMethod.
julia
getOutAxis

source


# YAXArrays.get_descriptorMethod.
julia
get_descriptor(a)

Get the descriptor of an Axis. This is used to dispatch on the descriptor.

source


# YAXArrays.match_axisMethod.
julia
match_axis

Internal function

Extended Help

Match the Axis based on the AxisDescriptor.
+A dictionary can hold cubes with differing axes. But it will share the common axes between the subcubes.

source


# YAXArrays.Datasets.DatasetMethod.

Dataset(; properties = Dict{String,Any}, cubes...)

Construct a YAXArray Dataset with global attributes properties a and a list of named YAXArrays cubes...

source


# YAXArrays.Datasets.CubeMethod.
julia
Cube(ds::Dataset; joinname="Variable")

Construct a single YAXArray from the dataset ds by concatenating the cubes in the datset on the joinname dimension.

source


# YAXArrays.Datasets.open_datasetMethod.

open_dataset(g; driver=:all)

Open the dataset at g with the given driver. The default driver will search for available drivers and tries to detect the useable driver from the filename extension.

source


# YAXArrays.Datasets.savecubeMethod.
julia
savecube(cube,name::String)

Save a YAXArray to the path.

Extended Help

The keyword arguments are:

  • name:

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • max_cache: The number of bits that are used as cache for the data handling.

  • backend: The backend, that is used to save the data. Falls back to searching the backend according to the extension of the path.

  • driver: The same setting as backend.

  • overwrite::Bool=false overwrite cube if it already exists

source


# YAXArrays.Datasets.savedatasetMethod.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


# YAXArrays.Datasets.to_datasetMethod.

to_dataset(c;datasetaxis = "Variable", layername = "layer")

Convert a Data Cube into a Dataset. It is possible to treat one of the Cube's axes as a "DatasetAxis" i.e. the cube will be split into different parts that become variables in the Dataset. If no such axis is specified or found, there will only be a single variable in the dataset with the name layername

source


Internal API

# YAXArrays.YAXDefaultsConstant.

Default configuration for YAXArrays, has the following fields:

  • workdir[]::String = "./" The default location for temporary cubes.

  • recal[]::Bool = false set to true if you want @loadOrGenerate to always recalculate the results.

  • chunksize[]::Any = :input Set the default output chunksize.

  • max_cache[]::Float64 = 1e8 The maximum cache used by mapCube.

  • cubedir[]::"" the default location for Cube() without an argument.

  • subsetextensions::Array{Any} = [] List of registered functions, that convert subsetting input into dimension boundaries.

source


# YAXArrays.findAxisMethod.
julia
findAxis(desc, c)

Internal function

Extended Help

Given an Axis description and a cube return the index of the Axis.

The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.getOutAxisMethod.
julia
getOutAxis

source


# YAXArrays.get_descriptorMethod.
julia
get_descriptor(a)

Get the descriptor of an Axis. This is used to dispatch on the descriptor.

source


# YAXArrays.match_axisMethod.
julia
match_axis

Internal function

Extended Help

Match the Axis based on the AxisDescriptor.
 This is used to find different axes and to make certain axis description the same.
-For example to disregard differences of captialisation.

source


# YAXArrays.Cubes.CleanMeType.
julia
mutable struct CleanMe

Struct which describes data paths and their persistency. Non-persistend paths/files are removed at finalize step

source


# YAXArrays.Cubes.cleanMethod.
julia
clean(c::CleanMe)

finalizer function for CleanMe struct. The main process removes all directories/files which are not persistent.

source


# YAXArrays.Cubes.copydataMethod.
julia
copydata(outar, inar, copybuf)

Internal function which copies the data from the input inar into the output outar at the copybuf positions.

source


# YAXArrays.Cubes.optifuncMethod.
julia
optifunc(s, maxbuf, incs, outcs, insize, outsize, writefac)

Internal

This function is going to be minimized to detect the best possible chunk setting for the rechunking of the data.

source


# YAXArrays.DAT.DATConfigType.

Configuration object of a DAT process. This holds all necessary information to perform the calculations. It contains the following fields:

  • incubes::Tuple{Vararg{YAXArrays.DAT.InputCube, NIN}} where NIN: The input data cubes

  • outcubes::Tuple{Vararg{YAXArrays.DAT.OutputCube, NOUT}} where NOUT: The output data cubes

  • allInAxes::Vector: List of all axes of the input cubes

  • LoopAxes::Vector: List of axes that are looped through

  • ispar::Bool: Flag whether the computation is parallelized

  • loopcachesize::Vector{Int64}:

  • allow_irregular_chunks::Bool:

  • max_cache::Any: Maximal size of the in memory cache

  • fu::Any: Inner function which is computed

  • inplace::Bool: Flag whether the computation happens in place

  • include_loopvars::Bool:

  • ntr::Any:

  • do_gc::Bool: Flag if GC should be called explicitly. Probably necessary for many runs in Julia 1.9

  • addargs::Any: Additional arguments for the inner function

  • kwargs::Any: Additional keyword arguments for the inner function

source


# YAXArrays.DAT.InputCubeType.

Internal representation of an input cube for DAT operations

  • cube: The input data

  • desc: The input description given by the user/registration

  • axesSmall: List of axes that were actually selected through the description

  • icolon

  • colonperm

  • loopinds: Indices of loop axes that this cube does not contain, i.e. broadcasts

  • cachesize: Number of elements to keep in cache along each axis

  • window

  • iwindow

  • windowloopinds

  • iall

source


# YAXArrays.DAT.OutputCubeType.

Internal representation of an output cube for DAT operations

Fields

  • cube: The actual outcube cube, once it is generated

  • cube_unpermuted: The unpermuted output cube

  • desc: The description of the output axes as given by users or registration

  • axesSmall: The list of output axes determined through the description

  • allAxes: List of all the axes of the cube

  • loopinds: Index of the loop axes that are broadcasted for this output cube

  • innerchunks

  • outtype: Elementtype of the outputcube

source


# YAXArrays.DAT.YAXColumnType.
julia
YAXColumn

A struct representing a single column of a YAXArray partitioned Table # Fields

  • inarBC

  • inds

source


# YAXArrays.DAT.cmpcachmissesMethod.

Function that compares two cache miss specifiers by their importance

source


# YAXArrays.DAT.getFrontPermMethod.

Calculate an axis permutation that brings the wanted dimensions to the front

source


# YAXArrays.DAT.getLoopCacheSizeMethod.

Calculate optimal Cache size to DAT operation

source


# YAXArrays.DAT.getOuttypeMethod.
julia
getOuttype(outtype, cdata)

Internal function

Get the element type for the output cube

source


# YAXArrays.DAT.getloopchunksMethod.
julia
getloopchunks(dc::DATConfig)

Internal function

Returns the chunks that can be looped over toghether for all dimensions.
-This computation of the size of the chunks is handled by [`DiskArrays.approx_chunksize`](@ref)

source


# YAXArrays.DAT.permuteloopaxesMethod.
julia
permuteloopaxes(dc)

Internal function

Permute the dimensions of the cube, so that the axes that are looped through are in the first positions. This is necessary for a faster looping through the data.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::Dataset,chunks)

Resets the chunks of all or a subset YAXArrays in the dataset and returns a new Dataset. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savedataset on the resulting array. The chunks argument can take one of the following forms:

  • a NamedTuple or AbstractDict mapping from variable name to a description of the desired variable chunks

  • a NamedTuple or AbstractDict mapping from dimension name to a description of the desired variable chunks

  • a description of the desired variable chunks applied to all members of the Dataset

where a description of the desired variable chunks can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Datasets.collectfromhandleMethod.

Extracts a YAXArray from a dataset handle that was just created from a arrayinfo

source


# YAXArrays.Datasets.createdatasetMethod.

function createdataset(DS::Type,axlist; kwargs...)

Creates a new dataset with axes specified in axlist. Each axis must be a subtype of CubeAxis. A new empty Zarr array will be created and can serve as a sink for mapCube operations.

Keyword arguments

  • path="" location where the new cube is stored

  • T=Union{Float32,Missing} data type of the target cube

  • chunksize = ntuple(i->length(axlist[i]),length(axlist)) chunk sizes of the array

  • chunkoffset = ntuple(i->0,length(axlist)) offsets of the chunks

  • persist::Bool=true shall the disk data be garbage-collected when the cube goes out of scope?

  • overwrite::Bool=false overwrite cube if it already exists

  • properties=Dict{String,Any}() additional cube properties

  • globalproperties=Dict{String,Any} global attributes to be added to the dataset

  • fillvalue= T>:Missing ? defaultfillval(Base.nonmissingtype(T)) : nothing fill value

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • layername="layer" Fallback name of the variable stored in the dataset if no datasetaxis is found

source


# YAXArrays.Datasets.getarrayinfoMethod.

Extract necessary information to create a YAXArrayBase dataset from a name and YAXArray pair

source


# YAXArrays.Datasets.testrangeMethod.

Test if data in x can be approximated by a step range

source


- +For example to disregard differences of captialisation.

source


# YAXArrays.Cubes.CleanMeType.
julia
mutable struct CleanMe

Struct which describes data paths and their persistency. Non-persistend paths/files are removed at finalize step

source


# YAXArrays.Cubes.cleanMethod.
julia
clean(c::CleanMe)

finalizer function for CleanMe struct. The main process removes all directories/files which are not persistent.

source


# YAXArrays.Cubes.copydataMethod.
julia
copydata(outar, inar, copybuf)

Internal function which copies the data from the input inar into the output outar at the copybuf positions.

source


# YAXArrays.Cubes.optifuncMethod.
julia
optifunc(s, maxbuf, incs, outcs, insize, outsize, writefac)

Internal

This function is going to be minimized to detect the best possible chunk setting for the rechunking of the data.

source


# YAXArrays.DAT.DATConfigType.

Configuration object of a DAT process. This holds all necessary information to perform the calculations. It contains the following fields:

  • incubes::Tuple{Vararg{YAXArrays.DAT.InputCube, NIN}} where NIN: The input data cubes

  • outcubes::Tuple{Vararg{YAXArrays.DAT.OutputCube, NOUT}} where NOUT: The output data cubes

  • allInAxes::Vector: List of all axes of the input cubes

  • LoopAxes::Vector: List of axes that are looped through

  • ispar::Bool: Flag whether the computation is parallelized

  • loopcachesize::Vector{Int64}:

  • allow_irregular_chunks::Bool:

  • max_cache::Any: Maximal size of the in memory cache

  • fu::Any: Inner function which is computed

  • inplace::Bool: Flag whether the computation happens in place

  • include_loopvars::Bool:

  • ntr::Any:

  • do_gc::Bool: Flag if GC should be called explicitly. Probably necessary for many runs in Julia 1.9

  • addargs::Any: Additional arguments for the inner function

  • kwargs::Any: Additional keyword arguments for the inner function

source


# YAXArrays.DAT.InputCubeType.

Internal representation of an input cube for DAT operations

  • cube: The input data

  • desc: The input description given by the user/registration

  • axesSmall: List of axes that were actually selected through the description

  • icolon

  • colonperm

  • loopinds: Indices of loop axes that this cube does not contain, i.e. broadcasts

  • cachesize: Number of elements to keep in cache along each axis

  • window

  • iwindow

  • windowloopinds

  • iall

source


# YAXArrays.DAT.OutputCubeType.

Internal representation of an output cube for DAT operations

Fields

  • cube: The actual outcube cube, once it is generated

  • cube_unpermuted: The unpermuted output cube

  • desc: The description of the output axes as given by users or registration

  • axesSmall: The list of output axes determined through the description

  • allAxes: List of all the axes of the cube

  • loopinds: Index of the loop axes that are broadcasted for this output cube

  • innerchunks

  • outtype: Elementtype of the outputcube

source


# YAXArrays.DAT.YAXColumnType.
julia
YAXColumn

A struct representing a single column of a YAXArray partitioned Table # Fields

  • inarBC

  • inds

source


# YAXArrays.DAT.cmpcachmissesMethod.

Function that compares two cache miss specifiers by their importance

source


# YAXArrays.DAT.getFrontPermMethod.

Calculate an axis permutation that brings the wanted dimensions to the front

source


# YAXArrays.DAT.getLoopCacheSizeMethod.

Calculate optimal Cache size to DAT operation

source


# YAXArrays.DAT.getOuttypeMethod.
julia
getOuttype(outtype, cdata)

Internal function

Get the element type for the output cube

source


# YAXArrays.DAT.getloopchunksMethod.
julia
getloopchunks(dc::DATConfig)

Internal function

Returns the chunks that can be looped over toghether for all dimensions.
+This computation of the size of the chunks is handled by [`DiskArrays.approx_chunksize`](@ref)

source


# YAXArrays.DAT.permuteloopaxesMethod.
julia
permuteloopaxes(dc)

Internal function

Permute the dimensions of the cube, so that the axes that are looped through are in the first positions. This is necessary for a faster looping through the data.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::Dataset,chunks)

Resets the chunks of all or a subset YAXArrays in the dataset and returns a new Dataset. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savedataset on the resulting array. The chunks argument can take one of the following forms:

  • a NamedTuple or AbstractDict mapping from variable name to a description of the desired variable chunks

  • a NamedTuple or AbstractDict mapping from dimension name to a description of the desired variable chunks

  • a description of the desired variable chunks applied to all members of the Dataset

where a description of the desired variable chunks can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Datasets.collectfromhandleMethod.

Extracts a YAXArray from a dataset handle that was just created from a arrayinfo

source


# YAXArrays.Datasets.createdatasetMethod.

function createdataset(DS::Type,axlist; kwargs...)

Creates a new dataset with axes specified in axlist. Each axis must be a subtype of CubeAxis. A new empty Zarr array will be created and can serve as a sink for mapCube operations.

Keyword arguments

  • path="" location where the new cube is stored

  • T=Union{Float32,Missing} data type of the target cube

  • chunksize = ntuple(i->length(axlist[i]),length(axlist)) chunk sizes of the array

  • chunkoffset = ntuple(i->0,length(axlist)) offsets of the chunks

  • persist::Bool=true shall the disk data be garbage-collected when the cube goes out of scope?

  • overwrite::Bool=false overwrite cube if it already exists

  • properties=Dict{String,Any}() additional cube properties

  • globalproperties=Dict{String,Any} global attributes to be added to the dataset

  • fillvalue= T>:Missing ? defaultfillval(Base.nonmissingtype(T)) : nothing fill value

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • layername="layer" Fallback name of the variable stored in the dataset if no datasetaxis is found

source


# YAXArrays.Datasets.getarrayinfoMethod.

Extract necessary information to create a YAXArrayBase dataset from a name and YAXArray pair

source


# YAXArrays.Datasets.testrangeMethod.

Test if data in x can be approximated by a step range

source


+ \ No newline at end of file diff --git a/dev/assets/UserGuide_cache.md.aYjxevW4.js b/dev/assets/UserGuide_cache.md.BxJ3IRnF.js similarity index 64% rename from dev/assets/UserGuide_cache.md.aYjxevW4.js rename to dev/assets/UserGuide_cache.md.BxJ3IRnF.js index 19d5d4b1..a9b6363d 100644 --- a/dev/assets/UserGuide_cache.md.aYjxevW4.js +++ b/dev/assets/UserGuide_cache.md.BxJ3IRnF.js @@ -1,5 +1,5 @@ -import{_ as s,c as a,o as i,a4 as e}from"./chunks/framework._h4tgM90.js";const E=JSON.parse('{"title":"Caching YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/cache.md","filePath":"UserGuide/cache.md","lastUpdated":null}'),t={name:"UserGuide/cache.md"},n=e(`

Caching YAXArrays

For some applications like interactive plotting of large datasets it can not be avoided that the same data must be accessed several times. In these cases it can be useful to store recently accessed data in a cache. In YAXArrays this can be easily achieved using the cache function. For example, if we open a large dataset from a remote source and want to keep data in a cache of size 500MB one can use:

julia
using YAXArrays, Zarr
+import{_ as a,c as i,a2 as e,o as t}from"./chunks/framework.Bwkmg46C.js";const o=JSON.parse('{"title":"Caching YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/cache.md","filePath":"UserGuide/cache.md","lastUpdated":null}'),n={name:"UserGuide/cache.md"};function h(l,s,p,r,c,d){return t(),i("div",null,s[0]||(s[0]=[e(`

Caching YAXArrays

For some applications like interactive plotting of large datasets it can not be avoided that the same data must be accessed several times. In these cases it can be useful to store recently accessed data in a cache. In YAXArrays this can be easily achieved using the cache function. For example, if we open a large dataset from a remote source and want to keep data in a cache of size 500MB one can use:

julia
using YAXArrays, Zarr
 ds = open_dataset("path/to/source")
 cachesize = 500 #MB
 cache(ds,maxsize = cachesize)

The above will wrap every array in the dataset into its own cache, where the 500MB are distributed equally across datasets. Alternatively individual caches can be applied to single YAXArrays

julia
yax = ds.avariable
-cache(yax,maxsize = 1000)
`,5),h=[n];function l(p,r,c,d,k,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; +cache(yax,maxsize = 1000)
`,5)]))}const g=a(n,[["render",h]]);export{o as __pageData,g as default}; diff --git a/dev/assets/UserGuide_cache.md.BxJ3IRnF.lean.js b/dev/assets/UserGuide_cache.md.BxJ3IRnF.lean.js new file mode 100644 index 00000000..a9b6363d --- /dev/null +++ b/dev/assets/UserGuide_cache.md.BxJ3IRnF.lean.js @@ -0,0 +1,5 @@ +import{_ as a,c as i,a2 as e,o as t}from"./chunks/framework.Bwkmg46C.js";const o=JSON.parse('{"title":"Caching YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/cache.md","filePath":"UserGuide/cache.md","lastUpdated":null}'),n={name:"UserGuide/cache.md"};function h(l,s,p,r,c,d){return t(),i("div",null,s[0]||(s[0]=[e(`

Caching YAXArrays

For some applications like interactive plotting of large datasets it can not be avoided that the same data must be accessed several times. In these cases it can be useful to store recently accessed data in a cache. In YAXArrays this can be easily achieved using the cache function. For example, if we open a large dataset from a remote source and want to keep data in a cache of size 500MB one can use:

julia
using YAXArrays, Zarr
+ds = open_dataset("path/to/source")
+cachesize = 500 #MB
+cache(ds,maxsize = cachesize)

The above will wrap every array in the dataset into its own cache, where the 500MB are distributed equally across datasets. Alternatively individual caches can be applied to single YAXArrays

julia
yax = ds.avariable
+cache(yax,maxsize = 1000)
`,5)]))}const g=a(n,[["render",h]]);export{o as __pageData,g as default}; diff --git a/dev/assets/UserGuide_cache.md.aYjxevW4.lean.js b/dev/assets/UserGuide_cache.md.aYjxevW4.lean.js deleted file mode 100644 index 0a3a8c8a..00000000 --- a/dev/assets/UserGuide_cache.md.aYjxevW4.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a4 as e}from"./chunks/framework._h4tgM90.js";const E=JSON.parse('{"title":"Caching YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/cache.md","filePath":"UserGuide/cache.md","lastUpdated":null}'),t={name:"UserGuide/cache.md"},n=e("",5),h=[n];function l(p,r,c,d,k,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; diff --git a/dev/assets/UserGuide_chunk.md.DZgkcenL.js b/dev/assets/UserGuide_chunk.md.DQmK3Tmu.js similarity index 86% rename from dev/assets/UserGuide_chunk.md.DZgkcenL.js rename to dev/assets/UserGuide_chunk.md.DQmK3Tmu.js index caa3aefd..92d48368 100644 --- a/dev/assets/UserGuide_chunk.md.DZgkcenL.js +++ b/dev/assets/UserGuide_chunk.md.DQmK3Tmu.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Chunk YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/chunk.md","filePath":"UserGuide/chunk.md","lastUpdated":null}'),p={name:"UserGuide/chunk.md"},h=n(`

Chunk YAXArrays

Thinking about chunking is important when it comes to analyzing your data, because in most situations this will not fit into memory, hence having the fastest read access to it is crucial for your workflows. For example, for geo-spatial data do you want fast access on time or space, or... think about it.

To determine the chunk size of the array representation on disk, call the setchunks function prior to saving.

Chunking YAXArrays

julia
using YAXArrays, Zarr
+import{_ as a,c as i,a2 as n,o as p}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Chunk YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/chunk.md","filePath":"UserGuide/chunk.md","lastUpdated":null}'),h={name:"UserGuide/chunk.md"};function l(t,s,e,k,r,d){return p(),i("div",null,s[0]||(s[0]=[n(`

Chunk YAXArrays

Thinking about chunking is important when it comes to analyzing your data, because in most situations this will not fit into memory, hence having the fastest read access to it is crucial for your workflows. For example, for geo-spatial data do you want fast access on time or space, or... think about it.

To determine the chunk size of the array representation on disk, call the setchunks function prior to saving.

Chunking YAXArrays

julia
using YAXArrays, Zarr
 a = YAXArray(rand(10,20))
 a_chunked = setchunks(a, (5,10))
 a_chunked.chunks
2×2 DiskArrays.GridChunks{2, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -27,14 +27,14 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const y
  (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

Saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables: 
 x
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 y
 z
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
-  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

Set chunking by Variable

The following will set the chunk size for each Variable separately and results in exactly the same chunking as the example above

julia
using YAXArrays, Zarr
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking by Variable

The following will set the chunk size for each Variable separately and results in exactly the same chunking as the example above

julia
using YAXArrays, Zarr
 ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10)), z = YAXArray(rand(10,20,5)))
 dschunked = setchunks(ds,(x = (5,10), y = Dict("Dim_1"=>5), z = (Dim_1 = 5, Dim_2 = 10, Dim_3 = 2)))
 Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -51,14 +51,14 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const y
  (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables: 
 x
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 y
 z
-  ↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
-  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

Set chunking for all variables

The following code snippet only works when all member variables of the dataset have the same shape and sets the output chunks for all arrays.

julia
using YAXArrays, Zarr
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking for all variables

The following code snippet only works when all member variables of the dataset have the same shape and sets the output chunks for all arrays.

julia
using YAXArrays, Zarr
 ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10,20)), z = YAXArray(rand(10,20)))
 dschunked = setchunks(ds,(5,10))
 Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
@@ -75,9 +75,9 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const y
  (6:10, 1:10, 3:3)  (6:10, 11:20, 3:3)

saving...

julia
f = tempname()
 savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
 Shared Axes: 
-↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-→ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+→ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
 Variables: 
 x
 y
-z

Suggestions on how to improve or add to these examples is welcome.

`,36),l=[h];function t(e,k,r,d,E,g){return i(),a("div",null,l)}const o=s(p,[["render",t]]);export{y as __pageData,o as default}; +z

Suggestions on how to improve or add to these examples is welcome.

`,36)]))}const y=a(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/dev/assets/UserGuide_chunk.md.DQmK3Tmu.lean.js b/dev/assets/UserGuide_chunk.md.DQmK3Tmu.lean.js new file mode 100644 index 00000000..92d48368 --- /dev/null +++ b/dev/assets/UserGuide_chunk.md.DQmK3Tmu.lean.js @@ -0,0 +1,83 @@ +import{_ as a,c as i,a2 as n,o as p}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Chunk YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/chunk.md","filePath":"UserGuide/chunk.md","lastUpdated":null}'),h={name:"UserGuide/chunk.md"};function l(t,s,e,k,r,d){return p(),i("div",null,s[0]||(s[0]=[n(`

Chunk YAXArrays

Thinking about chunking is important when it comes to analyzing your data, because in most situations this will not fit into memory, hence having the fastest read access to it is crucial for your workflows. For example, for geo-spatial data do you want fast access on time or space, or... think about it.

To determine the chunk size of the array representation on disk, call the setchunks function prior to saving.

Chunking YAXArrays

julia
using YAXArrays, Zarr
+a = YAXArray(rand(10,20))
+a_chunked = setchunks(a, (5,10))
+a_chunked.chunks
2×2 DiskArrays.GridChunks{2, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+ (1:5, 1:10)   (1:5, 11:20)
+ (6:10, 1:10)  (6:10, 11:20)

And the saved file is also splitted into Chunks.

julia
f = tempname()
+savecube(a_chunked, f, backend=:zarr)
+Cube(f).chunks
2×2 DiskArrays.GridChunks{2, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+ (1:5, 1:10)   (1:5, 11:20)
+ (6:10, 1:10)  (6:10, 11:20)

Alternatively chunk sizes can be given by dimension name, so the following results in the same chunks:

julia
a_chunked = setchunks(a, (Dim_2=10, Dim_1=5))
+a_chunked.chunks
2×2 DiskArrays.GridChunks{2, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+ (1:5, 1:10)   (1:5, 11:20)
+ (6:10, 1:10)  (6:10, 11:20)

Chunking Datasets

Setchunks can also be applied to a Dataset.

Set Chunks by Axis

Set chunk size for each axis occuring in a Dataset. This will be applied to all variables in the dataset:

julia
using YAXArrays, Zarr
+ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10)), z = YAXArray(rand(10,20,5)))
+dschunked = setchunks(ds, Dict("Dim_1"=>5, "Dim_2"=>10, "Dim_3"=>2))
+Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+[:, :, 1] =
+ (1:5, 1:10, 1:2)   (1:5, 11:20, 1:2)
+ (6:10, 1:10, 1:2)  (6:10, 11:20, 1:2)
+
+[:, :, 2] =
+ (1:5, 1:10, 3:4)   (1:5, 11:20, 3:4)
+ (6:10, 1:10, 3:4)  (6:10, 11:20, 3:4)
+
+[:, :, 3] =
+ (1:5, 1:10, 5:5)   (1:5, 11:20, 5:5)
+ (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

Saving...

julia
f = tempname()
+savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
+Shared Axes: 
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
+Variables: 
+x
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
+y
+z
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking by Variable

The following will set the chunk size for each Variable separately and results in exactly the same chunking as the example above

julia
using YAXArrays, Zarr
+ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10)), z = YAXArray(rand(10,20,5)))
+dschunked = setchunks(ds,(x = (5,10), y = Dict("Dim_1"=>5), z = (Dim_1 = 5, Dim_2 = 10, Dim_3 = 2)))
+Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+[:, :, 1] =
+ (1:5, 1:10, 1:2)   (1:5, 11:20, 1:2)
+ (6:10, 1:10, 1:2)  (6:10, 11:20, 1:2)
+
+[:, :, 2] =
+ (1:5, 1:10, 3:4)   (1:5, 11:20, 3:4)
+ (6:10, 1:10, 3:4)  (6:10, 11:20, 3:4)
+
+[:, :, 3] =
+ (1:5, 1:10, 5:5)   (1:5, 11:20, 5:5)
+ (6:10, 1:10, 5:5)  (6:10, 11:20, 5:5)

saving...

julia
f = tempname()
+savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
+Shared Axes: 
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
+Variables: 
+x
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
+y
+z
+  (↓ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  → Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

Set chunking for all variables

The following code snippet only works when all member variables of the dataset have the same shape and sets the output chunks for all arrays.

julia
using YAXArrays, Zarr
+ds = Dataset(x = YAXArray(rand(10,20)), y = YAXArray(rand(10,20)), z = YAXArray(rand(10,20)))
+dschunked = setchunks(ds,(5,10))
+Cube(dschunked).chunks
2×2×3 DiskArrays.GridChunks{3, Tuple{DiskArrays.RegularChunks, DiskArrays.RegularChunks, DiskArrays.RegularChunks}}:
+[:, :, 1] =
+ (1:5, 1:10, 1:1)   (1:5, 11:20, 1:1)
+ (6:10, 1:10, 1:1)  (6:10, 11:20, 1:1)
+
+[:, :, 2] =
+ (1:5, 1:10, 2:2)   (1:5, 11:20, 2:2)
+ (6:10, 1:10, 2:2)  (6:10, 11:20, 2:2)
+
+[:, :, 3] =
+ (1:5, 1:10, 3:3)   (1:5, 11:20, 3:3)
+ (6:10, 1:10, 3:3)  (6:10, 11:20, 3:3)

saving...

julia
f = tempname()
+savedataset(dschunked, path=f, driver=:zarr)
YAXArray Dataset
+Shared Axes: 
+(↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+→ Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points)
+Variables: 
+x
+y
+z

Suggestions on how to improve or add to these examples is welcome.

`,36)]))}const y=a(h,[["render",l]]);export{g as __pageData,y as default}; diff --git a/dev/assets/UserGuide_chunk.md.DZgkcenL.lean.js b/dev/assets/UserGuide_chunk.md.DZgkcenL.lean.js deleted file mode 100644 index 047cca7f..00000000 --- a/dev/assets/UserGuide_chunk.md.DZgkcenL.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Chunk YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/chunk.md","filePath":"UserGuide/chunk.md","lastUpdated":null}'),p={name:"UserGuide/chunk.md"},h=n("",36),l=[h];function t(e,k,r,d,E,g){return i(),a("div",null,l)}const o=s(p,[["render",t]]);export{y as __pageData,o as default}; diff --git a/dev/assets/UserGuide_combine.md.CgXxcV_r.js b/dev/assets/UserGuide_combine.md.Bs3BBbp0.js similarity index 85% rename from dev/assets/UserGuide_combine.md.CgXxcV_r.js rename to dev/assets/UserGuide_combine.md.Bs3BBbp0.js index ae2509e5..2523e94a 100644 --- a/dev/assets/UserGuide_combine.md.CgXxcV_r.js +++ b/dev/assets/UserGuide_combine.md.Bs3BBbp0.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const g=JSON.parse('{"title":"Combine YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/combine.md","filePath":"UserGuide/combine.md","lastUpdated":null}'),e={name:"UserGuide/combine.md"},t=n(`

Combine YAXArrays

Data is often scattered across multiple files and corresponding arrays, e.g. one file per time step. This section describes methods on how to combine them into a single YAXArray.

cat along an existing dimension

Here we use cat to combine two arrays consisting of data from the first and the second half of a year into one single array containing the whole year. We glue the arrays along the first dimension using dims = 1: The resulting array whole_year still has one dimension, i.e. time, but with 12 instead of 6 elements.

julia
using YAXArrays
+import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Combine YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/combine.md","filePath":"UserGuide/combine.md","lastUpdated":null}'),t={name:"UserGuide/combine.md"};function p(l,s,h,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Combine YAXArrays

Data is often scattered across multiple files and corresponding arrays, e.g. one file per time step. This section describes methods on how to combine them into a single YAXArray.

cat along an existing dimension

Here we use cat to combine two arrays consisting of data from the first and the second half of a year into one single array containing the whole year. We glue the arrays along the first dimension using dims = 1: The resulting array whole_year still has one dimension, i.e. time, but with 12 instead of 6 elements.

julia
using YAXArrays
 
 first_half = YAXArray((Dim{:time}(1:6),), rand(6))
 second_half = YAXArray((Dim{:time}(7:12),), rand(6))
@@ -25,4 +25,4 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const g
   Dict{String, Any}()
 ├───────────────────────────────────────────────────── file size ┤ 
   file size: 96.0 bytes
-└────────────────────────────────────────────────────────────────┘
`,10),p=[t];function l(h,k,r,d,o,c){return a(),i("div",null,p)}const y=s(e,[["render",l]]);export{g as __pageData,y as default}; +└────────────────────────────────────────────────────────────────┘
`,10)]))}const E=i(t,[["render",p]]);export{c as __pageData,E as default}; diff --git a/dev/assets/UserGuide_combine.md.Bs3BBbp0.lean.js b/dev/assets/UserGuide_combine.md.Bs3BBbp0.lean.js new file mode 100644 index 00000000..2523e94a --- /dev/null +++ b/dev/assets/UserGuide_combine.md.Bs3BBbp0.lean.js @@ -0,0 +1,28 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Combine YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/combine.md","filePath":"UserGuide/combine.md","lastUpdated":null}'),t={name:"UserGuide/combine.md"};function p(l,s,h,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Combine YAXArrays

Data is often scattered across multiple files and corresponding arrays, e.g. one file per time step. This section describes methods on how to combine them into a single YAXArray.

cat along an existing dimension

Here we use cat to combine two arrays consisting of data from the first and the second half of a year into one single array containing the whole year. We glue the arrays along the first dimension using dims = 1: The resulting array whole_year still has one dimension, i.e. time, but with 12 instead of 6 elements.

julia
using YAXArrays
+
+first_half = YAXArray((Dim{:time}(1:6),), rand(6))
+second_half = YAXArray((Dim{:time}(7:12),), rand(6))
+whole_year = cat(first_half, second_half, dims = 1)
╭────────────────────────────────╮
+│ 12-element YAXArray{Float64,1} │
+├────────────────────────────────┴──────────────────────────────── dims ┐
+  ↓ time Sampled{Int64} [1, 2, …, 11, 12] ForwardOrdered Regular Points
+├───────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├──────────────────────────────────────────────────────────── file size ┤ 
+  file size: 96.0 bytes
+└───────────────────────────────────────────────────────────────────────┘

concatenatecubes to a new dimension

Here we use concatenatecubes to combine two arrays of different variables that have the same dimensions. The resulting array combined has an additional dimension variable indicating from which array the element values originates. Note that using a Dataset instead is a more flexible approach in handling different variables.

julia
using YAXArrays
+
+temperature = YAXArray((Dim{:time}(1:6),), rand(6))
+precipitation = YAXArray((Dim{:time}(1:6),), rand(6))
+cubes = [temperature,precipitation]
+var_axis = Dim{:variable}(["temp", "prep"])
+combined = concatenatecubes(cubes, var_axis)
╭─────────────────────────╮
+│ 6×2 YAXArray{Float64,2} │
+├─────────────────────────┴──────────────────────────────── dims ┐
+  ↓ time     Sampled{Int64} 1:6 ForwardOrdered Regular Points,
+  → variable Categorical{String} ["temp", "prep"] ReverseOrdered
+├────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├───────────────────────────────────────────────────── file size ┤ 
+  file size: 96.0 bytes
+└────────────────────────────────────────────────────────────────┘
`,10)]))}const E=i(t,[["render",p]]);export{c as __pageData,E as default}; diff --git a/dev/assets/UserGuide_combine.md.CgXxcV_r.lean.js b/dev/assets/UserGuide_combine.md.CgXxcV_r.lean.js deleted file mode 100644 index f1bb2409..00000000 --- a/dev/assets/UserGuide_combine.md.CgXxcV_r.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const g=JSON.parse('{"title":"Combine YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/combine.md","filePath":"UserGuide/combine.md","lastUpdated":null}'),e={name:"UserGuide/combine.md"},t=n("",10),p=[t];function l(h,k,r,d,o,c){return a(),i("div",null,p)}const y=s(e,[["render",l]]);export{g as __pageData,y as default}; diff --git a/dev/assets/UserGuide_compute.md.CLq4k1Y9.js b/dev/assets/UserGuide_compute.md.BPtHMXa2.js similarity index 56% rename from dev/assets/UserGuide_compute.md.CLq4k1Y9.js rename to dev/assets/UserGuide_compute.md.BPtHMXa2.js index f5bacbf6..e71a0a9b 100644 --- a/dev/assets/UserGuide_compute.md.CLq4k1Y9.js +++ b/dev/assets/UserGuide_compute.md.BPtHMXa2.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Compute YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/compute.md","filePath":"UserGuide/compute.md","lastUpdated":null}'),t={name:"UserGuide/compute.md"},p=n(`

Compute YAXArrays

This section describes how to create new YAXArrays by performing operations on them.

  • Use arithmetics to add or multiply numbers to each element of an array

  • Use map to apply a more complex functions to every element of an array

  • Use mapslices to reduce a dimension, e.g. to get the mean over all time steps

  • Use mapCube to apply complex functions on an array that may change any dimensions

Let's start by creating an example dataset:

julia
using YAXArrays
+import{_ as i,c as a,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Compute YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/compute.md","filePath":"UserGuide/compute.md","lastUpdated":null}'),p={name:"UserGuide/compute.md"};function e(l,s,h,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Compute YAXArrays

This section describes how to create new YAXArrays by performing operations on them.

  • Use arithmetics to add or multiply numbers to each element of an array

  • Use map to apply a more complex functions to every element of an array

  • Use mapslices to reduce a dimension, e.g. to get the mean over all time steps

  • Use mapCube to apply complex functions on an array that may change any dimensions

Let's start by creating an example dataset:

julia
using YAXArrays
 using Dates
 
 axlist = (
@@ -19,7 +19,7 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c
   :origin => "user guide"
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 35.16 KB
-└──────────────────────────────────────────────────────────────────────────────┘

Modify elements of a YAXArray

julia
a[1,2,3]
0.39569774546730574
julia
a[1,2,3] = 42
42
julia
a[1,2,3]
42.0

WARNING

Some arrays, e.g. those saved in a cloud object storage are immutable making any modification of the data impossible.

Arithmetics

Add a value to all elements of an array and save it as a new array:

julia
a2 = a .+ 5
╭──────────────────────────────╮
+└──────────────────────────────────────────────────────────────────────────────┘

Modify elements of a YAXArray

julia
a[1,2,3]
0.2141174000417737
julia
a[1,2,3] = 42
42
julia
a[1,2,3]
42.0

WARNING

Some arrays, e.g. those saved in a cloud object storage are immutable making any modification of the data impossible.

Arithmetics

Add a value to all elements of an array and save it as a new array:

julia
a2 = a .+ 5
╭──────────────────────────────╮
 │ 30×10×15 YAXArray{Float64,3} │
 ├──────────────────────────────┴───────────────────────────────────────── dims ┐
   ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
@@ -62,7 +62,97 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c
   Dict{String, Any}()
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 240.0 bytes
-└──────────────────────────────────────────────────────────────────────────────┘

mapCube

mapCube is the most flexible way to apply a function over subsets of an array. Dimensions may be added or removed.

Here we transform a raster array with spatial dimension lat and lon into a vector array having just one spatial dimension i.e. region. First, create the raster array:

julia
using YAXArrays
+└──────────────────────────────────────────────────────────────────────────────┘

mapCube

mapCube is the most flexible way to apply a function over subsets of an array. Dimensions may be added or removed.

Operations over several YAXArrays

Here, we will define a simple function, that will take as input several YAXArrays. But first, let's load the necessary packages.

julia
using YAXArrays, Zarr
+using Dates

Define function in space and time

julia
f(lo, la, t) = (lo + la + Dates.dayofyear(t))
f (generic function with 1 method)

now, mapCube requires this function to be wrapped as follows

julia
function g(xout, lo, la, t)
+    xout .= f.(lo, la, t)
+end
g (generic function with 1 method)

INFO

Note the . after f, this is because we will slice across time, namely, the function is broadcasted along this dimension.

Here, we do create YAXArrays only with the desired dimensions as

julia
julia> lon = YAXArray(Dim{:lon}(range(1, 15)))
╭──────────────────────────────╮
+15-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lon Sampled{Int64} 1:15 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 120.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> lat = YAXArray(Dim{:lat}(range(1, 10)))
╭──────────────────────────────╮
+10-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lat Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 80.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

And a time Cube's Axis

julia
tspan = Date("2022-01-01"):Day(1):Date("2022-01-30")
+time = YAXArray(Dim{:time}(tspan))
╭─────────────────────────────╮
+│ 30-element YAXArray{Date,1} │
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 240.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

note that the following can be extended to arbitrary YAXArrays with additional data and dimensions.

Let's generate a new cube using mapCube and saving the output directly into disk.

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims(), InDims(), InDims("time")),
+           outdims = OutDims("time", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+30×15×10 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

"time axis goes first"

Note that currently the time axis in the output cube goes first.

Check that it is working

julia
julia> gen_cube.data[1, :, :]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

but, we can generate a another cube with a different output order as follows

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims("lon"), InDims(), InDims()),
+           outdims = OutDims("lon", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+15×10×30 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

INFO

Note that now the broadcasted dimension is lon.

we can see this by slicing on the last dimension now

julia
gen_cube.data[:, :, 1]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

which outputs the same as the gen_cube.data[1, :, :] called above.

Creating a vector array

Here we transform a raster array with spatial dimension lat and lon into a vector array having just one spatial dimension i.e. region. First, create the raster array:

julia
using YAXArrays
 using DimensionalData
 using Dates
 
@@ -112,14 +202,14 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c
 ├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
 └──────────────────────────────────────────────────────────────────────────────┘
-  ↓ →  1.0        1.28571   1.57143     …  4.42857   4.71429     5.0
-  1.0  0.274566   0.534793  0.854262       0.110146  0.57064     0.19585
-  2.0  0.227196   0.1771    0.795952       0.395735  0.00766601  0.099476
-  3.0  0.382234   0.848547  0.249912       0.454773  0.0948468   0.0196535
-  ⋮                                     ⋱                        ⋮
-  8.0  0.0827623  0.791032  0.00929636     0.217969  0.028745    0.878439
-  9.0  0.219269   0.903682  0.861747       0.926123  0.689873    0.690915
- 10.0  0.142275   0.381645  0.284095    …  0.896381  0.501022    0.086277

Now we calculate the list of corresponding points for each region. This will be re-used for each point in time during the final mapCube. In addition, this avoids the allocation of unnecessary memory.

julia
regions = ["A", "B", "C", "D"]
+  ↓ →  1.0       1.28571    1.57143   …  4.42857   4.71429   5.0
+  1.0  0.111806  0.730896   0.390622     0.345419  0.886959  0.0322648
+  2.0  0.945136  0.2867     0.885515     0.636107  0.178756  0.535162
+  3.0  0.807073  0.0658503  0.951478     0.771082  0.110929  0.576982
+  ⋮                                   ⋱                      ⋮
+  8.0  0.571501  0.479832   0.401882     0.899889  0.917739  0.609885
+  9.0  0.225987  0.0376093  0.812919     0.80386   0.443763  0.226869
+ 10.0  0.335462  0.392626   0.980182  …  0.409798  0.437697  0.0388753

Now we calculate the list of corresponding points for each region. This will be re-used for each point in time during the final mapCube. In addition, this avoids the allocation of unnecessary memory.

julia
regions = ["A", "B", "C", "D"]
 points_of_regions = map(enumerate(regions)) do (i,region)
     region => findall(isequal(region), regions_mat)
 end |> Dict |> sort
OrderedCollections.OrderedDict{String, Vector{CartesianIndex{2}}} with 4 entries:
@@ -172,4 +262,4 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c
 
 mapCube(mymean, a, indims=InDims("time"), outdims=OutDims())

In the last example, mapCube was used to map the mymean function. mapslices is a convenient function that can replace mapCube, where you can omit defining an extra function with the output argument as an input (e.g. mymean). It is possible to simply use mapslice

julia
mapslices(mean  skipmissing, a, dims="time")

It is also possible to distribute easily the workload on a cluster, with little modification to the code. To do so, we use the ClusterManagers package.

julia
using Distributed
 using ClusterManagers
-addprocs(SlurmManager(10))
`,60),l=[p];function e(h,k,r,d,o,E){return a(),i("div",null,l)}const y=s(t,[["render",e]]);export{c as __pageData,y as default}; +addprocs(SlurmManager(10))
`,95)]))}const E=i(p,[["render",e]]);export{g as __pageData,E as default}; diff --git a/dev/assets/UserGuide_compute.md.BPtHMXa2.lean.js b/dev/assets/UserGuide_compute.md.BPtHMXa2.lean.js new file mode 100644 index 00000000..e71a0a9b --- /dev/null +++ b/dev/assets/UserGuide_compute.md.BPtHMXa2.lean.js @@ -0,0 +1,265 @@ +import{_ as i,c as a,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Compute YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/compute.md","filePath":"UserGuide/compute.md","lastUpdated":null}'),p={name:"UserGuide/compute.md"};function e(l,s,h,k,d,r){return t(),a("div",null,s[0]||(s[0]=[n(`

Compute YAXArrays

This section describes how to create new YAXArrays by performing operations on them.

  • Use arithmetics to add or multiply numbers to each element of an array

  • Use map to apply a more complex functions to every element of an array

  • Use mapslices to reduce a dimension, e.g. to get the mean over all time steps

  • Use mapCube to apply complex functions on an array that may change any dimensions

Let's start by creating an example dataset:

julia
using YAXArrays
+using Dates
+
+axlist = (
+    Dim{:time}(Date("2022-01-01"):Day(1):Date("2022-01-30")),
+    Dim{:lon}(range(1, 10, length=10)),
+    Dim{:lat}(range(1, 5, length=15)),
+)
+data = rand(30, 10, 15)
+properties = Dict(:origin => "user guide")
+a = YAXArray(axlist, data, properties)
╭──────────────────────────────╮
+│ 30×10×15 YAXArray{Float64,3} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, String} with 1 entry:
+  :origin => "user guide"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 35.16 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Modify elements of a YAXArray

julia
a[1,2,3]
0.2141174000417737
julia
a[1,2,3] = 42
42
julia
a[1,2,3]
42.0

WARNING

Some arrays, e.g. those saved in a cloud object storage are immutable making any modification of the data impossible.

Arithmetics

Add a value to all elements of an array and save it as a new array:

julia
a2 = a .+ 5
╭──────────────────────────────╮
+│ 30×10×15 YAXArray{Float64,3} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, String} with 1 entry:
+  :origin => "user guide"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 35.16 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
a2[1,2,3] == a[1,2,3] + 5
true

map

Apply a function on every element of an array individually:

julia
offset = 5
+map(a) do x
+    (x + offset) / 2 * 3
+end
╭──────────────────────────────╮
+│ 30×10×15 YAXArray{Float64,3} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, String} with 1 entry:
+  :origin => "user guide"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 35.16 KB
+└──────────────────────────────────────────────────────────────────────────────┘

This keeps all dimensions unchanged. Note, that here we can not access neighboring elements. In this case, we can use mapslices or mapCube instead. Each element of the array is processed individually.

The code runs very fast, because map applies the function lazily. Actual computation will be performed only on demand, e.g. when elements were explicitly requested or further computations were performed.

mapslices

Reduce the time dimension by calculating the average value of all points in time:

julia
import Statistics: mean
+mapslices(mean, a, dims="Time")
╭───────────────────────────────────────────╮
+│ 10×15 YAXArray{Union{Missing, Float64},2} │
+├───────────────────────────────────────────┴──────────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 1.17 KB
+└──────────────────────────────────────────────────────────────────────────────┘

There is no time dimension left, because there is only one value left after averaging all time steps. We can also calculate spatial means resulting in one value per time step:

julia
mapslices(mean, a, dims=("lat", "lon"))
╭────────────────────────────────────────────────╮
+│ 30-element YAXArray{Union{Missing, Float64},1} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 240.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

mapCube

mapCube is the most flexible way to apply a function over subsets of an array. Dimensions may be added or removed.

Operations over several YAXArrays

Here, we will define a simple function, that will take as input several YAXArrays. But first, let's load the necessary packages.

julia
using YAXArrays, Zarr
+using Dates

Define function in space and time

julia
f(lo, la, t) = (lo + la + Dates.dayofyear(t))
f (generic function with 1 method)

now, mapCube requires this function to be wrapped as follows

julia
function g(xout, lo, la, t)
+    xout .= f.(lo, la, t)
+end
g (generic function with 1 method)

INFO

Note the . after f, this is because we will slice across time, namely, the function is broadcasted along this dimension.

Here, we do create YAXArrays only with the desired dimensions as

julia
julia> lon = YAXArray(Dim{:lon}(range(1, 15)))
╭──────────────────────────────╮
+15-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lon Sampled{Int64} 1:15 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 120.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> lat = YAXArray(Dim{:lat}(range(1, 10)))
╭──────────────────────────────╮
+10-element YAXArray{Int64,1}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+lat Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 80.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

And a time Cube's Axis

julia
tspan = Date("2022-01-01"):Day(1):Date("2022-01-30")
+time = YAXArray(Dim{:time}(tspan))
╭─────────────────────────────╮
+│ 30-element YAXArray{Date,1} │
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 240.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

note that the following can be extended to arbitrary YAXArrays with additional data and dimensions.

Let's generate a new cube using mapCube and saving the output directly into disk.

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims(), InDims(), InDims("time")),
+           outdims = OutDims("time", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+30×15×10 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

"time axis goes first"

Note that currently the time axis in the output cube goes first.

Check that it is working

julia
julia> gen_cube.data[1, :, :]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

but, we can generate a another cube with a different output order as follows

julia
julia> gen_cube = mapCube(g, (lon, lat, time);
+           indims = (InDims("lon"), InDims(), InDims()),
+           outdims = OutDims("lon", overwrite=true, path="my_gen_cube.zarr", backend=:zarr,
+           outtype = Float32)
+           # max_cache=1e9
+       )
╭──────────────────────────────────────────────╮
+15×10×30 YAXArray{Union{Missing, Float32},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+lon  Sampled{Int64} 1:15 ForwardOrdered Regular Points,
+lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 1 entry:
+  "missing_value" => 1.0f32
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 17.58 KB
+└──────────────────────────────────────────────────────────────────────────────┘

INFO

Note that now the broadcasted dimension is lon.

we can see this by slicing on the last dimension now

julia
gen_cube.data[:, :, 1]
15×10 Matrix{Union{Missing, Float32}}:
+  3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0
+  4.0   5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0
+  5.0   6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0
+  6.0   7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0
+  7.0   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0
+  8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
+  9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0
+ 10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0
+ 11.0  12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0
+ 12.0  13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0
+ 13.0  14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0
+ 14.0  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0
+ 15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
+ 16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0
+ 17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0  25.0  26.0

which outputs the same as the gen_cube.data[1, :, :] called above.

Creating a vector array

Here we transform a raster array with spatial dimension lat and lon into a vector array having just one spatial dimension i.e. region. First, create the raster array:

julia
using YAXArrays
+using DimensionalData
+using Dates
+
+axlist = (
+    Dim{:time}(Date("2022-01-01"):Day(1):Date("2022-01-30")),
+    Dim{:lon}(range(1, 10, length=10)),
+    Dim{:lat}(range(1, 5, length=15)),
+)
+data = rand(30, 10, 15)
+raster_arr = YAXArray(axlist, data)
╭──────────────────────────────╮
+│ 30×10×15 YAXArray{Float64,3} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 35.16 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Then, create a Matrix with the same spatial dimensions indicating to which region each point belongs to:

julia
regions_mat = map(Iterators.product(raster_arr.lon, raster_arr.lat)) do (lon, lat)
+    1 <= lon < 10 && 1 <= lat < 5 && return "A"
+    1 <= lon < 10 && 5 <= lat < 10 && return "B"
+    10 <= lon < 15 && 1 <= lat < 5 && return "C"
+    return "D"
+end
+regions_mat = DimArray(regions_mat, (raster_arr.lon, raster_arr.lat))
╭──────────────────────────╮
+│ 10×15 DimArray{String,2} │
+├──────────────────────────┴───────────────────────────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+└──────────────────────────────────────────────────────────────────────────────┘
+  ↓ →  1.0   1.28571  1.57143  1.85714  …  4.14286  4.42857  4.71429  5.0
+  1.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  2.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  3.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  4.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  5.0   "A"   "A"      "A"      "A"     …   "A"      "A"      "A"      "B"
+  6.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  7.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  8.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+  9.0   "A"   "A"      "A"      "A"         "A"      "A"      "A"      "B"
+ 10.0   "C"   "C"      "C"      "C"     …   "C"      "C"      "C"      "D"

which has the same spatial dimensions as the raster array at any given point in time:

julia
DimArray(raster_arr[time = 1])
╭───────────────────────────╮
+│ 10×15 DimArray{Float64,2} │
+├───────────────────────────┴──────────────────────────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+└──────────────────────────────────────────────────────────────────────────────┘
+  ↓ →  1.0       1.28571    1.57143   …  4.42857   4.71429   5.0
+  1.0  0.111806  0.730896   0.390622     0.345419  0.886959  0.0322648
+  2.0  0.945136  0.2867     0.885515     0.636107  0.178756  0.535162
+  3.0  0.807073  0.0658503  0.951478     0.771082  0.110929  0.576982
+  ⋮                                   ⋱                      ⋮
+  8.0  0.571501  0.479832   0.401882     0.899889  0.917739  0.609885
+  9.0  0.225987  0.0376093  0.812919     0.80386   0.443763  0.226869
+ 10.0  0.335462  0.392626   0.980182  …  0.409798  0.437697  0.0388753

Now we calculate the list of corresponding points for each region. This will be re-used for each point in time during the final mapCube. In addition, this avoids the allocation of unnecessary memory.

julia
regions = ["A", "B", "C", "D"]
+points_of_regions = map(enumerate(regions)) do (i,region)
+    region => findall(isequal(region), regions_mat)
+end |> Dict |> sort
OrderedCollections.OrderedDict{String, Vector{CartesianIndex{2}}} with 4 entries:
+  "A" => [CartesianIndex(1, 1), CartesianIndex(2, 1), CartesianIndex(3, 1), Car…
+  "B" => [CartesianIndex(1, 15), CartesianIndex(2, 15), CartesianIndex(3, 15), …
+  "C" => [CartesianIndex(10, 1), CartesianIndex(10, 2), CartesianIndex(10, 3), …
+  "D" => [CartesianIndex(10, 15)]

Finally, we can transform the entire raster array:

julia
vector_array = mapCube(
+    raster_arr,
+    indims=InDims("lon", "lat"),
+    outdims=OutDims(Dim{:region}(regions))
+) do xout, xin
+    for (region_pos, points) in enumerate(points_of_regions.vals)
+        # aggregate values of points in the current region at the current date
+        xout[region_pos] = sum(view(xin, points))
+    end
+end
╭──────────────────────────────────────────╮
+│ 4×30 YAXArray{Union{Missing, Float64},2} │
+├──────────────────────────────────────────┴───────────────────────────── dims ┐
+  ↓ region Categorical{String} ["A", "B", "C", "D"] ForwardOrdered,
+  → time   Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 960.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

This gives us a vector array with only one spatial dimension, i.e. the region. Note that we still have 30 points in time. The transformation was applied for each date separately.

Hereby, xin is a 10x15 array representing a map at a given time and xout is a 4 element vector of missing values initially representing the 4 regions at that date. Then, we set each output element by the sum of all corresponding points

Distributed Computation

All map methods apply a function on all elements of all non-input dimensions separately. This allows to run each map function call in parallel. For example, we can execute each date of a time series in a different CPU thread during spatial aggregation.

The following code does a time mean over all grid points using multiple CPUs of a local machine:

julia
using YAXArrays
+using Dates
+using Distributed
+
+axlist = (
+    Dim{:time}(Date("2022-01-01"):Day(1):Date("2022-01-30")),
+    Dim{:lon}(range(1, 10, length=10)),
+    Dim{:lat}(range(1, 5, length=15)),
+)
+data = rand(30, 10, 15)
+properties = Dict(:origin => "user guide")
+a = YAXArray(axlist, data, properties)
+
+addprocs(2)
+
+@everywhere begin
+  using YAXArrays
+  using Zarr
+  using Statistics
+end
+
+@everywhere function mymean(output, pixel)
+  @show "doing a mean"
+     output[:] .= mean(pixel)
+end
+
+mapCube(mymean, a, indims=InDims("time"), outdims=OutDims())

In the last example, mapCube was used to map the mymean function. mapslices is a convenient function that can replace mapCube, where you can omit defining an extra function with the output argument as an input (e.g. mymean). It is possible to simply use mapslice

julia
mapslices(mean  skipmissing, a, dims="time")

It is also possible to distribute easily the workload on a cluster, with little modification to the code. To do so, we use the ClusterManagers package.

julia
using Distributed
+using ClusterManagers
+addprocs(SlurmManager(10))
`,95)]))}const E=i(p,[["render",e]]);export{g as __pageData,E as default}; diff --git a/dev/assets/UserGuide_compute.md.CLq4k1Y9.lean.js b/dev/assets/UserGuide_compute.md.CLq4k1Y9.lean.js deleted file mode 100644 index 0c298165..00000000 --- a/dev/assets/UserGuide_compute.md.CLq4k1Y9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Compute YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/compute.md","filePath":"UserGuide/compute.md","lastUpdated":null}'),t={name:"UserGuide/compute.md"},p=n("",60),l=[p];function e(h,k,r,d,o,E){return a(),i("div",null,l)}const y=s(t,[["render",e]]);export{c as __pageData,y as default}; diff --git a/dev/assets/UserGuide_convert.md.CSe_wnNP.lean.js b/dev/assets/UserGuide_convert.md.CSe_wnNP.lean.js deleted file mode 100644 index 9c91e932..00000000 --- a/dev/assets/UserGuide_convert.md.CSe_wnNP.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as n,a4 as i}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Convert YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/convert.md","filePath":"UserGuide/convert.md","lastUpdated":null}'),p={name:"UserGuide/convert.md"},e=i("",25),l=[e];function t(r,h,d,k,o,c){return n(),a("div",null,l)}const E=s(p,[["render",t]]);export{y as __pageData,E as default}; diff --git a/dev/assets/UserGuide_convert.md.CSe_wnNP.js b/dev/assets/UserGuide_convert.md.D6pPrrfh.js similarity index 73% rename from dev/assets/UserGuide_convert.md.CSe_wnNP.js rename to dev/assets/UserGuide_convert.md.D6pPrrfh.js index b019fbe8..f14bd748 100644 --- a/dev/assets/UserGuide_convert.md.CSe_wnNP.js +++ b/dev/assets/UserGuide_convert.md.D6pPrrfh.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,a4 as i}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Convert YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/convert.md","filePath":"UserGuide/convert.md","lastUpdated":null}'),p={name:"UserGuide/convert.md"},e=i(`

Convert YAXArrays

This section describes how to convert variables from types of other Julia packages into YAXArrays and vice versa.

WARNING

YAXArrays is designed to work with large datasets that are way larger than the memory. However, most types are designed to work in memory. Those conversions are only possible if the entire dataset fits into memory. In addition, metadata might be lost during conversion.

Convert Base.Array

Convert Base.Array to YAXArray:

julia
using YAXArrays
+import{_ as a,c as n,a2 as i,o as p}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Convert YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/convert.md","filePath":"UserGuide/convert.md","lastUpdated":null}'),e={name:"UserGuide/convert.md"};function l(t,s,r,h,d,k){return p(),n("div",null,s[0]||(s[0]=[i(`

Convert YAXArrays

This section describes how to convert variables from types of other Julia packages into YAXArrays and vice versa.

WARNING

YAXArrays is designed to work with large datasets that are way larger than the memory. However, most types are designed to work in memory. Those conversions are only possible if the entire dataset fits into memory. In addition, metadata might be lost during conversion.

Convert Base.Array

Convert Base.Array to YAXArray:

julia
using YAXArrays
 
 m = rand(5,10)
 a = YAXArray(m)
╭──────────────────────────╮
@@ -11,11 +11,11 @@ import{_ as s,c as a,o as n,a4 as i}from"./chunks/framework._h4tgM90.js";const y
 ├────────────────────────────────────────────────────────── file size ┤ 
   file size: 400.0 bytes
 └─────────────────────────────────────────────────────────────────────┘

Convert YAXArray to Base.Array:

julia
m2 = collect(a.data)
5×10 Matrix{Float64}:
- 0.249608  0.00552544  0.56213   0.519169   …  0.450066  0.51539    0.574653
- 0.19875   0.470067    0.103211  0.856547      0.19776   0.260932   0.695295
- 0.528707  0.666155    0.839119  0.0321818     0.919695  0.836565   0.641424
- 0.665448  0.684161    0.158104  0.858738      0.243106  0.602045   0.671807
- 0.159698  0.848549    0.48712   0.0557879     0.511201  0.0943564  0.432317

Convert Raster

A Raster as defined in Rasters.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types:

julia
using Rasters
+ 0.982681  0.30872    0.991662  0.812941  …  0.785487  0.200921  0.56509
+ 0.255901  0.191475   0.91863   0.286567     0.697089  0.578499  0.559458
+ 0.802815  0.0792955  0.49635   0.153314     0.519502  0.595256  0.982369
+ 0.838723  0.418527   0.945523  0.681937     0.654553  0.869916  0.0806691
+ 0.8037    0.726055   0.370371  0.726514     0.46623   0.371407  0.795256

Convert Raster

A Raster as defined in Rasters.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types:

julia
using Rasters
 
 lon, lat = X(25:1:30), Y(25:1:30)
 time = Ti(2000:2024)
@@ -43,13 +43,13 @@ import{_ as s,c as a,o as n,a4 as i}from"./chunks/framework._h4tgM90.js";const y
 
 └─────────────────────────────────────────────────────────────┘
 [:, :, 1]
-  ↓ →  25         26           27          28         29          30
- 25     0.940483   0.894856     0.496038    0.450453   0.630924    0.754794
- 26     0.437037   0.216039     0.301316    0.248116   0.810228    0.313254
- 27     0.896249   0.989218     0.0477079   0.89122    0.0261803   0.206706
- 28     0.708967   0.351027     0.26031     0.470138   0.840873    0.0133172
- 29     0.892941   0.00686917   0.035698    0.939528   0.510782    0.198741
- 30     0.646887   0.418673     0.907052    0.230079   0.02116     0.635883

Convert DimArray

A DimArray as defined in DimensionalData.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types.

Convert DimArray to YAXArray:

julia
using DimensionalData
+  ↓ →  25           26         27         28         29         30
+ 25     0.668356     0.238835   0.436044   0.152703   0.468086   0.158513
+ 26     0.906684     0.345557   0.739191   0.21762    0.76884    0.112142
+ 27     0.370883     0.471202   0.216082   0.40658    0.790483   0.033994
+ 28     0.469495     0.263308   0.951713   0.373742   0.307866   0.490098
+ 29     0.00465577   0.208669   0.982017   0.897845   0.337278   0.828301
+ 30     0.778578     0.948093   0.894081   0.818217   0.106047   0.92191

Convert DimArray

A DimArray as defined in DimensionalData.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types.

Convert DimArray to YAXArray:

julia
using DimensionalData
 using YAXArrayBase
 
 dim_arr = rand(X(1:5), Y(10.0:15.0), metadata = Dict{String, Any}())
@@ -70,9 +70,9 @@ import{_ as s,c as a,o as n,a4 as i}from"./chunks/framework._h4tgM90.js";const y
 ├──────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
 └──────────────────────────────────────────────────────────────────┘
- ↓ →  10.0       11.0         12.0       13.0       14.0       15.0
- 1     0.308299   0.979944     0.813157   0.953172   0.18757    0.325188
- 2     0.372918   0.669206     0.946524   0.937779   0.810681   0.552949
- 3     0.261139   0.298312     0.662771   0.246061   0.773001   0.274429
- 4     0.402285   0.597315     0.43242    0.229361   0.868584   0.56698
- 5     0.987524   0.00346434   0.355755   0.961872   0.702858   0.491176

INFO

At the moment there is no support to save a DimArray directly into disk as a NetCDF or a Zarr file.

`,25),l=[e];function t(r,h,d,k,o,c){return n(),a("div",null,l)}const E=s(p,[["render",t]]);export{y as __pageData,E as default}; + ↓ → 10.0 11.0 12.0 13.0 14.0 15.0 + 1 0.1495 0.0195499 0.921394 0.193496 0.445246 0.506692 + 2 0.888258 0.318317 0.6742 0.607539 0.234382 0.722903 + 3 0.464692 0.405837 0.610329 0.432667 0.387209 0.353383 + 4 0.657613 0.583472 0.379975 0.896276 0.425406 0.238368 + 5 0.404644 0.951713 0.0752454 0.0759995 0.412653 0.930755

INFO

At the moment there is no support to save a DimArray directly into disk as a NetCDF or a Zarr file.

`,25)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/dev/assets/UserGuide_convert.md.D6pPrrfh.lean.js b/dev/assets/UserGuide_convert.md.D6pPrrfh.lean.js new file mode 100644 index 00000000..f14bd748 --- /dev/null +++ b/dev/assets/UserGuide_convert.md.D6pPrrfh.lean.js @@ -0,0 +1,78 @@ +import{_ as a,c as n,a2 as i,o as p}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Convert YAXArrays","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/convert.md","filePath":"UserGuide/convert.md","lastUpdated":null}'),e={name:"UserGuide/convert.md"};function l(t,s,r,h,d,k){return p(),n("div",null,s[0]||(s[0]=[i(`

Convert YAXArrays

This section describes how to convert variables from types of other Julia packages into YAXArrays and vice versa.

WARNING

YAXArrays is designed to work with large datasets that are way larger than the memory. However, most types are designed to work in memory. Those conversions are only possible if the entire dataset fits into memory. In addition, metadata might be lost during conversion.

Convert Base.Array

Convert Base.Array to YAXArray:

julia
using YAXArrays
+
+m = rand(5,10)
+a = YAXArray(m)
╭──────────────────────────╮
+│ 5×10 YAXArray{Float64,2} │
+├──────────────────────────┴──────────────────────────────────── dims ┐
+  ↓ Dim_1 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points,
+  → Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+├─────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├────────────────────────────────────────────────────────── file size ┤ 
+  file size: 400.0 bytes
+└─────────────────────────────────────────────────────────────────────┘

Convert YAXArray to Base.Array:

julia
m2 = collect(a.data)
5×10 Matrix{Float64}:
+ 0.982681  0.30872    0.991662  0.812941  …  0.785487  0.200921  0.56509
+ 0.255901  0.191475   0.91863   0.286567     0.697089  0.578499  0.559458
+ 0.802815  0.0792955  0.49635   0.153314     0.519502  0.595256  0.982369
+ 0.838723  0.418527   0.945523  0.681937     0.654553  0.869916  0.0806691
+ 0.8037    0.726055   0.370371  0.726514     0.46623   0.371407  0.795256

Convert Raster

A Raster as defined in Rasters.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types:

julia
using Rasters
+
+lon, lat = X(25:1:30), Y(25:1:30)
+time = Ti(2000:2024)
+ras = Raster(rand(lon, lat, time))
+a = YAXArray(dims(ras), ras.data)
╭────────────────────────────╮
+│ 6×6×25 YAXArray{Float64,3} │
+├────────────────────────────┴────────────────────────── dims ┐
+  ↓ X  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
+  → Y  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
+  ↗ Ti Sampled{Int64} 2000:2024 ForwardOrdered Regular Points
+├─────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├────────────────────────────────────────────────── file size ┤ 
+  file size: 7.03 KB
+└─────────────────────────────────────────────────────────────┘
julia
ras2 = Raster(a)
╭──────────────────────────╮
+│ 6×6×25 Raster{Float64,3} │
+├──────────────────────────┴──────────────────────────── dims ┐
+  ↓ X  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
+  → Y  Sampled{Int64} 25:1:30 ForwardOrdered Regular Points,
+  ↗ Ti Sampled{Int64} 2000:2024 ForwardOrdered Regular Points
+├─────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├───────────────────────────────────────────────────── raster ┤
+  extent: Extent(X = (25, 30), Y = (25, 30), Ti = (2000, 2024))
+
+└─────────────────────────────────────────────────────────────┘
+[:, :, 1]
+  ↓ →  25           26         27         28         29         30
+ 25     0.668356     0.238835   0.436044   0.152703   0.468086   0.158513
+ 26     0.906684     0.345557   0.739191   0.21762    0.76884    0.112142
+ 27     0.370883     0.471202   0.216082   0.40658    0.790483   0.033994
+ 28     0.469495     0.263308   0.951713   0.373742   0.307866   0.490098
+ 29     0.00465577   0.208669   0.982017   0.897845   0.337278   0.828301
+ 30     0.778578     0.948093   0.894081   0.818217   0.106047   0.92191

Convert DimArray

A DimArray as defined in DimensionalData.jl has a same supertype of a YAXArray, i.e. AbstractDimArray, allowing easy conversion between those types.

Convert DimArray to YAXArray:

julia
using DimensionalData
+using YAXArrayBase
+
+dim_arr = rand(X(1:5), Y(10.0:15.0), metadata = Dict{String, Any}())
+a = yaxconvert(YAXArray, dim_arr)
╭─────────────────────────╮
+│ 5×6 YAXArray{Float64,2} │
+├─────────────────────────┴────────────────────────────────── dims ┐
+  ↓ X Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+  → Y Sampled{Float64} 10.0:1.0:15.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────── file size ┤ 
+  file size: 240.0 bytes
+└──────────────────────────────────────────────────────────────────┘

Convert YAXArray to DimArray:

julia
dim_arr2 = yaxconvert(DimArray, a)
╭─────────────────────────╮
+│ 5×6 DimArray{Float64,2} │
+├─────────────────────────┴────────────────────────────────── dims ┐
+  ↓ X Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+  → Y Sampled{Float64} 10.0:1.0:15.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+└──────────────────────────────────────────────────────────────────┘
+ ↓ →  10.0       11.0        12.0        13.0        14.0       15.0
+ 1     0.1495     0.0195499   0.921394    0.193496    0.445246   0.506692
+ 2     0.888258   0.318317    0.6742      0.607539    0.234382   0.722903
+ 3     0.464692   0.405837    0.610329    0.432667    0.387209   0.353383
+ 4     0.657613   0.583472    0.379975    0.896276    0.425406   0.238368
+ 5     0.404644   0.951713    0.0752454   0.0759995   0.412653   0.930755

INFO

At the moment there is no support to save a DimArray directly into disk as a NetCDF or a Zarr file.

`,25)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/dev/assets/UserGuide_create.md.JoOy7H4V.js b/dev/assets/UserGuide_create.md.D-fbNPyl.js similarity index 83% rename from dev/assets/UserGuide_create.md.JoOy7H4V.js rename to dev/assets/UserGuide_create.md.D-fbNPyl.js index 401e2cb6..b2311925 100644 --- a/dev/assets/UserGuide_create.md.JoOy7H4V.js +++ b/dev/assets/UserGuide_create.md.D-fbNPyl.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Create YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/create.md","filePath":"UserGuide/create.md","lastUpdated":null}'),t={name:"UserGuide/create.md"},e=n(`

Create YAXArrays and Datasets

This section describes how to create arrays and datasets by filling values directly.

Create a YAXArray

We can create a new YAXArray by filling the values directly:

julia
using YAXArrays
+import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Create YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/create.md","filePath":"UserGuide/create.md","lastUpdated":null}'),e={name:"UserGuide/create.md"};function p(l,s,h,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

Create YAXArrays and Datasets

This section describes how to create arrays and datasets by filling values directly.

Create a YAXArray

We can create a new YAXArray by filling the values directly:

julia
using YAXArrays
 a1 = YAXArray(rand(10, 20, 5))
╭─────────────────────────────╮
 │ 10×20×5 YAXArray{Float64,3} │
 ├─────────────────────────────┴────────────────────────────────── dims ┐
@@ -30,19 +30,19 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 35.16 KB
 └──────────────────────────────────────────────────────────────────────────────┘
julia
a2.properties
Dict{Symbol, String} with 1 entry:
-  :origin => "user guide"
julia
a2.axes
↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  :origin => "user guide"
julia
a2.axes
(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
 → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
-↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points

Create a Dataset

julia
data3 = rand(30, 10, 15)
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)

Create a Dataset

julia
data3 = rand(30, 10, 15)
 a3 = YAXArray(axlist, data3, properties)
 
 arrays = Dict(:a2 => a2, :a3 => a3)
 ds = Dataset(; properties, arrays...)
YAXArray Dataset
 Shared Axes: 
-↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
 → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
-↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)
 Variables: 
 a2
 a3
 
-Properties: Dict(:origin => "user guide")
`,16),p=[e];function l(h,k,r,d,E,g){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; +Properties: Dict(:origin => "user guide")
`,16)]))}const o=a(e,[["render",p]]);export{g as __pageData,o as default}; diff --git a/dev/assets/UserGuide_create.md.D-fbNPyl.lean.js b/dev/assets/UserGuide_create.md.D-fbNPyl.lean.js new file mode 100644 index 00000000..b2311925 --- /dev/null +++ b/dev/assets/UserGuide_create.md.D-fbNPyl.lean.js @@ -0,0 +1,48 @@ +import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Create YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/create.md","filePath":"UserGuide/create.md","lastUpdated":null}'),e={name:"UserGuide/create.md"};function p(l,s,h,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

Create YAXArrays and Datasets

This section describes how to create arrays and datasets by filling values directly.

Create a YAXArray

We can create a new YAXArray by filling the values directly:

julia
using YAXArrays
+a1 = YAXArray(rand(10, 20, 5))
╭─────────────────────────────╮
+│ 10×20×5 YAXArray{Float64,3} │
+├─────────────────────────────┴────────────────────────────────── dims ┐
+  ↓ Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+  → Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points,
+  ↗ Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────── file size ┤ 
+  file size: 7.81 KB
+└──────────────────────────────────────────────────────────────────────┘

The dimensions have only generic names, e.g. Dim_1 and only integer values. We can also specify the dimensions with custom names enabling easier access:

julia
using Dates
+
+axlist = (
+    Dim{:time}(Date("2022-01-01"):Day(1):Date("2022-01-30")),
+    Dim{:lon}(range(1, 10, length=10)),
+    Dim{:lat}(range(1, 5, length=15)),
+)
+data2 = rand(30, 10, 15)
+properties = Dict(:origin => "user guide")
+a2 = YAXArray(axlist, data2, properties)
╭──────────────────────────────╮
+│ 30×10×15 YAXArray{Float64,3} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+  → lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, String} with 1 entry:
+  :origin => "user guide"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 35.16 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
a2.properties
Dict{Symbol, String} with 1 entry:
+  :origin => "user guide"
julia
a2.axes
(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+→ lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)

Create a Dataset

julia
data3 = rand(30, 10, 15)
+a3 = YAXArray(axlist, data3, properties)
+
+arrays = Dict(:a2 => a2, :a3 => a3)
+ds = Dataset(; properties, arrays...)
YAXArray Dataset
+Shared Axes: 
+(↓ time Sampled{Date} Date("2022-01-01"):Dates.Day(1):Date("2022-01-30") ForwardOrdered Regular Points,
+→ lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+↗ lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points)
+Variables: 
+a2
+a3
+
+Properties: Dict(:origin => "user guide")
`,16)]))}const o=a(e,[["render",p]]);export{g as __pageData,o as default}; diff --git a/dev/assets/UserGuide_create.md.JoOy7H4V.lean.js b/dev/assets/UserGuide_create.md.JoOy7H4V.lean.js deleted file mode 100644 index ccee91e7..00000000 --- a/dev/assets/UserGuide_create.md.JoOy7H4V.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Create YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/create.md","filePath":"UserGuide/create.md","lastUpdated":null}'),t={name:"UserGuide/create.md"},e=n("",16),p=[e];function l(h,k,r,d,E,g){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; diff --git a/dev/assets/UserGuide_faq.md.CfSW0c59.js b/dev/assets/UserGuide_faq.md.BZaTxhVy.js similarity index 84% rename from dev/assets/UserGuide_faq.md.CfSW0c59.js rename to dev/assets/UserGuide_faq.md.BZaTxhVy.js index 003c46fa..5febf850 100644 --- a/dev/assets/UserGuide_faq.md.CfSW0c59.js +++ b/dev/assets/UserGuide_faq.md.BZaTxhVy.js @@ -1,19 +1,19 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t="/YAXArrays.jl/dev/assets/tlkgzfl.DA3FSb99.jpeg",c=JSON.parse('{"title":"Frequently Asked Questions (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/faq.md","filePath":"UserGuide/faq.md","lastUpdated":null}'),e={name:"UserGuide/faq.md"},h=n(`

Frequently Asked Questions (FAQ)

The purpose of this section is to do a collection of small convinient pieces of code on how to do simple things.

Extract the axes names from a Cube

julia
using YAXArrays
+import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const t="/YAXArrays.jl/dev/assets/fvajudo.CbmV3u64.jpeg",E=JSON.parse('{"title":"Frequently Asked Questions (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/faq.md","filePath":"UserGuide/faq.md","lastUpdated":null}'),h={name:"UserGuide/faq.md"};function l(p,s,k,d,r,g){return e(),a("div",null,s[0]||(s[0]=[n(`

Frequently Asked Questions (FAQ)

The purpose of this section is to do a collection of small convinient pieces of code on how to do simple things.

Extract the axes names from a Cube

julia
using YAXArrays
 using DimensionalData
julia
julia> c = YAXArray(rand(10, 10, 5))
╭─────────────────────────────╮
 10×10×5 YAXArray{Float64,3}
-├─────────────────────────────┴────────────────────────────────── dims ┐
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
-├──────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├─────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 3.91 KB
-└──────────────────────────────────────────────────────────────────────┘
julia
julia> caxes(c) # former way of doing it
Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> caxes(c) # former way of doing it
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

WARNING

To get the axes of a YAXArray use the dims function instead of the caxes function

julia
julia> dims(c)
Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

WARNING

To get the axes of a YAXArray use the dims function instead of the caxes function

julia
julia> dims(c)
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points

INFO

Also, use DD.rebuild(ax, values) instead of axcopy(ax, values) to copy an axes with the same name but different values.

Obtain values from axes and data from the cube

There are two options to collect values from axes. In this examples the axis ranges from 1 to 10.

These two examples bring the same result

julia
collect(getAxis("Dim_1", c).val)
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

INFO

Also, use DD.rebuild(ax, values) instead of axcopy(ax, values) to copy an axes with the same name but different values.

Obtain values from axes and data from the cube

There are two options to collect values from axes. In this examples the axis ranges from 1 to 10.

These two examples bring the same result

julia
collect(getAxis("Dim_1", c).val)
 collect(c.axes[1].val)
10-element Vector{Int64}:
   1
   2
@@ -26,14 +26,14 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
   9
  10

to collect data from a cube works exactly the same as doing it from an array

julia
julia> c[:, :, 1]
╭───────────────────────────╮
 10×10 YAXArray{Float64,2}
-├───────────────────────────┴────────────────────────── dims ┐
+├───────────────────────────┴──────────────────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} 1:10 ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} 1:10 ForwardOrdered Regular Points
-├────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├───────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 800.0 bytes
-└────────────────────────────────────────────────────────────┘

How do I concatenate cubes

It is possible to concatenate several cubes that shared the same dimensions using the [concatenatecubes]@ref function.

Let's create two dummy cubes

julia
using YAXArrays
+└──────────────────────────────────────────────────────────────────────────────┘

How do I concatenate cubes

It is possible to concatenate several cubes that shared the same dimensions using the [concatenatecubes]@ref function.

Let's create two dummy cubes

julia
using YAXArrays
 axlist = (
     Dim{:time}(range(1, 20, length=20)),
     Dim{:lon}(range(1, 10, length=10)),
@@ -57,9 +57,9 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
   file size: 46.88 KB
 └──────────────────────────────────────────────────────────────────────────────┘

How do I subset a YAXArray ( Cube ) or Dataset?

These are the three main datatypes provided by the YAXArrays libray. You can find a description of them here. A Cube is no more than a YAXArray, so, we will not explicitly tell about a Cube.

Subsetting a YAXArray

Let's start by creating a dummy YAXArray.

Firstly, load the required libraries

julia
using YAXArrays
 using Dates # To generate the dates of the time axis
-using DimensionalData # To use the "Between" option for selecting data, however the intervals notation should be used instead, i.e. \`a .. b\`.

Define the time span of the YAXArray

julia
t = Date("2020-01-01"):Month(1):Date("2022-12-31")
Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create YAXArray axes

julia
axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
↓ Lon  1:10,
+using DimensionalData # To use the "Between" option for selecting data, however the intervals notation should be used instead, i.e. \`a .. b\`.

Define the time span of the YAXArray

julia
t = Date("2020-01-01"):Month(1):Date("2022-12-31")
Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create YAXArray axes

julia
axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
(↓ Lon  1:10,
 → Lat  1:10,
-↗ Time Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create the YAXArray

julia
y = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
╭────────────────────────────╮
+↗ Time Date("2020-01-01"):Dates.Month(1):Date("2022-12-01"))

create the YAXArray

julia
y = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
╭────────────────────────────╮
 │ 10×10×36 YAXArray{Int64,3} │
 ├────────────────────────────┴─────────────────────────────────────────── dims ┐
   ↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
@@ -120,16 +120,16 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 
 ds = Dataset(; var1=var1, var2=var2)
YAXArray Dataset
 Shared Axes: 
-↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+(↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
 → Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
-↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
 Variables: 
 var1
 var2
julia
ds_lonlat = ds[Lon=1 .. 5, Lat=5 .. 10]
YAXArray Dataset
 Shared Axes: 
-↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+(↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
 → Lat  Sampled{Int64} 5:10 ForwardOrdered Regular Points,
-↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
 Variables: 
 var1
 var2

Subsetting a Dataset whose variables share some but not all of their dimensions

In this case, if we subset by the common dimension/s, this works the same as for YAXArrays, Cubes, and datasets that share all their dimensions.

But we can also subset a variable by the values of another variable with which it shares some dimensions.

Warning

If your data is not loaded into memory, the selection will be too slow. So, you have load into memory, at least, the variable with which you make the selection.

Let's make an example.

julia
using YAXArrays
@@ -147,12 +147,12 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 
 ds = Dataset(; longitudes=longitudes, latitudes=latitudes, temperature=temperature)
YAXArray Dataset
 Shared Axes: 
-↓ points Sampled{Int64} 1:100 ForwardOrdered Regular Points
+(↓ points Sampled{Int64} 1:100 ForwardOrdered Regular Points)
 Variables: 
 longitudes
 latitudes
 temperature
-  ↓ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

Select all points between 20ºN and 85ºN, and 0ºE to 180ºE

julia
ds_subset = ds[points = Where(p-> ds["latitudes"][p]  >= 20 && ds["latitudes"][p]  <= 80 &&
+  (↓ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

Select all points between 20ºN and 85ºN, and 0ºE to 180ºE

julia
ds_subset = ds[points = Where(p-> ds["latitudes"][p]  >= 20 && ds["latitudes"][p]  <= 80 &&
                              ds["longitudes"][p] >= 0  && ds["longitudes"][p] <= 180
                              ) # Where
               ] # ds
YAXArray Dataset
@@ -160,12 +160,12 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 ()
 Variables: 
 longitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 latitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 temperature
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points,
-  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

If your dataset has been read from a file with Cube it is not loaded into memory, and you have to load the latitudes and longitudes YAXArrays into memory:

julia
latitudes_yasxa  = readcubedata(ds["latitudes"])
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

If your dataset has been read from a file with Cube it is not loaded into memory, and you have to load the latitudes and longitudes YAXArrays into memory:

julia
latitudes_yasxa  = readcubedata(ds["latitudes"])
 longitudes_yasxa = readcubedata(ds["longitudes"])
 ds_subset = ds[points = Where(p-> latitudes_yasxa[p]  >= 20 && latitudes_yasxa[p]  <= 80 &&
                              longitudes_yasxa[p] >= 0  && longitudes_yasxa[p] <= 180
@@ -175,12 +175,12 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 ()
 Variables: 
 longitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 latitudes
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
 temperature
-  ↓ points Sampled{Int64} [8, 13, …, 98, 100] ForwardOrdered Irregular Points,
-  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points

How do I apply map algebra?

Our next step is map algebra computations. This can be done effectively using the 'map' function. For example:

Multiplying cubes with only spatio-temporal dimensions

julia
julia> map((x, y) -> x * y, ds1, ds2)
╭──────────────────────────────╮
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

How do I apply map algebra?

Our next step is map algebra computations. This can be done effectively using the 'map' function. For example:

Multiplying cubes with only spatio-temporal dimensions

julia
julia> map((x, y) -> x * y, ds1, ds2)
╭──────────────────────────────╮
 20×10×15 YAXArray{Float64,3}
 ├──────────────────────────────┴───────────────────────────────────────── dims ┐
 time Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
@@ -233,24 +233,24 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 c_tbl = DataFrame(t[1])
 first(c_tbl, 5)

In this line we calculate the Mean for each class

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes))
╭───────────────────────────────────────────────╮
 3-element YAXArray{Union{Missing, Float64},1}
-├───────────────────────────────────────────────┴────────────── dims ┐
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
 classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points
-├────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├───────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 24.0 bytes
-└────────────────────────────────────────────────────────────────────┘

We can also use more than one criteria for grouping the values. In the next example, the mean is calculated for each class and timestep.

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes, :time))
╭──────────────────────────────────────────╮
+└──────────────────────────────────────────────────────────────────────────────┘

We can also use more than one criteria for grouping the values. In the next example, the mean is calculated for each class and timestep.

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes, :time))
╭──────────────────────────────────────────╮
 3×20 YAXArray{Union{Missing, Float64},2}
-├──────────────────────────────────────────┴────────────────────── dims ┐
+├──────────────────────────────────────────┴───────────────────────────── dims ┐
 classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points,
 time    Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points
-├───────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├──────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 480.0 bytes
-└───────────────────────────────────────────────────────────────────────┘

How do I assing variable names to YAXArrays in a Dataset

One variable name

julia
julia> ds = YAXArrays.Dataset(; (:a => YAXArray(rand(10)),)...)
YAXArray Dataset
+└──────────────────────────────────────────────────────────────────────────────┘

How do I assing variable names to YAXArrays in a Dataset

One variable name

julia
julia> ds = YAXArrays.Dataset(; (:a => YAXArray(rand(10)),)...)
YAXArray Dataset
 Shared Axes:
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 Variables:
 a

Multiple variable names

julia
keylist = (:a, :b, :c)
 varlist = (YAXArray(rand(10)), YAXArray(rand(10,5)), YAXArray(rand(2,5)))
julia
julia> ds = YAXArrays.Dataset(; (keylist .=> varlist)...)
YAXArray Dataset
@@ -258,10 +258,10 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t
 ()
 Variables:
 a
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
 b
-Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
-Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
 c
-Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points,
-Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
`,113),l=[h];function p(k,d,r,g,y,E){return a(),i("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; + (Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points, +Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
`,113)]))}const o=i(h,[["render",l]]);export{E as __pageData,o as default}; diff --git a/dev/assets/UserGuide_faq.md.BZaTxhVy.lean.js b/dev/assets/UserGuide_faq.md.BZaTxhVy.lean.js new file mode 100644 index 00000000..5febf850 --- /dev/null +++ b/dev/assets/UserGuide_faq.md.BZaTxhVy.lean.js @@ -0,0 +1,267 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const t="/YAXArrays.jl/dev/assets/fvajudo.CbmV3u64.jpeg",E=JSON.parse('{"title":"Frequently Asked Questions (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/faq.md","filePath":"UserGuide/faq.md","lastUpdated":null}'),h={name:"UserGuide/faq.md"};function l(p,s,k,d,r,g){return e(),a("div",null,s[0]||(s[0]=[n(`

Frequently Asked Questions (FAQ)

The purpose of this section is to do a collection of small convinient pieces of code on how to do simple things.

Extract the axes names from a Cube

julia
using YAXArrays
+using DimensionalData
julia
julia> c = YAXArray(rand(10, 10, 5))
╭─────────────────────────────╮
+10×10×5 YAXArray{Float64,3}
+├─────────────────────────────┴────────────────────────────────────────── dims ┐
+Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 3.91 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> caxes(c) # former way of doing it
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

WARNING

To get the axes of a YAXArray use the dims function instead of the caxes function

julia
julia> dims(c)
(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)

INFO

Also, use DD.rebuild(ax, values) instead of axcopy(ax, values) to copy an axes with the same name but different values.

Obtain values from axes and data from the cube

There are two options to collect values from axes. In this examples the axis ranges from 1 to 10.

These two examples bring the same result

julia
collect(getAxis("Dim_1", c).val)
+collect(c.axes[1].val)
10-element Vector{Int64}:
+  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10

to collect data from a cube works exactly the same as doing it from an array

julia
julia> c[:, :, 1]
╭───────────────────────────╮
+10×10 YAXArray{Float64,2}
+├───────────────────────────┴──────────────────────────────────────────── dims ┐
+Dim_1 Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 800.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

How do I concatenate cubes

It is possible to concatenate several cubes that shared the same dimensions using the [concatenatecubes]@ref function.

Let's create two dummy cubes

julia
using YAXArrays
+axlist = (
+    Dim{:time}(range(1, 20, length=20)),
+    Dim{:lon}(range(1, 10, length=10)),
+    Dim{:lat}(range(1, 5, length=15))
+    )
+
+data1 = rand(20, 10, 15)
+ds1 = YAXArray(axlist, data1)
+
+data2 = rand(20, 10, 15)
+ds2 = YAXArray(axlist, data2)

Now we can concatenate ds1 and ds2:

julia
julia> dsfinal = concatenatecubes([ds1, ds2], Dim{:Variables}(["var1", "var2"]))
╭────────────────────────────────╮
+20×10×15×2 YAXArray{Float64,4}
+├────────────────────────────────┴─────────────────────────────────────── dims ┐
+time      Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
+lon       Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+lat       Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points,
+Variables Categorical{String} ["var1", "var2"] ForwardOrdered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 46.88 KB
+└──────────────────────────────────────────────────────────────────────────────┘

How do I subset a YAXArray ( Cube ) or Dataset?

These are the three main datatypes provided by the YAXArrays libray. You can find a description of them here. A Cube is no more than a YAXArray, so, we will not explicitly tell about a Cube.

Subsetting a YAXArray

Let's start by creating a dummy YAXArray.

Firstly, load the required libraries

julia
using YAXArrays
+using Dates # To generate the dates of the time axis
+using DimensionalData # To use the "Between" option for selecting data, however the intervals notation should be used instead, i.e. \`a .. b\`.

Define the time span of the YAXArray

julia
t = Date("2020-01-01"):Month(1):Date("2022-12-31")
Date("2020-01-01"):Dates.Month(1):Date("2022-12-01")

create YAXArray axes

julia
axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
(↓ Lon  1:10,
+→ Lat  1:10,
+↗ Time Date("2020-01-01"):Dates.Month(1):Date("2022-12-01"))

create the YAXArray

julia
y = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
╭────────────────────────────╮
+│ 10×10×36 YAXArray{Int64,3} │
+├────────────────────────────┴─────────────────────────────────────────── dims ┐
+  ↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  → Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  ↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 28.12 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Now we subset the YAXArray by any dimension.

Subset YAXArray by years

julia
ytime = y[Time=Between(Date(2021,1,1), Date(2021,12,31))]
╭────────────────────────────╮
+│ 10×10×12 YAXArray{Int64,3} │
+├────────────────────────────┴─────────────────────────────────────────── dims ┐
+  ↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  → Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  ↗ Time Sampled{Date} Date("2021-01-01"):Dates.Month(1):Date("2021-12-01") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 9.38 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Subset YAXArray by a specific date

julia
ytime2 = y[Time=At(Date("2021-05-01"))]
╭─────────────────────────╮
+│ 10×10 YAXArray{Int64,2} │
+├─────────────────────────┴────────────────────────── dims ┐
+  ↓ Lon Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  → Lat Sampled{Int64} 1:10 ForwardOrdered Regular Points
+├──────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────── file size ┤ 
+  file size: 800.0 bytes
+└──────────────────────────────────────────────────────────┘

Subset YAXArray by a date range

julia
ytime3 = y[Time=Date("2021-05-01") .. Date("2021-12-01")]
╭───────────────────────────╮
+│ 10×10×8 YAXArray{Int64,3} │
+├───────────────────────────┴──────────────────────────────────────────── dims ┐
+  ↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  → Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+  ↗ Time Sampled{Date} Date("2021-05-01"):Dates.Month(1):Date("2021-12-01") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 6.25 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Subset YAXArray by longitude and latitude

julia
ylonlat = y[Lon=1 .. 5, Lat=5 .. 10]
╭──────────────────────────╮
+│ 5×6×36 YAXArray{Int64,3} │
+├──────────────────────────┴───────────────────────────────────────────── dims ┐
+  ↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+  → Lat  Sampled{Int64} 5:10 ForwardOrdered Regular Points,
+  ↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 8.44 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Subsetting a Dataset

In a dataset, we can have several variables (YAXArrays) that share some or all of their dimensions.

Subsetting a Dataset whose variables share all their dimensions

This works for YAXArrays. Let's make an example.

julia
using YAXArrays
+using Dates # To generate the dates of the time axis
+using DimensionalData # To use the "Between" option for selecting data
+
+t = Date("2020-01-01"):Month(1):Date("2022-12-31")
+axes = (Dim{:Lon}(1:10), Dim{:Lat}(1:10), Dim{:Time}(t))
+
+var1 = YAXArray(axes, reshape(1:3600, (10, 10, 36)))
+var2 = YAXArray(axes, reshape((1:3600)*5, (10, 10, 36)))
+
+ds = Dataset(; var1=var1, var2=var2)
YAXArray Dataset
+Shared Axes: 
+(↓ Lon  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+→ Lat  Sampled{Int64} 1:10 ForwardOrdered Regular Points,
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
+Variables: 
+var1
+var2
julia
ds_lonlat = ds[Lon=1 .. 5, Lat=5 .. 10]
YAXArray Dataset
+Shared Axes: 
+(↓ Lon  Sampled{Int64} 1:5 ForwardOrdered Regular Points,
+→ Lat  Sampled{Int64} 5:10 ForwardOrdered Regular Points,
+↗ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)
+Variables: 
+var1
+var2

Subsetting a Dataset whose variables share some but not all of their dimensions

In this case, if we subset by the common dimension/s, this works the same as for YAXArrays, Cubes, and datasets that share all their dimensions.

But we can also subset a variable by the values of another variable with which it shares some dimensions.

Warning

If your data is not loaded into memory, the selection will be too slow. So, you have load into memory, at least, the variable with which you make the selection.

Let's make an example.

julia
using YAXArrays
+using Dates # To generate the dates of the time axis
+using DimensionalData # To use the "Between" selector for selecting data
+
+t = Date("2020-01-01"):Month(1):Date("2022-12-31")
+common_axis = Dim{:points}(1:100)
+time_axis =   Dim{:Time}(t)
+
+# Note that longitudes and latitudes are not dimensions, but YAXArrays
+longitudes = YAXArray((common_axis,), rand(1:369, 100)) # 100 random values taken from 1 to 359
+latitudes  = YAXArray((common_axis,), rand(0:90, 100))  # 100 random values taken from 0 to 90
+temperature = YAXArray((common_axis, time_axis), rand(-40:40, (100, 36)))
+
+ds = Dataset(; longitudes=longitudes, latitudes=latitudes, temperature=temperature)
YAXArray Dataset
+Shared Axes: 
+(↓ points Sampled{Int64} 1:100 ForwardOrdered Regular Points)
+Variables: 
+longitudes
+latitudes
+temperature
+  (↓ Time Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

Select all points between 20ºN and 85ºN, and 0ºE to 180ºE

julia
ds_subset = ds[points = Where(p-> ds["latitudes"][p]  >= 20 && ds["latitudes"][p]  <= 80 &&
+                             ds["longitudes"][p] >= 0  && ds["longitudes"][p] <= 180
+                             ) # Where
+              ] # ds
YAXArray Dataset
+Shared Axes: 
+()
+Variables: 
+longitudes
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
+latitudes
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
+temperature
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

If your dataset has been read from a file with Cube it is not loaded into memory, and you have to load the latitudes and longitudes YAXArrays into memory:

julia
latitudes_yasxa  = readcubedata(ds["latitudes"])
+longitudes_yasxa = readcubedata(ds["longitudes"])
+ds_subset = ds[points = Where(p-> latitudes_yasxa[p]  >= 20 && latitudes_yasxa[p]  <= 80 &&
+                             longitudes_yasxa[p] >= 0  && longitudes_yasxa[p] <= 180
+                             ) # Where
+              ] # ds
YAXArray Dataset
+Shared Axes: 
+()
+Variables: 
+longitudes
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
+latitudes
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points)
+temperature
+  (↓ points Sampled{Int64} [6, 8, …, 89, 98] ForwardOrdered Irregular Points,
+  → Time   Sampled{Date} Date("2020-01-01"):Dates.Month(1):Date("2022-12-01") ForwardOrdered Regular Points)

How do I apply map algebra?

Our next step is map algebra computations. This can be done effectively using the 'map' function. For example:

Multiplying cubes with only spatio-temporal dimensions

julia
julia> map((x, y) -> x * y, ds1, ds2)
╭──────────────────────────────╮
+20×10×15 YAXArray{Float64,3}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+time Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
+lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 23.44 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Cubes with more than 3 dimensions

julia
julia> map((x, y) -> x * y, dsfinal[Variables=At("var1")], dsfinal[Variables=At("var2")])
╭──────────────────────────────╮
+20×10×15 YAXArray{Float64,3}
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+time Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
+lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 23.44 KB
+└──────────────────────────────────────────────────────────────────────────────┘

To add some complexity, we will multiply each value for π and then divided for the sum of each time step. We will use the ds1 cube for this purpose.

julia
julia> mapslices(ds1, dims=("Lon", "Lat")) do xin
+           (xin * π) ./ maximum(skipmissing(xin))
+       end
╭──────────────────────────────────────────────╮
+10×15×20 YAXArray{Union{Missing, Float64},3}
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+lon  Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+lat  Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points,
+time Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 23.44 KB
+└──────────────────────────────────────────────────────────────────────────────┘

How do I use the CubeTable function?

The function "CubeTable" creates an iterable table and the result is a DataCube. It is therefore very handy for grouping data and computing statistics by class. It uses OnlineStats.jl to calculate statistics, and weighted statistics can be calculated as well.

Here we will use the ds1 Cube defined previously and we create a mask for data classification.

Cube containing a mask with classes 1, 2 and 3.

julia
julia> classes = YAXArray((getAxis("lon", dsfinal), getAxis("lat", dsfinal)), rand(1:3, 10, 15))
╭─────────────────────────╮
+10×15 YAXArray{Int64,2}
+├─────────────────────────┴────────────────────────────────────────────── dims ┐
+lon Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 1.17 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
using GLMakie
+GLMakie.activate!()
+# This is how our classification map looks like
+fig, ax, obj = heatmap(classes;
+    colormap=Makie.Categorical(cgrad([:grey15, :orangered, :snow3])))
+cbar = Colorbar(fig[1,2], obj)
+fig

Now we define the input cubes that will be considered for the iterable table

julia
t = CubeTable(values=ds1, classes=classes)
Datacube iterator with 1 subtables with fields: (:values, :classes, :time, :lon, :lat)
julia
using DataFrames
+using OnlineStats
+## visualization of the CubeTable
+c_tbl = DataFrame(t[1])
+first(c_tbl, 5)

In this line we calculate the Mean for each class

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes))
╭───────────────────────────────────────────────╮
+3-element YAXArray{Union{Missing, Float64},1}
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 24.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

We can also use more than one criteria for grouping the values. In the next example, the mean is calculated for each class and timestep.

julia
julia> fitcube = cubefittable(t, Mean, :values, by=(:classes, :time))
╭──────────────────────────────────────────╮
+3×20 YAXArray{Union{Missing, Float64},2}
+├──────────────────────────────────────────┴───────────────────────────── dims ┐
+classes Sampled{Int64} [1, 2, 3] ForwardOrdered Irregular Points,
+time    Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 480.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

How do I assing variable names to YAXArrays in a Dataset

One variable name

julia
julia> ds = YAXArrays.Dataset(; (:a => YAXArray(rand(10)),)...)
YAXArray Dataset
+Shared Axes:
+(Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
+Variables:
+a

Multiple variable names

julia
keylist = (:a, :b, :c)
+varlist = (YAXArray(rand(10)), YAXArray(rand(10,5)), YAXArray(rand(2,5)))
julia
julia> ds = YAXArrays.Dataset(; (keylist .=> varlist)...)
YAXArray Dataset
+Shared Axes:
+()
+Variables:
+a
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points)
+b
+  (Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
+c
+  (Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(5) ForwardOrdered Regular Points)
`,113)]))}const o=i(h,[["render",l]]);export{E as __pageData,o as default}; diff --git a/dev/assets/UserGuide_faq.md.CfSW0c59.lean.js b/dev/assets/UserGuide_faq.md.CfSW0c59.lean.js deleted file mode 100644 index 7748cf14..00000000 --- a/dev/assets/UserGuide_faq.md.CfSW0c59.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const t="/YAXArrays.jl/dev/assets/tlkgzfl.DA3FSb99.jpeg",c=JSON.parse('{"title":"Frequently Asked Questions (FAQ)","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/faq.md","filePath":"UserGuide/faq.md","lastUpdated":null}'),e={name:"UserGuide/faq.md"},h=n("",113),l=[h];function p(k,d,r,g,y,E){return a(),i("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; diff --git a/dev/assets/UserGuide_group.md.C3qv_f3u.lean.js b/dev/assets/UserGuide_group.md.C3qv_f3u.lean.js deleted file mode 100644 index c7d9d858..00000000 --- a/dev/assets/UserGuide_group.md.C3qv_f3u.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const e="/YAXArrays.jl/dev/assets/mzrclpj.CBBZcGwj.png",E=JSON.parse('{"title":"Group YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/group.md","filePath":"UserGuide/group.md","lastUpdated":null}'),h={name:"UserGuide/group.md"},t=n("",62),l=[t];function p(k,d,r,g,o,N){return a(),i("div",null,l)}const c=s(h,[["render",p]]);export{E as __pageData,c as default}; diff --git a/dev/assets/UserGuide_group.md.C3qv_f3u.js b/dev/assets/UserGuide_group.md.De_4u3Mq.js similarity index 98% rename from dev/assets/UserGuide_group.md.C3qv_f3u.js rename to dev/assets/UserGuide_group.md.De_4u3Mq.js index 3a5d8887..cf18ce21 100644 --- a/dev/assets/UserGuide_group.md.C3qv_f3u.js +++ b/dev/assets/UserGuide_group.md.De_4u3Mq.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const e="/YAXArrays.jl/dev/assets/mzrclpj.CBBZcGwj.png",E=JSON.parse('{"title":"Group YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/group.md","filePath":"UserGuide/group.md","lastUpdated":null}'),h={name:"UserGuide/group.md"},t=n(`

Group YAXArrays and Datasets

The following examples will use the groupby function to calculate temporal and spatial averages.

julia
using YAXArrays, DimensionalData
+import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const h="/YAXArrays.jl/dev/assets/zbtetzz.CBBZcGwj.png",y=JSON.parse('{"title":"Group YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/group.md","filePath":"UserGuide/group.md","lastUpdated":null}'),t={name:"UserGuide/group.md"};function l(p,s,k,d,r,g){return e(),a("div",null,s[0]||(s[0]=[n(`

Group YAXArrays and Datasets

The following examples will use the groupby function to calculate temporal and spatial averages.

julia
using YAXArrays, DimensionalData
 using NetCDF
 using Downloads
 using Dates
@@ -187,4 +187,4 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const e
     colgap!(fig.layout, 5)
     rowgap!(fig.layout, 5)
     fig
-end

which shows a good agreement with the results first published by Joe Hamman.

',62),l=[t];function p(k,d,r,g,o,N){return a(),i("div",null,l)}const c=s(h,[["render",p]]);export{E as __pageData,c as default}; +end

which shows a good agreement with the results first published by Joe Hamman.

',62)]))}const N=i(t,[["render",l]]);export{y as __pageData,N as default}; diff --git a/dev/assets/UserGuide_group.md.De_4u3Mq.lean.js b/dev/assets/UserGuide_group.md.De_4u3Mq.lean.js new file mode 100644 index 00000000..cf18ce21 --- /dev/null +++ b/dev/assets/UserGuide_group.md.De_4u3Mq.lean.js @@ -0,0 +1,190 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const h="/YAXArrays.jl/dev/assets/zbtetzz.CBBZcGwj.png",y=JSON.parse('{"title":"Group YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/group.md","filePath":"UserGuide/group.md","lastUpdated":null}'),t={name:"UserGuide/group.md"};function l(p,s,k,d,r,g){return e(),a("div",null,s[0]||(s[0]=[n(`

Group YAXArrays and Datasets

The following examples will use the groupby function to calculate temporal and spatial averages.

julia
using YAXArrays, DimensionalData
+using NetCDF
+using Downloads
+using Dates
+using Statistics

Seasonal Averages from Time Series of Monthly Means

The following reproduces the example in xarray by Joe Hamman.

Where the goal is to calculate the seasonal average. And in order to do this properly, is necessary to calculate the weighted average considering that each month has a different number of days.

Download the data

julia
url_path = "https://github.com/pydata/xarray-data/raw/master/rasm.nc"
+filename = Downloads.download(url_path, "rasm.nc")
+ds_o = Cube(filename)

WARNING

The following rebuild should not be necessary in the future, plus is unpractical to use for large data sets. Out of memory groupby currently is work in progress. Related to https://github.com/rafaqz/DimensionalData.jl/issues/642

julia
axs = dims(ds_o) # get the dimensions
+data = ds_o.data[:,:,:] # read the data
+_FillValue = ds_o.properties["_FillValue"]
+data = replace(data, _FillValue => NaN)
+# create new YAXArray
+ds = YAXArray(axs, data)

GroupBy: seasons

function weighted_seasons(ds) ... end
julia
function weighted_seasons(ds)
+    # calculate weights 
+    tempo = dims(ds, :Ti)
+    month_length = YAXArray((tempo,), daysinmonth.(tempo))
+    g_tempo = groupby(month_length, Ti => seasons(; start=December))
+    sum_days = sum.(g_tempo, dims=:Ti)
+    weights = map(./, g_tempo, sum_days)
+    # unweighted seasons
+    g_ds = groupby(ds, Ti => seasons(; start=December))
+    mean_g = mean.(g_ds, dims=:Ti)
+    mean_g = dropdims.(mean_g, dims=:Ti)
+    # weighted seasons
+    g_dsW = broadcast_dims.(*, weights, g_ds)
+    weighted_g = sum.(g_dsW, dims = :Ti);
+    weighted_g = dropdims.(weighted_g, dims=:Ti)
+    # differences
+    diff_g = map(.-, weighted_g, mean_g)
+    seasons_g = lookup(mean_g, :Ti)
+    return mean_g, weighted_g, diff_g, seasons_g
+end

Now, we continue with the groupby operations as usual

julia
julia> g_ds = groupby(ds, Ti => seasons(; start=December))
╭──────────────────────────────────────────────────╮
+4-element DimGroupByArray{YAXArray{Float64,2},1}
+├──────────────────────────────────────────────────┴───────────────────── dims ┐
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+├────────────────────────────────────────────────────────────────── group dims ┤
+x, y, Ti
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  275×205×9 YAXArray
+ :Mar_Apr_May  275×205×9 YAXArray
+ :Jun_Jul_Aug  275×205×9 YAXArray
+ :Sep_Oct_Nov  275×205×9 YAXArray

And the mean per season is calculated as follows

julia
julia> mean_g = mean.(g_ds, dims=:Ti)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 3, Array{Float64, 3}, Tuple{Dim{:x, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:y, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, DimensionalData.Dimensions.Ti{DimensionalData.Dimensions.Lookups.Sampled{CFTime.DateTimeNoLeap, Vector{CFTime.DateTimeNoLeap}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Irregular{Tuple{CFTime.DateTimeNoLeap, CFTime.DateTimeNoLeap}}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Dict{String, Any}},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 11.1372 11.3835; NaN NaN … 11.3252 11.5843;;;]
+ :Mar_Apr_May     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.1363 21.018; NaN NaN … 21.4325 21.1762;;;]
+ :Jun_Jul_Aug     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 28.2818 27.9432; NaN NaN … 28.619 28.0537;;;]
+ :Sep_Oct_Nov     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.7119 21.7158; NaN NaN … 21.9682 21.9404;;;]

dropdims

Note that now the time dimension has length one, we can use dropdims to remove it

julia
julia> mean_g = dropdims.(mean_g, dims=:Ti)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 2, Matrix{Float64}, Tuple{Dim{:x, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:y, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Dict{String, Any}},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 11.1372 11.3835; NaN NaN … 11.3252 11.5843]
+ :Mar_Apr_May     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.1363 21.018; NaN NaN … 21.4325 21.1762]
+ :Jun_Jul_Aug     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 28.2818 27.9432; NaN NaN … 28.619 28.0537]
+ :Sep_Oct_Nov     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.7119 21.7158; NaN NaN … 21.9682 21.9404]

seasons

Due to the groupby function we will obtain new grouping names, in this case in the time dimension:

julia
seasons_g = lookup(mean_g, :Ti)
Categorical{Symbol} Unordered
+wrapping: 4-element Vector{Symbol}:
+ :Dec_Jan_Feb
+ :Mar_Apr_May
+ :Jun_Jul_Aug
+ :Sep_Oct_Nov

Next, we will weight this grouping by days/month in each group.

GroupBy: weight

Create a YAXArray for the month length

julia
tempo = dims(ds, :Ti)
+month_length = YAXArray((tempo,), daysinmonth.(tempo))
╭──────────────────────────────╮
+│ 36-element YAXArray{Int64,1} │
+├──────────────────────────────┴───────────────────────────────────────── dims ┐
+  ↓ Ti Sampled{CFTime.DateTimeNoLeap} [CFTime.DateTimeNoLeap(1980-09-16T12:00:00), …, CFTime.DateTimeNoLeap(1983-08-17T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 288.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

Now group it by season

julia
julia> g_tempo = groupby(month_length, Ti => seasons(; start=December))
╭────────────────────────────────────────────────╮
+4-element DimGroupByArray{YAXArray{Int64,0},1}
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+├────────────────────────────────────────────────────────────────── group dims ┤
+Ti
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  9-element YAXArray
+ :Mar_Apr_May  9-element YAXArray
+ :Jun_Jul_Aug  9-element YAXArray
+ :Sep_Oct_Nov  9-element YAXArray

Get the number of days per season

julia
julia> sum_days = sum.(g_tempo, dims=:Ti)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Int64, 1, Vector{Int64}, Tuple{DimensionalData.Dimensions.Ti{DimensionalData.Dimensions.Lookups.Sampled{CFTime.DateTimeNoLeap, Vector{CFTime.DateTimeNoLeap}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Irregular{Tuple{CFTime.DateTimeNoLeap, CFTime.DateTimeNoLeap}}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Dict{String, Any}},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  [270]
+ :Mar_Apr_May  [276]
+ :Jun_Jul_Aug  [276]
+ :Sep_Oct_Nov  [273]

weights

Weight the seasonal groups by sum_days

julia
julia> weights = map(./, g_tempo, sum_days)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 1, Vector{Float64}, Tuple{DimensionalData.Dimensions.Ti{DimensionalData.Dimensions.Lookups.Sampled{CFTime.DateTimeNoLeap, SubArray{CFTime.DateTimeNoLeap, 1, Vector{CFTime.DateTimeNoLeap}, Tuple{Vector{Int64}}, false}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Irregular{Tuple{CFTime.DateTimeNoLeap, CFTime.DateTimeNoLeap}}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Dict{String, Any}},1} groupby
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [0.114815, 0.114815, 0.103704, 0.114815, 0.114815, 0.103704, 0.114815, 0.114815, 0.103704]
+ :Mar_Apr_May     [0.112319, 0.108696, 0.112319, 0.112319, 0.108696, 0.112319, 0.112319, 0.108696, 0.112319]
+ :Jun_Jul_Aug     [0.108696, 0.112319, 0.112319, 0.108696, 0.112319, 0.112319, 0.108696, 0.112319, 0.112319]
+ :Sep_Oct_Nov     [0.10989, 0.113553, 0.10989, 0.10989, 0.113553, 0.10989, 0.10989, 0.113553, 0.10989]

Verify that the sum per season is 1

julia
julia> sum.(weights)
╭───────────────────────────────╮
+4-element DimArray{Float64,1}
+├───────────────────────────────┴──────────────────────────────────────── dims ┐
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  1.0
+ :Mar_Apr_May  1.0
+ :Jun_Jul_Aug  1.0
+ :Sep_Oct_Nov  1.0

weighted seasons

Now, let's weight the seasons

julia
julia> g_dsW = broadcast_dims.(*, weights, g_ds)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 3, Array{Float64, 3}, Tuple{DimensionalData.Dimensions.Ti{DimensionalData.Dimensions.Lookups.Sampled{CFTime.DateTimeNoLeap, SubArray{CFTime.DateTimeNoLeap, 1, Vector{CFTime.DateTimeNoLeap}, Tuple{Vector{Int64}}, false}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Irregular{Tuple{CFTime.DateTimeNoLeap, CFTime.DateTimeNoLeap}}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:x, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:y, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, DimensionalData.Dimensions.Lookups.NoMetadata},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; … ;;; NaN NaN … 1.32149 1.33565; NaN NaN … 1.29564 1.32555; … ; NaN NaN … 1.3188 1.3169; NaN NaN … 1.17863 1.18434;;; NaN NaN … 1.29816 1.34218; NaN NaN … 1.30113 1.35483; … ; NaN NaN … 1.30142 1.31753; NaN NaN … 1.16258 1.17647;;; NaN NaN … 1.34549 1.37878; NaN NaN … 1.36836 1.41634; … ; NaN NaN … 1.34832 1.38364; NaN NaN … 1.17852 1.16713]
+ :Mar_Apr_May     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; … ;;; NaN NaN … 1.87705 1.90365; NaN NaN … 2.30018 2.35432; … ; NaN NaN … 2.41049 2.43254; NaN NaN … 2.65105 2.69085;;; NaN NaN … 1.86457 1.90712; NaN NaN … 2.2894 2.34818; … ; NaN NaN … 2.3866 2.41241; NaN NaN … 2.61197 2.64976;;; NaN NaN … 1.89237 1.8984; NaN NaN … 2.29473 2.312; … ; NaN NaN … 2.36142 2.36126; NaN NaN … 2.56632 2.59085]
+ :Jun_Jul_Aug     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; … ;;; NaN NaN … 3.21209 3.25153; NaN NaN … 3.23 3.28008; … ; NaN NaN … 3.12575 3.15532; NaN NaN … 3.2434 3.26274;;; NaN NaN … 3.17434 3.21699; NaN NaN … 3.18892 3.24375; … ; NaN NaN … 3.06755 3.1083; NaN NaN … 3.19241 3.22211;;; NaN NaN … 3.1437 3.15644; NaN NaN … 3.16631 3.18583; … ; NaN NaN … 3.03361 3.05846; NaN NaN … 3.16581 3.16824]
+ :Sep_Oct_Nov     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … NaN NaN; NaN NaN … NaN NaN;;; … ;;; NaN NaN … 2.97047 3.00388; NaN NaN … 2.77587 2.80759; … ; NaN NaN … 2.60175 2.60918; NaN NaN … 1.4947 1.52419;;; NaN NaN … 2.94534 2.97649; NaN NaN … 2.75891 2.79502; … ; NaN NaN … 2.57695 2.59212; NaN NaN … 1.46506 1.49909;;; NaN NaN … 2.9192 2.93743; NaN NaN … 2.7593 2.77687; … ; NaN NaN … 2.57873 2.63006; NaN NaN … 1.48367 1.50089]

apply a sum over the time dimension and drop it

julia
julia> weighted_g = sum.(g_dsW, dims = :Ti);
+
+julia> weighted_g = dropdims.(weighted_g, dims=:Ti)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 2, Matrix{Float64}, Tuple{Dim{:x, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:y, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, DimensionalData.Dimensions.Lookups.NoMetadata},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 11.1181 11.372; NaN NaN … 11.3069 11.5743]
+ :Mar_Apr_May     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.1242 21.0057; NaN NaN … 21.4198 21.1644]
+ :Jun_Jul_Aug     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 28.2747 27.9362; NaN NaN … 28.6122 28.0465]
+ :Sep_Oct_Nov     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 21.73 21.7341; NaN NaN … 21.986 21.959]

Calculate the differences

julia
julia> diff_g = map(.-, weighted_g, mean_g)
╭──────────────────────────────────────────────────────────────────────────────╮
+4-element DimArray{YAXArray{Float64, 2, Matrix{Float64}, Tuple{Dim{:x, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Dim{:y, DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, DimensionalData.Dimensions.Lookups.NoMetadata},1}
+├──────────────────────────────────────────────────────────────────────── dims ┤
+Ti Categorical{Symbol} [:Dec_Jan_Feb, :Mar_Apr_May, :Jun_Jul_Aug, :Sep_Oct_Nov] Unordered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{Symbol, Any} with 1 entry:
+  :groupby => :Ti=>CyclicBins(month; cycle=12, step=3, start=12)…
+└──────────────────────────────────────────────────────────────────────────────┘
+ :Dec_Jan_Feb  …  [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … -0.019016 -0.0115514; NaN NaN … -0.0183003 -0.00990356]
+ :Mar_Apr_May     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … -0.0121037 -0.0123091; NaN NaN … -0.0127077 -0.0117519]
+ :Jun_Jul_Aug     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … -0.00709111 -0.00693713; NaN NaN … -0.00684233 -0.00722034]
+ :Sep_Oct_Nov     [NaN NaN … NaN NaN; NaN NaN … NaN NaN; … ; NaN NaN … 0.0180572 0.0182373; NaN NaN … 0.0178074 0.018571]

All the previous steps are equivalent to calling the function defined at the top:

julia
mean_g, weighted_g, diff_g, seasons_g = weighted_seasons(ds)

Once all calculations are done we can plot the results with Makie.jl as follows:

julia
using CairoMakie
+# define plot arguments/attributes
+colorrange = (-30,30)
+colormap = Reverse(:Spectral)
+highclip = :red
+lowclip = :grey15
+cb_label =  ds_o.properties["long_name"]
"Surface air temperature"
julia
with_theme(theme_ggplot2()) do
+    hm_o, hm_d, hm_w = nothing, nothing, nothing
+    # the figure
+    fig = Figure(; size = (850,500))
+    axs = [Axis(fig[i,j], aspect=DataAspect()) for i in 1:3, j in 1:4]
+    for (j, s) in enumerate(seasons_g)
+        hm_o = heatmap!(axs[1,j], mean_g[Ti=At(s)]; colorrange, lowclip, highclip, colormap)
+        hm_w = heatmap!(axs[2,j], weighted_g[Ti=At(s)]; colorrange, lowclip, highclip, colormap)
+        hm_d = heatmap!(axs[3,j], diff_g[Ti=At(s)]; colorrange=(-0.1,0.1), lowclip, highclip,
+            colormap=:diverging_bwr_20_95_c54_n256)
+    end
+    Colorbar(fig[1:2,5], hm_o, label=cb_label)
+    Colorbar(fig[3,5], hm_d, label="Tair")
+    hidedecorations!.(axs, grid=false, ticks=false, label=false)
+    # some labels
+    [axs[1,j].title = string.(s) for (j,s) in enumerate(seasons_g)]
+    Label(fig[0,1:5], "Seasonal Surface Air Temperature", fontsize=18, font=:bold)
+    axs[1,1].ylabel = "Unweighted"
+    axs[2,1].ylabel = "Weighted"
+    axs[3,1].ylabel = "Difference"
+    colgap!(fig.layout, 5)
+    rowgap!(fig.layout, 5)
+    fig
+end

which shows a good agreement with the results first published by Joe Hamman.

',62)]))}const N=i(t,[["render",l]]);export{y as __pageData,N as default}; diff --git a/dev/assets/UserGuide_read.md.i_gnCx2-.js b/dev/assets/UserGuide_read.md.BCQMfZ77.js similarity index 91% rename from dev/assets/UserGuide_read.md.i_gnCx2-.js rename to dev/assets/UserGuide_read.md.BCQMfZ77.js index f7e956e8..c727b9ca 100644 --- a/dev/assets/UserGuide_read.md.i_gnCx2-.js +++ b/dev/assets/UserGuide_read.md.BCQMfZ77.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,a4 as t}from"./chunks/framework._h4tgM90.js";const g=JSON.parse('{"title":"Read YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/read.md","filePath":"UserGuide/read.md","lastUpdated":null}'),i={name:"UserGuide/read.md"},e=t(`

Read YAXArrays and Datasets

This section describes how to read files, URLs, and directories into YAXArrays and datasets.

Read Zarr

Open a Zarr store as a Dataset:

julia
using YAXArrays
+import{_ as a,c as n,a2 as t,o as i}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Read YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/read.md","filePath":"UserGuide/read.md","lastUpdated":null}'),e={name:"UserGuide/read.md"};function p(l,s,o,r,d,h){return i(),n("div",null,s[0]||(s[0]=[t(`

Read YAXArrays and Datasets

This section describes how to read files, URLs, and directories into YAXArrays and datasets.

Read Zarr

Open a Zarr store as a Dataset:

julia
using YAXArrays
 using Zarr
 path="gs://cmip6/CMIP6/ScenarioMIP/DKRZ/MPI-ESM1-2-HR/ssp585/r1i1p1f1/3hr/tas/gn/v20190710/"
 store = zopen(path, consolidated=true)
@@ -8,9 +8,9 @@ import{_ as s,c as a,o as n,a4 as t}from"./chunks/framework._h4tgM90.js";const g
 Variables: 
 height
 tas
-  ↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  (↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
   → lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
-  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points
+  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
 
 Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)

We can set path to a URL, a local directory, or in this case to a cloud object storage path.

A zarr store may contain multiple arrays. Individual arrays can be accessed using subsetting:

julia
ds.tas
╭────────────────────────────────────╮
 │ 384×192×251288 YAXArray{Float32,3} │
@@ -39,9 +39,9 @@ import{_ as s,c as a,o as n,a4 as t}from"./chunks/framework._h4tgM90.js";const g
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
@@ -71,4 +71,4 @@ import{_ as s,c as a,o as n,a4 as t}from"./chunks/framework._h4tgM90.js";const g
 
 path = download("https://github.com/yeesian/ArchGDALDatasets/raw/307f8f0e584a39a050c042849004e6a2bd674f99/gdalworkshop/world.tif", "world.tif")
 # ds = open_dataset(path) # this is broken
-nothing
`,20),p=[e];function l(o,r,d,h,u,c){return n(),a("div",null,p)}const q=s(i,[["render",l]]);export{g as __pageData,q as default}; +nothing
`,20)]))}const k=a(e,[["render",p]]);export{c as __pageData,k as default}; diff --git a/dev/assets/UserGuide_read.md.BCQMfZ77.lean.js b/dev/assets/UserGuide_read.md.BCQMfZ77.lean.js new file mode 100644 index 00000000..c727b9ca --- /dev/null +++ b/dev/assets/UserGuide_read.md.BCQMfZ77.lean.js @@ -0,0 +1,74 @@ +import{_ as a,c as n,a2 as t,o as i}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Read YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/read.md","filePath":"UserGuide/read.md","lastUpdated":null}'),e={name:"UserGuide/read.md"};function p(l,s,o,r,d,h){return i(),n("div",null,s[0]||(s[0]=[t(`

Read YAXArrays and Datasets

This section describes how to read files, URLs, and directories into YAXArrays and datasets.

Read Zarr

Open a Zarr store as a Dataset:

julia
using YAXArrays
+using Zarr
+path="gs://cmip6/CMIP6/ScenarioMIP/DKRZ/MPI-ESM1-2-HR/ssp585/r1i1p1f1/3hr/tas/gn/v20190710/"
+store = zopen(path, consolidated=true)
+ds = open_dataset(store)
YAXArray Dataset
+Shared Axes: 
+()
+Variables: 
+height
+tas
+  (↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
+  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
+
+Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)

We can set path to a URL, a local directory, or in this case to a cloud object storage path.

A zarr store may contain multiple arrays. Individual arrays can be accessed using subsetting:

julia
ds.tas
╭────────────────────────────────────╮
+│ 384×192×251288 YAXArray{Float32,3} │
+├────────────────────────────────────┴─────────────────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
+  ↗ Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"         => "K"
+  "history"       => "2019-07-21T06:26:13Z altered by CMOR: Treated scalar dime…
+  "name"          => "tas"
+  "cell_methods"  => "area: mean time: point"
+  "cell_measures" => "area: areacella"
+  "long_name"     => "Near-Surface Air Temperature"
+  "coordinates"   => "height"
+  "standard_name" => "air_temperature"
+  "_FillValue"    => 1.0f20
+  "comment"       => "near-surface (usually, 2 meter) air temperature"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 69.02 GB
+└──────────────────────────────────────────────────────────────────────────────┘

Read NetCDF

Open a NetCDF file as a Dataset:

julia
using YAXArrays
+using NetCDF
+using Downloads: download
+
+path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
+ds = open_dataset(path)
YAXArray Dataset
+Shared Axes: 
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+→ lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
+Variables: 
+tos
+
+Properties: Dict{String, Any}("cmor_version" => 0.96f0, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "Conventions" => "CF-1.0", "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

A NetCDF file may contain multiple arrays. Individual arrays can be accessed using subsetting:

julia
ds.tos
╭────────────────────────────────────────────────╮
+│ 180×170×24 YAXArray{Union{Missing, Float32},3} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 2.8 MB
+└──────────────────────────────────────────────────────────────────────────────┘

Read GDAL (GeoTIFF, GeoJSON)

All GDAL compatible files can be read as a YAXArrays.Dataset after loading ArchGDAL:

julia
using YAXArrays
+using ArchGDAL
+using Downloads: download
+
+path = download("https://github.com/yeesian/ArchGDALDatasets/raw/307f8f0e584a39a050c042849004e6a2bd674f99/gdalworkshop/world.tif", "world.tif")
+# ds = open_dataset(path) # this is broken
+nothing
`,20)]))}const k=a(e,[["render",p]]);export{c as __pageData,k as default}; diff --git a/dev/assets/UserGuide_read.md.i_gnCx2-.lean.js b/dev/assets/UserGuide_read.md.i_gnCx2-.lean.js deleted file mode 100644 index 9c728119..00000000 --- a/dev/assets/UserGuide_read.md.i_gnCx2-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as n,a4 as t}from"./chunks/framework._h4tgM90.js";const g=JSON.parse('{"title":"Read YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/read.md","filePath":"UserGuide/read.md","lastUpdated":null}'),i={name:"UserGuide/read.md"},e=t("",20),p=[e];function l(o,r,d,h,u,c){return n(),a("div",null,p)}const q=s(i,[["render",l]]);export{g as __pageData,q as default}; diff --git a/dev/assets/UserGuide_select.md.BWVJxXiv.lean.js b/dev/assets/UserGuide_select.md.BWVJxXiv.lean.js deleted file mode 100644 index cebb4058..00000000 --- a/dev/assets/UserGuide_select.md.BWVJxXiv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Select YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/select.md","filePath":"UserGuide/select.md","lastUpdated":null}'),e={name:"UserGuide/select.md"},t=n("",56),p=[t];function l(h,o,k,d,r,u){return i(),a("div",null,p)}const y=s(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/dev/assets/UserGuide_select.md.BWVJxXiv.js b/dev/assets/UserGuide_select.md.MJRJAz_y.js similarity index 98% rename from dev/assets/UserGuide_select.md.BWVJxXiv.js rename to dev/assets/UserGuide_select.md.MJRJAz_y.js index a78bf5b7..be8de214 100644 --- a/dev/assets/UserGuide_select.md.BWVJxXiv.js +++ b/dev/assets/UserGuide_select.md.MJRJAz_y.js @@ -1,13 +1,13 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Select YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/select.md","filePath":"UserGuide/select.md","lastUpdated":null}'),e={name:"UserGuide/select.md"},t=n(`

Select YAXArrays and Datasets

The dimensions or axes of an YAXArray are named making it easier to subset or query certain ranges of an array. Let's open an example Dataset used to select certain elements:

julia
using YAXArrays
+import{_ as a,c as i,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Select YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/select.md","filePath":"UserGuide/select.md","lastUpdated":null}'),t={name:"UserGuide/select.md"};function p(l,s,h,o,k,d){return e(),i("div",null,s[0]||(s[0]=[n(`

Select YAXArrays and Datasets

The dimensions or axes of an YAXArray are named making it easier to subset or query certain ranges of an array. Let's open an example Dataset used to select certain elements:

julia
using YAXArrays
 using NetCDF
 using Downloads: download
 
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
@@ -290,4 +290,4 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c
   88.5
   89.5

These values are defined as lookups in the package DimensionalData:

julia
lookup(tos, :lon)
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
 wrapping: 1.0:2.0:359.0

which is equivalent to:

julia
tos.lon.val
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
-wrapping: 1.0:2.0:359.0
`,56),p=[t];function l(h,o,k,d,r,u){return i(),a("div",null,p)}const y=s(e,[["render",l]]);export{c as __pageData,y as default}; +wrapping: 1.0:2.0:359.0
`,56)]))}const g=a(t,[["render",p]]);export{u as __pageData,g as default}; diff --git a/dev/assets/UserGuide_select.md.MJRJAz_y.lean.js b/dev/assets/UserGuide_select.md.MJRJAz_y.lean.js new file mode 100644 index 00000000..be8de214 --- /dev/null +++ b/dev/assets/UserGuide_select.md.MJRJAz_y.lean.js @@ -0,0 +1,293 @@ +import{_ as a,c as i,a2 as n,o as e}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Select YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/select.md","filePath":"UserGuide/select.md","lastUpdated":null}'),t={name:"UserGuide/select.md"};function p(l,s,h,o,k,d){return e(),i("div",null,s[0]||(s[0]=[n(`

Select YAXArrays and Datasets

The dimensions or axes of an YAXArray are named making it easier to subset or query certain ranges of an array. Let's open an example Dataset used to select certain elements:

julia
using YAXArrays
+using NetCDF
+using Downloads: download
+
+path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
+ds = open_dataset(path)
YAXArray Dataset
+Shared Axes: 
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+→ lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
+Variables: 
+tos
+
+Properties: Dict{String, Any}("cmor_version" => 0.96f0, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "Conventions" => "CF-1.0", "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Select a YAXArray

Get the sea surface temperature of the Dataset:

julia
tos = ds.tos
╭────────────────────────────────────────────────╮
+│ 180×170×24 YAXArray{Union{Missing, Float32},3} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 2.8 MB
+└──────────────────────────────────────────────────────────────────────────────┘

which is the same as:

julia
tos = ds.cubes[:tos]
╭────────────────────────────────────────────────╮
+│ 180×170×24 YAXArray{Union{Missing, Float32},3} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 2.8 MB
+└──────────────────────────────────────────────────────────────────────────────┘

Select elements

Using positional integer indexing:

julia
tos[lon = 1, lat = 1]
╭────────────────────────────────────────────────╮
+│ 24-element YAXArray{Union{Missing, Float32},1} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ Ti Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 96.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

Same but using named indexing:

julia
tos[lon = At(1), lat = At(-79.5)]
╭────────────────────────────────────────────────╮
+│ 24-element YAXArray{Union{Missing, Float32},1} │
+├────────────────────────────────────────────────┴─────────────────────── dims ┐
+  ↓ Ti Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 96.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

Using special types:

julia
using CFTime
+time1 = DateTime360Day(2001,01,16)
+tos[time = At(time1)]
╭─────────────────────────────────────────────╮
+│ 180×170 YAXArray{Union{Missing, Float32},2} │
+├─────────────────────────────────────────────┴───────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points
+├─────────────────────────────────────────────────────────────────────┴ metadata ┐
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├───────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 119.53 KB
+└────────────────────────────────────────────────────────────────────────────────┘

Select ranges

Here we subset an interval of a dimension using positional integer indexing.

julia
tos[lon = 1:10, lat = 1:10]
╭──────────────────────────────────────────────╮
+│ 10×10×24 YAXArray{Union{Missing, Float32},3} │
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 1.0:2.0:19.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:-70.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 9.38 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Same but using named indexing:

julia
tos[lon = At(1.0:2:19), lat = At(-79.5:1:-70.5)]
╭──────────────────────────────────────────────╮
+│ 10×10×24 YAXArray{Union{Missing, Float32},3} │
+├──────────────────────────────────────────────┴───────────────────────── dims ┐
+  ↓ lon Sampled{Float64} [1.0, 3.0, …, 17.0, 19.0] ForwardOrdered Irregular Points,
+  → lat Sampled{Float64} [-79.5, -78.5, …, -71.5, -70.5] ForwardOrdered Irregular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 9.38 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Read more about the At selector in the package DimensionalData. Get values within a tolerances:

julia
tos[lon = At(1:10; atol = 1)]
╭───────────────────────────────────────────────╮
+│ 10×170×24 YAXArray{Union{Missing, Float32},3} │
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+  ↓ lon Sampled{Float64} [1.0, 1.0, …, 9.0, 9.0] ForwardOrdered Irregular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 159.38 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Closed and open intervals

Although a Between(a,b) function is available in DimensionalData, is recommended to use instead the a .. b notation:

julia
tos[lon = 90 .. 180]
╭───────────────────────────────────────────────╮
+│ 45×170×24 YAXArray{Union{Missing, Float32},3} │
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+  ↓ lon Sampled{Float64} 91.0:2.0:179.0 ForwardOrdered Regular Points,
+  → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+  ↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 717.19 KB
+└──────────────────────────────────────────────────────────────────────────────┘

This describes a closed interval in which all points were included. More selectors from DimensionalData are available, such as Touches, Near, Where and Contains.

julia
using IntervalSets
julia
julia> tos[lon = OpenInterval(90, 180)]
╭───────────────────────────────────────────────╮
+45×170×24 YAXArray{Union{Missing, Float32},3}
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+lon Sampled{Float64} 91.0:2.0:179.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 717.19 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> tos[lon = ClosedInterval(90, 180)]
╭───────────────────────────────────────────────╮
+45×170×24 YAXArray{Union{Missing, Float32},3}
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+lon Sampled{Float64} 91.0:2.0:179.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 717.19 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> tos[lon =Interval{:open,:closed}(90,180)]
╭───────────────────────────────────────────────╮
+45×170×24 YAXArray{Union{Missing, Float32},3}
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+lon Sampled{Float64} 91.0:2.0:179.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 717.19 KB
+└──────────────────────────────────────────────────────────────────────────────┘
julia
julia> tos[lon =Interval{:closed,:open}(90,180)]
╭───────────────────────────────────────────────╮
+45×170×24 YAXArray{Union{Missing, Float32},3}
+├───────────────────────────────────────────────┴──────────────────────── dims ┐
+lon Sampled{Float64} 91.0:2.0:179.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any} with 10 entries:
+  "units"          => "K"
+  "missing_value"  => 1.0f20
+  "history"        => " At   16:37:23 on 01/11/2005: CMOR altered the data in t…
+  "cell_methods"   => "time: mean (interval: 30 minutes)"
+  "name"           => "tos"
+  "long_name"      => "Sea Surface Temperature"
+  "original_units" => "degC"
+  "standard_name"  => "sea_surface_temperature"
+  "_FillValue"     => 1.0f20
+  "original_name"  => "sosstsst"
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 717.19 KB
+└──────────────────────────────────────────────────────────────────────────────┘

See tutorials for use cases.

Get a dimension

Get values, .e.g., axis tick labels, of a dimension that can be used for subseting:

julia
collect(tos.lat)
170-element Vector{Float64}:
+ -79.5
+ -78.5
+ -77.5
+ -76.5
+ -75.5
+ -74.5
+ -73.5
+ -72.5
+ -71.5
+ -70.5
+
+  81.5
+  82.5
+  83.5
+  84.5
+  85.5
+  86.5
+  87.5
+  88.5
+  89.5

These values are defined as lookups in the package DimensionalData:

julia
lookup(tos, :lon)
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
+wrapping: 1.0:2.0:359.0

which is equivalent to:

julia
tos.lon.val
Sampled{Float64} ForwardOrdered Regular DimensionalData.Dimensions.Lookups.Points
+wrapping: 1.0:2.0:359.0
`,56)]))}const g=a(t,[["render",p]]);export{u as __pageData,g as default}; diff --git a/dev/assets/UserGuide_types.md.B2iGHzIZ.js b/dev/assets/UserGuide_types.md.B2iGHzIZ.js deleted file mode 100644 index 66dd9bf7..00000000 --- a/dev/assets/UserGuide_types.md.B2iGHzIZ.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a4 as r}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/types.md","filePath":"UserGuide/types.md","lastUpdated":null}'),s={name:"UserGuide/types.md"},o=r('

Types

This section describes the data structures used to work with n-dimensional arrays in YAXArrays.

YAXArray

An Array stores a sequence of ordered elements of the same type usually across multiple dimensions or axes. For example, one can measure temperature across all time points of the time dimension or brightness values of a picture across X and Y dimensions. A one dimensional array is called Vector and a two dimensional array is called a Matrix. In many Machine Learning libraries, arrays are also called tensors. Arrays are designed to store dense spatial-temporal data stored in a grid, whereas a collection of sparse points is usually stored in data frames or relational databases.

A DimArray as defined by DimensionalData.jl adds names to the dimensions and their axes ticks for a given Array. These names can be used to access the data, e.g., by date instead of just by integer position.

A YAXArray is a subtype of a AbstractDimArray and adds functions to load and process the named arrays. For example, it can also handle very large arrays stored on disk that are too big to fit in memory. In addition, it provides functions for parallel computation.

Dataset

A Dataset is an ordered dictionary of YAXArrays that usually share dimensions. For example, it can bundle arrays storing temperature and precipitation that are measured at the same time points and the same locations. One also can store a picture in a Dataset with three arrays containing brightness values for red green and blue, respectively. Internally, those arrays are still separated allowing to chose different element types for each array. Analog to the (NetCDF Data Model)[https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html], a Dataset usually represents variables belonging to the same group.

(Data) Cube

A (Data) Cube is just a YAXArray in which arrays from a dataset are combined together by introducing a new dimension containing labels of which array the corresponding element came from. Unlike a Dataset, all arrays must have the same element type to be converted into a cube. This data structure is useful when we want to use all variables at once. For example, the arrays temperature and precipitation which are measured at the same locations and dates can be combined into a single cube. A more formal definition of Data Cubes are given in Mahecha et al. 2020

Dimension

A Dimension or axis as defined by DimensionalData.jl adds tick labels, e.g., to each row or column of an array. It's name is used to access particular subsets of that array.

',12),n=[o];function i(d,l,c,h,m,u){return t(),a("div",null,n)}const f=e(s,[["render",i]]);export{y as __pageData,f as default}; diff --git a/dev/assets/UserGuide_types.md.B2iGHzIZ.lean.js b/dev/assets/UserGuide_types.md.B2iGHzIZ.lean.js deleted file mode 100644 index a20571bf..00000000 --- a/dev/assets/UserGuide_types.md.B2iGHzIZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a4 as r}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/types.md","filePath":"UserGuide/types.md","lastUpdated":null}'),s={name:"UserGuide/types.md"},o=r("",12),n=[o];function i(d,l,c,h,m,u){return t(),a("div",null,n)}const f=e(s,[["render",i]]);export{y as __pageData,f as default}; diff --git a/dev/assets/UserGuide_types.md.DAaXu8Uc.js b/dev/assets/UserGuide_types.md.DAaXu8Uc.js new file mode 100644 index 00000000..cdedef41 --- /dev/null +++ b/dev/assets/UserGuide_types.md.DAaXu8Uc.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o as s}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/types.md","filePath":"UserGuide/types.md","lastUpdated":null}'),o={name:"UserGuide/types.md"};function n(i,e,d,l,c,h){return s(),t("div",null,e[0]||(e[0]=[r('

Types

This section describes the data structures used to work with n-dimensional arrays in YAXArrays.

YAXArray

An Array stores a sequence of ordered elements of the same type usually across multiple dimensions or axes. For example, one can measure temperature across all time points of the time dimension or brightness values of a picture across X and Y dimensions. A one dimensional array is called Vector and a two dimensional array is called a Matrix. In many Machine Learning libraries, arrays are also called tensors. Arrays are designed to store dense spatial-temporal data stored in a grid, whereas a collection of sparse points is usually stored in data frames or relational databases.

A DimArray as defined by DimensionalData.jl adds names to the dimensions and their axes ticks for a given Array. These names can be used to access the data, e.g., by date instead of just by integer position.

A YAXArray is a subtype of a AbstractDimArray and adds functions to load and process the named arrays. For example, it can also handle very large arrays stored on disk that are too big to fit in memory. In addition, it provides functions for parallel computation.

Dataset

A Dataset is an ordered dictionary of YAXArrays that usually share dimensions. For example, it can bundle arrays storing temperature and precipitation that are measured at the same time points and the same locations. One also can store a picture in a Dataset with three arrays containing brightness values for red green and blue, respectively. Internally, those arrays are still separated allowing to chose different element types for each array. Analog to the (NetCDF Data Model)[https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html], a Dataset usually represents variables belonging to the same group.

(Data) Cube

A (Data) Cube is just a YAXArray in which arrays from a dataset are combined together by introducing a new dimension containing labels of which array the corresponding element came from. Unlike a Dataset, all arrays must have the same element type to be converted into a cube. This data structure is useful when we want to use all variables at once. For example, the arrays temperature and precipitation which are measured at the same locations and dates can be combined into a single cube. A more formal definition of Data Cubes are given in Mahecha et al. 2020

Dimension

A Dimension or axis as defined by DimensionalData.jl adds tick labels, e.g., to each row or column of an array. It's name is used to access particular subsets of that array.

',12)]))}const p=a(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/dev/assets/UserGuide_types.md.DAaXu8Uc.lean.js b/dev/assets/UserGuide_types.md.DAaXu8Uc.lean.js new file mode 100644 index 00000000..cdedef41 --- /dev/null +++ b/dev/assets/UserGuide_types.md.DAaXu8Uc.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o as s}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/types.md","filePath":"UserGuide/types.md","lastUpdated":null}'),o={name:"UserGuide/types.md"};function n(i,e,d,l,c,h){return s(),t("div",null,e[0]||(e[0]=[r('

Types

This section describes the data structures used to work with n-dimensional arrays in YAXArrays.

YAXArray

An Array stores a sequence of ordered elements of the same type usually across multiple dimensions or axes. For example, one can measure temperature across all time points of the time dimension or brightness values of a picture across X and Y dimensions. A one dimensional array is called Vector and a two dimensional array is called a Matrix. In many Machine Learning libraries, arrays are also called tensors. Arrays are designed to store dense spatial-temporal data stored in a grid, whereas a collection of sparse points is usually stored in data frames or relational databases.

A DimArray as defined by DimensionalData.jl adds names to the dimensions and their axes ticks for a given Array. These names can be used to access the data, e.g., by date instead of just by integer position.

A YAXArray is a subtype of a AbstractDimArray and adds functions to load and process the named arrays. For example, it can also handle very large arrays stored on disk that are too big to fit in memory. In addition, it provides functions for parallel computation.

Dataset

A Dataset is an ordered dictionary of YAXArrays that usually share dimensions. For example, it can bundle arrays storing temperature and precipitation that are measured at the same time points and the same locations. One also can store a picture in a Dataset with three arrays containing brightness values for red green and blue, respectively. Internally, those arrays are still separated allowing to chose different element types for each array. Analog to the (NetCDF Data Model)[https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html], a Dataset usually represents variables belonging to the same group.

(Data) Cube

A (Data) Cube is just a YAXArray in which arrays from a dataset are combined together by introducing a new dimension containing labels of which array the corresponding element came from. Unlike a Dataset, all arrays must have the same element type to be converted into a cube. This data structure is useful when we want to use all variables at once. For example, the arrays temperature and precipitation which are measured at the same locations and dates can be combined into a single cube. A more formal definition of Data Cubes are given in Mahecha et al. 2020

Dimension

A Dimension or axis as defined by DimensionalData.jl adds tick labels, e.g., to each row or column of an array. It's name is used to access particular subsets of that array.

',12)]))}const p=a(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/dev/assets/UserGuide_write.md.C3OHkkA6.js b/dev/assets/UserGuide_write.md.BtDfDOfT.js similarity index 81% rename from dev/assets/UserGuide_write.md.C3OHkkA6.js rename to dev/assets/UserGuide_write.md.BtDfDOfT.js index 406a5bee..d3d669dd 100644 --- a/dev/assets/UserGuide_write.md.C3OHkkA6.js +++ b/dev/assets/UserGuide_write.md.BtDfDOfT.js @@ -1,39 +1,39 @@ -import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework._h4tgM90.js";const u=JSON.parse('{"title":"Write YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/write.md","filePath":"UserGuide/write.md","lastUpdated":null}'),e={name:"UserGuide/write.md"},n=t(`

Write YAXArrays and Datasets

Create an example Dataset:

julia
using YAXArrays
+import{_ as i,c as a,a2 as e,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Write YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/write.md","filePath":"UserGuide/write.md","lastUpdated":null}'),n={name:"UserGuide/write.md"};function l(h,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

Write YAXArrays and Datasets

Create an example Dataset:

julia
using YAXArrays
 using NetCDF
 using Downloads: download
 
 path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
 ds = open_dataset(path)
YAXArray Dataset
 Shared Axes: 
-↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 → lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 Variables: 
 tos
 
 Properties: Dict{String, Any}("cmor_version" => 0.96f0, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "Conventions" => "CF-1.0", "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Write Zarr

Save a single YAXArray to a directory:

julia
using Zarr
 savecube(ds.tos, "tos.zarr", driver=:zarr)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.zarr", driver=:zarr)

Write NetCDF

Save a single YAXArray to a directory:

julia
using NetCDF
-savecube(ds.tos, "tos.nc", driver=:netcdf)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.nc", driver=:netcdf)

Overwrite a Dataset

If a path already exists, an error will be thrown. Set overwrite=true to delete the existing dataset

julia
savedataset(ds, path="ds.zarr", driver=:zarr, overwrite=true)

DANGER

Again, setting overwrite will delete all your previous saved data.

Look at the doc string for more information

# YAXArrays.Datasets.savedatasetFunction.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


Append to a Dataset

New variables can be added to an existing dataset using the append=true keyword.

julia
ds2 = Dataset(z = YAXArray(rand(10,20,5)))
+savecube(ds.tos, "tos.nc", driver=:netcdf)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.nc", driver=:netcdf)

Overwrite a Dataset

If a path already exists, an error will be thrown. Set overwrite=true to delete the existing dataset

julia
savedataset(ds, path="ds.zarr", driver=:zarr, overwrite=true)

DANGER

Again, setting overwrite will delete all your previous saved data.

Look at the doc string for more information

# YAXArrays.Datasets.savedatasetFunction.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


Append to a Dataset

New variables can be added to an existing dataset using the append=true keyword.

julia
ds2 = Dataset(z = YAXArray(rand(10,20,5)))
 savedataset(ds2, path="ds.zarr", backend=:zarr, append=true)
julia
julia> open_dataset("ds.zarr", driver=:zarr)
YAXArray Dataset
 Shared Axes:
 ()
 Variables:
 tos
-lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+  (lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
 lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
-Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
 z
-Dim_1 Sampled{Int64} 1:1:10 ForwardOrdered Regular Points,
+  (Dim_1 Sampled{Int64} 1:1:10 ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} 1:1:20 ForwardOrdered Regular Points,
-Dim_3 Sampled{Int64} 1:1:5 ForwardOrdered Regular Points
+Dim_3 Sampled{Int64} 1:1:5 ForwardOrdered Regular Points)
 
 Properties: Dict{String, Any}("cmor_version" => 0.96, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "Conventions" => "CF-1.0", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Save Skeleton

Sometimes one merely wants to create a datacube "Skeleton" on disk and gradually fill it with data. Here we make use of FillArrays to create a YAXArray and write only the axis data and array metadata to disk, while no actual array data is copied:

julia
using YAXArrays, Zarr, FillArrays

create the Zeros array

julia
julia> a = YAXArray(Zeros(Union{Missing, Int32}, 10, 20))
╭─────────────────────────────────────────╮
 10×20 YAXArray{Union{Missing, Int32},2}
-├─────────────────────────────────────────┴────────────────────── dims ┐
+├─────────────────────────────────────────┴────────────────────────────── dims ┐
 Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
 Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
-├──────────────────────────────────────────────────────────── metadata ┤
+├──────────────────────────────────────────────────────────────────── metadata ┤
   Dict{String, Any}()
-├─────────────────────────────────────────────────────────── file size ┤
+├─────────────────────────────────────────────────────────────────── file size ┤
   file size: 800.0 bytes
-└──────────────────────────────────────────────────────────────────────┘

and save them as

julia
r = savecube(a, "skeleton.zarr", driver=:zarr, skeleton=true)

and check that all the values are missing

julia
all(ismissing,r[:,:])
true

If using FillArrays is not possible, using the zeros function works as well, though it does allocate the array in memory.

INFO

The skeleton argument is also available for savedataset.

`,39),l=[n];function h(p,k,r,d,o,g){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{u as __pageData,y as default}; +└──────────────────────────────────────────────────────────────────────────────┘

and save them as

julia
r = savecube(a, "skeleton.zarr", driver=:zarr, skeleton=true)

and check that all the values are missing

julia
all(ismissing,r[:,:])
true

If using FillArrays is not possible, using the zeros function works as well, though it does allocate the array in memory.

INFO

The skeleton argument is also available for savedataset.

`,39)]))}const c=i(n,[["render",l]]);export{g as __pageData,c as default}; diff --git a/dev/assets/UserGuide_write.md.BtDfDOfT.lean.js b/dev/assets/UserGuide_write.md.BtDfDOfT.lean.js new file mode 100644 index 00000000..d3d669dd --- /dev/null +++ b/dev/assets/UserGuide_write.md.BtDfDOfT.lean.js @@ -0,0 +1,39 @@ +import{_ as i,c as a,a2 as e,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Write YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/write.md","filePath":"UserGuide/write.md","lastUpdated":null}'),n={name:"UserGuide/write.md"};function l(h,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

Write YAXArrays and Datasets

Create an example Dataset:

julia
using YAXArrays
+using NetCDF
+using Downloads: download
+
+path = download("https://www.unidata.ucar.edu/software/netcdf/examples/tos_O1_2001-2002.nc", "example.nc")
+ds = open_dataset(path)
YAXArray Dataset
+Shared Axes: 
+(↓ lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+→ lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+↗ Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
+Variables: 
+tos
+
+Properties: Dict{String, Any}("cmor_version" => 0.96f0, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "Conventions" => "CF-1.0", "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Write Zarr

Save a single YAXArray to a directory:

julia
using Zarr
+savecube(ds.tos, "tos.zarr", driver=:zarr)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.zarr", driver=:zarr)

Write NetCDF

Save a single YAXArray to a directory:

julia
using NetCDF
+savecube(ds.tos, "tos.nc", driver=:netcdf)

Save an entire Dataset to a directory:

julia
savedataset(ds, path="ds.nc", driver=:netcdf)

Overwrite a Dataset

If a path already exists, an error will be thrown. Set overwrite=true to delete the existing dataset

julia
savedataset(ds, path="ds.zarr", driver=:zarr, overwrite=true)

DANGER

Again, setting overwrite will delete all your previous saved data.

Look at the doc string for more information

# YAXArrays.Datasets.savedatasetFunction.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


Append to a Dataset

New variables can be added to an existing dataset using the append=true keyword.

julia
ds2 = Dataset(z = YAXArray(rand(10,20,5)))
+savedataset(ds2, path="ds.zarr", backend=:zarr, append=true)
julia
julia> open_dataset("ds.zarr", driver=:zarr)
YAXArray Dataset
+Shared Axes:
+()
+Variables:
+tos
+  (lon Sampled{Float64} 1.0:2.0:359.0 ForwardOrdered Regular Points,
+lat Sampled{Float64} -79.5:1.0:89.5 ForwardOrdered Regular Points,
+Ti  Sampled{CFTime.DateTime360Day} [CFTime.DateTime360Day(2001-01-16T00:00:00), …, CFTime.DateTime360Day(2002-12-16T00:00:00)] ForwardOrdered Irregular Points)
+z
+  (Dim_1 Sampled{Int64} 1:1:10 ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} 1:1:20 ForwardOrdered Regular Points,
+Dim_3 Sampled{Int64} 1:1:5 ForwardOrdered Regular Points)
+
+Properties: Dict{String, Any}("cmor_version" => 0.96, "references" => "Dufresne et al, Journal of Climate, 2015, vol XX, p 136", "realization" => 1, "contact" => "Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr", "Conventions" => "CF-1.0", "history" => "YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed  At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements", "table_id" => "Table O1 (13 November 2004)", "source" => "IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v", "title" => "IPSL  model output prepared for IPCC Fourth Assessment SRES A2 experiment", "experiment_id" => "SRES A2 experiment"…)

Save Skeleton

Sometimes one merely wants to create a datacube "Skeleton" on disk and gradually fill it with data. Here we make use of FillArrays to create a YAXArray and write only the axis data and array metadata to disk, while no actual array data is copied:

julia
using YAXArrays, Zarr, FillArrays

create the Zeros array

julia
julia> a = YAXArray(Zeros(Union{Missing, Int32}, 10, 20))
╭─────────────────────────────────────────╮
+10×20 YAXArray{Union{Missing, Int32},2}
+├─────────────────────────────────────────┴────────────────────────────── dims ┐
+Dim_1 Sampled{Int64} Base.OneTo(10) ForwardOrdered Regular Points,
+Dim_2 Sampled{Int64} Base.OneTo(20) ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 800.0 bytes
+└──────────────────────────────────────────────────────────────────────────────┘

and save them as

julia
r = savecube(a, "skeleton.zarr", driver=:zarr, skeleton=true)

and check that all the values are missing

julia
all(ismissing,r[:,:])
true

If using FillArrays is not possible, using the zeros function works as well, though it does allocate the array in memory.

INFO

The skeleton argument is also available for savedataset.

`,39)]))}const c=i(n,[["render",l]]);export{g as __pageData,c as default}; diff --git a/dev/assets/UserGuide_write.md.C3OHkkA6.lean.js b/dev/assets/UserGuide_write.md.C3OHkkA6.lean.js deleted file mode 100644 index 5ed4a372..00000000 --- a/dev/assets/UserGuide_write.md.C3OHkkA6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework._h4tgM90.js";const u=JSON.parse('{"title":"Write YAXArrays and Datasets","description":"","frontmatter":{},"headers":[],"relativePath":"UserGuide/write.md","filePath":"UserGuide/write.md","lastUpdated":null}'),e={name:"UserGuide/write.md"},n=t("",39),l=[n];function h(p,k,r,d,o,g){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{u as __pageData,y as default}; diff --git a/dev/assets/api.md.DU-CSbKR.js b/dev/assets/api.md.DSVzzvyi.js similarity index 60% rename from dev/assets/api.md.DU-CSbKR.js rename to dev/assets/api.md.DSVzzvyi.js index 3e210014..0f71642d 100644 --- a/dev/assets/api.md.DU-CSbKR.js +++ b/dev/assets/api.md.DSVzzvyi.js @@ -1,13 +1,13 @@ -import{_ as e,c as a,o as s,a4 as i}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),t={name:"api.md"},r=i(`

API Reference

This section describes all available functions of this package.

Public API

# YAXArrays.getAxisMethod.
julia
getAxis(desc, c)

Given an Axis description and a cube, returns the corresponding axis of the cube. The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.CubesModule.

The functions provided by YAXArrays are supposed to work on different types of cubes. This module defines the interface for all Data types that

source


# YAXArrays.Cubes.YAXArrayType.
julia
YAXArray{T,N}

An array labelled with named axes that have values associated with them. It can wrap normal arrays or, more typically DiskArrays.

Fields

  • axes: Tuple of Dimensions containing the Axes of the Cube

  • data: length(axes)-dimensional array which holds the data, this can be a lazy DiskArray

  • properties: Metadata properties describing the content of the data

  • chunks: Representation of the chunking of the data

  • cleaner: Cleaner objects to track which objects to tidy up when the YAXArray goes out of scope

source


# YAXArrays.Cubes.caxesFunction.

Returns the axes of a Cube

source


# YAXArrays.Cubes.caxesMethod.
julia
caxes

Embeds Cube inside a new Cube

source


# YAXArrays.Cubes.concatenatecubesMethod.
julia
function concatenateCubes(cubelist, cataxis::CategoricalAxis)

Concatenates a vector of datacubes that have identical axes to a new single cube along the new axis cataxis

source


# YAXArrays.Cubes.readcubedataMethod.
julia
readcubedata(cube)

Given any array implementing the YAXArray interface it returns an in-memory YAXArray from it.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::YAXArray,chunks)

Resets the chunks of a YAXArray and returns a new YAXArray. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savecube on the resulting array. The chunks argument can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Cubes.subsetcubeFunction.

This function calculates a subset of a cube's data

source


# YAXArrays.DAT.InDimsType.
julia
InDims(axisdesc...;...)

Creates a description of an Input Data Cube for cube operations. Takes a single or multiple axis descriptions as first arguments. Alternatively a MovingWindow(@ref) struct can be passed to include neighbour slices of one or more axes in the computation. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

Keyword arguments

  • artype how shall the array be represented in the inner function. Defaults to Array, alternatives are DataFrame or AsAxisArray

  • filter define some filter to skip the computation, e.g. when all values are missing. Defaults to AllMissing(), possible values are AnyMissing(), AnyOcean(), StdZero(), NValid(n) (for at least n non-missing elements). It is also possible to provide a custom one-argument function that takes the array and returns true if the compuation shall be skipped and false otherwise.

  • window_oob_value if one of the input dimensions is a MowingWindow, this value will be used to fill out-of-bounds areas

source


# YAXArrays.DAT.MovingWindowType.
julia
MovingWindow(desc, pre, after)

Constructs a MovingWindow object to be passed to an InDims constructor to define that the axis in desc shall participate in the inner function (i.e. shall be looped over), but inside the inner function pre values before and after values after the center value will be passed as well.

For example passing MovingWindow("Time", 2, 0) will loop over the time axis and always pass the current time step plus the 2 previous steps. So in the inner function the array will have an additional dimension of size 3.

source


# YAXArrays.DAT.OutDimsMethod.
julia
OutDims(axisdesc;...)

Creates a description of an Output Data Cube for cube operations. Takes a single or a Vector/Tuple of axes as first argument. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

  • axisdesc: List of input axis names

  • backend : specifies the dataset backend to write data to, must be either :auto or a key in YAXArrayBase.backendlist

  • update : specifies wether the function operates inplace or if an output is returned

  • artype : specifies the Array type inside the inner function that is mapped over

  • chunksize: A Dict specifying the chunksizes for the output dimensions of the cube, or :input to copy chunksizes from input cube axes or :max to not chunk the inner dimensions

  • outtype: force the output type to a specific type, defaults to Any which means that the element type of the first input cube is used

source


# YAXArrays.DAT.CubeTableMethod.
julia
CubeTable()

Function to turn a DataCube object into an iterable table. Takes a list of as arguments, specified as a name=cube expression. For example CubeTable(data=cube1,country=cube2) would generate a Table with the entries data and country, where data contains the values of cube1 and country the values of cube2. The cubes are matched and broadcasted along their axes like in mapCube.

source


# YAXArrays.DAT.cubefittableMethod.
julia
cubefittable(tab,o,fitsym;post=getpostfunction(o),kwargs...)

Executes fittable on the CubeTable tab with the (Weighted-)OnlineStat o, looping through the values specified by fitsym. Finally, writes the results from the TableAggregator to an output data cube.

source


# YAXArrays.DAT.fittableMethod.
julia
fittable(tab,o,fitsym;by=(),weight=nothing)

Loops through an iterable table tab and thereby fitting an OnlineStat o with the values specified through fitsym. Optionally one can specify a field (or tuple) to group by. Any groupby specifier can either be a symbol denoting the entry to group by or an anynymous function calculating the group from a table row.

For example the following would caluclate a weighted mean over a cube weighted by grid cell area and grouped by country and month:

julia
fittable(iter,WeightedMean,:tair,weight=(i->abs(cosd(i.lat))),by=(i->month(i.time),:country))

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)
+import{_ as a,c as s,a2 as i,o as t}from"./chunks/framework.Bwkmg46C.js";const b=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"};function o(l,e,n,d,p,c){return t(),s("div",null,e[0]||(e[0]=[i(`

API Reference

This section describes all available functions of this package.

Public API

# YAXArrays.getAxisMethod.
julia
getAxis(desc, c)

Given an Axis description and a cube, returns the corresponding axis of the cube. The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.CubesModule.

The functions provided by YAXArrays are supposed to work on different types of cubes. This module defines the interface for all Data types that

source


# YAXArrays.Cubes.YAXArrayType.
julia
YAXArray{T,N}

An array labelled with named axes that have values associated with them. It can wrap normal arrays or, more typically DiskArrays.

Fields

  • axes: Tuple of Dimensions containing the Axes of the Cube

  • data: length(axes)-dimensional array which holds the data, this can be a lazy DiskArray

  • properties: Metadata properties describing the content of the data

  • chunks: Representation of the chunking of the data

  • cleaner: Cleaner objects to track which objects to tidy up when the YAXArray goes out of scope

source


# YAXArrays.Cubes.caxesFunction.

Returns the axes of a Cube

source


# YAXArrays.Cubes.caxesMethod.
julia
caxes

Embeds Cube inside a new Cube

source


# YAXArrays.Cubes.concatenatecubesMethod.
julia
function concatenateCubes(cubelist, cataxis::CategoricalAxis)

Concatenates a vector of datacubes that have identical axes to a new single cube along the new axis cataxis

source


# YAXArrays.Cubes.readcubedataMethod.
julia
readcubedata(cube)

Given any array implementing the YAXArray interface it returns an in-memory YAXArray from it.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::YAXArray,chunks)

Resets the chunks of a YAXArray and returns a new YAXArray. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savecube on the resulting array. The chunks argument can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Cubes.subsetcubeFunction.

This function calculates a subset of a cube's data

source


# YAXArrays.DAT.InDimsType.
julia
InDims(axisdesc...;...)

Creates a description of an Input Data Cube for cube operations. Takes a single or multiple axis descriptions as first arguments. Alternatively a MovingWindow(@ref) struct can be passed to include neighbour slices of one or more axes in the computation. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

Keyword arguments

  • artype how shall the array be represented in the inner function. Defaults to Array, alternatives are DataFrame or AsAxisArray

  • filter define some filter to skip the computation, e.g. when all values are missing. Defaults to AllMissing(), possible values are AnyMissing(), AnyOcean(), StdZero(), NValid(n) (for at least n non-missing elements). It is also possible to provide a custom one-argument function that takes the array and returns true if the compuation shall be skipped and false otherwise.

  • window_oob_value if one of the input dimensions is a MowingWindow, this value will be used to fill out-of-bounds areas

source


# YAXArrays.DAT.MovingWindowType.
julia
MovingWindow(desc, pre, after)

Constructs a MovingWindow object to be passed to an InDims constructor to define that the axis in desc shall participate in the inner function (i.e. shall be looped over), but inside the inner function pre values before and after values after the center value will be passed as well.

For example passing MovingWindow("Time", 2, 0) will loop over the time axis and always pass the current time step plus the 2 previous steps. So in the inner function the array will have an additional dimension of size 3.

source


# YAXArrays.DAT.OutDimsMethod.
julia
OutDims(axisdesc;...)

Creates a description of an Output Data Cube for cube operations. Takes a single or a Vector/Tuple of axes as first argument. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

  • axisdesc: List of input axis names

  • backend : specifies the dataset backend to write data to, must be either :auto or a key in YAXArrayBase.backendlist

  • update : specifies wether the function operates inplace or if an output is returned

  • artype : specifies the Array type inside the inner function that is mapped over

  • chunksize: A Dict specifying the chunksizes for the output dimensions of the cube, or :input to copy chunksizes from input cube axes or :max to not chunk the inner dimensions

  • outtype: force the output type to a specific type, defaults to Any which means that the element type of the first input cube is used

source


# YAXArrays.DAT.CubeTableMethod.
julia
CubeTable()

Function to turn a DataCube object into an iterable table. Takes a list of as arguments, specified as a name=cube expression. For example CubeTable(data=cube1,country=cube2) would generate a Table with the entries data and country, where data contains the values of cube1 and country the values of cube2. The cubes are matched and broadcasted along their axes like in mapCube.

source


# YAXArrays.DAT.cubefittableMethod.
julia
cubefittable(tab,o,fitsym;post=getpostfunction(o),kwargs...)

Executes fittable on the CubeTable tab with the (Weighted-)OnlineStat o, looping through the values specified by fitsym. Finally, writes the results from the TableAggregator to an output data cube.

source


# YAXArrays.DAT.fittableMethod.
julia
fittable(tab,o,fitsym;by=(),weight=nothing)

Loops through an iterable table tab and thereby fitting an OnlineStat o with the values specified through fitsym. Optionally one can specify a field (or tuple) to group by. Any groupby specifier can either be a symbol denoting the entry to group by or an anynymous function calculating the group from a table row.

For example the following would caluclate a weighted mean over a cube weighted by grid cell area and grouped by country and month:

julia
fittable(iter,WeightedMean,:tair,weight=(i->abs(cosd(i.lat))),by=(i->month(i.time),:country))

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)
 
 Map a given function \`fun\` over slices of all cubes of the dataset \`ds\`. 
 Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.
 For Datasets, only one output cube can be specified.
 In contrast to the mapCube function for cubes, additional arguments for the inner function should be set as keyword arguments.
 
-For the specific keyword arguments see the docstring of the mapCube function for cubes.

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)

Map a given function fun over slices of the data cube cube. The additional arguments addargs will be forwarded to the inner function fun. Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.

Keyword arguments

  • max_cache=YAXDefaults.max_cache Float64 maximum size of blocks that are read into memory in bits e.g. max_cache=5.0e8. Or String. e.g. max_cache="10MB" ormax_cache=1GB\`\`\` defaults to approx 10Mb.

  • indims::InDims List of input cube descriptors of type InDims for each input data cube.

  • outdims::OutDims List of output cube descriptors of type OutDims for each output cube.

  • inplace does the function write to an output array inplace or return a single value> defaults to true

  • ispar boolean to determine if parallelisation should be applied, defaults to true if workers are available.

  • showprog boolean indicating if a ProgressMeter shall be shown

  • include_loopvars boolean to indicate if the varoables looped over should be added as function arguments

  • nthreads number of threads for the computation, defaults to Threads.nthreads for every worker.

  • loopchunksize determines the chunk sizes of variables which are looped over, a dict

  • kwargs additional keyword arguments are passed to the inner function

The first argument is always the function to be applied, the second is the input cube or a tuple of input cubes if needed.

source


# YAXArrays.Datasets.DatasetType.
julia
Dataset object which stores an \`OrderedDict\` of YAXArrays with Symbol keys.
+For the specific keyword arguments see the docstring of the mapCube function for cubes.

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)

Map a given function fun over slices of the data cube cube. The additional arguments addargs will be forwarded to the inner function fun. Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.

Keyword arguments

  • max_cache=YAXDefaults.max_cache Float64 maximum size of blocks that are read into memory in bits e.g. max_cache=5.0e8. Or String. e.g. max_cache="10MB" ormax_cache=1GB\`\`\` defaults to approx 10Mb.

  • indims::InDims List of input cube descriptors of type InDims for each input data cube.

  • outdims::OutDims List of output cube descriptors of type OutDims for each output cube.

  • inplace does the function write to an output array inplace or return a single value> defaults to true

  • ispar boolean to determine if parallelisation should be applied, defaults to true if workers are available.

  • showprog boolean indicating if a ProgressMeter shall be shown

  • include_loopvars boolean to indicate if the varoables looped over should be added as function arguments

  • nthreads number of threads for the computation, defaults to Threads.nthreads for every worker.

  • loopchunksize determines the chunk sizes of variables which are looped over, a dict

  • kwargs additional keyword arguments are passed to the inner function

The first argument is always the function to be applied, the second is the input cube or a tuple of input cubes if needed.

source


# YAXArrays.Datasets.DatasetType.
julia
Dataset object which stores an \`OrderedDict\` of YAXArrays with Symbol keys.
 a dictionary of CubeAxes and a Dictionary of general properties.
-A dictionary can hold cubes with differing axes. But it will share the common axes between the subcubes.

source


# YAXArrays.Datasets.DatasetMethod.

Dataset(; properties = Dict{String,Any}, cubes...)

Construct a YAXArray Dataset with global attributes properties a and a list of named YAXArrays cubes...

source


# YAXArrays.Datasets.CubeMethod.
julia
Cube(ds::Dataset; joinname="Variable")

Construct a single YAXArray from the dataset ds by concatenating the cubes in the datset on the joinname dimension.

source


# YAXArrays.Datasets.open_datasetMethod.

open_dataset(g; driver=:all)

Open the dataset at g with the given driver. The default driver will search for available drivers and tries to detect the useable driver from the filename extension.

source


# YAXArrays.Datasets.savecubeMethod.
julia
savecube(cube,name::String)

Save a YAXArray to the path.

Extended Help

The keyword arguments are:

  • name:

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • max_cache: The number of bits that are used as cache for the data handling.

  • backend: The backend, that is used to save the data. Falls back to searching the backend according to the extension of the path.

  • driver: The same setting as backend.

  • overwrite::Bool=false overwrite cube if it already exists

source


# YAXArrays.Datasets.savedatasetMethod.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


# YAXArrays.Datasets.to_datasetMethod.

to_dataset(c;datasetaxis = "Variable", layername = "layer")

Convert a Data Cube into a Dataset. It is possible to treat one of the Cube's axes as a "DatasetAxis" i.e. the cube will be split into different parts that become variables in the Dataset. If no such axis is specified or found, there will only be a single variable in the dataset with the name layername

source


Internal API

# YAXArrays.YAXDefaultsConstant.

Default configuration for YAXArrays, has the following fields:

  • workdir[]::String = "./" The default location for temporary cubes.

  • recal[]::Bool = false set to true if you want @loadOrGenerate to always recalculate the results.

  • chunksize[]::Any = :input Set the default output chunksize.

  • max_cache[]::Float64 = 1e8 The maximum cache used by mapCube.

  • cubedir[]::"" the default location for Cube() without an argument.

  • subsetextensions::Array{Any} = [] List of registered functions, that convert subsetting input into dimension boundaries.

source


# YAXArrays.findAxisMethod.
julia
findAxis(desc, c)

Internal function

Extended Help

Given an Axis description and a cube return the index of the Axis.

The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.getOutAxisMethod.
julia
getOutAxis

source


# YAXArrays.get_descriptorMethod.
julia
get_descriptor(a)

Get the descriptor of an Axis. This is used to dispatch on the descriptor.

source


# YAXArrays.match_axisMethod.
julia
match_axis

Internal function

Extended Help

Match the Axis based on the AxisDescriptor.
+A dictionary can hold cubes with differing axes. But it will share the common axes between the subcubes.

source


# YAXArrays.Datasets.DatasetMethod.

Dataset(; properties = Dict{String,Any}, cubes...)

Construct a YAXArray Dataset with global attributes properties a and a list of named YAXArrays cubes...

source


# YAXArrays.Datasets.CubeMethod.
julia
Cube(ds::Dataset; joinname="Variable")

Construct a single YAXArray from the dataset ds by concatenating the cubes in the datset on the joinname dimension.

source


# YAXArrays.Datasets.open_datasetMethod.

open_dataset(g; driver=:all)

Open the dataset at g with the given driver. The default driver will search for available drivers and tries to detect the useable driver from the filename extension.

source


# YAXArrays.Datasets.savecubeMethod.
julia
savecube(cube,name::String)

Save a YAXArray to the path.

Extended Help

The keyword arguments are:

  • name:

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • max_cache: The number of bits that are used as cache for the data handling.

  • backend: The backend, that is used to save the data. Falls back to searching the backend according to the extension of the path.

  • driver: The same setting as backend.

  • overwrite::Bool=false overwrite cube if it already exists

source


# YAXArrays.Datasets.savedatasetMethod.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


# YAXArrays.Datasets.to_datasetMethod.

to_dataset(c;datasetaxis = "Variable", layername = "layer")

Convert a Data Cube into a Dataset. It is possible to treat one of the Cube's axes as a "DatasetAxis" i.e. the cube will be split into different parts that become variables in the Dataset. If no such axis is specified or found, there will only be a single variable in the dataset with the name layername

source


Internal API

# YAXArrays.YAXDefaultsConstant.

Default configuration for YAXArrays, has the following fields:

  • workdir[]::String = "./" The default location for temporary cubes.

  • recal[]::Bool = false set to true if you want @loadOrGenerate to always recalculate the results.

  • chunksize[]::Any = :input Set the default output chunksize.

  • max_cache[]::Float64 = 1e8 The maximum cache used by mapCube.

  • cubedir[]::"" the default location for Cube() without an argument.

  • subsetextensions::Array{Any} = [] List of registered functions, that convert subsetting input into dimension boundaries.

source


# YAXArrays.findAxisMethod.
julia
findAxis(desc, c)

Internal function

Extended Help

Given an Axis description and a cube return the index of the Axis.

The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.getOutAxisMethod.
julia
getOutAxis

source


# YAXArrays.get_descriptorMethod.
julia
get_descriptor(a)

Get the descriptor of an Axis. This is used to dispatch on the descriptor.

source


# YAXArrays.match_axisMethod.
julia
match_axis

Internal function

Extended Help

Match the Axis based on the AxisDescriptor.
 This is used to find different axes and to make certain axis description the same.
-For example to disregard differences of captialisation.

source


# YAXArrays.Cubes.CleanMeType.
julia
mutable struct CleanMe

Struct which describes data paths and their persistency. Non-persistend paths/files are removed at finalize step

source


# YAXArrays.Cubes.cleanMethod.
julia
clean(c::CleanMe)

finalizer function for CleanMe struct. The main process removes all directories/files which are not persistent.

source


# YAXArrays.Cubes.copydataMethod.
julia
copydata(outar, inar, copybuf)

Internal function which copies the data from the input inar into the output outar at the copybuf positions.

source


# YAXArrays.Cubes.optifuncMethod.
julia
optifunc(s, maxbuf, incs, outcs, insize, outsize, writefac)

Internal

This function is going to be minimized to detect the best possible chunk setting for the rechunking of the data.

source


# YAXArrays.DAT.DATConfigType.

Configuration object of a DAT process. This holds all necessary information to perform the calculations. It contains the following fields:

  • incubes::Tuple{Vararg{YAXArrays.DAT.InputCube, NIN}} where NIN: The input data cubes

  • outcubes::Tuple{Vararg{YAXArrays.DAT.OutputCube, NOUT}} where NOUT: The output data cubes

  • allInAxes::Vector: List of all axes of the input cubes

  • LoopAxes::Vector: List of axes that are looped through

  • ispar::Bool: Flag whether the computation is parallelized

  • loopcachesize::Vector{Int64}:

  • allow_irregular_chunks::Bool:

  • max_cache::Any: Maximal size of the in memory cache

  • fu::Any: Inner function which is computed

  • inplace::Bool: Flag whether the computation happens in place

  • include_loopvars::Bool:

  • ntr::Any:

  • do_gc::Bool: Flag if GC should be called explicitly. Probably necessary for many runs in Julia 1.9

  • addargs::Any: Additional arguments for the inner function

  • kwargs::Any: Additional keyword arguments for the inner function

source


# YAXArrays.DAT.InputCubeType.

Internal representation of an input cube for DAT operations

  • cube: The input data

  • desc: The input description given by the user/registration

  • axesSmall: List of axes that were actually selected through the description

  • icolon

  • colonperm

  • loopinds: Indices of loop axes that this cube does not contain, i.e. broadcasts

  • cachesize: Number of elements to keep in cache along each axis

  • window

  • iwindow

  • windowloopinds

  • iall

source


# YAXArrays.DAT.OutputCubeType.

Internal representation of an output cube for DAT operations

Fields

  • cube: The actual outcube cube, once it is generated

  • cube_unpermuted: The unpermuted output cube

  • desc: The description of the output axes as given by users or registration

  • axesSmall: The list of output axes determined through the description

  • allAxes: List of all the axes of the cube

  • loopinds: Index of the loop axes that are broadcasted for this output cube

  • innerchunks

  • outtype: Elementtype of the outputcube

source


# YAXArrays.DAT.YAXColumnType.
julia
YAXColumn

A struct representing a single column of a YAXArray partitioned Table # Fields

  • inarBC

  • inds

source


# YAXArrays.DAT.cmpcachmissesMethod.

Function that compares two cache miss specifiers by their importance

source


# YAXArrays.DAT.getFrontPermMethod.

Calculate an axis permutation that brings the wanted dimensions to the front

source


# YAXArrays.DAT.getLoopCacheSizeMethod.

Calculate optimal Cache size to DAT operation

source


# YAXArrays.DAT.getOuttypeMethod.
julia
getOuttype(outtype, cdata)

Internal function

Get the element type for the output cube

source


# YAXArrays.DAT.getloopchunksMethod.
julia
getloopchunks(dc::DATConfig)

Internal function

Returns the chunks that can be looped over toghether for all dimensions.
-This computation of the size of the chunks is handled by [\`DiskArrays.approx_chunksize\`](@ref)

source


# YAXArrays.DAT.permuteloopaxesMethod.
julia
permuteloopaxes(dc)

Internal function

Permute the dimensions of the cube, so that the axes that are looped through are in the first positions. This is necessary for a faster looping through the data.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::Dataset,chunks)

Resets the chunks of all or a subset YAXArrays in the dataset and returns a new Dataset. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savedataset on the resulting array. The chunks argument can take one of the following forms:

  • a NamedTuple or AbstractDict mapping from variable name to a description of the desired variable chunks

  • a NamedTuple or AbstractDict mapping from dimension name to a description of the desired variable chunks

  • a description of the desired variable chunks applied to all members of the Dataset

where a description of the desired variable chunks can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Datasets.collectfromhandleMethod.

Extracts a YAXArray from a dataset handle that was just created from a arrayinfo

source


# YAXArrays.Datasets.createdatasetMethod.

function createdataset(DS::Type,axlist; kwargs...)

Creates a new dataset with axes specified in axlist. Each axis must be a subtype of CubeAxis. A new empty Zarr array will be created and can serve as a sink for mapCube operations.

Keyword arguments

  • path="" location where the new cube is stored

  • T=Union{Float32,Missing} data type of the target cube

  • chunksize = ntuple(i->length(axlist[i]),length(axlist)) chunk sizes of the array

  • chunkoffset = ntuple(i->0,length(axlist)) offsets of the chunks

  • persist::Bool=true shall the disk data be garbage-collected when the cube goes out of scope?

  • overwrite::Bool=false overwrite cube if it already exists

  • properties=Dict{String,Any}() additional cube properties

  • globalproperties=Dict{String,Any} global attributes to be added to the dataset

  • fillvalue= T>:Missing ? defaultfillval(Base.nonmissingtype(T)) : nothing fill value

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • layername="layer" Fallback name of the variable stored in the dataset if no datasetaxis is found

source


# YAXArrays.Datasets.getarrayinfoMethod.

Extract necessary information to create a YAXArrayBase dataset from a name and YAXArray pair

source


# YAXArrays.Datasets.testrangeMethod.

Test if data in x can be approximated by a step range

source


`,100),o=[r];function l(d,n,p,c,h,u){return s(),a("div",null,o)}const A=e(t,[["render",l]]);export{y as __pageData,A as default}; +For example to disregard differences of captialisation.

source


# YAXArrays.Cubes.CleanMeType.
julia
mutable struct CleanMe

Struct which describes data paths and their persistency. Non-persistend paths/files are removed at finalize step

source


# YAXArrays.Cubes.cleanMethod.
julia
clean(c::CleanMe)

finalizer function for CleanMe struct. The main process removes all directories/files which are not persistent.

source


# YAXArrays.Cubes.copydataMethod.
julia
copydata(outar, inar, copybuf)

Internal function which copies the data from the input inar into the output outar at the copybuf positions.

source


# YAXArrays.Cubes.optifuncMethod.
julia
optifunc(s, maxbuf, incs, outcs, insize, outsize, writefac)

Internal

This function is going to be minimized to detect the best possible chunk setting for the rechunking of the data.

source


# YAXArrays.DAT.DATConfigType.

Configuration object of a DAT process. This holds all necessary information to perform the calculations. It contains the following fields:

  • incubes::Tuple{Vararg{YAXArrays.DAT.InputCube, NIN}} where NIN: The input data cubes

  • outcubes::Tuple{Vararg{YAXArrays.DAT.OutputCube, NOUT}} where NOUT: The output data cubes

  • allInAxes::Vector: List of all axes of the input cubes

  • LoopAxes::Vector: List of axes that are looped through

  • ispar::Bool: Flag whether the computation is parallelized

  • loopcachesize::Vector{Int64}:

  • allow_irregular_chunks::Bool:

  • max_cache::Any: Maximal size of the in memory cache

  • fu::Any: Inner function which is computed

  • inplace::Bool: Flag whether the computation happens in place

  • include_loopvars::Bool:

  • ntr::Any:

  • do_gc::Bool: Flag if GC should be called explicitly. Probably necessary for many runs in Julia 1.9

  • addargs::Any: Additional arguments for the inner function

  • kwargs::Any: Additional keyword arguments for the inner function

source


# YAXArrays.DAT.InputCubeType.

Internal representation of an input cube for DAT operations

  • cube: The input data

  • desc: The input description given by the user/registration

  • axesSmall: List of axes that were actually selected through the description

  • icolon

  • colonperm

  • loopinds: Indices of loop axes that this cube does not contain, i.e. broadcasts

  • cachesize: Number of elements to keep in cache along each axis

  • window

  • iwindow

  • windowloopinds

  • iall

source


# YAXArrays.DAT.OutputCubeType.

Internal representation of an output cube for DAT operations

Fields

  • cube: The actual outcube cube, once it is generated

  • cube_unpermuted: The unpermuted output cube

  • desc: The description of the output axes as given by users or registration

  • axesSmall: The list of output axes determined through the description

  • allAxes: List of all the axes of the cube

  • loopinds: Index of the loop axes that are broadcasted for this output cube

  • innerchunks

  • outtype: Elementtype of the outputcube

source


# YAXArrays.DAT.YAXColumnType.
julia
YAXColumn

A struct representing a single column of a YAXArray partitioned Table # Fields

  • inarBC

  • inds

source


# YAXArrays.DAT.cmpcachmissesMethod.

Function that compares two cache miss specifiers by their importance

source


# YAXArrays.DAT.getFrontPermMethod.

Calculate an axis permutation that brings the wanted dimensions to the front

source


# YAXArrays.DAT.getLoopCacheSizeMethod.

Calculate optimal Cache size to DAT operation

source


# YAXArrays.DAT.getOuttypeMethod.
julia
getOuttype(outtype, cdata)

Internal function

Get the element type for the output cube

source


# YAXArrays.DAT.getloopchunksMethod.
julia
getloopchunks(dc::DATConfig)

Internal function

Returns the chunks that can be looped over toghether for all dimensions.
+This computation of the size of the chunks is handled by [\`DiskArrays.approx_chunksize\`](@ref)

source


# YAXArrays.DAT.permuteloopaxesMethod.
julia
permuteloopaxes(dc)

Internal function

Permute the dimensions of the cube, so that the axes that are looped through are in the first positions. This is necessary for a faster looping through the data.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::Dataset,chunks)

Resets the chunks of all or a subset YAXArrays in the dataset and returns a new Dataset. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savedataset on the resulting array. The chunks argument can take one of the following forms:

  • a NamedTuple or AbstractDict mapping from variable name to a description of the desired variable chunks

  • a NamedTuple or AbstractDict mapping from dimension name to a description of the desired variable chunks

  • a description of the desired variable chunks applied to all members of the Dataset

where a description of the desired variable chunks can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Datasets.collectfromhandleMethod.

Extracts a YAXArray from a dataset handle that was just created from a arrayinfo

source


# YAXArrays.Datasets.createdatasetMethod.

function createdataset(DS::Type,axlist; kwargs...)

Creates a new dataset with axes specified in axlist. Each axis must be a subtype of CubeAxis. A new empty Zarr array will be created and can serve as a sink for mapCube operations.

Keyword arguments

  • path="" location where the new cube is stored

  • T=Union{Float32,Missing} data type of the target cube

  • chunksize = ntuple(i->length(axlist[i]),length(axlist)) chunk sizes of the array

  • chunkoffset = ntuple(i->0,length(axlist)) offsets of the chunks

  • persist::Bool=true shall the disk data be garbage-collected when the cube goes out of scope?

  • overwrite::Bool=false overwrite cube if it already exists

  • properties=Dict{String,Any}() additional cube properties

  • globalproperties=Dict{String,Any} global attributes to be added to the dataset

  • fillvalue= T>:Missing ? defaultfillval(Base.nonmissingtype(T)) : nothing fill value

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • layername="layer" Fallback name of the variable stored in the dataset if no datasetaxis is found

source


# YAXArrays.Datasets.getarrayinfoMethod.

Extract necessary information to create a YAXArrayBase dataset from a name and YAXArray pair

source


# YAXArrays.Datasets.testrangeMethod.

Test if data in x can be approximated by a step range

source


`,100)]))}const u=a(r,[["render",o]]);export{b as __pageData,u as default}; diff --git a/dev/assets/api.md.DSVzzvyi.lean.js b/dev/assets/api.md.DSVzzvyi.lean.js new file mode 100644 index 00000000..0f71642d --- /dev/null +++ b/dev/assets/api.md.DSVzzvyi.lean.js @@ -0,0 +1,13 @@ +import{_ as a,c as s,a2 as i,o as t}from"./chunks/framework.Bwkmg46C.js";const b=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),r={name:"api.md"};function o(l,e,n,d,p,c){return t(),s("div",null,e[0]||(e[0]=[i(`

API Reference

This section describes all available functions of this package.

Public API

# YAXArrays.getAxisMethod.
julia
getAxis(desc, c)

Given an Axis description and a cube, returns the corresponding axis of the cube. The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.CubesModule.

The functions provided by YAXArrays are supposed to work on different types of cubes. This module defines the interface for all Data types that

source


# YAXArrays.Cubes.YAXArrayType.
julia
YAXArray{T,N}

An array labelled with named axes that have values associated with them. It can wrap normal arrays or, more typically DiskArrays.

Fields

  • axes: Tuple of Dimensions containing the Axes of the Cube

  • data: length(axes)-dimensional array which holds the data, this can be a lazy DiskArray

  • properties: Metadata properties describing the content of the data

  • chunks: Representation of the chunking of the data

  • cleaner: Cleaner objects to track which objects to tidy up when the YAXArray goes out of scope

source


# YAXArrays.Cubes.caxesFunction.

Returns the axes of a Cube

source


# YAXArrays.Cubes.caxesMethod.
julia
caxes

Embeds Cube inside a new Cube

source


# YAXArrays.Cubes.concatenatecubesMethod.
julia
function concatenateCubes(cubelist, cataxis::CategoricalAxis)

Concatenates a vector of datacubes that have identical axes to a new single cube along the new axis cataxis

source


# YAXArrays.Cubes.readcubedataMethod.
julia
readcubedata(cube)

Given any array implementing the YAXArray interface it returns an in-memory YAXArray from it.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::YAXArray,chunks)

Resets the chunks of a YAXArray and returns a new YAXArray. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savecube on the resulting array. The chunks argument can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Cubes.subsetcubeFunction.

This function calculates a subset of a cube's data

source


# YAXArrays.DAT.InDimsType.
julia
InDims(axisdesc...;...)

Creates a description of an Input Data Cube for cube operations. Takes a single or multiple axis descriptions as first arguments. Alternatively a MovingWindow(@ref) struct can be passed to include neighbour slices of one or more axes in the computation. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

Keyword arguments

  • artype how shall the array be represented in the inner function. Defaults to Array, alternatives are DataFrame or AsAxisArray

  • filter define some filter to skip the computation, e.g. when all values are missing. Defaults to AllMissing(), possible values are AnyMissing(), AnyOcean(), StdZero(), NValid(n) (for at least n non-missing elements). It is also possible to provide a custom one-argument function that takes the array and returns true if the compuation shall be skipped and false otherwise.

  • window_oob_value if one of the input dimensions is a MowingWindow, this value will be used to fill out-of-bounds areas

source


# YAXArrays.DAT.MovingWindowType.
julia
MovingWindow(desc, pre, after)

Constructs a MovingWindow object to be passed to an InDims constructor to define that the axis in desc shall participate in the inner function (i.e. shall be looped over), but inside the inner function pre values before and after values after the center value will be passed as well.

For example passing MovingWindow("Time", 2, 0) will loop over the time axis and always pass the current time step plus the 2 previous steps. So in the inner function the array will have an additional dimension of size 3.

source


# YAXArrays.DAT.OutDimsMethod.
julia
OutDims(axisdesc;...)

Creates a description of an Output Data Cube for cube operations. Takes a single or a Vector/Tuple of axes as first argument. Axes can be specified by their name (String), through an Axis type, or by passing a concrete axis.

  • axisdesc: List of input axis names

  • backend : specifies the dataset backend to write data to, must be either :auto or a key in YAXArrayBase.backendlist

  • update : specifies wether the function operates inplace or if an output is returned

  • artype : specifies the Array type inside the inner function that is mapped over

  • chunksize: A Dict specifying the chunksizes for the output dimensions of the cube, or :input to copy chunksizes from input cube axes or :max to not chunk the inner dimensions

  • outtype: force the output type to a specific type, defaults to Any which means that the element type of the first input cube is used

source


# YAXArrays.DAT.CubeTableMethod.
julia
CubeTable()

Function to turn a DataCube object into an iterable table. Takes a list of as arguments, specified as a name=cube expression. For example CubeTable(data=cube1,country=cube2) would generate a Table with the entries data and country, where data contains the values of cube1 and country the values of cube2. The cubes are matched and broadcasted along their axes like in mapCube.

source


# YAXArrays.DAT.cubefittableMethod.
julia
cubefittable(tab,o,fitsym;post=getpostfunction(o),kwargs...)

Executes fittable on the CubeTable tab with the (Weighted-)OnlineStat o, looping through the values specified by fitsym. Finally, writes the results from the TableAggregator to an output data cube.

source


# YAXArrays.DAT.fittableMethod.
julia
fittable(tab,o,fitsym;by=(),weight=nothing)

Loops through an iterable table tab and thereby fitting an OnlineStat o with the values specified through fitsym. Optionally one can specify a field (or tuple) to group by. Any groupby specifier can either be a symbol denoting the entry to group by or an anynymous function calculating the group from a table row.

For example the following would caluclate a weighted mean over a cube weighted by grid cell area and grouped by country and month:

julia
fittable(iter,WeightedMean,:tair,weight=(i->abs(cosd(i.lat))),by=(i->month(i.time),:country))

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)
+
+Map a given function \`fun\` over slices of all cubes of the dataset \`ds\`. 
+Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.
+For Datasets, only one output cube can be specified.
+In contrast to the mapCube function for cubes, additional arguments for the inner function should be set as keyword arguments.
+
+For the specific keyword arguments see the docstring of the mapCube function for cubes.

source


# YAXArrays.DAT.mapCubeMethod.
julia
mapCube(fun, cube, addargs...;kwargs...)

Map a given function fun over slices of the data cube cube. The additional arguments addargs will be forwarded to the inner function fun. Use InDims to discribe the input dimensions and OutDims to describe the output dimensions of the function.

Keyword arguments

  • max_cache=YAXDefaults.max_cache Float64 maximum size of blocks that are read into memory in bits e.g. max_cache=5.0e8. Or String. e.g. max_cache="10MB" ormax_cache=1GB\`\`\` defaults to approx 10Mb.

  • indims::InDims List of input cube descriptors of type InDims for each input data cube.

  • outdims::OutDims List of output cube descriptors of type OutDims for each output cube.

  • inplace does the function write to an output array inplace or return a single value> defaults to true

  • ispar boolean to determine if parallelisation should be applied, defaults to true if workers are available.

  • showprog boolean indicating if a ProgressMeter shall be shown

  • include_loopvars boolean to indicate if the varoables looped over should be added as function arguments

  • nthreads number of threads for the computation, defaults to Threads.nthreads for every worker.

  • loopchunksize determines the chunk sizes of variables which are looped over, a dict

  • kwargs additional keyword arguments are passed to the inner function

The first argument is always the function to be applied, the second is the input cube or a tuple of input cubes if needed.

source


# YAXArrays.Datasets.DatasetType.
julia
Dataset object which stores an \`OrderedDict\` of YAXArrays with Symbol keys.
+a dictionary of CubeAxes and a Dictionary of general properties.
+A dictionary can hold cubes with differing axes. But it will share the common axes between the subcubes.

source


# YAXArrays.Datasets.DatasetMethod.

Dataset(; properties = Dict{String,Any}, cubes...)

Construct a YAXArray Dataset with global attributes properties a and a list of named YAXArrays cubes...

source


# YAXArrays.Datasets.CubeMethod.
julia
Cube(ds::Dataset; joinname="Variable")

Construct a single YAXArray from the dataset ds by concatenating the cubes in the datset on the joinname dimension.

source


# YAXArrays.Datasets.open_datasetMethod.

open_dataset(g; driver=:all)

Open the dataset at g with the given driver. The default driver will search for available drivers and tries to detect the useable driver from the filename extension.

source


# YAXArrays.Datasets.savecubeMethod.
julia
savecube(cube,name::String)

Save a YAXArray to the path.

Extended Help

The keyword arguments are:

  • name:

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • max_cache: The number of bits that are used as cache for the data handling.

  • backend: The backend, that is used to save the data. Falls back to searching the backend according to the extension of the path.

  • driver: The same setting as backend.

  • overwrite::Bool=false overwrite cube if it already exists

source


# YAXArrays.Datasets.savedatasetMethod.

savedataset(ds::Dataset; path = "", persist = nothing, overwrite = false, append = false, skeleton=false, backend = :all, driver = backend, max_cache = 5e8, writefac=4.0)

Saves a Dataset into a file at path with the format given by driver, i.e., driver=:netcdf or driver=:zarr.

Warning

overwrite = true, deletes ALL your data and it will create a new file.

source


# YAXArrays.Datasets.to_datasetMethod.

to_dataset(c;datasetaxis = "Variable", layername = "layer")

Convert a Data Cube into a Dataset. It is possible to treat one of the Cube's axes as a "DatasetAxis" i.e. the cube will be split into different parts that become variables in the Dataset. If no such axis is specified or found, there will only be a single variable in the dataset with the name layername

source


Internal API

# YAXArrays.YAXDefaultsConstant.

Default configuration for YAXArrays, has the following fields:

  • workdir[]::String = "./" The default location for temporary cubes.

  • recal[]::Bool = false set to true if you want @loadOrGenerate to always recalculate the results.

  • chunksize[]::Any = :input Set the default output chunksize.

  • max_cache[]::Float64 = 1e8 The maximum cache used by mapCube.

  • cubedir[]::"" the default location for Cube() without an argument.

  • subsetextensions::Array{Any} = [] List of registered functions, that convert subsetting input into dimension boundaries.

source


# YAXArrays.findAxisMethod.
julia
findAxis(desc, c)

Internal function

Extended Help

Given an Axis description and a cube return the index of the Axis.

The Axis description can be:

  • the name as a string or symbol.

  • an Axis object

source


# YAXArrays.getOutAxisMethod.
julia
getOutAxis

source


# YAXArrays.get_descriptorMethod.
julia
get_descriptor(a)

Get the descriptor of an Axis. This is used to dispatch on the descriptor.

source


# YAXArrays.match_axisMethod.
julia
match_axis

Internal function

Extended Help

Match the Axis based on the AxisDescriptor.
+This is used to find different axes and to make certain axis description the same.
+For example to disregard differences of captialisation.

source


# YAXArrays.Cubes.CleanMeType.
julia
mutable struct CleanMe

Struct which describes data paths and their persistency. Non-persistend paths/files are removed at finalize step

source


# YAXArrays.Cubes.cleanMethod.
julia
clean(c::CleanMe)

finalizer function for CleanMe struct. The main process removes all directories/files which are not persistent.

source


# YAXArrays.Cubes.copydataMethod.
julia
copydata(outar, inar, copybuf)

Internal function which copies the data from the input inar into the output outar at the copybuf positions.

source


# YAXArrays.Cubes.optifuncMethod.
julia
optifunc(s, maxbuf, incs, outcs, insize, outsize, writefac)

Internal

This function is going to be minimized to detect the best possible chunk setting for the rechunking of the data.

source


# YAXArrays.DAT.DATConfigType.

Configuration object of a DAT process. This holds all necessary information to perform the calculations. It contains the following fields:

  • incubes::Tuple{Vararg{YAXArrays.DAT.InputCube, NIN}} where NIN: The input data cubes

  • outcubes::Tuple{Vararg{YAXArrays.DAT.OutputCube, NOUT}} where NOUT: The output data cubes

  • allInAxes::Vector: List of all axes of the input cubes

  • LoopAxes::Vector: List of axes that are looped through

  • ispar::Bool: Flag whether the computation is parallelized

  • loopcachesize::Vector{Int64}:

  • allow_irregular_chunks::Bool:

  • max_cache::Any: Maximal size of the in memory cache

  • fu::Any: Inner function which is computed

  • inplace::Bool: Flag whether the computation happens in place

  • include_loopvars::Bool:

  • ntr::Any:

  • do_gc::Bool: Flag if GC should be called explicitly. Probably necessary for many runs in Julia 1.9

  • addargs::Any: Additional arguments for the inner function

  • kwargs::Any: Additional keyword arguments for the inner function

source


# YAXArrays.DAT.InputCubeType.

Internal representation of an input cube for DAT operations

  • cube: The input data

  • desc: The input description given by the user/registration

  • axesSmall: List of axes that were actually selected through the description

  • icolon

  • colonperm

  • loopinds: Indices of loop axes that this cube does not contain, i.e. broadcasts

  • cachesize: Number of elements to keep in cache along each axis

  • window

  • iwindow

  • windowloopinds

  • iall

source


# YAXArrays.DAT.OutputCubeType.

Internal representation of an output cube for DAT operations

Fields

  • cube: The actual outcube cube, once it is generated

  • cube_unpermuted: The unpermuted output cube

  • desc: The description of the output axes as given by users or registration

  • axesSmall: The list of output axes determined through the description

  • allAxes: List of all the axes of the cube

  • loopinds: Index of the loop axes that are broadcasted for this output cube

  • innerchunks

  • outtype: Elementtype of the outputcube

source


# YAXArrays.DAT.YAXColumnType.
julia
YAXColumn

A struct representing a single column of a YAXArray partitioned Table # Fields

  • inarBC

  • inds

source


# YAXArrays.DAT.cmpcachmissesMethod.

Function that compares two cache miss specifiers by their importance

source


# YAXArrays.DAT.getFrontPermMethod.

Calculate an axis permutation that brings the wanted dimensions to the front

source


# YAXArrays.DAT.getLoopCacheSizeMethod.

Calculate optimal Cache size to DAT operation

source


# YAXArrays.DAT.getOuttypeMethod.
julia
getOuttype(outtype, cdata)

Internal function

Get the element type for the output cube

source


# YAXArrays.DAT.getloopchunksMethod.
julia
getloopchunks(dc::DATConfig)

Internal function

Returns the chunks that can be looped over toghether for all dimensions.
+This computation of the size of the chunks is handled by [\`DiskArrays.approx_chunksize\`](@ref)

source


# YAXArrays.DAT.permuteloopaxesMethod.
julia
permuteloopaxes(dc)

Internal function

Permute the dimensions of the cube, so that the axes that are looped through are in the first positions. This is necessary for a faster looping through the data.

source


# YAXArrays.Cubes.setchunksMethod.
julia
setchunks(c::Dataset,chunks)

Resets the chunks of all or a subset YAXArrays in the dataset and returns a new Dataset. Note that this will not change the chunking of the underlying data itself, it will just make the data "look" like it had a different chunking. If you need a persistent on-disk representation of this chunking, use savedataset on the resulting array. The chunks argument can take one of the following forms:

  • a NamedTuple or AbstractDict mapping from variable name to a description of the desired variable chunks

  • a NamedTuple or AbstractDict mapping from dimension name to a description of the desired variable chunks

  • a description of the desired variable chunks applied to all members of the Dataset

where a description of the desired variable chunks can take one of the following forms:

  • a DiskArrays.GridChunks object

  • a tuple specifying the chunk size along each dimension

  • an AbstractDict or NamedTuple mapping one or more axis names to chunk sizes

source


# YAXArrays.Datasets.collectfromhandleMethod.

Extracts a YAXArray from a dataset handle that was just created from a arrayinfo

source


# YAXArrays.Datasets.createdatasetMethod.

function createdataset(DS::Type,axlist; kwargs...)

Creates a new dataset with axes specified in axlist. Each axis must be a subtype of CubeAxis. A new empty Zarr array will be created and can serve as a sink for mapCube operations.

Keyword arguments

  • path="" location where the new cube is stored

  • T=Union{Float32,Missing} data type of the target cube

  • chunksize = ntuple(i->length(axlist[i]),length(axlist)) chunk sizes of the array

  • chunkoffset = ntuple(i->0,length(axlist)) offsets of the chunks

  • persist::Bool=true shall the disk data be garbage-collected when the cube goes out of scope?

  • overwrite::Bool=false overwrite cube if it already exists

  • properties=Dict{String,Any}() additional cube properties

  • globalproperties=Dict{String,Any} global attributes to be added to the dataset

  • fillvalue= T>:Missing ? defaultfillval(Base.nonmissingtype(T)) : nothing fill value

  • datasetaxis="Variable" special treatment of a categorical axis that gets written into separate zarr arrays

  • layername="layer" Fallback name of the variable stored in the dataset if no datasetaxis is found

source


# YAXArrays.Datasets.getarrayinfoMethod.

Extract necessary information to create a YAXArrayBase dataset from a name and YAXArray pair

source


# YAXArrays.Datasets.testrangeMethod.

Test if data in x can be approximated by a step range

source


`,100)]))}const u=a(r,[["render",o]]);export{b as __pageData,u as default}; diff --git a/dev/assets/api.md.DU-CSbKR.lean.js b/dev/assets/api.md.DU-CSbKR.lean.js deleted file mode 100644 index ada991bc..00000000 --- a/dev/assets/api.md.DU-CSbKR.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as s,a4 as i}from"./chunks/framework._h4tgM90.js";const y=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),t={name:"api.md"},r=i("",100),o=[r];function l(d,n,p,c,h,u){return s(),a("div",null,o)}const A=e(t,[["render",l]]);export{y as __pageData,A as default}; diff --git a/dev/assets/app.CpfmI-U1.js b/dev/assets/app.CpfmI-U1.js deleted file mode 100644 index 64522beb..00000000 --- a/dev/assets/app.CpfmI-U1.js +++ /dev/null @@ -1 +0,0 @@ -import{R as p}from"./chunks/theme.CwYulWfl.js";import{U as o,a8 as u,a9 as c,aa as l,ab as f,ac as d,ad as m,ae as h,af as g,ag as A,ah as y,d as P,u as v,y as w,x as C,ai as R,aj as b,ak as E,a7 as S}from"./chunks/framework._h4tgM90.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(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function j(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),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:h}),{app:a,router:e,data:t}}function x(){return g(T)}function D(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{j as createApp}; diff --git a/dev/assets/app.Zoy_fPy7.js b/dev/assets/app.Zoy_fPy7.js new file mode 100644 index 00000000..abe7ed57 --- /dev/null +++ b/dev/assets/app.Zoy_fPy7.js @@ -0,0 +1 @@ +import{R as p}from"./chunks/theme.o12TANz8.js";import{R as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a5 as S}from"./chunks/framework.Bwkmg46C.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(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),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:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/dev/assets/ngaxsqo.B7KFIfDV.jpeg b/dev/assets/cgfvxvy.B7KFIfDV.jpeg similarity index 100% rename from dev/assets/ngaxsqo.B7KFIfDV.jpeg rename to dev/assets/cgfvxvy.B7KFIfDV.jpeg diff --git a/dev/assets/chunks/@localSearchIndexroot.CbO3e_5G.js b/dev/assets/chunks/@localSearchIndexroot.CbO3e_5G.js deleted file mode 100644 index 8cee7aaf..00000000 --- a/dev/assets/chunks/@localSearchIndexroot.CbO3e_5G.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":90,"nextId":90,"documentIds":{"0":"/YAXArrays.jl/dev/UserGuide/cache.html#Caching-YAXArrays","1":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunk-YAXArrays","2":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunking-YAXArrays","3":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunking-Datasets","4":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-Chunks-by-Axis","5":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-chunking-by-Variable","6":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-chunking-for-all-variables","7":"/YAXArrays.jl/dev/UserGuide/combine.html#Combine-YAXArrays","8":"/YAXArrays.jl/dev/UserGuide/combine.html#cat-along-an-existing-dimension","9":"/YAXArrays.jl/dev/UserGuide/combine.html#concatenatecubes-to-a-new-dimension","10":"/YAXArrays.jl/dev/UserGuide/compute.html#Compute-YAXArrays","11":"/YAXArrays.jl/dev/UserGuide/compute.html#Modify-elements-of-a-YAXArray","12":"/YAXArrays.jl/dev/UserGuide/compute.html#arithmetics","13":"/YAXArrays.jl/dev/UserGuide/compute.html#map","14":"/YAXArrays.jl/dev/UserGuide/compute.html#mapslices","15":"/YAXArrays.jl/dev/UserGuide/compute.html#mapCube","16":"/YAXArrays.jl/dev/UserGuide/compute.html#Distributed-Computation","17":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-YAXArrays","18":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-Base.Array","19":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-Raster","20":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-DimArray","21":"/YAXArrays.jl/dev/UserGuide/create.html#Create-YAXArrays-and-Datasets","22":"/YAXArrays.jl/dev/UserGuide/create.html#Create-a-YAXArray","23":"/YAXArrays.jl/dev/UserGuide/create.html#Create-a-Dataset","24":"/YAXArrays.jl/dev/UserGuide/faq.html#Frequently-Asked-Questions-(FAQ)","25":"/YAXArrays.jl/dev/UserGuide/faq.html#Extract-the-axes-names-from-a-Cube","26":"/YAXArrays.jl/dev/UserGuide/faq.html#Obtain-values-from-axes-and-data-from-the-cube","27":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-concatenate-cubes","28":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-subset-a-YAXArray-(-Cube-)-or-Dataset?","29":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-YAXArray","30":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset","31":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset-whose-variables-share-all-their-dimensions","32":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset-whose-variables-share-some-but-not-all-of-their-dimensions","33":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-apply-map-algebra?","34":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-use-the-CubeTable-function?","35":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-assing-variable-names-to-YAXArrays-in-a-Dataset","36":"/YAXArrays.jl/dev/UserGuide/faq.html#One-variable-name","37":"/YAXArrays.jl/dev/UserGuide/faq.html#Multiple-variable-names","38":"/YAXArrays.jl/dev/UserGuide/read.html#Read-YAXArrays-and-Datasets","39":"/YAXArrays.jl/dev/UserGuide/read.html#Read-Zarr","40":"/YAXArrays.jl/dev/UserGuide/read.html#Read-NetCDF","41":"/YAXArrays.jl/dev/UserGuide/read.html#Read-GDAL-(GeoTIFF,-GeoJSON)","42":"/YAXArrays.jl/dev/UserGuide/group.html#Group-YAXArrays-and-Datasets","43":"/YAXArrays.jl/dev/UserGuide/group.html#Seasonal-Averages-from-Time-Series-of-Monthly-Means","44":"/YAXArrays.jl/dev/UserGuide/group.html#Download-the-data","45":"/YAXArrays.jl/dev/UserGuide/group.html#GroupBy:-seasons","46":"/YAXArrays.jl/dev/UserGuide/group.html#dropdims","47":"/YAXArrays.jl/dev/UserGuide/group.html#seasons","48":"/YAXArrays.jl/dev/UserGuide/group.html#GroupBy:-weight","49":"/YAXArrays.jl/dev/UserGuide/group.html#weights","50":"/YAXArrays.jl/dev/UserGuide/group.html#weighted-seasons","51":"/YAXArrays.jl/dev/UserGuide/select.html#Select-YAXArrays-and-Datasets","52":"/YAXArrays.jl/dev/UserGuide/select.html#Select-a-YAXArray","53":"/YAXArrays.jl/dev/UserGuide/select.html#Select-elements","54":"/YAXArrays.jl/dev/UserGuide/select.html#Select-ranges","55":"/YAXArrays.jl/dev/UserGuide/select.html#Closed-and-open-intervals","56":"/YAXArrays.jl/dev/UserGuide/select.html#Get-a-dimension","57":"/YAXArrays.jl/dev/UserGuide/types.html#types","58":"/YAXArrays.jl/dev/UserGuide/types.html#yaxarray","59":"/YAXArrays.jl/dev/UserGuide/types.html#dataset","60":"/YAXArrays.jl/dev/UserGuide/types.html#(Data)-Cube","61":"/YAXArrays.jl/dev/UserGuide/types.html#dimension","62":"/YAXArrays.jl/dev/UserGuide/write.html#Write-YAXArrays-and-Datasets","63":"/YAXArrays.jl/dev/UserGuide/write.html#Write-Zarr","64":"/YAXArrays.jl/dev/UserGuide/write.html#Write-NetCDF","65":"/YAXArrays.jl/dev/UserGuide/write.html#Overwrite-a-Dataset","66":"/YAXArrays.jl/dev/UserGuide/write.html#Append-to-a-Dataset","67":"/YAXArrays.jl/dev/UserGuide/write.html#Save-Skeleton","68":"/YAXArrays.jl/dev/development/contribute.html#Contribute-to-YAXArrays.jl","69":"/YAXArrays.jl/dev/development/contribute.html#Contribute-to-Documentation","70":"/YAXArrays.jl/dev/development/contribute.html#Build-docs-locally","71":"/YAXArrays.jl/dev/api.html#API-Reference","72":"/YAXArrays.jl/dev/api.html#Public-API","73":"/YAXArrays.jl/dev/api.html#Internal-API","74":"/YAXArrays.jl/dev/get_started.html#Getting-Started","75":"/YAXArrays.jl/dev/get_started.html#installation","76":"/YAXArrays.jl/dev/get_started.html#quickstart","77":"/YAXArrays.jl/dev/get_started.html#updates","78":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Mean-Seasonal-Cycle-for-a-single-pixel","79":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Define-the-cube","80":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Plot-results:-mean-seasonal-cycle","81":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Other-tutorials","82":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#General-overview-of-the-functionality-of-YAXArrays","83":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Table-style-iteration-over-YAXArrays","84":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Combining-multiple-tiff-files-into-a-zarr-based-datacube","85":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Plotting-maps","86":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Heatmap-plot","87":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Wintri-Projection","88":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Moll-projection","89":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#3D-sphere-plot"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,86],"1":[2,1,58],"2":[2,2,57],"3":[2,2,9],"4":[4,4,72],"5":[4,4,72],"6":[5,4,81],"7":[2,1,31],"8":[5,2,80],"9":[5,2,89],"10":[2,1,117],"11":[5,2,30],"12":[1,2,70],"13":[1,2,118],"14":[1,2,88],"15":[1,2,261],"16":[2,2,138],"17":[2,1,52],"18":[3,2,84],"19":[2,2,116],"20":[2,2,120],"21":[4,1,14],"22":[3,4,106],"23":[3,4,45],"24":[5,1,19],"25":[7,5,75],"26":[8,5,76],"27":[5,5,87],"28":[10,5,33],"29":[3,14,144],"30":[3,14,18],"31":[9,14,69],"32":[13,14,152],"33":[7,5,112],"34":[8,5,175],"35":[11,5,1],"36":[3,15,24],"37":[3,15,32],"38":[4,1,14],"39":[2,4,184],"40":[2,4,206],"41":[5,4,38],"42":[4,1,23],"43":[8,4,35],"44":[3,4,67],"45":[2,4,136],"46":[1,6,102],"47":[1,6,49],"48":[2,4,107],"49":[1,6,87],"50":[2,6,349],"51":[4,1,165],"52":[3,4,106],"53":[2,4,117],"54":[2,4,131],"55":[4,4,144],"56":[3,4,73],"57":[1,1,16],"58":[1,1,113],"59":[1,1,78],"60":[3,1,70],"61":[1,1,32],"62":[4,1,146],"63":[2,4,19],"64":[2,4,20],"65":[3,4,80],"66":[4,4,153],"67":[2,4,117],"68":[4,1,15],"69":[3,4,40],"70":[3,5,75],"71":[2,1,10],"72":[2,2,559],"73":[2,2,467],"74":[2,1,1],"75":[1,2,34],"76":[1,2,196],"77":[1,2,49],"78":[7,1,73],"79":[3,7,132],"80":[5,7,48],"81":[2,1,49],"82":[6,2,12],"83":[5,2,38],"84":[9,2,1],"85":[2,1,132],"86":[2,2,21],"87":[2,1,46],"88":[2,2,33],"89":[3,2,57]},"averageFieldLength":[3.422222222222222,3.633333333333332,89.73333333333335],"storedFields":{"0":{"title":"Caching YAXArrays","titles":[]},"1":{"title":"Chunk YAXArrays","titles":[]},"2":{"title":"Chunking YAXArrays","titles":["Chunk YAXArrays"]},"3":{"title":"Chunking Datasets","titles":["Chunk YAXArrays"]},"4":{"title":"Set Chunks by Axis","titles":["Chunk YAXArrays","Chunking Datasets"]},"5":{"title":"Set chunking by Variable","titles":["Chunk YAXArrays","Chunking Datasets"]},"6":{"title":"Set chunking for all variables","titles":["Chunk YAXArrays","Chunking Datasets"]},"7":{"title":"Combine YAXArrays","titles":[]},"8":{"title":"cat along an existing dimension","titles":["Combine YAXArrays"]},"9":{"title":"concatenatecubes to a new dimension","titles":["Combine YAXArrays"]},"10":{"title":"Compute YAXArrays","titles":[]},"11":{"title":"Modify elements of a YAXArray","titles":["Compute YAXArrays"]},"12":{"title":"Arithmetics","titles":["Compute YAXArrays"]},"13":{"title":"map","titles":["Compute YAXArrays"]},"14":{"title":"mapslices","titles":["Compute YAXArrays"]},"15":{"title":"mapCube","titles":["Compute YAXArrays"]},"16":{"title":"Distributed Computation","titles":["Compute YAXArrays"]},"17":{"title":"Convert YAXArrays","titles":[]},"18":{"title":"Convert Base.Array","titles":["Convert YAXArrays"]},"19":{"title":"Convert Raster","titles":["Convert YAXArrays"]},"20":{"title":"Convert DimArray","titles":["Convert YAXArrays"]},"21":{"title":"Create YAXArrays and Datasets","titles":[]},"22":{"title":"Create a YAXArray","titles":["Create YAXArrays and Datasets"]},"23":{"title":"Create a Dataset","titles":["Create YAXArrays and Datasets"]},"24":{"title":"Frequently Asked Questions (FAQ)","titles":[]},"25":{"title":"Extract the axes names from a Cube","titles":["Frequently Asked Questions (FAQ)"]},"26":{"title":"Obtain values from axes and data from the cube","titles":["Frequently Asked Questions (FAQ)"]},"27":{"title":"How do I concatenate cubes","titles":["Frequently Asked Questions (FAQ)"]},"28":{"title":"How do I subset a YAXArray ( Cube ) or Dataset?","titles":["Frequently Asked Questions (FAQ)"]},"29":{"title":"Subsetting a YAXArray","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?"]},"30":{"title":"Subsetting a Dataset","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?"]},"31":{"title":"Subsetting a Dataset whose variables share all their dimensions","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?","Subsetting a Dataset"]},"32":{"title":"Subsetting a Dataset whose variables share some but not all of their dimensions","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?","Subsetting a Dataset"]},"33":{"title":"How do I apply map algebra?","titles":["Frequently Asked Questions (FAQ)"]},"34":{"title":"How do I use the CubeTable function?","titles":["Frequently Asked Questions (FAQ)"]},"35":{"title":"How do I assing variable names to YAXArrays in a Dataset","titles":["Frequently Asked Questions (FAQ)"]},"36":{"title":"One variable name","titles":["Frequently Asked Questions (FAQ)","How do I assing variable names to YAXArrays in a Dataset"]},"37":{"title":"Multiple variable names","titles":["Frequently Asked Questions (FAQ)","How do I assing variable names to YAXArrays in a Dataset"]},"38":{"title":"Read YAXArrays and Datasets","titles":[]},"39":{"title":"Read Zarr","titles":["Read YAXArrays and Datasets"]},"40":{"title":"Read NetCDF","titles":["Read YAXArrays and Datasets"]},"41":{"title":"Read GDAL (GeoTIFF, GeoJSON)","titles":["Read YAXArrays and Datasets"]},"42":{"title":"Group YAXArrays and Datasets","titles":[]},"43":{"title":"Seasonal Averages from Time Series of Monthly Means","titles":["Group YAXArrays and Datasets"]},"44":{"title":"Download the data","titles":["Group YAXArrays and Datasets"]},"45":{"title":"GroupBy: seasons","titles":["Group YAXArrays and Datasets"]},"46":{"title":"dropdims","titles":["Group YAXArrays and Datasets","GroupBy: seasons"]},"47":{"title":"seasons","titles":["Group YAXArrays and Datasets","GroupBy: seasons"]},"48":{"title":"GroupBy: weight","titles":["Group YAXArrays and Datasets"]},"49":{"title":"weights","titles":["Group YAXArrays and Datasets","GroupBy: weight"]},"50":{"title":"weighted seasons","titles":["Group YAXArrays and Datasets","GroupBy: weight"]},"51":{"title":"Select YAXArrays and Datasets","titles":[]},"52":{"title":"Select a YAXArray","titles":["Select YAXArrays and Datasets"]},"53":{"title":"Select elements","titles":["Select YAXArrays and Datasets"]},"54":{"title":"Select ranges","titles":["Select YAXArrays and Datasets"]},"55":{"title":"Closed and open intervals","titles":["Select YAXArrays and Datasets"]},"56":{"title":"Get a dimension","titles":["Select YAXArrays and Datasets"]},"57":{"title":"Types","titles":[]},"58":{"title":"YAXArray","titles":["Types"]},"59":{"title":"Dataset","titles":["Types"]},"60":{"title":"(Data) Cube","titles":["Types"]},"61":{"title":"Dimension","titles":["Types"]},"62":{"title":"Write YAXArrays and Datasets","titles":[]},"63":{"title":"Write Zarr","titles":["Write YAXArrays and Datasets"]},"64":{"title":"Write NetCDF","titles":["Write YAXArrays and Datasets"]},"65":{"title":"Overwrite a Dataset","titles":["Write YAXArrays and Datasets"]},"66":{"title":"Append to a Dataset","titles":["Write YAXArrays and Datasets"]},"67":{"title":"Save Skeleton","titles":["Write YAXArrays and Datasets"]},"68":{"title":"Contribute to YAXArrays.jl","titles":[]},"69":{"title":"Contribute to Documentation","titles":["Contribute to YAXArrays.jl"]},"70":{"title":"Build docs locally","titles":["Contribute to YAXArrays.jl","Contribute to Documentation"]},"71":{"title":"API Reference","titles":[]},"72":{"title":"Public API","titles":["API Reference"]},"73":{"title":"Internal API","titles":["API Reference"]},"74":{"title":"Getting Started","titles":[]},"75":{"title":"Installation","titles":["Getting Started"]},"76":{"title":"Quickstart","titles":["Getting Started"]},"77":{"title":"Updates","titles":["Getting Started"]},"78":{"title":"Mean Seasonal Cycle for a single pixel","titles":[]},"79":{"title":"Define the cube","titles":["Mean Seasonal Cycle for a single pixel"]},"80":{"title":"Plot results: mean seasonal cycle","titles":["Mean Seasonal Cycle for a single pixel"]},"81":{"title":"Other tutorials","titles":[]},"82":{"title":"General overview of the functionality of YAXArrays","titles":["Other tutorials"]},"83":{"title":"Table-style iteration over YAXArrays","titles":["Other tutorials"]},"84":{"title":"Combining multiple tiff files into a zarr based datacube","titles":["Other tutorials"]},"85":{"title":"Plotting maps","titles":[]},"86":{"title":"Heatmap plot","titles":["Plotting maps"]},"87":{"title":"Wintri Projection","titles":[]},"88":{"title":"Moll projection","titles":["Wintri Projection"]},"89":{"title":"3D sphere plot","titles":["Wintri Projection"]}},"dirtCount":0,"index":[["δlon",{"2":{"87":1}}],["`diskarrays",{"2":{"73":1}}],["`ds`",{"2":{"72":1}}],["`ordereddict`",{"2":{"72":1}}],["`fun`",{"2":{"72":1}}],["`a",{"2":{"29":1}}],["quickstart",{"0":{"76":1}}],["query",{"2":{"51":1}}],["questions",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1}}],["quot",{"2":{"34":2,"65":2,"67":2,"72":16,"73":12}}],["π",{"2":{"33":2,"78":1,"80":1}}],[">var",{"2":{"79":1}}],[">dates",{"2":{"79":1}}],[">month",{"2":{"72":1}}],[">abs",{"2":{"72":1}}],[">=",{"2":{"32":4}}],[">",{"2":{"32":2,"33":2,"79":1}}],["└──────────────────────────────────────────────────────────┘",{"2":{"29":1}}],["└────────────────────────────────────────────────────────────┘",{"2":{"26":1}}],["└─────────────────────────────────────────────────────────────┘",{"2":{"19":2}}],["└────────────────────────────────────────────────────────────────────┘",{"2":{"34":1}}],["└──────────────────────────────────────────────────────────────────────┘",{"2":{"22":1,"25":1,"67":1}}],["└────────────────────────────────────────────────────────────────────────────────┘",{"2":{"53":1}}],["└──────────────────────────────────────────────────────────────────────────────┘",{"2":{"10":1,"12":1,"13":1,"14":2,"15":4,"22":1,"27":1,"29":4,"33":3,"34":1,"39":1,"40":1,"45":2,"46":1,"48":3,"49":2,"50":3,"52":2,"53":2,"54":3,"55":5,"76":1,"79":1}}],["└───────────────────────────────────────────────────────────────────────┘",{"2":{"8":1,"34":1}}],["└─────────────────────────────────────────────────────────────────────┘",{"2":{"18":1,"76":1}}],["└──────────────────────────────────────────────────────────────────┘",{"2":{"20":2}}],["└────────────────────────────────────────────────────────────────┘",{"2":{"9":1}}],["⬔",{"2":{"27":1,"76":1}}],["j",{"2":{"50":8}}],["jan",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["joinname",{"2":{"72":1}}],["joinname=",{"2":{"72":1}}],["joe",{"2":{"43":1,"50":1}}],["journal",{"2":{"40":1,"51":1,"62":1,"66":1}}],["jj+1",{"2":{"40":1,"51":1,"62":1,"66":1}}],["jj",{"2":{"40":1,"51":1,"62":1,"66":1}}],["jl",{"0":{"68":1},"1":{"69":1,"70":1},"2":{"19":1,"20":1,"34":1,"44":1,"50":1,"58":1,"61":1,"68":1,"70":2,"75":1,"76":2,"77":3,"83":1}}],["jul",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["juliaδlon",{"2":{"87":1}}],["juliaglmakie",{"2":{"86":1}}],["juliagetloopchunks",{"2":{"73":1}}],["juliagetouttype",{"2":{"73":1}}],["juliagetoutaxis",{"2":{"73":1}}],["juliaget",{"2":{"73":1}}],["juliagetaxis",{"2":{"72":1}}],["juliax",{"2":{"78":1}}],["juliapkg>",{"2":{"75":1,"77":1}}],["juliapermuteloopaxes",{"2":{"73":1}}],["juliaoptifunc",{"2":{"73":1}}],["juliaoutdims",{"2":{"72":1}}],["juliaoffset",{"2":{"13":1}}],["juliaindims",{"2":{"72":1}}],["juliaimport",{"2":{"14":1,"75":1}}],["juliacopydata",{"2":{"73":1}}],["juliacollect",{"2":{"26":1,"56":1}}],["juliaclean",{"2":{"73":1}}],["juliacube",{"2":{"72":1}}],["juliacubefittable",{"2":{"72":1}}],["juliacubetable",{"2":{"72":1}}],["juliacaxes",{"2":{"72":1}}],["juliasavecube",{"2":{"72":1}}],["juliasavedataset",{"2":{"63":1,"64":1,"65":1}}],["juliasetchunks",{"2":{"72":1,"73":1}}],["juliaseasons",{"2":{"47":1}}],["julialon",{"2":{"85":1}}],["julialookup",{"2":{"56":1}}],["julialatitudes",{"2":{"32":1}}],["juliawith",{"2":{"50":1}}],["julia>",{"2":{"50":1,"70":1,"79":1}}],["juliaurl",{"2":{"44":1}}],["juliausing",{"2":{"0":1,"2":1,"4":1,"5":1,"6":1,"8":1,"9":1,"10":1,"15":1,"16":2,"18":1,"19":1,"20":1,"22":2,"25":1,"27":1,"29":1,"31":1,"32":1,"34":2,"39":1,"40":1,"41":1,"42":1,"50":1,"51":1,"53":1,"55":1,"62":1,"63":1,"64":1,"67":1,"76":2,"78":1,"85":1,"89":1}}],["juliakeylist",{"2":{"37":1}}],["juliaylonlat",{"2":{"29":1}}],["juliaytime3",{"2":{"29":1}}],["juliaytime2",{"2":{"29":1}}],["juliaytime",{"2":{"29":1}}],["juliay",{"2":{"29":1}}],["juliayaxcolumn",{"2":{"73":1}}],["juliayaxarray",{"2":{"72":1}}],["juliayax",{"2":{"0":1}}],["juliatos",{"2":{"52":2,"53":2,"54":3,"55":1,"56":1}}],["juliatempo",{"2":{"48":1}}],["juliat",{"2":{"29":1,"34":1,"78":1}}],["juliajulia>",{"2":{"25":3,"26":1,"27":1,"33":3,"34":3,"36":1,"37":1,"45":2,"46":1,"48":2,"49":2,"50":3,"55":4,"66":1,"67":1,"79":2,"85":3}}],["juliadataset",{"2":{"72":1}}],["juliadata3",{"2":{"23":1}}],["juliads2",{"2":{"66":1}}],["juliads",{"2":{"31":1,"32":1,"39":1,"40":1}}],["juliadim",{"2":{"20":1}}],["juliadimarray",{"2":{"15":1}}],["juliareadcubedata",{"2":{"72":1}}],["juliaregions",{"2":{"15":2}}],["juliar",{"2":{"67":1}}],["juliaras2",{"2":{"19":1}}],["juliamutable",{"2":{"73":1}}],["juliamatch",{"2":{"73":1}}],["juliamapcube",{"2":{"72":2}}],["juliamapslices",{"2":{"14":1,"16":1}}],["juliamovingwindow",{"2":{"72":1}}],["juliamean",{"2":{"50":1}}],["juliam2",{"2":{"18":1}}],["julia",{"2":{"17":1,"70":1,"73":1,"75":2,"77":2}}],["juliavector",{"2":{"15":1}}],["juliaall",{"2":{"67":1}}],["juliaaxs",{"2":{"44":1}}],["juliaaxes",{"2":{"29":1}}],["juliaa2",{"2":{"12":2,"22":2,"76":1}}],["juliaa",{"2":{"2":1,"11":3}}],["juliafig",{"2":{"78":1,"80":1,"87":1,"88":1}}],["juliafindaxis",{"2":{"73":1}}],["juliafittable",{"2":{"72":2}}],["juliafunction",{"2":{"45":1,"72":1,"79":1}}],["juliaf",{"2":{"2":1,"4":1,"5":1,"6":1}}],["jun",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["jussieu",{"2":{"40":1,"51":1,"62":1,"66":1}}],["just",{"2":{"15":1,"58":1,"60":1,"72":1,"73":2}}],["∘",{"2":{"16":1}}],["|>",{"2":{"15":2}}],["⋱",{"2":{"15":1}}],["⋮",{"2":{"15":2,"56":1,"79":1}}],["996559",{"2":{"76":1}}],["997411",{"2":{"76":1}}],["953996",{"2":{"76":1}}],["953172",{"2":{"20":1}}],["95",{"2":{"50":1}}],["959",{"2":{"50":1}}],["979973",{"2":{"76":1}}],["979944",{"2":{"20":1}}],["97649",{"2":{"50":1}}],["97047",{"2":{"50":1}}],["915389",{"2":{"76":1}}],["9192",{"2":{"50":1}}],["919695",{"2":{"18":1}}],["91",{"2":{"25":1,"55":5}}],["986",{"2":{"50":1}}],["98",{"2":{"32":6}}],["987524",{"2":{"20":1}}],["989218",{"2":{"19":1}}],["932458",{"2":{"76":1}}],["9362",{"2":{"50":1}}],["93743",{"2":{"50":1}}],["9375",{"2":{"39":2,"85":1}}],["937779",{"2":{"20":1}}],["939528",{"2":{"19":1}}],["943401",{"2":{"76":1}}],["9432",{"2":{"45":1,"46":1}}],["94534",{"2":{"50":1}}],["9404",{"2":{"45":1,"46":1}}],["940483",{"2":{"19":1}}],["946524",{"2":{"20":1}}],["90528",{"2":{"76":1}}],["90712",{"2":{"50":1}}],["907052",{"2":{"19":1}}],["90365",{"2":{"50":1}}],["903682",{"2":{"15":1}}],["90",{"2":{"32":2,"55":5}}],["926123",{"2":{"15":1}}],["9",{"2":{"15":2,"26":1,"29":1,"48":4,"54":4,"73":1}}],["965427",{"2":{"76":1}}],["9682",{"2":{"45":1,"46":1}}],["96x71x19",{"2":{"40":1,"51":1,"62":1,"66":1}}],["96f0",{"2":{"40":1,"51":1,"62":1}}],["961872",{"2":{"20":1}}],["960",{"2":{"15":1}}],["96",{"2":{"8":1,"9":1,"53":2,"66":1}}],["821934",{"2":{"76":1}}],["82",{"2":{"56":1}}],["87",{"2":{"56":1}}],["87705",{"2":{"50":1}}],["878439",{"2":{"15":1}}],["80759",{"2":{"50":1}}],["80",{"2":{"32":2}}],["800",{"2":{"26":1,"29":1,"67":1}}],["885742",{"2":{"76":1}}],["88",{"2":{"27":1,"39":4,"56":1,"76":1,"85":2}}],["86",{"2":{"56":1}}],["86457",{"2":{"50":1}}],["868584",{"2":{"20":1}}],["861747",{"2":{"15":1}}],["817761",{"2":{"76":1}}],["81",{"2":{"22":1,"56":1}}],["810681",{"2":{"20":1}}],["810228",{"2":{"19":1}}],["813157",{"2":{"20":1}}],["84",{"2":{"56":1}}],["840873",{"2":{"19":1}}],["848549",{"2":{"18":1}}],["848547",{"2":{"15":1}}],["89118",{"2":{"76":1}}],["89122",{"2":{"19":1}}],["8984",{"2":{"50":1}}],["89237",{"2":{"50":1}}],["892941",{"2":{"19":1}}],["89",{"2":{"39":4,"40":2,"51":1,"52":2,"53":1,"54":1,"55":5,"56":1,"62":1,"66":1,"85":2}}],["896249",{"2":{"19":1}}],["896381",{"2":{"15":1}}],["894856",{"2":{"19":1}}],["835697",{"2":{"76":1}}],["83",{"2":{"56":1}}],["836565",{"2":{"18":1}}],["839119",{"2":{"18":1}}],["85927",{"2":{"76":1}}],["859691",{"2":{"76":1}}],["85",{"2":{"56":1,"87":1,"88":1}}],["850",{"2":{"50":1}}],["85ºn",{"2":{"32":1}}],["858738",{"2":{"18":1}}],["856547",{"2":{"18":1}}],["854262",{"2":{"15":1}}],["85714",{"2":{"15":1}}],["8",{"2":{"15":2,"26":1,"29":1,"32":6,"40":2,"51":1,"52":2,"62":1,"66":1,"79":1}}],["v",{"2":{"40":1,"51":1,"62":1,"66":1}}],["v1",{"2":{"40":2,"51":2,"62":2,"66":2,"75":1}}],["vol",{"2":{"40":1,"51":1,"62":1,"66":1}}],["v20190710",{"2":{"39":1,"85":2}}],["video",{"2":{"81":1}}],["videos",{"2":{"81":1}}],["visualization",{"2":{"34":1}}],["vice",{"2":{"17":1}}],["view",{"2":{"15":1,"76":1}}],["verify",{"2":{"49":1}}],["version",{"2":{"39":1,"40":1,"51":1,"62":1,"66":1,"77":2,"85":1}}],["versa",{"2":{"17":1}}],["very",{"2":{"13":1,"34":1,"58":1}}],["vector",{"2":{"15":4,"26":1,"45":1,"47":1,"48":2,"49":3,"50":2,"56":1,"58":1,"72":2,"73":3}}],["val",{"2":{"26":2,"56":1}}],["vals",{"2":{"15":1}}],["value",{"2":{"12":1,"14":3,"33":1,"40":1,"52":2,"53":3,"54":3,"55":5,"72":4,"73":1}}],["values=ds1",{"2":{"34":1}}],["values",{"0":{"26":1},"2":{"9":1,"15":2,"21":1,"22":2,"25":3,"26":1,"32":3,"34":4,"54":1,"56":2,"58":1,"59":1,"67":1,"72":9,"76":1,"85":1}}],["vararg",{"2":{"73":2}}],["varoables",{"2":{"72":1}}],["variant",{"2":{"39":1,"85":1}}],["variable=at",{"2":{"76":1}}],["variable",{"0":{"5":1,"35":1,"36":1,"37":1},"1":{"36":1,"37":1},"2":{"5":1,"9":3,"32":3,"39":1,"72":4,"73":7,"76":3,"78":1,"79":1,"80":1,"85":1}}],["variables=at",{"2":{"33":2}}],["variables",{"0":{"6":1,"31":1,"32":1},"2":{"4":2,"5":1,"6":2,"9":2,"17":1,"23":1,"27":2,"30":1,"31":2,"32":3,"36":1,"37":1,"39":2,"40":1,"51":1,"59":1,"60":1,"62":1,"66":2,"72":2,"85":2}}],["varlist",{"2":{"37":2}}],["var2=var2",{"2":{"31":1}}],["var2",{"2":{"27":2,"31":3,"33":1}}],["var1=var1",{"2":{"31":1}}],["var1",{"2":{"27":2,"31":3,"33":1}}],["var",{"2":{"9":2,"78":2,"79":2,"80":2}}],["uv",{"2":{"89":1}}],["u",{"2":{"79":1}}],["updates",{"0":{"77":1}}],["update",{"2":{"72":1}}],["up",{"2":{"72":1}}],["ucar",{"2":{"40":1,"51":1,"59":1,"62":1}}],["url",{"2":{"39":1,"44":1}}],["urls",{"2":{"38":1}}],["unpermuted",{"2":{"73":2}}],["unpractical",{"2":{"44":1}}],["underlying",{"2":{"72":1,"73":1,"77":1}}],["unlike",{"2":{"60":1}}],["unordered",{"2":{"45":2,"46":1,"47":1,"48":2,"49":2,"50":3}}],["unweighted",{"2":{"45":1,"50":1}}],["unique",{"2":{"79":1}}],["unitrange",{"2":{"45":2,"46":2,"50":6}}],["units",{"2":{"39":1,"40":2,"52":4,"53":6,"54":6,"55":10}}],["unidata",{"2":{"40":1,"51":1,"59":1,"62":1}}],["union",{"2":{"14":2,"15":1,"33":1,"34":2,"40":1,"52":2,"53":3,"54":3,"55":5,"67":2}}],["unnecessary",{"2":{"15":1}}],["unchanged",{"2":{"13":1}}],["usual",{"2":{"45":1}}],["usually",{"2":{"39":1,"58":2,"59":2}}],["us",{"2":{"15":1}}],["useable",{"2":{"72":1}}],["uses",{"2":{"34":1}}],["used",{"2":{"15":1,"16":1,"29":1,"51":1,"56":1,"57":1,"58":1,"61":1,"72":4,"73":3}}],["users",{"2":{"73":1}}],["userguide",{"2":{"69":2}}],["user",{"2":{"10":2,"12":1,"13":1,"16":1,"22":3,"23":1,"73":1}}],["use",{"0":{"34":1},"2":{"0":1,"8":1,"9":1,"10":4,"13":1,"16":2,"25":2,"29":1,"31":1,"32":1,"33":1,"34":2,"42":1,"44":1,"46":1,"55":2,"60":1,"67":1,"72":3,"73":1,"81":1,"83":1,"85":2}}],["useful",{"2":{"0":1,"60":1}}],["using",{"2":{"0":1,"8":1,"9":1,"10":1,"15":2,"16":7,"20":1,"25":1,"27":1,"29":2,"31":2,"32":2,"33":1,"34":1,"39":2,"40":3,"41":2,"42":4,"51":2,"53":3,"54":2,"62":2,"66":1,"67":2,"77":1,"78":2,"79":1,"85":3}}],["+proj=moll",{"2":{"88":1}}],["+",{"2":{"12":2,"13":1,"78":1,"87":1}}],["kwargs",{"2":{"72":4,"73":2}}],["k",{"2":{"39":1,"40":1,"52":2,"53":3,"54":3,"55":5}}],["keys",{"2":{"72":1}}],["key",{"2":{"72":1}}],["keyword",{"2":{"66":1,"72":6,"73":2}}],["keylist",{"2":{"37":1}}],["keeps",{"2":{"13":1}}],["keep",{"2":{"0":1,"73":1}}],["kb",{"2":{"10":1,"12":1,"13":1,"14":1,"15":1,"19":1,"22":2,"25":1,"27":1,"29":4,"33":3,"34":1,"53":1,"54":3,"55":5,"76":1,"79":1}}],["↗",{"2":{"10":1,"12":1,"13":1,"15":1,"19":2,"22":3,"23":1,"25":3,"27":1,"29":5,"31":2,"33":3,"39":2,"40":2,"45":1,"51":1,"52":2,"54":3,"55":5,"62":1,"66":2,"76":1,"85":1}}],["├─────────────────────────┴──────────────────────────",{"2":{"29":1}}],["├─────────────────────────┴─────────────────────────────────────",{"2":{"76":1}}],["├─────────────────────────┴──────────────────────────────────────────────",{"2":{"34":1}}],["├─────────────────────────┴──────────────────────────────────",{"2":{"20":2}}],["├─────────────────────────┴────────────────────────────────",{"2":{"9":1}}],["├──────────────────────────┴────────────────────────────",{"2":{"19":1}}],["├──────────────────────────┴────────────────────────────────────",{"2":{"18":1}}],["├──────────────────────────┴─────────────────────────────────────────────",{"2":{"15":1,"29":1}}],["├───────────────────────────┴──────────────────────────",{"2":{"26":1}}],["├───────────────────────────┴────────────────────────────────────────────",{"2":{"15":1,"29":1}}],["├─────────────────────────────┴──────────────────────────────────",{"2":{"22":1,"25":1}}],["├───────────────────────────────┴────────────────────────────────────────",{"2":{"49":1}}],["├──────────────────────────────────┴─────────────────────────────────────",{"2":{"79":1}}],["├─────────────────────────────────────────┴──────────────────────",{"2":{"67":1}}],["├──────────────────────────────────────────┴──────────────────────",{"2":{"34":1}}],["├──────────────────────────────────────────┴─────────────────────────────",{"2":{"15":1}}],["├─────────────────────────────────────────────┴─────────────────",{"2":{"53":1}}],["├──────────────────────────────────────────────┴─────────────────────────",{"2":{"33":1,"54":2}}],["├───────────────────────────────────────────────┴────────────────────────",{"2":{"54":1,"55":5}}],["├───────────────────────────────────────────────┴──────────────",{"2":{"34":1}}],["├───────────────────────────────────────────────",{"2":{"29":1}}],["├────────────────────────────────────────────────",{"2":{"29":1}}],["├─────────────────────────────────────────────────",{"2":{"26":1}}],["├──────────────────────────────────────────────────┴─────────────────────",{"2":{"45":1}}],["├──────────────────────────────────────────────────",{"2":{"19":1,"26":1}}],["├───────────────────────────────────────────────────",{"2":{"19":2}}],["├─────────────────────────────────────────────────────",{"2":{"9":1,"19":1}}],["├───────────────────────────────────────────────────────",{"2":{"20":1}}],["├─────────────────────────────────────────────────────────",{"2":{"34":1}}],["├──────────────────────────────────────────────────────────",{"2":{"18":1,"34":1,"76":1}}],["├───────────────────────────────────────────────────────────",{"2":{"18":1,"22":1,"25":1,"67":1,"76":1}}],["├────────────────────────────────────────────────────────────",{"2":{"8":1,"22":1,"25":1,"34":1,"67":1}}],["├──────────────────────────────────────────────────────────────────",{"2":{"45":1,"48":1}}],["├───────────────────────────────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"14":2,"15":2,"22":1,"27":1,"29":4,"33":3,"34":1,"39":1,"40":1,"48":1,"52":2,"53":2,"54":3,"55":5,"76":1,"79":1}}],["├─────────────────────────────────────────────────────────────────────",{"2":{"53":1}}],["├─────────────────────────────────────────────────────────────────────┴",{"2":{"53":1}}],["├────────────────────────────────────────────────────────────────────────",{"2":{"45":1,"46":1,"48":1,"49":1,"50":3}}],["├────────────────────────────────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"14":2,"15":3,"22":1,"27":1,"29":4,"33":3,"34":1,"39":1,"40":1,"45":2,"46":1,"48":3,"49":2,"50":3,"52":2,"53":2,"54":3,"55":5,"76":1,"79":1}}],["├─────────────────────────────────────────────────────────────",{"2":{"8":1,"34":1}}],["├────────────────────────────────────────────────────────",{"2":{"20":2}}],["├──────────────────────────────────────────────────────",{"2":{"9":1}}],["├────────────────────────────────────────────────┴───────────────────────",{"2":{"14":1,"40":1,"48":1,"52":2,"53":2}}],["├───────────────────────────────────────────┴────────────────────────────",{"2":{"14":1}}],["├────────────────────────────────────┴───────────────────────────────────",{"2":{"39":1}}],["├────────────────────────────────┴───────────────────────────────────────",{"2":{"27":1,"76":1}}],["├────────────────────────────────┴────────────────────────────────",{"2":{"8":1}}],["├──────────────────────────────┴─────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"15":1,"22":1,"33":2,"48":1}}],["├────────────────────────────┴───────────────────────────────────────────",{"2":{"29":2}}],["├────────────────────────────┴──────────────────────────",{"2":{"19":1}}],["╭─────────────────────────────╮",{"2":{"22":1,"25":1}}],["╭───────────────────────────────╮",{"2":{"49":1}}],["╭──────────────────────────────────╮",{"2":{"79":1}}],["╭─────────────────────────────────────────╮",{"2":{"67":1}}],["╭──────────────────────────────────────────╮",{"2":{"15":1,"34":1}}],["╭─────────────────────────────────────────────╮",{"2":{"53":1}}],["╭──────────────────────────────────────────────────────────────────────────────╮",{"2":{"45":1,"46":1,"48":1,"49":1,"50":3}}],["╭──────────────────────────────────────────────────╮",{"2":{"45":1}}],["╭────────────────────────────────────────────────╮",{"2":{"14":1,"40":1,"48":1,"52":2,"53":2}}],["╭───────────────────────────────────────────────╮",{"2":{"34":1,"54":1,"55":5}}],["╭──────────────────────────────────────────────╮",{"2":{"33":1,"54":2}}],["╭───────────────────────────────────────────╮",{"2":{"14":1}}],["╭────────────────────────────────────╮",{"2":{"39":1}}],["╭────────────────────────────────╮",{"2":{"8":1,"27":1,"76":1}}],["╭──────────────────────────────╮",{"2":{"10":1,"12":1,"13":1,"15":1,"22":1,"33":2,"48":1}}],["╭────────────────────────────╮",{"2":{"19":1,"29":2}}],["╭───────────────────────────╮",{"2":{"15":1,"26":1,"29":1}}],["╭──────────────────────────╮",{"2":{"15":1,"18":1,"19":1,"29":1}}],["╭─────────────────────────╮",{"2":{"9":1,"20":2,"29":1,"34":1,"76":1}}],["0e8",{"2":{"72":1}}],["04428068807380173",{"2":{"79":1}}],["048565067687498124",{"2":{"79":1}}],["0451893",{"2":{"76":1}}],["0465",{"2":{"50":1}}],["0477079",{"2":{"19":1}}],["06048141295750401",{"2":{"79":1}}],["061001",{"2":{"76":1}}],["06755",{"2":{"50":1}}],["0625",{"2":{"39":2,"85":1}}],["0f20",{"2":{"39":1,"40":2,"52":4,"53":6,"54":6,"55":10}}],["07512042630397335",{"2":{"79":1}}],["07204935956348457",{"2":{"79":1}}],["0714621",{"2":{"76":1}}],["0794068",{"2":{"76":1}}],["07",{"2":{"39":2,"85":1}}],["0ºe",{"2":{"32":1}}],["054866954001569136",{"2":{"79":1}}],["05460756353473867",{"2":{"79":1}}],["05341039407809093",{"2":{"79":1}}],["05326101988982565",{"2":{"79":1}}],["0537",{"2":{"45":1,"46":1}}],["05846",{"2":{"50":1}}],["05",{"2":{"29":3}}],["0557879",{"2":{"18":1}}],["02",{"2":{"39":1}}],["02116",{"2":{"19":1}}],["0261803",{"2":{"19":1}}],["028745",{"2":{"15":1}}],["0305119",{"2":{"76":1}}],["03361",{"2":{"50":1}}],["035698",{"2":{"19":1}}],["03",{"2":{"19":1}}],["0321818",{"2":{"18":1}}],["0803349435034534",{"2":{"79":1}}],["08757811935252037",{"2":{"79":1}}],["0833944",{"2":{"76":1}}],["08",{"2":{"48":1}}],["086277",{"2":{"15":1}}],["0827623",{"2":{"15":1}}],["00684233",{"2":{"50":1}}],["00686917",{"2":{"19":1}}],["00693713",{"2":{"50":1}}],["00722034",{"2":{"50":1}}],["00709111",{"2":{"50":1}}],["00766601",{"2":{"15":1}}],["00990356",{"2":{"50":1}}],["00929636",{"2":{"15":1}}],["005146734261364652",{"2":{"79":1}}],["0057",{"2":{"50":1}}],["00552544",{"2":{"18":1}}],["00388",{"2":{"50":1}}],["00346434",{"2":{"20":1}}],["00",{"2":{"39":9,"40":8,"48":4,"51":4,"52":8,"53":8,"54":12,"55":20,"62":4,"66":4,"85":5}}],["09",{"2":{"48":1}}],["0943564",{"2":{"18":1}}],["0948468",{"2":{"15":1}}],["099476",{"2":{"15":1}}],["0178074",{"2":{"50":1}}],["0117519",{"2":{"50":1}}],["0115514",{"2":{"50":1}}],["0127077",{"2":{"50":1}}],["0123091",{"2":{"50":1}}],["0121037",{"2":{"50":1}}],["019016",{"2":{"50":1}}],["0196535",{"2":{"15":1}}],["018571",{"2":{"50":1}}],["0182373",{"2":{"50":1}}],["0180572",{"2":{"50":1}}],["0183003",{"2":{"50":1}}],["018",{"2":{"45":1,"46":1}}],["01t00",{"2":{"39":2,"85":1}}],["01t03",{"2":{"39":2,"85":1}}],["0133172",{"2":{"19":1}}],["01",{"2":{"10":6,"12":3,"13":3,"14":3,"15":9,"16":3,"22":9,"23":3,"29":22,"31":8,"32":11,"39":5,"40":4,"51":2,"52":4,"53":6,"54":6,"55":10,"62":2,"66":2,"78":2,"79":4,"85":5}}],["0",{"2":{"8":1,"9":1,"10":6,"11":2,"12":6,"13":6,"14":7,"15":75,"18":36,"19":36,"20":45,"22":12,"23":6,"26":1,"27":9,"29":1,"32":4,"33":27,"34":11,"39":7,"40":10,"48":2,"49":40,"50":19,"51":6,"52":8,"53":6,"54":14,"55":20,"56":6,"62":6,"65":1,"66":6,"67":1,"72":2,"73":1,"76":80,"77":1,"78":2,"79":19,"80":1,"85":4,"87":2,"88":2,"89":2}}],["┤",{"2":{"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"15":5,"18":2,"19":4,"20":3,"22":4,"25":2,"26":2,"27":2,"29":10,"33":6,"34":6,"39":2,"40":2,"45":4,"46":2,"48":6,"49":3,"50":6,"52":4,"53":5,"54":6,"55":10,"67":2,"76":4,"79":2}}],["┐",{"2":{"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"15":4,"18":1,"19":2,"20":2,"22":2,"25":1,"26":1,"27":1,"29":5,"33":3,"34":3,"39":1,"40":1,"45":1,"48":2,"49":1,"52":2,"53":4,"54":3,"55":5,"67":1,"76":2,"79":1}}],["│",{"2":{"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"15":8,"18":2,"19":4,"20":4,"22":4,"25":2,"26":2,"27":2,"29":10,"33":6,"34":6,"39":2,"40":2,"45":4,"46":2,"48":6,"49":4,"50":6,"52":4,"53":6,"54":6,"55":10,"67":2,"76":4,"79":2}}],["72",{"2":{"56":1}}],["743448",{"2":{"76":1}}],["74",{"2":{"56":1}}],["763404",{"2":{"76":1}}],["763967",{"2":{"76":1}}],["768702",{"2":{"76":1}}],["76",{"2":{"56":1}}],["78",{"2":{"54":1,"56":1}}],["730",{"2":{"80":1}}],["7341",{"2":{"50":1}}],["73",{"2":{"50":1,"56":1}}],["759224",{"2":{"76":1}}],["7593",{"2":{"50":1}}],["75",{"2":{"56":1}}],["75891",{"2":{"50":1}}],["754794",{"2":{"19":1}}],["77842",{"2":{"76":1}}],["77",{"2":{"56":1}}],["77687",{"2":{"50":1}}],["77587",{"2":{"50":1}}],["773001",{"2":{"20":1}}],["716081",{"2":{"76":1}}],["717",{"2":{"55":5}}],["71",{"2":{"54":1,"56":1}}],["7158",{"2":{"45":1,"46":1}}],["7119",{"2":{"45":1,"46":1}}],["71429",{"2":{"15":2}}],["709966",{"2":{"76":1}}],["70",{"2":{"54":3,"56":1}}],["702858",{"2":{"20":1}}],["708967",{"2":{"19":1}}],["79502",{"2":{"50":1}}],["795952",{"2":{"15":1}}],["79",{"2":{"40":2,"51":1,"52":2,"53":2,"54":4,"55":5,"56":1,"62":1,"66":1}}],["791032",{"2":{"15":1}}],["7",{"2":{"8":1,"15":1,"19":1,"22":1,"26":1,"39":1,"85":1}}],["→",{"2":{"4":1,"5":1,"6":1,"9":1,"10":1,"12":1,"13":1,"14":1,"15":6,"18":1,"19":3,"20":3,"22":3,"23":1,"25":3,"26":1,"27":1,"29":6,"31":2,"32":2,"33":3,"34":2,"37":2,"39":2,"40":2,"45":1,"51":1,"52":2,"53":1,"54":3,"55":5,"62":1,"66":2,"67":1,"76":2,"85":1}}],["↓",{"2":{"4":3,"5":3,"6":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"15":6,"18":1,"19":3,"20":3,"22":3,"23":1,"25":3,"26":1,"27":1,"29":6,"31":2,"32":8,"33":3,"34":3,"36":1,"37":3,"39":2,"40":2,"45":3,"46":1,"48":4,"49":2,"50":3,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":2,"67":1,"76":2,"79":2,"85":1}}],["410862",{"2":{"76":1}}],["41049",{"2":{"50":1}}],["4198",{"2":{"50":1}}],["41241",{"2":{"50":1}}],["41634",{"2":{"50":1}}],["418673",{"2":{"19":1}}],["48",{"2":{"76":1}}],["48367",{"2":{"50":1}}],["480",{"2":{"34":1}}],["48712",{"2":{"18":1}}],["44",{"2":{"29":1,"33":3}}],["460725",{"2":{"76":1}}],["46506",{"2":{"50":1}}],["46",{"2":{"27":1,"76":1}}],["494427",{"2":{"76":1}}],["4947",{"2":{"50":1}}],["49909",{"2":{"50":1}}],["491176",{"2":{"20":1}}],["496038",{"2":{"19":1}}],["40",{"2":{"32":2}}],["402285",{"2":{"20":1}}],["400",{"2":{"18":1,"78":1,"80":1}}],["470138",{"2":{"19":1}}],["470067",{"2":{"18":1}}],["43254",{"2":{"50":1}}],["4325",{"2":{"45":1,"46":1}}],["43242",{"2":{"20":1}}],["432317",{"2":{"18":1}}],["437037",{"2":{"19":1}}],["45×170×24",{"2":{"55":5}}],["450453",{"2":{"19":1}}],["450066",{"2":{"18":1}}],["454773",{"2":{"15":1}}],["4×30",{"2":{"15":1}}],["42857",{"2":{"15":2}}],["42",{"2":{"11":3}}],["4",{"2":{"4":4,"5":4,"15":9,"20":1,"26":1,"27":1,"45":2,"46":1,"47":1,"48":2,"49":2,"50":4,"76":3,"78":1,"80":1}}],["3d",{"0":{"89":1}}],["344799",{"2":{"76":1}}],["343173",{"2":{"76":1}}],["346683",{"2":{"76":1}}],["345306",{"2":{"76":1}}],["34549",{"2":{"50":1}}],["34818",{"2":{"50":1}}],["34832",{"2":{"50":1}}],["34218",{"2":{"50":1}}],["33565",{"2":{"50":1}}],["322666",{"2":{"76":1}}],["329389",{"2":{"76":1}}],["32149",{"2":{"50":1}}],["32555",{"2":{"50":1}}],["3252",{"2":{"45":1,"46":1}}],["325188",{"2":{"20":1}}],["371764",{"2":{"76":1}}],["372",{"2":{"50":1}}],["372918",{"2":{"20":1}}],["37878",{"2":{"50":1}}],["37",{"2":{"40":2,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1}}],["3hr",{"2":{"39":2,"85":3}}],["3×20",{"2":{"34":1}}],["366",{"2":{"80":1}}],["365×1",{"2":{"79":1}}],["365",{"2":{"79":1,"80":4}}],["36126",{"2":{"50":1}}],["36142",{"2":{"50":1}}],["36836",{"2":{"50":1}}],["369",{"2":{"32":1}}],["36",{"2":{"29":1,"31":2,"32":1,"48":1}}],["3600",{"2":{"29":1,"31":2}}],["312",{"2":{"50":1}}],["31753",{"2":{"50":1}}],["3169",{"2":{"50":1}}],["3188",{"2":{"50":1}}],["31",{"2":{"29":2,"31":1,"32":1,"78":1,"79":2}}],["313254",{"2":{"19":1}}],["3866",{"2":{"50":1}}],["38364",{"2":{"50":1}}],["3835",{"2":{"45":1,"46":1}}],["384×192×251288",{"2":{"39":1}}],["38",{"2":{"29":1,"54":3}}],["381645",{"2":{"15":1}}],["382234",{"2":{"15":1}}],["354183",{"2":{"76":1}}],["35432",{"2":{"50":1}}],["35483",{"2":{"50":1}}],["35700351866494",{"2":{"39":4,"85":2}}],["359",{"2":{"32":1,"39":2,"40":2,"51":1,"52":2,"53":1,"56":2,"62":1,"66":1,"85":1}}],["355755",{"2":{"20":1}}],["351027",{"2":{"19":1}}],["35",{"2":{"10":1,"12":1,"13":1,"15":1,"22":1}}],["3069",{"2":{"50":1}}],["30018",{"2":{"50":1}}],["30142",{"2":{"50":1}}],["30113",{"2":{"50":1}}],["301316",{"2":{"19":1}}],["307f8f0e584a39a050c042849004e6a2bd674f99",{"2":{"41":1}}],["308299",{"2":{"20":1}}],["30×10×15",{"2":{"10":1,"12":1,"13":1,"15":1,"22":1}}],["30",{"2":{"10":3,"12":1,"13":1,"14":2,"15":5,"16":2,"19":10,"22":4,"23":2,"39":1,"40":1,"50":2,"52":2,"53":3,"54":3,"55":5,"85":1}}],["391745",{"2":{"76":1}}],["395735",{"2":{"15":1}}],["39569774546730574",{"2":{"11":1}}],["39",{"2":{"10":1,"27":1,"29":1,"31":1,"32":1,"33":2,"50":1,"51":1,"61":1,"69":4,"72":2,"79":3}}],["3",{"2":{"4":8,"5":8,"6":10,"10":1,"11":3,"12":3,"13":2,"15":6,"19":2,"20":1,"22":3,"25":5,"26":1,"29":4,"33":4,"34":5,"39":1,"40":1,"45":2,"50":31,"52":2,"54":4,"55":5,"66":1,"72":1,"76":3,"78":2}}],["zoom",{"2":{"89":1}}],["zopen",{"2":{"39":1,"85":1}}],["zeros",{"2":{"67":3,"79":1}}],["z",{"2":{"4":2,"5":3,"6":2,"66":2}}],["zarr",{"0":{"39":1,"63":1,"84":1},"2":{"0":1,"2":2,"4":2,"5":2,"6":2,"16":1,"20":1,"39":3,"63":5,"65":3,"66":4,"67":3,"72":2,"73":2,"85":1}}],["xticklabelalign",{"2":{"78":1,"80":1}}],["xticklabelrotation",{"2":{"78":1,"80":1}}],["xlabel=",{"2":{"78":1,"80":1}}],["xarray",{"2":{"43":1,"44":1}}],["xx",{"2":{"40":1,"51":1,"62":1,"66":1}}],["xin",{"2":{"15":3,"33":3}}],["xout",{"2":{"15":3}}],["x26",{"2":{"15":12,"32":12}}],["x3c",{"2":{"15":12,"32":4}}],["x",{"2":{"4":2,"5":3,"6":2,"13":2,"19":4,"20":3,"33":4,"45":2,"46":1,"50":3,"58":1,"73":1,"76":5,"78":1,"79":6}}],["ndata",{"2":{"87":2,"88":1,"89":1}}],["ndays",{"2":{"79":4}}],["nlon",{"2":{"87":2,"88":1}}],["npy",{"2":{"78":2,"79":2}}],["ntuple",{"2":{"73":2}}],["ntr",{"2":{"73":1}}],["nthreads",{"2":{"72":2}}],["nin",{"2":{"73":2}}],["nvalid",{"2":{"72":1}}],["nbsp",{"2":{"65":1,"72":24,"73":24}}],["n",{"2":{"57":1,"72":3}}],["n256",{"2":{"50":1}}],["nan",{"2":{"44":1,"45":48,"46":48,"50":384}}],["name=cube",{"2":{"72":1}}],["namedtuple",{"2":{"72":1,"73":3}}],["named",{"2":{"51":1,"53":1,"54":1,"58":1,"72":2,"77":1}}],["names",{"0":{"25":1,"35":1,"37":1},"1":{"36":1,"37":1},"2":{"22":2,"47":1,"58":2,"72":2,"73":1}}],["name",{"0":{"36":1},"2":{"2":1,"25":1,"39":3,"40":4,"50":1,"52":8,"53":12,"54":12,"55":20,"61":1,"72":6,"73":5,"76":1}}],["number",{"2":{"43":1,"48":1,"72":2,"73":1,"79":1}}],["numbers",{"2":{"10":1,"76":1}}],["nc",{"2":{"40":2,"44":2,"51":2,"62":2,"64":2}}],["nout",{"2":{"73":2}}],["normal",{"2":{"72":1,"89":1}}],["nometadata",{"2":{"45":3,"46":2,"48":1,"49":1,"50":10}}],["nov",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["november",{"2":{"40":1,"51":1,"62":1,"66":1}}],["nonmissingtype",{"2":{"73":1}}],["non",{"2":{"16":1,"72":1,"73":1,"78":1}}],["now",{"2":{"15":1,"27":1,"29":1,"34":1,"45":1,"46":1,"48":1,"50":1,"70":1}}],["no",{"2":{"14":1,"20":1,"28":1,"67":1,"72":1,"73":1}}],["nothing",{"2":{"41":1,"50":3,"65":1,"72":1,"73":1}}],["notation",{"2":{"29":1,"55":1}}],["note",{"2":{"9":1,"13":1,"15":1,"32":1,"46":1,"72":1,"73":1}}],["not",{"0":{"32":1},"2":{"0":1,"1":1,"13":1,"28":1,"32":3,"44":1,"67":1,"72":2,"73":3}}],["neighbour",{"2":{"72":1}}],["neighboring",{"2":{"13":1}}],["needed",{"2":{"72":1}}],["need",{"2":{"69":1,"72":1,"73":1}}],["necessary",{"2":{"43":1,"44":1,"73":4}}],["near",{"2":{"39":2,"55":1,"85":1}}],["next",{"2":{"33":1,"34":1,"47":1,"70":2}}],["netcdf",{"0":{"40":1,"64":1},"2":{"20":1,"40":4,"42":1,"51":2,"59":3,"62":2,"64":3,"65":1,"72":1}}],["new",{"0":{"9":1},"2":{"10":1,"12":1,"22":1,"44":1,"47":1,"60":1,"65":1,"66":1,"69":6,"72":5,"73":4,"79":1}}],["bits",{"2":{"72":2}}],["big",{"2":{"58":1}}],["black",{"2":{"80":1}}],["blocks",{"2":{"72":1}}],["blue",{"2":{"59":1}}],["bonito",{"2":{"89":1}}],["boundaries",{"2":{"73":1}}],["bounds",{"2":{"72":1}}],["bool=true",{"2":{"73":1}}],["bool=false",{"2":{"72":1,"73":1}}],["bool",{"2":{"73":6}}],["boolean",{"2":{"72":3}}],["bold",{"2":{"50":1}}],["build",{"0":{"70":1},"2":{"70":1}}],["bug",{"2":{"68":1}}],["bundle",{"2":{"59":1}}],["but",{"0":{"32":1},"2":{"8":1,"25":1,"32":2,"53":1,"54":1,"72":2}}],["bwr",{"2":{"50":1}}],["brightness",{"2":{"58":1,"59":1}}],["brings",{"2":{"73":1}}],["bring",{"2":{"26":1}}],["broad",{"2":{"82":1}}],["broadcasts",{"2":{"73":1}}],["broadcasted",{"2":{"72":1,"73":1}}],["broadcast",{"2":{"45":1,"50":1}}],["brown",{"2":{"80":1}}],["browser",{"2":{"70":1}}],["broken",{"2":{"41":1}}],["branch",{"2":{"39":1,"85":1}}],["b`",{"2":{"29":1}}],["b",{"2":{"15":13,"37":2,"55":2}}],["backgroundcolor=",{"2":{"89":1}}],["back",{"2":{"72":1}}],["backendlist",{"2":{"72":1}}],["backend",{"2":{"65":2,"72":8}}],["backend=",{"2":{"2":1,"66":1}}],["based",{"0":{"84":1},"2":{"73":1}}],["base",{"0":{"18":1},"2":{"4":4,"5":4,"6":2,"18":4,"22":3,"25":9,"36":1,"37":5,"67":2,"73":1,"76":2}}],["by=",{"2":{"34":2,"72":2}}],["bytes",{"2":{"8":1,"9":1,"14":1,"15":1,"18":1,"20":1,"26":1,"29":1,"34":2,"48":1,"53":2,"67":1,"76":1}}],["by",{"0":{"4":1,"5":1},"2":{"2":1,"10":2,"14":1,"15":1,"21":1,"22":1,"28":1,"29":6,"32":2,"34":1,"39":1,"43":1,"47":1,"48":1,"49":1,"50":1,"58":3,"60":1,"61":1,"65":1,"69":1,"70":1,"72":12,"73":6,"75":1,"79":1}}],["beware",{"2":{"81":1}}],["best",{"2":{"73":1,"83":1}}],["become",{"2":{"72":1}}],["because",{"2":{"1":1,"13":1,"14":1}}],["before",{"2":{"70":1,"72":1}}],["belonging",{"2":{"59":1}}],["belongs",{"2":{"15":1}}],["been",{"2":{"32":1}}],["between",{"2":{"19":1,"20":1,"29":1,"31":1,"32":2,"55":1,"72":1}}],["begin",{"2":{"16":1}}],["be",{"2":{"0":5,"2":1,"3":1,"4":1,"13":1,"15":2,"17":1,"29":1,"32":1,"33":1,"34":2,"39":2,"40":1,"41":1,"44":1,"56":1,"58":1,"60":2,"65":1,"66":1,"69":1,"72":22,"73":9,"77":1,"81":1,"85":1}}],["650262",{"2":{"76":1}}],["653128",{"2":{"76":1}}],["65105",{"2":{"50":1}}],["600",{"2":{"78":1,"80":1,"86":1,"87":1,"88":1}}],["60918",{"2":{"50":1}}],["60175",{"2":{"50":1}}],["60265",{"2":{"39":1,"85":1}}],["602045",{"2":{"18":1}}],["6122",{"2":{"50":1}}],["61197",{"2":{"50":1}}],["619",{"2":{"45":1,"46":1}}],["63006",{"2":{"50":1}}],["630924",{"2":{"19":1}}],["635883",{"2":{"19":1}}],["64976",{"2":{"50":1}}],["642",{"2":{"44":1}}],["646887",{"2":{"19":1}}],["641424",{"2":{"18":1}}],["6×6×25",{"2":{"19":2}}],["6×2",{"2":{"9":1}}],["671807",{"2":{"18":1}}],["688638",{"2":{"76":1}}],["687095",{"2":{"76":1}}],["684161",{"2":{"18":1}}],["689873",{"2":{"15":1}}],["667162",{"2":{"76":1}}],["663178",{"2":{"76":1}}],["662771",{"2":{"20":1}}],["669206",{"2":{"20":1}}],["665448",{"2":{"18":1}}],["666155",{"2":{"18":1}}],["69085",{"2":{"50":1}}],["690915",{"2":{"15":1}}],["69",{"2":{"39":1}}],["695295",{"2":{"18":1}}],["6",{"2":{"2":6,"4":6,"5":6,"6":6,"8":4,"9":5,"15":1,"26":1,"29":1,"39":1,"85":1}}],["1e8",{"2":{"73":1}}],["18867824088012022",{"2":{"79":1}}],["18892",{"2":{"50":1}}],["18583",{"2":{"50":1}}],["18434",{"2":{"50":1}}],["180714",{"2":{"76":1}}],["180×170",{"2":{"53":1}}],["180×170×24",{"2":{"40":1,"52":2}}],["180",{"2":{"32":2,"55":5,"87":1}}],["180ºe",{"2":{"32":1}}],["18757",{"2":{"20":1}}],["147435",{"2":{"76":1}}],["148317",{"2":{"76":1}}],["1437",{"2":{"50":1}}],["14",{"2":{"20":1}}],["142275",{"2":{"15":1}}],["14286",{"2":{"15":1}}],["13930646027762436",{"2":{"79":1}}],["13291526713087612",{"2":{"79":1}}],["1372",{"2":{"45":1,"46":1}}],["1363",{"2":{"45":1,"46":1}}],["136",{"2":{"40":1,"51":1,"62":1,"66":1}}],["13z",{"2":{"39":2,"85":1}}],["13",{"2":{"20":1,"32":6,"40":1,"51":1,"62":1,"66":1}}],["192",{"2":{"87":1}}],["19241",{"2":{"50":1}}],["19",{"2":{"54":3,"55":5}}],["1983",{"2":{"48":1}}],["1980",{"2":{"48":1}}],["198741",{"2":{"19":1}}],["19875",{"2":{"18":1}}],["19776",{"2":{"18":1}}],["19585",{"2":{"15":1}}],["17597786204903687",{"2":{"79":1}}],["170",{"2":{"56":1}}],["179",{"2":{"55":5}}],["17434",{"2":{"50":1}}],["17852",{"2":{"50":1}}],["17863",{"2":{"50":1}}],["17647",{"2":{"50":1}}],["1762",{"2":{"45":1,"46":1}}],["17t00",{"2":{"48":1}}],["1771",{"2":{"15":1}}],["17",{"2":{"14":1,"34":1,"54":1}}],["1644",{"2":{"50":1}}],["16824",{"2":{"50":1}}],["16581",{"2":{"50":1}}],["16631",{"2":{"50":1}}],["16713",{"2":{"50":1}}],["16258",{"2":{"50":1}}],["16t12",{"2":{"48":1}}],["16t00",{"2":{"40":4,"51":2,"52":4,"53":4,"54":6,"55":10,"62":2,"66":2}}],["16",{"2":{"10":1,"12":1,"13":1,"15":1,"22":1,"40":2,"51":1,"52":2,"53":4,"54":3,"55":5,"62":1,"66":1}}],["15868041606243408",{"2":{"79":1}}],["158962",{"2":{"76":1}}],["158104",{"2":{"18":1}}],["159",{"2":{"54":1}}],["159698",{"2":{"18":1}}],["15644",{"2":{"50":1}}],["15532",{"2":{"50":1}}],["15",{"2":{"10":1,"15":6,"16":1,"20":4,"22":1,"23":1,"27":2,"34":1,"76":1}}],["128",{"2":{"89":1}}],["1200",{"2":{"86":1,"87":1,"88":1}}],["124242",{"2":{"76":1}}],["1242",{"2":{"50":1}}],["12575",{"2":{"50":1}}],["12",{"2":{"8":4,"20":1,"29":10,"31":3,"32":4,"40":2,"51":1,"52":2,"53":2,"54":3,"55":5,"62":1,"66":1,"78":1,"79":2}}],["1=5",{"2":{"2":1}}],["11344554908666375",{"2":{"79":1}}],["113553",{"2":{"49":3}}],["11439100033904083",{"2":{"79":1}}],["114815",{"2":{"49":6}}],["112418",{"2":{"76":1}}],["112319",{"2":{"49":12}}],["11084",{"2":{"76":1}}],["110146",{"2":{"15":1}}],["119",{"2":{"53":1}}],["1181",{"2":{"50":1}}],["11",{"2":{"2":6,"4":6,"5":6,"6":6,"8":1,"20":1,"40":2,"45":4,"46":4,"50":4,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1}}],["1",{"2":{"2":12,"4":19,"5":20,"6":22,"8":5,"9":3,"10":8,"11":3,"12":7,"13":5,"14":6,"15":34,"16":3,"18":1,"19":7,"20":6,"22":15,"23":4,"25":3,"26":8,"27":8,"29":23,"31":10,"32":8,"33":15,"34":14,"36":1,"37":3,"39":4,"40":8,"45":4,"46":2,"48":6,"49":11,"50":55,"51":4,"52":8,"53":13,"54":18,"55":15,"56":2,"62":4,"66":11,"67":1,"73":1,"76":11,"78":2,"79":5,"80":5,"85":3,"87":4,"88":2,"89":5}}],["1095",{"2":{"79":1}}],["10989",{"2":{"49":6}}],["10mb",{"2":{"72":2}}],["1083",{"2":{"50":1}}],["108696",{"2":{"49":6}}],["103704",{"2":{"49":3}}],["103211",{"2":{"18":1}}],["100",{"2":{"32":13}}],["1000",{"2":{"0":1,"87":1,"88":1}}],["10×20",{"2":{"67":1}}],["10×20×5",{"2":{"22":1}}],["10×170×24",{"2":{"54":1}}],["10×10×24",{"2":{"54":2}}],["10×10×8",{"2":{"29":1}}],["10×10×12",{"2":{"29":1}}],["10×10×36",{"2":{"29":1}}],["10×10×5",{"2":{"25":1}}],["10×10",{"2":{"26":1,"29":1}}],["10×15×20",{"2":{"33":1}}],["10×15",{"2":{"14":1,"15":2,"34":1,"76":1}}],["10x15",{"2":{"15":1}}],["10",{"2":{"2":14,"4":16,"5":18,"6":17,"10":3,"12":1,"13":1,"14":1,"15":15,"16":3,"18":2,"20":4,"22":6,"23":2,"25":8,"26":5,"27":4,"29":16,"31":10,"33":3,"34":2,"36":2,"37":4,"39":1,"40":1,"52":2,"53":3,"54":6,"55":5,"66":2,"67":2,"75":1,"76":3}}],["garbage",{"2":{"73":1}}],["gc",{"2":{"73":2}}],["gt",{"2":{"70":1,"72":1,"73":3}}],["going",{"2":{"73":1}}],["goes",{"2":{"72":1,"73":1}}],["go",{"2":{"70":2}}],["good",{"2":{"50":1}}],["goal",{"2":{"43":1}}],["ggplot2",{"2":{"50":1}}],["github",{"2":{"41":1,"44":2,"68":1}}],["gives",{"2":{"15":1}}],["given",{"2":{"2":1,"15":2,"58":1,"60":1,"65":1,"72":6,"73":3,"76":1}}],["gdalworkshop",{"2":{"41":1}}],["gdal",{"0":{"41":1},"2":{"41":1}}],["gb",{"2":{"39":1}}],["gn",{"2":{"39":1,"85":2}}],["gs",{"2":{"39":1,"85":2}}],["globalproperties=dict",{"2":{"73":1}}],["global",{"2":{"72":1,"73":1}}],["glmakie",{"2":{"34":2,"85":2}}],["glue",{"2":{"8":1}}],["gradient",{"2":{"86":1,"87":1,"88":1,"89":1}}],["gradually",{"2":{"67":1}}],["grey25",{"2":{"89":1}}],["grey15",{"2":{"34":1,"50":1}}],["green",{"2":{"59":1}}],["grouped",{"2":{"72":1}}],["groups",{"2":{"49":1}}],["groupby",{"0":{"45":1,"48":1},"1":{"46":1,"47":1,"49":1,"50":1},"2":{"42":1,"44":1,"45":6,"46":1,"47":1,"48":3,"49":3,"50":3,"72":1,"79":1}}],["group",{"0":{"42":1},"1":{"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1},"2":{"45":1,"47":1,"48":2,"59":1,"72":3}}],["grouping",{"2":{"34":2,"47":2}}],["grid=false",{"2":{"50":1}}],["grid",{"2":{"16":1,"58":1,"72":1}}],["gridchunks",{"2":{"2":3,"4":1,"5":1,"6":1,"72":1,"73":1}}],["guide",{"2":{"10":2,"12":1,"13":1,"16":1,"22":3,"23":1}}],["general",{"0":{"82":1},"2":{"72":1}}],["generated",{"2":{"40":1,"51":1,"62":1,"66":1,"73":1}}],["generate",{"2":{"29":1,"31":1,"32":1,"70":1,"72":1}}],["generic",{"2":{"22":1}}],["getting",{"0":{"74":1},"1":{"75":1,"76":1,"77":1}}],["getarrayinfo",{"2":{"73":1}}],["getaxis",{"2":{"26":1,"34":2,"72":1}}],["getloopchunks",{"2":{"73":1}}],["getloopcachesize",{"2":{"73":1}}],["getouttype",{"2":{"73":1}}],["getoutaxis",{"2":{"73":1}}],["getfrontperm",{"2":{"73":1}}],["gets",{"2":{"72":1,"73":1}}],["get",{"0":{"56":1},"2":{"10":1,"25":1,"44":1,"48":1,"52":1,"54":1,"56":1,"73":3,"76":1,"79":1,"85":1}}],["geoaxis",{"2":{"87":1,"88":1}}],["geometrybasics",{"2":{"85":1}}],["geomakie",{"2":{"85":1,"87":2,"88":1}}],["geojson",{"0":{"41":1}}],["geotiff",{"0":{"41":1}}],["geo",{"2":{"1":1}}],["g",{"2":{"7":1,"10":1,"11":1,"13":1,"16":1,"22":1,"45":26,"46":2,"47":2,"48":2,"49":1,"50":18,"56":1,"58":1,"61":1,"72":5,"85":2}}],["2π",{"2":{"78":1}}],["2×3",{"2":{"76":1}}],["2×2×3",{"2":{"4":1,"5":1,"6":1}}],["2×2",{"2":{"2":3}}],["2x2l31",{"2":{"40":1,"51":1,"62":1,"66":1}}],["23",{"2":{"33":3,"40":2,"50":1,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1}}],["230079",{"2":{"19":1}}],["22211",{"2":{"50":1}}],["229361",{"2":{"20":1}}],["227196",{"2":{"15":1}}],["29473",{"2":{"50":1}}],["29816",{"2":{"50":1}}],["298312",{"2":{"20":1}}],["29564",{"2":{"50":1}}],["29",{"2":{"19":2}}],["273",{"2":{"48":1}}],["276",{"2":{"48":2}}],["270",{"2":{"48":1}}],["275×205×9",{"2":{"45":4}}],["2747",{"2":{"50":1}}],["274429",{"2":{"20":1}}],["274566",{"2":{"15":1}}],["27",{"2":{"19":2,"45":1,"46":1,"50":1}}],["26274",{"2":{"50":1}}],["261139",{"2":{"20":1}}],["260239",{"2":{"76":1}}],["26031",{"2":{"19":1}}],["260932",{"2":{"18":1}}],["26",{"2":{"19":2,"39":2,"85":1}}],["2551",{"2":{"76":1}}],["255777",{"2":{"76":1}}],["256631",{"2":{"76":1}}],["259272",{"2":{"76":1}}],["25153",{"2":{"50":1}}],["25",{"2":{"19":10,"29":1,"78":1}}],["287222",{"2":{"76":1}}],["28008",{"2":{"50":1}}],["2894",{"2":{"50":1}}],["288",{"2":{"48":1}}],["2818",{"2":{"45":1,"46":1}}],["28422753251364",{"2":{"39":4,"85":2}}],["284095",{"2":{"15":1}}],["28",{"2":{"19":2,"29":1,"45":3,"46":3,"50":3}}],["28571",{"2":{"15":2}}],["2857142857142857",{"2":{"10":1,"12":1,"13":1,"14":1,"15":3,"22":2,"23":1,"27":1,"33":3,"34":1,"76":1}}],["212529",{"2":{"76":1}}],["21209",{"2":{"50":1}}],["21699",{"2":{"50":1}}],["216039",{"2":{"19":1}}],["21",{"2":{"45":8,"46":8,"50":8}}],["21t06",{"2":{"39":2,"85":1}}],["2101",{"2":{"39":2,"85":1}}],["219269",{"2":{"15":1}}],["217969",{"2":{"15":1}}],["245069",{"2":{"76":1}}],["24375",{"2":{"50":1}}],["2434",{"2":{"50":1}}],["243106",{"2":{"18":1}}],["24",{"2":{"34":1,"53":2}}],["246061",{"2":{"20":1}}],["248116",{"2":{"19":1}}],["249736",{"2":{"76":1}}],["249608",{"2":{"18":1}}],["249912",{"2":{"15":1}}],["240",{"2":{"14":1,"20":1}}],["2=10",{"2":{"2":1}}],["2",{"2":{"2":3,"4":8,"5":9,"6":10,"8":1,"9":1,"11":3,"12":2,"13":1,"14":1,"15":9,"16":1,"18":2,"20":3,"22":1,"25":3,"26":3,"29":1,"34":6,"37":4,"39":3,"40":3,"45":1,"46":1,"50":40,"51":1,"52":4,"53":2,"54":2,"55":5,"56":2,"62":1,"66":2,"67":2,"72":2,"76":5,"85":3,"87":2,"89":1}}],["2003",{"2":{"40":1,"51":1,"62":1,"66":1}}],["2004",{"2":{"40":1,"51":1,"62":1,"66":1}}],["2005",{"2":{"40":2,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1}}],["2002",{"2":{"40":3,"51":2,"52":2,"53":2,"54":3,"55":5,"62":2,"66":1}}],["2001",{"2":{"40":3,"51":2,"52":2,"53":3,"54":3,"55":5,"62":2,"66":1}}],["2000",{"2":{"19":4}}],["2019",{"2":{"39":2,"85":1}}],["2015",{"2":{"39":2,"40":1,"51":1,"62":1,"66":1,"85":2}}],["20×10×15",{"2":{"33":2}}],["20×10×15×2",{"2":{"27":1,"76":1}}],["20ºn",{"2":{"32":1}}],["206706",{"2":{"19":1}}],["2023",{"2":{"78":1,"79":2}}],["2021",{"2":{"29":9,"78":1,"79":2,"80":1}}],["2020",{"2":{"29":5,"31":3,"32":4,"60":1}}],["2024",{"2":{"19":4}}],["2022",{"2":{"10":4,"12":2,"13":2,"14":2,"15":6,"16":2,"22":6,"23":2,"29":5,"31":3,"32":4,"80":1}}],["20",{"2":{"2":7,"4":10,"5":10,"6":10,"22":2,"27":4,"32":2,"33":3,"34":1,"50":1,"66":2,"67":2,"76":3}}],["55",{"2":{"79":1}}],["550461",{"2":{"76":1}}],["552949",{"2":{"20":1}}],["5e8",{"2":{"65":1,"72":1}}],["53",{"2":{"53":1}}],["534793",{"2":{"15":1}}],["52419",{"2":{"50":1}}],["528707",{"2":{"18":1}}],["594211",{"2":{"76":1}}],["595773",{"2":{"76":1}}],["59212",{"2":{"50":1}}],["59085",{"2":{"50":1}}],["597315",{"2":{"20":1}}],["5843",{"2":{"45":1,"46":1}}],["56632",{"2":{"50":1}}],["56698",{"2":{"20":1}}],["56213",{"2":{"18":1}}],["5×6×36",{"2":{"29":1}}],["5×6",{"2":{"20":2}}],["5×10",{"2":{"18":2}}],["5173",{"2":{"70":1}}],["510782",{"2":{"19":1}}],["511201",{"2":{"18":1}}],["51539",{"2":{"18":1}}],["519169",{"2":{"18":1}}],["50247",{"2":{"76":1}}],["501022",{"2":{"15":1}}],["50089",{"2":{"50":1}}],["500",{"2":{"0":1,"50":1,"89":2}}],["500mb",{"2":{"0":2}}],["57022",{"2":{"76":1}}],["57064",{"2":{"15":1}}],["579623",{"2":{"76":1}}],["5743",{"2":{"50":1}}],["574653",{"2":{"18":1}}],["57873",{"2":{"50":1}}],["57695",{"2":{"50":1}}],["57143",{"2":{"15":2}}],["5",{"2":{"2":7,"4":16,"5":18,"6":7,"10":2,"12":3,"13":2,"14":1,"15":10,"16":1,"18":2,"20":4,"22":5,"23":1,"25":4,"26":1,"27":2,"29":3,"31":4,"33":3,"34":2,"37":4,"40":4,"50":5,"51":2,"52":4,"53":3,"54":10,"55":10,"56":19,"62":2,"66":4,"76":2,"77":1,"80":2,"89":2}}],["rotate",{"2":{"89":1}}],["row",{"2":{"61":1,"72":1}}],["rowgap",{"2":{"50":1}}],["right",{"2":{"78":1,"80":1}}],["r",{"2":{"67":1}}],["r1i1p1f1",{"2":{"39":2,"85":3}}],["running",{"2":{"70":1}}],["run",{"2":{"16":1,"70":3}}],["runs",{"2":{"13":1,"73":1}}],["rafaqz",{"2":{"44":1}}],["raw",{"2":{"41":1,"44":1}}],["rasm",{"2":{"44":2}}],["ras",{"2":{"19":3}}],["rasters",{"2":{"19":2}}],["raster",{"0":{"19":1},"2":{"15":11,"19":5}}],["ranges",{"0":{"54":1},"2":{"26":1,"51":1}}],["range",{"2":{"10":2,"15":2,"16":2,"22":2,"27":3,"29":1,"73":1,"76":3,"78":1}}],["randn",{"2":{"78":1}}],["random",{"2":{"32":2,"76":1}}],["rand",{"2":{"2":1,"4":3,"5":3,"6":3,"8":2,"9":2,"10":1,"15":1,"16":1,"18":1,"19":1,"20":1,"22":2,"23":1,"25":1,"27":2,"32":3,"34":1,"36":1,"37":3,"66":1,"76":2}}],["relational",{"2":{"58":1}}],["related",{"2":{"44":1}}],["recommend",{"2":{"77":1}}],["recommended",{"2":{"55":1}}],["rechunking",{"2":{"73":1}}],["recalculate",{"2":{"73":1}}],["recal",{"2":{"73":1}}],["recently",{"2":{"0":1}}],["red",{"2":{"50":1,"59":1}}],["reduce",{"2":{"10":1,"14":1}}],["reverse",{"2":{"50":1}}],["reverseordered",{"2":{"9":1,"76":1}}],["rewrote",{"2":{"39":1,"40":1,"51":1,"62":1,"66":1,"85":1}}],["realization",{"2":{"40":1,"51":1,"62":1,"66":1}}],["realm",{"2":{"39":1,"85":1}}],["readcubedata",{"2":{"32":2,"72":1}}],["read",{"0":{"38":1,"39":1,"40":1,"41":1},"1":{"39":1,"40":1,"41":1},"2":{"1":1,"32":1,"38":1,"41":1,"44":1,"54":1,"72":1}}],["resets",{"2":{"72":1,"73":1}}],["respectively",{"2":{"59":1}}],["reshape",{"2":{"29":1,"31":2}}],["result",{"2":{"26":1,"34":1}}],["resulting",{"2":{"8":1,"9":1,"14":1,"72":1,"73":1}}],["results",{"0":{"80":1},"2":{"2":1,"5":1,"50":2,"72":1,"73":1}}],["requests",{"2":{"68":1}}],["requested",{"2":{"13":1}}],["requirements",{"2":{"40":1,"51":1,"62":1,"66":1}}],["required",{"2":{"29":1}}],["reference",{"0":{"71":1},"1":{"72":1,"73":1}}],["references",{"2":{"40":1,"51":1,"62":1,"66":1}}],["ref",{"2":{"27":1,"72":1,"73":1}}],["rebuild",{"2":{"25":1,"44":1}}],["repeat",{"2":{"78":1}}],["repl",{"2":{"75":1}}],["replace",{"2":{"16":1,"44":1,"89":1}}],["repository",{"2":{"68":1,"81":1}}],["reports",{"2":{"68":1}}],["reproduces",{"2":{"43":1}}],["represented",{"2":{"72":1,"83":1}}],["represents",{"2":{"59":1}}],["representing",{"2":{"15":2,"73":1}}],["representation",{"2":{"1":1,"72":2,"73":3}}],["re",{"2":{"15":1}}],["returned",{"2":{"72":1}}],["returns",{"2":{"72":5,"73":2}}],["return",{"2":{"15":4,"45":1,"72":1,"73":1,"79":1}}],["registration",{"2":{"73":2}}],["registered",{"2":{"73":1}}],["regions",{"2":{"15":8}}],["region",{"2":{"15":12}}],["regular",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"15":8,"18":2,"19":6,"20":4,"22":9,"23":3,"25":9,"26":2,"27":3,"29":14,"31":6,"32":4,"33":9,"34":3,"36":1,"37":5,"39":2,"40":4,"45":2,"46":2,"50":6,"51":2,"52":4,"53":2,"54":3,"55":10,"56":2,"62":2,"66":5,"67":2,"76":5,"79":1,"85":1}}],["regularchunks",{"2":{"2":6,"4":3,"5":3,"6":3}}],["removes",{"2":{"73":1}}],["remove",{"2":{"46":1}}],["removed",{"2":{"15":1,"73":1}}],["remote",{"2":{"0":1}}],["hold",{"2":{"72":1}}],["holds",{"2":{"72":1,"73":1}}],["however",{"2":{"17":1,"29":1}}],["how",{"0":{"27":1,"28":1,"33":1,"34":1,"35":1},"1":{"29":1,"30":1,"31":1,"32":1,"36":1,"37":1},"2":{"6":1,"7":1,"10":1,"17":1,"21":1,"24":1,"34":1,"38":1,"72":1,"81":1,"83":1}}],["http",{"2":{"70":1}}],["https",{"2":{"40":1,"41":1,"44":2,"51":1,"59":1,"62":1}}],["html",{"2":{"59":1}}],["hm",{"2":{"50":8}}],["hidedecorations",{"2":{"50":1}}],["highclip",{"2":{"50":4}}],["history",{"2":{"39":2,"40":2,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1,"85":1}}],["hr",{"2":{"39":1,"85":2}}],["happens",{"2":{"73":1}}],["had",{"2":{"72":1,"73":1}}],["hamman",{"2":{"43":1,"50":1}}],["handled",{"2":{"73":1}}],["handle",{"2":{"58":1,"73":1}}],["handling",{"2":{"9":1,"72":1}}],["handy",{"2":{"34":1}}],["has",{"2":{"8":1,"9":1,"15":1,"19":1,"20":1,"32":1,"43":1,"46":1,"73":1}}],["half",{"2":{"8":5}}],["have",{"2":{"6":1,"9":1,"15":1,"22":1,"30":1,"32":2,"60":1,"72":3}}],["having",{"2":{"1":1,"15":1}}],["help",{"2":{"72":1,"73":2}}],["height",{"2":{"39":2,"85":1}}],["heatmap",{"0":{"86":1},"2":{"34":1,"50":3,"86":1}}],["hereby",{"2":{"15":1}}],["here",{"2":{"8":1,"9":1,"13":1,"15":1,"28":1,"34":1,"54":1,"67":1,"69":2}}],["hence",{"2":{"1":1}}],["ylabel=",{"2":{"78":1,"80":1}}],["ylabel",{"2":{"50":3}}],["yeesian",{"2":{"41":1}}],["years",{"2":{"29":1,"78":1,"79":1}}],["year",{"2":{"8":4,"80":1}}],["yyyy",{"2":{"40":2,"51":2,"62":2,"66":2}}],["yasxa",{"2":{"32":6}}],["yaxcolumn",{"2":{"73":1}}],["yaxconvert",{"2":{"20":2}}],["yaxdefaults",{"2":{"73":1}}],["yaxarraybase",{"2":{"20":1,"72":1,"73":1}}],["yaxarray",{"0":{"11":1,"22":1,"28":1,"29":1,"52":1,"58":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"2":1,"4":4,"5":4,"6":4,"7":1,"8":3,"9":3,"10":2,"12":1,"13":1,"14":2,"15":3,"16":1,"18":4,"19":3,"20":5,"22":5,"23":2,"25":3,"26":1,"27":3,"28":1,"29":15,"31":4,"32":6,"33":3,"34":4,"36":2,"37":4,"39":2,"40":2,"44":2,"45":7,"46":1,"48":9,"49":1,"50":3,"51":2,"52":2,"53":3,"54":3,"55":5,"58":1,"60":1,"62":1,"63":1,"64":1,"66":2,"67":3,"72":10,"73":3,"76":5,"79":2,"83":1,"85":1}}],["yaxarrays",{"0":{"0":1,"1":1,"2":1,"7":1,"10":1,"17":1,"21":1,"35":1,"38":1,"42":1,"51":1,"62":1,"68":1,"82":1,"83":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"8":1,"9":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"18":1,"19":1,"20":1,"22":1,"23":1,"36":1,"37":1,"39":1,"40":1,"41":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"52":1,"53":1,"54":1,"55":1,"56":1,"63":1,"64":1,"65":1,"66":1,"67":1,"69":1,"70":1},"2":{"0":3,"2":1,"4":1,"5":1,"6":1,"8":1,"9":1,"10":2,"15":1,"16":2,"17":2,"18":1,"22":1,"25":1,"27":1,"28":1,"29":1,"30":1,"31":2,"32":4,"36":1,"37":1,"38":1,"39":1,"40":1,"41":2,"42":1,"51":1,"57":1,"59":1,"62":1,"65":1,"67":1,"68":1,"70":1,"72":27,"73":28,"75":3,"76":3,"77":2,"79":1,"81":1,"82":1,"85":1}}],["yax",{"2":{"0":1}}],["y",{"2":{"4":2,"5":3,"6":2,"19":4,"20":3,"29":4,"33":4,"45":2,"46":1,"50":3,"58":1,"76":5}}],["you",{"2":{"1":1,"16":1,"28":1,"32":3,"69":1,"70":2,"72":1,"73":2,"75":2,"77":1,"81":3,"83":2}}],["yourself",{"2":{"70":1}}],["your",{"2":{"1":2,"32":2,"65":2,"69":4,"70":4,"72":1}}],["circshift",{"2":{"87":1}}],["ct1",{"2":{"85":4,"86":1}}],["cycle",{"0":{"78":1,"80":1},"1":{"79":1,"80":1},"2":{"79":4}}],["cycle=12",{"2":{"45":2,"46":1,"48":2,"49":2,"50":3}}],["cdata",{"2":{"73":1}}],["center",{"2":{"72":1,"78":1,"80":1}}],["certain",{"2":{"51":2,"73":1}}],["cell",{"2":{"39":2,"40":1,"52":2,"53":3,"54":3,"55":5,"72":1}}],["c54",{"2":{"50":1}}],["cb",{"2":{"50":1}}],["cbar",{"2":{"34":1}}],["cftime",{"2":{"40":6,"45":4,"48":7,"49":5,"50":5,"51":3,"52":6,"53":7,"54":9,"55":15,"62":3,"66":3}}],["cf",{"2":{"39":2,"40":2,"51":2,"62":2,"66":2,"85":2}}],["cmpcachmisses",{"2":{"73":1}}],["cm4",{"2":{"40":4,"51":4,"62":4,"66":4}}],["cmip",{"2":{"39":1,"85":1}}],["cmip6",{"2":{"39":3,"85":6}}],["cmor",{"2":{"39":2,"40":3,"51":2,"52":2,"53":3,"54":3,"55":5,"62":2,"66":2,"85":1}}],["cgrad",{"2":{"34":1}}],["cl",{"2":{"87":1,"88":1}}],["cl=lines",{"2":{"87":1,"88":1}}],["clean",{"2":{"73":1}}],["cleanme",{"2":{"73":4}}],["cleaner",{"2":{"72":2}}],["closedinterval",{"2":{"55":1}}],["closed",{"0":{"55":1},"2":{"55":3}}],["cloud",{"2":{"11":1,"39":1}}],["climate",{"2":{"40":1,"51":1,"62":1,"66":1}}],["classes=classes",{"2":{"34":1}}],["classes",{"2":{"34":8}}],["classification",{"2":{"34":2}}],["class",{"2":{"34":3}}],["clustermanagers",{"2":{"16":2}}],["cluster",{"2":{"16":1}}],["cpus",{"2":{"16":1}}],["cpu",{"2":{"16":1}}],["custom",{"2":{"22":1,"72":1}}],["currently",{"2":{"44":1,"81":1}}],["current",{"2":{"15":2,"59":1,"72":1,"80":1}}],["cubeaxis",{"2":{"73":1}}],["cubeaxes",{"2":{"72":1}}],["cubedir",{"2":{"73":1}}],["cube2",{"2":{"72":1}}],["cube1",{"2":{"72":1}}],["cubelist",{"2":{"72":1}}],["cubefittable",{"2":{"34":2,"72":1}}],["cubetable",{"0":{"34":1},"2":{"34":3,"72":3}}],["cubes",{"0":{"27":1},"2":{"9":2,"27":2,"32":1,"33":2,"34":1,"52":1,"60":1,"72":18,"73":9}}],["cube",{"0":{"25":1,"26":1,"28":1,"60":1,"79":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"2":1,"4":1,"5":1,"6":1,"26":1,"28":2,"32":1,"33":1,"34":2,"44":1,"60":3,"72":34,"73":19,"83":1}}],["c",{"2":{"15":11,"25":3,"26":3,"34":2,"37":2,"59":1,"72":3,"73":3,"79":4,"85":2}}],["check",{"2":{"67":1,"77":1}}],["chose",{"2":{"59":1}}],["child",{"2":{"39":1,"85":1}}],["changed",{"2":{"77":1,"81":1}}],["change",{"2":{"10":1,"72":1,"73":1}}],["chunkoffset",{"2":{"73":1}}],["chunksize`",{"2":{"73":1}}],["chunksizes",{"2":{"72":2}}],["chunksize",{"2":{"72":1,"73":3}}],["chunks",{"0":{"4":1},"2":{"2":5,"4":1,"5":1,"6":2,"72":4,"73":11}}],["chunked",{"2":{"2":5}}],["chunking",{"0":{"2":1,"3":1,"5":1,"6":1},"1":{"4":1,"5":1,"6":1},"2":{"1":1,"5":1,"72":4,"73":3}}],["chunk",{"0":{"1":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"1":1,"2":1,"4":1,"5":1,"72":4,"73":4}}],["criteria",{"2":{"34":1}}],["creating",{"2":{"10":1,"29":1,"69":1}}],["createdataset",{"2":{"73":2}}],["created",{"2":{"73":2}}],["creates",{"2":{"34":1,"72":2,"73":1}}],["create",{"0":{"21":1,"22":1,"23":1},"1":{"22":1,"23":1},"2":{"10":1,"15":2,"21":1,"22":1,"27":1,"29":2,"34":1,"44":1,"48":1,"62":1,"65":1,"67":3,"72":1,"73":1,"76":1,"78":1}}],["crucial",{"2":{"1":1}}],["coastlines",{"2":{"87":3,"88":1}}],["cosd",{"2":{"72":1}}],["country",{"2":{"72":4}}],["country=cube2",{"2":{"72":1}}],["copies",{"2":{"73":1}}],["copied",{"2":{"67":1}}],["copybuf",{"2":{"73":2}}],["copydata",{"2":{"73":1}}],["copy",{"2":{"25":1,"70":1,"72":1}}],["coordinates",{"2":{"39":1}}],["college",{"2":{"81":1}}],["collected",{"2":{"73":1}}],["collectfromhandle",{"2":{"73":1}}],["collection",{"2":{"24":1,"58":1}}],["collect",{"2":{"18":1,"26":3,"79":1}}],["colonperm",{"2":{"73":1}}],["color=",{"2":{"80":3}}],["color",{"2":{"78":1,"87":1,"88":1,"89":1}}],["colormap=",{"2":{"50":1}}],["colormap=makie",{"2":{"34":1}}],["colormap",{"2":{"50":3,"86":1,"87":1,"88":1,"89":1}}],["colorrange=",{"2":{"50":1}}],["colorrange",{"2":{"50":3}}],["colorbar",{"2":{"34":1,"50":2}}],["column",{"2":{"61":1,"73":1}}],["colgap",{"2":{"50":1}}],["configuration",{"2":{"73":2}}],["concatenating",{"2":{"72":1}}],["concatenates",{"2":{"72":1}}],["concatenate",{"0":{"27":1},"2":{"27":2}}],["concatenatecubes",{"0":{"9":1},"2":{"9":2,"27":2,"72":2}}],["concrete",{"2":{"72":2}}],["contrast",{"2":{"72":1}}],["contributing",{"2":{"69":1}}],["contribute",{"0":{"68":1,"69":1},"1":{"69":1,"70":2}}],["content",{"2":{"72":1}}],["continue",{"2":{"45":1}}],["contact",{"2":{"40":1,"51":1,"62":1,"66":1}}],["contains",{"2":{"55":1,"72":1,"73":1}}],["contain",{"2":{"39":1,"40":1,"73":1}}],["containing",{"2":{"8":1,"34":1,"59":1,"60":1,"72":1}}],["constant",{"2":{"73":1}}],["construct",{"2":{"72":2}}],["constructor",{"2":{"72":1}}],["constructs",{"2":{"72":1}}],["consolidated=true",{"2":{"39":1,"85":1}}],["considering",{"2":{"43":1}}],["considered",{"2":{"34":1}}],["consistent",{"2":{"39":1,"85":1}}],["consisting",{"2":{"8":1}}],["convinient",{"2":{"24":1}}],["conventions",{"2":{"40":1,"51":1,"62":1,"66":1}}],["convenient",{"2":{"16":1}}],["conversion",{"2":{"17":1,"19":1,"20":1}}],["conversions",{"2":{"17":1}}],["converted",{"2":{"60":1}}],["convert",{"0":{"17":1,"18":1,"19":1,"20":1},"1":{"18":1,"19":1,"20":1},"2":{"17":1,"18":2,"20":2,"72":1,"73":1}}],["corresponding",{"2":{"7":1,"15":2,"60":1,"72":1}}],["combining",{"0":{"84":1}}],["combined",{"2":{"9":2,"60":2}}],["combine",{"0":{"7":1},"1":{"8":1,"9":1},"2":{"7":1,"8":1,"9":1,"83":1}}],["com",{"2":{"41":1,"44":2}}],["comment",{"2":{"39":1}}],["common",{"2":{"32":5,"72":1}}],["compiler",{"2":{"77":1}}],["compares",{"2":{"73":1}}],["compatible",{"2":{"41":1}}],["compuation",{"2":{"72":1}}],["computing",{"2":{"34":1}}],["computations",{"2":{"13":1,"33":1}}],["computation",{"0":{"16":1},"2":{"13":1,"58":1,"72":3,"73":3}}],["computed",{"2":{"73":1}}],["compute",{"0":{"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1},"2":{"79":1}}],["comply",{"2":{"40":1,"51":1,"62":1,"66":1}}],["complexity",{"2":{"33":1}}],["complex",{"2":{"10":2,"76":1}}],["comes",{"2":{"1":1}}],["code",{"2":{"6":1,"13":1,"16":2,"24":1}}],["captialisation",{"2":{"73":1}}],["cameracontrols",{"2":{"89":1}}],["came",{"2":{"60":1}}],["cairomakie",{"2":{"50":1,"78":2}}],["caxes",{"2":{"25":2,"72":2}}],["car",{"2":{"15":1}}],["cartesianindex",{"2":{"15":11}}],["caluclate",{"2":{"72":1}}],["calculations",{"2":{"50":1,"73":1}}],["calculating",{"2":{"14":1,"72":1}}],["calculates",{"2":{"72":1}}],["calculated",{"2":{"34":2,"45":1}}],["calculate",{"2":{"14":1,"15":1,"34":2,"42":1,"43":2,"45":1,"50":1,"73":2,"79":1}}],["called",{"2":{"58":3,"73":1}}],["calling",{"2":{"50":1}}],["call",{"2":{"1":1,"16":1}}],["case",{"2":{"13":1,"32":1,"39":1,"47":1}}],["cases",{"2":{"0":1,"55":1,"81":1}}],["cataxis",{"2":{"72":2}}],["categoricalaxis",{"2":{"72":1}}],["categorical",{"2":{"9":1,"15":1,"27":1,"34":1,"45":2,"46":1,"47":1,"48":2,"49":2,"50":3,"72":1,"73":1,"76":1}}],["cat",{"0":{"8":1},"2":{"8":2}}],["cache=1gb```",{"2":{"72":1}}],["cache=",{"2":{"72":1}}],["cache=5",{"2":{"72":1}}],["cache=yaxdefaults",{"2":{"72":1}}],["caches",{"2":{"0":1}}],["cachesize",{"2":{"0":2,"73":1}}],["cache",{"2":{"0":6,"65":1,"72":4,"73":7}}],["caching",{"0":{"0":1}}],["can",{"2":{"0":5,"2":1,"3":1,"13":2,"14":1,"15":1,"16":3,"22":2,"27":1,"28":1,"30":1,"32":1,"33":1,"34":2,"39":2,"40":1,"41":1,"46":1,"50":1,"56":1,"58":3,"59":2,"60":1,"66":1,"69":1,"72":11,"73":6,"75":2,"81":2}}],["msc",{"2":{"79":3,"80":2}}],["mscarray",{"2":{"79":2}}],["md",{"2":{"69":2}}],["mdash",{"2":{"65":1,"72":24,"73":24}}],["mm",{"2":{"40":2,"51":2,"62":2,"66":2}}],["mpi",{"2":{"39":1,"85":2}}],["m",{"2":{"18":2}}],["miss",{"2":{"73":1}}],["missing",{"2":{"14":2,"15":2,"33":1,"34":2,"40":2,"52":4,"53":6,"54":6,"55":10,"67":3,"72":2,"73":2,"89":1}}],["minimized",{"2":{"73":1}}],["minutes",{"2":{"40":1,"52":2,"53":3,"54":3,"55":5}}],["might",{"2":{"17":1,"81":1}}],["mymean",{"2":{"16":4}}],["manager",{"2":{"75":1}}],["many",{"2":{"58":1,"73":1}}],["mahecha",{"2":{"60":1}}],["mar",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["master",{"2":{"44":1}}],["mask",{"2":{"34":2}}],["maximal",{"2":{"73":1}}],["maximum",{"2":{"33":1,"72":1,"73":1}}],["maxbuf",{"2":{"73":1}}],["max",{"2":{"65":1,"72":7,"73":2}}],["maxsize",{"2":{"0":2}}],["makie",{"2":{"50":1,"89":1}}],["making",{"2":{"11":1,"51":1}}],["make",{"2":{"31":1,"32":2,"67":1,"70":1,"72":1,"73":2,"89":1}}],["main",{"2":{"28":1,"73":1}}],["machine",{"2":{"16":1,"58":1}}],["matching",{"2":{"76":1}}],["match",{"2":{"73":2}}],["matched",{"2":{"72":1}}],["mat",{"2":{"15":4}}],["matrix",{"2":{"15":1,"18":1,"46":1,"50":2,"58":1,"79":1}}],["may",{"2":{"10":1,"15":1,"39":1,"40":1,"45":4,"46":2,"47":1,"48":4,"49":4,"50":6,"77":1}}],["maps",{"0":{"85":1},"1":{"86":1}}],["mapslice",{"2":{"16":1}}],["mapslices",{"0":{"14":1},"2":{"10":1,"13":1,"14":1,"16":1,"33":1,"79":1}}],["mapped",{"2":{"72":1}}],["mapping",{"2":{"72":1,"73":3}}],["mapcube",{"0":{"15":1},"2":{"10":1,"13":1,"15":3,"16":3,"72":5,"73":2}}],["map",{"0":{"13":1,"33":1},"2":{"10":1,"13":2,"15":3,"16":3,"33":4,"34":1,"45":2,"49":1,"50":1,"72":2,"76":1,"79":2}}],["moll",{"0":{"88":1}}],["mowingwindow",{"2":{"72":1}}],["movingwindow",{"2":{"72":4}}],["module",{"2":{"72":2}}],["model",{"2":{"40":1,"51":1,"59":2,"62":1,"66":1}}],["modification",{"2":{"11":1,"16":1}}],["modify",{"0":{"11":1}}],["monthday",{"2":{"79":4}}],["monthly",{"0":{"43":1}}],["month",{"2":{"29":7,"31":3,"32":4,"43":1,"45":4,"46":1,"47":1,"48":5,"49":2,"50":3,"72":1,"79":2}}],["moment",{"2":{"20":1}}],["more",{"2":{"9":1,"10":1,"28":1,"33":1,"34":1,"54":1,"55":1,"60":1,"65":1,"72":3,"73":1,"76":1}}],["most",{"2":{"1":1,"15":1,"17":1}}],["mesh",{"2":{"89":2}}],["merely",{"2":{"67":1}}],["measured",{"2":{"59":1,"60":1}}],["measure",{"2":{"58":1}}],["measures",{"2":{"39":1}}],["means",{"0":{"43":1},"2":{"14":1,"72":1}}],["mean",{"0":{"78":1,"80":1},"1":{"79":1,"80":1},"2":{"10":1,"14":3,"16":4,"34":4,"39":1,"40":1,"45":10,"46":2,"47":1,"50":2,"52":2,"53":3,"54":3,"55":5,"72":1,"79":5}}],["method",{"2":{"72":17,"73":18}}],["methods",{"2":{"7":1,"16":1,"39":1,"40":1,"52":2,"53":3,"54":3,"55":5}}],["meter",{"2":{"39":1}}],["metadata",{"2":{"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"15":3,"17":1,"18":1,"19":2,"20":3,"22":2,"25":1,"26":1,"27":1,"29":5,"33":3,"34":3,"39":1,"40":1,"45":2,"46":1,"48":3,"49":2,"50":3,"52":2,"53":3,"54":3,"55":5,"67":2,"72":1,"76":3,"79":1}}],["members",{"2":{"73":1}}],["member",{"2":{"6":1}}],["memory",{"2":{"1":1,"15":1,"17":3,"32":4,"44":1,"58":1,"67":1,"72":2,"73":1}}],["multiplying",{"2":{"33":1}}],["multiply",{"2":{"10":1,"33":1}}],["multiple",{"0":{"37":1,"84":1},"2":{"7":1,"16":1,"39":1,"40":1,"58":1,"72":1}}],["must",{"2":{"0":1,"60":1,"72":1,"73":1}}],["mb",{"2":{"0":1,"40":1,"52":2}}],["pkg",{"2":{"75":2}}],["pkg>",{"2":{"70":1}}],["purple",{"2":{"78":1}}],["purpose",{"2":{"24":1,"33":1}}],["public",{"0":{"72":1}}],["published",{"2":{"50":1}}],["pull",{"2":{"68":1}}],["plt",{"2":{"86":1}}],["place",{"2":{"73":1}}],["plots",{"2":{"89":1}}],["plot",{"0":{"80":1,"86":1,"89":1},"2":{"50":2}}],["plotting",{"0":{"85":1},"1":{"86":1},"2":{"0":1}}],["plus",{"2":{"44":1,"72":1}}],["pydata",{"2":{"44":1}}],["p",{"2":{"32":10,"40":1,"51":1,"62":1,"66":1}}],["picture",{"2":{"58":1,"59":1}}],["pieces",{"2":{"24":1}}],["pixel",{"0":{"78":1},"1":{"79":1,"80":1},"2":{"16":2}}],["page",{"2":{"89":1}}],["pair",{"2":{"73":1}}],["pass",{"2":{"72":1}}],["passing",{"2":{"72":3}}],["passed",{"2":{"72":4}}],["paste",{"2":{"70":1}}],["partitioned",{"2":{"73":1}}],["participate",{"2":{"72":1}}],["particular",{"2":{"61":1}}],["parts",{"2":{"72":1}}],["parent",{"2":{"39":1,"85":1}}],["parallelized",{"2":{"73":1}}],["parallelisation",{"2":{"72":1}}],["parallel",{"2":{"16":1,"58":1}}],["packages",{"2":{"17":1}}],["package",{"2":{"16":1,"54":1,"56":1,"71":1,"75":1}}],["paths",{"2":{"73":2}}],["path=",{"2":{"39":1,"63":1,"64":1,"65":1,"66":1,"73":1}}],["path=f",{"2":{"4":1,"5":1,"6":1}}],["path",{"2":{"0":1,"39":3,"40":2,"41":2,"44":2,"51":2,"62":2,"65":3,"70":1,"72":4}}],["post=getpostfunction",{"2":{"72":1}}],["positions",{"2":{"73":2}}],["position",{"2":{"58":1}}],["positional",{"2":{"53":1,"54":1}}],["possible",{"2":{"16":2,"17":1,"27":1,"67":1,"72":3,"73":1}}],["pos",{"2":{"15":2}}],["point3f",{"2":{"89":1}}],["point",{"2":{"15":3,"39":1,"76":1}}],["points",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":4,"15":16,"16":1,"18":2,"19":6,"20":4,"22":9,"23":3,"25":9,"26":2,"27":3,"29":14,"31":6,"32":21,"33":9,"34":5,"36":1,"37":5,"39":6,"40":6,"45":3,"46":2,"48":2,"49":1,"50":7,"51":3,"52":6,"53":4,"54":9,"55":16,"56":2,"58":2,"59":1,"62":3,"66":6,"67":2,"76":5,"79":1,"85":3}}],["pr",{"2":{"70":1}}],["projection",{"0":{"87":1,"88":1},"1":{"88":1,"89":1}}],["props",{"2":{"76":2}}],["properly",{"2":{"43":1}}],["properties=dict",{"2":{"73":1}}],["properties",{"2":{"10":2,"16":2,"22":3,"23":3,"39":1,"40":1,"44":1,"50":1,"51":1,"62":1,"66":1,"72":5,"73":1,"85":1}}],["probably",{"2":{"73":1}}],["provide",{"2":{"72":1}}],["provides",{"2":{"58":1,"82":1}}],["provided",{"2":{"28":1,"72":1}}],["process",{"2":{"58":1,"73":2}}],["processed",{"2":{"13":1}}],["progressmeter",{"2":{"72":1}}],["progress",{"2":{"44":1,"81":1,"83":1}}],["product",{"2":{"15":1}}],["pressing",{"2":{"75":1}}],["pre",{"2":{"72":2}}],["previous",{"2":{"50":1,"65":1,"72":1}}],["previously",{"2":{"34":1}}],["prepared",{"2":{"40":1,"51":1,"62":1,"66":1}}],["prep",{"2":{"9":2}}],["precipitation",{"2":{"9":2,"59":1,"60":1,"76":2}}],["prior",{"2":{"1":1}}],["permute",{"2":{"73":1}}],["permuteloopaxes",{"2":{"73":1}}],["permutation",{"2":{"73":1}}],["persistend",{"2":{"73":1}}],["persistency",{"2":{"73":1}}],["persistent",{"2":{"72":1,"73":2}}],["persist",{"2":{"65":1,"72":1,"73":1}}],["perform",{"2":{"73":1}}],["performed",{"2":{"13":2}}],["performing",{"2":{"10":1}}],["per",{"2":{"7":1,"14":1,"45":1,"48":1,"49":1}}],["=interval",{"2":{"55":2}}],["==",{"2":{"12":1,"79":1}}],["=>nan",{"2":{"89":1}}],["=>",{"2":{"10":2,"12":1,"13":1,"15":5,"16":1,"22":3,"23":3,"36":1,"37":1,"39":20,"40":20,"44":1,"45":5,"46":1,"48":3,"49":2,"50":3,"51":10,"52":20,"53":30,"54":30,"55":50,"62":10,"66":10,"76":6,"85":10}}],["=>2",{"2":{"4":1}}],["=>10",{"2":{"4":1}}],["=>5",{"2":{"4":1,"5":1}}],["=",{"2":{"0":5,"2":4,"4":9,"5":15,"6":9,"8":5,"9":5,"10":4,"11":1,"12":1,"13":1,"15":16,"16":5,"18":3,"19":8,"20":4,"22":5,"23":4,"25":1,"27":6,"29":7,"31":6,"32":17,"34":7,"36":1,"37":3,"39":2,"40":2,"41":2,"44":8,"45":16,"46":1,"47":1,"48":4,"49":1,"50":22,"51":2,"52":2,"53":6,"54":6,"55":3,"62":2,"65":8,"66":2,"67":2,"72":11,"73":7,"76":5,"78":10,"79":11,"80":5,"85":8,"86":5,"87":7,"88":5,"89":6}}],["dc",{"2":{"73":2}}],["drivers",{"2":{"72":1}}],["driver",{"2":{"65":2,"72":6}}],["driver=",{"2":{"4":1,"5":1,"6":1,"63":2,"64":2,"65":3,"66":1,"67":1,"72":3}}],["drop",{"2":{"50":1}}],["dropdims",{"0":{"46":1},"2":{"45":2,"46":2,"50":1}}],["dkrz",{"2":{"39":1,"85":2}}],["due",{"2":{"47":1}}],["dufresne",{"2":{"40":1,"51":1,"62":1,"66":1}}],["dummy",{"2":{"27":1,"29":1,"78":1,"79":1}}],["during",{"2":{"15":1,"16":1,"17":1}}],["dd",{"2":{"25":1,"79":1}}],["d",{"2":{"15":5,"50":3,"79":1}}],["dash",{"2":{"80":1}}],["danger",{"2":{"65":1}}],["daysinmonth",{"2":{"45":1,"48":1}}],["days",{"2":{"43":1,"45":2,"47":1,"48":2,"49":2}}],["day",{"2":{"10":2,"12":1,"13":1,"14":1,"15":3,"16":1,"22":3,"23":1,"78":1,"79":4,"80":1}}],["datconfig",{"2":{"73":2}}],["datset",{"2":{"72":1}}],["dat",{"2":{"72":8,"73":16}}],["datetimenoleap",{"2":{"45":4,"48":7,"49":5,"50":5}}],["datetime360day",{"2":{"40":6,"51":3,"52":6,"53":7,"54":9,"55":15,"62":3,"66":3}}],["datetime",{"2":{"39":2,"85":1}}],["date",{"2":{"10":5,"12":3,"13":3,"14":3,"15":11,"16":3,"22":8,"23":3,"29":24,"31":8,"32":11,"58":1,"78":2,"79":5,"85":1}}],["datesid",{"2":{"79":2}}],["dates",{"2":{"10":2,"12":1,"13":1,"14":1,"15":3,"16":1,"22":3,"23":1,"29":8,"31":4,"32":5,"42":1,"60":1,"78":1,"79":2,"85":1}}],["data=cube1",{"2":{"72":1}}],["databases",{"2":{"58":1}}],["dataframe",{"2":{"34":1,"72":1}}],["dataframes",{"2":{"34":1}}],["datacubes",{"2":{"72":1}}],["datacube",{"0":{"84":1},"2":{"34":2,"67":1,"72":1}}],["datatypes",{"2":{"28":1}}],["data1",{"2":{"27":2}}],["data3",{"2":{"23":1}}],["data2",{"2":{"22":2,"27":2}}],["datasetaxis",{"2":{"72":2,"73":1}}],["datasetaxis=",{"2":{"72":1,"73":1}}],["dataset",{"0":{"23":1,"28":1,"30":1,"31":1,"32":1,"35":1,"59":1,"65":1,"66":1},"1":{"29":1,"30":1,"31":2,"32":2,"36":1,"37":1},"2":{"0":3,"3":1,"4":4,"5":2,"6":3,"9":1,"10":1,"17":1,"23":2,"30":1,"31":3,"32":5,"36":2,"37":2,"39":3,"40":3,"41":2,"51":3,"52":1,"59":3,"60":2,"62":3,"63":1,"64":1,"65":3,"66":4,"72":18,"73":9,"85":2}}],["datasets",{"0":{"3":1,"21":1,"38":1,"42":1,"51":1,"62":1},"1":{"4":1,"5":1,"6":1,"22":1,"23":1,"39":1,"40":1,"41":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"52":1,"53":1,"54":1,"55":1,"56":1,"63":1,"64":1,"65":1,"66":1,"67":1},"2":{"0":2,"17":1,"21":1,"32":1,"38":1,"65":1,"72":8,"73":4,"83":1}}],["data",{"0":{"26":1,"44":1,"60":1},"2":{"0":3,"1":2,"7":1,"8":1,"10":2,"11":1,"15":2,"16":2,"18":1,"19":1,"26":1,"29":1,"31":1,"32":2,"34":2,"39":2,"40":4,"44":8,"51":3,"52":2,"53":3,"54":3,"55":5,"57":1,"58":3,"59":2,"60":3,"62":3,"65":2,"66":3,"67":3,"72":20,"73":12,"76":4,"77":1,"78":2,"79":1,"83":4,"85":5,"87":1}}],["detect",{"2":{"72":1,"73":1}}],["determined",{"2":{"73":1}}],["determines",{"2":{"72":1}}],["determine",{"2":{"1":1,"72":1}}],["defaultfillval",{"2":{"73":1}}],["default",{"2":{"72":1,"73":4}}],["defaults",{"2":{"72":7}}],["definition",{"2":{"60":1}}],["defining",{"2":{"16":1}}],["defines",{"2":{"72":1}}],["define",{"0":{"79":1},"2":{"29":1,"34":1,"50":1,"72":2,"78":1}}],["defined",{"2":{"19":1,"20":1,"34":1,"50":1,"56":1,"58":1,"61":1,"76":1}}],["dev",{"2":{"70":1}}],["dependencies",{"2":{"70":1}}],["deletes",{"2":{"65":1,"72":1}}],["delete",{"2":{"65":2}}],["denoting",{"2":{"72":1}}],["dense",{"2":{"58":1}}],["denvil",{"2":{"40":2,"51":2,"62":2,"66":2}}],["dec",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["degc",{"2":{"40":1,"52":2,"53":3,"54":3,"55":5}}],["dest",{"2":{"88":1}}],["desired",{"2":{"73":4}}],["designed",{"2":{"17":2,"58":1}}],["desc",{"2":{"72":3,"73":3}}],["descriptor",{"2":{"73":4}}],["descriptors",{"2":{"72":2}}],["descriptions",{"2":{"72":1}}],["description",{"2":{"28":1,"72":4,"73":11}}],["described",{"2":{"83":1}}],["describe",{"2":{"72":2}}],["describes",{"2":{"7":1,"10":1,"17":1,"21":1,"38":1,"55":1,"57":1,"71":1,"73":1}}],["describing",{"2":{"72":1}}],["demand",{"2":{"13":1}}],["diverging",{"2":{"50":1}}],["divided",{"2":{"33":1}}],["differing",{"2":{"72":1}}],["difference",{"2":{"50":1}}],["differences",{"2":{"45":1,"50":1,"73":1}}],["different",{"2":{"9":2,"16":1,"25":1,"43":1,"59":1,"72":3,"73":2,"81":1}}],["diff",{"2":{"45":2,"50":3}}],["directory",{"2":{"39":1,"63":2,"64":2}}],["directories",{"2":{"38":1,"73":1}}],["directly",{"2":{"20":1,"21":1,"22":1}}],["dictionary",{"2":{"59":1,"72":3}}],["dict",{"2":{"4":1,"5":1,"8":1,"9":1,"10":2,"12":1,"13":1,"14":2,"15":4,"16":1,"18":1,"19":2,"20":3,"22":4,"23":2,"25":1,"26":1,"27":1,"29":5,"33":3,"34":3,"39":2,"40":2,"45":3,"46":2,"48":4,"49":3,"50":3,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1,"67":1,"72":3,"76":3,"79":1,"85":1}}],["dimgroupbyarray",{"2":{"45":1,"48":1}}],["dime",{"2":{"39":1}}],["dimensional",{"2":{"57":1,"58":2,"72":1}}],["dimensionaldata",{"2":{"15":1,"20":2,"25":1,"29":1,"31":1,"32":1,"42":1,"44":1,"45":16,"46":10,"48":6,"49":6,"50":39,"54":1,"55":2,"56":3,"58":1,"61":1,"76":1,"77":3,"79":1,"85":1}}],["dimensions",{"0":{"31":1,"32":1},"2":{"9":1,"10":1,"13":1,"15":3,"16":1,"22":2,"27":1,"30":1,"32":3,"33":2,"44":1,"45":16,"46":10,"48":6,"49":6,"50":39,"51":1,"56":2,"58":3,"59":1,"72":8,"73":3,"76":3,"77":1}}],["dimension",{"0":{"8":1,"9":1,"56":1,"61":1},"2":{"2":1,"8":2,"9":1,"10":1,"14":2,"15":3,"29":1,"32":1,"46":1,"47":1,"50":1,"54":1,"56":1,"58":1,"60":1,"61":1,"72":3,"73":3,"76":1}}],["dimarray",{"0":{"20":1},"2":{"15":3,"20":6,"45":1,"46":1,"48":1,"49":2,"50":3,"58":1}}],["dims=2",{"2":{"79":1}}],["dims=",{"2":{"14":2,"16":1,"33":1,"45":5,"46":1,"48":1,"50":1}}],["dims",{"2":{"8":3,"9":1,"10":1,"12":1,"13":1,"14":2,"15":4,"18":1,"19":3,"20":2,"22":2,"25":3,"26":1,"27":1,"29":5,"33":3,"34":3,"39":1,"40":1,"44":1,"45":6,"46":1,"48":5,"49":2,"50":5,"52":2,"53":3,"54":3,"55":5,"67":1,"76":2,"79":1}}],["dim",{"2":{"2":2,"4":7,"5":8,"6":2,"8":2,"9":3,"10":3,"15":4,"16":3,"18":2,"20":2,"22":7,"25":9,"26":3,"27":4,"29":3,"31":3,"32":2,"36":1,"37":5,"45":2,"46":2,"50":6,"66":3,"67":2,"76":4,"79":1}}],["disregard",{"2":{"73":1}}],["dispatch",{"2":{"73":1}}],["discribe",{"2":{"72":2}}],["distribute",{"2":{"16":1}}],["distributed",{"0":{"16":1},"2":{"0":1,"16":2}}],["diskarray",{"2":{"72":1}}],["diskarrays",{"2":{"2":9,"4":4,"5":4,"6":4,"72":2,"73":1}}],["disk",{"2":{"1":1,"20":1,"58":1,"67":2,"72":1,"73":2}}],["dodgerblue",{"2":{"80":1}}],["dot",{"2":{"80":1}}],["documenter",{"2":{"89":1}}],["documentation",{"0":{"69":1},"1":{"70":1}}],["doc",{"2":{"65":1}}],["docstring",{"2":{"72":1}}],["docs",{"0":{"70":1},"2":{"59":1,"69":2,"70":6,"77":1}}],["download",{"0":{"44":1},"2":{"40":2,"41":2,"44":1,"51":2,"62":2}}],["downloads",{"2":{"40":1,"41":1,"42":1,"44":1,"51":1,"62":1}}],["done",{"2":{"33":1,"50":1,"69":2}}],["doing",{"2":{"16":1,"25":1,"26":1,"70":1}}],["does",{"2":{"16":1,"67":1,"72":1,"73":1}}],["do",{"0":{"27":1,"28":1,"33":1,"34":1,"35":1},"1":{"29":1,"30":1,"31":1,"32":1,"36":1,"37":1},"2":{"1":1,"13":1,"15":3,"16":1,"24":2,"33":1,"43":1,"50":1,"70":1,"73":1,"75":1}}],["dsw",{"2":{"45":2,"50":2}}],["dsfinal",{"2":{"27":1,"33":2,"34":2}}],["ds2",{"2":{"27":3,"33":1,"66":1}}],["ds1",{"2":{"27":3,"33":3,"34":1}}],["dschunked",{"2":{"4":3,"5":3,"6":3}}],["ds",{"2":{"0":3,"4":2,"5":2,"6":2,"23":1,"31":2,"32":12,"36":1,"37":1,"39":1,"40":1,"41":1,"44":5,"45":10,"48":1,"50":3,"51":1,"52":2,"62":1,"63":3,"64":3,"65":3,"66":2,"72":3,"73":1,"89":2}}],["wglmakie",{"2":{"89":2}}],["would",{"2":{"72":2}}],["world",{"2":{"41":2}}],["workdir",{"2":{"73":1}}],["worker",{"2":{"72":1}}],["workers",{"2":{"72":1}}],["work",{"2":{"17":2,"44":1,"57":1,"72":1,"81":2,"83":1}}],["workload",{"2":{"16":1}}],["works",{"2":{"6":1,"26":1,"31":1,"32":1,"67":1}}],["workflows",{"2":{"1":1}}],["written",{"2":{"72":1,"73":1}}],["writefac",{"2":{"73":1}}],["writefac=4",{"2":{"65":1,"72":1}}],["writes",{"2":{"72":1}}],["write",{"0":{"62":1,"63":1,"64":1},"1":{"63":1,"64":1,"65":1,"66":1,"67":1},"2":{"67":1,"72":2}}],["wrapping",{"2":{"47":1,"56":2}}],["wrap",{"2":{"0":1,"72":1}}],["w",{"2":{"50":2}}],["www",{"2":{"40":1,"51":1,"62":1}}],["was",{"2":{"15":1,"16":1,"73":1}}],["way",{"2":{"15":1,"17":1,"25":1}}],["warning",{"2":{"11":1,"17":1,"25":1,"32":1,"44":1,"65":1,"72":1}}],["wanted",{"2":{"73":1}}],["wants",{"2":{"67":1}}],["want",{"2":{"0":1,"1":1,"60":1,"70":1,"73":1,"83":1}}],["wintri",{"0":{"87":1},"1":{"88":1,"89":1}}],["windowloopinds",{"2":{"73":1}}],["window",{"2":{"72":1,"73":1}}],["without",{"2":{"73":1}}],["within",{"2":{"54":1}}],["with",{"2":{"8":1,"10":1,"12":1,"13":1,"15":4,"16":2,"17":1,"22":3,"25":1,"32":3,"33":2,"34":3,"39":2,"40":2,"45":3,"46":1,"48":2,"49":2,"50":5,"51":1,"52":2,"53":3,"54":3,"55":5,"57":1,"59":1,"62":1,"65":1,"66":1,"67":1,"69":1,"72":11,"73":1,"76":4,"77":3,"81":1,"83":1,"85":1,"87":1}}],["will",{"2":{"0":1,"1":1,"4":1,"5":1,"13":1,"15":1,"28":1,"32":1,"33":2,"34":2,"42":1,"47":2,"65":3,"72":12,"73":3,"83":1}}],["white",{"2":{"87":1,"88":1}}],["while",{"2":{"67":1}}],["which",{"2":{"9":1,"15":2,"32":2,"50":1,"52":1,"55":1,"56":1,"60":3,"72":5,"73":4,"83":1}}],["whose",{"0":{"31":1,"32":1}}],["whole",{"2":{"8":3}}],["whether",{"2":{"73":2}}],["when",{"2":{"1":1,"6":1,"13":1,"60":1,"72":2,"73":1}}],["whereas",{"2":{"58":1}}],["where",{"2":{"0":1,"16":1,"32":4,"43":1,"55":1,"72":1,"73":4}}],["wether",{"2":{"72":1}}],["weight=",{"2":{"72":1}}],["weight=nothing",{"2":{"72":1}}],["weight",{"0":{"48":1},"1":{"49":1,"50":1},"2":{"47":1,"49":1,"50":1}}],["weights",{"0":{"49":1},"2":{"45":3,"49":2,"50":1}}],["weightedmean",{"2":{"72":1}}],["weighted",{"0":{"50":1},"2":{"34":1,"43":1,"45":8,"50":8,"72":3}}],["well",{"2":{"34":1,"67":1,"72":1}}],["welcome",{"2":{"6":1,"68":1}}],["were",{"2":{"13":2,"55":1,"73":1,"78":1}}],["we",{"2":{"0":1,"8":2,"9":1,"13":2,"14":1,"15":5,"16":2,"22":2,"27":1,"28":1,"29":1,"30":1,"32":2,"33":2,"34":5,"39":1,"45":1,"46":1,"47":2,"50":1,"54":1,"60":1,"67":1,"77":2,"78":1,"85":1}}],["oob",{"2":{"72":1}}],["o",{"2":{"44":4,"50":4,"72":5}}],["oct",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["ocean",{"2":{"40":1,"51":1,"62":1,"66":1}}],["occuring",{"2":{"4":1}}],["o1",{"2":{"40":2,"51":2,"62":2,"66":1}}],["ouput",{"2":{"70":1}}],["our",{"2":{"33":1,"34":1,"79":1}}],["outcube",{"2":{"73":1}}],["outcubes",{"2":{"73":1}}],["outcs",{"2":{"73":1}}],["outsize",{"2":{"73":1}}],["outar",{"2":{"73":2}}],["outtype",{"2":{"72":1,"73":2}}],["outdims",{"2":{"72":6}}],["outdims=outdims",{"2":{"15":1,"16":1}}],["out",{"2":{"44":1,"72":2,"73":1}}],["outputcube",{"2":{"73":3}}],["output",{"2":{"6":1,"15":1,"16":3,"40":1,"51":1,"62":1,"66":1,"72":11,"73":9,"89":1}}],["optimal",{"2":{"73":1}}],["optifunc",{"2":{"73":1}}],["optionally",{"2":{"72":1}}],["option",{"2":{"29":1,"31":1}}],["options",{"2":{"26":1}}],["operation",{"2":{"73":1}}],["operations",{"2":{"10":1,"45":1,"72":2,"73":3}}],["operates",{"2":{"72":1}}],["openinterval",{"2":{"55":1}}],["open",{"0":{"55":1},"2":{"0":2,"39":2,"40":2,"41":1,"51":2,"55":2,"62":1,"66":1,"72":3,"85":1}}],["obj",{"2":{"34":2,"78":1,"80":1}}],["objects",{"2":{"72":2}}],["object",{"2":{"11":1,"39":1,"72":5,"73":3}}],["obtain",{"0":{"26":1},"2":{"47":1}}],["otherwise",{"2":{"72":1}}],["other",{"0":{"81":1},"1":{"82":1,"83":1,"84":1},"2":{"17":1,"81":1,"83":1}}],["omit",{"2":{"16":1}}],["overview",{"0":{"82":1},"2":{"81":1,"82":1}}],["overwrite=true",{"2":{"65":2}}],["overwrite",{"0":{"65":1},"2":{"65":3,"72":4,"73":2}}],["over",{"0":{"83":1},"2":{"10":1,"15":1,"16":1,"50":1,"72":8,"73":1,"83":1}}],["ormax",{"2":{"72":1}}],["order",{"2":{"43":1}}],["ordered",{"2":{"58":1,"59":1}}],["ordereddict",{"2":{"15":1}}],["orderedcollections",{"2":{"15":1}}],["orca2",{"2":{"40":1,"51":1,"62":1,"66":1}}],["orangered",{"2":{"34":1}}],["original",{"2":{"40":2,"52":4,"53":6,"54":6,"55":10}}],["originates",{"2":{"9":1}}],["origin",{"2":{"10":2,"12":1,"13":1,"16":1,"22":3,"23":1,"76":2}}],["or",{"0":{"28":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"1":2,"6":1,"10":1,"13":2,"15":1,"20":1,"30":1,"39":1,"51":2,"58":3,"61":2,"65":1,"72":21,"73":7,"75":1,"76":2}}],["once",{"2":{"50":1,"60":1,"69":1,"73":1}}],["onlinestat",{"2":{"72":2}}],["onlinestats",{"2":{"34":2}}],["only",{"2":{"6":1,"13":1,"14":1,"15":1,"17":1,"22":2,"33":1,"67":1,"72":2}}],["on",{"2":{"1":2,"6":1,"7":1,"10":2,"13":2,"16":2,"24":1,"40":2,"51":1,"52":2,"53":3,"54":3,"55":5,"58":1,"62":1,"66":1,"67":1,"72":5,"73":4}}],["oneto",{"2":{"4":4,"5":4,"6":2,"18":2,"22":3,"25":9,"36":1,"37":5,"67":2,"76":2}}],["one",{"0":{"36":1},"2":{"0":1,"7":1,"8":2,"14":2,"15":2,"34":1,"46":1,"58":2,"59":1,"67":1,"72":8,"73":3,"81":1}}],["own",{"2":{"0":1}}],["offline=true",{"2":{"89":1}}],["offsets",{"2":{"73":1}}],["offset",{"2":{"13":1}}],["often",{"2":{"7":1}}],["of",{"0":{"11":1,"32":1,"43":1,"82":2},"2":{"0":2,"1":1,"6":1,"8":3,"9":1,"10":2,"11":1,"12":1,"13":2,"14":1,"15":8,"16":3,"17":1,"19":1,"20":1,"24":3,"25":4,"28":1,"29":2,"30":1,"31":1,"32":2,"33":1,"34":1,"40":1,"43":1,"44":1,"48":1,"51":3,"52":1,"54":1,"56":1,"58":7,"59":1,"60":2,"61":2,"62":1,"66":1,"67":1,"71":1,"72":50,"73":42,"76":1,"77":2,"79":2,"80":1,"81":1,"82":1}}],["eo",{"2":{"81":1}}],["esdltutorials",{"2":{"81":1}}],["esm1",{"2":{"39":1,"85":2}}],["eltype",{"2":{"76":1}}],["elementtype",{"2":{"73":1}}],["element",{"2":{"8":1,"9":1,"10":2,"13":2,"14":1,"15":2,"26":1,"34":1,"45":2,"46":1,"47":1,"48":7,"49":2,"50":3,"53":2,"56":1,"59":1,"60":2,"72":1,"73":1,"79":1}}],["elements",{"0":{"11":1,"53":1},"2":{"8":1,"12":1,"13":2,"16":1,"51":1,"58":1,"72":1,"73":1}}],["empty",{"2":{"73":1}}],["embeds",{"2":{"72":1}}],["either",{"2":{"72":2}}],["error",{"2":{"65":1}}],["equivalent",{"2":{"50":1,"56":1}}],["equally",{"2":{"0":1}}],["et",{"2":{"40":1,"51":1,"60":1,"62":1,"66":1}}],["edu",{"2":{"40":1,"51":1,"59":1,"62":1}}],["effectively",{"2":{"33":1}}],["env",{"2":{"70":1}}],["enabling",{"2":{"22":1}}],["enter",{"2":{"75":1}}],["entire",{"2":{"15":1,"17":1,"63":1,"64":1}}],["entries",{"2":{"15":1,"39":1,"40":1,"52":2,"53":3,"54":3,"55":5,"72":1,"76":1}}],["entry",{"2":{"10":1,"12":1,"13":1,"22":2,"45":2,"46":1,"48":2,"49":2,"50":3,"69":3,"72":1}}],["enumerate",{"2":{"15":2,"50":2}}],["end",{"2":{"13":1,"15":4,"16":2,"33":1,"45":2,"50":2,"79":2,"89":1}}],["exists",{"2":{"65":1,"72":1,"73":1}}],["existing",{"0":{"8":1},"2":{"65":1,"66":1}}],["exportable=true",{"2":{"89":1}}],["expression",{"2":{"72":1}}],["experiment",{"2":{"40":3,"51":3,"62":3,"66":3}}],["explicitly",{"2":{"13":1,"28":1,"73":1}}],["extended",{"2":{"72":1,"73":2}}],["extension",{"2":{"72":2}}],["extent",{"2":{"19":2}}],["external",{"2":{"39":1,"85":1}}],["extracts",{"2":{"73":1}}],["extract",{"0":{"25":1},"2":{"73":1}}],["extra",{"2":{"16":1}}],["executes",{"2":{"72":1}}],["execute",{"2":{"16":1}}],["exactly",{"2":{"5":1,"26":1}}],["examples",{"2":{"6":1,"26":2,"40":1,"42":1,"51":1,"62":1,"69":1}}],["example",{"2":{"0":1,"1":1,"5":1,"10":1,"16":2,"31":1,"32":1,"33":1,"34":1,"40":1,"43":1,"51":2,"58":2,"59":1,"60":1,"62":2,"69":2,"72":3,"73":1,"76":2}}],["e",{"2":{"7":1,"8":1,"10":1,"11":1,"13":1,"15":2,"16":1,"19":1,"20":1,"22":1,"29":1,"56":1,"58":1,"61":1,"65":1,"70":1,"72":6,"73":1,"76":1}}],["easier",{"2":{"22":1,"51":1}}],["easily",{"2":{"0":1,"16":1}}],["easy",{"2":{"19":1,"20":1}}],["each",{"2":{"4":1,"5":1,"10":1,"13":1,"15":5,"16":2,"33":2,"34":2,"43":1,"47":1,"59":1,"61":1,"72":3,"73":3,"76":1}}],["everywhere",{"2":{"16":2}}],["every",{"2":{"0":1,"10":1,"13":1,"72":1}}],["features",{"2":{"82":1}}],["feb",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["fallback",{"2":{"73":1}}],["falls",{"2":{"72":1}}],["false",{"2":{"49":1,"50":1,"65":2,"72":3,"73":1}}],["faq",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1}}],["faster",{"2":{"73":1}}],["fastest",{"2":{"1":1}}],["fast",{"2":{"1":1,"13":1}}],["frame",{"2":{"83":1}}],["frames",{"2":{"58":1}}],["front",{"2":{"73":1}}],["from",{"0":{"25":1,"26":2,"43":1},"2":{"0":1,"8":1,"9":1,"17":1,"26":4,"32":3,"55":1,"60":2,"72":6,"73":6,"76":1,"79":1}}],["fr",{"2":{"40":1,"51":1,"62":1,"66":1}}],["frequently",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1}}],["fu",{"2":{"73":1}}],["funtion",{"2":{"79":1}}],["fun",{"2":{"72":4}}],["functionality",{"0":{"82":1}}],["functions",{"2":{"10":2,"58":2,"71":1,"72":1,"73":1}}],["function",{"0":{"34":1},"2":{"0":1,"1":1,"13":2,"15":1,"16":6,"25":2,"27":1,"33":1,"34":1,"42":1,"45":1,"47":1,"50":1,"55":1,"65":1,"67":1,"72":24,"73":13}}],["future",{"2":{"44":1}}],["further",{"2":{"13":1,"81":1}}],["flag",{"2":{"73":3}}],["float32",{"2":{"39":1,"40":1,"52":2,"53":3,"54":3,"55":5,"73":1}}],["float64",{"2":{"8":1,"9":1,"10":3,"12":3,"13":3,"14":4,"15":9,"18":2,"19":2,"20":4,"22":6,"23":2,"25":1,"26":1,"27":4,"33":12,"34":5,"39":4,"40":4,"45":3,"46":2,"49":3,"50":6,"51":2,"52":4,"53":2,"54":6,"55":10,"56":3,"62":2,"66":2,"72":1,"73":1,"76":7,"79":2,"85":2}}],["flexible",{"2":{"9":1,"15":1}}],["found",{"2":{"72":1,"73":1}}],["fourth",{"2":{"40":2,"51":2,"62":2,"66":2}}],["folder",{"2":{"70":1}}],["follow",{"2":{"70":1,"81":1}}],["follows",{"2":{"45":1,"50":1}}],["following",{"2":{"2":1,"5":1,"6":1,"16":1,"42":1,"43":1,"44":1,"72":2,"73":4,"81":1}}],["fontsize=24",{"2":{"86":1}}],["fontsize=18",{"2":{"50":1}}],["font=",{"2":{"50":1}}],["forwarded",{"2":{"72":1}}],["forwardordered",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"15":9,"18":2,"19":6,"20":4,"22":9,"23":3,"25":9,"26":2,"27":4,"29":14,"31":6,"32":10,"33":9,"34":5,"36":1,"37":5,"39":6,"40":6,"45":3,"46":2,"48":2,"49":1,"50":7,"51":3,"52":6,"53":4,"54":9,"55":15,"56":2,"62":3,"66":6,"67":2,"76":5,"79":1,"85":3}}],["force",{"2":{"72":1}}],["forcing",{"2":{"39":1,"85":1}}],["forms",{"2":{"72":1,"73":2}}],["format",{"2":{"65":1,"72":1,"79":1}}],["formal",{"2":{"60":1}}],["former",{"2":{"25":1}}],["for",{"0":{"6":1,"78":1},"1":{"79":1,"80":1},"2":{"0":2,"1":3,"4":1,"5":1,"6":1,"15":4,"16":1,"29":1,"31":2,"32":2,"33":4,"34":6,"40":1,"44":1,"48":1,"50":3,"51":1,"55":1,"56":1,"58":4,"59":3,"60":1,"62":1,"65":1,"66":1,"67":1,"72":19,"73":16,"78":1,"79":2,"81":1}}],["f",{"2":{"2":2}}],["field",{"2":{"72":1}}],["fields",{"2":{"34":1,"72":1,"73":4}}],["figure=",{"2":{"80":1}}],["figure",{"2":{"50":2,"78":1,"80":1,"86":1,"87":1,"88":1,"89":1}}],["fig",{"2":{"34":3,"50":8,"78":1,"80":1,"86":2,"87":2,"88":2,"89":3}}],["filterig",{"2":{"79":1}}],["filter",{"2":{"72":2}}],["fillarrays",{"2":{"67":3}}],["fill",{"2":{"67":1,"72":1,"73":1}}],["fillvalue=",{"2":{"73":1}}],["fillvalue",{"2":{"39":1,"40":1,"44":3,"52":2,"53":3,"54":3,"55":5}}],["filling",{"2":{"21":1,"22":1}}],["filename",{"2":{"44":2,"72":1}}],["files",{"0":{"84":1},"2":{"7":1,"38":1,"41":1,"70":1,"73":2}}],["file",{"2":{"2":1,"7":1,"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"15":4,"18":2,"19":2,"20":3,"22":4,"25":2,"26":2,"27":2,"29":10,"32":1,"33":6,"34":6,"39":2,"40":4,"48":2,"52":4,"53":6,"54":6,"55":10,"65":2,"67":2,"69":4,"72":2,"76":4,"79":2}}],["findaxis",{"2":{"73":1}}],["findall",{"2":{"15":1,"79":1}}],["find",{"2":{"28":1,"73":1,"81":1}}],["finalizer",{"2":{"73":1}}],["finalize",{"2":{"73":1}}],["finally",{"2":{"15":1,"72":1}}],["final",{"2":{"15":1}}],["firstly",{"2":{"29":1}}],["first",{"2":{"8":4,"15":1,"34":1,"50":1,"69":1,"72":4,"73":1,"76":1,"85":1}}],["fitting",{"2":{"72":1}}],["fittable",{"2":{"72":2}}],["fitcube",{"2":{"34":2}}],["fitsym",{"2":{"72":4}}],["fits",{"2":{"17":1}}],["fit",{"2":{"1":1,"58":1}}],["t=union",{"2":{"73":1}}],["typing",{"2":{"75":1}}],["typically",{"2":{"72":1}}],["type",{"2":{"58":1,"60":1,"72":12,"73":8,"76":1,"77":1}}],["types",{"0":{"57":1},"1":{"58":1,"59":1,"60":1,"61":1},"2":{"17":2,"19":1,"20":1,"53":1,"59":1,"72":2,"77":1}}],["tutorial",{"2":{"81":2,"82":1,"83":1}}],["tutorials",{"0":{"81":1},"1":{"82":1,"83":1,"84":1},"2":{"55":1,"81":3}}],["turn",{"2":{"72":1}}],["tuple",{"2":{"2":3,"4":1,"5":1,"6":1,"45":2,"46":1,"48":2,"49":3,"50":5,"72":5,"73":3}}],["tbl",{"2":{"34":2}}],["target",{"2":{"73":1}}],["tab",{"2":{"72":4}}],["tables",{"2":{"83":1}}],["tableaggregator",{"2":{"72":1}}],["table",{"0":{"83":1},"2":{"34":2,"39":1,"40":2,"51":2,"62":2,"66":2,"72":4,"73":1,"85":1}}],["takes",{"2":{"72":4}}],["take",{"2":{"70":1,"72":1,"73":2}}],["taken",{"2":{"32":2}}],["tair",{"2":{"50":1,"72":1}}],["tas",{"2":{"39":5,"85":5}}],["t",{"2":{"29":1,"31":2,"32":2,"34":3,"40":1,"52":2,"53":3,"54":3,"55":5,"72":1,"73":2,"78":1,"79":1}}],["tesselation",{"2":{"89":1}}],["test",{"2":{"73":1,"85":1}}],["testrange",{"2":{"73":1}}],["terminal",{"2":{"70":1}}],["text",{"2":{"69":1}}],["tensors",{"2":{"58":1}}],["tell",{"2":{"28":1}}],["temporary",{"2":{"73":1}}],["temporal",{"2":{"33":1,"42":1,"58":1}}],["tempo",{"2":{"45":6,"48":4,"49":1}}],["temp",{"2":{"9":2}}],["temperature=temperature",{"2":{"32":1}}],["temperature",{"2":{"9":2,"32":4,"39":3,"40":2,"50":2,"52":5,"53":6,"54":6,"55":10,"58":1,"59":1,"60":1,"76":4}}],["tempname",{"2":{"2":1,"4":1,"5":1,"6":1}}],["tip",{"2":{"77":1}}],["tidy",{"2":{"72":1}}],["ticks",{"2":{"58":1}}],["ticks=false",{"2":{"50":1}}],["tick",{"2":{"56":1,"61":1,"76":1}}],["ti=at",{"2":{"50":3}}],["ti=>cyclicbins",{"2":{"45":2,"46":1,"48":2,"49":2,"50":3}}],["tiff",{"0":{"84":1}}],["tif",{"2":{"41":2}}],["title",{"2":{"40":1,"50":1,"51":1,"62":1,"66":1,"69":1}}],["ti",{"2":{"19":4,"39":2,"40":2,"45":15,"46":2,"47":1,"48":8,"49":3,"50":6,"51":1,"52":2,"53":2,"54":3,"55":5,"62":1,"66":1,"85":2}}],["time1",{"2":{"53":2}}],["time=1",{"2":{"76":1}}],["time=date",{"2":{"29":1}}],["time=at",{"2":{"29":1}}],["time=between",{"2":{"29":1}}],["time",{"0":{"43":1},"2":{"1":1,"7":1,"8":4,"9":3,"10":3,"12":1,"13":1,"14":7,"15":8,"16":5,"19":2,"22":3,"23":1,"27":2,"29":8,"31":4,"32":7,"33":4,"34":3,"39":2,"40":1,"46":1,"47":1,"50":1,"52":2,"53":4,"54":3,"55":5,"58":2,"59":1,"72":4,"76":4,"78":1,"79":4,"85":2}}],["timestep",{"2":{"34":1}}],["times",{"2":{"0":1}}],["treat",{"2":{"72":1}}],["treatment",{"2":{"72":1,"73":1}}],["treated",{"2":{"39":1}}],["tries",{"2":{"72":1}}],["translate",{"2":{"87":1,"88":1}}],["transformed",{"2":{"40":1,"51":1,"62":1,"66":1}}],["transformations",{"2":{"87":1}}],["transformation",{"2":{"15":1}}],["transform",{"2":{"15":2}}],["track",{"2":{"72":1}}],["true",{"2":{"12":1,"65":1,"67":1,"72":4,"73":1,"89":1}}],["two",{"2":{"8":1,"9":1,"26":2,"27":1,"58":1,"73":1}}],["todo",{"2":{"79":1}}],["toghether",{"2":{"73":1}}],["together",{"2":{"60":1}}],["touches",{"2":{"55":1}}],["tolerances",{"2":{"54":1}}],["top",{"2":{"50":1}}],["tos",{"2":{"40":4,"51":2,"52":4,"53":4,"54":3,"55":9,"56":2,"62":2,"63":2,"64":2,"66":1}}],["too",{"2":{"32":1,"58":1}}],["to",{"0":{"9":1,"35":1,"66":1,"68":1,"69":1},"1":{"36":1,"37":1,"69":1,"70":2},"2":{"0":4,"1":4,"3":1,"4":1,"6":2,"7":1,"8":1,"9":1,"10":8,"12":1,"15":3,"16":6,"17":3,"18":2,"20":3,"21":1,"24":2,"25":2,"26":3,"27":1,"29":2,"31":2,"32":6,"33":1,"34":1,"38":1,"39":3,"40":1,"42":1,"43":3,"44":2,"46":1,"47":1,"50":1,"51":3,"55":1,"56":1,"57":1,"58":5,"59":3,"60":2,"61":2,"62":1,"63":2,"64":2,"65":1,"66":2,"67":3,"69":2,"70":3,"72":47,"73":19,"77":2,"81":1,"83":3,"85":2,"89":1}}],["though",{"2":{"67":1}}],["those",{"2":{"11":1,"17":1,"19":1,"20":1,"59":1}}],["through",{"2":{"72":5,"73":5,"75":1}}],["thrown",{"2":{"65":1}}],["three",{"2":{"28":1,"59":1,"78":1}}],["threads",{"2":{"72":2}}],["thread",{"2":{"16":1}}],["than",{"2":{"17":1,"28":1,"33":1,"34":1}}],["that",{"2":{"0":1,"9":2,"10":1,"13":1,"15":2,"16":1,"17":1,"27":1,"30":1,"32":2,"34":1,"43":1,"46":1,"49":1,"56":1,"58":1,"59":2,"61":1,"67":1,"72":13,"73":13,"81":1,"83":1}}],["things",{"2":{"24":1}}],["think",{"2":{"1":1}}],["thinking",{"2":{"1":1}}],["this",{"2":{"0":1,"1":1,"4":1,"7":1,"10":1,"13":2,"15":3,"16":1,"17":1,"21":1,"24":1,"26":1,"31":1,"32":2,"33":2,"34":2,"38":1,"39":1,"41":1,"43":1,"47":2,"55":1,"57":1,"60":1,"69":1,"70":2,"71":2,"72":6,"73":10,"82":1,"83":1}}],["their",{"0":{"31":1,"32":1},"2":{"30":1,"32":1,"58":1,"72":3,"73":2}}],["then",{"2":{"15":2,"33":1,"70":2,"75":1}}],["thereby",{"2":{"72":1}}],["therefore",{"2":{"34":1,"77":1}}],["there",{"2":{"14":2,"20":1,"26":1,"72":1}}],["theme",{"2":{"50":2}}],["them",{"2":{"7":1,"10":1,"28":1,"67":1,"72":1}}],["these",{"2":{"0":1,"6":1,"26":1,"28":1,"56":1,"58":1}}],["the",{"0":{"25":1,"26":1,"34":1,"44":1,"79":1,"82":1},"2":{"0":5,"1":4,"2":3,"4":1,"5":4,"6":4,"8":6,"9":3,"10":1,"11":1,"13":3,"14":2,"15":15,"16":7,"17":2,"20":1,"22":3,"24":1,"25":4,"26":3,"27":2,"28":2,"29":9,"31":3,"32":10,"33":3,"34":10,"40":1,"42":2,"43":5,"44":4,"45":2,"46":1,"47":2,"48":2,"49":2,"50":9,"51":1,"52":5,"53":3,"54":5,"55":6,"56":1,"57":1,"58":5,"59":4,"60":4,"65":3,"66":1,"67":6,"68":1,"69":1,"70":6,"72":116,"73":83,"75":2,"76":6,"77":8,"78":1,"79":4,"81":6,"82":1,"83":5,"85":1}}],["switched",{"2":{"77":1}}],["syntax",{"2":{"77":1,"81":1}}],["system",{"2":{"70":1}}],["symbol",{"2":{"10":1,"12":1,"13":1,"22":2,"45":4,"46":2,"47":2,"48":4,"49":4,"50":6,"72":3,"73":1}}],["src",{"2":{"69":1}}],["sres",{"2":{"40":2,"51":2,"62":2,"66":2}}],["skipped",{"2":{"72":1}}],["skip",{"2":{"72":1}}],["skipmissing",{"2":{"16":1,"33":1}}],["skeleton=true",{"2":{"67":1}}],["skeleton=false",{"2":{"65":1,"72":1}}],["skeleton",{"0":{"67":1},"2":{"67":3}}],["ssp585",{"2":{"39":1,"85":2}}],["scene",{"2":{"89":3}}],["scenarios",{"2":{"85":1}}],["scenariomip",{"2":{"39":1,"85":2}}],["scope",{"2":{"72":1,"73":1}}],["scripts",{"2":{"70":1}}],["scalar",{"2":{"39":1}}],["scattered",{"2":{"7":1}}],["snow3",{"2":{"34":1}}],["snippet",{"2":{"6":1}}],["slice",{"2":{"85":4,"86":1}}],["slices",{"2":{"72":3}}],["slightly",{"2":{"81":1}}],["slow",{"2":{"32":1}}],["slurmmanager",{"2":{"16":1}}],["small",{"2":{"24":1}}],["shinclude",{"2":{"70":1}}],["shdocs>",{"2":{"70":1}}],["shnpm",{"2":{"70":2}}],["should",{"2":{"29":1,"44":1,"69":1,"70":1,"72":3,"73":1}}],["shown",{"2":{"72":1}}],["showprog",{"2":{"72":1}}],["shows",{"2":{"50":1}}],["show",{"2":{"16":1,"89":1}}],["shading=false",{"2":{"87":1,"88":1,"89":1}}],["shall",{"2":{"72":5,"73":1}}],["shares",{"2":{"32":1}}],["share",{"0":{"31":1,"32":1},"2":{"30":1,"32":1,"59":1,"72":1}}],["shared",{"2":{"4":1,"5":1,"6":1,"23":1,"27":1,"31":2,"32":3,"36":1,"37":1,"39":1,"40":1,"51":1,"62":1,"66":1,"85":1}}],["shape",{"2":{"6":1}}],["sure",{"2":{"89":1}}],["surface",{"2":{"39":2,"40":2,"50":2,"52":5,"53":6,"54":6,"55":10,"87":1,"88":1}}],["such",{"2":{"55":1,"72":1,"77":1}}],["subcubes",{"2":{"72":1}}],["subtype",{"2":{"58":1,"73":1,"77":1}}],["subtables",{"2":{"34":1}}],["subarray",{"2":{"49":1,"50":1}}],["subsetextensions",{"2":{"73":1}}],["subsetcube",{"2":{"72":1}}],["subseting",{"2":{"56":1}}],["subsetting",{"0":{"29":1,"30":1,"31":1,"32":1},"1":{"31":1,"32":1},"2":{"39":1,"40":1,"73":1,"79":1}}],["subset",{"0":{"28":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"29":5,"32":4,"51":1,"54":1,"72":1,"73":1,"85":1}}],["subsets",{"2":{"15":1,"61":1}}],["supposed",{"2":{"72":1}}],["support",{"2":{"20":1}}],["supertype",{"2":{"19":1,"20":1}}],["sum",{"2":{"15":2,"33":1,"45":4,"48":2,"49":4,"50":2}}],["suggestions",{"2":{"6":1}}],["s",{"2":{"10":1,"27":1,"29":1,"31":1,"32":2,"50":7,"51":1,"61":1,"72":2,"73":1,"79":1}}],["style",{"0":{"83":1}}],["st",{"2":{"77":1}}],["stdzero",{"2":{"72":1}}],["struct",{"2":{"72":1,"73":4}}],["structure",{"2":{"60":1}}],["structures",{"2":{"57":1}}],["string",{"2":{"8":1,"9":2,"10":1,"12":1,"13":1,"14":2,"15":6,"18":1,"19":2,"20":3,"22":3,"25":1,"26":1,"27":2,"29":5,"33":3,"34":3,"39":2,"40":2,"45":1,"46":1,"48":2,"49":1,"50":1,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"65":1,"66":1,"67":1,"72":6,"73":4,"76":4,"79":1,"85":1}}],["stable",{"2":{"77":1}}],["standard",{"2":{"39":1,"40":1,"52":2,"53":3,"54":3,"55":5}}],["standards",{"2":{"39":1,"40":1,"51":1,"62":1,"66":1,"85":1}}],["statistics",{"2":{"14":1,"16":1,"34":3,"42":1,"78":1}}],["started",{"0":{"74":1},"1":{"75":1,"76":1,"77":1}}],["start=12",{"2":{"45":2,"46":1,"48":2,"49":2,"50":3}}],["start=december",{"2":{"45":3,"48":1}}],["start",{"2":{"10":1,"29":1}}],["storing",{"2":{"59":1}}],["storage",{"2":{"11":1,"39":1}}],["stored",{"2":{"58":3,"73":2}}],["stores",{"2":{"58":1,"72":1}}],["store",{"2":{"0":1,"39":4,"58":1,"59":1,"85":2}}],["still",{"2":{"8":1,"15":1,"59":1,"81":1}}],["step=3",{"2":{"45":2,"46":1,"48":2,"49":2,"50":3}}],["steps",{"2":{"10":1,"14":1,"50":1,"70":1,"72":1}}],["step",{"2":{"7":1,"14":1,"33":2,"72":1,"73":2,"85":1}}],["sphere",{"0":{"89":1},"2":{"89":3}}],["split",{"2":{"72":1}}],["splitted",{"2":{"2":1}}],["special",{"2":{"53":1,"72":1,"73":1}}],["specifiers",{"2":{"73":1}}],["specifier",{"2":{"72":1}}],["specifies",{"2":{"72":3}}],["specified",{"2":{"72":7,"73":1}}],["specific",{"2":{"29":1,"72":2}}],["specifying",{"2":{"72":2,"73":1}}],["specify",{"2":{"22":1,"72":1}}],["spectral",{"2":{"50":1}}],["specs",{"2":{"39":1,"85":1}}],["sparse",{"2":{"58":1}}],["spatio",{"2":{"33":1}}],["spatial",{"2":{"1":1,"14":1,"15":5,"16":1,"42":1,"58":1}}],["span",{"2":{"29":1,"78":1}}],["space",{"2":{"1":1}}],["sampled",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"15":8,"18":2,"19":6,"20":4,"22":9,"23":3,"25":9,"26":2,"27":3,"29":14,"31":6,"32":10,"33":9,"34":5,"36":1,"37":5,"39":6,"40":6,"45":3,"46":2,"48":2,"49":1,"50":7,"51":3,"52":6,"53":4,"54":9,"55":15,"56":2,"62":3,"66":6,"67":2,"76":5,"79":1,"85":3}}],["same",{"2":{"0":1,"2":1,"5":1,"6":1,"9":1,"15":2,"19":1,"20":1,"25":1,"26":2,"27":1,"32":1,"52":1,"53":1,"54":1,"58":1,"59":3,"60":2,"70":1,"72":1,"73":1}}],["saves",{"2":{"65":1,"72":1}}],["save",{"0":{"67":1},"2":{"12":1,"20":1,"63":2,"64":2,"67":1,"72":2}}],["savecube",{"2":{"2":1,"63":1,"64":1,"67":1,"72":2}}],["savedataset",{"2":{"4":1,"5":1,"6":1,"65":2,"66":1,"67":1,"72":2,"73":1}}],["saved",{"2":{"2":1,"11":1,"65":1}}],["saving",{"2":{"1":1,"4":1,"5":1,"6":1}}],["serve",{"2":{"73":1}}],["series",{"0":{"43":1},"2":{"16":1}}],["sequence",{"2":{"58":1}}],["see",{"2":{"55":1,"72":1,"77":1}}],["separate",{"2":{"72":1,"73":1}}],["separated",{"2":{"59":1}}],["separately",{"2":{"5":1,"15":1,"16":1}}],["sep",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["seaborn",{"2":{"86":1,"87":1,"88":1,"89":1}}],["searching",{"2":{"72":1}}],["search",{"2":{"72":1}}],["season",{"2":{"45":1,"48":2,"49":1}}],["seasons",{"0":{"45":1,"47":1,"50":1},"1":{"46":1,"47":1},"2":{"45":9,"48":1,"50":5}}],["seasonal",{"0":{"43":1,"78":1,"80":1},"1":{"79":1,"80":1},"2":{"43":1,"49":1,"50":1,"78":1,"79":4}}],["sea",{"2":{"40":3,"51":1,"52":5,"53":6,"54":6,"55":10,"62":1,"66":1}}],["sebastien",{"2":{"40":2,"51":2,"62":2,"66":2}}],["selected",{"2":{"73":1,"78":1}}],["select",{"0":{"51":1,"52":1,"53":1,"54":1},"1":{"52":1,"53":1,"54":1,"55":1,"56":1},"2":{"32":1,"51":1}}],["selectors",{"2":{"55":1}}],["selector",{"2":{"32":1,"54":1}}],["selection",{"2":{"32":2}}],["selecting",{"2":{"29":1,"31":1,"32":1}}],["second",{"2":{"8":3,"72":1}}],["section",{"2":{"7":1,"10":1,"17":1,"21":1,"24":1,"38":1,"57":1,"71":1}}],["setting",{"2":{"65":1,"72":1,"73":1}}],["sets",{"2":{"6":1,"44":1}}],["set",{"0":{"4":1,"5":1,"6":1},"2":{"4":1,"5":1,"15":1,"39":1,"65":1,"70":1,"72":1,"73":2}}],["setchunks",{"2":{"1":1,"2":2,"3":1,"4":1,"5":1,"6":1,"72":1,"73":1}}],["several",{"2":{"0":1,"27":1,"30":1}}],["sin",{"2":{"78":1}}],["sink",{"2":{"73":1}}],["single",{"0":{"78":1},"1":{"79":1,"80":1},"2":{"0":1,"7":1,"8":1,"60":1,"63":1,"64":1,"72":6,"73":1}}],["simplicity",{"2":{"78":1}}],["simple",{"2":{"24":1,"76":1}}],["simply",{"2":{"16":1,"70":1}}],["situations",{"2":{"1":1}}],["size=",{"2":{"87":1,"88":1,"89":1}}],["sizes",{"2":{"2":1,"72":2,"73":2}}],["size",{"2":{"0":1,"1":1,"4":1,"5":1,"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"15":4,"18":2,"19":2,"20":2,"22":4,"25":2,"26":2,"27":2,"29":10,"33":6,"34":6,"39":2,"40":2,"48":2,"50":1,"52":4,"53":6,"54":6,"55":10,"67":2,"72":3,"73":4,"76":5,"78":1,"79":3,"80":1,"86":1}}],["sosstsst",{"2":{"40":1,"52":2,"53":3,"54":3,"55":5}}],["software",{"2":{"40":1,"51":1,"62":1}}],["sort",{"2":{"15":1}}],["so",{"2":{"2":1,"16":1,"28":1,"32":1,"72":1,"73":1}}],["source",{"2":{"0":2,"40":1,"51":1,"62":1,"65":1,"66":1,"72":24,"73":24}}],["sometimes",{"2":{"67":1,"83":1}}],["some",{"0":{"32":1},"2":{"0":1,"11":1,"30":1,"32":1,"33":1,"50":1,"72":1,"78":1,"87":1}}],["auto",{"2":{"72":1}}],["aug",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["again",{"2":{"65":1}}],["agreement",{"2":{"50":1}}],["aggregation",{"2":{"16":1}}],["aggregate",{"2":{"15":1}}],["api",{"0":{"71":1,"72":1,"73":1},"1":{"72":1,"73":1}}],["apr",{"2":{"45":4,"46":2,"47":1,"48":4,"49":4,"50":6}}],["approximated",{"2":{"73":1}}],["approx",{"2":{"72":1,"73":1}}],["appropriate",{"2":{"69":1}}],["approach",{"2":{"9":1}}],["append=true",{"2":{"66":2}}],["append",{"0":{"66":1},"2":{"65":1,"72":1}}],["apply",{"0":{"33":1},"2":{"10":2,"13":1,"15":1,"16":1,"50":1,"79":1}}],["applies",{"2":{"13":1}}],["applied",{"2":{"0":1,"3":1,"4":1,"15":1,"72":2,"73":1}}],["applications",{"2":{"0":1}}],["air",{"2":{"39":3,"50":2}}],["a3",{"2":{"23":4}}],["a2",{"2":{"22":1,"23":3,"40":2,"51":2,"62":2,"66":2,"76":1}}],["a1",{"2":{"22":1}}],["abstractdict",{"2":{"72":1,"73":3}}],["abstractdimarray",{"2":{"19":1,"20":1,"58":1}}],["about",{"2":{"1":2,"28":1,"54":1,"76":1,"82":1}}],["above",{"2":{"0":1,"5":1,"75":1}}],["atol",{"2":{"54":1}}],["attributes",{"2":{"50":1,"72":1,"73":1}}],["atmosphere",{"2":{"40":1,"51":1,"62":1,"66":1}}],["atmos",{"2":{"39":1,"85":1}}],["at",{"2":{"15":4,"20":1,"32":1,"40":2,"50":1,"51":1,"52":2,"53":6,"54":7,"55":5,"59":1,"60":2,"62":1,"65":2,"66":1,"68":1,"69":2,"70":2,"72":3,"73":2,"76":1,"81":2}}],["after",{"2":{"14":1,"41":1,"72":3}}],["addargs",{"2":{"72":3,"73":1}}],["adds",{"2":{"58":2,"61":1}}],["addprocs",{"2":{"16":2}}],["addition",{"2":{"15":1,"17":1,"58":1}}],["additional",{"2":{"9":1,"72":4,"73":3}}],["added",{"2":{"15":1,"66":1,"72":1,"73":1}}],["add",{"2":{"6":1,"10":1,"12":1,"33":1,"69":2,"75":2,"87":1}}],["asaxisarray",{"2":{"72":1}}],["aspect=dataaspect",{"2":{"50":1,"86":1}}],["assemble",{"2":{"76":1}}],["assessment",{"2":{"40":2,"51":2,"62":2,"66":2}}],["associated",{"2":{"72":1}}],["assing",{"0":{"35":1},"1":{"36":1,"37":1}}],["asked",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1}}],["as",{"2":{"5":1,"12":1,"15":1,"16":1,"19":1,"20":2,"26":1,"32":1,"34":1,"39":1,"40":1,"41":1,"45":2,"50":1,"52":1,"55":1,"56":1,"58":1,"61":1,"67":2,"72":11,"73":3,"77":1,"83":1,"85":1}}],["axs",{"2":{"44":1,"50":9}}],["axcopy",{"2":{"25":1}}],["ax",{"2":{"25":2,"34":1,"78":3,"80":3,"86":1,"87":3,"88":3,"89":5}}],["axlist",{"2":{"10":2,"15":2,"16":2,"22":2,"23":1,"27":3,"73":5,"76":3}}],["axessmall",{"2":{"73":2}}],["axes",{"0":{"25":1,"26":1},"2":{"4":1,"5":1,"6":1,"22":1,"23":1,"25":2,"26":2,"29":2,"31":5,"32":3,"36":1,"37":1,"39":1,"40":1,"51":2,"58":2,"62":1,"66":1,"72":15,"73":11,"76":1,"79":2,"85":1}}],["axislegend",{"2":{"80":1}}],["axis=false",{"2":{"89":1}}],["axis=",{"2":{"78":1}}],["axisdescriptor",{"2":{"73":1}}],["axisdesc",{"2":{"72":3}}],["axis",{"0":{"4":1},"2":{"4":1,"9":2,"26":1,"29":1,"31":1,"32":7,"50":1,"56":1,"61":1,"67":1,"72":16,"73":14,"76":1,"80":1,"85":1,"86":1}}],["always",{"2":{"68":1,"72":2,"73":1,"77":1}}],["already",{"2":{"65":1,"72":1,"73":1}}],["although",{"2":{"55":1}}],["alternatives",{"2":{"72":1}}],["alternatively",{"2":{"0":1,"2":1,"72":1,"75":1}}],["altered",{"2":{"39":1,"40":1,"52":2,"53":3,"54":3,"55":5}}],["al",{"2":{"40":1,"51":1,"60":1,"62":1,"66":1}}],["algebra",{"0":{"33":1},"2":{"33":1}}],["along",{"0":{"8":1},"2":{"8":1,"72":3,"73":2,"81":1}}],["allaxes",{"2":{"73":1}}],["allinaxes",{"2":{"73":1}}],["allmissing",{"2":{"72":1}}],["allocate",{"2":{"67":1}}],["allocation",{"2":{"15":1}}],["allow",{"2":{"73":1}}],["allowing",{"2":{"19":1,"20":1,"59":1}}],["allows",{"2":{"16":1}}],["all",{"0":{"6":1,"31":1,"32":1},"2":{"4":1,"6":2,"10":1,"12":1,"13":1,"14":2,"15":1,"16":4,"30":1,"32":2,"41":1,"50":2,"55":1,"58":1,"60":2,"65":3,"67":1,"70":1,"71":1,"72":6,"73":7}}],["also",{"2":{"2":1,"3":1,"14":1,"16":1,"22":1,"25":1,"32":1,"34":1,"58":2,"59":1,"67":1,"72":1,"75":1}}],["analog",{"2":{"59":1}}],["analyzing",{"2":{"1":1}}],["another",{"2":{"32":1}}],["anynymous",{"2":{"72":1}}],["anyocean",{"2":{"72":1}}],["anymissing",{"2":{"72":1}}],["any",{"2":{"8":1,"9":1,"10":1,"11":1,"14":2,"15":4,"18":1,"19":2,"20":3,"22":1,"25":1,"26":1,"27":1,"29":6,"33":3,"34":3,"39":2,"40":2,"45":3,"46":2,"48":4,"49":3,"50":3,"51":1,"52":2,"53":3,"54":3,"55":5,"62":1,"66":1,"67":1,"72":4,"73":9,"76":1,"79":1,"85":1}}],["an",{"0":{"8":1},"2":{"9":1,"10":4,"12":1,"13":1,"15":1,"16":2,"25":1,"26":1,"31":1,"32":1,"34":1,"51":3,"54":1,"58":1,"59":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"72":19,"73":8}}],["and",{"0":{"21":1,"26":1,"38":1,"42":1,"51":1,"55":1,"62":1},"1":{"22":1,"23":1,"39":1,"40":1,"41":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"52":1,"53":1,"54":1,"55":1,"56":1,"63":1,"64":1,"65":1,"66":1,"67":1},"2":{"0":1,"2":1,"5":1,"6":1,"7":1,"8":1,"12":1,"15":2,"17":1,"21":1,"22":1,"27":1,"29":1,"32":6,"33":1,"34":6,"38":2,"39":1,"40":1,"42":1,"43":1,"45":1,"50":1,"51":1,"55":1,"58":5,"59":3,"60":2,"62":1,"65":1,"66":1,"67":5,"68":1,"70":4,"72":18,"73":6,"75":1,"76":2,"78":1,"85":1,"87":1}}],["available",{"2":{"55":2,"67":1,"71":1,"72":2,"75":1}}],["avariable",{"2":{"0":1}}],["avoids",{"2":{"15":1}}],["avoided",{"2":{"0":1}}],["averaging",{"2":{"14":1}}],["averages",{"0":{"43":1},"2":{"42":1}}],["average",{"2":{"14":1,"43":2}}],["artype",{"2":{"72":2}}],["archgdaldatasets",{"2":{"41":1}}],["archgdal",{"2":{"41":2}}],["arguments",{"2":{"50":1,"72":11,"73":3}}],["argument",{"2":{"16":1,"67":1,"72":4,"73":2}}],["arr2",{"2":{"20":1}}],["arr",{"2":{"15":7,"20":2}}],["arrayinfo",{"2":{"73":1}}],["arrays",{"2":{"6":1,"7":1,"8":2,"9":1,"11":1,"21":1,"23":2,"39":2,"40":2,"57":1,"58":4,"59":3,"60":3,"72":2,"73":1}}],["array",{"0":{"18":1},"2":{"0":1,"1":1,"8":2,"9":2,"10":3,"12":2,"13":2,"15":9,"18":2,"26":1,"45":1,"50":1,"51":1,"58":4,"59":1,"60":1,"61":2,"67":4,"72":10,"73":4,"76":3}}],["arithmetics",{"0":{"12":1},"2":{"10":1}}],["areas",{"2":{"72":1}}],["area",{"2":{"39":2,"72":1}}],["areacella",{"2":{"39":2,"85":1}}],["are",{"2":{"0":1,"11":1,"17":3,"26":1,"28":1,"32":1,"50":2,"51":1,"55":1,"56":1,"58":3,"59":2,"60":3,"67":1,"68":1,"70":1,"72":11,"73":6,"81":2,"83":1}}],["according",{"2":{"72":1}}],["access",{"2":{"1":2,"13":1,"22":1,"58":1,"61":1}}],["accessed",{"2":{"0":2,"39":1,"40":1}}],["activate",{"2":{"34":1,"70":2,"78":1,"86":1,"89":1}}],["actually",{"2":{"73":1}}],["actual",{"2":{"13":1,"67":1,"73":1,"76":1}}],["across",{"2":{"0":1,"7":1,"58":3}}],["achieved",{"2":{"0":1}}],["a",{"0":{"9":1,"11":1,"22":1,"23":1,"25":1,"28":1,"29":1,"30":1,"31":1,"32":1,"35":1,"52":1,"56":1,"65":1,"66":1,"78":1,"84":1},"1":{"29":1,"30":1,"31":2,"32":2,"36":1,"37":1,"79":1,"80":1},"2":{"0":4,"2":7,"3":1,"4":1,"7":1,"8":1,"9":2,"10":3,"11":1,"12":4,"13":2,"14":2,"15":76,"16":11,"18":2,"19":5,"20":8,"22":1,"24":1,"25":1,"26":1,"28":4,"29":3,"30":1,"32":2,"34":3,"36":2,"37":2,"39":6,"40":3,"41":1,"43":1,"48":1,"50":2,"54":2,"55":4,"56":1,"58":12,"59":4,"60":8,"61":1,"63":3,"64":3,"65":4,"67":4,"69":2,"70":2,"72":60,"73":31,"76":4,"77":1,"82":1,"83":1}}],["iall",{"2":{"73":1}}],["iwindow",{"2":{"73":1}}],["icolon",{"2":{"73":1}}],["icefire",{"2":{"86":1,"87":1,"88":1,"89":1}}],["ice",{"2":{"40":1,"51":1,"62":1,"66":1}}],["ipcc",{"2":{"40":3,"51":3,"62":3,"66":3}}],["ipsl",{"2":{"40":6,"51":6,"62":6,"66":6}}],["idx",{"2":{"79":3}}],["identical",{"2":{"72":1}}],["id",{"2":{"39":2,"40":2,"51":2,"62":2,"66":2,"85":2}}],["irregular",{"2":{"32":6,"34":2,"39":4,"40":2,"45":1,"48":2,"49":1,"50":1,"51":1,"52":2,"53":2,"54":6,"55":5,"62":1,"66":1,"73":1,"85":2}}],["immutable",{"2":{"11":1}}],["improving",{"2":{"77":1}}],["improve",{"2":{"6":1}}],["implementing",{"2":{"72":1}}],["importance",{"2":{"73":1}}],["important",{"2":{"1":1}}],["impossible",{"2":{"11":1}}],["i",{"0":{"27":1,"28":1,"33":1,"34":1,"35":1},"1":{"29":1,"30":1,"31":1,"32":1,"36":1,"37":1},"2":{"8":1,"15":3,"19":1,"20":1,"29":1,"50":2,"65":1,"70":2,"72":7,"73":4,"76":1,"79":3}}],["ispar",{"2":{"72":1,"73":1}}],["ismissing",{"2":{"67":1}}],["issues",{"2":{"44":1}}],["isequal",{"2":{"15":1}}],["is",{"2":{"1":2,"2":1,"6":1,"7":1,"9":1,"13":1,"14":2,"15":3,"16":3,"17":1,"20":1,"24":1,"27":1,"28":1,"32":2,"33":1,"34":4,"41":1,"43":2,"44":2,"45":1,"49":1,"52":1,"55":2,"56":1,"58":4,"59":1,"60":2,"61":1,"67":3,"69":1,"72":10,"73":10,"75":1,"77":1,"81":1,"83":1}}],["if",{"2":{"0":1,"17":1,"32":3,"65":1,"67":1,"70":1,"72":11,"73":6,"81":1}}],["inline",{"2":{"89":2}}],["incubes",{"2":{"73":1}}],["incs",{"2":{"73":1}}],["include",{"2":{"72":2,"73":1}}],["included",{"2":{"55":1}}],["inarbc",{"2":{"73":1}}],["inar",{"2":{"73":2}}],["inplace",{"2":{"72":3,"73":1}}],["inputcube",{"2":{"73":2}}],["input",{"2":{"16":2,"34":1,"72":12,"73":8}}],["innerchunks",{"2":{"73":1}}],["inner",{"2":{"72":9,"73":3}}],["insize",{"2":{"73":1}}],["inside",{"2":{"72":3}}],["installed",{"2":{"77":1}}],["installation",{"0":{"75":1}}],["install",{"2":{"70":1,"75":1}}],["instead",{"2":{"8":1,"9":1,"13":1,"25":2,"29":1,"55":1,"58":1}}],["inds",{"2":{"73":1}}],["indexing",{"2":{"53":2,"54":2,"77":1}}],["index",{"2":{"39":2,"73":2,"85":2}}],["indices",{"2":{"73":1,"79":1}}],["indicate",{"2":{"72":1}}],["indicating",{"2":{"9":1,"15":1,"72":1}}],["indims",{"2":{"72":7}}],["indims=indims",{"2":{"15":1,"16":1}}],["individually",{"2":{"13":2}}],["individual",{"2":{"0":1,"39":1,"40":1}}],["initialization",{"2":{"39":1,"85":1}}],["initially",{"2":{"15":1}}],["information",{"2":{"65":1,"73":2}}],["info",{"2":{"20":1,"25":1,"67":1,"77":1}}],["int",{"2":{"79":3}}],["int32",{"2":{"67":2}}],["introducing",{"2":{"60":1}}],["interested",{"2":{"81":1}}],["internal",{"0":{"73":1},"2":{"73":9}}],["internally",{"2":{"59":1}}],["interface",{"2":{"72":2,"83":1}}],["interval",{"2":{"40":1,"52":2,"53":3,"54":4,"55":6}}],["intervalsets",{"2":{"55":1}}],["intervals",{"0":{"55":1},"2":{"29":1}}],["interactive",{"2":{"0":1}}],["integer",{"2":{"22":1,"53":1,"54":1,"58":1}}],["int64",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"18":2,"19":6,"20":2,"22":3,"25":9,"26":3,"29":15,"31":4,"32":7,"34":3,"36":1,"37":5,"45":6,"46":6,"48":4,"49":1,"50":19,"66":3,"67":2,"73":1,"76":2}}],["into",{"0":{"84":1},"2":{"0":1,"1":1,"2":1,"7":1,"8":1,"15":1,"17":2,"20":1,"32":4,"38":1,"60":2,"65":1,"70":1,"72":6,"73":3,"89":1}}],["in",{"0":{"35":1},"1":{"36":1,"37":1},"2":{"0":5,"1":1,"2":1,"4":2,"5":1,"9":1,"11":1,"13":1,"14":2,"15":6,"16":3,"17":2,"19":1,"20":1,"26":1,"30":1,"32":1,"34":2,"39":2,"40":1,"43":2,"44":2,"47":3,"50":4,"52":2,"53":3,"54":4,"55":7,"56":1,"57":1,"58":5,"59":1,"60":2,"67":1,"70":2,"72":13,"73":9,"75":1,"76":2,"79":1,"81":3,"83":4,"85":1}}],["iter",{"2":{"72":1}}],["iterate",{"2":{"83":1}}],["iteration",{"0":{"83":1}}],["iterator",{"2":{"34":1}}],["iterators",{"2":{"15":1}}],["iterable",{"2":{"34":2,"72":2}}],["itself",{"2":{"72":1,"73":1}}],["its",{"2":{"0":1}}],["it",{"2":{"0":2,"1":3,"12":1,"16":2,"25":1,"26":1,"27":1,"32":2,"34":2,"46":1,"48":1,"50":1,"51":1,"58":2,"59":1,"61":1,"65":1,"67":2,"70":1,"72":10,"73":5,"75":1}}],["lscene",{"2":{"89":1}}],["lmdz",{"2":{"40":1,"51":1,"62":1,"66":1}}],["loopinds",{"2":{"73":2}}],["looping",{"2":{"72":1,"73":1}}],["loopcachesize",{"2":{"73":1}}],["loopchunksize",{"2":{"72":1}}],["loopaxes",{"2":{"73":1}}],["loopvars",{"2":{"72":1,"73":1}}],["loops",{"2":{"72":1}}],["loop",{"2":{"72":1,"73":2}}],["looped",{"2":{"72":3,"73":3}}],["look",{"2":{"65":1,"69":1,"70":1,"72":1,"73":1}}],["lookups",{"2":{"45":15,"46":10,"48":5,"49":5,"50":38,"56":3}}],["lookup",{"2":{"45":1,"47":1,"85":3}}],["looks",{"2":{"34":1}}],["location",{"2":{"73":3}}],["locations",{"2":{"59":1,"60":1}}],["located",{"2":{"81":1}}],["locate",{"2":{"70":1}}],["localhost",{"2":{"70":1}}],["locally",{"0":{"70":1},"2":{"70":1}}],["local",{"2":{"16":1,"39":1}}],["lowclip",{"2":{"50":4}}],["loadorgenerate",{"2":{"73":1}}],["loading",{"2":{"41":1}}],["loaded",{"2":{"32":2}}],["load",{"2":{"29":1,"32":2,"58":1}}],["lost",{"2":{"17":1}}],["long",{"2":{"39":1,"40":1,"50":1,"52":2,"53":3,"54":3,"55":5}}],["longitudes=longitudes",{"2":{"32":1}}],["longitudes",{"2":{"32":12}}],["longitude",{"2":{"29":1,"76":2}}],["lonlat",{"2":{"31":1}}],["lon=1",{"2":{"29":1,"31":1}}],["lon",{"2":{"10":2,"12":1,"13":1,"14":2,"15":12,"16":1,"19":2,"22":3,"23":1,"27":2,"29":7,"31":3,"33":4,"34":3,"39":2,"40":2,"51":1,"52":2,"53":3,"54":6,"55":10,"56":2,"62":1,"66":1,"85":2,"87":3}}],["link",{"2":{"69":1}}],["linewidth=0",{"2":{"87":1,"88":1}}],["linewidth=2",{"2":{"80":2}}],["linewidth=1",{"2":{"78":1,"80":1}}],["linestyle=",{"2":{"80":2}}],["lines",{"2":{"78":1,"80":3}}],["line",{"2":{"34":1}}],["lim",{"2":{"40":1,"51":1,"62":1,"66":1}}],["libraries",{"2":{"29":1,"58":1}}],["libray",{"2":{"28":1}}],["little",{"2":{"16":1}}],["list",{"2":{"15":1,"72":5,"73":6}}],["like",{"2":{"0":1,"34":1,"69":1,"72":2,"73":1}}],["layer",{"2":{"72":1,"73":1}}],["layername=",{"2":{"73":1}}],["layername",{"2":{"72":2}}],["layout",{"2":{"50":2}}],["lazy",{"2":{"72":1}}],["lazily",{"2":{"13":1}}],["labelled",{"2":{"72":1}}],["labels",{"2":{"50":1,"56":1,"60":1,"61":1}}],["label=false",{"2":{"50":1}}],["label=",{"2":{"50":1,"80":3}}],["label=cb",{"2":{"50":1}}],["label",{"2":{"39":1,"50":3,"85":1}}],["last",{"2":{"16":1}}],["latest",{"2":{"77":1}}],["lat=5",{"2":{"29":1,"31":1}}],["latitudes=latitudes",{"2":{"32":1}}],["latitudes",{"2":{"32":11}}],["latitude",{"2":{"29":1,"76":2}}],["lat",{"2":{"10":2,"12":1,"13":1,"14":2,"15":12,"16":1,"19":2,"22":3,"23":1,"27":2,"29":7,"31":3,"33":4,"34":3,"39":2,"40":2,"51":1,"52":2,"53":3,"54":5,"55":5,"56":1,"62":1,"66":1,"72":1,"85":3,"87":1,"88":1}}],["larger",{"2":{"17":1}}],["large",{"2":{"0":2,"17":1,"44":1,"58":1}}],["level",{"2":{"69":1,"70":1}}],["learn",{"2":{"83":1}}],["learning",{"2":{"58":1,"81":1}}],["leap",{"2":{"78":1}}],["least",{"2":{"32":1,"72":1}}],["length",{"2":{"45":2,"46":1,"48":3,"72":1,"73":3}}],["length=365",{"2":{"78":1}}],["length=20",{"2":{"27":1,"76":1}}],["length=15",{"2":{"10":1,"15":1,"16":1,"22":1,"27":1,"76":1}}],["length=10",{"2":{"10":1,"15":1,"16":1,"22":1,"27":1,"76":1}}],["left",{"2":{"14":2}}],["let",{"2":{"10":1,"27":1,"29":1,"31":1,"32":1,"50":1,"51":1,"79":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.DuMHLHSP.js b/dev/assets/chunks/@localSearchIndexroot.DuMHLHSP.js new file mode 100644 index 00000000..2b701d4f --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.DuMHLHSP.js @@ -0,0 +1 @@ +const e='{"documentCount":92,"nextId":92,"documentIds":{"0":"/YAXArrays.jl/dev/UserGuide/cache.html#Caching-YAXArrays","1":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunk-YAXArrays","2":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunking-YAXArrays","3":"/YAXArrays.jl/dev/UserGuide/chunk.html#Chunking-Datasets","4":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-Chunks-by-Axis","5":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-chunking-by-Variable","6":"/YAXArrays.jl/dev/UserGuide/chunk.html#Set-chunking-for-all-variables","7":"/YAXArrays.jl/dev/UserGuide/combine.html#Combine-YAXArrays","8":"/YAXArrays.jl/dev/UserGuide/combine.html#cat-along-an-existing-dimension","9":"/YAXArrays.jl/dev/UserGuide/combine.html#concatenatecubes-to-a-new-dimension","10":"/YAXArrays.jl/dev/UserGuide/compute.html#Compute-YAXArrays","11":"/YAXArrays.jl/dev/UserGuide/compute.html#Modify-elements-of-a-YAXArray","12":"/YAXArrays.jl/dev/UserGuide/compute.html#arithmetics","13":"/YAXArrays.jl/dev/UserGuide/compute.html#map","14":"/YAXArrays.jl/dev/UserGuide/compute.html#mapslices","15":"/YAXArrays.jl/dev/UserGuide/compute.html#mapCube","16":"/YAXArrays.jl/dev/UserGuide/compute.html#Operations-over-several-YAXArrays","17":"/YAXArrays.jl/dev/UserGuide/compute.html#Creating-a-vector-array","18":"/YAXArrays.jl/dev/UserGuide/compute.html#Distributed-Computation","19":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-YAXArrays","20":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-Base.Array","21":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-Raster","22":"/YAXArrays.jl/dev/UserGuide/convert.html#Convert-DimArray","23":"/YAXArrays.jl/dev/UserGuide/create.html#Create-YAXArrays-and-Datasets","24":"/YAXArrays.jl/dev/UserGuide/create.html#Create-a-YAXArray","25":"/YAXArrays.jl/dev/UserGuide/create.html#Create-a-Dataset","26":"/YAXArrays.jl/dev/UserGuide/faq.html#Frequently-Asked-Questions-(FAQ)","27":"/YAXArrays.jl/dev/UserGuide/faq.html#Extract-the-axes-names-from-a-Cube","28":"/YAXArrays.jl/dev/UserGuide/faq.html#Obtain-values-from-axes-and-data-from-the-cube","29":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-concatenate-cubes","30":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-subset-a-YAXArray-(-Cube-)-or-Dataset?","31":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-YAXArray","32":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset","33":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset-whose-variables-share-all-their-dimensions","34":"/YAXArrays.jl/dev/UserGuide/faq.html#Subsetting-a-Dataset-whose-variables-share-some-but-not-all-of-their-dimensions","35":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-apply-map-algebra?","36":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-use-the-CubeTable-function?","37":"/YAXArrays.jl/dev/UserGuide/faq.html#How-do-I-assing-variable-names-to-YAXArrays-in-a-Dataset","38":"/YAXArrays.jl/dev/UserGuide/faq.html#One-variable-name","39":"/YAXArrays.jl/dev/UserGuide/faq.html#Multiple-variable-names","40":"/YAXArrays.jl/dev/UserGuide/group.html#Group-YAXArrays-and-Datasets","41":"/YAXArrays.jl/dev/UserGuide/group.html#Seasonal-Averages-from-Time-Series-of-Monthly-Means","42":"/YAXArrays.jl/dev/UserGuide/group.html#Download-the-data","43":"/YAXArrays.jl/dev/UserGuide/group.html#GroupBy:-seasons","44":"/YAXArrays.jl/dev/UserGuide/group.html#dropdims","45":"/YAXArrays.jl/dev/UserGuide/group.html#seasons","46":"/YAXArrays.jl/dev/UserGuide/group.html#GroupBy:-weight","47":"/YAXArrays.jl/dev/UserGuide/group.html#weights","48":"/YAXArrays.jl/dev/UserGuide/group.html#weighted-seasons","49":"/YAXArrays.jl/dev/UserGuide/read.html#Read-YAXArrays-and-Datasets","50":"/YAXArrays.jl/dev/UserGuide/read.html#Read-Zarr","51":"/YAXArrays.jl/dev/UserGuide/read.html#Read-NetCDF","52":"/YAXArrays.jl/dev/UserGuide/read.html#Read-GDAL-(GeoTIFF,-GeoJSON)","53":"/YAXArrays.jl/dev/UserGuide/select.html#Select-YAXArrays-and-Datasets","54":"/YAXArrays.jl/dev/UserGuide/select.html#Select-a-YAXArray","55":"/YAXArrays.jl/dev/UserGuide/select.html#Select-elements","56":"/YAXArrays.jl/dev/UserGuide/select.html#Select-ranges","57":"/YAXArrays.jl/dev/UserGuide/select.html#Closed-and-open-intervals","58":"/YAXArrays.jl/dev/UserGuide/select.html#Get-a-dimension","59":"/YAXArrays.jl/dev/UserGuide/write.html#Write-YAXArrays-and-Datasets","60":"/YAXArrays.jl/dev/UserGuide/write.html#Write-Zarr","61":"/YAXArrays.jl/dev/UserGuide/write.html#Write-NetCDF","62":"/YAXArrays.jl/dev/UserGuide/write.html#Overwrite-a-Dataset","63":"/YAXArrays.jl/dev/UserGuide/write.html#Append-to-a-Dataset","64":"/YAXArrays.jl/dev/UserGuide/write.html#Save-Skeleton","65":"/YAXArrays.jl/dev/UserGuide/types.html#types","66":"/YAXArrays.jl/dev/UserGuide/types.html#yaxarray","67":"/YAXArrays.jl/dev/UserGuide/types.html#dataset","68":"/YAXArrays.jl/dev/UserGuide/types.html#(Data)-Cube","69":"/YAXArrays.jl/dev/UserGuide/types.html#dimension","70":"/YAXArrays.jl/dev/api.html#API-Reference","71":"/YAXArrays.jl/dev/api.html#Public-API","72":"/YAXArrays.jl/dev/api.html#Internal-API","73":"/YAXArrays.jl/dev/development/contribute.html#Contribute-to-YAXArrays.jl","74":"/YAXArrays.jl/dev/development/contribute.html#Contribute-to-Documentation","75":"/YAXArrays.jl/dev/development/contribute.html#Build-docs-locally","76":"/YAXArrays.jl/dev/get_started.html#Getting-Started","77":"/YAXArrays.jl/dev/get_started.html#installation","78":"/YAXArrays.jl/dev/get_started.html#quickstart","79":"/YAXArrays.jl/dev/get_started.html#updates","80":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Mean-Seasonal-Cycle-for-a-single-pixel","81":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Define-the-cube","82":"/YAXArrays.jl/dev/tutorials/mean_seasonal_cycle.html#Plot-results:-mean-seasonal-cycle","83":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Other-tutorials","84":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#General-overview-of-the-functionality-of-YAXArrays","85":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Table-style-iteration-over-YAXArrays","86":"/YAXArrays.jl/dev/tutorials/other_tutorials.html#Combining-multiple-tiff-files-into-a-zarr-based-datacube","87":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Plotting-maps","88":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Heatmap-plot","89":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Wintri-Projection","90":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#Moll-projection","91":"/YAXArrays.jl/dev/tutorials/plottingmaps.html#3D-sphere-plot"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,86],"1":[2,1,58],"2":[2,2,57],"3":[2,2,9],"4":[4,4,72],"5":[4,4,72],"6":[5,4,81],"7":[2,1,31],"8":[5,2,80],"9":[5,2,89],"10":[2,1,117],"11":[5,2,30],"12":[1,2,70],"13":[1,2,118],"14":[1,2,88],"15":[1,2,22],"16":[4,3,210],"17":[4,3,248],"18":[2,2,138],"19":[2,1,52],"20":[3,2,84],"21":[2,2,116],"22":[2,2,120],"23":[4,1,14],"24":[3,4,106],"25":[3,4,45],"26":[5,1,19],"27":[7,5,75],"28":[8,5,76],"29":[5,5,87],"30":[10,5,33],"31":[3,14,144],"32":[3,14,18],"33":[9,14,69],"34":[13,14,153],"35":[7,5,112],"36":[8,5,169],"37":[11,5,1],"38":[3,15,24],"39":[3,15,32],"40":[4,1,23],"41":[8,4,35],"42":[3,4,67],"43":[2,4,136],"44":[1,6,102],"45":[1,6,49],"46":[2,4,107],"47":[1,6,87],"48":[2,6,349],"49":[4,1,14],"50":[2,4,184],"51":[2,4,206],"52":[5,4,38],"53":[4,1,165],"54":[3,4,106],"55":[2,4,117],"56":[2,4,131],"57":[4,4,144],"58":[3,4,73],"59":[4,1,146],"60":[2,4,19],"61":[2,4,20],"62":[3,4,80],"63":[4,4,153],"64":[2,4,117],"65":[1,1,16],"66":[1,1,113],"67":[1,1,78],"68":[3,1,70],"69":[1,1,32],"70":[2,1,10],"71":[2,2,559],"72":[2,2,467],"73":[4,1,15],"74":[3,4,40],"75":[3,5,75],"76":[2,1,1],"77":[1,2,34],"78":[1,2,196],"79":[1,2,49],"80":[7,1,73],"81":[3,7,132],"82":[5,7,48],"83":[2,1,49],"84":[6,2,12],"85":[5,2,38],"86":[9,2,1],"87":[2,1,132],"88":[2,2,21],"89":[2,1,46],"90":[2,2,33],"91":[3,2,57]},"averageFieldLength":[3.434782608695651,3.619565217391304,90.10869565217394],"storedFields":{"0":{"title":"Caching YAXArrays","titles":[]},"1":{"title":"Chunk YAXArrays","titles":[]},"2":{"title":"Chunking YAXArrays","titles":["Chunk YAXArrays"]},"3":{"title":"Chunking Datasets","titles":["Chunk YAXArrays"]},"4":{"title":"Set Chunks by Axis","titles":["Chunk YAXArrays","Chunking Datasets"]},"5":{"title":"Set chunking by Variable","titles":["Chunk YAXArrays","Chunking Datasets"]},"6":{"title":"Set chunking for all variables","titles":["Chunk YAXArrays","Chunking Datasets"]},"7":{"title":"Combine YAXArrays","titles":[]},"8":{"title":"cat along an existing dimension","titles":["Combine YAXArrays"]},"9":{"title":"concatenatecubes to a new dimension","titles":["Combine YAXArrays"]},"10":{"title":"Compute YAXArrays","titles":[]},"11":{"title":"Modify elements of a YAXArray","titles":["Compute YAXArrays"]},"12":{"title":"Arithmetics","titles":["Compute YAXArrays"]},"13":{"title":"map","titles":["Compute YAXArrays"]},"14":{"title":"mapslices","titles":["Compute YAXArrays"]},"15":{"title":"mapCube","titles":["Compute YAXArrays"]},"16":{"title":"Operations over several YAXArrays","titles":["Compute YAXArrays","mapCube"]},"17":{"title":"Creating a vector array","titles":["Compute YAXArrays","mapCube"]},"18":{"title":"Distributed Computation","titles":["Compute YAXArrays"]},"19":{"title":"Convert YAXArrays","titles":[]},"20":{"title":"Convert Base.Array","titles":["Convert YAXArrays"]},"21":{"title":"Convert Raster","titles":["Convert YAXArrays"]},"22":{"title":"Convert DimArray","titles":["Convert YAXArrays"]},"23":{"title":"Create YAXArrays and Datasets","titles":[]},"24":{"title":"Create a YAXArray","titles":["Create YAXArrays and Datasets"]},"25":{"title":"Create a Dataset","titles":["Create YAXArrays and Datasets"]},"26":{"title":"Frequently Asked Questions (FAQ)","titles":[]},"27":{"title":"Extract the axes names from a Cube","titles":["Frequently Asked Questions (FAQ)"]},"28":{"title":"Obtain values from axes and data from the cube","titles":["Frequently Asked Questions (FAQ)"]},"29":{"title":"How do I concatenate cubes","titles":["Frequently Asked Questions (FAQ)"]},"30":{"title":"How do I subset a YAXArray ( Cube ) or Dataset?","titles":["Frequently Asked Questions (FAQ)"]},"31":{"title":"Subsetting a YAXArray","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?"]},"32":{"title":"Subsetting a Dataset","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?"]},"33":{"title":"Subsetting a Dataset whose variables share all their dimensions","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?","Subsetting a Dataset"]},"34":{"title":"Subsetting a Dataset whose variables share some but not all of their dimensions","titles":["Frequently Asked Questions (FAQ)","How do I subset a YAXArray ( Cube ) or Dataset?","Subsetting a Dataset"]},"35":{"title":"How do I apply map algebra?","titles":["Frequently Asked Questions (FAQ)"]},"36":{"title":"How do I use the CubeTable function?","titles":["Frequently Asked Questions (FAQ)"]},"37":{"title":"How do I assing variable names to YAXArrays in a Dataset","titles":["Frequently Asked Questions (FAQ)"]},"38":{"title":"One variable name","titles":["Frequently Asked Questions (FAQ)","How do I assing variable names to YAXArrays in a Dataset"]},"39":{"title":"Multiple variable names","titles":["Frequently Asked Questions (FAQ)","How do I assing variable names to YAXArrays in a Dataset"]},"40":{"title":"Group YAXArrays and Datasets","titles":[]},"41":{"title":"Seasonal Averages from Time Series of Monthly Means","titles":["Group YAXArrays and Datasets"]},"42":{"title":"Download the data","titles":["Group YAXArrays and Datasets"]},"43":{"title":"GroupBy: seasons","titles":["Group YAXArrays and Datasets"]},"44":{"title":"dropdims","titles":["Group YAXArrays and Datasets","GroupBy: seasons"]},"45":{"title":"seasons","titles":["Group YAXArrays and Datasets","GroupBy: seasons"]},"46":{"title":"GroupBy: weight","titles":["Group YAXArrays and Datasets"]},"47":{"title":"weights","titles":["Group YAXArrays and Datasets","GroupBy: weight"]},"48":{"title":"weighted seasons","titles":["Group YAXArrays and Datasets","GroupBy: weight"]},"49":{"title":"Read YAXArrays and Datasets","titles":[]},"50":{"title":"Read Zarr","titles":["Read YAXArrays and Datasets"]},"51":{"title":"Read NetCDF","titles":["Read YAXArrays and Datasets"]},"52":{"title":"Read GDAL (GeoTIFF, GeoJSON)","titles":["Read YAXArrays and Datasets"]},"53":{"title":"Select YAXArrays and Datasets","titles":[]},"54":{"title":"Select a YAXArray","titles":["Select YAXArrays and Datasets"]},"55":{"title":"Select elements","titles":["Select YAXArrays and Datasets"]},"56":{"title":"Select ranges","titles":["Select YAXArrays and Datasets"]},"57":{"title":"Closed and open intervals","titles":["Select YAXArrays and Datasets"]},"58":{"title":"Get a dimension","titles":["Select YAXArrays and Datasets"]},"59":{"title":"Write YAXArrays and Datasets","titles":[]},"60":{"title":"Write Zarr","titles":["Write YAXArrays and Datasets"]},"61":{"title":"Write NetCDF","titles":["Write YAXArrays and Datasets"]},"62":{"title":"Overwrite a Dataset","titles":["Write YAXArrays and Datasets"]},"63":{"title":"Append to a Dataset","titles":["Write YAXArrays and Datasets"]},"64":{"title":"Save Skeleton","titles":["Write YAXArrays and Datasets"]},"65":{"title":"Types","titles":[]},"66":{"title":"YAXArray","titles":["Types"]},"67":{"title":"Dataset","titles":["Types"]},"68":{"title":"(Data) Cube","titles":["Types"]},"69":{"title":"Dimension","titles":["Types"]},"70":{"title":"API Reference","titles":[]},"71":{"title":"Public API","titles":["API Reference"]},"72":{"title":"Internal API","titles":["API Reference"]},"73":{"title":"Contribute to YAXArrays.jl","titles":[]},"74":{"title":"Contribute to Documentation","titles":["Contribute to YAXArrays.jl"]},"75":{"title":"Build docs locally","titles":["Contribute to YAXArrays.jl","Contribute to Documentation"]},"76":{"title":"Getting Started","titles":[]},"77":{"title":"Installation","titles":["Getting Started"]},"78":{"title":"Quickstart","titles":["Getting Started"]},"79":{"title":"Updates","titles":["Getting Started"]},"80":{"title":"Mean Seasonal Cycle for a single pixel","titles":[]},"81":{"title":"Define the cube","titles":["Mean Seasonal Cycle for a single pixel"]},"82":{"title":"Plot results: mean seasonal cycle","titles":["Mean Seasonal Cycle for a single pixel"]},"83":{"title":"Other tutorials","titles":[]},"84":{"title":"General overview of the functionality of YAXArrays","titles":["Other tutorials"]},"85":{"title":"Table-style iteration over YAXArrays","titles":["Other tutorials"]},"86":{"title":"Combining multiple tiff files into a zarr based datacube","titles":["Other tutorials"]},"87":{"title":"Plotting maps","titles":[]},"88":{"title":"Heatmap plot","titles":["Plotting maps"]},"89":{"title":"Wintri Projection","titles":[]},"90":{"title":"Moll projection","titles":["Wintri Projection"]},"91":{"title":"3D sphere plot","titles":["Wintri Projection"]}},"dirtCount":0,"index":[["δlon",{"2":{"89":1}}],["`diskarrays",{"2":{"72":1}}],["`ds`",{"2":{"71":1}}],["`ordereddict`",{"2":{"71":1}}],["`fun`",{"2":{"71":1}}],["`a",{"2":{"31":1}}],["π",{"2":{"35":2,"80":1,"82":1}}],[">var",{"2":{"81":1}}],[">dates",{"2":{"81":1}}],[">month",{"2":{"71":1}}],[">abs",{"2":{"71":1}}],[">=",{"2":{"34":4}}],[">",{"2":{"34":2,"35":2,"81":1}}],["└──────────────────────────────────────────────────────────┘",{"2":{"31":1}}],["└─────────────────────────────────────────────────────────────┘",{"2":{"21":2}}],["└──────────────────────────────────────────────────────────────────┘",{"2":{"22":2}}],["└──────────────────────────────────────────────────────────────────────┘",{"2":{"24":1}}],["└────────────────────────────────────────────────────────────────────────────────┘",{"2":{"55":1}}],["└──────────────────────────────────────────────────────────────────────────────┘",{"2":{"10":1,"12":1,"13":1,"14":2,"16":5,"17":4,"24":1,"27":1,"28":1,"29":1,"31":4,"35":3,"36":3,"43":2,"44":1,"46":3,"47":2,"48":3,"50":1,"51":1,"54":2,"55":2,"56":3,"57":5,"64":1,"78":1,"81":1}}],["└───────────────────────────────────────────────────────────────────────┘",{"2":{"8":1}}],["└─────────────────────────────────────────────────────────────────────┘",{"2":{"20":1,"78":1}}],["└────────────────────────────────────────────────────────────────┘",{"2":{"9":1}}],["⬔",{"2":{"29":1,"78":1}}],["quickstart",{"0":{"78":1}}],["query",{"2":{"53":1}}],["questions",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1}}],["quot",{"2":{"16":2,"36":2,"62":2,"64":2,"71":16,"72":12}}],["jj+1",{"2":{"51":1,"53":1,"59":1,"63":1}}],["jj",{"2":{"51":1,"53":1,"59":1,"63":1}}],["joinname",{"2":{"71":1}}],["joinname=",{"2":{"71":1}}],["journal",{"2":{"51":1,"53":1,"59":1,"63":1}}],["joe",{"2":{"41":1,"48":1}}],["j",{"2":{"48":8}}],["jan",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["jl",{"0":{"73":1},"1":{"74":1,"75":1},"2":{"21":1,"22":1,"36":1,"42":1,"48":1,"66":1,"69":1,"73":1,"75":2,"77":1,"78":2,"79":3,"85":1}}],["jussieu",{"2":{"51":1,"53":1,"59":1,"63":1}}],["just",{"2":{"17":1,"66":1,"68":1,"71":1,"72":2}}],["jul",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["juliaδlon",{"2":{"89":1}}],["juliaglmakie",{"2":{"88":1}}],["juliagetloopchunks",{"2":{"72":1}}],["juliagetouttype",{"2":{"72":1}}],["juliagetoutaxis",{"2":{"72":1}}],["juliaget",{"2":{"72":1}}],["juliagetaxis",{"2":{"71":1}}],["juliagen",{"2":{"16":1}}],["juliax",{"2":{"80":1}}],["juliapkg>",{"2":{"77":1,"79":1}}],["juliapermuteloopaxes",{"2":{"72":1}}],["juliaoptifunc",{"2":{"72":1}}],["juliaoutdims",{"2":{"71":1}}],["juliaoffset",{"2":{"13":1}}],["juliaindims",{"2":{"71":1}}],["juliaimport",{"2":{"14":1,"77":1}}],["juliacopydata",{"2":{"72":1}}],["juliacollect",{"2":{"28":1,"58":1}}],["juliaclean",{"2":{"72":1}}],["juliacube",{"2":{"71":1}}],["juliacubefittable",{"2":{"71":1}}],["juliacubetable",{"2":{"71":1}}],["juliacaxes",{"2":{"71":1}}],["juliasavecube",{"2":{"71":1}}],["juliasavedataset",{"2":{"60":1,"61":1,"62":1}}],["juliasetchunks",{"2":{"71":1,"72":1}}],["juliaseasons",{"2":{"45":1}}],["julialon",{"2":{"87":1}}],["julialookup",{"2":{"58":1}}],["julialatitudes",{"2":{"34":1}}],["juliawith",{"2":{"48":1}}],["julia>",{"2":{"48":1,"75":1,"81":1}}],["juliaurl",{"2":{"42":1}}],["juliausing",{"2":{"0":1,"2":1,"4":1,"5":1,"6":1,"8":1,"9":1,"10":1,"16":1,"17":1,"18":2,"20":1,"21":1,"22":1,"24":2,"27":1,"29":1,"31":1,"33":1,"34":1,"36":2,"40":1,"48":1,"50":1,"51":1,"52":1,"53":1,"55":1,"57":1,"59":1,"60":1,"61":1,"64":1,"78":2,"80":1,"87":1,"91":1}}],["juliakeylist",{"2":{"39":1}}],["juliaylonlat",{"2":{"31":1}}],["juliaytime3",{"2":{"31":1}}],["juliaytime2",{"2":{"31":1}}],["juliaytime",{"2":{"31":1}}],["juliay",{"2":{"31":1}}],["juliayaxcolumn",{"2":{"72":1}}],["juliayaxarray",{"2":{"71":1}}],["juliayax",{"2":{"0":1}}],["juliatos",{"2":{"54":2,"55":2,"56":3,"57":1,"58":1}}],["juliatempo",{"2":{"46":1}}],["juliat",{"2":{"31":1,"36":1,"80":1}}],["juliatspan",{"2":{"16":1}}],["juliadataset",{"2":{"71":1}}],["juliadata3",{"2":{"25":1}}],["juliads2",{"2":{"63":1}}],["juliads",{"2":{"33":1,"34":1,"50":1,"51":1}}],["juliadim",{"2":{"22":1}}],["juliadimarray",{"2":{"17":1}}],["juliareadcubedata",{"2":{"71":1}}],["juliaregions",{"2":{"17":2}}],["juliar",{"2":{"64":1}}],["juliaras2",{"2":{"21":1}}],["juliamutable",{"2":{"72":1}}],["juliamatch",{"2":{"72":1}}],["juliamapcube",{"2":{"71":2}}],["juliamapslices",{"2":{"14":1,"18":1}}],["juliamovingwindow",{"2":{"71":1}}],["juliamean",{"2":{"48":1}}],["juliam2",{"2":{"20":1}}],["julia",{"2":{"19":1,"72":1,"75":1,"77":2,"79":2}}],["juliavector",{"2":{"17":1}}],["juliajulia>",{"2":{"16":5,"27":3,"28":1,"29":1,"35":3,"36":3,"38":1,"39":1,"43":2,"44":1,"46":2,"47":2,"48":3,"57":4,"63":1,"64":1,"81":2,"87":3}}],["juliaall",{"2":{"64":1}}],["juliaaxs",{"2":{"42":1}}],["juliaaxes",{"2":{"31":1}}],["juliaa2",{"2":{"12":2,"24":2,"78":1}}],["juliaa",{"2":{"2":1,"11":3}}],["juliafig",{"2":{"80":1,"82":1,"89":1,"90":1}}],["juliafindaxis",{"2":{"72":1}}],["juliafittable",{"2":{"71":2}}],["juliafunction",{"2":{"16":1,"43":1,"71":1,"81":1}}],["juliaf",{"2":{"2":1,"4":1,"5":1,"6":1,"16":1}}],["jun",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["∘",{"2":{"18":1}}],["|>",{"2":{"17":2}}],["⋱",{"2":{"17":1}}],["⋮",{"2":{"17":2,"58":1,"81":1}}],["997734",{"2":{"78":1}}],["997315",{"2":{"78":1}}],["991662",{"2":{"20":1}}],["95",{"2":{"48":1}}],["959",{"2":{"48":1}}],["951713",{"2":{"21":1,"22":1}}],["951478",{"2":{"17":1}}],["9375",{"2":{"50":2,"87":1}}],["93743",{"2":{"48":1}}],["9362",{"2":{"48":1}}],["930755",{"2":{"22":1}}],["97649",{"2":{"48":1}}],["97047",{"2":{"48":1}}],["90712",{"2":{"48":1}}],["90365",{"2":{"48":1}}],["90",{"2":{"34":2,"57":5}}],["906684",{"2":{"21":1}}],["921394",{"2":{"22":1}}],["92191",{"2":{"21":1}}],["948571",{"2":{"78":1}}],["948093",{"2":{"21":1}}],["9404",{"2":{"43":1,"44":1}}],["9432",{"2":{"43":1,"44":1}}],["94534",{"2":{"48":1}}],["945523",{"2":{"20":1}}],["945136",{"2":{"17":1}}],["914342",{"2":{"78":1}}],["917506",{"2":{"78":1}}],["917739",{"2":{"17":1}}],["9192",{"2":{"48":1}}],["91",{"2":{"27":1,"57":5}}],["91863",{"2":{"20":1}}],["984091",{"2":{"78":1}}],["986",{"2":{"48":1}}],["98",{"2":{"34":6}}],["982001",{"2":{"78":1}}],["982017",{"2":{"21":1}}],["982369",{"2":{"20":1}}],["982681",{"2":{"20":1}}],["980182",{"2":{"17":1}}],["9",{"2":{"16":14,"17":2,"28":1,"31":1,"46":4,"56":4,"72":1}}],["96x71x19",{"2":{"51":1,"53":1,"59":1,"63":1}}],["96f0",{"2":{"51":1,"53":1,"59":1}}],["9682",{"2":{"43":1,"44":1}}],["960",{"2":{"17":1}}],["96",{"2":{"8":1,"9":1,"55":2,"63":1}}],["87",{"2":{"58":1}}],["87705",{"2":{"48":1}}],["84",{"2":{"58":1}}],["830771",{"2":{"78":1}}],["831293",{"2":{"78":1}}],["83",{"2":{"58":1}}],["838723",{"2":{"20":1}}],["82",{"2":{"58":1}}],["828301",{"2":{"21":1}}],["864111",{"2":{"78":1}}],["86457",{"2":{"48":1}}],["86",{"2":{"58":1}}],["869916",{"2":{"20":1}}],["85",{"2":{"58":1,"89":1,"90":1}}],["850",{"2":{"48":1}}],["85ºn",{"2":{"34":1}}],["85714",{"2":{"17":1}}],["818381",{"2":{"78":1}}],["818217",{"2":{"21":1}}],["81",{"2":{"24":1,"58":1}}],["812941",{"2":{"20":1}}],["812919",{"2":{"17":1}}],["895866",{"2":{"78":1}}],["8984",{"2":{"48":1}}],["89237",{"2":{"48":1}}],["89",{"2":{"34":6,"50":4,"51":2,"53":1,"54":2,"55":1,"56":1,"57":5,"58":1,"59":1,"63":1,"87":2}}],["896276",{"2":{"22":1}}],["894081",{"2":{"21":1}}],["897845",{"2":{"21":1}}],["899889",{"2":{"17":1}}],["883224",{"2":{"78":1}}],["88",{"2":{"29":1,"50":4,"58":1,"78":1,"87":2}}],["888258",{"2":{"22":1}}],["885515",{"2":{"17":1}}],["886959",{"2":{"17":1}}],["8",{"2":{"16":12,"17":2,"28":1,"31":1,"34":6,"51":2,"53":1,"54":2,"59":1,"63":1,"81":1}}],["804233",{"2":{"78":1}}],["80759",{"2":{"48":1}}],["807073",{"2":{"17":1}}],["800",{"2":{"28":1,"31":1,"64":1}}],["8037",{"2":{"20":1}}],["80386",{"2":{"17":1}}],["802815",{"2":{"20":1}}],["80",{"2":{"16":1,"34":2}}],["v",{"2":{"51":1,"53":1,"59":1,"63":1}}],["v1",{"2":{"51":2,"53":2,"59":2,"63":2,"77":1}}],["vol",{"2":{"51":1,"53":1,"59":1,"63":1}}],["v20190710",{"2":{"50":1,"87":2}}],["video",{"2":{"83":1}}],["videos",{"2":{"83":1}}],["visualization",{"2":{"36":1}}],["vice",{"2":{"19":1}}],["view",{"2":{"17":1,"78":1}}],["version",{"2":{"50":1,"51":1,"53":1,"59":1,"63":1,"79":2,"87":1}}],["versa",{"2":{"19":1}}],["verify",{"2":{"47":1}}],["very",{"2":{"13":1,"36":1,"66":1}}],["vector",{"0":{"17":1},"2":{"17":4,"28":1,"43":1,"45":1,"46":2,"47":3,"48":2,"58":1,"66":1,"71":2,"72":3}}],["val",{"2":{"28":2,"58":1}}],["vals",{"2":{"17":1}}],["value",{"2":{"12":1,"14":3,"16":2,"35":1,"51":1,"54":2,"55":3,"56":3,"57":5,"71":4,"72":1}}],["values=ds1",{"2":{"36":1}}],["values",{"0":{"28":1},"2":{"9":1,"17":2,"23":1,"24":2,"27":3,"28":1,"34":3,"36":4,"56":1,"58":2,"64":1,"66":1,"67":1,"71":9,"78":1,"87":1}}],["vararg",{"2":{"72":2}}],["varoables",{"2":{"71":1}}],["variant",{"2":{"50":1,"87":1}}],["variable=at",{"2":{"78":1}}],["variable",{"0":{"5":1,"37":1,"38":1,"39":1},"1":{"38":1,"39":1},"2":{"5":1,"9":3,"34":3,"50":1,"71":4,"72":7,"78":3,"80":1,"81":1,"82":1,"87":1}}],["variables=at",{"2":{"35":2}}],["variables",{"0":{"6":1,"33":1,"34":1},"2":{"4":2,"5":1,"6":2,"9":2,"19":1,"25":1,"29":2,"32":1,"33":2,"34":3,"38":1,"39":1,"50":2,"51":1,"53":1,"59":1,"63":2,"67":1,"68":1,"71":2,"87":2}}],["varlist",{"2":{"39":2}}],["var2=var2",{"2":{"33":1}}],["var2",{"2":{"29":2,"33":3,"35":1}}],["var1=var1",{"2":{"33":1}}],["var1",{"2":{"29":2,"33":3,"35":1}}],["var",{"2":{"9":2,"80":2,"81":2,"82":2}}],["uv",{"2":{"91":1}}],["u",{"2":{"81":1}}],["updates",{"0":{"79":1}}],["update",{"2":{"71":1}}],["up",{"2":{"71":1}}],["ucar",{"2":{"51":1,"53":1,"59":1,"67":1}}],["urls",{"2":{"49":1}}],["url",{"2":{"42":1,"50":1}}],["unpermuted",{"2":{"72":2}}],["unpractical",{"2":{"42":1}}],["underlying",{"2":{"71":1,"72":1,"79":1}}],["unlike",{"2":{"68":1}}],["unique",{"2":{"81":1}}],["unidata",{"2":{"51":1,"53":1,"59":1,"67":1}}],["units",{"2":{"50":1,"51":2,"54":4,"55":6,"56":6,"57":10}}],["unitrange",{"2":{"43":2,"44":2,"48":6}}],["union",{"2":{"14":2,"16":4,"17":1,"35":1,"36":2,"51":1,"54":2,"55":3,"56":3,"57":5,"64":2}}],["unordered",{"2":{"43":2,"44":1,"45":1,"46":2,"47":2,"48":3}}],["unweighted",{"2":{"43":1,"48":1}}],["unnecessary",{"2":{"17":1}}],["unchanged",{"2":{"13":1}}],["usually",{"2":{"50":1,"66":2,"67":2}}],["usual",{"2":{"43":1}}],["us",{"2":{"17":1}}],["useable",{"2":{"71":1}}],["uses",{"2":{"36":1}}],["used",{"2":{"17":1,"18":1,"31":1,"53":1,"58":1,"65":1,"66":1,"69":1,"71":4,"72":3}}],["userguide",{"2":{"74":2}}],["users",{"2":{"72":1}}],["user",{"2":{"10":2,"12":1,"13":1,"18":1,"24":3,"25":1,"72":1}}],["use",{"0":{"36":1},"2":{"0":1,"8":1,"9":1,"10":4,"13":1,"18":2,"27":2,"31":1,"33":1,"34":1,"35":1,"36":2,"40":1,"42":1,"44":1,"57":2,"64":1,"68":1,"71":3,"72":1,"83":1,"85":1,"87":2}}],["useful",{"2":{"0":1,"68":1}}],["using",{"2":{"0":1,"8":1,"9":1,"10":1,"16":2,"17":2,"18":7,"22":1,"27":1,"29":1,"31":2,"33":2,"34":2,"35":1,"36":1,"40":4,"50":2,"51":3,"52":2,"53":2,"55":3,"56":2,"59":2,"63":1,"64":2,"79":1,"80":2,"81":1,"87":3}}],["+proj=moll",{"2":{"90":1}}],["+",{"2":{"12":2,"13":1,"16":2,"80":1,"89":1}}],["kwargs",{"2":{"71":4,"72":2}}],["k",{"2":{"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["keys",{"2":{"71":1}}],["key",{"2":{"71":1}}],["keyword",{"2":{"63":1,"71":6,"72":2}}],["keylist",{"2":{"39":1}}],["keeps",{"2":{"13":1}}],["keep",{"2":{"0":1,"72":1}}],["kb",{"2":{"10":1,"12":1,"13":1,"14":1,"16":2,"17":1,"21":1,"24":2,"27":1,"29":1,"31":4,"35":3,"36":1,"55":1,"56":3,"57":5,"78":1,"81":1}}],["↗",{"2":{"10":1,"12":1,"13":1,"16":2,"17":1,"21":2,"24":3,"25":1,"27":3,"29":1,"31":5,"33":2,"35":3,"43":1,"50":2,"51":2,"53":1,"54":2,"56":3,"57":5,"59":1,"63":2,"78":1,"87":1}}],["├─────────────────────────┴──────────────────────────",{"2":{"31":1}}],["├─────────────────────────┴─────────────────────────────────────",{"2":{"78":1}}],["├─────────────────────────┴──────────────────────────────────────────────",{"2":{"36":1}}],["├─────────────────────────┴──────────────────────────────────",{"2":{"22":2}}],["├─────────────────────────┴────────────────────────────────",{"2":{"9":1}}],["├──────────────────────────┴────────────────────────────",{"2":{"21":1}}],["├──────────────────────────┴────────────────────────────────────",{"2":{"20":1}}],["├──────────────────────────┴─────────────────────────────────────────────",{"2":{"17":1,"31":1}}],["├────────────────────────────┴───────────────────────────────────────────",{"2":{"31":2}}],["├────────────────────────────┴──────────────────────────",{"2":{"21":1}}],["├─────────────────────────────┴──────────────────────────────────",{"2":{"24":1}}],["├─────────────────────────────┴──────────────────────────────────────────",{"2":{"16":1,"27":1}}],["├───────────────────────────────┴────────────────────────────────────────",{"2":{"47":1}}],["├──────────────────────────────────┴─────────────────────────────────────",{"2":{"81":1}}],["├─────────────────────────────────────────┴──────────────────────────────",{"2":{"64":1}}],["├──────────────────────────────────────────┴─────────────────────────────",{"2":{"17":1,"36":1}}],["├─────────────────────────────────────────────┴─────────────────",{"2":{"55":1}}],["├───────────────────────────────────────────────┴────────────────────────",{"2":{"36":1,"56":1,"57":5}}],["├───────────────────────────────────────────────",{"2":{"31":1}}],["├────────────────────────────────────────────────",{"2":{"31":1}}],["├──────────────────────────────────────────────────┴─────────────────────",{"2":{"43":1}}],["├──────────────────────────────────────────────────",{"2":{"21":1}}],["├───────────────────────────────────────────────────",{"2":{"21":2}}],["├─────────────────────────────────────────────────────",{"2":{"9":1,"21":1}}],["├───────────────────────────────────────────────────────",{"2":{"22":1}}],["├────────────────────────────────────────────────────────",{"2":{"22":2}}],["├──────────────────────────────────────────────────────────",{"2":{"20":1,"78":1}}],["├───────────────────────────────────────────────────────────",{"2":{"20":1,"24":1,"78":1}}],["├────────────────────────────────────────────────────────────",{"2":{"8":1,"24":1}}],["├──────────────────────────────────────────────────────────────────",{"2":{"43":1,"46":1}}],["├───────────────────────────────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"14":2,"16":5,"17":2,"24":1,"27":1,"28":1,"29":1,"31":4,"35":3,"36":3,"46":1,"50":1,"51":1,"54":2,"55":2,"56":3,"57":5,"64":1,"78":1,"81":1}}],["├─────────────────────────────────────────────────────────────────────",{"2":{"55":1}}],["├─────────────────────────────────────────────────────────────────────┴",{"2":{"55":1}}],["├────────────────────────────────────────────────────────────────────────",{"2":{"43":1,"44":1,"46":1,"47":1,"48":3}}],["├────────────────────────────────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"14":2,"16":5,"17":3,"24":1,"27":1,"28":1,"29":1,"31":4,"35":3,"36":3,"43":2,"44":1,"46":3,"47":2,"48":3,"50":1,"51":1,"54":2,"55":2,"56":3,"57":5,"64":1,"78":1,"81":1}}],["├─────────────────────────────────────────────────────────────",{"2":{"8":1}}],["├──────────────────────────────────────────────────────",{"2":{"9":1}}],["├────────────────────────────────────────────────┴───────────────────────",{"2":{"14":1,"46":1,"51":1,"54":2,"55":2}}],["├──────────────────────────────────────────────┴─────────────────────────",{"2":{"16":2,"35":1,"56":2}}],["├───────────────────────────────────────────┴────────────────────────────",{"2":{"14":1}}],["├────────────────────────────────────┴───────────────────────────────────",{"2":{"50":1}}],["├────────────────────────────────┴───────────────────────────────────────",{"2":{"29":1,"78":1}}],["├────────────────────────────────┴────────────────────────────────",{"2":{"8":1}}],["├──────────────────────────────┴─────────────────────────────────────────",{"2":{"10":1,"12":1,"13":1,"16":2,"17":1,"24":1,"35":2,"46":1}}],["├───────────────────────────┴────────────────────────────────────────────",{"2":{"17":1,"28":1,"31":1}}],["╭────────────────────────────╮",{"2":{"21":1,"31":2}}],["╭─────────────────────────────╮",{"2":{"16":1,"24":1,"27":1}}],["╭───────────────────────────────╮",{"2":{"47":1}}],["╭──────────────────────────────────╮",{"2":{"81":1}}],["╭─────────────────────────────────────────╮",{"2":{"64":1}}],["╭──────────────────────────────────────────╮",{"2":{"17":1,"36":1}}],["╭─────────────────────────────────────────────╮",{"2":{"55":1}}],["╭──────────────────────────────────────────────────────────────────────────────╮",{"2":{"43":1,"44":1,"46":1,"47":1,"48":3}}],["╭──────────────────────────────────────────────────╮",{"2":{"43":1}}],["╭────────────────────────────────────────────────╮",{"2":{"14":1,"46":1,"51":1,"54":2,"55":2}}],["╭───────────────────────────────────────────────╮",{"2":{"36":1,"56":1,"57":5}}],["╭──────────────────────────────────────────────╮",{"2":{"16":2,"35":1,"56":2}}],["╭───────────────────────────────────────────╮",{"2":{"14":1}}],["╭────────────────────────────────────╮",{"2":{"50":1}}],["╭────────────────────────────────╮",{"2":{"8":1,"29":1,"78":1}}],["╭──────────────────────────────╮",{"2":{"10":1,"12":1,"13":1,"16":2,"17":1,"24":1,"35":2,"46":1}}],["╭───────────────────────────╮",{"2":{"17":1,"28":1,"31":1}}],["╭──────────────────────────╮",{"2":{"17":1,"20":1,"21":1,"31":1}}],["╭─────────────────────────╮",{"2":{"9":1,"22":2,"31":1,"36":1,"78":1}}],["04453476627315919",{"2":{"81":1}}],["0465",{"2":{"48":1}}],["0e8",{"2":{"71":1}}],["023101933734291022",{"2":{"81":1}}],["02831455834460911",{"2":{"81":1}}],["02",{"2":{"50":1}}],["0f20",{"2":{"50":1,"51":2,"54":4,"55":6,"56":6,"57":10}}],["0f32",{"2":{"16":2}}],["0625",{"2":{"50":2,"87":1}}],["06755",{"2":{"48":1}}],["0658503",{"2":{"17":1}}],["08",{"2":{"46":1}}],["0806691",{"2":{"20":1}}],["000924951522542868",{"2":{"81":1}}],["00520612",{"2":{"78":1}}],["0057",{"2":{"48":1}}],["00722034",{"2":{"48":1}}],["00709111",{"2":{"48":1}}],["00684233",{"2":{"48":1}}],["00693713",{"2":{"48":1}}],["00990356",{"2":{"48":1}}],["00388",{"2":{"48":1}}],["00",{"2":{"46":4,"50":9,"51":8,"53":4,"54":8,"55":8,"56":12,"57":20,"59":4,"63":4,"87":5}}],["00465577",{"2":{"21":1}}],["09915529827483704",{"2":{"81":1}}],["09",{"2":{"46":1}}],["0ºe",{"2":{"34":1}}],["050857935248364274",{"2":{"81":1}}],["05846",{"2":{"48":1}}],["0537",{"2":{"43":1,"44":1}}],["05",{"2":{"31":3}}],["07495148408717336",{"2":{"81":1}}],["07",{"2":{"50":2,"87":1}}],["0759995",{"2":{"22":1}}],["0752454",{"2":{"22":1}}],["0792955",{"2":{"20":1}}],["034309078782668714",{"2":{"81":1}}],["036946732134505465",{"2":{"81":1}}],["035686570524083555",{"2":{"81":1}}],["03329805652756149",{"2":{"81":1}}],["03361",{"2":{"48":1}}],["033994",{"2":{"21":1}}],["03",{"2":{"21":1}}],["0388753",{"2":{"17":1}}],["0376093",{"2":{"17":1}}],["0322648",{"2":{"17":1}}],["0164863",{"2":{"78":1}}],["01t00",{"2":{"50":2,"87":1}}],["01t03",{"2":{"50":2,"87":1}}],["0178074",{"2":{"48":1}}],["0117519",{"2":{"48":1}}],["0115514",{"2":{"48":1}}],["0127077",{"2":{"48":1}}],["0123091",{"2":{"48":1}}],["0121037",{"2":{"48":1}}],["019016",{"2":{"48":1}}],["0195499",{"2":{"22":1}}],["018571",{"2":{"48":1}}],["0182373",{"2":{"48":1}}],["0180572",{"2":{"48":1}}],["0183003",{"2":{"48":1}}],["018",{"2":{"43":1,"44":1}}],["01",{"2":{"10":6,"12":3,"13":3,"14":3,"16":12,"17":9,"18":3,"24":9,"25":3,"31":22,"33":8,"34":11,"50":5,"51":4,"53":2,"54":4,"55":6,"56":6,"57":10,"59":2,"63":2,"80":2,"81":4,"87":5}}],["0",{"2":{"8":1,"9":1,"10":6,"11":2,"12":6,"13":6,"14":7,"16":303,"17":75,"20":36,"21":36,"22":45,"24":12,"25":6,"28":1,"29":9,"31":1,"34":4,"35":27,"36":11,"46":2,"47":40,"48":19,"50":7,"51":10,"53":6,"54":8,"55":6,"56":14,"57":20,"58":6,"59":6,"62":1,"63":6,"64":1,"71":2,"72":1,"78":80,"79":1,"80":2,"81":19,"82":1,"87":4,"89":2,"90":2,"91":2}}],["┤",{"2":{"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"16":10,"17":5,"20":2,"21":4,"22":3,"24":4,"27":2,"28":2,"29":2,"31":10,"35":6,"36":6,"43":4,"44":2,"46":6,"47":3,"48":6,"50":2,"51":2,"54":4,"55":5,"56":6,"57":10,"64":2,"78":4,"81":2}}],["┐",{"2":{"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"16":5,"17":4,"20":1,"21":2,"22":2,"24":2,"27":1,"28":1,"29":1,"31":5,"35":3,"36":3,"43":1,"46":2,"47":1,"50":1,"51":1,"54":2,"55":4,"56":3,"57":5,"64":1,"78":2,"81":1}}],["│",{"2":{"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"16":10,"17":8,"20":2,"21":4,"22":4,"24":4,"27":2,"28":2,"29":2,"31":10,"35":6,"36":6,"43":4,"44":2,"46":6,"47":4,"48":6,"50":2,"51":2,"54":4,"55":6,"56":6,"57":10,"64":2,"78":4,"81":2}}],["744666",{"2":{"78":1}}],["740896",{"2":{"78":1}}],["74",{"2":{"58":1}}],["76584",{"2":{"78":1}}],["76",{"2":{"58":1}}],["76884",{"2":{"21":1}}],["78",{"2":{"56":1,"58":1}}],["785487",{"2":{"20":1}}],["70521",{"2":{"78":1}}],["70",{"2":{"56":3,"58":1}}],["75727",{"2":{"78":1}}],["753357",{"2":{"78":1}}],["75",{"2":{"58":1}}],["7593",{"2":{"48":1}}],["75891",{"2":{"48":1}}],["717",{"2":{"57":5}}],["71",{"2":{"56":1,"58":1}}],["7158",{"2":{"43":1,"44":1}}],["7119",{"2":{"43":1,"44":1}}],["71429",{"2":{"17":2}}],["720753",{"2":{"78":1}}],["72",{"2":{"58":1}}],["722903",{"2":{"22":1}}],["726514",{"2":{"20":1}}],["726055",{"2":{"20":1}}],["77",{"2":{"58":1}}],["77687",{"2":{"48":1}}],["77587",{"2":{"48":1}}],["778578",{"2":{"21":1}}],["771082",{"2":{"17":1}}],["79",{"2":{"51":2,"53":1,"54":2,"55":2,"56":4,"57":5,"58":1,"59":1,"63":1}}],["79502",{"2":{"48":1}}],["795256",{"2":{"20":1}}],["790483",{"2":{"21":1}}],["730",{"2":{"82":1}}],["730896",{"2":{"17":1}}],["7341",{"2":{"48":1}}],["73",{"2":{"48":1,"58":1}}],["739191",{"2":{"21":1}}],["7",{"2":{"8":1,"16":10,"17":1,"21":1,"24":1,"28":1,"50":1,"87":1}}],["→",{"2":{"4":1,"5":1,"6":1,"9":1,"10":1,"12":1,"13":1,"14":1,"16":2,"17":6,"20":1,"21":3,"22":3,"24":3,"25":1,"27":3,"28":1,"29":1,"31":6,"33":2,"34":2,"35":3,"36":2,"39":2,"43":1,"50":2,"51":2,"53":1,"54":2,"55":1,"56":3,"57":5,"59":1,"63":2,"64":1,"78":2,"87":1}}],["↓",{"2":{"4":3,"5":3,"6":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"16":5,"17":6,"20":1,"21":3,"22":3,"24":3,"25":1,"27":3,"28":1,"29":1,"31":6,"33":2,"34":8,"35":3,"36":3,"38":1,"39":3,"43":3,"44":1,"46":4,"47":2,"48":3,"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":2,"64":1,"78":2,"81":2,"87":1}}],["45×170×24",{"2":{"57":5}}],["48",{"2":{"78":1}}],["48367",{"2":{"48":1}}],["480",{"2":{"36":1}}],["417004",{"2":{"78":1}}],["416222",{"2":{"78":1}}],["41634",{"2":{"48":1}}],["4198",{"2":{"48":1}}],["41241",{"2":{"48":1}}],["412653",{"2":{"22":1}}],["41049",{"2":{"48":1}}],["418527",{"2":{"20":1}}],["448462",{"2":{"78":1}}],["44",{"2":{"31":1,"35":3}}],["445246",{"2":{"22":1}}],["443763",{"2":{"17":1}}],["49909",{"2":{"48":1}}],["4947",{"2":{"48":1}}],["490098",{"2":{"21":1}}],["49635",{"2":{"20":1}}],["471202",{"2":{"21":1}}],["479832",{"2":{"17":1}}],["466392",{"2":{"78":1}}],["46623",{"2":{"20":1}}],["460593",{"2":{"78":1}}],["46506",{"2":{"48":1}}],["46",{"2":{"29":1,"78":1}}],["464692",{"2":{"22":1}}],["469495",{"2":{"21":1}}],["468086",{"2":{"21":1}}],["437726",{"2":{"78":1}}],["437697",{"2":{"17":1}}],["430697",{"2":{"78":1}}],["43254",{"2":{"48":1}}],["4325",{"2":{"43":1,"44":1}}],["432667",{"2":{"22":1}}],["436044",{"2":{"21":1}}],["4×30",{"2":{"17":1}}],["40",{"2":{"34":2}}],["404644",{"2":{"22":1}}],["405837",{"2":{"22":1}}],["40658",{"2":{"21":1}}],["400",{"2":{"20":1,"80":1,"82":1}}],["409798",{"2":{"17":1}}],["401882",{"2":{"17":1}}],["425406",{"2":{"22":1}}],["42857",{"2":{"17":2}}],["42",{"2":{"11":3}}],["4",{"2":{"4":4,"5":4,"16":4,"17":9,"22":1,"28":1,"29":1,"43":2,"44":1,"45":1,"46":2,"47":2,"48":4,"78":3,"80":1,"82":1}}],["3d",{"0":{"91":1}}],["3hr",{"2":{"50":2,"87":3}}],["342506",{"2":{"78":1}}],["34218",{"2":{"48":1}}],["34818",{"2":{"48":1}}],["34832",{"2":{"48":1}}],["34549",{"2":{"48":1}}],["345419",{"2":{"17":1}}],["345557",{"2":{"21":1}}],["32555",{"2":{"48":1}}],["3252",{"2":{"43":1,"44":1}}],["32149",{"2":{"48":1}}],["3×20",{"2":{"36":1}}],["384×192×251288",{"2":{"50":1}}],["3866",{"2":{"48":1}}],["38364",{"2":{"48":1}}],["3835",{"2":{"43":1,"44":1}}],["38",{"2":{"31":1,"56":3}}],["387209",{"2":{"22":1}}],["366",{"2":{"82":1}}],["365×1",{"2":{"81":1}}],["365",{"2":{"81":1,"82":4}}],["361453",{"2":{"78":1}}],["36142",{"2":{"48":1}}],["36126",{"2":{"48":1}}],["36836",{"2":{"48":1}}],["369",{"2":{"34":1}}],["36",{"2":{"31":1,"33":2,"34":1,"46":1}}],["3600",{"2":{"31":1,"33":2}}],["312",{"2":{"48":1}}],["31753",{"2":{"48":1}}],["3169",{"2":{"48":1}}],["3188",{"2":{"48":1}}],["318317",{"2":{"22":1}}],["31",{"2":{"31":2,"33":1,"34":1,"80":1,"81":2}}],["33565",{"2":{"48":1}}],["335462",{"2":{"17":1}}],["337278",{"2":{"21":1}}],["37",{"2":{"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1}}],["372",{"2":{"48":1}}],["37878",{"2":{"48":1}}],["379975",{"2":{"22":1}}],["373742",{"2":{"21":1}}],["370883",{"2":{"21":1}}],["370371",{"2":{"20":1}}],["371407",{"2":{"20":1}}],["35700351866494",{"2":{"50":4,"87":2}}],["35432",{"2":{"48":1}}],["35483",{"2":{"48":1}}],["359",{"2":{"34":1,"50":2,"51":2,"53":1,"54":2,"55":1,"58":2,"59":1,"63":1,"87":1}}],["353383",{"2":{"22":1}}],["35",{"2":{"10":1,"12":1,"13":1,"17":1,"24":1}}],["302653",{"2":{"78":1}}],["307643",{"2":{"78":1}}],["307f8f0e584a39a050c042849004e6a2bd674f99",{"2":{"52":1}}],["307866",{"2":{"21":1}}],["3069",{"2":{"48":1}}],["30018",{"2":{"48":1}}],["30142",{"2":{"48":1}}],["30113",{"2":{"48":1}}],["30872",{"2":{"20":1}}],["30×15×10",{"2":{"16":1}}],["30×10×15",{"2":{"10":1,"12":1,"13":1,"17":1,"24":1}}],["30",{"2":{"10":3,"12":1,"13":1,"14":2,"16":5,"17":5,"18":2,"21":10,"24":4,"25":2,"48":2,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"87":1}}],["398057",{"2":{"78":1}}],["392626",{"2":{"17":1}}],["390622",{"2":{"17":1}}],["39",{"2":{"10":1,"16":3,"29":1,"31":1,"33":1,"34":1,"35":2,"48":1,"53":1,"69":1,"71":2,"74":4,"81":3}}],["3",{"2":{"4":8,"5":8,"6":10,"10":1,"11":3,"12":3,"13":2,"16":4,"17":6,"21":2,"22":1,"24":3,"27":5,"28":1,"31":4,"35":4,"36":5,"43":2,"48":31,"50":1,"51":1,"54":2,"56":4,"57":5,"63":1,"71":1,"78":3,"80":2}}],["zoom",{"2":{"91":1}}],["zopen",{"2":{"50":1,"87":1}}],["zeros",{"2":{"64":3,"81":1}}],["z",{"2":{"4":2,"5":3,"6":2,"63":2}}],["zarr",{"0":{"50":1,"60":1,"86":1},"2":{"0":1,"2":2,"4":2,"5":2,"6":2,"16":5,"18":1,"22":1,"50":3,"60":5,"62":3,"63":4,"64":3,"71":2,"72":2,"87":1}}],["xticklabelalign",{"2":{"80":1,"82":1}}],["xticklabelrotation",{"2":{"80":1,"82":1}}],["xlabel=",{"2":{"80":1,"82":1}}],["xx",{"2":{"51":1,"53":1,"59":1,"63":1}}],["xarray",{"2":{"41":1,"42":1}}],["xin",{"2":{"17":3,"35":3}}],["x26",{"2":{"17":12,"34":12}}],["x3c",{"2":{"17":12,"34":4}}],["xout",{"2":{"16":2,"17":3}}],["x",{"2":{"4":2,"5":3,"6":2,"13":2,"21":4,"22":3,"35":4,"43":2,"44":1,"48":3,"66":1,"72":1,"78":5,"80":1,"81":6}}],["ndata",{"2":{"89":2,"90":1,"91":1}}],["ndays",{"2":{"81":4}}],["nlon",{"2":{"89":2,"90":1}}],["npy",{"2":{"80":2,"81":2}}],["ntuple",{"2":{"72":2}}],["ntr",{"2":{"72":1}}],["nthreads",{"2":{"71":2}}],["nin",{"2":{"72":2}}],["nvalid",{"2":{"71":1}}],["n",{"2":{"65":1,"71":3}}],["nbsp",{"2":{"62":1,"71":24,"72":24}}],["n256",{"2":{"48":1}}],["nan",{"2":{"42":1,"43":48,"44":48,"48":384}}],["name=cube",{"2":{"71":1}}],["namedtuple",{"2":{"71":1,"72":3}}],["named",{"2":{"53":1,"55":1,"56":1,"66":1,"71":2,"79":1}}],["names",{"0":{"27":1,"37":1,"39":1},"1":{"38":1,"39":1},"2":{"24":2,"45":1,"66":2,"71":2,"72":1}}],["namely",{"2":{"16":1}}],["name",{"0":{"38":1},"2":{"2":1,"27":1,"48":1,"50":3,"51":4,"54":8,"55":12,"56":12,"57":20,"69":1,"71":6,"72":5,"78":1}}],["nc",{"2":{"42":2,"51":2,"53":2,"59":2,"61":2}}],["number",{"2":{"41":1,"46":1,"71":2,"72":1,"81":1}}],["numbers",{"2":{"10":1,"78":1}}],["nout",{"2":{"72":2}}],["normal",{"2":{"71":1,"91":1}}],["nometadata",{"2":{"43":3,"44":2,"46":1,"47":1,"48":10}}],["november",{"2":{"51":1,"53":1,"59":1,"63":1}}],["nov",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["nonmissingtype",{"2":{"72":1}}],["non",{"2":{"18":1,"71":1,"72":1,"80":1}}],["now",{"2":{"16":3,"17":1,"29":1,"31":1,"36":1,"43":1,"44":1,"46":1,"48":1,"75":1}}],["no",{"2":{"14":1,"22":1,"30":1,"64":1,"71":1,"72":1}}],["nothing",{"2":{"48":3,"52":1,"62":1,"71":1,"72":1}}],["notation",{"2":{"31":1,"57":1}}],["note",{"2":{"9":1,"13":1,"16":4,"17":1,"34":1,"44":1,"71":1,"72":1}}],["not",{"0":{"34":1},"2":{"0":1,"1":1,"13":1,"30":1,"34":3,"42":1,"64":1,"71":2,"72":3}}],["neighbour",{"2":{"71":1}}],["neighboring",{"2":{"13":1}}],["needed",{"2":{"71":1}}],["need",{"2":{"71":1,"72":1,"74":1}}],["near",{"2":{"50":2,"57":1,"87":1}}],["next",{"2":{"35":1,"36":1,"45":1,"75":2}}],["netcdf",{"0":{"51":1,"61":1},"2":{"22":1,"40":1,"51":4,"53":2,"59":2,"61":3,"62":1,"67":3,"71":1}}],["necessary",{"2":{"16":1,"41":1,"42":1,"72":4}}],["new",{"0":{"9":1},"2":{"10":1,"12":1,"16":1,"24":1,"42":1,"45":1,"62":1,"63":1,"68":1,"71":5,"72":4,"74":6,"81":1}}],["bits",{"2":{"71":2}}],["big",{"2":{"66":1}}],["black",{"2":{"82":1}}],["blocks",{"2":{"71":1}}],["blue",{"2":{"67":1}}],["bonito",{"2":{"91":1}}],["boundaries",{"2":{"72":1}}],["bounds",{"2":{"71":1}}],["bool=true",{"2":{"72":1}}],["bool=false",{"2":{"71":1,"72":1}}],["bool",{"2":{"72":6}}],["boolean",{"2":{"71":3}}],["bold",{"2":{"48":1}}],["build",{"0":{"75":1},"2":{"75":1}}],["bug",{"2":{"73":1}}],["bundle",{"2":{"67":1}}],["but",{"0":{"34":1},"2":{"8":1,"16":2,"27":1,"34":2,"55":1,"56":1,"71":2}}],["bwr",{"2":{"48":1}}],["b`",{"2":{"31":1}}],["brightness",{"2":{"66":1,"67":1}}],["brings",{"2":{"72":1}}],["bring",{"2":{"28":1}}],["broad",{"2":{"84":1}}],["broadcasts",{"2":{"72":1}}],["broadcast",{"2":{"43":1,"48":1}}],["broadcasted",{"2":{"16":2,"71":1,"72":1}}],["brown",{"2":{"82":1}}],["browser",{"2":{"75":1}}],["broken",{"2":{"52":1}}],["branch",{"2":{"50":1,"87":1}}],["b",{"2":{"17":13,"39":2,"57":2}}],["backgroundcolor=",{"2":{"91":1}}],["back",{"2":{"71":1}}],["backendlist",{"2":{"71":1}}],["backend",{"2":{"62":2,"71":8}}],["backend=",{"2":{"2":1,"16":2,"63":1}}],["based",{"0":{"86":1},"2":{"72":1}}],["base",{"0":{"20":1},"2":{"4":4,"5":4,"6":2,"20":4,"24":3,"27":9,"38":1,"39":5,"64":2,"72":1,"78":2}}],["by=",{"2":{"36":2,"71":2}}],["bytes",{"2":{"8":1,"9":1,"14":1,"16":3,"17":1,"20":1,"22":1,"28":1,"31":1,"36":2,"46":1,"55":2,"64":1,"78":1}}],["by",{"0":{"4":1,"5":1},"2":{"2":1,"10":2,"14":1,"16":1,"17":1,"23":1,"24":1,"30":1,"31":6,"34":2,"36":1,"41":1,"45":1,"46":1,"47":1,"48":1,"50":1,"62":1,"66":3,"68":1,"69":1,"71":12,"72":6,"74":1,"75":1,"77":1,"81":1}}],["beware",{"2":{"83":1}}],["best",{"2":{"72":1,"85":1}}],["become",{"2":{"71":1}}],["because",{"2":{"1":1,"13":1,"14":1,"16":1}}],["before",{"2":{"71":1,"75":1}}],["belonging",{"2":{"67":1}}],["belongs",{"2":{"17":1}}],["been",{"2":{"34":1}}],["between",{"2":{"21":1,"22":1,"31":1,"33":1,"34":2,"57":1,"71":1}}],["begin",{"2":{"18":1}}],["be",{"2":{"0":5,"2":1,"3":1,"4":1,"13":1,"15":1,"16":2,"17":1,"19":1,"31":1,"34":1,"35":1,"36":2,"42":1,"50":2,"51":1,"52":1,"58":1,"62":1,"63":1,"66":1,"68":2,"71":22,"72":9,"74":1,"79":1,"83":1,"87":1}}],["676268",{"2":{"78":1}}],["6742",{"2":{"22":1}}],["685735",{"2":{"78":1}}],["680628",{"2":{"78":1}}],["681937",{"2":{"20":1}}],["63006",{"2":{"48":1}}],["636107",{"2":{"17":1}}],["644498",{"2":{"78":1}}],["64976",{"2":{"48":1}}],["642",{"2":{"42":1}}],["691289",{"2":{"78":1}}],["695412",{"2":{"78":1}}],["69",{"2":{"50":1}}],["69085",{"2":{"48":1}}],["697089",{"2":{"20":1}}],["617046",{"2":{"78":1}}],["6122",{"2":{"48":1}}],["61197",{"2":{"48":1}}],["619",{"2":{"43":1,"44":1}}],["610329",{"2":{"22":1}}],["65235",{"2":{"78":1}}],["654983",{"2":{"78":1}}],["654553",{"2":{"20":1}}],["65105",{"2":{"48":1}}],["657613",{"2":{"22":1}}],["600",{"2":{"80":1,"82":1,"88":1,"89":1,"90":1}}],["60265",{"2":{"50":1,"87":1}}],["60918",{"2":{"48":1}}],["609885",{"2":{"17":1}}],["60175",{"2":{"48":1}}],["607539",{"2":{"22":1}}],["668356",{"2":{"21":1}}],["6×6×25",{"2":{"21":2}}],["6×2",{"2":{"9":1}}],["6",{"2":{"2":6,"4":6,"5":6,"6":6,"8":4,"9":5,"16":8,"17":1,"28":1,"31":1,"34":6,"50":1,"87":1}}],["1e8",{"2":{"72":1}}],["192",{"2":{"89":1}}],["19277839017642331",{"2":{"81":1}}],["19241",{"2":{"48":1}}],["197427",{"2":{"78":1}}],["1983",{"2":{"46":1}}],["1980",{"2":{"46":1}}],["193496",{"2":{"22":1}}],["191475",{"2":{"20":1}}],["19",{"2":{"16":16,"56":3,"57":5}}],["18583",{"2":{"48":1}}],["18892",{"2":{"48":1}}],["18434",{"2":{"48":1}}],["180×170",{"2":{"55":1}}],["180×170×24",{"2":{"51":1,"54":2}}],["180",{"2":{"34":2,"57":5,"89":1}}],["180ºe",{"2":{"34":1}}],["18",{"2":{"16":18}}],["14858712445280844",{"2":{"81":1}}],["140938",{"2":{"78":1}}],["140123",{"2":{"78":1}}],["1437",{"2":{"48":1}}],["1495",{"2":{"22":1}}],["14286",{"2":{"17":1}}],["14",{"2":{"16":20,"22":1}}],["1388557751513135",{"2":{"81":1}}],["136",{"2":{"51":1,"53":1,"59":1,"63":1}}],["1363",{"2":{"43":1,"44":1}}],["13z",{"2":{"50":2,"87":1}}],["1372",{"2":{"43":1,"44":1}}],["13",{"2":{"16":20,"22":1,"51":1,"53":1,"59":1,"63":1}}],["17321929531017177",{"2":{"81":1}}],["173082",{"2":{"78":1}}],["174313",{"2":{"78":1}}],["17434",{"2":{"48":1}}],["170553",{"2":{"78":1}}],["170",{"2":{"58":1}}],["179",{"2":{"57":5}}],["17647",{"2":{"48":1}}],["1762",{"2":{"43":1,"44":1}}],["17852",{"2":{"48":1}}],["17863",{"2":{"48":1}}],["178756",{"2":{"17":1}}],["17t00",{"2":{"46":1}}],["17",{"2":{"14":1,"16":22,"36":1,"56":1}}],["16t00",{"2":{"51":4,"53":2,"54":4,"55":4,"56":6,"57":10,"59":2,"63":2}}],["16t12",{"2":{"46":1}}],["1644",{"2":{"48":1}}],["16824",{"2":{"48":1}}],["16581",{"2":{"48":1}}],["16631",{"2":{"48":1}}],["16713",{"2":{"48":1}}],["16258",{"2":{"48":1}}],["16",{"2":{"10":1,"12":1,"13":1,"16":20,"17":1,"24":1,"51":2,"53":1,"54":2,"55":4,"56":3,"57":5,"59":1,"63":1}}],["154468",{"2":{"78":1}}],["159",{"2":{"56":1}}],["15644",{"2":{"48":1}}],["15532",{"2":{"48":1}}],["158513",{"2":{"21":1}}],["152703",{"2":{"21":1}}],["153314",{"2":{"20":1}}],["15×10×30",{"2":{"16":1}}],["15×10",{"2":{"16":2}}],["15",{"2":{"10":1,"16":25,"17":6,"18":1,"22":4,"24":1,"25":1,"29":2,"36":1,"78":1}}],["128",{"2":{"91":1}}],["127126",{"2":{"78":1}}],["1242",{"2":{"48":1}}],["12575",{"2":{"48":1}}],["1200",{"2":{"88":1,"89":1,"90":1}}],["120",{"2":{"16":1}}],["12",{"2":{"8":4,"16":20,"22":1,"31":10,"33":3,"34":4,"51":2,"53":1,"54":2,"55":2,"56":3,"57":5,"59":1,"63":1,"80":1,"81":2}}],["1=5",{"2":{"2":1}}],["11471619358216052",{"2":{"81":1}}],["114815",{"2":{"47":6}}],["11722933412557059",{"2":{"81":1}}],["119",{"2":{"55":1}}],["1181",{"2":{"48":1}}],["113553",{"2":{"47":3}}],["112319",{"2":{"47":12}}],["112142",{"2":{"21":1}}],["110929",{"2":{"17":1}}],["111806",{"2":{"17":1}}],["11",{"2":{"2":6,"4":6,"5":6,"6":6,"8":1,"16":18,"22":1,"43":4,"44":4,"48":4,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1}}],["1",{"2":{"2":12,"4":19,"5":20,"6":22,"8":5,"9":3,"10":8,"11":3,"12":7,"13":5,"14":6,"16":24,"17":34,"18":3,"20":1,"21":7,"22":6,"24":15,"25":4,"27":3,"28":8,"29":8,"31":23,"33":10,"34":8,"35":15,"36":14,"38":1,"39":3,"43":4,"44":2,"46":6,"47":11,"48":55,"50":4,"51":8,"53":4,"54":8,"55":13,"56":18,"57":15,"58":2,"59":4,"63":11,"64":1,"72":1,"78":11,"80":2,"81":5,"82":5,"87":3,"89":4,"90":2,"91":5}}],["1058503173631838",{"2":{"81":1}}],["1095",{"2":{"81":1}}],["10989",{"2":{"47":6}}],["10mb",{"2":{"71":2}}],["1083",{"2":{"48":1}}],["108696",{"2":{"47":6}}],["103704",{"2":{"47":3}}],["100",{"2":{"34":7}}],["1000",{"2":{"0":1,"89":1,"90":1}}],["10×20",{"2":{"64":1}}],["10×20×5",{"2":{"24":1}}],["10×170×24",{"2":{"56":1}}],["10×10×24",{"2":{"56":2}}],["10×10×8",{"2":{"31":1}}],["10×10×12",{"2":{"31":1}}],["10×10×36",{"2":{"31":1}}],["10×10×5",{"2":{"27":1}}],["10×10",{"2":{"28":1,"31":1}}],["10×15×20",{"2":{"35":1}}],["10×15",{"2":{"14":1,"17":2,"36":1,"78":1}}],["106047",{"2":{"21":1}}],["10x15",{"2":{"17":1}}],["10",{"2":{"2":14,"4":16,"5":18,"6":17,"10":3,"12":1,"13":1,"14":1,"16":21,"17":15,"18":3,"20":2,"22":4,"24":6,"25":2,"27":8,"28":5,"29":4,"31":16,"33":10,"35":3,"36":2,"38":2,"39":4,"50":1,"51":1,"54":2,"55":3,"56":6,"57":5,"63":2,"64":2,"77":1,"78":3}}],["garbage",{"2":{"72":1}}],["gc",{"2":{"72":2}}],["gt",{"2":{"71":1,"72":3,"75":1}}],["gdalworkshop",{"2":{"52":1}}],["gdal",{"0":{"52":1},"2":{"52":1}}],["gb",{"2":{"50":1}}],["gn",{"2":{"50":1,"87":2}}],["gs",{"2":{"50":1,"87":2}}],["ggplot2",{"2":{"48":1}}],["github",{"2":{"42":2,"52":1,"73":1}}],["gives",{"2":{"17":1}}],["given",{"2":{"2":1,"17":2,"62":1,"66":1,"68":1,"71":6,"72":3,"78":1}}],["go",{"2":{"75":2}}],["going",{"2":{"72":1}}],["good",{"2":{"48":1}}],["goal",{"2":{"41":1}}],["goes",{"2":{"16":2,"71":1,"72":1}}],["globalproperties=dict",{"2":{"72":1}}],["global",{"2":{"71":1,"72":1}}],["glmakie",{"2":{"36":2,"87":2}}],["glue",{"2":{"8":1}}],["gradient",{"2":{"88":1,"89":1,"90":1,"91":1}}],["gradually",{"2":{"64":1}}],["grey25",{"2":{"91":1}}],["grey15",{"2":{"36":1,"48":1}}],["green",{"2":{"67":1}}],["grouped",{"2":{"71":1}}],["groups",{"2":{"47":1}}],["groupby",{"0":{"43":1,"46":1},"1":{"44":1,"45":1,"47":1,"48":1},"2":{"40":1,"42":1,"43":6,"44":1,"45":1,"46":3,"47":3,"48":3,"71":1,"81":1}}],["group",{"0":{"40":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1},"2":{"43":1,"45":1,"46":2,"67":1,"71":3}}],["grouping",{"2":{"36":2,"45":2}}],["grid=false",{"2":{"48":1}}],["grid",{"2":{"18":1,"66":1,"71":1}}],["gridchunks",{"2":{"2":3,"4":1,"5":1,"6":1,"71":1,"72":1}}],["guide",{"2":{"10":2,"12":1,"13":1,"18":1,"24":3,"25":1}}],["gen",{"2":{"16":6}}],["general",{"0":{"84":1},"2":{"71":1}}],["generated",{"2":{"51":1,"53":1,"59":1,"63":1,"72":1}}],["generate",{"2":{"16":2,"31":1,"33":1,"34":1,"71":1,"75":1}}],["generic",{"2":{"16":2,"24":1}}],["getting",{"0":{"76":1},"1":{"77":1,"78":1,"79":1}}],["getarrayinfo",{"2":{"72":1}}],["getaxis",{"2":{"28":1,"36":2,"71":1}}],["getloopchunks",{"2":{"72":1}}],["getloopcachesize",{"2":{"72":1}}],["getouttype",{"2":{"72":1}}],["getoutaxis",{"2":{"72":1}}],["getfrontperm",{"2":{"72":1}}],["gets",{"2":{"71":1,"72":1}}],["get",{"0":{"58":1},"2":{"10":1,"27":1,"42":1,"46":1,"54":1,"56":1,"58":1,"72":3,"78":1,"81":1,"87":1}}],["geoaxis",{"2":{"89":1,"90":1}}],["geometrybasics",{"2":{"87":1}}],["geomakie",{"2":{"87":1,"89":2,"90":1}}],["geojson",{"0":{"52":1}}],["geotiff",{"0":{"52":1}}],["geo",{"2":{"1":1}}],["g",{"2":{"7":1,"10":1,"11":1,"13":1,"16":4,"18":1,"24":1,"43":26,"44":2,"45":2,"46":2,"47":1,"48":18,"58":1,"66":1,"69":1,"71":5,"87":2}}],["2π",{"2":{"80":1}}],["2×3",{"2":{"78":1}}],["2×2×3",{"2":{"4":1,"5":1,"6":1}}],["2×2",{"2":{"2":3}}],["2x2l31",{"2":{"51":1,"53":1,"59":1,"63":1}}],["292358",{"2":{"78":1}}],["29473",{"2":{"48":1}}],["29816",{"2":{"48":1}}],["29564",{"2":{"48":1}}],["29",{"2":{"21":2}}],["2784376308132314",{"2":{"81":1}}],["27538",{"2":{"78":1}}],["275×205×9",{"2":{"43":4}}],["2747",{"2":{"48":1}}],["273",{"2":{"46":1}}],["276",{"2":{"46":2}}],["270",{"2":{"46":1}}],["27",{"2":{"21":2,"43":1,"44":1,"48":1}}],["28422753251364",{"2":{"50":4,"87":2}}],["28008",{"2":{"48":1}}],["2894",{"2":{"48":1}}],["288",{"2":{"46":1}}],["2818",{"2":{"43":1,"44":1}}],["28",{"2":{"21":2,"31":1,"43":3,"44":3,"48":3}}],["286567",{"2":{"20":1}}],["2867",{"2":{"17":1}}],["28571",{"2":{"17":2}}],["2857142857142857",{"2":{"10":1,"12":1,"13":1,"14":1,"17":3,"24":2,"25":1,"29":1,"35":3,"36":1,"78":1}}],["266098",{"2":{"78":1}}],["26802",{"2":{"78":1}}],["26274",{"2":{"48":1}}],["263308",{"2":{"21":1}}],["26",{"2":{"16":2,"21":2,"50":2,"87":1}}],["25153",{"2":{"48":1}}],["255901",{"2":{"20":1}}],["25",{"2":{"16":4,"21":10,"31":1,"80":1}}],["24375",{"2":{"48":1}}],["2434",{"2":{"48":1}}],["24",{"2":{"16":6,"36":1,"55":2}}],["240",{"2":{"14":1,"16":1,"22":1}}],["233097",{"2":{"78":1}}],["231967",{"2":{"78":1}}],["238368",{"2":{"22":1}}],["238835",{"2":{"21":1}}],["234382",{"2":{"22":1}}],["23",{"2":{"16":8,"35":3,"48":1,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1}}],["228113",{"2":{"78":1}}],["222088",{"2":{"78":1}}],["22211",{"2":{"48":1}}],["226869",{"2":{"17":1}}],["225987",{"2":{"17":1}}],["22",{"2":{"16":10}}],["21t06",{"2":{"50":2,"87":1}}],["2101",{"2":{"50":2,"87":1}}],["21699",{"2":{"48":1}}],["216082",{"2":{"21":1}}],["21209",{"2":{"48":1}}],["21762",{"2":{"21":1}}],["21",{"2":{"16":12,"43":8,"44":8,"48":8}}],["2141174000417737",{"2":{"11":1}}],["2=10",{"2":{"2":1}}],["2",{"2":{"2":3,"4":8,"5":9,"6":10,"8":1,"9":1,"11":3,"12":2,"13":1,"14":1,"17":9,"18":1,"20":2,"22":3,"24":1,"27":3,"28":3,"31":1,"36":6,"39":4,"43":1,"44":1,"48":40,"50":3,"51":3,"53":1,"54":4,"55":2,"56":2,"57":5,"58":2,"59":1,"63":2,"64":2,"71":2,"78":5,"87":3,"89":2,"91":1}}],["209998",{"2":{"78":1}}],["209609",{"2":{"78":1}}],["2019",{"2":{"50":2,"87":1}}],["2015",{"2":{"50":2,"51":1,"53":1,"59":1,"63":1,"87":2}}],["20×10×15",{"2":{"35":2}}],["20×10×15×2",{"2":{"29":1,"78":1}}],["20ºn",{"2":{"34":1}}],["208669",{"2":{"21":1}}],["2023",{"2":{"80":1,"81":2}}],["2021",{"2":{"31":9,"80":1,"81":2,"82":1}}],["2020",{"2":{"31":5,"33":3,"34":4,"68":1}}],["2024",{"2":{"21":4}}],["2022",{"2":{"10":4,"12":2,"13":2,"14":2,"16":8,"17":6,"18":2,"24":6,"25":2,"31":5,"33":3,"34":4,"82":1}}],["2003",{"2":{"51":1,"53":1,"59":1,"63":1}}],["2004",{"2":{"51":1,"53":1,"59":1,"63":1}}],["2005",{"2":{"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1}}],["2002",{"2":{"51":3,"53":2,"54":2,"55":2,"56":3,"57":5,"59":2,"63":1}}],["2001",{"2":{"51":3,"53":2,"54":2,"55":3,"56":3,"57":5,"59":2,"63":1}}],["2000",{"2":{"21":4}}],["200921",{"2":{"20":1}}],["20",{"2":{"2":7,"4":10,"5":10,"6":10,"16":14,"24":2,"29":4,"34":2,"35":3,"36":1,"48":1,"63":2,"64":2,"78":3}}],["526898",{"2":{"78":1}}],["52419",{"2":{"48":1}}],["55",{"2":{"81":1}}],["552837",{"2":{"78":1}}],["558322",{"2":{"78":1}}],["559458",{"2":{"20":1}}],["5173",{"2":{"75":1}}],["519502",{"2":{"20":1}}],["5e8",{"2":{"62":1,"71":1}}],["535731",{"2":{"78":1}}],["535162",{"2":{"17":1}}],["53",{"2":{"55":1}}],["599861",{"2":{"78":1}}],["596946",{"2":{"78":1}}],["59212",{"2":{"48":1}}],["59085",{"2":{"48":1}}],["595256",{"2":{"20":1}}],["560824",{"2":{"78":1}}],["568985",{"2":{"78":1}}],["56632",{"2":{"48":1}}],["56509",{"2":{"20":1}}],["506692",{"2":{"22":1}}],["50089",{"2":{"48":1}}],["500",{"2":{"0":1,"48":1,"91":2}}],["500mb",{"2":{"0":2}}],["5×6×36",{"2":{"31":1}}],["5×6",{"2":{"22":2}}],["5×10",{"2":{"20":2}}],["5743",{"2":{"48":1}}],["57873",{"2":{"48":1}}],["578499",{"2":{"20":1}}],["57695",{"2":{"48":1}}],["576982",{"2":{"17":1}}],["571501",{"2":{"17":1}}],["57143",{"2":{"17":2}}],["5843",{"2":{"43":1,"44":1}}],["583472",{"2":{"22":1}}],["58",{"2":{"16":2}}],["5",{"2":{"2":7,"4":16,"5":18,"6":7,"10":2,"12":3,"13":2,"14":1,"16":6,"17":10,"18":1,"20":2,"22":4,"24":5,"25":1,"27":4,"28":1,"29":2,"31":3,"33":4,"35":3,"36":2,"39":4,"48":5,"51":4,"53":2,"54":4,"55":3,"56":10,"57":10,"58":19,"59":2,"63":4,"78":2,"79":1,"82":2,"91":2}}],["rotate",{"2":{"91":1}}],["row",{"2":{"69":1,"71":1}}],["rowgap",{"2":{"48":1}}],["right",{"2":{"80":1,"82":1}}],["r",{"2":{"64":1}}],["r1i1p1f1",{"2":{"50":2,"87":3}}],["running",{"2":{"75":1}}],["run",{"2":{"18":1,"75":3}}],["runs",{"2":{"13":1,"72":1}}],["rafaqz",{"2":{"42":1}}],["raw",{"2":{"42":1,"52":1}}],["rasm",{"2":{"42":2}}],["ras",{"2":{"21":3}}],["rasters",{"2":{"21":2}}],["raster",{"0":{"21":1},"2":{"17":11,"21":5}}],["ranges",{"0":{"56":1},"2":{"28":1,"53":1}}],["range",{"2":{"10":2,"16":2,"17":2,"18":2,"24":2,"29":3,"31":1,"72":1,"78":3,"80":1}}],["randn",{"2":{"80":1}}],["random",{"2":{"34":2,"78":1}}],["rand",{"2":{"2":1,"4":3,"5":3,"6":3,"8":2,"9":2,"10":1,"17":1,"18":1,"20":1,"21":1,"22":1,"24":2,"25":1,"27":1,"29":2,"34":3,"36":1,"38":1,"39":3,"63":1,"78":2}}],["relational",{"2":{"66":1}}],["related",{"2":{"42":1}}],["recommend",{"2":{"79":1}}],["recommended",{"2":{"57":1}}],["rechunking",{"2":{"72":1}}],["recalculate",{"2":{"72":1}}],["recal",{"2":{"72":1}}],["recently",{"2":{"0":1}}],["rewrote",{"2":{"50":1,"51":1,"53":1,"59":1,"63":1,"87":1}}],["realization",{"2":{"51":1,"53":1,"59":1,"63":1}}],["realm",{"2":{"50":1,"87":1}}],["readcubedata",{"2":{"34":2,"71":1}}],["read",{"0":{"49":1,"50":1,"51":1,"52":1},"1":{"50":1,"51":1,"52":1},"2":{"1":1,"34":1,"42":1,"49":1,"52":1,"56":1,"71":1}}],["red",{"2":{"48":1,"67":1}}],["reduce",{"2":{"10":1,"14":1}}],["reverse",{"2":{"48":1}}],["reverseordered",{"2":{"9":1,"78":1}}],["resets",{"2":{"71":1,"72":1}}],["respectively",{"2":{"67":1}}],["reshape",{"2":{"31":1,"33":2}}],["result",{"2":{"28":1,"36":1}}],["resulting",{"2":{"8":1,"9":1,"14":1,"71":1,"72":1}}],["results",{"0":{"82":1},"2":{"2":1,"5":1,"48":2,"71":1,"72":1}}],["reference",{"0":{"70":1},"1":{"71":1,"72":1}}],["references",{"2":{"51":1,"53":1,"59":1,"63":1}}],["ref",{"2":{"29":1,"71":1,"72":1}}],["rebuild",{"2":{"27":1,"42":1}}],["repeat",{"2":{"80":1}}],["repl",{"2":{"77":1}}],["replace",{"2":{"18":1,"42":1,"91":1}}],["repository",{"2":{"73":1,"83":1}}],["reports",{"2":{"73":1}}],["reproduces",{"2":{"41":1}}],["represented",{"2":{"71":1,"85":1}}],["represents",{"2":{"67":1}}],["representing",{"2":{"17":2,"72":1}}],["representation",{"2":{"1":1,"71":2,"72":3}}],["re",{"2":{"17":1}}],["returned",{"2":{"71":1}}],["returns",{"2":{"71":5,"72":2}}],["return",{"2":{"17":4,"43":1,"71":1,"72":1,"81":1}}],["registration",{"2":{"72":2}}],["registered",{"2":{"72":1}}],["regions",{"2":{"17":8}}],["region",{"2":{"17":12}}],["regular",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"16":9,"17":8,"20":2,"21":6,"22":4,"24":9,"25":3,"27":9,"28":2,"29":3,"31":14,"33":6,"34":4,"35":9,"36":3,"38":1,"39":5,"43":2,"44":2,"48":6,"50":2,"51":4,"53":2,"54":4,"55":2,"56":3,"57":10,"58":2,"59":2,"63":5,"64":2,"78":5,"81":1,"87":1}}],["regularchunks",{"2":{"2":6,"4":3,"5":3,"6":3}}],["requests",{"2":{"73":1}}],["requested",{"2":{"13":1}}],["requirements",{"2":{"51":1,"53":1,"59":1,"63":1}}],["required",{"2":{"31":1}}],["requires",{"2":{"16":1}}],["removes",{"2":{"72":1}}],["remove",{"2":{"44":1}}],["removed",{"2":{"15":1,"72":1}}],["remote",{"2":{"0":1}}],["hold",{"2":{"71":1}}],["holds",{"2":{"71":1,"72":1}}],["however",{"2":{"19":1,"31":1}}],["how",{"0":{"29":1,"30":1,"35":1,"36":1,"37":1},"1":{"31":1,"32":1,"33":1,"34":1,"38":1,"39":1},"2":{"6":1,"7":1,"10":1,"19":1,"23":1,"26":1,"36":1,"49":1,"71":1,"83":1,"85":1}}],["http",{"2":{"75":1}}],["https",{"2":{"42":2,"51":1,"52":1,"53":1,"59":1,"67":1}}],["html",{"2":{"67":1}}],["hr",{"2":{"50":1,"87":2}}],["history",{"2":{"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1,"87":1}}],["hidedecorations",{"2":{"48":1}}],["highclip",{"2":{"48":4}}],["hm",{"2":{"48":8}}],["happens",{"2":{"72":1}}],["had",{"2":{"71":1,"72":1}}],["hamman",{"2":{"41":1,"48":1}}],["handled",{"2":{"72":1}}],["handle",{"2":{"66":1,"72":1}}],["handling",{"2":{"9":1,"71":1}}],["handy",{"2":{"36":1}}],["has",{"2":{"8":1,"9":1,"17":1,"21":1,"22":1,"34":1,"41":1,"44":1,"72":1}}],["half",{"2":{"8":5}}],["have",{"2":{"6":1,"9":1,"17":1,"24":1,"32":1,"34":2,"68":1,"71":3}}],["having",{"2":{"1":1,"17":1}}],["help",{"2":{"71":1,"72":2}}],["height",{"2":{"50":2,"87":1}}],["heatmap",{"0":{"88":1},"2":{"36":1,"48":3,"88":1}}],["hereby",{"2":{"17":1}}],["here",{"2":{"8":1,"9":1,"13":1,"16":2,"17":1,"30":1,"36":1,"56":1,"64":1,"74":2}}],["hence",{"2":{"1":1}}],["yeesian",{"2":{"52":1}}],["years",{"2":{"31":1,"80":1,"81":1}}],["year",{"2":{"8":4,"82":1}}],["yyyy",{"2":{"51":2,"53":2,"59":2,"63":2}}],["ylabel=",{"2":{"80":1,"82":1}}],["ylabel",{"2":{"48":3}}],["yasxa",{"2":{"34":6}}],["yaxcolumn",{"2":{"72":1}}],["yaxconvert",{"2":{"22":2}}],["yaxdefaults",{"2":{"72":1}}],["yaxarraybase",{"2":{"22":1,"71":1,"72":1}}],["yaxarray",{"0":{"11":1,"24":1,"30":1,"31":1,"54":1,"66":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"2":1,"4":4,"5":4,"6":4,"7":1,"8":3,"9":3,"10":2,"12":1,"13":1,"14":2,"16":8,"17":3,"18":1,"20":4,"21":3,"22":5,"24":5,"25":2,"27":3,"28":1,"29":3,"30":1,"31":15,"33":4,"34":6,"35":3,"36":4,"38":2,"39":4,"42":2,"43":7,"44":1,"46":9,"47":1,"48":3,"50":2,"51":2,"53":2,"54":2,"55":3,"56":3,"57":5,"59":1,"60":1,"61":1,"63":2,"64":3,"66":1,"68":1,"71":10,"72":3,"78":5,"81":2,"85":1,"87":1}}],["yaxarrays",{"0":{"0":1,"1":1,"2":1,"7":1,"10":1,"16":1,"19":1,"23":1,"37":1,"40":1,"49":1,"53":1,"59":1,"73":1,"84":1,"85":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"8":1,"9":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"20":1,"21":1,"22":1,"24":1,"25":1,"38":1,"39":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"58":1,"60":1,"61":1,"62":1,"63":1,"64":1,"74":1,"75":1},"2":{"0":3,"2":1,"4":1,"5":1,"6":1,"8":1,"9":1,"10":2,"16":4,"17":1,"18":2,"19":2,"20":1,"24":1,"27":1,"29":1,"30":1,"31":1,"32":1,"33":2,"34":4,"38":1,"39":1,"40":1,"49":1,"50":1,"51":1,"52":2,"53":1,"59":1,"62":1,"64":1,"65":1,"67":1,"71":27,"72":28,"73":1,"75":1,"77":3,"78":3,"79":2,"81":1,"83":1,"84":1,"87":1}}],["yax",{"2":{"0":1}}],["y",{"2":{"4":2,"5":3,"6":2,"21":4,"22":3,"31":4,"35":4,"43":2,"44":1,"48":3,"66":1,"78":5}}],["you",{"2":{"1":1,"18":1,"30":1,"34":3,"71":1,"72":2,"74":1,"75":2,"77":2,"79":1,"83":3,"85":2}}],["yourself",{"2":{"75":1}}],["your",{"2":{"1":2,"34":2,"62":2,"71":1,"74":4,"75":4}}],["circshift",{"2":{"89":1}}],["ct1",{"2":{"87":4,"88":1}}],["cycle",{"0":{"80":1,"82":1},"1":{"81":1,"82":1},"2":{"81":4}}],["cycle=12",{"2":{"43":2,"44":1,"46":2,"47":2,"48":3}}],["cdata",{"2":{"72":1}}],["center",{"2":{"71":1,"80":1,"82":1}}],["certain",{"2":{"53":2,"72":1}}],["cell",{"2":{"50":2,"51":1,"54":2,"55":3,"56":3,"57":5,"71":1}}],["cf",{"2":{"50":2,"51":2,"53":2,"59":2,"63":2,"87":2}}],["cftime",{"2":{"43":4,"46":7,"47":5,"48":5,"51":6,"53":3,"54":6,"55":7,"56":9,"57":15,"59":3,"63":3}}],["cmpcachmisses",{"2":{"72":1}}],["cm4",{"2":{"51":4,"53":4,"59":4,"63":4}}],["cmip",{"2":{"50":1,"87":1}}],["cmip6",{"2":{"50":3,"87":6}}],["cmor",{"2":{"50":2,"51":3,"53":2,"54":2,"55":3,"56":3,"57":5,"59":2,"63":2,"87":1}}],["c54",{"2":{"48":1}}],["cb",{"2":{"48":1}}],["cbar",{"2":{"36":1}}],["cgrad",{"2":{"36":1}}],["cl",{"2":{"89":1,"90":1}}],["cl=lines",{"2":{"89":1,"90":1}}],["clean",{"2":{"72":1}}],["cleanme",{"2":{"72":4}}],["cleaner",{"2":{"71":2}}],["closedinterval",{"2":{"57":1}}],["closed",{"0":{"57":1},"2":{"57":3}}],["cloud",{"2":{"11":1,"50":1}}],["climate",{"2":{"51":1,"53":1,"59":1,"63":1}}],["classes=classes",{"2":{"36":1}}],["classes",{"2":{"36":8}}],["classification",{"2":{"36":2}}],["class",{"2":{"36":3}}],["clustermanagers",{"2":{"18":2}}],["cluster",{"2":{"18":1}}],["cpus",{"2":{"18":1}}],["cpu",{"2":{"18":1}}],["c",{"2":{"17":11,"27":3,"28":3,"36":2,"39":2,"67":1,"71":3,"72":3,"81":4,"87":2}}],["custom",{"2":{"24":1,"71":1}}],["current",{"2":{"17":2,"67":1,"71":1,"82":1}}],["currently",{"2":{"16":1,"42":1,"83":1}}],["cubeaxis",{"2":{"72":1}}],["cubeaxes",{"2":{"71":1}}],["cubedir",{"2":{"72":1}}],["cube2",{"2":{"71":1}}],["cube1",{"2":{"71":1}}],["cubelist",{"2":{"71":1}}],["cubefittable",{"2":{"36":2,"71":1}}],["cubetable",{"0":{"36":1},"2":{"36":3,"71":3}}],["cubes",{"0":{"29":1},"2":{"9":2,"29":2,"34":1,"35":2,"36":1,"54":1,"68":1,"71":18,"72":9}}],["cube",{"0":{"27":1,"28":1,"30":1,"68":1,"81":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"2":1,"4":1,"5":1,"6":1,"16":11,"28":1,"30":2,"34":1,"35":1,"36":2,"42":1,"68":3,"71":34,"72":19,"85":1}}],["chose",{"2":{"67":1}}],["child",{"2":{"50":1,"87":1}}],["check",{"2":{"16":1,"64":1,"79":1}}],["changed",{"2":{"79":1,"83":1}}],["change",{"2":{"10":1,"71":1,"72":1}}],["chunkoffset",{"2":{"72":1}}],["chunksize`",{"2":{"72":1}}],["chunksizes",{"2":{"71":2}}],["chunksize",{"2":{"71":1,"72":3}}],["chunks",{"0":{"4":1},"2":{"2":5,"4":1,"5":1,"6":2,"71":4,"72":11}}],["chunked",{"2":{"2":5}}],["chunking",{"0":{"2":1,"3":1,"5":1,"6":1},"1":{"4":1,"5":1,"6":1},"2":{"1":1,"5":1,"71":4,"72":3}}],["chunk",{"0":{"1":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"1":1,"2":1,"4":1,"5":1,"71":4,"72":4}}],["criteria",{"2":{"36":1}}],["creating",{"0":{"17":1},"2":{"10":1,"31":1,"74":1}}],["createdataset",{"2":{"72":2}}],["created",{"2":{"72":2}}],["creates",{"2":{"36":1,"71":2,"72":1}}],["create",{"0":{"23":1,"24":1,"25":1},"1":{"24":1,"25":1},"2":{"10":1,"16":1,"17":2,"23":1,"24":1,"29":1,"31":2,"36":1,"42":1,"46":1,"59":1,"62":1,"64":3,"71":1,"72":1,"78":1,"80":1}}],["crucial",{"2":{"1":1}}],["coastlines",{"2":{"89":3,"90":1}}],["cosd",{"2":{"71":1}}],["country",{"2":{"71":4}}],["country=cube2",{"2":{"71":1}}],["copies",{"2":{"72":1}}],["copied",{"2":{"64":1}}],["copybuf",{"2":{"72":2}}],["copydata",{"2":{"72":1}}],["copy",{"2":{"27":1,"71":1,"75":1}}],["coordinates",{"2":{"50":1}}],["college",{"2":{"83":1}}],["collected",{"2":{"72":1}}],["collectfromhandle",{"2":{"72":1}}],["collection",{"2":{"26":1,"66":1}}],["collect",{"2":{"20":1,"28":3,"81":1}}],["colonperm",{"2":{"72":1}}],["color=",{"2":{"82":3}}],["color",{"2":{"80":1,"89":1,"90":1,"91":1}}],["colormap=",{"2":{"48":1}}],["colormap=makie",{"2":{"36":1}}],["colormap",{"2":{"48":3,"88":1,"89":1,"90":1,"91":1}}],["colorrange=",{"2":{"48":1}}],["colorrange",{"2":{"48":3}}],["colorbar",{"2":{"36":1,"48":2}}],["column",{"2":{"69":1,"72":1}}],["colgap",{"2":{"48":1}}],["configuration",{"2":{"72":2}}],["concatenating",{"2":{"71":1}}],["concatenates",{"2":{"71":1}}],["concatenate",{"0":{"29":1},"2":{"29":2}}],["concatenatecubes",{"0":{"9":1},"2":{"9":2,"29":2,"71":2}}],["concrete",{"2":{"71":2}}],["constant",{"2":{"72":1}}],["construct",{"2":{"71":2}}],["constructor",{"2":{"71":1}}],["constructs",{"2":{"71":1}}],["consolidated=true",{"2":{"50":1,"87":1}}],["consistent",{"2":{"50":1,"87":1}}],["consisting",{"2":{"8":1}}],["considering",{"2":{"41":1}}],["considered",{"2":{"36":1}}],["contributing",{"2":{"74":1}}],["contribute",{"0":{"73":1,"74":1},"1":{"74":1,"75":2}}],["contrast",{"2":{"71":1}}],["content",{"2":{"71":1}}],["contact",{"2":{"51":1,"53":1,"59":1,"63":1}}],["contains",{"2":{"57":1,"71":1,"72":1}}],["contain",{"2":{"50":1,"51":1,"72":1}}],["containing",{"2":{"8":1,"36":1,"67":1,"68":1,"71":1}}],["continue",{"2":{"43":1}}],["convinient",{"2":{"26":1}}],["conventions",{"2":{"51":1,"53":1,"59":1,"63":1}}],["convenient",{"2":{"18":1}}],["conversion",{"2":{"19":1,"21":1,"22":1}}],["conversions",{"2":{"19":1}}],["converted",{"2":{"68":1}}],["convert",{"0":{"19":1,"20":1,"21":1,"22":1},"1":{"20":1,"21":1,"22":1},"2":{"19":1,"20":2,"22":2,"71":1,"72":1}}],["corresponding",{"2":{"7":1,"17":2,"68":1,"71":1}}],["combining",{"0":{"86":1}}],["combined",{"2":{"9":2,"68":2}}],["combine",{"0":{"7":1},"1":{"8":1,"9":1},"2":{"7":1,"8":1,"9":1,"85":1}}],["comment",{"2":{"50":1}}],["common",{"2":{"34":5,"71":1}}],["com",{"2":{"42":2,"52":1}}],["compiler",{"2":{"79":1}}],["compares",{"2":{"72":1}}],["compatible",{"2":{"52":1}}],["compuation",{"2":{"71":1}}],["computing",{"2":{"36":1}}],["computations",{"2":{"13":1,"35":1}}],["computation",{"0":{"18":1},"2":{"13":1,"66":1,"71":3,"72":3}}],["computed",{"2":{"72":1}}],["compute",{"0":{"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"81":1}}],["comply",{"2":{"51":1,"53":1,"59":1,"63":1}}],["complexity",{"2":{"35":1}}],["complex",{"2":{"10":2,"78":1}}],["comes",{"2":{"1":1}}],["code",{"2":{"6":1,"13":1,"18":2,"26":1}}],["captialisation",{"2":{"72":1}}],["cameracontrols",{"2":{"91":1}}],["came",{"2":{"68":1}}],["cairomakie",{"2":{"48":1,"80":2}}],["caxes",{"2":{"27":2,"71":2}}],["car",{"2":{"17":1}}],["cartesianindex",{"2":{"17":11}}],["caluclate",{"2":{"71":1}}],["calculations",{"2":{"48":1,"72":1}}],["calculating",{"2":{"14":1,"71":1}}],["calculates",{"2":{"71":1}}],["calculated",{"2":{"36":2,"43":1}}],["calculate",{"2":{"14":1,"17":1,"36":2,"40":1,"41":2,"43":1,"48":1,"72":2,"81":1}}],["calling",{"2":{"48":1}}],["called",{"2":{"16":1,"66":3,"72":1}}],["call",{"2":{"1":1,"18":1}}],["case",{"2":{"13":1,"34":1,"45":1,"50":1}}],["cases",{"2":{"0":1,"57":1,"83":1}}],["cataxis",{"2":{"71":2}}],["categoricalaxis",{"2":{"71":1}}],["categorical",{"2":{"9":1,"17":1,"29":1,"36":1,"43":2,"44":1,"45":1,"46":2,"47":2,"48":3,"71":1,"72":1,"78":1}}],["cat",{"0":{"8":1},"2":{"8":2}}],["cache=1gb```",{"2":{"71":1}}],["cache=1e9",{"2":{"16":2}}],["cache=",{"2":{"71":1}}],["cache=5",{"2":{"71":1}}],["cache=yaxdefaults",{"2":{"71":1}}],["caches",{"2":{"0":1}}],["cachesize",{"2":{"0":2,"72":1}}],["cache",{"2":{"0":6,"62":1,"71":4,"72":7}}],["caching",{"0":{"0":1}}],["can",{"2":{"0":5,"2":1,"3":1,"13":2,"14":1,"16":3,"17":1,"18":3,"24":2,"29":1,"30":1,"32":1,"34":1,"35":1,"36":2,"44":1,"48":1,"50":2,"51":1,"52":1,"58":1,"63":1,"66":3,"67":2,"68":1,"71":11,"72":6,"74":1,"77":2,"83":2}}],["msc",{"2":{"81":3,"82":2}}],["mscarray",{"2":{"81":2}}],["md",{"2":{"74":2}}],["mdash",{"2":{"62":1,"71":24,"72":24}}],["mm",{"2":{"51":2,"53":2,"59":2,"63":2}}],["mpi",{"2":{"50":1,"87":2}}],["m",{"2":{"20":2}}],["miss",{"2":{"72":1}}],["missing",{"2":{"14":2,"16":6,"17":2,"35":1,"36":2,"51":2,"54":4,"55":6,"56":6,"57":10,"64":3,"71":2,"72":2,"91":1}}],["minimized",{"2":{"72":1}}],["minutes",{"2":{"51":1,"54":2,"55":3,"56":3,"57":5}}],["might",{"2":{"19":1,"83":1}}],["mymean",{"2":{"18":4}}],["my",{"2":{"16":2}}],["manager",{"2":{"77":1}}],["many",{"2":{"66":1,"72":1}}],["mahecha",{"2":{"68":1}}],["mar",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["master",{"2":{"42":1}}],["mask",{"2":{"36":2}}],["makie",{"2":{"48":1,"91":1}}],["making",{"2":{"11":1,"53":1}}],["make",{"2":{"33":1,"34":2,"64":1,"71":1,"72":2,"75":1,"91":1}}],["main",{"2":{"30":1,"72":1}}],["machine",{"2":{"18":1,"66":1}}],["matching",{"2":{"78":1}}],["match",{"2":{"72":2}}],["matched",{"2":{"71":1}}],["mat",{"2":{"17":4}}],["matrix",{"2":{"16":2,"17":1,"20":1,"44":1,"48":2,"66":1,"81":1}}],["maximal",{"2":{"72":1}}],["maximum",{"2":{"35":1,"71":1,"72":1}}],["maxbuf",{"2":{"72":1}}],["max",{"2":{"16":2,"62":1,"71":7,"72":2}}],["maxsize",{"2":{"0":2}}],["may",{"2":{"10":1,"15":1,"43":4,"44":2,"45":1,"46":4,"47":4,"48":6,"50":1,"51":1,"79":1}}],["maps",{"0":{"87":1},"1":{"88":1}}],["mapslice",{"2":{"18":1}}],["mapslices",{"0":{"14":1},"2":{"10":1,"13":1,"14":1,"18":1,"35":1,"81":1}}],["mapped",{"2":{"71":1}}],["mapping",{"2":{"71":1,"72":3}}],["mapcube",{"0":{"15":1},"1":{"16":1,"17":1},"2":{"10":1,"13":1,"15":1,"16":4,"17":2,"18":3,"71":5,"72":2}}],["map",{"0":{"13":1,"35":1},"2":{"10":1,"13":2,"17":3,"18":3,"35":4,"36":1,"43":2,"47":1,"48":1,"71":2,"78":1,"81":2}}],["moll",{"0":{"90":1}}],["mowingwindow",{"2":{"71":1}}],["movingwindow",{"2":{"71":4}}],["module",{"2":{"71":2}}],["model",{"2":{"51":1,"53":1,"59":1,"63":1,"67":2}}],["modification",{"2":{"11":1,"18":1}}],["modify",{"0":{"11":1}}],["monthday",{"2":{"81":4}}],["monthly",{"0":{"41":1}}],["month",{"2":{"31":7,"33":3,"34":4,"41":1,"43":4,"44":1,"45":1,"46":5,"47":2,"48":3,"71":1,"81":2}}],["moment",{"2":{"22":1}}],["more",{"2":{"9":1,"10":1,"30":1,"35":1,"36":1,"56":1,"57":1,"62":1,"68":1,"71":3,"72":1,"78":1}}],["most",{"2":{"1":1,"15":1,"19":1}}],["mesh",{"2":{"91":2}}],["merely",{"2":{"64":1}}],["measured",{"2":{"67":1,"68":1}}],["measure",{"2":{"66":1}}],["measures",{"2":{"50":1}}],["means",{"0":{"41":1},"2":{"14":1,"71":1}}],["mean",{"0":{"80":1,"82":1},"1":{"81":1,"82":1},"2":{"10":1,"14":3,"18":4,"36":4,"43":10,"44":2,"45":1,"48":2,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"71":1,"81":5}}],["meter",{"2":{"50":1}}],["method",{"2":{"16":2,"71":17,"72":18}}],["methods",{"2":{"7":1,"18":1,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["metadata",{"2":{"8":1,"9":1,"10":1,"12":1,"13":1,"14":2,"16":5,"17":3,"19":1,"20":1,"21":2,"22":3,"24":2,"27":1,"28":1,"29":1,"31":5,"35":3,"36":3,"43":2,"44":1,"46":3,"47":2,"48":3,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"64":2,"71":1,"78":3,"81":1}}],["members",{"2":{"72":1}}],["member",{"2":{"6":1}}],["memory",{"2":{"1":1,"17":1,"19":3,"34":4,"42":1,"64":1,"66":1,"71":2,"72":1}}],["multiplying",{"2":{"35":1}}],["multiply",{"2":{"10":1,"35":1}}],["multiple",{"0":{"39":1,"86":1},"2":{"7":1,"18":1,"50":1,"51":1,"66":1,"71":1}}],["must",{"2":{"0":1,"68":1,"71":1,"72":1}}],["mb",{"2":{"0":1,"51":1,"54":2}}],["pkg",{"2":{"77":2}}],["pkg>",{"2":{"75":1}}],["purple",{"2":{"80":1}}],["purpose",{"2":{"26":1,"35":1}}],["pull",{"2":{"73":1}}],["public",{"0":{"71":1}}],["published",{"2":{"48":1}}],["plt",{"2":{"88":1}}],["place",{"2":{"72":1}}],["plots",{"2":{"91":1}}],["plot",{"0":{"82":1,"88":1,"91":1},"2":{"48":2}}],["plotting",{"0":{"87":1},"1":{"88":1},"2":{"0":1}}],["plus",{"2":{"42":1,"71":1}}],["pydata",{"2":{"42":1}}],["p",{"2":{"34":10,"51":1,"53":1,"59":1,"63":1}}],["picture",{"2":{"66":1,"67":1}}],["pieces",{"2":{"26":1}}],["pixel",{"0":{"80":1},"1":{"81":1,"82":1},"2":{"18":2}}],["post=getpostfunction",{"2":{"71":1}}],["positions",{"2":{"72":2}}],["position",{"2":{"66":1}}],["positional",{"2":{"55":1,"56":1}}],["possible",{"2":{"18":2,"19":1,"29":1,"64":1,"71":3,"72":1}}],["pos",{"2":{"17":2}}],["point3f",{"2":{"91":1}}],["point",{"2":{"17":3,"50":1,"78":1}}],["points",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":4,"16":9,"17":16,"18":1,"20":2,"21":6,"22":4,"24":9,"25":3,"27":9,"28":2,"29":3,"31":14,"33":6,"34":21,"35":9,"36":5,"38":1,"39":5,"43":3,"44":2,"46":2,"47":1,"48":7,"50":6,"51":6,"53":3,"54":6,"55":4,"56":9,"57":16,"58":2,"59":3,"63":6,"64":2,"66":2,"67":1,"78":5,"81":1,"87":3}}],["page",{"2":{"91":1}}],["paste",{"2":{"75":1}}],["pass",{"2":{"71":1}}],["passing",{"2":{"71":3}}],["passed",{"2":{"71":4}}],["pair",{"2":{"72":1}}],["partitioned",{"2":{"72":1}}],["participate",{"2":{"71":1}}],["particular",{"2":{"69":1}}],["parts",{"2":{"71":1}}],["parent",{"2":{"50":1,"87":1}}],["parallelized",{"2":{"72":1}}],["parallelisation",{"2":{"71":1}}],["parallel",{"2":{"18":1,"66":1}}],["package",{"2":{"18":1,"56":1,"58":1,"70":1,"77":1}}],["packages",{"2":{"16":1,"19":1}}],["paths",{"2":{"72":2}}],["path=",{"2":{"16":2,"50":1,"60":1,"61":1,"62":1,"63":1,"72":1}}],["path=f",{"2":{"4":1,"5":1,"6":1}}],["path",{"2":{"0":1,"42":2,"50":3,"51":2,"52":2,"53":2,"59":2,"62":3,"71":4,"75":1}}],["pr",{"2":{"75":1}}],["projection",{"0":{"89":1,"90":1},"1":{"90":1,"91":1}}],["props",{"2":{"78":2}}],["properly",{"2":{"41":1}}],["properties=dict",{"2":{"72":1}}],["properties",{"2":{"10":2,"18":2,"24":3,"25":3,"42":1,"48":1,"50":1,"51":1,"53":1,"59":1,"63":1,"71":5,"72":1,"87":1}}],["probably",{"2":{"72":1}}],["provide",{"2":{"71":1}}],["provides",{"2":{"66":1,"84":1}}],["provided",{"2":{"30":1,"71":1}}],["process",{"2":{"66":1,"72":2}}],["processed",{"2":{"13":1}}],["progressmeter",{"2":{"71":1}}],["progress",{"2":{"42":1,"83":1,"85":1}}],["product",{"2":{"17":1}}],["pressing",{"2":{"77":1}}],["pre",{"2":{"71":2}}],["previous",{"2":{"48":1,"62":1,"71":1}}],["previously",{"2":{"36":1}}],["prepared",{"2":{"51":1,"53":1,"59":1,"63":1}}],["prep",{"2":{"9":2}}],["precipitation",{"2":{"9":2,"67":1,"68":1,"78":2}}],["prior",{"2":{"1":1}}],["permute",{"2":{"72":1}}],["permuteloopaxes",{"2":{"72":1}}],["permutation",{"2":{"72":1}}],["persistend",{"2":{"72":1}}],["persistency",{"2":{"72":1}}],["persistent",{"2":{"71":1,"72":2}}],["persist",{"2":{"62":1,"71":1,"72":1}}],["perform",{"2":{"72":1}}],["performed",{"2":{"13":2}}],["performing",{"2":{"10":1}}],["per",{"2":{"7":1,"14":1,"43":1,"46":1,"47":1}}],["=interval",{"2":{"57":2}}],["==",{"2":{"12":1,"81":1}}],["=>nan",{"2":{"91":1}}],["=>",{"2":{"10":2,"12":1,"13":1,"16":2,"17":5,"18":1,"24":3,"25":3,"38":1,"39":1,"42":1,"43":5,"44":1,"46":3,"47":2,"48":3,"50":20,"51":20,"53":10,"54":20,"55":30,"56":30,"57":50,"59":10,"63":10,"78":6,"87":10}}],["=>2",{"2":{"4":1}}],["=>10",{"2":{"4":1}}],["=>5",{"2":{"4":1,"5":1}}],["=",{"2":{"0":5,"2":4,"4":9,"5":15,"6":9,"8":5,"9":5,"10":4,"11":1,"12":1,"13":1,"16":14,"17":16,"18":5,"20":3,"21":8,"22":4,"24":5,"25":4,"27":1,"29":6,"31":7,"33":6,"34":17,"36":7,"38":1,"39":3,"42":8,"43":16,"44":1,"45":1,"46":4,"47":1,"48":22,"50":2,"51":2,"52":2,"53":2,"54":2,"55":6,"56":6,"57":3,"59":2,"62":8,"63":2,"64":2,"71":11,"72":7,"78":5,"80":10,"81":11,"82":5,"87":8,"88":5,"89":7,"90":5,"91":6}}],["dc",{"2":{"72":2}}],["dkrz",{"2":{"50":1,"87":2}}],["drivers",{"2":{"71":1}}],["driver",{"2":{"62":2,"71":6}}],["driver=",{"2":{"4":1,"5":1,"6":1,"60":2,"61":2,"62":3,"63":1,"64":1,"71":3}}],["drop",{"2":{"48":1}}],["dropdims",{"0":{"44":1},"2":{"43":2,"44":2,"48":1}}],["dufresne",{"2":{"51":1,"53":1,"59":1,"63":1}}],["due",{"2":{"45":1}}],["dummy",{"2":{"29":1,"31":1,"80":1,"81":1}}],["during",{"2":{"17":1,"18":1,"19":1}}],["dd",{"2":{"27":1,"81":1}}],["d",{"2":{"17":5,"48":3,"81":1}}],["dash",{"2":{"82":1}}],["danger",{"2":{"62":1}}],["daysinmonth",{"2":{"43":1,"46":1}}],["days",{"2":{"41":1,"43":2,"45":1,"46":2,"47":2}}],["dayofyear",{"2":{"16":1}}],["day",{"2":{"10":2,"12":1,"13":1,"14":1,"16":4,"17":3,"18":1,"24":3,"25":1,"80":1,"81":4,"82":1}}],["datconfig",{"2":{"72":2}}],["datset",{"2":{"71":1}}],["dat",{"2":{"71":8,"72":16}}],["datetime360day",{"2":{"51":6,"53":3,"54":6,"55":7,"56":9,"57":15,"59":3,"63":3}}],["datetime",{"2":{"50":2,"87":1}}],["datetimenoleap",{"2":{"43":4,"46":7,"47":5,"48":5}}],["date",{"2":{"10":5,"12":3,"13":3,"14":3,"16":12,"17":11,"18":3,"24":8,"25":3,"31":24,"33":8,"34":11,"66":1,"80":2,"81":5,"87":1}}],["datesid",{"2":{"81":2}}],["dates",{"2":{"10":2,"12":1,"13":1,"14":1,"16":5,"17":3,"18":1,"24":3,"25":1,"31":8,"33":4,"34":5,"40":1,"68":1,"80":1,"81":2,"87":1}}],["data=cube1",{"2":{"71":1}}],["databases",{"2":{"66":1}}],["dataframe",{"2":{"36":1,"71":1}}],["dataframes",{"2":{"36":1}}],["datacubes",{"2":{"71":1}}],["datacube",{"0":{"86":1},"2":{"36":2,"64":1,"71":1}}],["datatypes",{"2":{"30":1}}],["data1",{"2":{"29":2}}],["data3",{"2":{"25":1}}],["data2",{"2":{"24":2,"29":2}}],["datasetaxis",{"2":{"71":2,"72":1}}],["datasetaxis=",{"2":{"71":1,"72":1}}],["dataset",{"0":{"25":1,"30":1,"32":1,"33":1,"34":1,"37":1,"62":1,"63":1,"67":1},"1":{"31":1,"32":1,"33":2,"34":2,"38":1,"39":1},"2":{"0":3,"3":1,"4":4,"5":2,"6":3,"9":1,"10":1,"19":1,"25":2,"32":1,"33":3,"34":5,"38":2,"39":2,"50":3,"51":3,"52":2,"53":3,"54":1,"59":3,"60":1,"61":1,"62":3,"63":4,"67":3,"68":2,"71":18,"72":9,"87":2}}],["datasets",{"0":{"3":1,"23":1,"40":1,"49":1,"53":1,"59":1},"1":{"4":1,"5":1,"6":1,"24":1,"25":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"58":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"0":2,"19":1,"23":1,"34":1,"49":1,"62":1,"71":8,"72":4,"85":1}}],["data",{"0":{"28":1,"42":1,"68":1},"2":{"0":3,"1":2,"7":1,"8":1,"10":2,"11":1,"16":4,"17":2,"18":2,"20":1,"21":1,"28":1,"31":1,"33":1,"34":2,"36":2,"42":8,"50":2,"51":4,"53":3,"54":2,"55":3,"56":3,"57":5,"59":3,"62":2,"63":3,"64":3,"65":1,"66":3,"67":2,"68":3,"71":20,"72":12,"78":4,"79":1,"80":2,"81":1,"85":4,"87":5,"89":1}}],["dev",{"2":{"75":1}}],["dependencies",{"2":{"75":1}}],["detect",{"2":{"71":1,"72":1}}],["determined",{"2":{"72":1}}],["determines",{"2":{"71":1}}],["determine",{"2":{"1":1,"71":1}}],["defaultfillval",{"2":{"72":1}}],["default",{"2":{"71":1,"72":4}}],["defaults",{"2":{"71":7}}],["definition",{"2":{"68":1}}],["defining",{"2":{"18":1}}],["defines",{"2":{"71":1}}],["defined",{"2":{"21":1,"22":1,"36":1,"48":1,"58":1,"66":1,"69":1,"78":1}}],["define",{"0":{"81":1},"2":{"16":2,"31":1,"36":1,"48":1,"71":2,"80":1}}],["denoting",{"2":{"71":1}}],["dense",{"2":{"66":1}}],["denvil",{"2":{"51":2,"53":2,"59":2,"63":2}}],["deletes",{"2":{"62":1,"71":1}}],["delete",{"2":{"62":2}}],["degc",{"2":{"51":1,"54":2,"55":3,"56":3,"57":5}}],["dec",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["dest",{"2":{"90":1}}],["desc",{"2":{"71":3,"72":3}}],["descriptor",{"2":{"72":4}}],["descriptors",{"2":{"71":2}}],["descriptions",{"2":{"71":1}}],["description",{"2":{"30":1,"71":4,"72":11}}],["described",{"2":{"85":1}}],["describe",{"2":{"71":2}}],["describes",{"2":{"7":1,"10":1,"19":1,"23":1,"49":1,"57":1,"65":1,"70":1,"72":1}}],["describing",{"2":{"71":1}}],["designed",{"2":{"19":2,"66":1}}],["desired",{"2":{"16":1,"72":4}}],["demand",{"2":{"13":1}}],["directory",{"2":{"50":1,"60":2,"61":2}}],["directories",{"2":{"49":1,"72":1}}],["directly",{"2":{"16":1,"22":1,"23":1,"24":1}}],["diverging",{"2":{"48":1}}],["divided",{"2":{"35":1}}],["differing",{"2":{"71":1}}],["difference",{"2":{"48":1}}],["differences",{"2":{"43":1,"48":1,"72":1}}],["different",{"2":{"9":2,"16":1,"18":1,"27":1,"41":1,"67":1,"71":3,"72":2,"83":1}}],["diff",{"2":{"43":2,"48":3}}],["dictionary",{"2":{"67":1,"71":3}}],["dict",{"2":{"4":1,"5":1,"8":1,"9":1,"10":2,"12":1,"13":1,"14":2,"16":5,"17":4,"18":1,"20":1,"21":2,"22":3,"24":4,"25":2,"27":1,"28":1,"29":1,"31":5,"35":3,"36":3,"43":3,"44":2,"46":4,"47":3,"48":3,"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1,"64":1,"71":3,"78":3,"81":1,"87":1}}],["dime",{"2":{"50":1}}],["dimensional",{"2":{"65":1,"66":2,"71":1}}],["dimensionaldata",{"2":{"17":1,"22":2,"27":1,"31":1,"33":1,"34":1,"40":1,"42":1,"43":16,"44":10,"46":6,"47":6,"48":39,"56":1,"57":2,"58":3,"66":1,"69":1,"78":1,"79":3,"81":1,"87":1}}],["dimensions",{"0":{"33":1,"34":1},"2":{"9":1,"10":1,"13":1,"15":1,"16":2,"17":2,"18":1,"24":2,"29":1,"32":1,"34":3,"35":2,"42":1,"43":16,"44":10,"46":6,"47":6,"48":39,"53":1,"58":2,"66":3,"67":1,"71":8,"72":3,"78":3,"79":1}}],["dimension",{"0":{"8":1,"9":1,"58":1,"69":1},"2":{"2":1,"8":2,"9":1,"10":1,"14":2,"16":3,"17":3,"31":1,"34":1,"44":1,"45":1,"48":1,"56":1,"58":1,"66":1,"68":1,"69":1,"71":3,"72":3,"78":1}}],["dimgroupbyarray",{"2":{"43":1,"46":1}}],["dimarray",{"0":{"22":1},"2":{"17":3,"22":6,"43":1,"44":1,"46":1,"47":2,"48":3,"66":1}}],["dims=2",{"2":{"81":1}}],["dims=",{"2":{"14":2,"18":1,"35":1,"43":5,"44":1,"46":1,"48":1}}],["dims",{"2":{"8":3,"9":1,"10":1,"12":1,"13":1,"14":2,"16":5,"17":4,"20":1,"21":3,"22":2,"24":2,"27":3,"28":1,"29":1,"31":5,"35":3,"36":3,"42":1,"43":6,"44":1,"46":5,"47":2,"48":5,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"64":1,"78":2,"81":1}}],["dim",{"2":{"2":2,"4":7,"5":8,"6":2,"8":2,"9":3,"10":3,"16":3,"17":4,"18":3,"20":2,"22":2,"24":7,"27":9,"28":3,"29":4,"31":3,"33":3,"34":2,"38":1,"39":5,"43":2,"44":2,"48":6,"63":3,"64":2,"78":4,"81":1}}],["disregard",{"2":{"72":1}}],["dispatch",{"2":{"72":1}}],["discribe",{"2":{"71":2}}],["distribute",{"2":{"18":1}}],["distributed",{"0":{"18":1},"2":{"0":1,"18":2}}],["diskarray",{"2":{"71":1}}],["diskarrays",{"2":{"2":9,"4":4,"5":4,"6":4,"71":2,"72":1}}],["disk",{"2":{"1":1,"16":1,"22":1,"64":2,"66":1,"71":1,"72":2}}],["dodgerblue",{"2":{"82":1}}],["dot",{"2":{"82":1}}],["documenter",{"2":{"91":1}}],["documentation",{"0":{"74":1},"1":{"75":1}}],["docstring",{"2":{"71":1}}],["docs",{"0":{"75":1},"2":{"67":1,"74":2,"75":6,"79":1}}],["doc",{"2":{"62":1}}],["download",{"0":{"42":1},"2":{"42":1,"51":2,"52":2,"53":2,"59":2}}],["downloads",{"2":{"40":1,"42":1,"51":1,"52":1,"53":1,"59":1}}],["done",{"2":{"35":1,"48":1,"74":2}}],["doing",{"2":{"18":1,"27":1,"28":1,"75":1}}],["does",{"2":{"18":1,"64":1,"71":1,"72":1}}],["do",{"0":{"29":1,"30":1,"35":1,"36":1,"37":1},"1":{"31":1,"32":1,"33":1,"34":1,"38":1,"39":1},"2":{"1":1,"13":1,"16":1,"17":3,"18":1,"26":2,"35":1,"41":1,"48":1,"72":1,"75":1,"77":1}}],["dsw",{"2":{"43":2,"48":2}}],["dsfinal",{"2":{"29":1,"35":2,"36":2}}],["ds2",{"2":{"29":3,"35":1,"63":1}}],["ds1",{"2":{"29":3,"35":3,"36":1}}],["dschunked",{"2":{"4":3,"5":3,"6":3}}],["ds",{"2":{"0":3,"4":2,"5":2,"6":2,"25":1,"33":2,"34":12,"38":1,"39":1,"42":5,"43":10,"46":1,"48":3,"50":1,"51":1,"52":1,"53":1,"54":2,"59":1,"60":3,"61":3,"62":3,"63":2,"71":3,"72":1,"91":2}}],["wglmakie",{"2":{"91":2}}],["would",{"2":{"71":2}}],["world",{"2":{"52":2}}],["workdir",{"2":{"72":1}}],["worker",{"2":{"71":1}}],["workers",{"2":{"71":1}}],["work",{"2":{"19":2,"42":1,"65":1,"71":1,"83":2,"85":1}}],["workload",{"2":{"18":1}}],["working",{"2":{"16":1}}],["works",{"2":{"6":1,"28":1,"33":1,"34":1,"64":1}}],["workflows",{"2":{"1":1}}],["written",{"2":{"71":1,"72":1}}],["writefac",{"2":{"72":1}}],["writefac=4",{"2":{"62":1,"71":1}}],["writes",{"2":{"71":1}}],["write",{"0":{"59":1,"60":1,"61":1},"1":{"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"64":1,"71":2}}],["wrapping",{"2":{"45":1,"58":2}}],["wrapped",{"2":{"16":1}}],["wrap",{"2":{"0":1,"71":1}}],["www",{"2":{"51":1,"53":1,"59":1}}],["w",{"2":{"48":2}}],["was",{"2":{"17":1,"18":1,"72":1}}],["way",{"2":{"15":1,"19":1,"27":1}}],["warning",{"2":{"11":1,"19":1,"27":1,"34":1,"42":1,"62":1,"71":1}}],["wanted",{"2":{"72":1}}],["wants",{"2":{"64":1}}],["want",{"2":{"0":1,"1":1,"68":1,"72":1,"75":1,"85":1}}],["wintri",{"0":{"89":1},"1":{"90":1,"91":1}}],["windowloopinds",{"2":{"72":1}}],["window",{"2":{"71":1,"72":1}}],["without",{"2":{"72":1}}],["within",{"2":{"56":1}}],["with",{"2":{"8":1,"10":1,"12":1,"13":1,"16":7,"17":4,"18":2,"19":1,"24":3,"27":1,"34":3,"35":2,"36":3,"43":3,"44":1,"46":2,"47":2,"48":5,"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"62":1,"63":1,"64":1,"65":1,"67":1,"71":11,"72":1,"74":1,"78":4,"79":3,"83":1,"85":1,"87":1,"89":1}}],["will",{"2":{"0":1,"1":1,"4":1,"5":1,"13":1,"16":3,"17":1,"30":1,"34":1,"35":2,"36":2,"40":1,"45":2,"62":3,"71":12,"72":3,"85":1}}],["white",{"2":{"89":1,"90":1}}],["while",{"2":{"64":1}}],["which",{"2":{"9":1,"16":1,"17":2,"34":2,"48":1,"54":1,"57":1,"58":1,"68":3,"71":5,"72":4,"85":1}}],["whose",{"0":{"33":1,"34":1}}],["whole",{"2":{"8":3}}],["whether",{"2":{"72":2}}],["when",{"2":{"1":1,"6":1,"13":1,"68":1,"71":2,"72":1}}],["whereas",{"2":{"66":1}}],["where",{"2":{"0":1,"18":1,"34":4,"41":1,"57":1,"71":1,"72":4}}],["wether",{"2":{"71":1}}],["weight=",{"2":{"71":1}}],["weight=nothing",{"2":{"71":1}}],["weight",{"0":{"46":1},"1":{"47":1,"48":1},"2":{"45":1,"47":1,"48":1}}],["weights",{"0":{"47":1},"2":{"43":3,"47":2,"48":1}}],["weightedmean",{"2":{"71":1}}],["weighted",{"0":{"48":1},"2":{"36":1,"41":1,"43":8,"48":8,"71":3}}],["well",{"2":{"36":1,"64":1,"71":1}}],["welcome",{"2":{"6":1,"73":1}}],["were",{"2":{"13":2,"57":1,"72":1,"80":1}}],["we",{"2":{"0":1,"8":2,"9":1,"13":2,"14":1,"16":5,"17":5,"18":2,"24":2,"29":1,"30":1,"31":1,"32":1,"34":2,"35":2,"36":5,"43":1,"44":1,"45":2,"48":1,"50":1,"56":1,"64":1,"68":1,"79":2,"80":1,"87":1}}],["oob",{"2":{"71":1}}],["o1",{"2":{"51":2,"53":2,"59":2,"63":1}}],["ocean",{"2":{"51":1,"53":1,"59":1,"63":1}}],["oct",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["occuring",{"2":{"4":1}}],["o",{"2":{"42":4,"48":4,"71":5}}],["ouput",{"2":{"75":1}}],["our",{"2":{"35":1,"36":1,"81":1}}],["outcube",{"2":{"72":1}}],["outcubes",{"2":{"72":1}}],["outcs",{"2":{"72":1}}],["outsize",{"2":{"72":1}}],["outar",{"2":{"72":2}}],["out",{"2":{"42":1,"71":2,"72":1}}],["outtype",{"2":{"16":2,"71":1,"72":2}}],["outdims=outdims",{"2":{"17":1,"18":1}}],["outdims",{"2":{"16":4,"71":6}}],["outputcube",{"2":{"72":3}}],["outputs",{"2":{"16":1}}],["output",{"2":{"6":1,"16":3,"17":1,"18":3,"51":1,"53":1,"59":1,"63":1,"71":11,"72":9,"91":1}}],["optimal",{"2":{"72":1}}],["optifunc",{"2":{"72":1}}],["optionally",{"2":{"71":1}}],["option",{"2":{"31":1,"33":1}}],["options",{"2":{"28":1}}],["operation",{"2":{"72":1}}],["operations",{"0":{"16":1},"2":{"10":1,"43":1,"71":2,"72":3}}],["operates",{"2":{"71":1}}],["openinterval",{"2":{"57":1}}],["open",{"0":{"57":1},"2":{"0":2,"50":2,"51":2,"52":1,"53":2,"57":2,"59":1,"63":1,"71":3,"87":1}}],["obj",{"2":{"36":2,"80":1,"82":1}}],["objects",{"2":{"71":2}}],["object",{"2":{"11":1,"50":1,"71":5,"72":3}}],["obtain",{"0":{"28":1},"2":{"45":1}}],["otherwise",{"2":{"71":1}}],["other",{"0":{"83":1},"1":{"84":1,"85":1,"86":1},"2":{"19":1,"83":1,"85":1}}],["omit",{"2":{"18":1}}],["overview",{"0":{"84":1},"2":{"83":1,"84":1}}],["overwrite",{"0":{"62":1},"2":{"62":3,"71":4,"72":2}}],["overwrite=true",{"2":{"16":2,"62":2}}],["over",{"0":{"16":1,"85":1},"2":{"10":1,"15":1,"18":1,"48":1,"71":8,"72":1,"85":1}}],["ormax",{"2":{"71":1}}],["orca2",{"2":{"51":1,"53":1,"59":1,"63":1}}],["orangered",{"2":{"36":1}}],["ordered",{"2":{"66":1,"67":1}}],["ordereddict",{"2":{"17":1}}],["orderedcollections",{"2":{"17":1}}],["order",{"2":{"16":1,"41":1}}],["original",{"2":{"51":2,"54":4,"55":6,"56":6,"57":10}}],["originates",{"2":{"9":1}}],["origin",{"2":{"10":2,"12":1,"13":1,"18":1,"24":3,"25":1,"78":2}}],["or",{"0":{"30":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"1":2,"6":1,"10":1,"13":2,"15":1,"22":1,"32":1,"50":1,"53":2,"62":1,"66":3,"69":2,"71":21,"72":7,"77":1,"78":2}}],["once",{"2":{"48":1,"68":1,"72":1,"74":1}}],["onlinestat",{"2":{"71":2}}],["onlinestats",{"2":{"36":2}}],["only",{"2":{"6":1,"13":1,"14":1,"16":1,"17":1,"19":1,"24":2,"35":1,"64":1,"71":2}}],["on",{"2":{"1":2,"6":1,"7":1,"10":2,"13":2,"16":1,"18":2,"26":1,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1,"64":1,"66":1,"71":5,"72":4}}],["oneto",{"2":{"4":4,"5":4,"6":2,"20":2,"24":3,"27":9,"38":1,"39":5,"64":2,"78":2}}],["one",{"0":{"38":1},"2":{"0":1,"7":1,"8":2,"14":2,"17":2,"36":1,"44":1,"64":1,"66":2,"67":1,"71":8,"72":3,"83":1}}],["own",{"2":{"0":1}}],["offline=true",{"2":{"91":1}}],["offsets",{"2":{"72":1}}],["offset",{"2":{"13":1}}],["often",{"2":{"7":1}}],["of",{"0":{"11":1,"34":1,"41":1,"84":2},"2":{"0":2,"1":1,"6":1,"8":3,"9":1,"10":2,"11":1,"12":1,"13":2,"14":1,"15":1,"17":7,"18":3,"19":1,"21":1,"22":1,"26":3,"27":4,"30":1,"31":2,"32":1,"33":1,"34":2,"35":1,"36":1,"41":1,"42":1,"46":1,"51":1,"53":3,"54":1,"56":1,"58":1,"59":1,"63":1,"64":1,"66":7,"67":1,"68":2,"69":2,"70":1,"71":50,"72":42,"78":1,"79":2,"81":2,"82":1,"83":1,"84":1}}],["eo",{"2":{"83":1}}],["esdltutorials",{"2":{"83":1}}],["esm1",{"2":{"50":1,"87":2}}],["eltype",{"2":{"78":1}}],["elementtype",{"2":{"72":1}}],["element",{"2":{"8":1,"9":1,"10":2,"13":2,"14":1,"16":3,"17":2,"28":1,"36":1,"43":2,"44":1,"45":1,"46":7,"47":2,"48":3,"55":2,"58":1,"67":1,"68":2,"71":1,"72":1,"81":1}}],["elements",{"0":{"11":1,"55":1},"2":{"8":1,"12":1,"13":2,"18":1,"53":1,"66":1,"71":1,"72":1}}],["empty",{"2":{"72":1}}],["embeds",{"2":{"71":1}}],["either",{"2":{"71":2}}],["error",{"2":{"62":1}}],["et",{"2":{"51":1,"53":1,"59":1,"63":1,"68":1}}],["edu",{"2":{"51":1,"53":1,"59":1,"67":1}}],["equivalent",{"2":{"48":1,"58":1}}],["equally",{"2":{"0":1}}],["effectively",{"2":{"35":1}}],["env",{"2":{"75":1}}],["enabling",{"2":{"24":1}}],["enter",{"2":{"77":1}}],["entire",{"2":{"17":1,"19":1,"60":1,"61":1}}],["entries",{"2":{"17":1,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"71":1,"78":1}}],["entry",{"2":{"10":1,"12":1,"13":1,"16":2,"24":2,"43":2,"44":1,"46":2,"47":2,"48":3,"71":1,"74":3}}],["enumerate",{"2":{"17":2,"48":2}}],["end",{"2":{"13":1,"16":1,"17":4,"18":2,"35":1,"43":2,"48":2,"81":2,"91":1}}],["exists",{"2":{"62":1,"71":1,"72":1}}],["existing",{"0":{"8":1},"2":{"62":1,"63":1}}],["exportable=true",{"2":{"91":1}}],["expression",{"2":{"71":1}}],["experiment",{"2":{"51":3,"53":3,"59":3,"63":3}}],["explicitly",{"2":{"13":1,"30":1,"72":1}}],["external",{"2":{"50":1,"87":1}}],["extension",{"2":{"71":2}}],["extent",{"2":{"21":2}}],["extended",{"2":{"16":1,"71":1,"72":2}}],["extracts",{"2":{"72":1}}],["extract",{"0":{"27":1},"2":{"72":1}}],["extra",{"2":{"18":1}}],["executes",{"2":{"71":1}}],["execute",{"2":{"18":1}}],["exactly",{"2":{"5":1,"28":1}}],["examples",{"2":{"6":1,"28":2,"40":1,"51":1,"53":1,"59":1,"74":1}}],["example",{"2":{"0":1,"1":1,"5":1,"10":1,"18":2,"33":1,"34":1,"35":1,"36":1,"41":1,"51":1,"53":2,"59":2,"66":2,"67":1,"68":1,"71":3,"72":1,"74":2,"78":2}}],["e",{"2":{"7":1,"8":1,"10":1,"11":1,"13":1,"17":2,"18":1,"21":1,"22":1,"24":1,"31":1,"58":1,"62":1,"66":1,"69":1,"71":6,"72":1,"75":1,"78":1}}],["easier",{"2":{"24":1,"53":1}}],["easily",{"2":{"0":1,"18":1}}],["easy",{"2":{"21":1,"22":1}}],["each",{"2":{"4":1,"5":1,"10":1,"13":1,"17":5,"18":2,"35":2,"36":2,"41":1,"45":1,"67":1,"69":1,"71":3,"72":3,"78":1}}],["everywhere",{"2":{"18":2}}],["every",{"2":{"0":1,"10":1,"13":1,"71":1}}],["features",{"2":{"84":1}}],["feb",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["fallback",{"2":{"72":1}}],["falls",{"2":{"71":1}}],["false",{"2":{"47":1,"48":1,"62":2,"71":3,"72":1}}],["faq",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1}}],["faster",{"2":{"72":1}}],["fastest",{"2":{"1":1}}],["fast",{"2":{"1":1,"13":1}}],["frame",{"2":{"85":1}}],["frames",{"2":{"66":1}}],["front",{"2":{"72":1}}],["from",{"0":{"27":1,"28":2,"41":1},"2":{"0":1,"8":1,"9":1,"19":1,"28":4,"34":3,"57":1,"68":2,"71":6,"72":6,"78":1,"81":1}}],["fr",{"2":{"51":1,"53":1,"59":1,"63":1}}],["frequently",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1}}],["fu",{"2":{"72":1}}],["funtion",{"2":{"81":1}}],["fun",{"2":{"71":4}}],["functionality",{"0":{"84":1}}],["functions",{"2":{"10":2,"66":2,"70":1,"71":1,"72":1}}],["function",{"0":{"36":1},"2":{"0":1,"1":1,"13":2,"15":1,"16":6,"18":6,"27":2,"29":1,"35":1,"36":1,"40":1,"43":1,"45":1,"48":1,"57":1,"62":1,"64":1,"71":24,"72":13}}],["future",{"2":{"42":1}}],["further",{"2":{"13":1,"83":1}}],["flag",{"2":{"72":3}}],["float32",{"2":{"16":6,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5,"72":1}}],["float64",{"2":{"8":1,"9":1,"10":3,"12":3,"13":3,"14":4,"17":9,"20":2,"21":2,"22":4,"24":6,"25":2,"27":1,"28":1,"29":4,"35":12,"36":5,"43":3,"44":2,"47":3,"48":6,"50":4,"51":4,"53":2,"54":4,"55":2,"56":6,"57":10,"58":3,"59":2,"63":2,"71":1,"72":1,"78":7,"81":2,"87":2}}],["flexible",{"2":{"9":1,"15":1}}],["folder",{"2":{"75":1}}],["follow",{"2":{"75":1,"83":1}}],["follows",{"2":{"16":2,"43":1,"48":1}}],["following",{"2":{"2":1,"5":1,"6":1,"16":1,"18":1,"40":1,"41":1,"42":1,"71":2,"72":4,"83":1}}],["found",{"2":{"71":1,"72":1}}],["fourth",{"2":{"51":2,"53":2,"59":2,"63":2}}],["fontsize=24",{"2":{"88":1}}],["fontsize=18",{"2":{"48":1}}],["font=",{"2":{"48":1}}],["forwarded",{"2":{"71":1}}],["forwardordered",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"16":9,"17":9,"20":2,"21":6,"22":4,"24":9,"25":3,"27":9,"28":2,"29":4,"31":14,"33":6,"34":10,"35":9,"36":5,"38":1,"39":5,"43":3,"44":2,"46":2,"47":1,"48":7,"50":6,"51":6,"53":3,"54":6,"55":4,"56":9,"57":15,"58":2,"59":3,"63":6,"64":2,"78":5,"81":1,"87":3}}],["force",{"2":{"71":1}}],["forcing",{"2":{"50":1,"87":1}}],["forms",{"2":{"71":1,"72":2}}],["formal",{"2":{"68":1}}],["format",{"2":{"62":1,"71":1,"81":1}}],["former",{"2":{"27":1}}],["for",{"0":{"6":1,"80":1},"1":{"81":1,"82":1},"2":{"0":2,"1":3,"4":1,"5":1,"6":1,"17":4,"18":1,"31":1,"33":2,"34":2,"35":4,"36":6,"42":1,"46":1,"48":3,"51":1,"53":1,"57":1,"58":1,"59":1,"62":1,"63":1,"64":1,"66":4,"67":3,"68":1,"71":19,"72":16,"80":1,"81":2,"83":1}}],["f",{"2":{"2":2,"16":3}}],["field",{"2":{"71":1}}],["fields",{"2":{"36":1,"71":1,"72":4}}],["figure=",{"2":{"82":1}}],["figure",{"2":{"48":2,"80":1,"82":1,"88":1,"89":1,"90":1,"91":1}}],["fig",{"2":{"36":3,"48":8,"80":1,"82":1,"88":2,"89":2,"90":2,"91":3}}],["filterig",{"2":{"81":1}}],["filter",{"2":{"71":2}}],["fillarrays",{"2":{"64":3}}],["fill",{"2":{"64":1,"71":1,"72":1}}],["fillvalue=",{"2":{"72":1}}],["fillvalue",{"2":{"42":3,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["filling",{"2":{"23":1,"24":1}}],["filename",{"2":{"42":2,"71":1}}],["files",{"0":{"86":1},"2":{"7":1,"49":1,"52":1,"72":2,"75":1}}],["file",{"2":{"2":1,"7":1,"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"16":10,"17":4,"20":2,"21":2,"22":3,"24":4,"27":2,"28":2,"29":2,"31":10,"34":1,"35":6,"36":6,"46":2,"50":2,"51":4,"54":4,"55":6,"56":6,"57":10,"62":2,"64":2,"71":2,"74":4,"78":4,"81":2}}],["findaxis",{"2":{"72":1}}],["findall",{"2":{"17":1,"81":1}}],["find",{"2":{"30":1,"72":1,"83":1}}],["finalizer",{"2":{"72":1}}],["finalize",{"2":{"72":1}}],["finally",{"2":{"17":1,"71":1}}],["final",{"2":{"17":1}}],["firstly",{"2":{"31":1}}],["first",{"2":{"8":4,"16":3,"17":1,"36":1,"48":1,"71":4,"72":1,"74":1,"78":1,"87":1}}],["fitting",{"2":{"71":1}}],["fittable",{"2":{"71":2}}],["fitcube",{"2":{"36":2}}],["fitsym",{"2":{"71":4}}],["fits",{"2":{"19":1}}],["fit",{"2":{"1":1,"66":1}}],["t=union",{"2":{"72":1}}],["typing",{"2":{"77":1}}],["typically",{"2":{"71":1}}],["type",{"2":{"66":1,"68":1,"71":12,"72":8,"78":1,"79":1}}],["types",{"0":{"65":1},"1":{"66":1,"67":1,"68":1,"69":1},"2":{"19":2,"21":1,"22":1,"55":1,"67":1,"71":2,"79":1}}],["tutorial",{"2":{"83":2,"84":1,"85":1}}],["tutorials",{"0":{"83":1},"1":{"84":1,"85":1,"86":1},"2":{"57":1,"83":3}}],["turn",{"2":{"71":1}}],["tuple",{"2":{"2":3,"4":1,"5":1,"6":1,"43":2,"44":1,"46":2,"47":3,"48":5,"71":5,"72":3}}],["tbl",{"2":{"36":2}}],["target",{"2":{"72":1}}],["tab",{"2":{"71":4}}],["tables",{"2":{"85":1}}],["tableaggregator",{"2":{"71":1}}],["table",{"0":{"85":1},"2":{"36":2,"50":1,"51":2,"53":2,"59":2,"63":2,"71":4,"72":1,"87":1}}],["tas",{"2":{"50":5,"87":5}}],["tair",{"2":{"48":1,"71":1}}],["takes",{"2":{"71":4}}],["taken",{"2":{"34":2}}],["take",{"2":{"16":1,"71":1,"72":2,"75":1}}],["tesselation",{"2":{"91":1}}],["test",{"2":{"72":1,"87":1}}],["testrange",{"2":{"72":1}}],["terminal",{"2":{"75":1}}],["text",{"2":{"74":1}}],["tensors",{"2":{"66":1}}],["tell",{"2":{"30":1}}],["temporary",{"2":{"72":1}}],["temporal",{"2":{"35":1,"40":1,"66":1}}],["tempo",{"2":{"43":6,"46":4,"47":1}}],["temp",{"2":{"9":2}}],["temperature=temperature",{"2":{"34":1}}],["temperature",{"2":{"9":2,"34":4,"48":2,"50":3,"51":2,"54":5,"55":6,"56":6,"57":10,"66":1,"67":1,"68":1,"78":4}}],["tempname",{"2":{"2":1,"4":1,"5":1,"6":1}}],["tip",{"2":{"79":1}}],["tidy",{"2":{"71":1}}],["ticks",{"2":{"66":1}}],["ticks=false",{"2":{"48":1}}],["tick",{"2":{"58":1,"69":1,"78":1}}],["tiff",{"0":{"86":1}}],["tif",{"2":{"52":2}}],["title",{"2":{"48":1,"51":1,"53":1,"59":1,"63":1,"74":1}}],["ti=at",{"2":{"48":3}}],["ti=>cyclicbins",{"2":{"43":2,"44":1,"46":2,"47":2,"48":3}}],["ti",{"2":{"21":4,"43":15,"44":2,"45":1,"46":8,"47":3,"48":6,"50":2,"51":2,"53":1,"54":2,"55":2,"56":3,"57":5,"59":1,"63":1,"87":2}}],["time1",{"2":{"55":2}}],["time=1",{"2":{"78":1}}],["time=date",{"2":{"31":1}}],["time=at",{"2":{"31":1}}],["time=between",{"2":{"31":1}}],["time",{"0":{"41":1},"2":{"1":1,"7":1,"8":4,"9":3,"10":3,"12":1,"13":1,"14":7,"16":14,"17":8,"18":5,"21":2,"24":3,"25":1,"29":2,"31":8,"33":4,"34":7,"35":4,"36":3,"44":1,"45":1,"48":1,"50":2,"51":1,"54":2,"55":4,"56":3,"57":5,"66":2,"67":1,"71":4,"78":4,"80":1,"81":4,"87":2}}],["timestep",{"2":{"36":1}}],["times",{"2":{"0":1}}],["treat",{"2":{"71":1}}],["treatment",{"2":{"71":1,"72":1}}],["treated",{"2":{"50":1}}],["tries",{"2":{"71":1}}],["translate",{"2":{"89":1,"90":1}}],["transformed",{"2":{"51":1,"53":1,"59":1,"63":1}}],["transformations",{"2":{"89":1}}],["transformation",{"2":{"17":1}}],["transform",{"2":{"17":2}}],["track",{"2":{"71":1}}],["true",{"2":{"12":1,"62":1,"64":1,"71":4,"72":1,"91":1}}],["tspan",{"2":{"16":1}}],["t",{"2":{"16":4,"31":1,"33":2,"34":2,"36":3,"51":1,"54":2,"55":3,"56":3,"57":5,"71":1,"72":2,"80":1,"81":1}}],["two",{"2":{"8":1,"9":1,"28":2,"29":1,"66":1,"72":1}}],["todo",{"2":{"81":1}}],["toghether",{"2":{"72":1}}],["together",{"2":{"68":1}}],["touches",{"2":{"57":1}}],["tolerances",{"2":{"56":1}}],["tos",{"2":{"51":4,"53":2,"54":4,"55":4,"56":3,"57":9,"58":2,"59":2,"60":2,"61":2,"63":1}}],["top",{"2":{"48":1}}],["too",{"2":{"34":1,"66":1}}],["to",{"0":{"9":1,"37":1,"63":1,"73":1,"74":1},"1":{"38":1,"39":1,"74":1,"75":2},"2":{"0":4,"1":4,"3":1,"4":1,"6":2,"7":1,"8":1,"9":1,"10":8,"12":1,"15":1,"16":2,"17":2,"18":6,"19":3,"20":2,"22":3,"23":1,"26":2,"27":2,"28":3,"29":1,"31":2,"33":2,"34":6,"35":1,"36":1,"40":1,"41":3,"42":2,"44":1,"45":1,"48":1,"49":1,"50":3,"51":1,"53":3,"57":1,"58":1,"59":1,"60":2,"61":2,"62":1,"63":2,"64":3,"65":1,"66":5,"67":3,"68":2,"69":2,"71":47,"72":19,"74":2,"75":3,"79":2,"83":1,"85":3,"87":2,"91":1}}],["though",{"2":{"64":1}}],["those",{"2":{"11":1,"19":1,"21":1,"22":1,"67":1}}],["through",{"2":{"71":5,"72":5,"77":1}}],["thrown",{"2":{"62":1}}],["three",{"2":{"30":1,"67":1,"80":1}}],["threads",{"2":{"71":2}}],["thread",{"2":{"18":1}}],["than",{"2":{"19":1,"30":1,"35":1,"36":1}}],["that",{"2":{"0":1,"9":2,"10":1,"13":1,"16":5,"17":2,"18":1,"19":1,"29":1,"32":1,"34":2,"36":1,"41":1,"44":1,"47":1,"58":1,"64":1,"66":1,"67":2,"69":1,"71":13,"72":13,"83":1,"85":1}}],["things",{"2":{"26":1}}],["think",{"2":{"1":1}}],["thinking",{"2":{"1":1}}],["this",{"2":{"0":1,"1":1,"4":1,"7":1,"10":1,"13":2,"16":4,"17":3,"18":1,"19":1,"23":1,"26":1,"28":1,"33":1,"34":2,"35":2,"36":2,"41":1,"45":2,"49":1,"50":1,"52":1,"57":1,"65":1,"68":1,"70":2,"71":6,"72":10,"74":1,"75":2,"84":1,"85":1}}],["their",{"0":{"33":1,"34":1},"2":{"32":1,"34":1,"66":1,"71":3,"72":2}}],["then",{"2":{"17":2,"35":1,"75":2,"77":1}}],["thereby",{"2":{"71":1}}],["therefore",{"2":{"36":1,"79":1}}],["there",{"2":{"14":2,"22":1,"28":1,"71":1}}],["theme",{"2":{"48":2}}],["them",{"2":{"7":1,"10":1,"30":1,"64":1,"71":1}}],["these",{"2":{"0":1,"6":1,"28":1,"30":1,"58":1,"66":1}}],["the",{"0":{"27":1,"28":1,"36":1,"42":1,"81":1,"84":1},"2":{"0":5,"1":4,"2":3,"4":1,"5":4,"6":4,"8":6,"9":3,"10":1,"11":1,"13":3,"14":2,"15":1,"16":12,"17":14,"18":7,"19":2,"22":1,"24":3,"26":1,"27":4,"28":3,"29":2,"30":2,"31":9,"33":3,"34":10,"35":3,"36":10,"40":2,"41":5,"42":4,"43":2,"44":1,"45":2,"46":2,"47":2,"48":9,"51":1,"53":1,"54":5,"55":3,"56":5,"57":6,"58":1,"62":3,"63":1,"64":6,"65":1,"66":5,"67":4,"68":4,"71":116,"72":83,"73":1,"74":1,"75":6,"77":2,"78":6,"79":8,"80":1,"81":4,"83":6,"84":1,"85":5,"87":1}}],["switched",{"2":{"79":1}}],["syntax",{"2":{"79":1,"83":1}}],["system",{"2":{"75":1}}],["symbol",{"2":{"10":1,"12":1,"13":1,"24":2,"43":4,"44":2,"45":2,"46":4,"47":4,"48":6,"71":3,"72":1}}],["src",{"2":{"74":1}}],["sres",{"2":{"51":2,"53":2,"59":2,"63":2}}],["skipped",{"2":{"71":1}}],["skip",{"2":{"71":1}}],["skipmissing",{"2":{"18":1,"35":1}}],["skeleton=true",{"2":{"64":1}}],["skeleton=false",{"2":{"62":1,"71":1}}],["skeleton",{"0":{"64":1},"2":{"64":3}}],["ssp585",{"2":{"50":1,"87":2}}],["scene",{"2":{"91":3}}],["scenarios",{"2":{"87":1}}],["scenariomip",{"2":{"50":1,"87":2}}],["scripts",{"2":{"75":1}}],["scope",{"2":{"71":1,"72":1}}],["scalar",{"2":{"50":1}}],["scattered",{"2":{"7":1}}],["snow3",{"2":{"36":1}}],["snippet",{"2":{"6":1}}],["small",{"2":{"26":1}}],["slightly",{"2":{"83":1}}],["slicing",{"2":{"16":1}}],["slices",{"2":{"71":3}}],["slice",{"2":{"16":1,"87":4,"88":1}}],["slow",{"2":{"34":1}}],["slurmmanager",{"2":{"18":1}}],["shinclude",{"2":{"75":1}}],["shdocs>",{"2":{"75":1}}],["shnpm",{"2":{"75":2}}],["should",{"2":{"31":1,"42":1,"71":3,"72":1,"74":1,"75":1}}],["shown",{"2":{"71":1}}],["showprog",{"2":{"71":1}}],["shows",{"2":{"48":1}}],["show",{"2":{"18":1,"91":1}}],["shading=false",{"2":{"89":1,"90":1,"91":1}}],["shall",{"2":{"71":5,"72":1}}],["shares",{"2":{"34":1}}],["share",{"0":{"33":1,"34":1},"2":{"32":1,"34":1,"67":1,"71":1}}],["shared",{"2":{"4":1,"5":1,"6":1,"25":1,"29":1,"33":2,"34":3,"38":1,"39":1,"50":1,"51":1,"53":1,"59":1,"63":1,"87":1}}],["shape",{"2":{"6":1}}],["sure",{"2":{"91":1}}],["surface",{"2":{"48":2,"50":2,"51":2,"54":5,"55":6,"56":6,"57":10,"89":1,"90":1}}],["such",{"2":{"57":1,"71":1,"79":1}}],["subcubes",{"2":{"71":1}}],["subtype",{"2":{"66":1,"72":1,"79":1}}],["subtables",{"2":{"36":1}}],["subarray",{"2":{"47":1,"48":1}}],["subsetextensions",{"2":{"72":1}}],["subsetcube",{"2":{"71":1}}],["subseting",{"2":{"58":1}}],["subsetting",{"0":{"31":1,"32":1,"33":1,"34":1},"1":{"33":1,"34":1},"2":{"50":1,"51":1,"72":1,"81":1}}],["subset",{"0":{"30":1},"1":{"31":1,"32":1,"33":1,"34":1},"2":{"31":5,"34":4,"53":1,"56":1,"71":1,"72":1,"87":1}}],["subsets",{"2":{"15":1,"69":1}}],["supposed",{"2":{"71":1}}],["support",{"2":{"22":1}}],["supertype",{"2":{"21":1,"22":1}}],["sum",{"2":{"17":2,"35":1,"43":4,"46":2,"47":4,"48":2}}],["suggestions",{"2":{"6":1}}],["s",{"2":{"10":1,"16":3,"29":1,"31":1,"33":1,"34":2,"48":7,"53":1,"69":1,"71":2,"72":1,"81":1}}],["style",{"0":{"85":1}}],["st",{"2":{"79":1}}],["stdzero",{"2":{"71":1}}],["struct",{"2":{"71":1,"72":4}}],["structure",{"2":{"68":1}}],["structures",{"2":{"65":1}}],["string",{"2":{"8":1,"9":2,"10":1,"12":1,"13":1,"14":2,"16":5,"17":6,"20":1,"21":2,"22":3,"24":3,"27":1,"28":1,"29":2,"31":5,"35":3,"36":3,"43":1,"44":1,"46":2,"47":1,"48":1,"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"62":1,"63":1,"64":1,"71":6,"72":4,"78":4,"81":1,"87":1}}],["stable",{"2":{"79":1}}],["standard",{"2":{"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["standards",{"2":{"50":1,"51":1,"53":1,"59":1,"63":1,"87":1}}],["statistics",{"2":{"14":1,"18":1,"36":3,"40":1,"80":1}}],["started",{"0":{"76":1},"1":{"77":1,"78":1,"79":1}}],["start=12",{"2":{"43":2,"44":1,"46":2,"47":2,"48":3}}],["start=december",{"2":{"43":3,"46":1}}],["start",{"2":{"10":1,"31":1}}],["storing",{"2":{"67":1}}],["storage",{"2":{"11":1,"50":1}}],["stored",{"2":{"66":3,"72":2}}],["stores",{"2":{"66":1,"71":1}}],["store",{"2":{"0":1,"50":4,"66":1,"67":1,"87":2}}],["still",{"2":{"8":1,"17":1,"67":1,"83":1}}],["step=3",{"2":{"43":2,"44":1,"46":2,"47":2,"48":3}}],["steps",{"2":{"10":1,"14":1,"48":1,"71":1,"75":1}}],["step",{"2":{"7":1,"14":1,"35":2,"71":1,"72":2,"87":1}}],["sphere",{"0":{"91":1},"2":{"91":3}}],["split",{"2":{"71":1}}],["splitted",{"2":{"2":1}}],["special",{"2":{"55":1,"71":1,"72":1}}],["specifiers",{"2":{"72":1}}],["specifier",{"2":{"71":1}}],["specifies",{"2":{"71":3}}],["specified",{"2":{"71":7,"72":1}}],["specific",{"2":{"31":1,"71":2}}],["specifying",{"2":{"71":2,"72":1}}],["specify",{"2":{"24":1,"71":1}}],["specs",{"2":{"50":1,"87":1}}],["spectral",{"2":{"48":1}}],["sparse",{"2":{"66":1}}],["spatio",{"2":{"35":1}}],["spatial",{"2":{"1":1,"14":1,"17":5,"18":1,"40":1,"66":1}}],["span",{"2":{"31":1,"80":1}}],["space",{"2":{"1":1,"16":1}}],["sampled",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"10":3,"12":3,"13":3,"14":3,"16":9,"17":8,"20":2,"21":6,"22":4,"24":9,"25":3,"27":9,"28":2,"29":3,"31":14,"33":6,"34":10,"35":9,"36":5,"38":1,"39":5,"43":3,"44":2,"46":2,"47":1,"48":7,"50":6,"51":6,"53":3,"54":6,"55":4,"56":9,"57":15,"58":2,"59":3,"63":6,"64":2,"78":5,"81":1,"87":3}}],["same",{"2":{"0":1,"2":1,"5":1,"6":1,"9":1,"16":1,"17":2,"21":1,"22":1,"27":1,"28":2,"29":1,"34":1,"54":1,"55":1,"56":1,"66":1,"67":3,"68":2,"71":1,"72":1,"75":1}}],["saves",{"2":{"62":1,"71":1}}],["save",{"0":{"64":1},"2":{"12":1,"22":1,"60":2,"61":2,"64":1,"71":2}}],["savecube",{"2":{"2":1,"60":1,"61":1,"64":1,"71":2}}],["savedataset",{"2":{"4":1,"5":1,"6":1,"62":2,"63":1,"64":1,"71":2,"72":1}}],["saved",{"2":{"2":1,"11":1,"62":1}}],["saving",{"2":{"1":1,"4":1,"5":1,"6":1,"16":1}}],["serve",{"2":{"72":1}}],["series",{"0":{"41":1},"2":{"18":1}}],["sequence",{"2":{"66":1}}],["seaborn",{"2":{"88":1,"89":1,"90":1,"91":1}}],["searching",{"2":{"71":1}}],["search",{"2":{"71":1}}],["sea",{"2":{"51":3,"53":1,"54":5,"55":6,"56":6,"57":10,"59":1,"63":1}}],["season",{"2":{"43":1,"46":2,"47":1}}],["seasons",{"0":{"43":1,"45":1,"48":1},"1":{"44":1,"45":1},"2":{"43":9,"46":1,"48":5}}],["seasonal",{"0":{"41":1,"80":1,"82":1},"1":{"81":1,"82":1},"2":{"41":1,"47":1,"48":1,"80":1,"81":4}}],["sebastien",{"2":{"51":2,"53":2,"59":2,"63":2}}],["separate",{"2":{"71":1,"72":1}}],["separated",{"2":{"67":1}}],["separately",{"2":{"5":1,"17":1,"18":1}}],["sep",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["selected",{"2":{"72":1,"80":1}}],["select",{"0":{"53":1,"54":1,"55":1,"56":1},"1":{"54":1,"55":1,"56":1,"57":1,"58":1},"2":{"34":1,"53":1}}],["selectors",{"2":{"57":1}}],["selector",{"2":{"34":1,"56":1}}],["selection",{"2":{"34":2}}],["selecting",{"2":{"31":1,"33":1,"34":1}}],["see",{"2":{"16":1,"57":1,"71":1,"79":1}}],["second",{"2":{"8":3,"71":1}}],["section",{"2":{"7":1,"10":1,"19":1,"23":1,"26":1,"49":1,"65":1,"70":1}}],["setting",{"2":{"62":1,"71":1,"72":1}}],["sets",{"2":{"6":1,"42":1}}],["set",{"0":{"4":1,"5":1,"6":1},"2":{"4":1,"5":1,"17":1,"50":1,"62":1,"71":1,"72":2,"75":1}}],["setchunks",{"2":{"1":1,"2":2,"3":1,"4":1,"5":1,"6":1,"71":1,"72":1}}],["several",{"0":{"16":1},"2":{"0":1,"16":1,"29":1,"32":1}}],["sin",{"2":{"80":1}}],["sink",{"2":{"72":1}}],["single",{"0":{"80":1},"1":{"81":1,"82":1},"2":{"0":1,"7":1,"8":1,"60":1,"61":1,"68":1,"71":6,"72":1}}],["simplicity",{"2":{"80":1}}],["simply",{"2":{"18":1,"75":1}}],["simple",{"2":{"16":1,"26":1,"78":1}}],["situations",{"2":{"1":1}}],["size=",{"2":{"89":1,"90":1,"91":1}}],["sizes",{"2":{"2":1,"71":2,"72":2}}],["size",{"2":{"0":1,"1":1,"4":1,"5":1,"8":2,"9":2,"10":2,"12":2,"13":2,"14":4,"16":10,"17":4,"20":2,"21":2,"22":2,"24":4,"27":2,"28":2,"29":2,"31":10,"35":6,"36":6,"46":2,"48":1,"50":2,"51":2,"54":4,"55":6,"56":6,"57":10,"64":2,"71":3,"72":4,"78":5,"80":1,"81":3,"82":1,"88":1}}],["sosstsst",{"2":{"51":1,"54":2,"55":3,"56":3,"57":5}}],["software",{"2":{"51":1,"53":1,"59":1}}],["sort",{"2":{"17":1}}],["so",{"2":{"2":1,"18":1,"30":1,"34":1,"71":1,"72":1}}],["source",{"2":{"0":2,"51":1,"53":1,"59":1,"62":1,"63":1,"71":24,"72":24}}],["sometimes",{"2":{"64":1,"85":1}}],["some",{"0":{"34":1},"2":{"0":1,"11":1,"32":1,"34":1,"35":1,"48":1,"71":1,"80":1,"89":1}}],["auto",{"2":{"71":1}}],["aug",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["again",{"2":{"62":1}}],["agreement",{"2":{"48":1}}],["aggregation",{"2":{"18":1}}],["aggregate",{"2":{"17":1}}],["air",{"2":{"48":2,"50":3}}],["api",{"0":{"70":1,"71":1,"72":1},"1":{"71":1,"72":1}}],["apr",{"2":{"43":4,"44":2,"45":1,"46":4,"47":4,"48":6}}],["appropriate",{"2":{"74":1}}],["approximated",{"2":{"72":1}}],["approx",{"2":{"71":1,"72":1}}],["approach",{"2":{"9":1}}],["append=true",{"2":{"63":2}}],["append",{"0":{"63":1},"2":{"62":1,"71":1}}],["apply",{"0":{"35":1},"2":{"10":2,"13":1,"15":1,"18":1,"48":1,"81":1}}],["applies",{"2":{"13":1}}],["applied",{"2":{"0":1,"3":1,"4":1,"17":1,"71":2,"72":1}}],["applications",{"2":{"0":1}}],["a3",{"2":{"25":4}}],["a2",{"2":{"24":1,"25":3,"51":2,"53":2,"59":2,"63":2,"78":1}}],["a1",{"2":{"24":1}}],["abstractdict",{"2":{"71":1,"72":3}}],["abstractdimarray",{"2":{"21":1,"22":1,"66":1}}],["about",{"2":{"1":2,"30":1,"56":1,"78":1,"84":1}}],["above",{"2":{"0":1,"5":1,"16":1,"77":1}}],["atol",{"2":{"56":1}}],["atmosphere",{"2":{"51":1,"53":1,"59":1,"63":1}}],["atmos",{"2":{"50":1,"87":1}}],["attributes",{"2":{"48":1,"71":1,"72":1}}],["at",{"2":{"17":4,"22":1,"34":1,"48":1,"51":2,"53":1,"54":2,"55":6,"56":7,"57":5,"59":1,"62":2,"63":1,"67":1,"68":2,"71":3,"72":2,"73":1,"74":2,"75":2,"78":1,"83":2}}],["after",{"2":{"14":1,"16":1,"52":1,"71":3}}],["addargs",{"2":{"71":3,"72":1}}],["adds",{"2":{"66":2,"69":1}}],["addprocs",{"2":{"18":2}}],["addition",{"2":{"17":1,"19":1,"66":1}}],["additional",{"2":{"9":1,"16":1,"71":4,"72":3}}],["added",{"2":{"15":1,"63":1,"71":1,"72":1}}],["add",{"2":{"6":1,"10":1,"12":1,"35":1,"74":2,"77":2,"89":1}}],["asaxisarray",{"2":{"71":1}}],["assemble",{"2":{"78":1}}],["assessment",{"2":{"51":2,"53":2,"59":2,"63":2}}],["associated",{"2":{"71":1}}],["assing",{"0":{"37":1},"1":{"38":1,"39":1}}],["aspect=dataaspect",{"2":{"48":1,"88":1}}],["asked",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1}}],["as",{"2":{"5":1,"12":1,"16":5,"17":1,"18":1,"21":1,"22":2,"28":1,"34":1,"36":1,"43":2,"48":1,"50":1,"51":1,"52":1,"54":1,"57":1,"58":1,"64":2,"66":1,"69":1,"71":11,"72":3,"79":1,"85":1,"87":1}}],["axs",{"2":{"42":1,"48":9}}],["axcopy",{"2":{"27":1}}],["ax",{"2":{"27":2,"36":1,"80":3,"82":3,"88":1,"89":3,"90":3,"91":5}}],["axlist",{"2":{"10":2,"17":2,"18":2,"24":2,"25":1,"29":3,"72":5,"78":3}}],["axessmall",{"2":{"72":2}}],["axes",{"0":{"27":1,"28":1},"2":{"4":1,"5":1,"6":1,"24":1,"25":1,"27":2,"28":2,"31":2,"33":5,"34":3,"38":1,"39":1,"50":1,"51":1,"53":2,"59":1,"63":1,"66":2,"71":15,"72":11,"78":1,"81":2,"87":1}}],["axislegend",{"2":{"82":1}}],["axis=false",{"2":{"91":1}}],["axis=",{"2":{"80":1}}],["axisdescriptor",{"2":{"72":1}}],["axisdesc",{"2":{"71":3}}],["axis",{"0":{"4":1},"2":{"4":1,"9":2,"16":3,"28":1,"31":1,"33":1,"34":7,"48":1,"58":1,"64":1,"69":1,"71":16,"72":14,"78":1,"82":1,"87":1,"88":1}}],["always",{"2":{"71":2,"72":1,"73":1,"79":1}}],["already",{"2":{"62":1,"71":1,"72":1}}],["although",{"2":{"57":1}}],["alternatives",{"2":{"71":1}}],["alternatively",{"2":{"0":1,"2":1,"71":1,"77":1}}],["altered",{"2":{"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["al",{"2":{"51":1,"53":1,"59":1,"63":1,"68":1}}],["algebra",{"0":{"35":1},"2":{"35":1}}],["along",{"0":{"8":1},"2":{"8":1,"16":1,"71":3,"72":2,"83":1}}],["allaxes",{"2":{"72":1}}],["allinaxes",{"2":{"72":1}}],["allmissing",{"2":{"71":1}}],["allocate",{"2":{"64":1}}],["allocation",{"2":{"17":1}}],["allow",{"2":{"72":1}}],["allowing",{"2":{"21":1,"22":1,"67":1}}],["allows",{"2":{"18":1}}],["all",{"0":{"6":1,"33":1,"34":1},"2":{"4":1,"6":2,"10":1,"12":1,"13":1,"14":2,"17":1,"18":4,"32":1,"34":2,"48":2,"52":1,"57":1,"62":3,"64":1,"66":1,"68":2,"70":1,"71":6,"72":7,"75":1}}],["also",{"2":{"2":1,"3":1,"14":1,"18":1,"24":1,"27":1,"34":1,"36":1,"64":1,"66":2,"67":1,"71":1,"77":1}}],["analog",{"2":{"67":1}}],["analyzing",{"2":{"1":1}}],["another",{"2":{"16":1,"34":1}}],["anynymous",{"2":{"71":1}}],["anyocean",{"2":{"71":1}}],["anymissing",{"2":{"71":1}}],["any",{"2":{"8":1,"9":1,"10":1,"11":1,"14":2,"16":5,"17":4,"20":1,"21":2,"22":3,"24":1,"27":1,"28":1,"29":1,"31":6,"35":3,"36":3,"43":3,"44":2,"46":4,"47":3,"48":3,"50":2,"51":2,"53":1,"54":2,"55":3,"56":3,"57":5,"59":1,"63":1,"64":1,"71":4,"72":9,"78":1,"81":1,"87":1}}],["an",{"0":{"8":1},"2":{"9":1,"10":4,"12":1,"13":1,"15":1,"18":2,"27":1,"28":1,"33":1,"34":1,"36":1,"53":3,"56":1,"59":1,"60":1,"61":1,"62":1,"63":1,"66":1,"67":1,"69":1,"71":19,"72":8}}],["and",{"0":{"23":1,"28":1,"40":1,"49":1,"53":1,"57":1,"59":1},"1":{"24":1,"25":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"50":1,"51":1,"52":1,"54":1,"55":1,"56":1,"57":1,"58":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"0":1,"2":1,"5":1,"6":1,"7":1,"8":1,"12":1,"16":4,"17":2,"19":1,"23":1,"24":1,"29":1,"31":1,"34":6,"35":1,"36":6,"40":1,"41":1,"43":1,"48":1,"49":2,"50":1,"51":1,"53":1,"57":1,"59":1,"62":1,"63":1,"64":5,"66":5,"67":3,"68":2,"71":18,"72":6,"73":1,"75":4,"77":1,"78":2,"80":1,"87":1,"89":1}}],["available",{"2":{"57":2,"64":1,"70":1,"71":2,"77":1}}],["avariable",{"2":{"0":1}}],["avoids",{"2":{"17":1}}],["avoided",{"2":{"0":1}}],["averaging",{"2":{"14":1}}],["averages",{"0":{"41":1},"2":{"40":1}}],["average",{"2":{"14":1,"41":2}}],["artype",{"2":{"71":2}}],["archgdaldatasets",{"2":{"52":1}}],["archgdal",{"2":{"52":2}}],["arguments",{"2":{"48":1,"71":11,"72":3}}],["argument",{"2":{"18":1,"64":1,"71":4,"72":2}}],["arr2",{"2":{"22":1}}],["arr",{"2":{"17":7,"22":2}}],["arrayinfo",{"2":{"72":1}}],["arrays",{"2":{"6":1,"7":1,"8":2,"9":1,"11":1,"23":1,"25":2,"50":2,"51":2,"65":1,"66":4,"67":3,"68":3,"71":2,"72":1}}],["array",{"0":{"17":1,"20":1},"2":{"0":1,"1":1,"8":2,"9":2,"10":3,"12":2,"13":2,"15":1,"17":8,"20":2,"28":1,"43":1,"48":1,"53":1,"64":4,"66":4,"67":1,"68":1,"69":2,"71":10,"72":4,"78":3}}],["arbitrary",{"2":{"16":1}}],["arithmetics",{"0":{"12":1},"2":{"10":1}}],["areas",{"2":{"71":1}}],["area",{"2":{"50":2,"71":1}}],["areacella",{"2":{"50":2,"87":1}}],["are",{"2":{"0":1,"11":1,"19":3,"28":1,"30":1,"34":1,"48":2,"53":1,"57":1,"58":1,"64":1,"66":3,"67":2,"68":3,"71":11,"72":6,"73":1,"75":1,"83":2,"85":1}}],["according",{"2":{"71":1}}],["access",{"2":{"1":2,"13":1,"24":1,"66":1,"69":1}}],["accessed",{"2":{"0":2,"50":1,"51":1}}],["activate",{"2":{"36":1,"75":2,"80":1,"88":1,"91":1}}],["actually",{"2":{"72":1}}],["actual",{"2":{"13":1,"64":1,"72":1,"78":1}}],["across",{"2":{"0":1,"7":1,"16":1,"66":3}}],["achieved",{"2":{"0":1}}],["a",{"0":{"9":1,"11":1,"17":1,"24":1,"25":1,"27":1,"30":1,"31":1,"32":1,"33":1,"34":1,"37":1,"54":1,"58":1,"62":1,"63":1,"80":1,"86":1},"1":{"31":1,"32":1,"33":2,"34":2,"38":1,"39":1,"81":1,"82":1},"2":{"0":4,"2":7,"3":1,"4":1,"7":1,"8":1,"9":2,"10":3,"11":1,"12":4,"13":2,"14":2,"15":1,"16":5,"17":75,"18":11,"20":2,"21":5,"22":8,"24":1,"26":1,"27":1,"28":1,"30":4,"31":3,"32":1,"34":2,"36":3,"38":2,"39":2,"41":1,"46":1,"48":2,"50":6,"51":3,"52":1,"56":2,"57":4,"58":1,"60":3,"61":3,"62":4,"64":4,"66":12,"67":4,"68":8,"69":1,"71":60,"72":31,"74":2,"75":2,"78":4,"79":1,"84":1,"85":1}}],["iall",{"2":{"72":1}}],["iwindow",{"2":{"72":1}}],["icolon",{"2":{"72":1}}],["icefire",{"2":{"88":1,"89":1,"90":1,"91":1}}],["ice",{"2":{"51":1,"53":1,"59":1,"63":1}}],["ipcc",{"2":{"51":3,"53":3,"59":3,"63":3}}],["ipsl",{"2":{"51":6,"53":6,"59":6,"63":6}}],["idx",{"2":{"81":3}}],["identical",{"2":{"71":1}}],["id",{"2":{"50":2,"51":2,"53":2,"59":2,"63":2,"87":2}}],["irregular",{"2":{"34":6,"36":2,"43":1,"46":2,"47":1,"48":1,"50":4,"51":2,"53":1,"54":2,"55":2,"56":6,"57":5,"59":1,"63":1,"72":1,"87":2}}],["immutable",{"2":{"11":1}}],["improving",{"2":{"79":1}}],["improve",{"2":{"6":1}}],["implementing",{"2":{"71":1}}],["importance",{"2":{"72":1}}],["important",{"2":{"1":1}}],["impossible",{"2":{"11":1}}],["i",{"0":{"29":1,"30":1,"35":1,"36":1,"37":1},"1":{"31":1,"32":1,"33":1,"34":1,"38":1,"39":1},"2":{"8":1,"17":3,"21":1,"22":1,"31":1,"48":2,"62":1,"71":7,"72":4,"75":2,"78":1,"81":3}}],["ispar",{"2":{"71":1,"72":1}}],["ismissing",{"2":{"64":1}}],["issues",{"2":{"42":1}}],["isequal",{"2":{"17":1}}],["is",{"2":{"1":2,"2":1,"6":1,"7":1,"9":1,"13":1,"14":2,"15":1,"16":4,"17":2,"18":3,"19":1,"22":1,"26":1,"29":1,"30":1,"34":2,"35":1,"36":4,"41":2,"42":2,"43":1,"47":1,"52":1,"54":1,"57":2,"58":1,"64":3,"66":4,"67":1,"68":2,"69":1,"71":10,"72":10,"74":1,"77":1,"79":1,"83":1,"85":1}}],["if",{"2":{"0":1,"19":1,"34":3,"62":1,"64":1,"71":11,"72":6,"75":1,"83":1}}],["inline",{"2":{"91":2}}],["incubes",{"2":{"72":1}}],["incs",{"2":{"72":1}}],["include",{"2":{"71":2,"72":1}}],["included",{"2":{"57":1}}],["inarbc",{"2":{"72":1}}],["inar",{"2":{"72":2}}],["inplace",{"2":{"71":3,"72":1}}],["inputcube",{"2":{"72":2}}],["input",{"2":{"16":1,"18":2,"36":1,"71":12,"72":8}}],["innerchunks",{"2":{"72":1}}],["inner",{"2":{"71":9,"72":3}}],["installed",{"2":{"79":1}}],["installation",{"0":{"77":1}}],["install",{"2":{"75":1,"77":1}}],["instead",{"2":{"8":1,"9":1,"13":1,"27":2,"31":1,"57":1,"66":1}}],["insize",{"2":{"72":1}}],["inside",{"2":{"71":3}}],["inds",{"2":{"72":1}}],["indexing",{"2":{"55":2,"56":2,"79":1}}],["index",{"2":{"50":2,"72":2,"87":2}}],["indices",{"2":{"72":1,"81":1}}],["indicate",{"2":{"71":1}}],["indicating",{"2":{"9":1,"17":1,"71":1}}],["indims=indims",{"2":{"17":1,"18":1}}],["indims",{"2":{"16":8,"71":7}}],["individually",{"2":{"13":2}}],["individual",{"2":{"0":1,"50":1,"51":1}}],["initialization",{"2":{"50":1,"87":1}}],["initially",{"2":{"17":1}}],["information",{"2":{"62":1,"72":2}}],["info",{"2":{"16":2,"22":1,"27":1,"64":1,"79":1}}],["int",{"2":{"81":3}}],["introducing",{"2":{"68":1}}],["int32",{"2":{"64":2}}],["interested",{"2":{"83":1}}],["internal",{"0":{"72":1},"2":{"72":9}}],["internally",{"2":{"67":1}}],["interface",{"2":{"71":2,"85":1}}],["interval",{"2":{"51":1,"54":2,"55":3,"56":4,"57":6}}],["intervalsets",{"2":{"57":1}}],["intervals",{"0":{"57":1},"2":{"31":1}}],["interactive",{"2":{"0":1}}],["integer",{"2":{"24":1,"55":1,"56":1,"66":1}}],["int64",{"2":{"4":4,"5":4,"6":2,"8":1,"9":1,"16":8,"20":2,"21":6,"22":2,"24":3,"27":9,"28":3,"31":15,"33":4,"34":7,"36":3,"38":1,"39":5,"43":6,"44":6,"46":4,"47":1,"48":19,"63":3,"64":2,"72":1,"78":2}}],["into",{"0":{"86":1},"2":{"0":1,"1":1,"2":1,"7":1,"8":1,"16":1,"17":1,"19":2,"22":1,"34":4,"49":1,"62":1,"68":2,"71":6,"72":3,"75":1,"91":1}}],["in",{"0":{"37":1},"1":{"38":1,"39":1},"2":{"0":5,"1":1,"2":1,"4":2,"5":1,"9":1,"11":1,"13":1,"14":2,"16":2,"17":6,"18":3,"19":2,"21":1,"22":1,"28":1,"32":1,"34":1,"36":2,"41":2,"42":2,"45":3,"48":4,"50":2,"51":1,"54":2,"55":3,"56":4,"57":7,"58":1,"64":1,"65":1,"66":5,"67":1,"68":2,"71":13,"72":9,"75":2,"77":1,"78":2,"81":1,"83":3,"85":4,"87":1}}],["iter",{"2":{"71":1}}],["iterate",{"2":{"85":1}}],["iteration",{"0":{"85":1}}],["iterator",{"2":{"36":1}}],["iterators",{"2":{"17":1}}],["iterable",{"2":{"36":2,"71":2}}],["itself",{"2":{"71":1,"72":1}}],["its",{"2":{"0":1}}],["it",{"2":{"0":2,"1":3,"12":1,"16":1,"18":2,"27":1,"28":1,"29":1,"34":2,"36":2,"44":1,"46":1,"48":1,"53":1,"62":1,"64":2,"66":2,"67":1,"69":1,"71":10,"72":5,"75":1,"77":1}}],["lscene",{"2":{"91":1}}],["lmdz",{"2":{"51":1,"53":1,"59":1,"63":1}}],["link",{"2":{"74":1}}],["linewidth=0",{"2":{"89":1,"90":1}}],["linewidth=2",{"2":{"82":2}}],["linewidth=1",{"2":{"80":1,"82":1}}],["linestyle=",{"2":{"82":2}}],["lines",{"2":{"80":1,"82":3}}],["line",{"2":{"36":1}}],["lim",{"2":{"51":1,"53":1,"59":1,"63":1}}],["libraries",{"2":{"31":1,"66":1}}],["libray",{"2":{"30":1}}],["little",{"2":{"18":1}}],["list",{"2":{"17":1,"71":5,"72":6}}],["like",{"2":{"0":1,"36":1,"71":2,"72":1,"74":1}}],["loopinds",{"2":{"72":2}}],["looping",{"2":{"71":1,"72":1}}],["loopcachesize",{"2":{"72":1}}],["loopchunksize",{"2":{"71":1}}],["loopaxes",{"2":{"72":1}}],["loopvars",{"2":{"71":1,"72":1}}],["loops",{"2":{"71":1}}],["loop",{"2":{"71":1,"72":2}}],["looped",{"2":{"71":3,"72":3}}],["look",{"2":{"62":1,"71":1,"72":1,"74":1,"75":1}}],["lookups",{"2":{"43":15,"44":10,"46":5,"47":5,"48":38,"58":3}}],["lookup",{"2":{"43":1,"45":1,"87":3}}],["looks",{"2":{"36":1}}],["located",{"2":{"83":1}}],["locate",{"2":{"75":1}}],["location",{"2":{"72":3}}],["locations",{"2":{"67":1,"68":1}}],["localhost",{"2":{"75":1}}],["locally",{"0":{"75":1},"2":{"75":1}}],["local",{"2":{"18":1,"50":1}}],["lowclip",{"2":{"48":4}}],["lost",{"2":{"19":1}}],["lo",{"2":{"16":4}}],["loadorgenerate",{"2":{"72":1}}],["loading",{"2":{"52":1}}],["loaded",{"2":{"34":2}}],["load",{"2":{"16":1,"31":1,"34":2,"66":1}}],["long",{"2":{"48":1,"50":1,"51":1,"54":2,"55":3,"56":3,"57":5}}],["longitudes=longitudes",{"2":{"34":1}}],["longitudes",{"2":{"34":12}}],["longitude",{"2":{"31":1,"78":2}}],["lonlat",{"2":{"33":1}}],["lon=1",{"2":{"31":1,"33":1}}],["lon",{"2":{"10":2,"12":1,"13":1,"14":2,"16":10,"17":12,"18":1,"21":2,"24":3,"25":1,"29":2,"31":7,"33":3,"35":4,"36":3,"50":2,"51":2,"53":1,"54":2,"55":3,"56":6,"57":10,"58":2,"59":1,"63":1,"87":2,"89":3}}],["layer",{"2":{"71":1,"72":1}}],["layername=",{"2":{"72":1}}],["layername",{"2":{"71":2}}],["layout",{"2":{"48":2}}],["lazy",{"2":{"71":1}}],["lazily",{"2":{"13":1}}],["labelled",{"2":{"71":1}}],["labels",{"2":{"48":1,"58":1,"68":1,"69":1}}],["label=false",{"2":{"48":1}}],["label=",{"2":{"48":1,"82":3}}],["label=cb",{"2":{"48":1}}],["label",{"2":{"48":3,"50":1,"87":1}}],["last",{"2":{"16":1,"18":1}}],["la",{"2":{"16":4}}],["latest",{"2":{"79":1}}],["lat=5",{"2":{"31":1,"33":1}}],["latitudes=latitudes",{"2":{"34":1}}],["latitudes",{"2":{"34":11}}],["latitude",{"2":{"31":1,"78":2}}],["lat",{"2":{"10":2,"12":1,"13":1,"14":2,"16":7,"17":12,"18":1,"21":2,"24":3,"25":1,"29":2,"31":7,"33":3,"35":4,"36":3,"50":2,"51":2,"53":1,"54":2,"55":3,"56":5,"57":5,"58":1,"59":1,"63":1,"71":1,"87":3,"89":1,"90":1}}],["larger",{"2":{"19":1}}],["large",{"2":{"0":2,"19":1,"42":1,"66":1}}],["level",{"2":{"74":1,"75":1}}],["learn",{"2":{"85":1}}],["learning",{"2":{"66":1,"83":1}}],["leap",{"2":{"80":1}}],["least",{"2":{"34":1,"71":1}}],["length",{"2":{"43":2,"44":1,"46":3,"71":1,"72":3}}],["length=365",{"2":{"80":1}}],["length=20",{"2":{"29":1,"78":1}}],["length=15",{"2":{"10":1,"17":1,"18":1,"24":1,"29":1,"78":1}}],["length=10",{"2":{"10":1,"17":1,"18":1,"24":1,"29":1,"78":1}}],["left",{"2":{"14":2}}],["let",{"2":{"10":1,"16":2,"29":1,"31":1,"33":1,"34":1,"48":1,"53":1,"81":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.CIQr89Xt.js b/dev/assets/chunks/VPLocalSearchBox.CIQr89Xt.js deleted file mode 100644 index 1643eb13..00000000 --- a/dev/assets/chunks/VPLocalSearchBox.CIQr89Xt.js +++ /dev/null @@ -1,7 +0,0 @@ -var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ce=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{X as Rt,s as ne,h as ve,al as et,am as Ct,an as Mt,v as je,ao as At,d as Lt,G as ye,ap as tt,aq as Dt,ar as zt,x as Pt,as as Vt,y as Me,R as de,Q as we,at as jt,au as $t,Y as Bt,U as Wt,a1 as Kt,o as Q,b as Jt,j as x,a2 as Ut,k as D,av as qt,aw as Gt,ax as Qt,c as Z,n as st,e as _e,E as nt,F as it,a as he,t as fe,ay as Ht,p as Yt,l as Zt,az as rt,aA as Xt,ab as es,ah as ts,aB as ss,_ as ns}from"./framework._h4tgM90.js";import{u as is,d as rs}from"./theme.CwYulWfl.js";const as={root:()=>Rt(()=>import("./@localSearchIndexroot.CbO3e_5G.js"),[])};/*! -* 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])"],Ie=mt.join(","),gt=typeof Element>"u",re=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},ke=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},os=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},bt=function(e,t,s){if(ke(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ie));return t&&re.call(e,Ie)&&n.unshift(e),n=n.filter(s),n},yt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!ke(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),c=o.length?o:i.children,l=a(c,!0,s);s.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=re.call(i,Ie);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var v=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!ke(v,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(v&&f){var b=a(v===!0?i.children:v.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||os(e))&&!wt(e)?0:e.tabIndex},cs=function(e,t){var s=ie(e);return s<0&&t&&!wt(e)?0:s},ls=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},_t=function(e){return e.tagName==="INPUT"},us=function(e){return _t(e)&&e.type==="hidden"},ds=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},hs=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(re.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var c=e.parentElement,l=Ne(e);if(c&&!c.shadowRoot&&n(c)===!0)return at(e);e.assignedSlot?e=e.assignedSlot:!c&&l!==e.ownerDocument?e=l.host:e=c}e=o}if(ms(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return at(e);return!1},bs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},ws=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,c=cs(o,i),l=i?a(n.candidates):o;c===0?i?t.push.apply(t,l):t.push(o):s.push({documentOrder:r,tabIndex:c,item:n,isScope:i,content:l})}),s.sort(ls).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},_s=function(e,t){t=t||{};var s;return t.getShadowRoot?s=yt([e],t.includeContainer,{filter:$e.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ys}):s=bt(e,t.includeContainer,$e.bind(null,t)),ws(s)},xs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=yt([e],t.includeContainer,{filter:Fe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=bt(e,t.includeContainer,Fe.bind(null,t)),s},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,Ie)===!1?!1:$e(t,e)},Ss=mt.concat("iframe").join(","),Ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,Ss)===!1?!1:Fe(t,e)};/*! -* focus-trap 7.5.4 -* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function ot(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,s)}return t}function ct(a){for(var e=1;e0){var s=e[e.length-1];s!==t&&s.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&e[e.length-1].unpause()}},Ns=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},ks=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},me=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Fs=function(e){return me(e)&&!e.shiftKey},Os=function(e){return me(e)&&e.shiftKey},ut=function(e){return setTimeout(e,0)},dt=function(e,t){var s=-1;return e.every(function(n,r){return t(n)?(s=r,!1):!0}),s},pe=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1?m-1:0),E=1;E=0)u=s.activeElement;else{var d=i.tabbableGroups[0],m=d&&d.firstTabbableNode;u=m||h("fallbackFocus")}if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},f=function(){if(i.containerGroups=i.containers.map(function(u){var d=_s(u,r.tabbableOptions),m=xs(u,r.tabbableOptions),S=d.length>0?d[0]:void 0,E=d.length>0?d[d.length-1]:void 0,k=m.find(function(p){return ae(p)}),F=m.slice().reverse().find(function(p){return ae(p)}),M=!!d.find(function(p){return ie(p)>0});return{container:u,tabbableNodes:d,focusableNodes:m,posTabIndexesFound:M,firstTabbableNode:S,lastTabbableNode:E,firstDomTabbableNode:k,lastDomTabbableNode:F,nextTabbableNode:function(g){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(g);return O<0?N?m.slice(m.indexOf(g)+1).find(function(P){return ae(P)}):m.slice(0,m.indexOf(g)).reverse().find(function(P){return ae(P)}):d[O+(N?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.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(u){return u.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.")},b=function T(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?T(d.shadowRoot):d},y=function T(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){T(v());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Ns(u)&&u.select()}},_=function(u){var d=h("setReturnFocus",u);return d||(d===!1?!1:u)},w=function(u){var d=u.target,m=u.event,S=u.isBackward,E=S===void 0?!1:S;d=d||xe(m),f();var k=null;if(i.tabbableGroups.length>0){var F=l(d,m),M=F>=0?i.containerGroups[F]:void 0;if(F<0)E?k=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:k=i.tabbableGroups[0].firstTabbableNode;else if(E){var p=dt(i.tabbableGroups,function(I){var L=I.firstTabbableNode;return d===L});if(p<0&&(M.container===d||Ae(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!M.nextTabbableNode(d,!1))&&(p=F),p>=0){var g=p===0?i.tabbableGroups.length-1:p-1,N=i.tabbableGroups[g];k=ie(d)>=0?N.lastTabbableNode:N.lastDomTabbableNode}else me(m)||(k=M.nextTabbableNode(d,!1))}else{var O=dt(i.tabbableGroups,function(I){var L=I.lastTabbableNode;return d===L});if(O<0&&(M.container===d||Ae(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!M.nextTabbableNode(d))&&(O=F),O>=0){var P=O===i.tabbableGroups.length-1?0:O+1,V=i.tabbableGroups[P];k=ie(d)>=0?V.firstTabbableNode:V.firstDomTabbableNode}else me(m)||(k=M.nextTabbableNode(d))}}else k=h("fallbackFocus");return k},R=function(u){var d=xe(u);if(!(l(d,u)>=0)){if(pe(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}pe(r.allowOutsideClick,u)||u.preventDefault()}},C=function(u){var d=xe(u),m=l(d,u)>=0;if(m||d instanceof Document)m&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var S,E=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var k=l(i.mostRecentlyFocusedNode),F=i.containerGroups[k].tabbableNodes;if(F.length>0){var M=F.findIndex(function(p){return p===i.mostRecentlyFocusedNode});M>=0&&(r.isKeyForward(i.recentNavEvent)?M+1=0&&(S=F[M-1],E=!1))}}else i.containerGroups.some(function(p){return p.tabbableNodes.some(function(g){return ie(g)>0})})||(E=!1);else E=!1;E&&(S=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(S||i.mostRecentlyFocusedNode||v())}i.recentNavEvent=void 0},J=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var m=w({event:u,isBackward:d});m&&(me(u)&&u.preventDefault(),y(m))},H=function(u){if(ks(u)&&pe(r.escapeDeactivates,u)!==!1){u.preventDefault(),o.deactivate();return}(r.isKeyForward(u)||r.isKeyBackward(u))&&J(u,r.isKeyBackward(u))},W=function(u){var d=xe(u);l(d,u)>=0||pe(r.clickOutsideDeactivates,u)||pe(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return lt.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?ut(function(){y(v())}):y(v()),s.addEventListener("focusin",C,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",W,{capture:!0,passive:!1}),s.addEventListener("keydown",H,{capture:!0,passive:!1}),o},$=function(){if(i.active)return s.removeEventListener("focusin",C,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",W,!0),s.removeEventListener("keydown",H,!0),o},Re=function(u){var d=u.some(function(m){var S=Array.from(m.removedNodes);return S.some(function(E){return E===i.mostRecentlyFocusedNode})});d&&y(v())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(Re):void 0,U=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){A.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=c(u,"onActivate"),m=c(u,"onPostActivate"),S=c(u,"checkCanFocusTrap");S||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=s.activeElement,d==null||d();var E=function(){S&&f(),j(),U(),m==null||m()};return S?(S(i.containers.concat()).then(E,E),this):(E(),this)},deactivate:function(u){if(!i.active)return this;var d=ct({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,$(),i.active=!1,i.paused=!1,U(),lt.deactivateTrap(n,o);var m=c(d,"onDeactivate"),S=c(d,"onPostDeactivate"),E=c(d,"checkCanReturnFocus"),k=c(d,"returnFocus","returnFocusOnDeactivate");m==null||m();var F=function(){ut(function(){k&&y(_(i.nodeFocusedBeforeActivation)),S==null||S()})};return k&&E?(E(_(i.nodeFocusedBeforeActivation)).then(F,F),this):(F(),this)},pause:function(u){if(i.paused||!i.active)return this;var d=c(u,"onPause"),m=c(u,"onPostPause");return i.paused=!0,d==null||d(),$(),U(),m==null||m(),this},unpause:function(u){if(!i.paused||!i.active)return this;var d=c(u,"onUnpause"),m=c(u,"onPostUnpause");return i.paused=!1,d==null||d(),f(),j(),U(),m==null||m(),this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(m){return typeof m=="string"?s.querySelector(m):m}),i.active&&f(),U(),this}},o.updateContainerElements(e),o};function Ms(a,e={}){let t;const{immediate:s,...n}=e,r=ne(!1),i=ne(!1),o=f=>t&&t.activate(f),c=f=>t&&t.deactivate(f),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},v=ve(()=>{const f=et(a);return(Array.isArray(f)?f:[f]).map(b=>{const y=et(b);return typeof y=="string"?y:Ct(y)}).filter(Mt)});return je(v,f=>{f.length&&(t=Cs(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),At(()=>c()),{hasFocus:r,isPaused:i,activate:o,deactivate:c,pause:l,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}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(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const c=()=>{--i<=0&&n(o)};i||c(),r.forEach(l=>{ce.matches(l,this.exclude)?c():this.onIframeReady(l,h=>{t(l)&&(o++,s(h)),c()},c)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,c)=>{o.val===s&&(r=c,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],c=[],l,h,v=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;v();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(l,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,b=>c.push(b),n)}),c.push(l);c.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const c=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,c):c()})}}let As=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 ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[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,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),c=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&c!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(c)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(c)})`+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,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.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",s=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(r=>{s.every(i=>{if(i.indexOf(r)!==-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 s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),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(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.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 s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!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:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,c=parseInt(e.start,10)-o;return c=c>i?i:c,n=c+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),c<0||n-c<0||c>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(c,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:c,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.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:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const c=e.nodes[o+1];if(typeof c>"u"||c.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(s>i.end?i.end:s)-i.start,v=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=v+f,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=h),e.nodes[y].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(c=>{c=c.node;let l;for(;(l=e.exec(c.textContent))!==null&&l[i]!=="";){if(!s(l[i],c))continue;let h=l.index;if(i!==0)for(let v=1;v{let c;for(;(c=e.exec(o.value))!==null&&c[i]!=="";){let l=c.index;if(i!==0)for(let v=1;vs(c[i],v),(v,f)=>{e.lastIndex=f,n(v)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,c)=>{let{start:l,end:h,valid:v}=this.checkWhitespaceRanges(o,i,r.value);v&&this.wrapRangeInMappedTextNode(r,l,h,f=>t(f,o,r.value.substring(l,h),c),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,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 s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",c=l=>{let h=new RegExp(this.createRegExp(l),`gm${o}`),v=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,b)=>this.opt.filter(b,l,s,v),f=>{v++,s++,this.opt.each(f)},()=>{v===0&&this.opt.noMatch(l),r[i-1]===l?this.opt.done(s):c(r[r.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):c(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,c)=>this.opt.filter(r,i,o,c),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}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,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Ls(a){const e=new As(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}function Te(a,e,t,s){function n(r){return r instanceof t?r:new t(function(i){i(r)})}return new(t||(t=Promise))(function(r,i){function o(h){try{l(s.next(h))}catch(v){i(v)}}function c(h){try{l(s.throw(h))}catch(v){i(v)}}function l(h){h.done?r(h.value):n(h.value).then(o,c)}l((s=s.apply(a,[])).next())})}const Ds="ENTRIES",xt="KEYS",St="VALUES",z="";class Le{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=oe(this._path);if(oe(t)===z)return{done:!1,value:this.result()};const s=e.get(oe(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=oe(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>oe(e)).filter(e=>e!==z).join("")}value(){return oe(this._path).node.get(z)}result(){switch(this._type){case St:return this.value();case xt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const oe=a=>a[a.length-1],zs=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const c=r*i;e:for(const l of a.keys())if(l===z){const h=n[c-1];h<=t&&s.set(o,[a.get(l),h])}else{let h=r;for(let v=0;vt)continue e}Et(a.get(l),e,t,s,n,h,i,o+l)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Oe(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=Je(s);for(const i of n.keys())if(i!==z&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Ps(this._tree,e)}entries(){return new Le(this,Ds)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return zs(this._tree,e,t)}get(e){const t=Be(this._tree,e);return t!==void 0?t.get(z):void 0}has(e){const t=Be(this._tree,e);return t!==void 0&&t.has(z)}keys(){return new Le(this,xt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,De(this._tree,e).set(z,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=De(this._tree,e);return s.set(z,t(s.get(z))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=De(this._tree,e);let n=s.get(z);return n===void 0&&s.set(z,n=t()),n}values(){return new Le(this,St)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Oe=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==z&&e.startsWith(s))return t.push([a,s]),Oe(a.get(s),e.slice(s.length),t);return t.push([a,e]),Oe(void 0,"",t)},Be=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==z&&e.startsWith(t))return Be(a.get(t),e.slice(t.length))},De=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Oe(a,e);if(t!==void 0){if(t.delete(z),t.size===0)Tt(s);else if(t.size===1){const[n,r]=t.entries().next().value;It(s,n,r)}}},Tt=a=>{if(a.length===0)return;const[e,t]=Je(a);if(e.delete(t),e.size===0)Tt(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==z&&It(a.slice(0,-1),s,n)}},It=(a,e,t)=>{if(a.length===0)return;const[s,n]=Je(a);s.set(n+e,t),s.delete(n)},Je=a=>a[a.length-1],Ue="or",Nt="and",Vs="and_not";class le{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Ve:e.autoVacuum;this._options=Object.assign(Object.assign(Object.assign({},Pe),e),{autoVacuum:t,searchOptions:Object.assign(Object.assign({},ht),e.searchOptions||{}),autoSuggestOptions:Object.assign(Object.assign({},Ks),e.autoSuggestOptions||{})}),this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ke,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:s,processTerm:n,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const c=this.addDocumentId(o);this.saveStoredFields(c,e);for(const l of r){const h=t(e,l);if(h==null)continue;const v=s(h.toString(),l),f=this._fieldIds[l],b=new Set(v).size;this.addFieldLength(c,f,this._documentCount-1,b);for(const y of v){const _=n(y,l);if(Array.isArray(_))for(const w of _)this.addTerm(f,c,w);else _&&this.addTerm(f,c,_)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:c},l,h)=>(o.push(l),(h+1)%s===0?{chunk:[],promise:c.then(()=>new Promise(v=>setTimeout(v,0))).then(()=>this.addAll(o))}:{chunk:o,promise:c}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,fields:r,idField:i}=this._options,o=n(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const c=this._idToShortId.get(o);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const l of r){const h=n(e,l);if(h==null)continue;const v=t(h.toString(),l),f=this._fieldIds[l],b=new Set(v).size;this.removeFieldLength(c,f,this._documentCount,b);for(const y of v){const _=s(y,l);if(Array.isArray(_))for(const w of _)this.removeTerm(f,c,w);else _&&this.removeTerm(f,c,_)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(o),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ke,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}performVacuuming(e,t){return Te(this,void 0,void 0,function*(){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||We.batchSize,r=e.batchWait||We.batchWait;let i=1;for(const[o,c]of this._index){for(const[l,h]of c)for(const[v]of h)this._documentIds.has(v)||(h.size<=1?c.delete(l):h.delete(v));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&(yield new Promise(l=>setTimeout(l,r))),i+=1}this._dirtCount-=s}yield null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null})}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||Ve.minDirtCount,s=s||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const s=this.executeQuery(e,t),n=[];for(const[r,{score:i,terms:o,match:c}]of s){const l=o.length||1,h={id:this._documentIds.get(r),score:i*l,terms:Object.keys(c),queryTerms:o,match:c};Object.assign(h,this._storedFields.get(r)),(t.filter==null||t.filter(h))&&n.push(h)}return e===le.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||n.sort(pt),n}autoSuggest(e,t={}){t=Object.assign(Object.assign({},this._options.autoSuggestOptions),t);const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),c=s.get(o);c!=null?(c.score+=r,c.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:c}]of s)n.push({suggestion:r,terms:o,score:i/c});return n.sort(pt),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(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)}static loadJSONAsync(e,t){return Te(this,void 0,void 0,function*(){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)})}static getDefault(e){if(Pe.hasOwnProperty(e))return ze(Pe,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,c=this.instantiateMiniSearch(e,t);c._documentIds=Se(n),c._fieldLength=Se(r),c._storedFields=Se(i);for(const[l,h]of c._documentIds)c._idToShortId.set(h,l);for(const[l,h]of s){const v=new Map;for(const f of Object.keys(h)){let b=h[f];o===1&&(b=b.ds),v.set(parseInt(f,10),Se(b))}c._index.set(l,v)}return c}static loadJSAsync(e,t){return Te(this,void 0,void 0,function*(){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,c=this.instantiateMiniSearch(e,t);c._documentIds=yield Ee(n),c._fieldLength=yield Ee(r),c._storedFields=yield Ee(i);for(const[h,v]of c._documentIds)c._idToShortId.set(v,h);let l=0;for(const[h,v]of s){const f=new Map;for(const b of Object.keys(v)){let y=v[b];o===1&&(y=y.ds),f.set(parseInt(b,10),yield Ee(y))}++l%1e3===0&&(yield kt(0)),c._index.set(h,f)}return c})}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:c}=e;if(c!==1&&c!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const l=new le(t);return l._documentCount=s,l._nextId=n,l._idToShortId=new Map,l._fieldIds=r,l._avgFieldLength=i,l._dirtCount=o||0,l._index=new X,l}executeQuery(e,t={}){if(e===le.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f=Object.assign(Object.assign(Object.assign({},t),e),{queries:void 0}),b=e.queries.map(y=>this.executeQuery(y,f));return this.combineResults(b,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i=Object.assign(Object.assign({tokenize:s,processTerm:n},r),t),{tokenize:o,processTerm:c}=i,v=o(e).flatMap(f=>c(f)).filter(f=>!!f).map(Ws(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(v,i.combineWith)}executeQuerySpec(e,t){const s=Object.assign(Object.assign({},this._options.searchOptions),t),n=(s.fields||this._options.fields).reduce((_,w)=>Object.assign(Object.assign({},_),{[w]:ze(s.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:c}=s,{fuzzy:l,prefix:h}=Object.assign(Object.assign({},ht.weights),i),v=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,v,n,r,c);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const _=e.fuzzy===!0?.2:e.fuzzy,w=_<1?Math.min(o,Math.round(e.term.length*_)):_;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[_,w]of b){const R=_.length-e.term.length;if(!R)continue;y==null||y.delete(_);const C=h*_.length/(_.length+.3*R);this.termResults(e.term,_,C,e.termBoost,w,n,r,c,f)}if(y)for(const _ of y.keys()){const[w,R]=y.get(_);if(!R)continue;const C=l*_.length/(_.length+R);this.termResults(e.term,_,C,e.termBoost,w,n,r,c,f)}return f}executeWildcardQuery(e){const t=new Map,s=Object.assign(Object.assign({},this._options.searchOptions),e);for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Ue){if(e.length===0)return new Map;const s=t.toLowerCase(),n=js[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}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:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,c,l=new Map){if(r==null)return l;for(const h of Object.keys(i)){const v=i[h],f=this._fieldIds[h],b=r.get(f);if(b==null)continue;let y=b.size;const _=this._avgFieldLength[f];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(f,w,t),y-=1;continue}const R=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!R)continue;const C=b.get(w),J=this._fieldLength.get(w)[f],H=Bs(C,y,this._documentCount,J,_,c),W=s*n*v*R*H,j=l.get(w);if(j){j.score+=W,Js(j.terms,e);const $=ze(j.match,t);$?$.push(h):j.match[t]=[h]}else l.set(w,{score:W,terms:[e],match:{[t]:[h]}})}}return l}addTerm(e,t,s){const n=this._index.fetch(s,vt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,vt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,js={[Ue]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ft(s.terms,r)}}return a},[Nt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ft(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[Vs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},$s={k:1.2,b:.7,d:.5},Bs=(a,e,t,s,n,r)=>{const{k:i,b:o,d:c}=r;return Math.log(1+(t-e+.5)/(e+.5))*(c+a*(i+1)/(a+i*(1-o+o*s/n)))},Ws=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},Pe={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Us),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:Ue,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:$s},Ks={combineWith:Nt,prefix:(a,e,t)=>e===t.length-1},We={batchSize:1e3,batchWait:10},Ke={minDirtFactor:.1,minDirtCount:20},Ve=Object.assign(Object.assign({},We),Ke),Js=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,vt=()=>new Map,Se=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ee=a=>Te(void 0,void 0,void 0,function*(){const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&(yield kt(0));return e}),kt=a=>new Promise(e=>setTimeout(e,a)),Us=/[\n\r\p{Z}\p{P}]+/u;class qs{constructor(e=10){Ce(this,"max");Ce(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const K=a=>(Yt("data-v-5b749456"),a=a(),Zt(),a),Gs=["aria-owns"],Qs={class:"shell"},Hs=["title"],Ys=K(()=>x("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Zs=[Ys],Xs={class:"search-actions before"},en=["title"],tn=K(()=>x("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),sn=[tn],nn=["placeholder"],rn={class:"search-actions"},an=["title"],on=K(()=>x("span",{class:"vpi-layout-list local-search-icon"},null,-1)),cn=[on],ln=["disabled","title"],un=K(()=>x("span",{class:"vpi-delete local-search-icon"},null,-1)),dn=[un],hn=["id","role","aria-labelledby"],fn=["aria-selected"],pn=["href","aria-label","onMouseenter","onFocusin"],vn={class:"titles"},mn=K(()=>x("span",{class:"title-icon"},"#",-1)),gn=["innerHTML"],bn=K(()=>x("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),yn={class:"title main"},wn=["innerHTML"],_n={key:0,class:"excerpt-wrapper"},xn={key:0,class:"excerpt",inert:""},Sn=["innerHTML"],En=K(()=>x("div",{class:"excerpt-gradient-bottom"},null,-1)),Tn=K(()=>x("div",{class:"excerpt-gradient-top"},null,-1)),In={key:0,class:"no-results"},Nn={class:"search-keyboard-shortcuts"},kn=["aria-label"],Fn=K(()=>x("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),On=[Fn],Rn=["aria-label"],Cn=K(()=>x("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Mn=[Cn],An=["aria-label"],Ln=K(()=>x("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),Dn=[Ln],zn=["aria-label"],Pn=Lt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var F,M;const t=e,s=ye(),n=ye(),r=ye(as),i=is(),{activate:o}=Ms(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:c,theme:l}=i,h=tt(async()=>{var p,g,N,O,P,V,I,L,q;return rt(le.loadJSON((N=await((g=(p=r.value)[c.value])==null?void 0:g.call(p)))==null?void 0:N.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=l.value.search)==null?void 0:O.provider)==="local"&&((V=(P=l.value.search.options)==null?void 0:P.miniSearch)==null?void 0:V.searchOptions)},...((I=l.value.search)==null?void 0:I.provider)==="local"&&((q=(L=l.value.search.options)==null?void 0:L.miniSearch)==null?void 0:q.options)}))}),f=ve(()=>{var p,g;return((p=l.value.search)==null?void 0:p.provider)==="local"&&((g=l.value.search.options)==null?void 0:g.disableQueryPersistence)===!0}).value?ne(""):Dt("vitepress:local-search-filter",""),b=zt("vitepress:local-search-detailed-list",((F=l.value.search)==null?void 0:F.provider)==="local"&&((M=l.value.search.options)==null?void 0:M.detailedView)===!0),y=ve(()=>{var p,g,N;return((p=l.value.search)==null?void 0:p.provider)==="local"&&(((g=l.value.search.options)==null?void 0:g.disableDetailedView)===!0||((N=l.value.search.options)==null?void 0:N.detailedView)===!1)}),_=ve(()=>{var g,N,O,P,V,I,L;const p=((g=l.value.search)==null?void 0:g.options)??l.value.algolia;return((V=(P=(O=(N=p==null?void 0:p.locales)==null?void 0:N[c.value])==null?void 0:O.translations)==null?void 0:P.button)==null?void 0:V.buttonText)||((L=(I=p==null?void 0:p.translations)==null?void 0:I.button)==null?void 0:L.buttonText)||"Search"});Pt(()=>{y.value&&(b.value=!1)});const w=ye([]),R=ne(!1);je(f,()=>{R.value=!1});const C=tt(async()=>{if(n.value)return rt(new Ls(n.value))},null),J=new qs(16);Vt(()=>[h.value,f.value,b.value],async([p,g,N],O,P)=>{var ge,qe,Ge,Qe;(O==null?void 0:O[0])!==p&&J.clear();let V=!1;if(P(()=>{V=!0}),!p)return;w.value=p.search(g).slice(0,16),R.value=!0;const I=N?await Promise.all(w.value.map(B=>H(B.id))):[];if(V)return;for(const{id:B,mod:ee}of I){const te=B.slice(0,B.indexOf("#"));let Y=J.get(te);if(Y)continue;Y=new Map,J.set(te,Y);const G=ee.default??ee;if(G!=null&&G.render||G!=null&&G.setup){const se=Xt(G);se.config.warnHandler=()=>{},se.provide(es,i),Object.defineProperties(se.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const He=document.createElement("div");se.mount(He),He.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ue=>{var Xe;const be=(Xe=ue.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(be==null?void 0:be.startsWith("#"))&&be.slice(1);if(!Ye)return;let Ze="";for(;(ue=ue.nextElementSibling)&&!/^h[1-6]$/i.test(ue.tagName);)Ze+=ue.outerHTML;Y.set(Ye,Ze)}),se.unmount()}if(V)return}const L=new Set;if(w.value=w.value.map(B=>{const[ee,te]=B.id.split("#"),Y=J.get(ee),G=(Y==null?void 0:Y.get(te))??"";for(const se in B.match)L.add(se);return{...B,text:G}}),await de(),V)return;await new Promise(B=>{var ee;(ee=C.value)==null||ee.unmark({done:()=>{var te;(te=C.value)==null||te.markRegExp(k(L),{done:B})}})});const q=((ge=s.value)==null?void 0:ge.querySelectorAll(".result .excerpt"))??[];for(const B of q)(qe=B.querySelector('mark[data-markjs="true"]'))==null||qe.scrollIntoView({block:"center"});(Qe=(Ge=n.value)==null?void 0:Ge.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function H(p){const g=ts(p.slice(0,p.indexOf("#")));try{if(!g)throw new Error(`Cannot find file for id: ${p}`);return{id:p,mod:await import(g)}}catch(N){return console.error(N),{id:p,mod:{}}}}const W=ne(),j=ve(()=>{var p;return((p=f.value)==null?void 0:p.length)<=0});function $(p=!0){var g,N;(g=W.value)==null||g.focus(),p&&((N=W.value)==null||N.select())}Me(()=>{$()});function Re(p){p.pointerType==="mouse"&&$()}const A=ne(-1),U=ne(!1);je(w,p=>{A.value=p.length?0:-1,T()});function T(){de(()=>{const p=document.querySelector(".result.selected");p==null||p.scrollIntoView({block:"nearest"})})}we("ArrowUp",p=>{p.preventDefault(),A.value--,A.value<0&&(A.value=w.value.length-1),U.value=!0,T()}),we("ArrowDown",p=>{p.preventDefault(),A.value++,A.value>=w.value.length&&(A.value=0),U.value=!0,T()});const u=jt();we("Enter",p=>{if(p.isComposing||p.target instanceof HTMLButtonElement&&p.target.type!=="submit")return;const g=w.value[A.value];if(p.target instanceof HTMLInputElement&&!g){p.preventDefault();return}g&&(u.go(g.id),t("close"))}),we("Escape",()=>{t("close")});const m=rs({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"}}});Me(()=>{window.history.pushState(null,"",null)}),$t("popstate",p=>{p.preventDefault(),t("close")});const S=Bt(Wt?document.body:null);Me(()=>{de(()=>{S.value=!0,de().then(()=>o())})}),Kt(()=>{S.value=!1});function E(){f.value="",de().then(()=>$(!1))}function k(p){return new RegExp([...p].sort((g,N)=>N.length-g.length).map(g=>`(${ss(g)})`).join("|"),"gi")}return(p,g)=>{var N,O,P,V;return Q(),Jt(Ht,{to:"body"},[x("div",{ref_key:"el",ref:s,role:"button","aria-owns":(N=w.value)!=null&&N.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[x("div",{class:"backdrop",onClick:g[0]||(g[0]=I=>p.$emit("close"))}),x("div",Qs,[x("form",{class:"search-bar",onPointerup:g[4]||(g[4]=I=>Re(I)),onSubmit:g[5]||(g[5]=Ut(()=>{},["prevent"]))},[x("label",{title:_.value,id:"localsearch-label",for:"localsearch-input"},Zs,8,Hs),x("div",Xs,[x("button",{class:"back-button",title:D(m)("modal.backButtonTitle"),onClick:g[1]||(g[1]=I=>p.$emit("close"))},sn,8,en)]),qt(x("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":g[2]||(g[2]=I=>Qt(f)?f.value=I:null),placeholder:_.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,nn),[[Gt,D(f)]]),x("div",rn,[y.value?_e("",!0):(Q(),Z("button",{key:0,class:st(["toggle-layout-button",{"detailed-list":D(b)}]),type:"button",title:D(m)("modal.displayDetails"),onClick:g[3]||(g[3]=I=>A.value>-1&&(b.value=!D(b)))},cn,10,an)),x("button",{class:"clear-button",type:"reset",disabled:j.value,title:D(m)("modal.resetButtonTitle"),onClick:E},dn,8,ln)])],32),x("ul",{ref_key:"resultsEl",ref:n,id:(O=w.value)!=null&&O.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(V=w.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:g[7]||(g[7]=I=>U.value=!1)},[(Q(!0),Z(it,null,nt(w.value,(I,L)=>(Q(),Z("li",{key:I.id,role:"option","aria-selected":A.value===L?"true":"false"},[x("a",{href:I.id,class:st(["result",{selected:A.value===L}]),"aria-label":[...I.titles,I.title].join(" > "),onMouseenter:q=>!U.value&&(A.value=L),onFocusin:q=>A.value=L,onClick:g[6]||(g[6]=q=>p.$emit("close"))},[x("div",null,[x("div",vn,[mn,(Q(!0),Z(it,null,nt(I.titles,(q,ge)=>(Q(),Z("span",{key:ge,class:"title"},[x("span",{class:"text",innerHTML:q},null,8,gn),bn]))),128)),x("span",yn,[x("span",{class:"text",innerHTML:I.title},null,8,wn)])]),D(b)?(Q(),Z("div",_n,[I.text?(Q(),Z("div",xn,[x("div",{class:"vp-doc",innerHTML:I.text},null,8,Sn)])):_e("",!0),En,Tn])):_e("",!0)])],42,pn)],8,fn))),128)),D(f)&&!w.value.length&&R.value?(Q(),Z("li",In,[he(fe(D(m)("modal.noResultsText"))+' "',1),x("strong",null,fe(D(f)),1),he('" ')])):_e("",!0)],40,hn),x("div",Nn,[x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.navigateUpKeyAriaLabel")},On,8,kn),x("kbd",{"aria-label":D(m)("modal.footer.navigateDownKeyAriaLabel")},Mn,8,Rn),he(" "+fe(D(m)("modal.footer.navigateText")),1)]),x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.selectKeyAriaLabel")},Dn,8,An),he(" "+fe(D(m)("modal.footer.selectText")),1)]),x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.closeKeyAriaLabel")},"esc",8,zn),he(" "+fe(D(m)("modal.footer.closeText")),1)])])])],8,Gs)])}}}),Kn=ns(Pn,[["__scopeId","data-v-5b749456"]]);export{Kn as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.tGRBlptZ.js b/dev/assets/chunks/VPLocalSearchBox.tGRBlptZ.js new file mode 100644 index 00000000..69c2625f --- /dev/null +++ b/dev/assets/chunks/VPLocalSearchBox.tGRBlptZ.js @@ -0,0 +1,7 @@ +var kt=Object.defineProperty;var Ft=(a,e,t)=>e in a?kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as Ve,am as Mt,d as At,D as be,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as ye,ar as Vt,as as jt,W as $t,R as Bt,$ as Wt,o as G,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as we,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.Bwkmg46C.js";import{u as ts,d as ss}from"./theme.o12TANz8.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.DuMHLHSP.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var vt=["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])"],Te=vt.join(","),mt=typeof Element>"u",ie=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ie=!mt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Ne=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},is=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},gt=function(e,t,s){if(Ne(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Te));return t&&ie.call(e,Te)&&n.unshift(e),n=n.filter(s),n},bt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Ne(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ie.call(i,Te);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!Ne(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var b=a(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ne=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||is(e))&&!yt(e)?0:e.tabIndex},rs=function(e,t){var s=ne(e);return s<0&&t&&!yt(e)?0:s},as=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},os=function(e){return wt(e)&&e.type==="hidden"},ls=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},cs=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(ie.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=Ie(e);if(l&&!l.shadowRoot&&n(l)===!0)return rt(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(fs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return rt(e);return!1},vs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},gs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=rs(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(as).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},bs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:je.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ms}):s=gt(e,t.includeContainer,je.bind(null,t)),gs(s)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:ke.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=gt(e,t.includeContainer,ke.bind(null,t)),s},re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,Te)===!1?!1:je(t,e)},ws=vt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,ws)===!1?!1:ke(t,e)};/*! +* focus-trap 7.5.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function at(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,s)}return t}function ot(a){for(var e=1;e0){var s=e[e.length-1];s!==t&&s.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&e[e.length-1].unpause()}},Es=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Ts=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ve=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Is=function(e){return ve(e)&&!e.shiftKey},Ns=function(e){return ve(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ut=function(e,t){var s=-1;return e.every(function(n,r){return t(n)?(s=r,!1):!0}),s},fe=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1?g-1:0),E=1;E=0)u=s.activeElement;else{var d=i.tabbableGroups[0],g=d&&d.firstTabbableNode;u=g||h("fallbackFocus")}if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},f=function(){if(i.containerGroups=i.containers.map(function(u){var d=bs(u,r.tabbableOptions),g=ys(u,r.tabbableOptions),_=d.length>0?d[0]:void 0,E=d.length>0?d[d.length-1]:void 0,k=g.find(function(v){return re(v)}),F=g.slice().reverse().find(function(v){return re(v)}),M=!!d.find(function(v){return ne(v)>0});return{container:u,tabbableNodes:d,focusableNodes:g,posTabIndexesFound:M,firstTabbableNode:_,lastTabbableNode:E,firstDomTabbableNode:k,lastDomTabbableNode:F,nextTabbableNode:function(p){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(p);return O<0?N?g.slice(g.indexOf(p)+1).find(function(P){return re(P)}):g.slice(0,g.indexOf(p)).reverse().find(function(P){return re(P)}):d[O+(N?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.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(u){return u.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.")},b=function T(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?T(d.shadowRoot):d},y=function T(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){T(m());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Es(u)&&u.select()}},x=function(u){var d=h("setReturnFocus",u);return d||(d===!1?!1:u)},w=function(u){var d=u.target,g=u.event,_=u.isBackward,E=_===void 0?!1:_;d=d||xe(g),f();var k=null;if(i.tabbableGroups.length>0){var F=c(d,g),M=F>=0?i.containerGroups[F]:void 0;if(F<0)E?k=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:k=i.tabbableGroups[0].firstTabbableNode;else if(E){var v=ut(i.tabbableGroups,function(I){var L=I.firstTabbableNode;return d===L});if(v<0&&(M.container===d||Me(d,r.tabbableOptions)&&!re(d,r.tabbableOptions)&&!M.nextTabbableNode(d,!1))&&(v=F),v>=0){var p=v===0?i.tabbableGroups.length-1:v-1,N=i.tabbableGroups[p];k=ne(d)>=0?N.lastTabbableNode:N.lastDomTabbableNode}else ve(g)||(k=M.nextTabbableNode(d,!1))}else{var O=ut(i.tabbableGroups,function(I){var L=I.lastTabbableNode;return d===L});if(O<0&&(M.container===d||Me(d,r.tabbableOptions)&&!re(d,r.tabbableOptions)&&!M.nextTabbableNode(d))&&(O=F),O>=0){var P=O===i.tabbableGroups.length-1?0:O+1,V=i.tabbableGroups[P];k=ne(d)>=0?V.firstTabbableNode:V.firstDomTabbableNode}else ve(g)||(k=M.nextTabbableNode(d))}}else k=h("fallbackFocus");return k},R=function(u){var d=xe(u);if(!(c(d,u)>=0)){if(fe(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}fe(r.allowOutsideClick,u)||u.preventDefault()}},C=function(u){var d=xe(u),g=c(d,u)>=0;if(g||d instanceof Document)g&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var _,E=!0;if(i.mostRecentlyFocusedNode)if(ne(i.mostRecentlyFocusedNode)>0){var k=c(i.mostRecentlyFocusedNode),F=i.containerGroups[k].tabbableNodes;if(F.length>0){var M=F.findIndex(function(v){return v===i.mostRecentlyFocusedNode});M>=0&&(r.isKeyForward(i.recentNavEvent)?M+1=0&&(_=F[M-1],E=!1))}}else i.containerGroups.some(function(v){return v.tabbableNodes.some(function(p){return ne(p)>0})})||(E=!1);else E=!1;E&&(_=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(_||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},K=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var g=w({event:u,isBackward:d});g&&(ve(u)&&u.preventDefault(),y(g))},H=function(u){if(Ts(u)&&fe(r.escapeDeactivates,u)!==!1){u.preventDefault(),o.deactivate();return}(r.isKeyForward(u)||r.isKeyBackward(u))&&K(u,r.isKeyBackward(u))},W=function(u){var d=xe(u);c(d,u)>=0||fe(r.clickOutsideDeactivates,u)||fe(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},j=function(){if(i.active)return lt.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?ct(function(){y(m())}):y(m()),s.addEventListener("focusin",C,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",W,{capture:!0,passive:!1}),s.addEventListener("keydown",H,{capture:!0,passive:!1}),o},$=function(){if(i.active)return s.removeEventListener("focusin",C,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",W,!0),s.removeEventListener("keydown",H,!0),o},Oe=function(u){var d=u.some(function(g){var _=Array.from(g.removedNodes);return _.some(function(E){return E===i.mostRecentlyFocusedNode})});d&&y(m())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(Oe):void 0,J=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){A.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),g=l(u,"onPostActivate"),_=l(u,"checkCanFocusTrap");_||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=s.activeElement,d==null||d();var E=function(){_&&f(),j(),J(),g==null||g()};return _?(_(i.containers.concat()).then(E,E),this):(E(),this)},deactivate:function(u){if(!i.active)return this;var d=ot({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,$(),i.active=!1,i.paused=!1,J(),lt.deactivateTrap(n,o);var g=l(d,"onDeactivate"),_=l(d,"onPostDeactivate"),E=l(d,"checkCanReturnFocus"),k=l(d,"returnFocus","returnFocusOnDeactivate");g==null||g();var F=function(){ct(function(){k&&y(x(i.nodeFocusedBeforeActivation)),_==null||_()})};return k&&E?(E(x(i.nodeFocusedBeforeActivation)).then(F,F),this):(F(),this)},pause:function(u){if(i.paused||!i.active)return this;var d=l(u,"onPause"),g=l(u,"onPostPause");return i.paused=!0,d==null||d(),$(),J(),g==null||g(),this},unpause:function(u){if(!i.paused||!i.active)return this;var d=l(u,"onUnpause"),g=l(u,"onPostUnpause");return i.paused=!1,d==null||d(),f(),j(),J(),g==null||g(),this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(g){return typeof g=="string"?s.querySelector(g):g}),i.active&&f(),J(),this}},o.updateContainerElements(e),o};function Os(a,e={}){let t;const{immediate:s,...n}=e,r=se(!1),i=se(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=pe(()=>{const f=Xe(a);return(Array.isArray(f)?f:[f]).map(b=>{const y=Xe(b);return typeof y=="string"?y:Rt(y)}).filter(Ct)});return Ve(m,f=>{f.length&&(t=Fs(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),Mt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class oe{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}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(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{oe.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new oe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,b=>l.push(b),n)}),l.push(c);l.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let Rs=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 oe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[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,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+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,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.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",s=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(r=>{s.every(i=>{if(i.indexOf(r)!==-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 s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),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(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.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 s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!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:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.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:s})})}matchesExclude(e){return oe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=h),e.nodes[y].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;ms(l[i],m),(m,f)=>{e.lastIndex=f,n(m)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,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 s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,b)=>this.opt.filter(b,c,s,m),f=>{m++,s++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}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,s=>{this.unwrapMatches(s)},s=>{const n=oe.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Cs(a){const e=new Rs(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}function Ee(a,e,t,s){function n(r){return r instanceof t?r:new t(function(i){i(r)})}return new(t||(t=Promise))(function(r,i){function o(h){try{c(s.next(h))}catch(m){i(m)}}function l(h){try{c(s.throw(h))}catch(m){i(m)}}function c(h){h.done?r(h.value):n(h.value).then(o,l)}c((s=s.apply(a,[])).next())})}const Ms="ENTRIES",xt="KEYS",St="VALUES",z="";class Ae{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=ae(this._path);if(ae(t)===z)return{done:!1,value:this.result()};const s=e.get(ae(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=ae(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>ae(e)).filter(e=>e!==z).join("")}value(){return ae(this._path).node.get(z)}result(){switch(this._type){case St:return this.value();case xt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const ae=a=>a[a.length-1],As=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===z){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let m=0;mt)continue e}_t(a.get(c),e,t,s,n,h,i,o+c)}};class Z{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Fe(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=Ke(s);for(const i of n.keys())if(i!==z&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new Z(o,e)}}return new Z(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Ls(this._tree,e)}entries(){return new Ae(this,Ms)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return As(this._tree,e,t)}get(e){const t=$e(this._tree,e);return t!==void 0?t.get(z):void 0}has(e){const t=$e(this._tree,e);return t!==void 0&&t.has(z)}keys(){return new Ae(this,xt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Le(this._tree,e).set(z,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Le(this._tree,e);return s.set(z,t(s.get(z))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Le(this._tree,e);let n=s.get(z);return n===void 0&&s.set(z,n=t()),n}values(){return new Ae(this,St)}[Symbol.iterator](){return this.entries()}static from(e){const t=new Z;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return Z.from(Object.entries(e))}}const Fe=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==z&&e.startsWith(s))return t.push([a,s]),Fe(a.get(s),e.slice(s.length),t);return t.push([a,e]),Fe(void 0,"",t)},$e=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==z&&e.startsWith(t))return $e(a.get(t),e.slice(t.length))},Le=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Fe(a,e);if(t!==void 0){if(t.delete(z),t.size===0)Et(s);else if(t.size===1){const[n,r]=t.entries().next().value;Tt(s,n,r)}}},Et=a=>{if(a.length===0)return;const[e,t]=Ke(a);if(e.delete(t),e.size===0)Et(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==z&&Tt(a.slice(0,-1),s,n)}},Tt=(a,e,t)=>{if(a.length===0)return;const[s,n]=Ke(a);s.set(n+e,t),s.delete(n)},Ke=a=>a[a.length-1],Je="or",It="and",Ds="and_not";class le{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Pe:e.autoVacuum;this._options=Object.assign(Object.assign(Object.assign({},ze),e),{autoVacuum:t,searchOptions:Object.assign(Object.assign({},dt),e.searchOptions||{}),autoSuggestOptions:Object.assign(Object.assign({},$s),e.autoSuggestOptions||{})}),this._index=new Z,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=We,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:s,processTerm:n,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const l=this.addDocumentId(o);this.saveStoredFields(l,e);for(const c of r){const h=t(e,c);if(h==null)continue;const m=s(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.addFieldLength(l,f,this._documentCount-1,b);for(const y of m){const x=n(y,c);if(Array.isArray(x))for(const w of x)this.addTerm(f,l,w);else x&&this.addTerm(f,l,x)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,fields:r,idField:i}=this._options,o=n(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const l=this._idToShortId.get(o);if(l==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const c of r){const h=n(e,c);if(h==null)continue;const m=t(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.removeFieldLength(l,f,this._documentCount,b);for(const y of m){const x=s(y,c);if(Array.isArray(x))for(const w of x)this.removeTerm(f,l,w);else x&&this.removeTerm(f,l,x)}}this._storedFields.delete(l),this._documentIds.delete(l),this._idToShortId.delete(o),this._fieldLength.delete(l),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Z,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=We,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}performVacuuming(e,t){return Ee(this,void 0,void 0,function*(){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Be.batchSize,r=e.batchWait||Be.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&(yield new Promise(c=>setTimeout(c,r))),i+=1}this._dirtCount-=s}yield null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null})}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||Pe.minDirtCount,s=s||Pe.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const s=this.executeQuery(e,t),n=[];for(const[r,{score:i,terms:o,match:l}]of s){const c=o.length||1,h={id:this._documentIds.get(r),score:i*c,terms:Object.keys(l),queryTerms:o,match:l};Object.assign(h,this._storedFields.get(r)),(t.filter==null||t.filter(h))&&n.push(h)}return e===le.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||n.sort(ft),n}autoSuggest(e,t={}){t=Object.assign(Object.assign({},this._options.autoSuggestOptions),t);const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(ft),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(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)}static loadJSONAsync(e,t){return Ee(this,void 0,void 0,function*(){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)})}static getDefault(e){if(ze.hasOwnProperty(e))return De(ze,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Se(n),l._fieldLength=Se(r),l._storedFields=Se(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const m=new Map;for(const f of Object.keys(h)){let b=h[f];o===1&&(b=b.ds),m.set(parseInt(f,10),Se(b))}l._index.set(c,m)}return l}static loadJSAsync(e,t){return Ee(this,void 0,void 0,function*(){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=yield _e(n),l._fieldLength=yield _e(r),l._storedFields=yield _e(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of s){const f=new Map;for(const b of Object.keys(m)){let y=m[b];o===1&&(y=y.ds),f.set(parseInt(b,10),yield _e(y))}++c%1e3===0&&(yield Nt(0)),l._index.set(h,f)}return l})}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new le(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new Z,c}executeQuery(e,t={}){if(e===le.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f=Object.assign(Object.assign(Object.assign({},t),e),{queries:void 0}),b=e.queries.map(y=>this.executeQuery(y,f));return this.combineResults(b,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i=Object.assign(Object.assign({tokenize:s,processTerm:n},r),t),{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map(js(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const s=Object.assign(Object.assign({},this._options.searchOptions),t),n=(s.fields||this._options.fields).reduce((x,w)=>Object.assign(Object.assign({},x),{[w]:De(s.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}=Object.assign(Object.assign({},dt.weights),i),m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,n,r,l);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const x=e.fuzzy===!0?.2:e.fuzzy,w=x<1?Math.min(o,Math.round(e.term.length*x)):x;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[x,w]of b){const R=x.length-e.term.length;if(!R)continue;y==null||y.delete(x);const C=h*x.length/(x.length+.3*R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}if(y)for(const x of y.keys()){const[w,R]=y.get(x);if(!R)continue;const C=c*x.length/(x.length+R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,s=Object.assign(Object.assign({},this._options.searchOptions),e);for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Je){if(e.length===0)return new Map;const s=t.toLowerCase(),n=zs[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}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:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],b=r.get(f);if(b==null)continue;let y=b.size;const x=this._avgFieldLength[f];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(f,w,t),y-=1;continue}const R=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!R)continue;const C=b.get(w),K=this._fieldLength.get(w)[f],H=Vs(C,y,this._documentCount,K,x,l),W=s*n*m*R*H,j=c.get(w);if(j){j.score+=W,Bs(j.terms,e);const $=De(j.match,t);$?$.push(h):j.match[t]=[h]}else c.set(w,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,pt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,pt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,zs={[Je]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ht(s.terms,r)}}return a},[It]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ht(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[Ds]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Ps={k:1.2,b:.7,d:.5},Vs=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},js=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},ze={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Ws),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},dt={combineWith:Je,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ps},$s={combineWith:It,prefix:(a,e,t)=>e===t.length-1},Be={batchSize:1e3,batchWait:10},We={minDirtFactor:.1,minDirtCount:20},Pe=Object.assign(Object.assign({},Be),We),Bs=(a,e)=>{a.includes(e)||a.push(e)},ht=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},ft=({score:a},{score:e})=>e-a,pt=()=>new Map,Se=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},_e=a=>Ee(void 0,void 0,void 0,function*(){const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&(yield Nt(0));return e}),Nt=a=>new Promise(e=>setTimeout(e,a)),Ws=/[\n\r\p{Z}\p{P}]+/u;class Ks{constructor(e=10){Re(this,"max");Re(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Js=["aria-owns"],Us={class:"shell"},qs=["title"],Gs={class:"search-actions before"},Hs=["title"],Qs=["placeholder"],Ys={class:"search-actions"},Zs=["title"],Xs=["disabled","title"],en=["id","role","aria-labelledby"],tn=["aria-selected"],sn=["href","aria-label","onMouseenter","onFocusin"],nn={class:"titles"},rn=["innerHTML"],an={class:"title main"},on=["innerHTML"],ln={key:0,class:"excerpt-wrapper"},cn={key:0,class:"excerpt",inert:""},un=["innerHTML"],dn={key:0,class:"no-results"},hn={class:"search-keyboard-shortcuts"},fn=["aria-label"],pn=["aria-label"],vn=["aria-label"],mn=["aria-label"],gn=At({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var F,M;const t=e,s=be(),n=be(),r=be(ns),i=ts(),{activate:o}=Os(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=et(async()=>{var v,p,N,O,P,V,I,L,U;return it(le.loadJSON((N=await((p=(v=r.value)[l.value])==null?void 0:p.call(v)))==null?void 0:N.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=c.value.search)==null?void 0:O.provider)==="local"&&((V=(P=c.value.search.options)==null?void 0:P.miniSearch)==null?void 0:V.searchOptions)},...((I=c.value.search)==null?void 0:I.provider)==="local"&&((U=(L=c.value.search.options)==null?void 0:L.miniSearch)==null?void 0:U.options)}))}),f=pe(()=>{var v,p;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?se(""):Lt("vitepress:local-search-filter",""),b=Dt("vitepress:local-search-detailed-list",((F=c.value.search)==null?void 0:F.provider)==="local"&&((M=c.value.search.options)==null?void 0:M.detailedView)===!0),y=pe(()=>{var v,p,N;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((N=c.value.search.options)==null?void 0:N.detailedView)===!1)}),x=pe(()=>{var p,N,O,P,V,I,L;const v=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((V=(P=(O=(N=v==null?void 0:v.locales)==null?void 0:N[l.value])==null?void 0:O.translations)==null?void 0:P.button)==null?void 0:V.buttonText)||((L=(I=v==null?void 0:v.translations)==null?void 0:I.button)==null?void 0:L.buttonText)||"Search"});zt(()=>{y.value&&(b.value=!1)});const w=be([]),R=se(!1);Ve(f,()=>{R.value=!1});const C=et(async()=>{if(n.value)return it(new Cs(n.value))},null),K=new Ks(16);Pt(()=>[h.value,f.value,b.value],async([v,p,N],O,P)=>{var me,Ue,qe,Ge;(O==null?void 0:O[0])!==v&&K.clear();let V=!1;if(P(()=>{V=!0}),!v)return;w.value=v.search(p).slice(0,16),R.value=!0;const I=N?await Promise.all(w.value.map(B=>H(B.id))):[];if(V)return;for(const{id:B,mod:X}of I){const ee=B.slice(0,B.indexOf("#"));let Q=K.get(ee);if(Q)continue;Q=new Map,K.set(ee,Q);const q=X.default??X;if(q!=null&&q.render||q!=null&&q.setup){const te=Qt(q);te.config.warnHandler=()=>{},te.provide(Yt,i),Object.defineProperties(te.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const He=document.createElement("div");te.mount(He),He.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ce=>{var Ze;const ge=(Ze=ce.querySelector("a"))==null?void 0:Ze.getAttribute("href"),Qe=(ge==null?void 0:ge.startsWith("#"))&&ge.slice(1);if(!Qe)return;let Ye="";for(;(ce=ce.nextElementSibling)&&!/^h[1-6]$/i.test(ce.tagName);)Ye+=ce.outerHTML;Q.set(Qe,Ye)}),te.unmount()}if(V)return}const L=new Set;if(w.value=w.value.map(B=>{const[X,ee]=B.id.split("#"),Q=K.get(X),q=(Q==null?void 0:Q.get(ee))??"";for(const te in B.match)L.add(te);return{...B,text:q}}),await ue(),V)return;await new Promise(B=>{var X;(X=C.value)==null||X.unmark({done:()=>{var ee;(ee=C.value)==null||ee.markRegExp(k(L),{done:B})}})});const U=((me=s.value)==null?void 0:me.querySelectorAll(".result .excerpt"))??[];for(const B of U)(Ue=B.querySelector('mark[data-markjs="true"]'))==null||Ue.scrollIntoView({block:"center"});(Ge=(qe=n.value)==null?void 0:qe.firstElementChild)==null||Ge.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function H(v){const p=Zt(v.slice(0,v.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(p)}}catch(N){return console.error(N),{id:v,mod:{}}}}const W=se(),j=pe(()=>{var v;return((v=f.value)==null?void 0:v.length)<=0});function $(v=!0){var p,N;(p=W.value)==null||p.focus(),v&&((N=W.value)==null||N.select())}Ce(()=>{$()});function Oe(v){v.pointerType==="mouse"&&$()}const A=se(-1),J=se(!1);Ve(w,v=>{A.value=v.length?0:-1,T()});function T(){ue(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}ye("ArrowUp",v=>{v.preventDefault(),A.value--,A.value<0&&(A.value=w.value.length-1),J.value=!0,T()}),ye("ArrowDown",v=>{v.preventDefault(),A.value++,A.value>=w.value.length&&(A.value=0),J.value=!0,T()});const u=Vt();ye("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const p=w.value[A.value];if(v.target instanceof HTMLInputElement&&!p){v.preventDefault();return}p&&(u.go(p.id),t("close"))}),ye("Escape",()=>{t("close")});const g=ss({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"}}});Ce(()=>{window.history.pushState(null,"",null)}),jt("popstate",v=>{v.preventDefault(),t("close")});const _=$t(Bt?document.body:null);Ce(()=>{ue(()=>{_.value=!0,ue().then(()=>o())})}),Wt(()=>{_.value=!1});function E(){f.value="",ue().then(()=>$(!1))}function k(v){return new RegExp([...v].sort((p,N)=>N.length-p.length).map(p=>`(${Xt(p)})`).join("|"),"gi")}return(v,p)=>{var N,O,P,V;return G(),Kt(Ht,{to:"body"},[S("div",{ref_key:"el",ref:s,role:"button","aria-owns":(N=w.value)!=null&&N.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[S("div",{class:"backdrop",onClick:p[0]||(p[0]=I=>v.$emit("close"))}),S("div",Us,[S("form",{class:"search-bar",onPointerup:p[4]||(p[4]=I=>Oe(I)),onSubmit:p[5]||(p[5]=Jt(()=>{},["prevent"]))},[S("label",{title:x.value,id:"localsearch-label",for:"localsearch-input"},p[8]||(p[8]=[S("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,qs),S("div",Gs,[S("button",{class:"back-button",title:D(g)("modal.backButtonTitle"),onClick:p[1]||(p[1]=I=>v.$emit("close"))},p[9]||(p[9]=[S("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,Hs)]),Ut(S("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=I=>Gt(f)?f.value=I:null),placeholder:x.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,Qs),[[qt,D(f)]]),S("div",Ys,[y.value?we("",!0):(G(),Y("button",{key:0,class:tt(["toggle-layout-button",{"detailed-list":D(b)}]),type:"button",title:D(g)("modal.displayDetails"),onClick:p[3]||(p[3]=I=>A.value>-1&&(b.value=!D(b)))},p[10]||(p[10]=[S("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,Zs)),S("button",{class:"clear-button",type:"reset",disabled:j.value,title:D(g)("modal.resetButtonTitle"),onClick:E},p[11]||(p[11]=[S("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,Xs)])],32),S("ul",{ref_key:"resultsEl",ref:n,id:(O=w.value)!=null&&O.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(V=w.value)!=null&&V.length?"localsearch-label":void 0,class:"results",onMousemove:p[7]||(p[7]=I=>J.value=!1)},[(G(!0),Y(nt,null,st(w.value,(I,L)=>(G(),Y("li",{key:I.id,role:"option","aria-selected":A.value===L?"true":"false"},[S("a",{href:I.id,class:tt(["result",{selected:A.value===L}]),"aria-label":[...I.titles,I.title].join(" > "),onMouseenter:U=>!J.value&&(A.value=L),onFocusin:U=>A.value=L,onClick:p[6]||(p[6]=U=>v.$emit("close"))},[S("div",null,[S("div",nn,[p[13]||(p[13]=S("span",{class:"title-icon"},"#",-1)),(G(!0),Y(nt,null,st(I.titles,(U,me)=>(G(),Y("span",{key:me,class:"title"},[S("span",{class:"text",innerHTML:U},null,8,rn),p[12]||(p[12]=S("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),S("span",an,[S("span",{class:"text",innerHTML:I.title},null,8,on)])]),D(b)?(G(),Y("div",ln,[I.text?(G(),Y("div",cn,[S("div",{class:"vp-doc",innerHTML:I.text},null,8,un)])):we("",!0),p[14]||(p[14]=S("div",{class:"excerpt-gradient-bottom"},null,-1)),p[15]||(p[15]=S("div",{class:"excerpt-gradient-top"},null,-1))])):we("",!0)])],42,sn)],8,tn))),128)),D(f)&&!w.value.length&&R.value?(G(),Y("li",dn,[de(he(D(g)("modal.noResultsText"))+' "',1),S("strong",null,he(D(f)),1),p[16]||(p[16]=de('" '))])):we("",!0)],40,en),S("div",hn,[S("span",null,[S("kbd",{"aria-label":D(g)("modal.footer.navigateUpKeyAriaLabel")},p[17]||(p[17]=[S("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,fn),S("kbd",{"aria-label":D(g)("modal.footer.navigateDownKeyAriaLabel")},p[18]||(p[18]=[S("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,pn),de(" "+he(D(g)("modal.footer.navigateText")),1)]),S("span",null,[S("kbd",{"aria-label":D(g)("modal.footer.selectKeyAriaLabel")},p[19]||(p[19]=[S("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,vn),de(" "+he(D(g)("modal.footer.selectText")),1)]),S("span",null,[S("kbd",{"aria-label":D(g)("modal.footer.closeKeyAriaLabel")},"esc",8,mn),de(" "+he(D(g)("modal.footer.closeText")),1)])])])],8,Js)])}}}),_n=es(gn,[["__scopeId","data-v-5b749456"]]);export{_n as default}; diff --git a/dev/assets/chunks/framework.Bwkmg46C.js b/dev/assets/chunks/framework.Bwkmg46C.js new file mode 100644 index 00000000..824c9532 --- /dev/null +++ b/dev/assets/chunks/framework.Bwkmg46C.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.5.4 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function $r(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ee={},Ct=[],Ue=()=>{},Xo=()=>!1,Qt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Dr=e=>e.startsWith("onUpdate:"),fe=Object.assign,jr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},zo=Object.prototype.hasOwnProperty,J=(e,t)=>zo.call(e,t),K=Array.isArray,Tt=e=>Fn(e)==="[object Map]",ui=e=>Fn(e)==="[object Set]",q=e=>typeof e=="function",se=e=>typeof e=="string",rt=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",di=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),hi=Object.prototype.toString,Fn=e=>hi.call(e),Jo=e=>Fn(e).slice(8,-1),pi=e=>Fn(e)==="[object Object]",Vr=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=$r(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Qo=/-(\w)/g,Ne=Hn(e=>e.replace(Qo,(t,n)=>n?n.toUpperCase():"")),Zo=/\B([A-Z])/g,st=Hn(e=>e.replace(Zo,"-$1").toLowerCase()),$n=Hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),bn=Hn(e=>e?`on${$n(e)}`:""),tt=(e,t)=>!Object.is(e,t),wn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},Er=e=>{const t=parseFloat(e);return isNaN(t)?e:t},el=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let ps;const mi=()=>ps||(ps=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ur(e){if(K(e)){const t={};for(let n=0;n{if(n){const r=n.split(nl);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Br(e){let t="";if(se(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),ll=e=>se(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===hi||!q(e.toString))?vi(e)?ll(e.value):JSON.stringify(e,_i,2):String(e),_i=(e,t)=>vi(t)?_i(e,t.value):Tt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[er(r,i)+" =>"]=s,n),{})}:ui(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>er(n))}:rt(t)?er(t):ne(t)&&!K(t)&&!pi(t)?String(t):t,er=(e,t="")=>{var n;return rt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.4 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let be;class cl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=be,!t&&be&&(this.index=(be.scopes||(be.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;Dt;){let t=Dt;for(Dt=void 0;t;){const n=t.nextEffect;if(t.nextEffect=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Si(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xi(e){let t,n=e.depsTail;for(let r=n;r;r=r.prevDep)r.version===-1?(r===n&&(n=r.prevDep),Kr(r),fl(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0;e.deps=t,e.depsTail=n}function Sr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&Ci(t.dep.computed)||t.dep.version!==t.version)return!0;return!!e._dirty}function Ci(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Wt))return;e.globalVersion=Wt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&!Sr(e)){e.flags&=-3;return}const n=Z,r=Le;Z=e,Le=!0;try{Si(e);const s=e.fn(e._value);(t.version===0||tt(s,e._value))&&(e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Z=n,Le=r,xi(e),e.flags&=-3}}function Kr(e){const{dep:t,prevSub:n,nextSub:r}=e;if(n&&(n.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=n,e.nextSub=void 0),t.subs===e&&(t.subs=n),!t.subs&&t.computed){t.computed.flags&=-5;for(let s=t.computed.deps;s;s=s.nextDep)Kr(s)}}function fl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Le=!0;const Ti=[];function it(){Ti.push(Le),Le=!1}function ot(){const e=Ti.pop();Le=e===void 0?!0:e}function gs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Z;Z=void 0;try{t()}finally{Z=n}}}let Wt=0;class Dn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0}track(t){if(!Z||!Le||Z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Z)n=this.activeLink={dep:this,sub:Z,version:this.version,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0,prevActiveLink:void 0},Z.deps?(n.prevDep=Z.depsTail,Z.depsTail.nextDep=n,Z.depsTail=n):Z.deps=Z.depsTail=n,Z.flags&4&&Ai(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Z.depsTail,n.nextDep=void 0,Z.depsTail.nextDep=n,Z.depsTail=n,Z.deps===n&&(Z.deps=r)}return n}trigger(t){this.version++,Wt++,this.notify(t)}notify(t){kr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()}finally{Wr()}}}function Ai(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Ai(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const An=new WeakMap,ht=Symbol(""),xr=Symbol(""),Kt=Symbol("");function ve(e,t,n){if(Le&&Z){let r=An.get(e);r||An.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=new Dn),s.track()}}function Ge(e,t,n,r,s,i){const o=An.get(e);if(!o){Wt++;return}const l=c=>{c&&c.trigger()};if(kr(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&Vr(n);if(c&&n==="length"){const a=Number(r);o.forEach((h,g)=>{(g==="length"||g===Kt||!rt(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(Kt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),Tt(e)&&l(o.get(xr)));break;case"delete":c||(l(o.get(ht)),Tt(e)&&l(o.get(xr)));break;case"set":Tt(e)&&l(o.get(ht));break}}Wr()}function ul(e,t){var n;return(n=An.get(e))==null?void 0:n.get(t)}function bt(e){const t=z(e);return t===e?t:(ve(t,"iterate",Kt),Ie(e)?t:t.map(me))}function jn(e){return ve(e=z(e),"iterate",Kt),e}const dl={__proto__:null,[Symbol.iterator](){return nr(this,Symbol.iterator,me)},concat(...e){return bt(this).concat(...e.map(t=>K(t)?bt(t):t))},entries(){return nr(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return rr(this,"includes",e)},indexOf(...e){return rr(this,"indexOf",e)},join(e){return bt(this).join(e)},lastIndexOf(...e){return rr(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ft(this,"pop")},push(...e){return Ft(this,"push",e)},reduce(e,...t){return ms(this,"reduce",e,t)},reduceRight(e,...t){return ms(this,"reduceRight",e,t)},shift(){return Ft(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ft(this,"splice",e)},toReversed(){return bt(this).toReversed()},toSorted(e){return bt(this).toSorted(e)},toSpliced(...e){return bt(this).toSpliced(...e)},unshift(...e){return Ft(this,"unshift",e)},values(){return nr(this,"values",me)}};function nr(e,t,n){const r=jn(e),s=r[t]();return r!==e&&!Ie(e)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.value&&(i.value=n(i.value)),i}),s}const hl=Array.prototype;function We(e,t,n,r,s,i){const o=jn(e),l=o!==e&&!Ie(e),c=o[t];if(c!==hl[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,r);return l&&s?s(a):a}function ms(e,t,n,r){const s=jn(e);let i=n;return s!==e&&(Ie(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),s[t](i,...r)}function rr(e,t,n){const r=z(e);ve(r,"iterate",Kt);const s=r[t](...n);return(s===-1||s===!1)&&Xr(n[0])?(n[0]=z(n[0]),r[t](...n)):s}function Ft(e,t,n=[]){it(),kr();const r=z(e)[t].apply(e,n);return Wr(),ot(),r}const pl=$r("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(rt));function gl(e){rt(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Oi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?Rl:Li:i?Pi:Ii).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=K(t);if(!s){let c;if(o&&(c=dl[n]))return c;if(n==="hasOwnProperty")return gl}const l=Reflect.get(t,n,ae(t)?t:r);return(rt(n)?Ri.has(n):pl(n))||(s||ve(t,"get",n),i)?l:ae(l)?o&&Vr(n)?l:l.value:ne(l)?s?Bn(l):Un(l):l}}class Mi extends Oi{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Ie(r)&&!vt(r)&&(i=z(i),r=z(r)),!K(t)&&ae(i)&&!ae(r))return c?!1:(i.value=r,!0)}const o=K(t)&&Vr(n)?Number(n)e,Vn=e=>Reflect.getPrototypeOf(e);function ln(e,t,n=!1,r=!1){e=e.__v_raw;const s=z(e),i=z(t);n||(tt(t,i)&&ve(s,"get",t),ve(s,"get",i));const{has:o}=Vn(s),l=r?qr:n?zr:me;if(o.call(s,t))return l(e.get(t));if(o.call(s,i))return l(e.get(i));e!==s&&e.get(t)}function cn(e,t=!1){const n=this.__v_raw,r=z(n),s=z(e);return t||(tt(e,s)&&ve(r,"has",e),ve(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function an(e,t=!1){return e=e.__v_raw,!t&&ve(z(e),"iterate",ht),Reflect.get(e,"size",e)}function ys(e,t=!1){!t&&!Ie(e)&&!vt(e)&&(e=z(e));const n=z(this);return Vn(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function vs(e,t,n=!1){!n&&!Ie(t)&&!vt(t)&&(t=z(t));const r=z(this),{has:s,get:i}=Vn(r);let o=s.call(r,e);o||(e=z(e),o=s.call(r,e));const l=i.call(r,e);return r.set(e,t),o?tt(t,l)&&Ge(r,"set",e,t):Ge(r,"add",e,t),this}function _s(e){const t=z(this),{has:n,get:r}=Vn(t);let s=n.call(t,e);s||(e=z(e),s=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return s&&Ge(t,"delete",e,void 0),i}function bs(){const e=z(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function fn(e,t){return function(r,s){const i=this,o=i.__v_raw,l=z(o),c=t?qr:e?zr:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>r.call(s,c(f),c(a),i))}}function un(e,t,n){return function(...r){const s=this.__v_raw,i=z(s),o=Tt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=s[e](...r),a=n?qr:t?zr:me;return!t&&ve(i,"iterate",c?xr:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function bl(){const e={get(i){return ln(this,i)},get size(){return an(this)},has:cn,add:ys,set:vs,delete:_s,clear:bs,forEach:fn(!1,!1)},t={get(i){return ln(this,i,!1,!0)},get size(){return an(this)},has:cn,add(i){return ys.call(this,i,!0)},set(i,o){return vs.call(this,i,o,!0)},delete:_s,clear:bs,forEach:fn(!1,!0)},n={get(i){return ln(this,i,!0)},get size(){return an(this,!0)},has(i){return cn.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:fn(!0,!1)},r={get(i){return ln(this,i,!0,!0)},get size(){return an(this,!0)},has(i){return cn.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:fn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=un(i,!1,!1),n[i]=un(i,!0,!1),t[i]=un(i,!1,!0),r[i]=un(i,!0,!0)}),[e,n,t,r]}const[wl,El,Sl,xl]=bl();function Gr(e,t){const n=t?e?xl:Sl:e?El:wl;return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(J(n,s)&&s in r?n:r,s,i)}const Cl={get:Gr(!1,!1)},Tl={get:Gr(!1,!0)},Al={get:Gr(!0,!1)};const Ii=new WeakMap,Pi=new WeakMap,Li=new WeakMap,Rl=new WeakMap;function Ol(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ml(e){return e.__v_skip||!Object.isExtensible(e)?0:Ol(Jo(e))}function Un(e){return vt(e)?e:Yr(e,!1,yl,Cl,Ii)}function Il(e){return Yr(e,!1,_l,Tl,Pi)}function Bn(e){return Yr(e,!0,vl,Al,Li)}function Yr(e,t,n,r,s){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const o=Ml(e);if(o===0)return e;const l=new Proxy(e,o===2?r:n);return s.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Ie(e){return!!(e&&e.__v_isShallow)}function Xr(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function En(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const me=e=>ne(e)?Un(e):e,zr=e=>ne(e)?Bn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Ni(e,!1)}function Jr(e){return Ni(e,!0)}function Ni(e,t){return ae(e)?e:new Pl(e,t)}class Pl{constructor(t,n){this.dep=new Dn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Ie(t)||vt(t);t=r?t:z(t),tt(t,n)&&(this._rawValue=t,this._value=r?t:me(t),this.dep.trigger())}}function Fi(e){return ae(e)?e.value:e}const Ll={get:(e,t,n)=>t==="__v_raw"?e:Fi(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ae(s)&&!ae(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Hi(e){return pt(e)?e:new Proxy(e,Ll)}class Nl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Dn,{get:r,set:s}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=s}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Fl(e){return new Nl(e)}class Hl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ul(z(this._object),this._key)}}class $l{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Dl(e,t,n){return ae(e)?e:q(e)?new $l(e):ne(e)&&arguments.length>1?jl(e,t,n):oe(e)}function jl(e,t,n){const r=e[t];return ae(r)?r:new Hl(e,t,n)}class Vl{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Dn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Wt-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){this.flags|=16,Z!==this&&this.dep.notify()}get value(){const t=this.dep.track();return Ci(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ul(e,t,n=!1){let r,s;return q(e)?r=e:(r=e.get,s=e.set),new Vl(r,s,n)}const dn={},Rn=new WeakMap;let ut;function Bl(e,t=!1,n=ut){if(n){let r=Rn.get(n);r||Rn.set(n,r=[]),r.push(e)}}function kl(e,t,n=ee){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>s?m:Ie(m)||s===!1||s===0?qe(m,1):qe(m);let a,h,g,_,b=!1,E=!1;if(ae(e)?(h=()=>e.value,b=Ie(e)):pt(e)?(h=()=>f(e),b=!0):K(e)?(E=!0,b=e.some(m=>pt(m)||Ie(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[_]):e(_)}finally{ut=m}}:h=Ue,t&&s){const m=h,M=s===!0?1/0:s;h=()=>qe(m(),M)}const V=bi(),N=()=>{a.stop(),V&&jr(V.effects,a)};if(i)if(t){const m=t;t=(...M)=>{m(...M),N()}}else{const m=h;h=()=>{m(),N()}}let U=E?new Array(e.length).fill(dn):dn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(s||b||(E?M.some((F,$)=>tt(F,U[$])):tt(M,U))){g&&g();const F=ut;ut=a;try{const $=[M,U===dn?void 0:E&&U[0]===dn?[]:U,_];c?c(t,3,$):t(...$),U=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new wi(h),a.scheduler=o?()=>o(p,!1):p,_=m=>Bl(m,!1,a),g=a.onStop=()=>{const m=Rn.get(a);if(m){if(c)c(m,4);else for(const M of m)M();Rn.delete(a)}},t?r?p(!0):U=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let r=0;r{qe(r,t,n)});else if(pi(e)){for(const r in e)qe(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&qe(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.4 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Zt(e,t,n,r){try{return r?e(...r):e()}catch(s){en(s,t,n)}}function Fe(e,t,n,r){if(q(e)){const s=Zt(e,t,n,r);return s&&di(s)&&s.catch(i=>{en(i,t,n)}),s}if(K(e)){const s=[];for(let i=0;i>>1,s=we[r],i=Gt(s);i=Gt(n)?we.push(e):we.splice(Kl(t),0,e),e.flags|=1,Di()}}function Di(){!qt&&!Cr&&(Cr=!0,Qr=$i.then(ji))}function ql(e){K(e)?Rt.push(...e):Qe&&e.id===-1?Qe.splice(Et+1,0,e):e.flags&1||(Rt.push(e),e.flags|=1),Di()}function ws(e,t,n=qt?je+1:0){for(;nGt(n)-Gt(r));if(Rt.length=0,Qe){Qe.push(...t);return}for(Qe=t,Et=0;Ete.id==null?e.flags&2?-1:1/0:e.id;function ji(e){Cr=!1,qt=!0;try{for(je=0;je{r._d&&Fs(-1);const i=Mn(t);let o;try{o=e(...s)}finally{Mn(i),r._d&&Fs(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function Mf(e,t){if(de===null)return e;const n=zn(de),r=e.dirs||(e.dirs=[]);for(let s=0;se.__isTeleport,jt=e=>e&&(e.disabled||e.disabled===""),Yl=e=>e&&(e.defer||e.defer===""),Es=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Ss=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Tr=(e,t)=>{const n=e&&e.to;return se(n)?t?t(n):null:n},Xl={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:_,querySelector:b,createText:E,createComment:V}}=f,N=jt(t.props);let{shapeFlag:U,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=E(""),F=t.anchor=E("");_(M,n,r),_(F,n,r);const $=(R,v)=>{U&16&&a(p,R,v,s,i,o,l,c)},D=()=>{const R=t.target=Tr(t.props,b),v=ki(R,t,E,_);R&&(o!=="svg"&&Es(R)?o="svg":o!=="mathml"&&Ss(R)&&(o="mathml"),N||($(R,v),Sn(t)))};N&&($(n,F),Sn(t)),Yl(t.props)?Se(D,i):D()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,D=jt(e.props),R=D?n:F,v=D?M:$;if(o==="svg"||Es(F)?o="svg":(o==="mathml"||Ss(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,s,i,o,l),ss(e,t,!0)):c||h(e,t,R,v,s,i,o,l,!1),N)D?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):hn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Tr(t.props,b);L&&hn(t,L,null,f,0)}else D&&hn(t,F,$,f,1);Sn(t)}},remove(e,t,n,{um:r,o:{remove:s}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(s(f),s(a)),i&&s(c),o&16){const _=i||!jt(g);for(let b=0;b{e.isMounted=!0}),zi(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Wi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ki=e=>{const t=e.subTree;return t.component?Ki(t.component):t},Ql={name:"BaseTransition",props:Wi,setup(e,{slots:t}){const n=Xn(),r=Jl();return()=>{const s=t.default&&Yi(t.default(),!0);if(!s||!s.length)return;const i=qi(s),o=z(e),{mode:l}=o;if(r.isLeaving)return sr(i);const c=xs(i);if(!c)return sr(i);let f=Ar(c,o,r,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&xs(a);if(h&&h.type!==ye&&!dt(c,h)&&Ki(n).type!==ye){const g=Ar(h,o,r,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return r.isLeaving=!0,g.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},sr(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(_,b,E)=>{const V=Gi(r,h);V[String(h.key)]=h,_[Ze]=()=>{b(),_[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=E})}return i}}};function qi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const Zl=Ql;function Gi(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 Ar(e,t,n,r,s){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:_,onAfterLeave:b,onLeaveCancelled:E,onBeforeAppear:V,onAppear:N,onAfterAppear:U,onAppearCancelled:p}=t,m=String(e.key),M=Gi(n,e),F=(R,v)=>{R&&Fe(R,r,9,v)},$=(R,v)=>{const L=v[1];F(R,v),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},D={mode:o,persisted:l,beforeEnter(R){let v=c;if(!n.isMounted)if(i)v=V||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(v,[R])},enter(R){let v=f,L=a,x=h;if(!n.isMounted)if(i)v=N||f,L=U||a,x=p||h;else return;let W=!1;const re=R[pn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),D.delayedLeave&&D.delayedLeave(),R[pn]=void 0)};v?$(v,[R,re]):re()},leave(R,v){const L=String(e.key);if(R[pn]&&R[pn](!0),n.isUnmounting)return v();F(g,[R]);let x=!1;const W=R[Ze]=re=>{x||(x=!0,v(),re?F(E,[R]):F(b,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,_?$(_,[R,W]):W()},clone(R){const v=Ar(R,t,n,r,s);return s&&s(v),v}};return D}function sr(e){if(tn(e))return e=nt(e),e.children=null,e}function xs(e){if(!tn(e))return Bi(e.type)&&e.children?qi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(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 Yi(e,t=!1,n){let r=[],s=0;for(let i=0;i1)for(let i=0;iIn(b,t&&(K(t)?t[E]:t),n,r,s));return}if(gt(r)&&!s)return;const i=r.shapeFlag&4?zn(r.component):r.el,o=s?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===ee?l.refs={}:l.refs,h=l.setupState,g=z(h),_=h===ee?()=>!1:b=>J(g,b);if(f!=null&&f!==c&&(se(f)?(a[f]=null,_(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))Zt(c,l,12,[o,a]);else{const b=se(c),E=ae(c);if(b||E){const V=()=>{if(e.f){const N=b?_(c)?h[c]:a[c]:c.value;s?K(N)&&jr(N,i):K(N)?N.includes(i)||N.push(i):b?(a[c]=[i],_(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else b?(a[c]=o,_(c)&&(h[c]=o)):E&&(c.value=o,e.k&&(a[e.k]=o))};o?(V.id=-1,Se(V,n)):V()}}}let Cs=!1;const wt=()=>{Cs||(console.error("Hydration completed but contains mismatches."),Cs=!0)},ec=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",tc=e=>e.namespaceURI.includes("MathML"),gn=e=>{if(e.nodeType===1){if(ec(e))return"svg";if(tc(e))return"mathml"}},xt=e=>e.nodeType===8;function nc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),On(),m._vnode=p;return}h(m.firstChild,p,null,null,null),On(),m._vnode=p},h=(p,m,M,F,$,D=!1)=>{D=D||!!m.dynamicChildren;const R=xt(p)&&p.data==="[",v=()=>E(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:re}=m;let ce=p.nodeType;m.el=p,re===-2&&(D=!1,m.dynamicChildren=null);let j=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=s(""),o(p),p),j=p):j=v():(p.data!==m.children&&(wt(),p.data=m.children),j=i(p));break;case ye:U(p)?(j=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?j=v():j=i(p);break;case Ut:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){j=p;const Y=!m.children.length;for(let B=0;B{D=D||!!m.dynamicChildren;const{type:R,props:v,patchFlag:L,shapeFlag:x,dirs:W,transition:re}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let j=!1;if(U(p)){j=ho(F,re)&&M&&M.vnode.props&&M.vnode.props.appear;const B=p.content.firstChild;j&&re.beforeEnter(B),N(B,p,M),m.el=p=B}if(x&16&&!(v&&(v.innerHTML||v.textContent))){let B=_(p.firstChild,m,p,M,F,$,D);for(;B;){mn(p,1)||wt();const he=B;B=B.nextSibling,l(he)}}else x&8&&p.textContent!==m.children&&(mn(p,0)||wt(),p.textContent=m.children);if(v){if(ce||!D||L&48){const B=p.tagName.includes("-");for(const he in v)(ce&&(he.endsWith("value")||he==="indeterminate")||Qt(he)&&!At(he)||he[0]==="."||B)&&r(p,he,null,v[he],void 0,M)}else if(v.onClick)r(p,"onClick",null,v.onClick,void 0,M);else if(L&4&&pt(v.style))for(const B in v.style)v.style[B]}let Y;(Y=v&&v.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=v&&v.onVnodeMounted)||W||j)&&vo(()=>{Y&&Oe(Y,M,m),j&&re.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},_=(p,m,M,F,$,D,R)=>{R=R||!!m.dynamicChildren;const v=m.children,L=v.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const v=o(p),L=_(i(p),m,v,M,F,$,D);return L&&xt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),v,L),L)},E=(p,m,M,F,$,D)=>{if(mn(p.parentElement,1)||wt(),m.el=null,D){const L=V(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),v=o(p);return l(p),n(null,m,v,R,M,F,gn(v),$),R},V=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&xt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},U=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[a,h]}const Ts="data-allow-mismatch",rc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function mn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Ts);)e=e.parentElement;const n=e&&e.getAttribute(Ts);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(rc[t])}}function sc(e,t){if(xt(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1)t(r);else if(xt(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Pf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,_()),_=()=>{let b;return f||(b=f=t().catch(E=>{if(E=E instanceof Error?E:new Error(String(E)),c)return new Promise((V,N)=>{c(E,()=>V(g()),()=>N(E),h+1)});throw E}).then(E=>b!==f&&f?f:(E&&(E.__esModule||E[Symbol.toStringTag]==="Module")&&(E=E.default),a=E,E)))};return Zr({name:"AsyncComponentWrapper",__asyncLoader:_,__asyncHydrate(b,E,V){const N=i?()=>{const U=i(V,p=>sc(b,p));U&&(E.bum||(E.bum=[])).push(U)}:V;a?N():_().then(()=>!E.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const b=ue;if(es(b),a)return()=>ir(a,b);const E=p=>{f=null,en(p,b,13,!r)};if(l&&b.suspense||rn)return _().then(p=>()=>ir(p,b)).catch(p=>(E(p),()=>r?le(r,{error:p}):null));const V=oe(!1),N=oe(),U=oe(!!s);return s&&setTimeout(()=>{U.value=!1},s),o!=null&&setTimeout(()=>{if(!V.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);E(p),N.value=p}},o),_().then(()=>{V.value=!0,b.parent&&tn(b.parent.vnode)&&Wn(b.parent.update)}).catch(p=>{E(p),N.value=p}),()=>{if(V.value&&a)return ir(a,b);if(N.value&&r)return le(r,{error:N.value});if(n&&!U.value)return le(n)}}})}function ir(e,t){const{ref:n,props:r,children:s,ce:i}=t.vnode,o=le(e,r,s);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const tn=e=>e.type.__isKeepAlive;function ic(e,t){Xi(e,"a",t)}function oc(e,t){Xi(e,"da",t)}function Xi(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(Kn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)tn(s.parent.vnode)&&lc(r,t,n,s),s=s.parent}}function lc(e,t,n,r){const s=Kn(t,e,r,!0);qn(()=>{jr(r[t],s)},n)}function Kn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=nn(n),c=Fe(t,n,e,o);return l(),ot(),c});return r?s.unshift(i):s.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Kn(e,(...r)=>t(...r),n)},cc=Ye("bm"),Pt=Ye("m"),ac=Ye("bu"),fc=Ye("u"),zi=Ye("bum"),qn=Ye("um"),uc=Ye("sp"),dc=Ye("rtg"),hc=Ye("rtc");function pc(e,t=ue){Kn("ec",e,t)}const ts="components";function Lf(e,t){return Qi(ts,e,!0,t)||e}const Ji=Symbol.for("v-ndc");function Nf(e){return se(e)?Qi(ts,e,!1)||e:e||Ji}function Qi(e,t,n=!0,r=!1){const s=de||ue;if(s){const i=s.type;if(e===ts){const l=Zc(i,!1);if(l&&(l===t||l===Ne(t)||l===$n(Ne(t))))return i}const o=As(s[e]||i[e],t)||As(s.appContext[e],t);return!o&&r?i:o}}function As(e,t){return e&&(e[t]||e[Ne(t)]||e[$n(Ne(t))])}function Ff(e,t,n,r){let s;const i=n,o=K(e);if(o||se(e)){const l=o&&pt(e);let c=!1;l&&(c=!Ie(e),e=jn(e)),s=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);s=new Array(l.length);for(let c=0,f=l.length;cLn(t)?!(t.type===ye||t.type===Ee&&!Zi(t.children)):!0)?e:null}function $f(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:bn(r)]=e[r];return n}const Rr=e=>e?So(e)?zn(e):Rr(e.parent):null,Vt=fe(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=>Rr(e.parent),$root:e=>Rr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ns(e),$forceUpdate:e=>e.f||(e.f=()=>{Wn(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>Hc.bind(e)}),or=(e,t)=>e!==ee&&!e.__isScriptSetup&&J(e,t),gc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const _=o[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(or(r,t))return o[t]=1,r[t];if(s!==ee&&J(s,t))return o[t]=2,s[t];if((f=e.propsOptions[0])&&J(f,t))return o[t]=3,i[t];if(n!==ee&&J(n,t))return o[t]=4,n[t];Or&&(o[t]=0)}}const a=Vt[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ee&&J(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,J(g,t))return g[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return or(s,t)?(s[t]=n,!0):r!==ee&&J(r,t)?(r[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let l;return!!n[o]||e!==ee&&J(e,o)||or(t,o)||(l=i[0])&&J(l,o)||J(r,o)||J(Vt,o)||J(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Df(){return mc().slots}function mc(){const e=Xn();return e.setupContext||(e.setupContext=Co(e))}function Rs(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Or=!0;function yc(e){const t=ns(e),n=e.proxy,r=e.ctx;Or=!1,t.beforeCreate&&Os(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:_,updated:b,activated:E,deactivated:V,beforeDestroy:N,beforeUnmount:U,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:D,serverPrefetch:R,expose:v,inheritAttrs:L,components:x,directives:W,filters:re}=t;if(f&&vc(f,r,null),o)for(const Y in o){const B=o[Y];q(B)&&(r[Y]=B.bind(n))}if(s){const Y=s.call(n,n);ne(Y)&&(e.data=Un(Y))}if(Or=!0,i)for(const Y in i){const B=i[Y],he=q(B)?B.bind(n,n):q(B.get)?B.get.bind(n,n):Ue,sn=!q(B)&&q(B.set)?B.set.bind(n):Ue,lt=ie({get:he,set:sn});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)eo(l[Y],r,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(B=>{xc(B,Y[B])})}a&&Os(a,e,"c");function j(Y,B){K(B)?B.forEach(he=>Y(he.bind(n))):B&&Y(B.bind(n))}if(j(cc,h),j(Pt,g),j(ac,_),j(fc,b),j(ic,E),j(oc,V),j(pc,D),j(hc,F),j(dc,$),j(zi,U),j(qn,m),j(uc,R),K(v))if(v.length){const Y=e.exposed||(e.exposed={});v.forEach(B=>{Object.defineProperty(Y,B,{get:()=>n[B],set:he=>n[B]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&es(e)}function vc(e,t,n=Ue){K(e)&&(e=Mr(e));for(const r in e){const s=e[r];let i;ne(s)?"default"in s?i=Mt(s.from||r,s.default,!0):i=Mt(s.from||r):i=Mt(s),ae(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function Os(e,t,n){Fe(K(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function eo(e,t,n,r){let s=r.includes(".")?go(n,r):()=>n[r];if(se(e)){const i=t[e];q(i)&&Be(s,i)}else if(q(e))Be(s,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>eo(i,t,n,r));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(s,i,e)}}function ns(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(f=>Pn(c,f,o,!0)),Pn(c,t,o)),ne(t)&&i.set(t,c),c}function Pn(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&Pn(e,i,n,!0),s&&s.forEach(o=>Pn(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const l=_c[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const _c={data:Ms,props:Is,emits:Is,methods:$t,computed:$t,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:$t,directives:$t,watch:wc,provide:Ms,inject:bc};function Ms(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function bc(e,t){return $t(Mr(e),Mr(t))}function Mr(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(r&&r.proxy):t}}const no={},ro=()=>Object.create(no),so=e=>Object.getPrototypeOf(e)===no;function Cc(e,t,n,r=!1){const s={},i=ro();e.propsDefaults=Object.create(null),io(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Il(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Tc(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=z(s),[c]=e.propsOptions;let f=!1;if((r||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,_]=oo(h,t,!0);fe(o,g),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&r.set(e,Ct),Ct;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",rs=e=>K(e)?e.map(Me):[Me(e)],Rc=(e,t,n)=>{if(t._n)return t;const r=Gl((...s)=>rs(t(...s)),n);return r._c=!1,r},co=(e,t,n)=>{const r=e._ctx;for(const s in e){if(lo(s))continue;const i=e[s];if(q(i))t[s]=Rc(s,i,r);else if(i!=null){const o=rs(i);t[s]=()=>o}}},ao=(e,t)=>{const n=rs(t);e.slots.default=()=>n},fo=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},Oc=(e,t,n)=>{const r=e.slots=ro();if(e.vnode.shapeFlag&32){const s=t._;s?(fo(r,t,n),n&&gi(r,"_",s,!0)):co(t,r)}else t&&ao(e,t)},Mc=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=ee;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:fo(s,t,n):(i=!t.$stable,co(t,s)),o=t}else t&&(ao(e,t),o={default:1});if(i)for(const l in s)!lo(l)&&o[l]==null&&delete s[l]},Se=vo;function Ic(e){return uo(e)}function Pc(e){return uo(e,nc)}function uo(e,t){const n=mi();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:_=Ue,insertStaticContent:b}=e,E=(u,d,y,C=null,w=null,S=null,I=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(C=on(u),$e(u,w,S,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:T,ref:k,shapeFlag:P}=d;switch(T){case mt:V(u,d,y,C);break;case ye:N(u,d,y,C);break;case Ut:u==null&&U(d,y,C,I);break;case Ee:x(u,d,y,C,w,S,I,O,A);break;default:P&1?M(u,d,y,C,w,S,I,O,A):P&6?W(u,d,y,C,w,S,I,O,A):(P&64||P&128)&&T.process(u,d,y,C,w,S,I,O,A,_t)}k!=null&&w&&In(k,u&&u.ref,S,d||u,!d)},V=(u,d,y,C)=>{if(u==null)r(d.el=l(d.children),y,C);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,C)=>{u==null?r(d.el=c(d.children||""),y,C):d.el=u.el},U=(u,d,y,C)=>{[u.el,u.anchor]=b(u.children,d,y,C,u.el,u.anchor)},p=({el:u,anchor:d},y,C)=>{let w;for(;u&&u!==d;)w=g(u),r(u,y,C),u=w;r(d,y,C)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),s(u),u=y;s(d)},M=(u,d,y,C,w,S,I,O,A)=>{d.type==="svg"?I="svg":d.type==="math"&&(I="mathml"),u==null?F(d,y,C,w,S,I,O,A):R(u,d,w,S,I,O,A)},F=(u,d,y,C,w,S,I,O)=>{let A,T;const{props:k,shapeFlag:P,transition:H,dirs:G}=u;if(A=u.el=o(u.type,S,k&&k.is,k),P&8?a(A,u.children):P&16&&D(u.children,A,null,C,w,lr(u,S),I,O),G&&Ve(u,null,C,"created"),$(A,u,u.scopeId,I,C),k){for(const te in k)te!=="value"&&!At(te)&&i(A,te,null,k[te],S,C);"value"in k&&i(A,"value",null,k.value,S),(T=k.onVnodeBeforeMount)&&Oe(T,C,u)}G&&Ve(u,null,C,"beforeMount");const X=ho(w,H);X&&H.beforeEnter(A),r(A,d,y),((T=k&&k.onVnodeMounted)||X||G)&&Se(()=>{T&&Oe(T,C,u),X&&H.enter(A),G&&Ve(u,null,C,"mounted")},w)},$=(u,d,y,C,w)=>{if(y&&_(u,y),C)for(let S=0;S{for(let T=A;T{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:T,dirs:k}=d;A|=u.patchFlag&16;const P=u.props||ee,H=d.props||ee;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(P.innerHTML&&H.innerHTML==null||P.textContent&&H.textContent==null)&&a(O,""),T?v(u.dynamicChildren,T,O,y,C,lr(d,w),S):I||B(u,d,O,null,y,C,lr(d,w),S,!1),A>0){if(A&16)L(O,P,H,y,w);else if(A&2&&P.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",P.style,H.style,w),A&8){const X=d.dynamicProps;for(let te=0;te{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},C)},v=(u,d,y,C,w,S,I)=>{for(let O=0;O{if(d!==y){if(d!==ee)for(const S in d)!At(S)&&!(S in y)&&i(u,S,d[S],null,w,C);for(const S in y){if(At(S))continue;const I=y[S],O=d[S];I!==O&&S!=="value"&&i(u,S,O,I,w,C)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,C,w,S,I,O,A)=>{const T=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:P,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(r(T,y,C),r(k,y,C),D(d.children||[],y,k,w,S,I,O,A)):P>0&&P&64&&H&&u.dynamicChildren?(v(u.dynamicChildren,H,y,w,S,I,O),(d.key!=null||w&&d===w.subTree)&&ss(u,d,!0)):B(u,d,y,k,w,S,I,O,A)},W=(u,d,y,C,w,S,I,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,C,I,A):re(d,y,C,w,S,I,A):ce(u,d,A)},re=(u,d,y,C,w,S,I)=>{const O=u.component=Xc(u,C,w);if(tn(u)&&(O.ctx.renderer=_t),zc(O,!1,I),O.asyncDep){if(w&&w.registerDep(O,j,I),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else j(O,u,d,y,w,S,I)},ce=(u,d,y)=>{const C=d.component=u.component;if(Uc(u,d,y))if(C.asyncDep&&!C.asyncResolved){Y(C,d,y);return}else C.next=d,C.update();else d.el=u.el,C.vnode=d},j=(u,d,y,C,w,S,I)=>{const O=()=>{if(u.isMounted){let{next:P,bu:H,u:G,parent:X,vnode:te}=u;{const Ce=po(u);if(Ce){P&&(P.el=te.el,Y(u,P,I)),Ce.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=P,xe;ct(u,!1),P?(P.el=te.el,Y(u,P,I)):P=te,H&&wn(H),(xe=P.props&&P.props.onVnodeBeforeUpdate)&&Oe(xe,X,P,te),ct(u,!0);const pe=cr(u),Pe=u.subTree;u.subTree=pe,E(Pe,pe,h(Pe.el),on(Pe),u,w,S),P.el=pe.el,Q===null&&Bc(u,pe.el),G&&Se(G,w),(xe=P.props&&P.props.onVnodeUpdated)&&Se(()=>Oe(xe,X,P,te),w)}else{let P;const{el:H,props:G}=d,{bm:X,m:te,parent:Q,root:xe,type:pe}=u,Pe=gt(d);if(ct(u,!1),X&&wn(X),!Pe&&(P=G&&G.onVnodeBeforeMount)&&Oe(P,Q,d),ct(u,!0),H&&Zn){const Ce=()=>{u.subTree=cr(u),Zn(H,u.subTree,u,w,null)};Pe&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Ce):Ce()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Ce=u.subTree=cr(u);E(null,Ce,y,C,u,w,S),d.el=Ce.el}if(te&&Se(te,w),!Pe&&(P=G&&G.onVnodeMounted)){const Ce=d;Se(()=>Oe(P,Q,Ce),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Se(u.a,w),u.isMounted=!0,d=y=C=null}};u.scope.on();const A=u.effect=new wi(O);u.scope.off();const T=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Wn(k),ct(u,!0),T()},Y=(u,d,y)=>{d.component=u;const C=u.vnode.props;u.vnode=d,u.next=null,Tc(u,d.props,C,y),Mc(u,d.children,y),it(),ws(u),ot()},B=(u,d,y,C,w,S,I,O,A=!1)=>{const T=u&&u.children,k=u?u.shapeFlag:0,P=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){sn(T,P,y,C,w,S,I,O,A);return}else if(H&256){he(T,P,y,C,w,S,I,O,A);return}}G&8?(k&16&&Lt(T,w,S),P!==T&&a(y,P)):k&16?G&16?sn(T,P,y,C,w,S,I,O,A):Lt(T,w,S,!0):(k&8&&a(y,""),G&16&&D(P,y,C,w,S,I,O,A))},he=(u,d,y,C,w,S,I,O,A)=>{u=u||Ct,d=d||Ct;const T=u.length,k=d.length,P=Math.min(T,k);let H;for(H=0;Hk?Lt(u,w,S,!0,!1,P):D(d,y,C,w,S,I,O,A,P)},sn=(u,d,y,C,w,S,I,O,A)=>{let T=0;const k=d.length;let P=u.length-1,H=k-1;for(;T<=P&&T<=H;){const G=u[T],X=d[T]=A?et(d[T]):Me(d[T]);if(dt(G,X))E(G,X,y,null,w,S,I,O,A);else break;T++}for(;T<=P&&T<=H;){const G=u[P],X=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,X))E(G,X,y,null,w,S,I,O,A);else break;P--,H--}if(T>P){if(T<=H){const G=H+1,X=GH)for(;T<=P;)$e(u[T],w,S,!0),T++;else{const G=T,X=T,te=new Map;for(T=X;T<=H;T++){const Te=d[T]=A?et(d[T]):Me(d[T]);Te.key!=null&&te.set(Te.key,T)}let Q,xe=0;const pe=H-X+1;let Pe=!1,Ce=0;const Nt=new Array(pe);for(T=0;T=pe){$e(Te,w,S,!0);continue}let De;if(Te.key!=null)De=te.get(Te.key);else for(Q=X;Q<=H;Q++)if(Nt[Q-X]===0&&dt(Te,d[Q])){De=Q;break}De===void 0?$e(Te,w,S,!0):(Nt[De-X]=T+1,De>=Ce?Ce=De:Pe=!0,E(Te,d[De],y,null,w,S,I,O,A),xe++)}const ds=Pe?Lc(Nt):Ct;for(Q=ds.length-1,T=pe-1;T>=0;T--){const Te=X+T,De=d[Te],hs=Te+1{const{el:S,type:I,transition:O,children:A,shapeFlag:T}=u;if(T&6){lt(u.component.subTree,d,y,C);return}if(T&128){u.suspense.move(d,y,C);return}if(T&64){I.move(u,d,y,_t);return}if(I===Ee){r(S,d,y);for(let P=0;PO.enter(S),w);else{const{leave:P,delayLeave:H,afterLeave:G}=O,X=()=>r(S,d,y),te=()=>{P(S,()=>{X(),G&&G()})};H?H(S,X,te):te()}else r(S,d,y)},$e=(u,d,y,C=!1,w=!1)=>{const{type:S,props:I,ref:O,children:A,dynamicChildren:T,shapeFlag:k,patchFlag:P,dirs:H,cacheIndex:G}=u;if(P===-2&&(w=!1),O!=null&&In(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,te=!gt(u);let Q;if(te&&(Q=I&&I.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)Yo(u.component,y,C);else{if(k&128){u.suspense.unmount(y,C);return}X&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,_t,C):T&&!T.hasOnce&&(S!==Ee||P>0&&P&64)?Lt(T,d,y,!1,!0):(S===Ee&&P&384||!w&&k&16)&&Lt(A,d,y),C&&fs(u)}(te&&(Q=I&&I.onVnodeUnmounted)||X)&&Se(()=>{Q&&Oe(Q,d,u),X&&Ve(u,null,d,"unmounted")},y)},fs=u=>{const{type:d,el:y,anchor:C,transition:w}=u;if(d===Ee){Go(y,C);return}if(d===Ut){m(u);return}const S=()=>{s(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:I,delayLeave:O}=w,A=()=>I(y,S);O?O(u.el,S,A):A()}else S()},Go=(u,d)=>{let y;for(;u!==d;)y=g(u),s(u),u=y;s(d)},Yo=(u,d,y)=>{const{bum:C,scope:w,job:S,subTree:I,um:O,m:A,a:T}=u;Ls(A),Ls(T),C&&wn(C),w.stop(),S&&(S.flags|=8,$e(I,u,d,y)),O&&Se(O,d),Se(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Lt=(u,d,y,C=!1,w=!1,S=0)=>{for(let I=S;I{if(u.shapeFlag&6)return on(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Ui];return y?g(y):d};let Jn=!1;const us=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):E(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Jn||(Jn=!0,ws(),On(),Jn=!1)},_t={p:E,um:$e,m:lt,r:fs,mt:re,mc:D,pc:B,pbc:v,n:on,o:e};let Qn,Zn;return t&&([Qn,Zn]=t(_t)),{render:us,hydrate:Qn,createApp:Sc(us,Qn)}}function lr({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 ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ho(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ss(e,t,n=!1){const r=e.children,s=t.children;if(K(r)&&K(s))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function po(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:po(t)}function Ls(e){if(e)for(let t=0;tMt(Nc);function is(e,t){return Gn(e,null,t)}function jf(e,t){return Gn(e,null,{flush:"post"})}function Be(e,t,n){return Gn(e,t,n)}function Gn(e,t,n=ee){const{immediate:r,deep:s,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=Fc();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||r)l.once=!0;else return{stop:Ue,resume:Ue,pause:Ue};const f=ue;l.call=(g,_,b)=>Fe(g,f,_,b);let a=!1;i==="post"?l.scheduler=g=>{Se(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,_)=>{_?g():Wn(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=kl(e,t,l);return c&&c.push(h),h}function Hc(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?go(r,e):()=>r[e]:e.bind(r,r);let i;q(t)?i=t:(i=t.handler,n=t);const o=nn(this),l=Gn(s,i.bind(r),n);return o(),l}function go(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${st(t)}Modifiers`];function Dc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ee;let s=n;const i=t.startsWith("update:"),o=i&&$c(r,t.slice(7));o&&(o.trim&&(s=n.map(a=>se(a)?a.trim():a)),o.number&&(s=n.map(Er)));let l,c=r[l=bn(t)]||r[l=bn(Ne(t))];!c&&i&&(c=r[l=bn(st(t))]),c&&Fe(c,e,6,s);const f=r[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,s)}}function mo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=mo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&r.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&r.set(e,o),o)}function Yn(e,t){return!e||!Qt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,st(t))||J(e,t))}function cr(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:_,ctx:b,inheritAttrs:E}=e,V=Mn(e);let N,U;try{if(n.shapeFlag&4){const m=s||r,M=m;N=Me(f.call(M,m,a,h,_,g,b)),U=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),U=t.props?l:jc(l)}}catch(m){Bt.length=0,en(m,e,1),N=le(ye)}let p=N;if(U&&E!==!1){const m=Object.keys(U),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some(Dr)&&(U=Vc(U,i)),p=nt(p,U,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,Mn(V),N}const jc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qt(n))&&((t||(t={}))[n]=e[n]);return t},Vc=(e,t)=>{const n={};for(const r in e)(!Dr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Uc(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?Ns(r,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function vo(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):ql(e)}const Ee=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Pr(e=!1){Bt.push(Ae=e?null:[])}function kc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let Xt=1;function Fs(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function _o(e){return e.dynamicChildren=Xt>0?Ae||Ct:null,kc(),Xt>0&&Ae&&Ae.push(e),e}function Vf(e,t,n,r,s,i){return _o(wo(e,t,n,r,s,i,!0))}function Lr(e,t,n,r,s){return _o(le(e,t,n,r,s,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const bo=({key:e})=>e??null,xn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function wo(e,t=null,n=null,r=0,s=null,i=e===Ee?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&bo(t),ref:t&&xn(t),scopeId:Vi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:de};return l?(os(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=Wc;function Wc(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===Ji)&&(e=ye),Ln(e)){const l=nt(e,t,!0);return n&&os(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(ea(e)&&(e=e.__vccOpts),t){t=Kc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=Br(l)),ne(c)&&(Xr(c)&&!K(c)&&(c=fe({},c)),t.style=Ur(c))}const o=se(e)?1:yo(e)?128:Bi(e)?64:ne(e)?4:q(e)?2:0;return wo(e,t,n,r,s,o,i,!0)}function Kc(e){return e?Xr(e)||so(e)?fe({},e):e:null}function nt(e,t,n=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?qc(s||{},t):s,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&bo(f),ref:t&&t.ref?n&&i?K(i)?i.concat(xn(t)):[i,xn(t)]:xn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ee?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&Yt(a,c.clone(a)),a}function Eo(e=" ",t=0){return le(mt,null,e,t)}function Uf(e,t){const n=le(Ut,null,e);return n.staticCount=t,n}function Bf(e="",t=!1){return t?(Pr(),Lr(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Ee,null,e.slice()):typeof e=="object"?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function os(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),os(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!so(t)?t._ctx=de:s===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),r&64?(n=16,t=[Eo(t)]):n=8);e.children=t,e.shapeFlag|=n}function qc(...e){const t={};for(let n=0;nue||de;let Nn,Nr;{const e=mi(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};Nn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Nr=t("__VUE_SSR_SETTERS__",n=>rn=n)}const nn=e=>{const t=ue;return Nn(e),e.scope.on(),()=>{e.scope.off(),Nn(t)}},Hs=()=>{ue&&ue.scope.off(),Nn(null)};function So(e){return e.vnode.shapeFlag&4}let rn=!1;function zc(e,t=!1,n=!1){t&&Nr(t);const{props:r,children:s}=e.vnode,i=So(e);Cc(e,r,i,t),Oc(e,s,n);const o=i?Jc(e,t):void 0;return t&&Nr(!1),o}function Jc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,gc);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?Co(e):null,i=nn(e);it();const o=Zt(r,e,0,[e.props,s]);if(ot(),i(),di(o)){if(gt(e)||es(e),o.then(Hs,Hs),t)return o.then(l=>{$s(e,l,t)}).catch(l=>{en(l,e,0)});e.asyncDep=o}else $s(e,o,t)}else xo(e,t)}function $s(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Hi(t)),xo(e,n)}let Ds;function xo(e,t,n){const r=e.type;if(!e.render){if(!t&&Ds&&!r.render){const s=r.template||ns(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,f=fe(fe({isCustomElement:i,delimiters:l},o),c);r.render=Ds(s,f)}}e.render=r.render||Ue}{const s=nn(e);it();try{yc(e)}finally{ot(),s()}}}const Qc={get(e,t){return ve(e,"get",""),e[t]}};function Co(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Qc),slots:e.slots,emit:e.emit,expose:t}}function zn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hi(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vt)return Vt[n](e)},has(t,n){return n in t||n in Vt}})):e.proxy}function Zc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function ea(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Ul(e,t,rn);function Fr(e,t,n){const r=arguments.length;return r===2?ne(t)&&!K(t)?Ln(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ln(n)&&(n=[n]),le(e,t,n))}const ta="3.5.4";/** +* @vue/runtime-dom v3.5.4 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Hr;const js=typeof window<"u"&&window.trustedTypes;if(js)try{Hr=js.createPolicy("vue",{createHTML:e=>e})}catch{}const To=Hr?e=>Hr.createHTML(e):e=>e,na="http://www.w3.org/2000/svg",ra="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,Vs=Ke&&Ke.createElement("template"),sa={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"?Ke.createElementNS(na,e):t==="mathml"?Ke.createElementNS(ra,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{Vs.innerHTML=To(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const l=Vs.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[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",Ht="animation",zt=Symbol("_vtc"),Ao={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},ia=fe({},Wi,Ao),oa=e=>(e.displayName="Transition",e.props=ia,e),kf=oa((e,{slots:t})=>Fr(Zl,la(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Us=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function la(e){const t={};for(const x in e)x in Ao||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,b=ca(s),E=b&&b[0],V=b&&b[1],{onBeforeEnter:N,onEnter:U,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=U,onAppearCancelled:D=p}=t,R=(x,W,re)=>{ft(x,W?a:l),ft(x,W?f:o),re&&re()},v=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,_),ft(x,g),W&&W()},L=x=>(W,re)=>{const ce=x?$:U,j=()=>R(W,x,re);at(ce,[W,j]),Bs(()=>{ft(W,x?c:i),Je(W,x?a:l),Us(ce)||ks(W,r,E,j)})};return fe(t,{onBeforeEnter(x){at(N,[x]),Je(x,i),Je(x,o)},onBeforeAppear(x){at(F,[x]),Je(x,c),Je(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const re=()=>v(x,W);Je(x,h),Je(x,g),ua(),Bs(()=>{x._isLeaving&&(ft(x,h),Je(x,_),Us(m)||ks(x,r,V,re))}),at(m,[x,re])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(D,[x])},onLeaveCancelled(x){v(x),at(M,[x])}})}function ca(e){if(e==null)return null;if(ne(e))return[ar(e.enter),ar(e.leave)];{const t=ar(e);return[t,t]}}function ar(e){return el(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[zt]||(e[zt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[zt];n&&(n.delete(t),n.size||(e[zt]=void 0))}function Bs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let aa=0;function ks(e,t,n,r){const s=e._endId=++aa,i=()=>{s===e._endId&&r()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=fa(e,t);if(!o)return r();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=_=>{_.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[b]||"").split(", "),s=r(`${ze}Delay`),i=r(`${ze}Duration`),o=Ws(s,i),l=r(`${Ht}Delay`),c=r(`${Ht}Duration`),f=Ws(l,c);let a=null,h=0,g=0;t===ze?o>0&&(a=ze,h=o,g=i.length):t===Ht?f>0&&(a=Ht,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:Ht:null,g=a?a===ze?i.length:c.length:0);const _=a===ze&&/\b(transform|all)(,|$)/.test(r(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:_}}function Ws(e,t){for(;e.lengthKs(n)+Ks(e[r])))}function Ks(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ua(){return document.body.offsetHeight}function da(e,t,n){const r=e[zt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const qs=Symbol("_vod"),ha=Symbol("_vsh"),pa=Symbol(""),ga=/(^|;)\s*display\s*:/;function ma(e,t,n){const r=e.style,s=se(n);let i=!1;if(n&&!s){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(r,l,"")}else for(const o in t)n[o]==null&&Cn(r,o,"");for(const o in n)o==="display"&&(i=!0),Cn(r,o,n[o])}else if(s){if(t!==n){const o=r[pa];o&&(n+=";"+o),r.cssText=n,i=ga.test(n)}}else t&&e.removeAttribute("style");qs in e&&(e[qs]=i?r.display:"",e[ha]&&(r.display="none"))}const Gs=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(r=>Cn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=ya(e,t);Gs.test(n)?e.setProperty(st(r),n.replace(Gs,""),"important"):e[r]=n}}const Ys=["Webkit","Moz","ms"],fr={};function ya(e,t){const n=fr[t];if(n)return n;let r=Ne(t);if(r!=="filter"&&r in e)return fr[t]=r;r=$n(r);for(let s=0;sur||(Ea.then(()=>ur=0),ur=Date.now());function xa(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Fe(Ca(r,n.value),t,5,[r])};return n.value=e,n.attached=Sa(),n}function Ca(e,t){if(K(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 Zs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ta=(e,t,n,r,s,i)=>{const o=s==="svg";t==="class"?da(e,r,o):t==="style"?ma(e,n,r):Qt(t)?Dr(t)||ba(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Aa(e,t,r,o))?(va(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&zs(e,t,r,o,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),zs(e,t,r,o))};function Aa(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zs(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 Zs(t)&&se(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!se(n)))}const ei=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>wn(t,n):t};function Ra(e){e.target.composing=!0}function ti(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const dr=Symbol("_assign"),Wf={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[dr]=ei(s);const i=r||s.props&&s.props.type==="number";St(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Er(l)),e[dr](l)}),n&&St(e,"change",()=>{e.value=e.value.trim()}),t||(St(e,"compositionstart",Ra),St(e,"compositionend",ti),St(e,"change",ti))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},o){if(e[dr]=ei(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Er(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},Oa=["ctrl","shift","alt","meta"],Ma={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)=>Oa.some(n=>e[`${n}Key`]&&!t.includes(n))},Kf=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const i=st(s.key);if(t.some(o=>o===i||Ia[o]===i))return e(s)})},Ro=fe({patchProp:Ta},sa);let kt,ni=!1;function Pa(){return kt||(kt=Ic(Ro))}function La(){return kt=ni?kt:Pc(Ro),ni=!0,kt}const Gf=(...e)=>{const t=Pa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Mo(r);if(!s)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=n(s,!1,Oo(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},t},Yf=(...e)=>{const t=La().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Mo(r);if(s)return n(s,!0,Oo(s))},t};function Oo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Mo(e){return se(e)?document.querySelector(e):e}const Xf=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},Na=window.__VP_SITE_DATA__;function ls(e){return bi()?(al(e),!0):!1}function ke(e){return typeof e=="function"?e():Fi(e)}const Io=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const zf=e=>e!=null,Fa=Object.prototype.toString,Ha=e=>Fa.call(e)==="[object Object]",Jt=()=>{},ri=$a();function $a(){var e,t;return Io&&((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 Da(e,t){function n(...r){return new Promise((s,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(i)})}return n}const Po=e=>e();function ja(e,t={}){let n,r,s=Jt;const i=l=>{clearTimeout(l),s(),s=Jt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(r&&(i(r),r=null),Promise.resolve(l())):new Promise((a,h)=>{s=t.rejectOnCancel?h:a,f&&!r&&(r=setTimeout(()=>{n&&i(n),r=null,a(l())},f)),n=setTimeout(()=>{r&&i(r),r=null,a(l())},c)})}}function Va(e=Po){const t=oe(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...i)=>{t.value&&e(...i)};return{isActive:Bn(t),pause:n,resume:r,eventFilter:s}}function Ua(e){return Xn()}function Lo(...e){if(e.length!==1)return Dl(...e);const t=e[0];return typeof t=="function"?Bn(Fl(()=>({get:t,set:Jt}))):oe(t)}function No(e,t,n={}){const{eventFilter:r=Po,...s}=n;return Be(e,Da(r,t),s)}function Ba(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Va(r);return{stop:No(e,t,{...s,eventFilter:i}),pause:o,resume:l,isActive:c}}function cs(e,t=!0,n){Ua()?Pt(e,n):t?e():kn(e)}function Jf(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...i}=n;return No(e,t,{...i,eventFilter:ja(r,{maxWait:s})})}function Qf(e,t,n){let r;ae(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Jt}=r,c=oe(!s),f=o?Jr(t):oe(t);let a=0;return is(async h=>{if(!c.value)return;a++;const g=a;let _=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const b=await e(E=>{h(()=>{i&&(i.value=!1),_||E()})});g===a&&(f.value=b)}catch(b){l(b)}finally{i&&g===a&&(i.value=!1),_=!0}}),s?ie(()=>(c.value=!0,f.value)):f}function Fo(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}const He=Io?window:void 0;function It(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=He):[t,n,r,s]=e,!t)return Jt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,_)=>(a.addEventListener(h,g,_),()=>a.removeEventListener(h,g,_)),c=Be(()=>[Fo(t),ke(s)],([a,h])=>{if(o(),!a)return;const g=Ha(h)?{...h}:h;i.push(...n.flatMap(_=>r.map(b=>l(a,_,b,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return ls(f),f}function ka(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Zf(...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=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=r,c=ka(t);return It(s,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function Wa(){const e=oe(!1),t=Xn();return t&&Pt(()=>{e.value=!0},t),e}function Ka(e){const t=Wa();return ie(()=>(t.value,!!e()))}function Ho(e,t={}){const{window:n=He}=t,r=Ka(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",o):s.removeListener(o))},c=is(()=>{r.value&&(l(),s=n.matchMedia(ke(e)),"addEventListener"in s?s.addEventListener("change",o):s.addListener(o),i.value=s.matches)});return ls(()=>{c(),l(),s=void 0}),i}const yn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},vn="__vueuse_ssr_handlers__",qa=Ga();function Ga(){return vn in yn||(yn[vn]=yn[vn]||{}),yn[vn]}function $o(e,t){return qa[e]||t}function Ya(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 Xa={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()}},si="vueuse-storage";function as(e,t,n,r={}){var s;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:_=v=>{console.error(v)},initOnMounted:b}=r,E=(a?Jr:oe)(typeof t=="function"?t():t);if(!n)try{n=$o("getDefaultStorage",()=>{var v;return(v=He)==null?void 0:v.localStorage})()}catch(v){_(v)}if(!n)return E;const V=ke(t),N=Ya(V),U=(s=r.serializer)!=null?s:Xa[N],{pause:p,resume:m}=Ba(E,()=>F(E.value),{flush:i,deep:o,eventFilter:g});h&&l&&cs(()=>{n instanceof Storage?It(h,"storage",D):It(h,si,R),b&&D()}),b||D();function M(v,L){if(h){const x={key:e,oldValue:v,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(si,{detail:x}))}}function F(v){try{const L=n.getItem(e);if(v==null)M(L,null),n.removeItem(e);else{const x=U.write(v);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){_(L)}}function $(v){const L=v?v.newValue:n.getItem(e);if(L==null)return c&&V!=null&&n.setItem(e,U.write(V)),V;if(!v&&f){const x=U.read(L);return typeof f=="function"?f(x,V):N==="object"&&!Array.isArray(x)?{...V,...x}:x}else return typeof L!="string"?L:U.read(L)}function D(v){if(!(v&&v.storageArea!==n)){if(v&&v.key==null){E.value=V;return}if(!(v&&v.key!==e)){p();try{(v==null?void 0:v.newValue)!==U.write(E.value)&&(E.value=$(v))}catch(L){_(L)}finally{v?kn(m):m()}}}}function R(v){D(v.detail)}return E}function Do(e){return Ho("(prefers-color-scheme: dark)",e)}const za="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Ja(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=Do({window:s}),_=ie(()=>g.value?"dark":"light"),b=c||(o==null?Lo(r):as(o,r,i,{window:s,listenToStorageChanges:l})),E=ie(()=>b.value==="auto"?_.value:b.value),V=$o("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?s==null?void 0:s.document.querySelector(m):Fo(m);if(!$)return;const D=new Set,R=new Set;let v=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?D.add(W):R.add(W)})}else v={key:M,value:F};if(D.size===0&&R.size===0&&v===null)return;let L;a&&(L=s.document.createElement("style"),L.appendChild(document.createTextNode(za)),s.document.head.appendChild(L));for(const x of D)$.classList.add(x);for(const x of R)$.classList.remove(x);v&&$.setAttribute(v.key,v.value),a&&(s.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;V(t,n,(M=h[m])!=null?M:m)}function U(m){e.onChanged?e.onChanged(m,N):N(m)}Be(E,U,{flush:"post",immediate:!0}),cs(()=>U(E.value));const p=ie({get(){return f?b.value:E.value},set(m){b.value=m}});try{return Object.assign(p,{store:b,system:_,state:E})}catch{return p}}function Qa(e={}){const{valueDark:t="dark",valueLight:n="",window:r=He}=e,s=Ja({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>s.system?s.system.value:Do({window:r}).value?"dark":"light");return ie({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?s.value="auto":s.value=c}})}function hr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function eu(e,t,n={}){const{window:r=He}=n;return as(e,t,r==null?void 0:r.localStorage,n)}function jo(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 pr=new WeakMap;function tu(e,t=!1){const n=oe(t);let r=null,s="";Be(Lo(e),l=>{const c=hr(ke(l));if(c){const f=c;if(pr.get(f)||pr.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(s=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=hr(ke(e));!l||n.value||(ri&&(r=It(l,"touchmove",c=>{Za(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=hr(ke(e));!l||!n.value||(ri&&(r==null||r()),l.style.overflow=s,pr.delete(l),n.value=!1)};return ls(o),ie({get(){return n.value},set(l){l?i():o()}})}function nu(e,t,n={}){const{window:r=He}=n;return as(e,t,r==null?void 0:r.sessionStorage,n)}function ru(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const r=oe(t.scrollX),s=oe(t.scrollY),i=ie({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return It(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function su(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(r),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),cs(f),It("resize",f,{passive:!0}),s){const a=Ho("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const gr={BASE_URL:"/YAXArrays.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var mr={};const Vo=/^(?:[a-z]+:|\/\/)/i,ef="vitepress-theme-appearance",tf=/#.*$/,nf=/[?#].*$/,rf=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Uo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function sf(e,t,n=!1){if(t===void 0)return!1;if(e=ii(`/${e}`),n)return new RegExp(t).test(e);if(ii(t)!==e)return!1;const r=t.match(tf);return r?(ge?location.hash:"")===r[0]:!0}function ii(e){return decodeURI(e).replace(nf,"").replace(rf,"$1")}function of(e){return Vo.test(e)}function lf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!of(n)&&sf(t,`/${n}/`,!0))||"root"}function cf(e,t){var r,s,i,o,l,c,f;const n=lf(e,t);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:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:ko(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Bo(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=af(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function af(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ff(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([i,o])=>i===n&&o[s[0]]===s[1])}function ko(e,t){return[...e.filter(n=>!ff(t,n)),...t]}const uf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,df=/^[a-z]:/i;function oi(e){const t=df.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(uf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const yr=new Set;function hf(e){if(yr.size===0){const n=typeof process=="object"&&(mr==null?void 0:mr.VITE_EXTRA_EXTENSIONS)||(gr==null?void 0:gr.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=>yr.add(r))}const t=e.split(".").pop();return t==null||!yr.has(t.toLowerCase())}function iu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const pf=Symbol(),yt=Jr(Na);function ou(e){const t=ie(()=>cf(yt.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?oe(!0):n?Qa({storageKey:ef,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),s=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Be(()=>e.data,()=>{s.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Bo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:r,hash:ie(()=>s.value)}}function gf(){const e=Mt(pf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function mf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function li(e){return Vo.test(e)||!e.startsWith("/")?e:mf(yt.value.base,e)}function yf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/YAXArrays.jl/dev/";t=oi(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=`./${oi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Tn=[];function lu(e){Tn.push(e),qn(()=>{Tn=Tn.filter(t=>t!==e)})}function vf(){let e=yt.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=ci(e,n);else if(Array.isArray(e))for(const r of e){const s=ci(r,n);if(s){t=s;break}}return t}function ci(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const _f=Symbol(),Wo="http://a.com",bf=()=>({path:"/",component:null,data:Uo});function cu(e,t){const n=Un(bf()),r={route:n,go:s};async function s(l=ge?location.href:"/"){var c,f;l=vr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(ge&&l!==vr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=r.onAfterRouteChanged)==null?void 0:f.call(r,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=r.onBeforePageLoad)==null?void 0:g.call(r,l))===!1)return;const a=new URL(l,Wo),h=i=a.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:b,__pageData:E}=_;if(!b)throw new Error(`Invalid route component: ${b}`);n.path=ge?h:li(h),n.component=En(b),n.data=En(E),ge&&kn(()=>{let V=yt.value.base+E.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!V.endsWith("/")&&(V+=".html"),V!==a.pathname&&(a.pathname=V,l=V+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(U){console.warn(U)}if(N){ai(N,a.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!f)try{const b=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await b.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:li(h),n.component=t?En(t):null;const b=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Uo,relativePath:b}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:_,search:b}=new URL(f,c.baseURI),E=new URL(location.href);h===E.origin&&hf(g)&&(l.preventDefault(),g===E.pathname&&b===E.search?(_!==E.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:E.href,newURL:a}))),_?ai(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(vr(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 wf(){const e=Mt(_f);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ko(){return wf().route}function ai(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(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(r).paddingTop,10),o=window.scrollY+r.getBoundingClientRect().top-vf()+i;requestAnimationFrame(s)}}function vr(e){const t=new URL(e,Wo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.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 _r=()=>Tn.forEach(e=>e()),au=Zr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ko(),{site:n}=gf();return()=>Fr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Fr(t.component,{onVnodeMounted:_r,onVnodeUpdated:_r,onVnodeUnmounted:_r}):"404 Page Not Found"])}}),Ef="modulepreload",Sf=function(e){return"/YAXArrays.jl/dev/"+e},fi={},fu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),o=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=Sf(l),l in fi)return;fi[l]=!0;const c=l.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const a=document.createElement("link");if(a.rel=c?"stylesheet":Ef,c||(a.as="script"),a.crossOrigin="",a.href=l,o&&a.setAttribute("nonce",o),document.head.appendChild(a),c)return new Promise((h,g)=>{a.addEventListener("load",h),a.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},uu=Zr({setup(e,{slots:t}){const n=oe(!1);return Pt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function du(){ge&&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 i=r.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[s];if(!l||o===l)return;o.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 hu(){if(ge){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,i=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),xf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function xf(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 pu(e,t){let n=!0,r=[];const s=i=>{if(n){n=!1,i.forEach(l=>{const c=br(l);for(const f of document.head.children)if(f.isEqualNode(c)){r.push(f);return}});return}const o=i.map(br);r.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete r[c])}),o.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...o].filter(Boolean)};is(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Bo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):br(["meta",{name:"description",content:a}]),s(ko(o.head,Tf(c)))})}function br([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 Cf(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Tf(e){return e.filter(t=>!Cf(t))}const wr=new Set,qo=()=>document.createElement("link"),Af=e=>{const t=qo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Rf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Of=ge&&(_n=qo())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Af:Rf;function gu(){if(!ge||!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(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!wr.has(c)){wr.add(c);const f=yf(c);f&&Of(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):wr.add(l))})})};Pt(r);const s=Ko();Be(()=>s.path,r),qn(()=>{n&&n.disconnect()})}export{zi as $,vf as A,Lf as B,Ff as C,Jr as D,lu as E,Ee as F,le as G,Nf as H,Vo as I,Ko as J,qc as K,Mt as L,su as M,Ur as N,Zf as O,kn as P,ru as Q,ge as R,Bn as S,kf as T,Pf as U,fu as V,tu as W,xc as X,$f as Y,qf as Z,Xf as _,Eo as a,Kf as a0,Df as a1,Uf as a2,Un as a3,Dl as a4,Fr as a5,pu as a6,_f as a7,ou as a8,pf as a9,au as aa,uu as ab,yt as ac,Yf as ad,cu as ae,yf as af,gu as ag,hu as ah,du as ai,ke as aj,Fo as ak,zf as al,ls as am,Qf as an,nu as ao,eu as ap,Jf as aq,wf as ar,It as as,Mf as at,Wf as au,ae as av,If as aw,En as ax,Gf as ay,iu as az,Lr as b,Vf as c,Zr as d,Bf as e,hf as f,li as g,ie as h,of as i,wo as j,Fi as k,sf as l,Ho as m,Br as n,Pr as o,oe as p,Be as q,Hf as r,is as s,ll as t,gf as u,Pt as v,Gl as w,qn as x,jf as y,fc as z}; diff --git a/dev/assets/chunks/framework._h4tgM90.js b/dev/assets/chunks/framework._h4tgM90.js deleted file mode 100644 index f3012ffe..00000000 --- a/dev/assets/chunks/framework._h4tgM90.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* @vue/shared v3.4.38 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function wr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ne={},yt=[],Ae=()=>{},Mi=()=>!1,Kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Er=e=>e.startsWith("onUpdate:"),fe=Object.assign,Cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,z=(e,t)=>Ii.call(e,t),k=Array.isArray,_t=e=>Tn(e)==="[object Map]",Xs=e=>Tn(e)==="[object Set]",q=e=>typeof e=="function",ie=e=>typeof e=="string",Qe=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Ys=e=>(Z(e)||q(e))&&q(e.then)&&q(e.catch),zs=Object.prototype.toString,Tn=e=>zs.call(e),Pi=e=>Tn(e).slice(8,-1),Js=e=>Tn(e)==="[object Object]",Sr=e=>ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,vt=wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),xn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ni=/-(\w)/g,Le=xn(e=>e.replace(Ni,(t,n)=>n?n.toUpperCase():"")),Fi=/\B([A-Z])/g,Ze=xn(e=>e.replace(Fi,"-$1").toLowerCase()),An=xn(e=>e.charAt(0).toUpperCase()+e.slice(1)),fn=xn(e=>e?`on${An(e)}`:""),ze=(e,t)=>!Object.is(e,t),dn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},cr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$i=e=>{const t=ie(e)?Number(e):NaN;return isNaN(t)?e:t};let Qr;const Zs=()=>Qr||(Qr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Tr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(ji);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function xr(e){let t="";if(ie(e))t=e;else if(k(e))for(let n=0;n!!(e&&e.__v_isRef===!0),ki=e=>ie(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===zs||!q(e.toString))?to(e)?ki(e.value):JSON.stringify(e,no,2):String(e),no=(e,t)=>to(t)?no(e,t.value):_t(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[kn(r,o)+" =>"]=s,n),{})}:Xs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>kn(n))}:Qe(t)?kn(t):Z(t)&&!k(t)&&!Js(t)?String(t):t,kn=(e,t="")=>{var n;return Qe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.4.38 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ee;class Ki{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ee,!t&&Ee&&(this.index=(Ee.scopes||(Ee.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ee;try{return Ee=this,t()}finally{Ee=n}}}on(){Ee=this}off(){Ee=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),tt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ct;try{return Xe=!0,ct=this,this._runnings++,Zr(this),this.fn()}finally{es(this),this._runnings--,ct=n,Xe=t}}stop(){this.active&&(Zr(this),es(this),this.onStop&&this.onStop(),this.active=!1)}}function Gi(e){return e.value}function Zr(e){e._trackId++,e._depsLength=0}function es(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},yn=new WeakMap,at=Symbol(""),fr=Symbol("");function be(e,t,n){if(Xe&&ct){let r=yn.get(e);r||yn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=co(()=>r.delete(n))),io(ct,s)}}function Ve(e,t,n,r,s,o){const i=yn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((u,f)=>{(f==="length"||!Qe(f)&&f>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?Sr(n)&&l.push(i.get("length")):(l.push(i.get(at)),_t(e)&&l.push(i.get(fr)));break;case"delete":k(e)||(l.push(i.get(at)),_t(e)&&l.push(i.get(fr)));break;case"set":_t(e)&&l.push(i.get(at));break}Rr();for(const c of l)c&&lo(c,4);Or()}function Xi(e,t){const n=yn.get(e);return n&&n.get(t)}const Yi=wr("__proto__,__v_isRef,__isVue"),ao=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qe)),ts=zi();function zi(){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){et(),Rr();const r=J(this)[t].apply(this,n);return Or(),tt(),r}}),e}function Ji(e){Qe(e)||(e=String(e));const t=J(this);return be(t,"has",e),t.hasOwnProperty(e)}class uo{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?ul:go:o?po:ho).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&z(ts,n))return Reflect.get(ts,n,r);if(n==="hasOwnProperty")return Ji}const l=Reflect.get(t,n,r);return(Qe(n)?ao.has(n):Yi(n))||(s||be(t,"get",n),o)?l:he(l)?i&&Sr(n)?l:l.value:Z(l)?s?Ln(l):On(l):l}}class fo extends uo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=dt(o);if(!Tt(r)&&!dt(r)&&(o=J(o),r=J(r)),!k(t)&&he(o)&&!he(r))return c?!1:(o.value=r,!0)}const i=k(t)&&Sr(n)?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function Jt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(ze(t,o)&&be(s,"get",t),be(s,"get",o));const{has:i}=Rn(s),l=r?Lr:n?Pr:jt;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 Qt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(ze(e,s)&&be(r,"has",e),be(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Zt(e,t=!1){return e=e.__v_raw,!t&&be(J(e),"iterate",at),Reflect.get(e,"size",e)}function ns(e,t=!1){!t&&!Tt(e)&&!dt(e)&&(e=J(e));const n=J(this);return Rn(n).has.call(n,e)||(n.add(e),Ve(n,"add",e,e)),this}function rs(e,t,n=!1){!n&&!Tt(t)&&!dt(t)&&(t=J(t));const r=J(this),{has:s,get:o}=Rn(r);let i=s.call(r,e);i||(e=J(e),i=s.call(r,e));const l=o.call(r,e);return r.set(e,t),i?ze(t,l)&&Ve(r,"set",e,t):Ve(r,"add",e,t),this}function ss(e){const t=J(this),{has:n,get:r}=Rn(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&&Ve(t,"delete",e,void 0),o}function os(){const e=J(this),t=e.size!==0,n=e.clear();return t&&Ve(e,"clear",void 0,void 0),n}function en(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Lr:e?Pr:jt;return!e&&be(l,"iterate",at),i.forEach((u,f)=>r.call(s,c(u),c(f),o))}}function tn(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=_t(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=s[e](...r),f=n?Lr:t?Pr:jt;return!t&&be(o,"iterate",c?fr:at),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function nl(){const e={get(o){return Jt(this,o)},get size(){return Zt(this)},has:Qt,add:ns,set:rs,delete:ss,clear:os,forEach:en(!1,!1)},t={get(o){return Jt(this,o,!1,!0)},get size(){return Zt(this)},has:Qt,add(o){return ns.call(this,o,!0)},set(o,i){return rs.call(this,o,i,!0)},delete:ss,clear:os,forEach:en(!1,!0)},n={get(o){return Jt(this,o,!0)},get size(){return Zt(this,!0)},has(o){return Qt.call(this,o,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:en(!0,!1)},r={get(o){return Jt(this,o,!0,!0)},get size(){return Zt(this,!0)},has(o){return Qt.call(this,o,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:en(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=tn(o,!1,!1),n[o]=tn(o,!0,!1),t[o]=tn(o,!1,!0),r[o]=tn(o,!0,!0)}),[e,n,t,r]}const[rl,sl,ol,il]=nl();function Mr(e,t){const n=t?e?il:ol:e?sl:rl;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(z(n,s)&&s in r?n:r,s,o)}const ll={get:Mr(!1,!1)},cl={get:Mr(!1,!0)},al={get:Mr(!0,!1)};const ho=new WeakMap,po=new WeakMap,go=new WeakMap,ul=new WeakMap;function fl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dl(e){return e.__v_skip||!Object.isExtensible(e)?0:fl(Pi(e))}function On(e){return dt(e)?e:Ir(e,!1,Zi,ll,ho)}function hl(e){return Ir(e,!1,tl,cl,po)}function Ln(e){return Ir(e,!0,el,al,go)}function Ir(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=dl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function bt(e){return dt(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function Tt(e){return!!(e&&e.__v_isShallow)}function mo(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function hn(e){return Object.isExtensible(e)&&Qs(e,"__v_skip",!0),e}const jt=e=>Z(e)?On(e):e,Pr=e=>Z(e)?Ln(e):e;class yo{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 Ar(()=>t(this._value),()=>It(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())&&It(t,4),Nr(t),t.effect._dirtyLevel>=2&&It(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function pl(e,t,n=!1){let r,s;const o=q(e);return o?(r=e,s=Ae):(r=e.get,s=e.set),new yo(r,s,o||!s,n)}function Nr(e){var t;Xe&&ct&&(e=J(e),io(ct,(t=e.dep)!=null?t:e.dep=co(()=>e.dep=void 0,e instanceof yo?e:void 0)))}function It(e,t=4,n,r){e=J(e);const s=e.dep;s&&lo(s,t)}function he(e){return!!(e&&e.__v_isRef===!0)}function oe(e){return _o(e,!1)}function Fr(e){return _o(e,!0)}function _o(e,t){return he(e)?e:new gl(e,t)}class gl{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:jt(t)}get value(){return Nr(this),this._value}set value(t){const n=this.__v_isShallow||Tt(t)||dt(t);t=n?t:J(t),ze(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:jt(t),It(this,4))}}function vo(e){return he(e)?e.value:e}const ml={get:(e,t,n)=>vo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return he(s)&&!he(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function bo(e){return bt(e)?e:new Proxy(e,ml)}class yl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Nr(this),()=>It(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function _l(e){return new yl(e)}class vl{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 Xi(J(this._object),this._key)}}class bl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function wl(e,t,n){return he(e)?e:q(e)?new bl(e):Z(e)&&arguments.length>1?El(e,t,n):oe(e)}function El(e,t,n){const r=e[t];return he(r)?r:new vl(e,t,n)}/** -* @vue/runtime-core v3.4.38 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ye(e,t,n,r){try{return r?e(...r):e()}catch(s){Wt(s,t,n)}}function Re(e,t,n,r){if(q(e)){const s=Ye(e,t,n,r);return s&&Ys(s)&&s.catch(o=>{Wt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=ge[r],o=Dt(s);oFe&&ge.splice(t,1)}function xl(e){k(e)?wt.push(...e):(!Ke||!Ke.includes(e,e.allowRecurse?it+1:it))&&wt.push(e),Eo()}function is(e,t,n=Vt?Fe+1:0){for(;nDt(n)-Dt(r));if(wt.length=0,Ke){Ke.push(...t);return}for(Ke=t,it=0;ite.id==null?1/0:e.id,Al=(e,t)=>{const n=Dt(e)-Dt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Co(e){dr=!1,Vt=!0,ge.sort(Al);try{for(Fe=0;Fe{r._d&&vs(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&vs(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function au(e,t){if(ue===null)return e;const n=Vn(ue),r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Oo(()=>{e.isUnmounting=!0}),e}const Se=[Function,Array],So={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Se,onEnter:Se,onAfterEnter:Se,onEnterCancelled:Se,onBeforeLeave:Se,onLeave:Se,onAfterLeave:Se,onLeaveCancelled:Se,onBeforeAppear:Se,onAppear:Se,onAfterAppear:Se,onAppearCancelled:Se},To=e=>{const t=e.subTree;return t.component?To(t.component):t},Ll={name:"BaseTransition",props:So,setup(e,{slots:t}){const n=jn(),r=Ol();return()=>{const s=t.default&&Ao(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const m of s)if(m.type!==ye){o=m;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return Kn(o);const c=ls(o);if(!c)return Kn(o);let u=hr(c,i,r,n,m=>u=m);bn(c,u);const f=n.subTree,h=f&&ls(f);if(h&&h.type!==ye&&!lt(c,h)&&To(n).type!==ye){const m=hr(h,i,r,n);if(bn(h,m),l==="out-in"&&c.type!==ye)return r.isLeaving=!0,m.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Kn(o);l==="in-out"&&c.type!==ye&&(m.delayLeave=(_,w,O)=>{const U=xo(r,h);U[String(h.key)]=h,_[We]=()=>{w(),_[We]=void 0,delete u.delayedLeave},u.delayedLeave=O})}return o}}},Ml=Ll;function xo(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 hr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:m,onLeave:_,onAfterLeave:w,onLeaveCancelled:O,onBeforeAppear:U,onAppear:W,onAfterAppear:H,onAppearCancelled:p}=t,y=String(e.key),I=xo(n,e),x=(M,v)=>{M&&Re(M,r,9,v)},F=(M,v)=>{const P=v[1];x(M,v),k(M)?M.every(S=>S.length<=1)&&P():M.length<=1&&P()},V={mode:i,persisted:l,beforeEnter(M){let v=c;if(!n.isMounted)if(o)v=U||c;else return;M[We]&&M[We](!0);const P=I[y];P&<(e,P)&&P.el[We]&&P.el[We](),x(v,[M])},enter(M){let v=u,P=f,S=h;if(!n.isMounted)if(o)v=W||u,P=H||f,S=p||h;else return;let K=!1;const ee=M[nn]=re=>{K||(K=!0,re?x(S,[M]):x(P,[M]),V.delayedLeave&&V.delayedLeave(),M[nn]=void 0)};v?F(v,[M,ee]):ee()},leave(M,v){const P=String(e.key);if(M[nn]&&M[nn](!0),n.isUnmounting)return v();x(m,[M]);let S=!1;const K=M[We]=ee=>{S||(S=!0,v(),ee?x(O,[M]):x(w,[M]),M[We]=void 0,I[P]===e&&delete I[P])};I[P]=e,_?F(_,[M,K]):K()},clone(M){const v=hr(M,t,n,r,s);return s&&s(v),v}};return V}function Kn(e){if(qt(e))return e=Je(e),e.children=null,e}function ls(e){if(!qt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function bn(e,t){e.shapeFlag&6&&e.component?bn(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 Ao(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 uu(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,u,f=0;const h=()=>(f++,c=null,m()),m=()=>{let _;return c||(_=c=t().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),l)return new Promise((O,U)=>{l(w,()=>O(h()),()=>U(w),f+1)});throw w}).then(w=>_!==c&&c?c:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),u=w,w)))};return Hr({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return u},setup(){const _=ae;if(u)return()=>Wn(u,_);const w=H=>{c=null,Wt(H,_,13,!r)};if(i&&_.suspense||Xt)return m().then(H=>()=>Wn(H,_)).catch(H=>(w(H),()=>r?le(r,{error:H}):null));const O=oe(!1),U=oe(),W=oe(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!O.value&&!U.value){const H=new Error(`Async component timed out after ${o}ms.`);w(H),U.value=H}},o),m().then(()=>{O.value=!0,_.parent&&qt(_.parent.vnode)&&(_.parent.effect.dirty=!0,In(_.parent.update))}).catch(H=>{w(H),U.value=H}),()=>{if(O.value&&u)return Wn(u,_);if(U.value&&r)return le(r,{error:U.value});if(n&&!W.value)return le(n)}}})}function Wn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=le(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const qt=e=>e.type.__isKeepAlive;function Il(e,t){Ro(e,"a",t)}function Pl(e,t){Ro(e,"da",t)}function Ro(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Nn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)qt(s.parent.vnode)&&Nl(r,t,n,s),s=s.parent}}function Nl(e,t,n,r){const s=Nn(t,e,r,!0);Fn(()=>{Cr(r[t],s)},n)}function Nn(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{et();const l=Gt(n),c=Re(t,n,e,i);return l(),tt(),c});return r?s.unshift(o):s.push(o),o}}const De=e=>(t,n=ae)=>{(!Xt||e==="sp")&&Nn(e,(...r)=>t(...r),n)},Fl=De("bm"),At=De("m"),$l=De("bu"),Hl=De("u"),Oo=De("bum"),Fn=De("um"),jl=De("sp"),Vl=De("rtg"),Dl=De("rtc");function Ul(e,t=ae){Nn("ec",e,t)}const jr="components";function fu(e,t){return Mo(jr,e,!0,t)||e}const Lo=Symbol.for("v-ndc");function du(e){return ie(e)?Mo(jr,e,!1)||e:e||Lo}function Mo(e,t,n=!0,r=!1){const s=ue||ae;if(s){const o=s.type;if(e===jr){const l=Pc(o,!1);if(l&&(l===t||l===Le(t)||l===An(Le(t))))return o}const i=cs(s[e]||o[e],t)||cs(s.appContext[e],t);return!i&&r?o:i}}function cs(e,t){return e&&(e[t]||e[Le(t)]||e[An(Le(t))])}function hu(e,t,n,r){let s;const o=n;if(k(e)||ie(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;lCn(t)?!(t.type===ye||t.type===ve&&!Io(t.children)):!0)?e:null}function gu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:fn(r)]=e[r];return n}const pr=e=>e?oi(e)?Vn(e):pr(e.parent):null,Pt=fe(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=>pr(e.parent),$root:e=>pr(e.root),$emit:e=>e.emit,$options:e=>Vr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,In(e.update)}),$nextTick:e=>e.n||(e.n=Mn.bind(e.proxy)),$watch:e=>gc.bind(e)}),qn=(e,t)=>e!==ne&&!e.__isScriptSetup&&z(e,t),Bl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(qn(r,t))return i[t]=1,r[t];if(s!==ne&&z(s,t))return i[t]=2,s[t];if((u=e.propsOptions[0])&&z(u,t))return i[t]=3,o[t];if(n!==ne&&z(n,t))return i[t]=4,n[t];gr&&(i[t]=0)}}const f=Pt[t];let h,m;if(f)return t==="$attrs"&&be(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ne&&z(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,z(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return qn(s,t)?(s[t]=n,!0):r!==ne&&z(r,t)?(r[t]=n,!0):z(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!==ne&&z(e,i)||qn(t,i)||(l=o[0])&&z(l,i)||z(r,i)||z(Pt,i)||z(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function mu(){return kl().slots}function kl(){const e=jn();return e.setupContext||(e.setupContext=li(e))}function as(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let gr=!0;function Kl(e){const t=Vr(e),n=e.proxy,r=e.ctx;gr=!1,t.beforeCreate&&us(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:u,created:f,beforeMount:h,mounted:m,beforeUpdate:_,updated:w,activated:O,deactivated:U,beforeDestroy:W,beforeUnmount:H,destroyed:p,unmounted:y,render:I,renderTracked:x,renderTriggered:F,errorCaptured:V,serverPrefetch:M,expose:v,inheritAttrs:P,components:S,directives:K,filters:ee}=t;if(u&&Wl(u,r,null),i)for(const Y in i){const B=i[Y];q(B)&&(r[Y]=B.bind(n))}if(s){const Y=s.call(n,n);Z(Y)&&(e.data=On(Y))}if(gr=!0,o)for(const Y in o){const B=o[Y],de=q(B)?B.bind(n,n):q(B.get)?B.get.bind(n,n):Ae,Yt=!q(B)&&q(B.set)?B.set.bind(n):Ae,nt=se({get:de,set:Yt});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Ie=>nt.value=Ie})}if(l)for(const Y in l)Po(l[Y],r,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(B=>{Jl(B,Y[B])})}f&&us(f,e,"c");function D(Y,B){k(B)?B.forEach(de=>Y(de.bind(n))):B&&Y(B.bind(n))}if(D(Fl,h),D(At,m),D($l,_),D(Hl,w),D(Il,O),D(Pl,U),D(Ul,V),D(Dl,x),D(Vl,F),D(Oo,H),D(Fn,y),D(jl,M),k(v))if(v.length){const Y=e.exposed||(e.exposed={});v.forEach(B=>{Object.defineProperty(Y,B,{get:()=>n[B],set:de=>n[B]=de})})}else e.exposed||(e.exposed={});I&&e.render===Ae&&(e.render=I),P!=null&&(e.inheritAttrs=P),S&&(e.components=S),K&&(e.directives=K)}function Wl(e,t,n=Ae){k(e)&&(e=mr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=St(s.from||r,s.default,!0):o=St(s.from||r):o=St(s),he(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function us(e,t,n){Re(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Po(e,t,n,r){const s=r.includes(".")?zo(n,r):()=>n[r];if(ie(e)){const o=t[e];q(o)&&$e(s,o)}else if(q(e))$e(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>Po(o,t,n,r));else{const o=q(e.handler)?e.handler.bind(n):t[e.handler];q(o)&&$e(s,o,e)}}function Vr(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(u=>wn(c,u,i,!0)),wn(c,t,i)),Z(t)&&o.set(t,c),c}function wn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&wn(e,o,n,!0),s&&s.forEach(i=>wn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=ql[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const ql={data:fs,props:ds,emits:ds,methods:Mt,computed:Mt,beforeCreate:me,created:me,beforeMount:me,mounted:me,beforeUpdate:me,updated:me,beforeDestroy:me,beforeUnmount:me,destroyed:me,unmounted:me,activated:me,deactivated:me,errorCaptured:me,serverPrefetch:me,components:Mt,directives:Mt,watch:Xl,provide:fs,inject:Gl};function fs(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return Mt(mr(e),mr(t))}function mr(e){if(k(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(r&&r.proxy):t}}const Fo={},$o=()=>Object.create(Fo),Ho=e=>Object.getPrototypeOf(e)===Fo;function Ql(e,t,n,r=!1){const s={},o=$o();e.propsDefaults=Object.create(null),jo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:hl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Zl(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,_]=Vo(h,t,!0);fe(i,m),_&&l.push(..._)};!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,yt),yt;if(k(o))for(let f=0;fe[0]==="_"||e==="$stable",Dr=e=>k(e)?e.map(xe):[xe(e)],tc=(e,t,n)=>{if(t._n)return t;const r=Rl((...s)=>Dr(t(...s)),n);return r._c=!1,r},Uo=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Do(s))continue;const o=e[s];if(q(o))t[s]=tc(s,o,r);else if(o!=null){const i=Dr(o);t[s]=()=>i}}},Bo=(e,t)=>{const n=Dr(t);e.slots.default=()=>n},ko=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},nc=(e,t,n)=>{const r=e.slots=$o();if(e.vnode.shapeFlag&32){const s=t._;s?(ko(r,t,n),n&&Qs(r,"_",s,!0)):Uo(t,r)}else t&&Bo(e,t)},rc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:ko(s,t,n):(o=!t.$stable,Uo(t,s)),i=t}else t&&(Bo(e,t),i={default:1});if(o)for(const l in s)!Do(l)&&i[l]==null&&delete s[l]};function En(e,t,n,r,s=!1){if(k(e)){e.forEach((m,_)=>En(m,t&&(k(t)?t[_]:t),n,r,s));return}if(Et(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,u=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ie(u)?(f[u]=null,z(h,u)&&(h[u]=null)):he(u)&&(u.value=null)),q(c))Ye(c,l,12,[i,f]);else{const m=ie(c),_=he(c);if(m||_){const w=()=>{if(e.f){const O=m?z(h,c)?h[c]:f[c]:c.value;s?k(O)&&Cr(O,o):k(O)?O.includes(o)||O.push(o):m?(f[c]=[o],z(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else m?(f[c]=i,z(h,c)&&(h[c]=i)):_&&(c.value=i,e.k&&(f[e.k]=i))};i?(w.id=-1,_e(w,n)):w()}}}const Ko=Symbol("_vte"),sc=e=>e.__isTeleport,Nt=e=>e&&(e.disabled||e.disabled===""),ps=e=>typeof SVGElement<"u"&&e instanceof SVGElement,gs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,_r=(e,t)=>{const n=e&&e.to;return ie(n)?t?t(n):null:n},oc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,u){const{mc:f,pc:h,pbc:m,o:{insert:_,querySelector:w,createText:O,createComment:U}}=u,W=Nt(t.props);let{shapeFlag:H,children:p,dynamicChildren:y}=t;if(e==null){const I=t.el=O(""),x=t.anchor=O("");_(I,n,r),_(x,n,r);const F=t.target=_r(t.props,w),V=qo(F,t,O,_);F&&(i==="svg"||ps(F)?i="svg":(i==="mathml"||gs(F))&&(i="mathml"));const M=(v,P)=>{H&16&&f(p,v,P,s,o,i,l,c)};W?M(n,x):F&&M(F,V)}else{t.el=e.el,t.targetStart=e.targetStart;const I=t.anchor=e.anchor,x=t.target=e.target,F=t.targetAnchor=e.targetAnchor,V=Nt(e.props),M=V?n:x,v=V?I:F;if(i==="svg"||ps(x)?i="svg":(i==="mathml"||gs(x))&&(i="mathml"),y?(m(e.dynamicChildren,y,M,s,o,i,l),Ur(e,t,!0)):c||h(e,t,M,v,s,o,i,l,!1),W)V?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):rn(t,n,I,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const P=t.target=_r(t.props,w);P&&rn(t,P,null,u,0)}else V&&rn(t,x,F,u,1)}Wo(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:u,targetAnchor:f,target:h,props:m}=e;if(h&&(s(u),s(f)),o&&s(c),i&16){const _=o||!Nt(m);for(let w=0;w{ms||(console.error("Hydration completed but contains mismatches."),ms=!0)},lc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",cc=e=>e.namespaceURI.includes("MathML"),sn=e=>{if(lc(e))return"svg";if(cc(e))return"mathml"},on=e=>e.nodeType===8;function ac(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:u}}=e,f=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),_n(),y._vnode=p;return}h(y.firstChild,p,null,null,null),_n(),y._vnode=p},h=(p,y,I,x,F,V=!1)=>{V=V||!!y.dynamicChildren;const M=on(p)&&p.data==="[",v=()=>O(p,y,I,x,F,M),{type:P,ref:S,shapeFlag:K,patchFlag:ee}=y;let re=p.nodeType;y.el=p,ee===-2&&(V=!1,y.dynamicChildren=null);let D=null;switch(P){case ut:re!==3?y.children===""?(c(y.el=s(""),i(p),p),D=p):D=v():(p.data!==y.children&&(gt(),p.data=y.children),D=o(p));break;case ye:H(p)?(D=o(p),W(y.el=p.content.firstChild,p,I)):re!==8||M?D=v():D=o(p);break;case Ft:if(M&&(p=o(p),re=p.nodeType),re===1||re===3){D=p;const Y=!y.children.length;for(let B=0;B{V=V||!!y.dynamicChildren;const{type:M,props:v,patchFlag:P,shapeFlag:S,dirs:K,transition:ee}=y,re=M==="input"||M==="option";if(re||P!==-1){K&&Ne(y,null,I,"created");let D=!1;if(H(p)){D=Xo(x,ee)&&I&&I.vnode.props&&I.vnode.props.appear;const B=p.content.firstChild;D&&ee.beforeEnter(B),W(B,p,I),y.el=p=B}if(S&16&&!(v&&(v.innerHTML||v.textContent))){let B=_(p.firstChild,y,p,I,x,F,V);for(;B;){gt();const de=B;B=B.nextSibling,l(de)}}else S&8&&p.textContent!==y.children&&(gt(),p.textContent=y.children);if(v){if(re||!V||P&48){const B=p.tagName.includes("-");for(const de in v)(re&&(de.endsWith("value")||de==="indeterminate")||Kt(de)&&!vt(de)||de[0]==="."||B)&&r(p,de,null,v[de],void 0,I)}else if(v.onClick)r(p,"onClick",null,v.onClick,void 0,I);else if(P&4&&bt(v.style))for(const B in v.style)v.style[B]}let Y;(Y=v&&v.onVnodeBeforeMount)&&Te(Y,I,y),K&&Ne(y,null,I,"beforeMount"),((Y=v&&v.onVnodeMounted)||K||D)&&Qo(()=>{Y&&Te(Y,I,y),D&&ee.enter(p),K&&Ne(y,null,I,"mounted")},x)}return p.nextSibling},_=(p,y,I,x,F,V,M)=>{M=M||!!y.dynamicChildren;const v=y.children,P=v.length;for(let S=0;S{const{slotScopeIds:M}=y;M&&(F=F?F.concat(M):M);const v=i(p),P=_(o(p),y,v,I,x,F,V);return P&&on(P)&&P.data==="]"?o(y.anchor=P):(gt(),c(y.anchor=u("]"),v,P),P)},O=(p,y,I,x,F,V)=>{if(gt(),y.el=null,V){const P=U(p);for(;;){const S=o(p);if(S&&S!==P)l(S);else break}}const M=o(p),v=i(p);return l(p),n(null,y,v,M,I,x,sn(v),F),M},U=(p,y="[",I="]")=>{let x=0;for(;p;)if(p=o(p),p&&on(p)&&(p.data===y&&x++,p.data===I)){if(x===0)return o(p);x--}return p},W=(p,y,I)=>{const x=y.parentNode;x&&x.replaceChild(p,y);let F=I;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},H=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const _e=Qo;function uc(e){return Go(e)}function fc(e){return Go(e,ac)}function Go(e,t){const n=Zs();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=Ae,insertStaticContent:w}=e,O=(a,d,g,C=null,b=null,T=null,L=void 0,A=null,R=!!d.dynamicChildren)=>{if(a===d)return;a&&!lt(a,d)&&(C=zt(a),Ie(a,b,T,!0),a=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:N,shapeFlag:j}=d;switch(E){case ut:U(a,d,g,C);break;case ye:W(a,d,g,C);break;case Ft:a==null&&H(d,g,C,L);break;case ve:S(a,d,g,C,b,T,L,A,R);break;default:j&1?I(a,d,g,C,b,T,L,A,R):j&6?K(a,d,g,C,b,T,L,A,R):(j&64||j&128)&&E.process(a,d,g,C,b,T,L,A,R,ht)}N!=null&&b&&En(N,a&&a.ref,T,d||a,!d)},U=(a,d,g,C)=>{if(a==null)r(d.el=l(d.children),g,C);else{const b=d.el=a.el;d.children!==a.children&&u(b,d.children)}},W=(a,d,g,C)=>{a==null?r(d.el=c(d.children||""),g,C):d.el=a.el},H=(a,d,g,C)=>{[a.el,a.anchor]=w(a.children,d,g,C,a.el,a.anchor)},p=({el:a,anchor:d},g,C)=>{let b;for(;a&&a!==d;)b=m(a),r(a,g,C),a=b;r(d,g,C)},y=({el:a,anchor:d})=>{let g;for(;a&&a!==d;)g=m(a),s(a),a=g;s(d)},I=(a,d,g,C,b,T,L,A,R)=>{d.type==="svg"?L="svg":d.type==="math"&&(L="mathml"),a==null?x(d,g,C,b,T,L,A,R):M(a,d,b,T,L,A,R)},x=(a,d,g,C,b,T,L,A)=>{let R,E;const{props:N,shapeFlag:j,transition:$,dirs:G}=a;if(R=a.el=i(a.type,T,N&&N.is,N),j&8?f(R,a.children):j&16&&V(a.children,R,null,C,b,Gn(a,T),L,A),G&&Ne(a,null,C,"created"),F(R,a,a.scopeId,L,C),N){for(const te in N)te!=="value"&&!vt(te)&&o(R,te,null,N[te],T,C);"value"in N&&o(R,"value",null,N.value,T),(E=N.onVnodeBeforeMount)&&Te(E,C,a)}G&&Ne(a,null,C,"beforeMount");const X=Xo(b,$);X&&$.beforeEnter(R),r(R,d,g),((E=N&&N.onVnodeMounted)||X||G)&&_e(()=>{E&&Te(E,C,a),X&&$.enter(R),G&&Ne(a,null,C,"mounted")},b)},F=(a,d,g,C,b)=>{if(g&&_(a,g),C)for(let T=0;T{for(let E=R;E{const A=d.el=a.el;let{patchFlag:R,dynamicChildren:E,dirs:N}=d;R|=a.patchFlag&16;const j=a.props||ne,$=d.props||ne;let G;if(g&&rt(g,!1),(G=$.onVnodeBeforeUpdate)&&Te(G,g,d,a),N&&Ne(d,a,g,"beforeUpdate"),g&&rt(g,!0),(j.innerHTML&&$.innerHTML==null||j.textContent&&$.textContent==null)&&f(A,""),E?v(a.dynamicChildren,E,A,g,C,Gn(d,b),T):L||B(a,d,A,null,g,C,Gn(d,b),T,!1),R>0){if(R&16)P(A,j,$,g,b);else if(R&2&&j.class!==$.class&&o(A,"class",null,$.class,b),R&4&&o(A,"style",j.style,$.style,b),R&8){const X=d.dynamicProps;for(let te=0;te{G&&Te(G,g,d,a),N&&Ne(d,a,g,"updated")},C)},v=(a,d,g,C,b,T,L)=>{for(let A=0;A{if(d!==g){if(d!==ne)for(const T in d)!vt(T)&&!(T in g)&&o(a,T,d[T],null,b,C);for(const T in g){if(vt(T))continue;const L=g[T],A=d[T];L!==A&&T!=="value"&&o(a,T,A,L,b,C)}"value"in g&&o(a,"value",d.value,g.value,b)}},S=(a,d,g,C,b,T,L,A,R)=>{const E=d.el=a?a.el:l(""),N=d.anchor=a?a.anchor:l("");let{patchFlag:j,dynamicChildren:$,slotScopeIds:G}=d;G&&(A=A?A.concat(G):G),a==null?(r(E,g,C),r(N,g,C),V(d.children||[],g,N,b,T,L,A,R)):j>0&&j&64&&$&&a.dynamicChildren?(v(a.dynamicChildren,$,g,b,T,L,A),(d.key!=null||b&&d===b.subTree)&&Ur(a,d,!0)):B(a,d,g,N,b,T,L,A,R)},K=(a,d,g,C,b,T,L,A,R)=>{d.slotScopeIds=A,a==null?d.shapeFlag&512?b.ctx.activate(d,g,C,L,R):ee(d,g,C,b,T,L,R):re(a,d,R)},ee=(a,d,g,C,b,T,L)=>{const A=a.component=Oc(a,C,b);if(qt(a)&&(A.ctx.renderer=ht),Lc(A,!1,L),A.asyncDep){if(b&&b.registerDep(A,D,L),!a.el){const R=A.subTree=le(ye);W(null,R,d,g)}}else D(A,a,d,g,b,T,L)},re=(a,d,g)=>{const C=d.component=a.component;if(bc(a,d,g))if(C.asyncDep&&!C.asyncResolved){Y(C,d,g);return}else C.next=d,Tl(C.update),C.effect.dirty=!0,C.update();else d.el=a.el,C.vnode=d},D=(a,d,g,C,b,T,L)=>{const A=()=>{if(a.isMounted){let{next:N,bu:j,u:$,parent:G,vnode:X}=a;{const pt=Yo(a);if(pt){N&&(N.el=X.el,Y(a,N,L)),pt.asyncDep.then(()=>{a.isUnmounted||A()});return}}let te=N,Q;rt(a,!1),N?(N.el=X.el,Y(a,N,L)):N=X,j&&dn(j),(Q=N.props&&N.props.onVnodeBeforeUpdate)&&Te(Q,G,N,X),rt(a,!0);const ce=Xn(a),Oe=a.subTree;a.subTree=ce,O(Oe,ce,h(Oe.el),zt(Oe),a,b,T),N.el=ce.el,te===null&&wc(a,ce.el),$&&_e($,b),(Q=N.props&&N.props.onVnodeUpdated)&&_e(()=>Te(Q,G,N,X),b)}else{let N;const{el:j,props:$}=d,{bm:G,m:X,parent:te}=a,Q=Et(d);if(rt(a,!1),G&&dn(G),!Q&&(N=$&&$.onVnodeBeforeMount)&&Te(N,te,d),rt(a,!0),j&&Bn){const ce=()=>{a.subTree=Xn(a),Bn(j,a.subTree,a,b,null)};Q?d.type.__asyncLoader().then(()=>!a.isUnmounted&&ce()):ce()}else{const ce=a.subTree=Xn(a);O(null,ce,g,C,a,b,T),d.el=ce.el}if(X&&_e(X,b),!Q&&(N=$&&$.onVnodeMounted)){const ce=d;_e(()=>Te(N,te,ce),b)}(d.shapeFlag&256||te&&Et(te.vnode)&&te.vnode.shapeFlag&256)&&a.a&&_e(a.a,b),a.isMounted=!0,d=g=C=null}},R=a.effect=new Ar(A,Ae,()=>In(E),a.scope),E=a.update=()=>{R.dirty&&R.run()};E.i=a,E.id=a.uid,rt(a,!0),E()},Y=(a,d,g)=>{d.component=a;const C=a.vnode.props;a.vnode=d,a.next=null,Zl(a,d.props,C,g),rc(a,d.children,g),et(),is(a),tt()},B=(a,d,g,C,b,T,L,A,R=!1)=>{const E=a&&a.children,N=a?a.shapeFlag:0,j=d.children,{patchFlag:$,shapeFlag:G}=d;if($>0){if($&128){Yt(E,j,g,C,b,T,L,A,R);return}else if($&256){de(E,j,g,C,b,T,L,A,R);return}}G&8?(N&16&&Rt(E,b,T),j!==E&&f(g,j)):N&16?G&16?Yt(E,j,g,C,b,T,L,A,R):Rt(E,b,T,!0):(N&8&&f(g,""),G&16&&V(j,g,C,b,T,L,A,R))},de=(a,d,g,C,b,T,L,A,R)=>{a=a||yt,d=d||yt;const E=a.length,N=d.length,j=Math.min(E,N);let $;for($=0;$N?Rt(a,b,T,!0,!1,j):V(d,g,C,b,T,L,A,R,j)},Yt=(a,d,g,C,b,T,L,A,R)=>{let E=0;const N=d.length;let j=a.length-1,$=N-1;for(;E<=j&&E<=$;){const G=a[E],X=d[E]=R?qe(d[E]):xe(d[E]);if(lt(G,X))O(G,X,g,null,b,T,L,A,R);else break;E++}for(;E<=j&&E<=$;){const G=a[j],X=d[$]=R?qe(d[$]):xe(d[$]);if(lt(G,X))O(G,X,g,null,b,T,L,A,R);else break;j--,$--}if(E>j){if(E<=$){const G=$+1,X=G$)for(;E<=j;)Ie(a[E],b,T,!0),E++;else{const G=E,X=E,te=new Map;for(E=X;E<=$;E++){const we=d[E]=R?qe(d[E]):xe(d[E]);we.key!=null&&te.set(we.key,E)}let Q,ce=0;const Oe=$-X+1;let pt=!1,Yr=0;const Ot=new Array(Oe);for(E=0;E=Oe){Ie(we,b,T,!0);continue}let Pe;if(we.key!=null)Pe=te.get(we.key);else for(Q=X;Q<=$;Q++)if(Ot[Q-X]===0&<(we,d[Q])){Pe=Q;break}Pe===void 0?Ie(we,b,T,!0):(Ot[Pe-X]=E+1,Pe>=Yr?Yr=Pe:pt=!0,O(we,d[Pe],g,null,b,T,L,A,R),ce++)}const zr=pt?dc(Ot):yt;for(Q=zr.length-1,E=Oe-1;E>=0;E--){const we=X+E,Pe=d[we],Jr=we+1{const{el:T,type:L,transition:A,children:R,shapeFlag:E}=a;if(E&6){nt(a.component.subTree,d,g,C);return}if(E&128){a.suspense.move(d,g,C);return}if(E&64){L.move(a,d,g,ht);return}if(L===ve){r(T,d,g);for(let j=0;jA.enter(T),b);else{const{leave:j,delayLeave:$,afterLeave:G}=A,X=()=>r(T,d,g),te=()=>{j(T,()=>{X(),G&&G()})};$?$(T,X,te):te()}else r(T,d,g)},Ie=(a,d,g,C=!1,b=!1)=>{const{type:T,props:L,ref:A,children:R,dynamicChildren:E,shapeFlag:N,patchFlag:j,dirs:$,cacheIndex:G}=a;if(j===-2&&(b=!1),A!=null&&En(A,null,g,a,!0),G!=null&&(d.renderCache[G]=void 0),N&256){d.ctx.deactivate(a);return}const X=N&1&&$,te=!Et(a);let Q;if(te&&(Q=L&&L.onVnodeBeforeUnmount)&&Te(Q,d,a),N&6)Li(a.component,g,C);else{if(N&128){a.suspense.unmount(g,C);return}X&&Ne(a,null,d,"beforeUnmount"),N&64?a.type.remove(a,d,g,ht,C):E&&!E.hasOnce&&(T!==ve||j>0&&j&64)?Rt(E,d,g,!1,!0):(T===ve&&j&384||!b&&N&16)&&Rt(R,d,g),C&&Gr(a)}(te&&(Q=L&&L.onVnodeUnmounted)||X)&&_e(()=>{Q&&Te(Q,d,a),X&&Ne(a,null,d,"unmounted")},g)},Gr=a=>{const{type:d,el:g,anchor:C,transition:b}=a;if(d===ve){Oi(g,C);return}if(d===Ft){y(a);return}const T=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:L,delayLeave:A}=b,R=()=>L(g,T);A?A(a.el,T,R):R()}else T()},Oi=(a,d)=>{let g;for(;a!==d;)g=m(a),s(a),a=g;s(d)},Li=(a,d,g)=>{const{bum:C,scope:b,update:T,subTree:L,um:A,m:R,a:E}=a;ys(R),ys(E),C&&dn(C),b.stop(),T&&(T.active=!1,Ie(L,a,d,g)),A&&_e(A,d),_e(()=>{a.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Rt=(a,d,g,C=!1,b=!1,T=0)=>{for(let L=T;L{if(a.shapeFlag&6)return zt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=m(a.anchor||a.el),g=d&&d[Ko];return g?m(g):d};let Dn=!1;const Xr=(a,d,g)=>{a==null?d._vnode&&Ie(d._vnode,null,null,!0):O(d._vnode||null,a,d,null,null,null,g),d._vnode=a,Dn||(Dn=!0,is(),_n(),Dn=!1)},ht={p:O,um:Ie,m:nt,r:Gr,mt:ee,mc:V,pc:B,pbc:v,n:zt,o:e};let Un,Bn;return t&&([Un,Bn]=t(ht)),{render:Xr,hydrate:Un,createApp:zl(Xr,Un)}}function Gn({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 rt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Xo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ur(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(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 Yo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Yo(t)}function ys(e){if(e)for(let t=0;tSt(hc);function Br(e,t){return $n(e,null,t)}function _u(e,t){return $n(e,null,{flush:"post"})}const ln={};function $e(e,t,n){return $n(e,t,n)}function $n(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ne){if(t&&o){const x=t;t=(...F)=>{x(...F),I()}}const c=ae,u=x=>r===!0?x:Ge(x,r===!1?1:void 0);let f,h=!1,m=!1;if(he(e)?(f=()=>e.value,h=Tt(e)):bt(e)?(f=()=>u(e),h=!0):k(e)?(m=!0,h=e.some(x=>bt(x)||Tt(x)),f=()=>e.map(x=>{if(he(x))return x.value;if(bt(x))return u(x);if(q(x))return Ye(x,c,2)})):q(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Re(e,c,3,[w])):f=Ae,t&&r){const x=f;f=()=>Ge(x())}let _,w=x=>{_=p.onStop=()=>{Ye(x,c,4),_=p.onStop=void 0}},O;if(Xt)if(w=Ae,t?n&&Re(t,c,3,[f(),m?[]:void 0,w]):f(),s==="sync"){const x=pc();O=x.__watcherHandles||(x.__watcherHandles=[])}else return Ae;let U=m?new Array(e.length).fill(ln):ln;const W=()=>{if(!(!p.active||!p.dirty))if(t){const x=p.run();(r||h||(m?x.some((F,V)=>ze(F,U[V])):ze(x,U)))&&(_&&_(),Re(t,c,3,[x,U===ln?void 0:m&&U[0]===ln?[]:U,w]),U=x)}else p.run()};W.allowRecurse=!!t;let H;s==="sync"?H=W:s==="post"?H=()=>_e(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),H=()=>In(W));const p=new Ar(f,Ae,H),y=ro(),I=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?W():U=p.run():s==="post"?_e(p.run.bind(p),c&&c.suspense):p.run(),O&&O.push(I),I}function gc(e,t,n){const r=this.proxy,s=ie(e)?e.includes(".")?zo(r,e):()=>r[e]:e.bind(r,r);let o;q(t)?o=t:(o=t.handler,n=t);const i=Gt(this),l=$n(s,o.bind(r),n);return i(),l}function zo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{Ge(r,t,n)});else if(Js(e)){for(const r in e)Ge(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Ge(e[r],t,n)}return e}const mc=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Le(t)}Modifiers`]||e[`${Ze(t)}Modifiers`];function yc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ne;let s=n;const o=t.startsWith("update:"),i=o&&mc(r,t.slice(7));i&&(i.trim&&(s=n.map(f=>ie(f)?f.trim():f)),i.number&&(s=n.map(cr)));let l,c=r[l=fn(t)]||r[l=fn(Le(t))];!c&&o&&(c=r[l=fn(Ze(t))]),c&&Re(c,e,6,s);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(u,e,6,s)}}function Jo(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=u=>{const f=Jo(u,t,!0);f&&(l=!0,fe(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):(k(o)?o.forEach(c=>i[c]=null):fe(i,o),Z(e)&&r.set(e,i),i)}function Hn(e,t){return!e||!Kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,Ze(t))||z(e,t))}function Xn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:u,renderCache:f,props:h,data:m,setupState:_,ctx:w,inheritAttrs:O}=e,U=vn(e);let W,H;try{if(n.shapeFlag&4){const y=s||r,I=y;W=xe(u.call(I,y,f,h,_,m,w)),H=l}else{const y=t;W=xe(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),H=t.props?l:_c(l)}}catch(y){$t.length=0,Wt(y,e,1),W=le(ye)}let p=W;if(H&&O!==!1){const y=Object.keys(H),{shapeFlag:I}=p;y.length&&I&7&&(o&&y.some(Er)&&(H=vc(H,o)),p=Je(p,H,!1,!0))}return n.dirs&&(p=Je(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),W=p,vn(U),W}const _c=e=>{let t;for(const n in e)(n==="class"||n==="style"||Kt(n))&&((t||(t={}))[n]=e[n]);return t},vc=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function bc(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?_s(r,i,u):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Qo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):xl(e)}const ve=Symbol.for("v-fgt"),ut=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ft=Symbol.for("v-stc"),$t=[];let Ce=null;function Zo(e=!1){$t.push(Ce=e?null:[])}function Cc(){$t.pop(),Ce=$t[$t.length-1]||null}let Ut=1;function vs(e){Ut+=e,e<0&&Ce&&(Ce.hasOnce=!0)}function ei(e){return e.dynamicChildren=Ut>0?Ce||yt:null,Cc(),Ut>0&&Ce&&Ce.push(e),e}function vu(e,t,n,r,s,o){return ei(ri(e,t,n,r,s,o,!0))}function ti(e,t,n,r,s){return ei(le(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const ni=({key:e})=>e??null,pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||he(e)||q(e)?{i:ue,r:e,k:t,f:!!n}:e:null);function ri(e,t=null,n=null,r=0,s=null,o=e===ve?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ni(t),ref:t&&pn(t),scopeId:Pn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ue};return l?(kr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),Ut>0&&!i&&Ce&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Ce.push(c),c}const le=Sc;function Sc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Lo)&&(e=ye),Cn(e)){const l=Je(e,t,!0);return n&&kr(l,n),Ut>0&&!o&&Ce&&(l.shapeFlag&6?Ce[Ce.indexOf(e)]=l:Ce.push(l)),l.patchFlag=-2,l}if(Nc(e)&&(e=e.__vccOpts),t){t=Tc(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=xr(l)),Z(c)&&(mo(c)&&!k(c)&&(c=fe({},c)),t.style=Tr(c))}const i=ie(e)?1:Ec(e)?128:sc(e)?64:Z(e)?4:q(e)?2:0;return ri(e,t,n,r,s,i,o,!0)}function Tc(e){return e?mo(e)||Ho(e)?fe({},e):e:null}function Je(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,u=t?xc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ni(u),ref:t&&t.ref?n&&o?k(o)?o.concat(pn(t)):[o,pn(t)]:pn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Je(e.ssContent),ssFallback:e.ssFallback&&Je(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&bn(f,c.clone(f)),f}function si(e=" ",t=0){return le(ut,null,e,t)}function bu(e,t){const n=le(Ft,null,e);return n.staticCount=t,n}function wu(e="",t=!1){return t?(Zo(),ti(ye,null,e)):le(ye,null,e)}function xe(e){return e==null||typeof e=="boolean"?le(ye):k(e)?le(ve,null,e.slice()):typeof e=="object"?qe(e):le(ut,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Je(e)}function kr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),kr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Ho(t)?t._ctx=ue:s===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),r&64?(n=16,t=[si(t)]):n=8);e.children=t,e.shapeFlag|=n}function xc(...e){const t={};for(let n=0;nae||ue;let Sn,vr;{const e=Zs(),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)}};Sn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),vr=t("__VUE_SSR_SETTERS__",n=>Xt=n)}const Gt=e=>{const t=ae;return Sn(e),e.scope.on(),()=>{e.scope.off(),Sn(t)}},bs=()=>{ae&&ae.scope.off(),Sn(null)};function oi(e){return e.vnode.shapeFlag&4}let Xt=!1;function Lc(e,t=!1,n=!1){t&&vr(t);const{props:r,children:s}=e.vnode,o=oi(e);Ql(e,r,o,t),nc(e,s,n);const i=o?Mc(e,t):void 0;return t&&vr(!1),i}function Mc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?li(e):null,o=Gt(e);et();const i=Ye(r,e,0,[e.props,s]);if(tt(),o(),Ys(i)){if(i.then(bs,bs),t)return i.then(l=>{ws(e,l,t)}).catch(l=>{Wt(l,e,0)});e.asyncDep=i}else ws(e,i,t)}else ii(e,t)}function ws(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=bo(t)),ii(e,n)}let Es;function ii(e,t,n){const r=e.type;if(!e.render){if(!t&&Es&&!r.render){const s=r.template||Vr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,u=fe(fe({isCustomElement:o,delimiters:l},i),c);r.render=Es(s,u)}}e.render=r.render||Ae}{const s=Gt(e);et();try{Kl(e)}finally{tt(),s()}}}const Ic={get(e,t){return be(e,"get",""),e[t]}};function li(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ic),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(bo(hn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pt)return Pt[n](e)},has(t,n){return n in t||n in Pt}})):e.proxy}function Pc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Nc(e){return q(e)&&"__vccOpts"in e}const se=(e,t)=>pl(e,t,Xt);function br(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?Cn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),le(e,t,n))}const Fc="3.4.38";/** -* @vue/runtime-dom v3.4.38 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const $c="http://www.w3.org/2000/svg",Hc="http://www.w3.org/1998/Math/MathML",je=typeof document<"u"?document:null,Cs=je&&je.createElement("template"),jc={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"?je.createElementNS($c,e):t==="mathml"?je.createElementNS(Hc,e):n?je.createElement(e,{is:n}):je.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>je.createTextNode(e),createComment:e=>je.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>je.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{Cs.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Cs.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]}},Be="transition",Lt="animation",Bt=Symbol("_vtc"),ci=(e,{slots:t})=>br(Ml,Vc(e),t);ci.displayName="Transition";const ai={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};ci.props=fe({},So,ai);const st=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ss=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Vc(e){const t={};for(const S in e)S in ai||(t[S]=e[S]);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:u=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,w=Dc(s),O=w&&w[0],U=w&&w[1],{onBeforeEnter:W,onEnter:H,onEnterCancelled:p,onLeave:y,onLeaveCancelled:I,onBeforeAppear:x=W,onAppear:F=H,onAppearCancelled:V=p}=t,M=(S,K,ee)=>{ot(S,K?f:l),ot(S,K?u:i),ee&&ee()},v=(S,K)=>{S._isLeaving=!1,ot(S,h),ot(S,_),ot(S,m),K&&K()},P=S=>(K,ee)=>{const re=S?F:H,D=()=>M(K,S,ee);st(re,[K,D]),Ts(()=>{ot(K,S?c:o),ke(K,S?f:l),Ss(re)||xs(K,r,O,D)})};return fe(t,{onBeforeEnter(S){st(W,[S]),ke(S,o),ke(S,i)},onBeforeAppear(S){st(x,[S]),ke(S,c),ke(S,u)},onEnter:P(!1),onAppear:P(!0),onLeave(S,K){S._isLeaving=!0;const ee=()=>v(S,K);ke(S,h),ke(S,m),kc(),Ts(()=>{S._isLeaving&&(ot(S,h),ke(S,_),Ss(y)||xs(S,r,U,ee))}),st(y,[S,ee])},onEnterCancelled(S){M(S,!1),st(p,[S])},onAppearCancelled(S){M(S,!0),st(V,[S])},onLeaveCancelled(S){v(S),st(I,[S])}})}function Dc(e){if(e==null)return null;if(Z(e))return[Yn(e.enter),Yn(e.leave)];{const t=Yn(e);return[t,t]}}function Yn(e){return $i(e)}function ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Bt]||(e[Bt]=new Set)).add(t)}function ot(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Bt];n&&(n.delete(t),n.size||(e[Bt]=void 0))}function Ts(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Uc=0;function xs(e,t,n,r){const s=e._endId=++Uc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Bc(e,t);if(!i)return r();const u=i+"end";let f=0;const h=()=>{e.removeEventListener(u,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[w]||"").split(", "),s=r(`${Be}Delay`),o=r(`${Be}Duration`),i=As(s,o),l=r(`${Lt}Delay`),c=r(`${Lt}Duration`),u=As(l,c);let f=null,h=0,m=0;t===Be?i>0&&(f=Be,h=i,m=o.length):t===Lt?u>0&&(f=Lt,h=u,m=c.length):(h=Math.max(i,u),f=h>0?i>u?Be:Lt:null,m=f?f===Be?o.length:c.length:0);const _=f===Be&&/\b(transform|all)(,|$)/.test(r(`${Be}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function As(e,t){for(;e.lengthRs(n)+Rs(e[r])))}function Rs(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function kc(){return document.body.offsetHeight}function Kc(e,t,n){const r=e[Bt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Os=Symbol("_vod"),Wc=Symbol("_vsh"),qc=Symbol(""),Gc=/(^|;)\s*display\s*:/;function Xc(e,t,n){const r=e.style,s=ie(n);let o=!1;if(n&&!s){if(t)if(ie(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&gn(r,l,"")}else for(const i in t)n[i]==null&&gn(r,i,"");for(const i in n)i==="display"&&(o=!0),gn(r,i,n[i])}else if(s){if(t!==n){const i=r[qc];i&&(n+=";"+i),r.cssText=n,o=Gc.test(n)}}else t&&e.removeAttribute("style");Os in e&&(e[Os]=o?r.display:"",e[Wc]&&(r.display="none"))}const Ls=/\s*!important$/;function gn(e,t,n){if(k(n))n.forEach(r=>gn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Yc(e,t);Ls.test(n)?e.setProperty(Ze(r),n.replace(Ls,""),"important"):e[r]=n}}const Ms=["Webkit","Moz","ms"],zn={};function Yc(e,t){const n=zn[t];if(n)return n;let r=Le(t);if(r!=="filter"&&r in e)return zn[t]=r;r=An(r);for(let s=0;sJn||(ea.then(()=>Jn=0),Jn=Date.now());function na(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Re(ra(r,n.value),t,5,[r])};return n.value=e,n.attached=ta(),n}function ra(e,t){if(k(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 $s=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,sa=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?Kc(e,r,i):t==="style"?Xc(e,n,r):Kt(t)?Er(t)||Qc(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oa(e,t,r,i))?(zc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ps(e,t,r,i,o,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ps(e,t,r,i))};function oa(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&$s(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 $s(t)&&ie(n)?!1:t in e}const Hs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>dn(t,n):t};function ia(e){e.target.composing=!0}function js(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),Eu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=Hs(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=cr(l)),e[Qn](l)}),n&&mt(e,"change",()=>{e.value=e.value.trim()}),t||(mt(e,"compositionstart",ia),mt(e,"compositionend",js),mt(e,"change",js))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=Hs(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},la=["ctrl","shift","alt","meta"],ca={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)=>la.some(n=>e[`${n}Key`]&&!t.includes(n))},Cu=(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=Ze(s.key);if(t.some(i=>i===o||aa[i]===o))return e(s)})},ui=fe({patchProp:sa},jc);let Ht,Vs=!1;function ua(){return Ht||(Ht=uc(ui))}function fa(){return Ht=Vs?Ht:fc(ui),Vs=!0,Ht}const Tu=(...e)=>{const t=ua().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(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,fi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},xu=(...e)=>{const t=fa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(r);if(s)return n(s,!0,fi(s))},t};function fi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function di(e){return ie(e)?document.querySelector(e):e}const Au=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},da=window.__VP_SITE_DATA__;function Kr(e){return ro()?(qi(e),!0):!1}function He(e){return typeof e=="function"?e():vo(e)}const hi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ru=e=>e!=null,ha=Object.prototype.toString,pa=e=>ha.call(e)==="[object Object]",kt=()=>{},Ds=ga();function ga(){var e,t;return hi&&((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 ma(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 pi=e=>e();function ya(e,t={}){let n,r,s=kt;const o=l=>{clearTimeout(l),s(),s=kt};return l=>{const c=He(e),u=He(t.maxWait);return n&&o(n),c<=0||u!==void 0&&u<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,u&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},u)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function _a(e=pi){const t=oe(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function va(e){return jn()}function gi(...e){if(e.length!==1)return wl(...e);const t=e[0];return typeof t=="function"?Ln(_l(()=>({get:t,set:kt}))):oe(t)}function mi(e,t,n={}){const{eventFilter:r=pi,...s}=n;return $e(e,ma(r,t),s)}function ba(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=_a(r);return{stop:mi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Wr(e,t=!0,n){va()?At(e,n):t?e():Mn(e)}function Ou(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return mi(e,t,{...o,eventFilter:ya(r,{maxWait:s})})}function Lu(e,t,n){let r;he(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=kt}=r,c=oe(!s),u=i?Fr(t):oe(t);let f=0;return Br(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const w=await e(O=>{h(()=>{o&&(o.value=!1),_||O()})});m===f&&(u.value=w)}catch(w){l(w)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?se(()=>(c.value=!0,u.value)):u}function yi(e){var t;const n=He(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Me=hi?window:void 0;function xt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Me):[t,n,r,s]=e,!t)return kt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=$e(()=>[yi(t),He(s)],([f,h])=>{if(i(),!f)return;const m=pa(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(w=>l(f,_,w,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return Kr(u),u}function wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Mu(...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=Me,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=wa(t);return xt(s,o,f=>{f.repeat&&He(l)||c(f)&&n(f)},i)}function Ea(){const e=oe(!1),t=jn();return t&&At(()=>{e.value=!0},t),e}function Ca(e){const t=Ea();return se(()=>(t.value,!!e()))}function _i(e,t={}){const{window:n=Me}=t,r=Ca(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=oe(!1),i=u=>{o.value=u.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Br(()=>{r.value&&(l(),s=n.matchMedia(He(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return Kr(()=>{c(),l(),s=void 0}),o}const cn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},an="__vueuse_ssr_handlers__",Sa=Ta();function Ta(){return an in cn||(cn[an]=cn[an]||{}),cn[an]}function vi(e,t){return Sa[e]||t}function xa(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 Aa={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()}},Us="vueuse-storage";function qr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:h=Me,eventFilter:m,onError:_=v=>{console.error(v)},initOnMounted:w}=r,O=(f?Fr:oe)(typeof t=="function"?t():t);if(!n)try{n=vi("getDefaultStorage",()=>{var v;return(v=Me)==null?void 0:v.localStorage})()}catch(v){_(v)}if(!n)return O;const U=He(t),W=xa(U),H=(s=r.serializer)!=null?s:Aa[W],{pause:p,resume:y}=ba(O,()=>x(O.value),{flush:o,deep:i,eventFilter:m});h&&l&&Wr(()=>{n instanceof Storage?xt(h,"storage",V):xt(h,Us,M),w&&V()}),w||V();function I(v,P){if(h){const S={key:e,oldValue:v,newValue:P,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",S):new CustomEvent(Us,{detail:S}))}}function x(v){try{const P=n.getItem(e);if(v==null)I(P,null),n.removeItem(e);else{const S=H.write(v);P!==S&&(n.setItem(e,S),I(P,S))}}catch(P){_(P)}}function F(v){const P=v?v.newValue:n.getItem(e);if(P==null)return c&&U!=null&&n.setItem(e,H.write(U)),U;if(!v&&u){const S=H.read(P);return typeof u=="function"?u(S,U):W==="object"&&!Array.isArray(S)?{...U,...S}:S}else return typeof P!="string"?P:H.read(P)}function V(v){if(!(v&&v.storageArea!==n)){if(v&&v.key==null){O.value=U;return}if(!(v&&v.key!==e)){p();try{(v==null?void 0:v.newValue)!==H.write(O.value)&&(O.value=F(v))}catch(P){_(P)}finally{v?Mn(y):y()}}}}function M(v){V(v.detail)}return O}function bi(e){return _i("(prefers-color-scheme: dark)",e)}const Ra="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Oa(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Me,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=bi({window:s}),_=se(()=>m.value?"dark":"light"),w=c||(i==null?gi(r):qr(i,r,o,{window:s,listenToStorageChanges:l})),O=se(()=>w.value==="auto"?_.value:w.value),U=vi("updateHTMLAttrs",(y,I,x)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):yi(y);if(!F)return;const V=new Set,M=new Set;let v=null;if(I==="class"){const S=x.split(/\s/g);Object.values(h).flatMap(K=>(K||"").split(/\s/g)).filter(Boolean).forEach(K=>{S.includes(K)?V.add(K):M.add(K)})}else v={key:I,value:x};if(V.size===0&&M.size===0&&v===null)return;let P;f&&(P=s.document.createElement("style"),P.appendChild(document.createTextNode(Ra)),s.document.head.appendChild(P));for(const S of V)F.classList.add(S);for(const S of M)F.classList.remove(S);v&&F.setAttribute(v.key,v.value),f&&(s.getComputedStyle(P).opacity,document.head.removeChild(P))});function W(y){var I;U(t,n,(I=h[y])!=null?I:y)}function H(y){e.onChanged?e.onChanged(y,W):W(y)}$e(O,H,{flush:"post",immediate:!0}),Wr(()=>H(O.value));const p=se({get(){return u?w.value:O.value},set(y){w.value=y}});try{return Object.assign(p,{store:w,system:_,state:O})}catch{return p}}function La(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Me}=e,s=Oa({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=se(()=>s.system?s.system.value:bi({window:r}).value?"dark":"light");return se({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Iu(e,t,n={}){const{window:r=Me}=n;return qr(e,t,r==null?void 0:r.localStorage,n)}function wi(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 er=new WeakMap;function Pu(e,t=!1){const n=oe(t);let r=null,s="";$e(gi(e),l=>{const c=Zn(He(l));if(c){const u=c;if(er.get(u)||er.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(s=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Zn(He(e));!l||n.value||(Ds&&(r=xt(l,"touchmove",c=>{Ma(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn(He(e));!l||!n.value||(Ds&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return Kr(i),se({get(){return n.value},set(l){l?o():i()}})}function Nu(e,t,n={}){const{window:r=Me}=n;return qr(e,t,r==null?void 0:r.sessionStorage,n)}function Fu(e={}){const{window:t=Me,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const r=oe(t.scrollX),s=oe(t.scrollY),o=se({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=se({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return xt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function $u(e={}){const{window:t=Me,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0,type:i="inner"}=e,l=oe(n),c=oe(r),u=()=>{t&&(i==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):o?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(u(),Wr(u),xt("resize",u,{passive:!0}),s){const f=_i("(orientation: portrait)");$e(f,()=>u())}return{width:l,height:c}}const tr={BASE_URL:"/YAXArrays.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var nr={};const Ei=/^(?:[a-z]+:|\/\/)/i,Ia="vitepress-theme-appearance",Pa=/#.*$/,Na=/[?#].*$/,Fa=/(?:(^|\/)index)?\.(?:md|html)$/,pe=typeof document<"u",Ci={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function $a(e,t,n=!1){if(t===void 0)return!1;if(e=Bs(`/${e}`),n)return new RegExp(t).test(e);if(Bs(t)!==e)return!1;const r=t.match(Pa);return r?(pe?location.hash:"")===r[0]:!0}function Bs(e){return decodeURI(e).replace(Na,"").replace(Fa,"$1")}function Ha(e){return Ei.test(e)}function ja(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ha(n)&&$a(t,`/${n}/`,!0))||"root"}function Va(e,t){var r,s,o,i,l,c,u;const n=ja(e,t);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:Ti(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function Si(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=Da(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Da(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ua(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 Ti(e,t){return[...e.filter(n=>!Ua(t,n)),...t]}const Ba=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ka=/^[a-z]:/i;function ks(e){const t=ka.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Ba,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function Ka(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.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=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function Hu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Wa=Symbol(),ft=Fr(da);function ju(e){const t=se(()=>Va(ft.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?oe(!0):n?La({storageKey:Ia,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),s=oe(pe?location.hash:"");return pe&&window.addEventListener("hashchange",()=>{s.value=location.hash}),$e(()=>e.data,()=>{s.value=pe?location.hash:""}),{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>Si(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:r,hash:se(()=>s.value)}}function qa(){const e=St(Wa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ga(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ks(e){return Ei.test(e)||!e.startsWith("/")?e:Ga(ft.value.base,e)}function Xa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),pe){const n="/YAXArrays.jl/dev/";t=ks(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=`./${ks(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let mn=[];function Vu(e){mn.push(e),Fn(()=>{mn=mn.filter(t=>t!==e)})}function Ya(){let e=ft.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=Ws(e,n);else if(Array.isArray(e))for(const r of e){const s=Ws(r,n);if(s){t=s;break}}return t}function Ws(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const za=Symbol(),xi="http://a.com",Ja=()=>({path:"/",component:null,data:Ci});function Du(e,t){const n=On(Ja()),r={route:n,go:s};async function s(l=pe?location.href:"/"){var c,u;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(pe&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((u=r.onAfterRouteChanged)==null?void 0:u.call(r,l)))}let o=null;async function i(l,c=0,u=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,xi),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:w,__pageData:O}=_;if(!w)throw new Error(`Invalid route component: ${w}`);n.path=pe?h:Ks(h),n.component=hn(w),n.data=hn(O),pe&&Mn(()=>{let U=ft.value.base+O.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ft.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==f.pathname&&(f.pathname=U,l=U+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(H){console.warn(H)}if(W){qs(W,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!u)try{const w=await fetch(ft.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=pe?h:Ks(h),n.component=t?hn(t):null;const w=pe?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Ci,relativePath:w}}}}return pe&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:h,pathname:m,hash:_,search:w}=new URL(u,c.baseURI),O=new URL(location.href);h===O.origin&&Ka(m)&&(l.preventDefault(),m===O.pathname&&w===O.search?(_!==O.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:O.href,newURL:f}))),_?qs(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(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 Qa(){const e=St(za);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ai(){return Qa().route}function qs(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-Ya()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,xi);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ft.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 or=()=>mn.forEach(e=>e()),Uu=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ai(),{site:n}=qa();return()=>br(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?br(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),Za="modulepreload",eu=function(e){return"/YAXArrays.jl/dev/"+e},Gs={},Bu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=eu(l),l in Gs)return;Gs[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":Za,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}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})},ku=Hr({setup(e,{slots:t}){const n=oe(!1);return At(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Ku(){pe&&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(u=>u.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 Wu(){if(pe){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 u=c.textContent||"";i&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),tu(u).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 tu(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 qu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const u of document.head.children)if(u.isEqualNode(c)){r.push(u);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const u=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));u!==-1?delete i[u]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Br(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],u=Si(i,o);u!==document.title&&(document.title=u);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(Ti(i.head,ru(c)))})}function ir([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 nu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ru(e){return e.filter(t=>!nu(t))}const lr=new Set,Ri=()=>document.createElement("link"),su=e=>{const t=Ri();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ou=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let un;const iu=pe&&(un=Ri())&&un.relList&&un.relList.supports&&un.relList.supports("prefetch")?su:ou;function Gu(){if(!pe||!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(!lr.has(c)){lr.add(c);const u=Xa(c);u&&iu(u)}}})}),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):lr.add(l))})})};At(r);const s=Ai();$e(()=>s.path,r),Fn(()=>{n&&n.disconnect()})}export{gu as $,_u as A,Hl as B,Ya as C,fu as D,hu as E,ve as F,Fr as G,Vu as H,le as I,du as J,Ei as K,Ai as L,xc as M,St as N,$u as O,Tr as P,Mu as Q,Mn as R,Fu as S,ci as T,pe as U,Ln as V,uu as W,Bu as X,Pu as Y,Jl as Z,Au as _,si as a,Su as a0,Oo as a1,Cu as a2,mu as a3,bu as a4,On as a5,wl as a6,br as a7,qu as a8,za as a9,Tu as aA,Hu as aB,ju as aa,Wa as ab,Uu as ac,ku as ad,ft as ae,xu as af,Du as ag,Xa as ah,Gu as ai,Wu as aj,Ku as ak,He as al,yi as am,Ru as an,Kr as ao,Lu as ap,Nu as aq,Iu as ar,Ou as as,Qa as at,xt as au,au as av,Eu as aw,he as ax,yu as ay,hn as az,ti as b,vu as c,Hr as d,wu as e,Ka as f,Ks as g,se as h,Ha as i,ri as j,vo as k,cu as l,$a as m,xr as n,Zo as o,lu as p,_i as q,pu as r,oe as s,ki as t,qa as u,$e as v,Rl as w,Br as x,At as y,Fn as z}; diff --git a/dev/assets/chunks/theme.CwYulWfl.js b/dev/assets/chunks/theme.CwYulWfl.js deleted file mode 100644 index e3b7fbb9..00000000 --- a/dev/assets/chunks/theme.CwYulWfl.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CIQr89Xt.js","assets/chunks/framework._h4tgM90.js"])))=>i.map(i=>d[i]); -import{d as m,o,c as l,r as c,n as T,a as H,t as V,b as $,w as h,e as f,T as he,_ as g,u as Ze,i as Ye,f as Xe,g as fe,h as y,j as d,k as r,p as B,l as E,m as z,q as ce,s as I,v as D,x as ee,y as K,z as me,A as _e,B as qe,C as xe,D as j,F as C,E as Q,G as Ie,H as te,I as b,J as W,K as Ne,L as se,M as J,N as Z,O as et,P as Te,Q as ue,R as Ce,S as we,U as ae,V as tt,W as st,X as at,Y as Me,Z as be,$ as nt,a0 as ot,a1 as rt,a2 as it,a3 as Be,a4 as lt,a5 as ct,a6 as ut,a7 as Pe}from"./framework._h4tgM90.js";const dt=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(o(),l("span",{class:T(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[H(V(e.text),1)])],2))}}),pt={key:0,class:"VPBackdrop"},vt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(o(),$(he,{name:"fade"},{default:h(()=>[e.show?(o(),l("div",pt)):f("",!0)]),_:1}))}}),ht=g(vt,[["__scopeId","data-v-b06cdb19"]]),S=Ze;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 ge(s){const{pathname:e,search:t,hash:n,protocol:a}=new URL(s,"http://a.com");if(Ye(s)||s.startsWith("#")||!a.startsWith("http")||!Xe(e))return s;const{site:i}=S(),u=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return fe(u)}function X({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:n,theme:a,hash:i}=S(),u=y(()=>{var v,_;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([v,_])=>u.value.label===_.label?[]:{text:_.label,link:mt(_.link||(v==="root"?"/":`/${v}/`),a.value.i18nRouting!==!1&&s,n.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.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=>(B("data-v-951cab6c"),s=s(),E(),s),bt={class:"NotFound"},gt={class:"code"},kt={class:"title"},$t=_t(()=>d("div",{class:"divider"},null,-1)),yt={class:"quote"},At={class:"action"},Pt=["href","aria-label"],St=m({__name:"NotFound",setup(s){const{theme:e}=S(),{currentLang:t}=X();return(n,a)=>{var i,u,p,v,_;return o(),l("div",bt,[d("p",gt,V(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",kt,V(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),$t,d("blockquote",yt,V(((p=r(e).notFound)==null?void 0:p.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",At,[d("a",{class:"link",href:r(fe)(r(t).link),"aria-label":((v=r(e).notFound)==null?void 0:v.linkLabel)??"go to home"},V(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,Pt)])])}}}),Lt=g(St,[["__scopeId","data-v-951cab6c"]]);function Ee(s,e){if(Array.isArray(s))return q(s);if(s==null)return[];e=de(e);const t=Object.keys(s).sort((a,i)=>i.split("/").length-a.split("/").length).find(a=>e.startsWith(de(a))),n=t?s[t]:[];return Array.isArray(n)?q(n):q(n.items,n.base)}function Vt(s){const e=[];let t=0;for(const n in s){const a=s[n];if(a.items){t=e.push(a);continue}e[t]||e.push({items:[]}),e[t].items.push(a)}return e}function It(s){const e=[];function t(n){for(const a of n)a.text&&a.link&&e.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&t(a.items)}return t(s),e}function pe(s,e){return Array.isArray(e)?e.some(t=>pe(s,t)):z(s,e.link)?!0:e.items?pe(s,e.items):!1}function q(s,e){return[...s].map(t=>{const n={...t},a=n.base||e;return a&&n.link&&(n.link=a+n.link),n.items&&(n.items=q(n.items,a)),n})}function O(){const{frontmatter:s,page:e,theme:t}=S(),n=ce("(min-width: 960px)"),a=I(!1),i=y(()=>{const M=t.value.sidebar,N=e.value.relativePath;return M?Ee(M,N):[]}),u=I(i.value);D(i,(M,N)=>{JSON.stringify(M)!==JSON.stringify(N)&&(u.value=i.value)});const p=y(()=>s.value.sidebar!==!1&&u.value.length>0&&s.value.layout!=="home"),v=y(()=>_?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),_=y(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),L=y(()=>p.value&&n.value),k=y(()=>p.value?Vt(u.value):[]);function A(){a.value=!0}function P(){a.value=!1}function w(){a.value?P():A()}return{isOpen:a,sidebar:u,sidebarGroups:k,hasSidebar:p,hasAside:_,leftAside:v,isSidebarEnabled:L,open:A,close:P,toggle:w}}function Nt(s,e){let t;ee(()=>{t=s.value?document.activeElement:void 0}),K(()=>{window.addEventListener("keyup",n)}),me(()=>{window.removeEventListener("keyup",n)});function n(a){a.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function Tt(s){const{page:e,hash:t}=S(),n=I(!1),a=y(()=>s.value.collapsed!=null),i=y(()=>!!s.value.link),u=I(!1),p=()=>{u.value=z(e.value.relativePath,s.value.link)};D([e,s,t],p),K(p);const v=y(()=>u.value?!0:s.value.items?pe(e.value.relativePath,s.value.items):!1),_=y(()=>!!(s.value.items&&s.value.items.length));ee(()=>{n.value=!!(a.value&&s.value.collapsed)}),_e(()=>{(u.value||v.value)&&(n.value=!1)});function L(){a.value&&(n.value=!n.value)}return{collapsed:n,collapsible:a,isLink:i,isActiveLink:u,hasActiveLink:v,hasChildren:_,toggle:L}}function Ct(){const{hasSidebar:s}=O(),e=ce("(min-width: 960px)"),t=ce("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const ve=[];function Qe(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:wt(t),link:"#"+t.id,level:n}});return Mt(e,s)}function wt(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 Mt(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,a]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(u=>u.level>=n&&u.level<=a),ve.length=0;for(const{element:u,link:p}of s)ve.push({element:u,link:p});const i=[];e:for(let u=0;u=0;v--){const _=s[v];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),qe(()=>{u(location.hash)}),me(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const p=window.scrollY,v=window.innerHeight,_=document.body.offsetHeight,L=Math.abs(p+v-_)<1,k=ve.map(({element:P,link:w})=>({link:w,top:Et(P)})).filter(({top:P})=>!Number.isNaN(P)).sort((P,w)=>P.top-w.top);if(!k.length){u(null);return}if(p<1){u(null);return}if(L){u(k[k.length-1].link);return}let A=null;for(const{link:P,top:w}of k){if(w>p+xe()+4)break;A=P}u(A)}function u(p){a&&a.classList.remove("active"),p==null?a=null:a=s.value.querySelector(`a[href="${decodeURIComponent(p)}"]`);const v=a;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Et(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Qt=["href","title"],Ft=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const n=t.href.split("#")[1],a=document.getElementById(decodeURIComponent(n));a==null||a.focus({preventScroll:!0})}return(t,n)=>{const a=j("VPDocOutlineItem",!0);return o(),l("ul",{class:T(["VPDocOutlineItem",t.root?"root":"nested"])},[(o(!0),l(C,null,Q(t.headers,({children:i,link:u,title:p})=>(o(),l("li",null,[d("a",{class:"outline-link",href:u,onClick:e,title:p},V(p),9,Qt),i!=null&&i.length?(o(),$(a,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Fe=g(Ft,[["__scopeId","data-v-3f927ebe"]]),Ht={class:"content"},Wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Dt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=S(),n=Ie([]);te(()=>{n.value=ke(e.value.outline??t.value.outline)});const a=I(),i=I();return Bt(a,i),(u,p)=>(o(),l("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:a},[d("div",Ht,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",Wt,V(r(Qe)(r(t))),1),b(Fe,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Ot=g(Dt,[["__scopeId","data-v-b38bf2ff"]]),Ut={class:"VPDocAsideCarbonAds"},Gt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(o(),l("div",Ut,[b(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Jt=s=>(B("data-v-6d7b3c46"),s=s(),E(),s),Kt={class:"VPDocAside"},jt=Jt(()=>d("div",{class:"spacer"},null,-1)),zt=m({__name:"VPDocAside",setup(s){const{theme:e}=S();return(t,n)=>(o(),l("div",Kt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),b(Ot),c(t.$slots,"aside-outline-after",{},void 0,!0),jt,c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(o(),$(Gt,{key:0,"carbon-ads":r(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)]))}}),Rt=g(zt,[["__scopeId","data-v-6d7b3c46"]]);function Zt(){const{theme:s,page:e}=S();return y(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{};let a;return typeof n=="function"?a=n(e.value):a=n.replace(/:path/g,e.value.filePath),{url:a,text:t}})}function Yt(){const{page:s,theme:e,frontmatter:t}=S();return y(()=>{var _,L,k,A,P,w,M,N;const n=Ee(e.value.sidebar,s.value.relativePath),a=It(n),i=Xt(a,U=>U.link.replace(/[?#].*$/,"")),u=i.findIndex(U=>z(s.value.relativePath,U.link)),p=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:p?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[u-1])==null?void 0:k.docFooterText)??((A=i[u-1])==null?void 0:A.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((P=i[u-1])==null?void 0:P.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((w=i[u+1])==null?void 0:w.docFooterText)??((M=i[u+1])==null?void 0:M.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[u+1])==null?void 0:N.link)}}})}function Xt(s,e){const t=new Set;return s.filter(n=>{const a=e(n);return t.has(a)?!1:t.add(a)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Ne.test(e.href)||e.target==="_blank");return(a,i)=>(o(),$(W(t.value),{class:T(["VPLink",{link:a.href,"vp-external-link-icon":n.value,"no-icon":a.noIcon}]),href:a.href?r(ge)(a.href):void 0,target:a.target??(n.value?"_blank":void 0),rel:a.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[c(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),qt={class:"VPLastUpdated"},xt=["datetime"],es=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:n}=S(),a=y(()=>new Date(t.value.lastUpdated)),i=y(()=>a.value.toISOString()),u=I("");return K(()=>{ee(()=>{var p,v,_;u.value=new Intl.DateTimeFormat((v=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&v.forceLocale?n.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(a.value)})}),(p,v)=>{var _;return o(),l("p",qt,[H(V(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},V(u.value),9,xt)])}}}),ts=g(es,[["__scopeId","data-v-475f71b8"]]),He=s=>(B("data-v-4f9813fa"),s=s(),E(),s),ss={key:0,class:"VPDocFooter"},as={key:0,class:"edit-info"},ns={key:0,class:"edit-link"},os=He(()=>d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),rs={key:1,class:"last-updated"},is={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},ls=He(()=>d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),cs={class:"pager"},us=["innerHTML"],ds=["innerHTML"],ps={class:"pager"},vs=["innerHTML"],hs=["innerHTML"],fs=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=S(),a=Zt(),i=Yt(),u=y(()=>e.value.editLink&&n.value.editLink!==!1),p=y(()=>t.value.lastUpdated),v=y(()=>u.value||p.value||i.value.prev||i.value.next);return(_,L)=>{var k,A,P,w;return v.value?(o(),l("footer",ss,[c(_.$slots,"doc-footer-before",{},void 0,!0),u.value||p.value?(o(),l("div",as,[u.value?(o(),l("div",ns,[b(F,{class:"edit-link-button",href:r(a).url,"no-icon":!0},{default:h(()=>[os,H(" "+V(r(a).text),1)]),_:1},8,["href"])])):f("",!0),p.value?(o(),l("div",rs,[b(ts)])):f("",!0)])):f("",!0),(k=r(i).prev)!=null&&k.link||(A=r(i).next)!=null&&A.link?(o(),l("nav",is,[ls,d("div",cs,[(P=r(i).prev)!=null&&P.link?(o(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:h(()=>{var M;return[d("span",{class:"desc",innerHTML:((M=r(e).docFooter)==null?void 0:M.prev)||"Previous page"},null,8,us),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,ds)]}),_:1},8,["href"])):f("",!0)]),d("div",ps,[(w=r(i).next)!=null&&w.link?(o(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:h(()=>{var M;return[d("span",{class:"desc",innerHTML:((M=r(e).docFooter)==null?void 0:M.next)||"Next page"},null,8,vs),d("span",{class:"title",innerHTML:r(i).next.text},null,8,hs)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ms=g(fs,[["__scopeId","data-v-4f9813fa"]]),_s=s=>(B("data-v-83890dd9"),s=s(),E(),s),bs={class:"container"},gs=_s(()=>d("div",{class:"aside-curtain"},null,-1)),ks={class:"aside-container"},$s={class:"aside-content"},ys={class:"content"},As={class:"content-container"},Ps={class:"main"},Ss=m({__name:"VPDoc",setup(s){const{theme:e}=S(),t=se(),{hasSidebar:n,hasAside:a,leftAside:i}=O(),u=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(p,v)=>{const _=j("Content");return o(),l("div",{class:T(["VPDoc",{"has-sidebar":r(n),"has-aside":r(a)}])},[c(p.$slots,"doc-top",{},void 0,!0),d("div",bs,[r(a)?(o(),l("div",{key:0,class:T(["aside",{"left-aside":r(i)}])},[gs,d("div",ks,[d("div",$s,[b(Rt,null,{"aside-top":h(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),d("div",ys,[d("div",As,[c(p.$slots,"doc-before",{},void 0,!0),d("main",Ps,[b(_,{class:T(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(ms,null,{"doc-footer-before":h(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(p.$slots,"doc-after",{},void 0,!0)])])]),c(p.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ls=g(Ss,[["__scopeId","data-v-83890dd9"]]),Vs=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.href&&Ne.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(a,i)=>(o(),$(W(n.value),{class:T(["VPButton",[a.size,a.theme]]),href:a.href?r(ge)(a.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:h(()=>[H(V(a.text),1)]),_:1},8,["class","href","target","rel"]))}}),Is=g(Vs,[["__scopeId","data-v-14206e74"]]),Ns=["src","alt"],Ts=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=j("VPImage",!0);return e.image?(o(),l(C,{key:0},[typeof e.image=="string"||"src"in e.image?(o(),l("img",J({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(fe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Ns)):(o(),l(C,{key:1},[b(n,J({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(n,J({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),x=g(Ts,[["__scopeId","data-v-35a7d0b8"]]),Cs=s=>(B("data-v-955009fc"),s=s(),E(),s),ws={class:"container"},Ms={class:"main"},Bs={key:0,class:"name"},Es=["innerHTML"],Qs=["innerHTML"],Fs=["innerHTML"],Hs={key:0,class:"actions"},Ws={key:0,class:"image"},Ds={class:"image-container"},Os=Cs(()=>d("div",{class:"image-bg"},null,-1)),Us=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=Z("hero-image-slot-exists");return(t,n)=>(o(),l("div",{class:T(["VPHero",{"has-image":t.image||r(e)}])},[d("div",ws,[d("div",Ms,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(o(),l("h1",Bs,[d("span",{innerHTML:t.name,class:"clip"},null,8,Es)])):f("",!0),t.text?(o(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Qs)):f("",!0),t.tagline?(o(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Fs)):f("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(o(),l("div",Hs,[(o(!0),l(C,null,Q(t.actions,a=>(o(),l("div",{key:a.link,class:"action"},[b(Is,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link,target:a.target,rel:a.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(o(),l("div",Ws,[d("div",Ds,[Os,c(t.$slots,"home-hero-image",{},()=>[t.image?(o(),$(x,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Gs=g(Us,[["__scopeId","data-v-955009fc"]]),Js=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=S();return(t,n)=>r(e).hero?(o(),$(Gs,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":h(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Ks=s=>(B("data-v-f5e9645b"),s=s(),E(),s),js={class:"box"},zs={key:0,class:"icon"},Rs=["innerHTML"],Zs=["innerHTML"],Ys=["innerHTML"],Xs={key:4,class:"link-text"},qs={class:"link-text-value"},xs=Ks(()=>d("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),ea=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(o(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[d("article",js,[typeof e.icon=="object"&&e.icon.wrap?(o(),l("div",zs,[b(x,{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"?(o(),$(x,{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?(o(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Rs)):f("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Zs),e.details?(o(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,Ys)):f("",!0),e.linkText?(o(),l("div",Xs,[d("p",qs,[H(V(e.linkText)+" ",1),xs])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),ta=g(ea,[["__scopeId","data-v-f5e9645b"]]),sa={key:0,class:"VPFeatures"},aa={class:"container"},na={class:"items"},oa=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=y(()=>{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,a)=>n.features?(o(),l("div",sa,[d("div",aa,[d("div",na,[(o(!0),l(C,null,Q(n.features,i=>(o(),l("div",{key:i.title,class:T(["item",[t.value]])},[b(ta,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),ra=g(oa,[["__scopeId","data-v-d0a190d7"]]),ia=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=S();return(t,n)=>r(e).features?(o(),$(ra,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),la=m({__name:"VPHomeContent",setup(s){const{width:e}=et({initialWidth:0,includeScrollbar:!1});return(t,n)=>(o(),l("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),ca=g(la,[["__scopeId","data-v-7a48a447"]]),ua={class:"VPHome"},da=m({__name:"VPHome",setup(s){const{frontmatter:e}=S();return(t,n)=>{const a=j("Content");return o(),l("div",ua,[c(t.$slots,"home-hero-before",{},void 0,!0),b(Js,null,{"home-hero-info-before":h(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[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(ia),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(o(),$(ca,{key:0},{default:h(()=>[b(a)]),_:1})):(o(),$(a,{key:1}))])}}}),pa=g(da,[["__scopeId","data-v-cbb6ec48"]]),va={},ha={class:"VPPage"};function fa(s,e){const t=j("Content");return o(),l("div",ha,[c(s.$slots,"page-top"),b(t),c(s.$slots,"page-bottom")])}const ma=g(va,[["render",fa]]),_a=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=S(),{hasSidebar:n}=O();return(a,i)=>(o(),l("div",{class:T(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(a.$slots,"not-found",{key:0},()=>[b(Lt)],!0):r(t).layout==="page"?(o(),$(ma,{key:1},{"page-top":h(()=>[c(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(o(),$(pa,{key:2},{"home-hero-before":h(()=>[c(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(o(),$(W(r(t).layout),{key:3})):(o(),$(Ls,{key:4},{"doc-top":h(()=>[c(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[c(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[c(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[c(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[c(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ba=g(_a,[["__scopeId","data-v-91765379"]]),ga={class:"container"},ka=["innerHTML"],$a=["innerHTML"],ya=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=O();return(a,i)=>r(e).footer&&r(t).footer!==!1?(o(),l("footer",{key:0,class:T(["VPFooter",{"has-sidebar":r(n)}])},[d("div",ga,[r(e).footer.message?(o(),l("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ka)):f("",!0),r(e).footer.copyright?(o(),l("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,$a)):f("",!0)])],2)):f("",!0)}}),Aa=g(ya,[["__scopeId","data-v-c970a860"]]);function Pa(){const{theme:s,frontmatter:e}=S(),t=Ie([]),n=y(()=>t.value.length>0);return te(()=>{t.value=ke(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:n}}const Sa=s=>(B("data-v-bc9dc845"),s=s(),E(),s),La={class:"menu-text"},Va=Sa(()=>d("span",{class:"vpi-chevron-right icon"},null,-1)),Ia={class:"header"},Na={class:"outline"},Ta=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=S(),n=I(!1),a=I(0),i=I(),u=I();function p(k){var A;(A=i.value)!=null&&A.contains(k.target)||(n.value=!1)}D(n,k=>{if(k){document.addEventListener("click",p);return}document.removeEventListener("click",p)}),ue("Escape",()=>{n.value=!1}),te(()=>{n.value=!1});function v(){n.value=!n.value,a.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(k){k.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Ce(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,A)=>(o(),l("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":a.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(o(),l("button",{key:0,onClick:v,class:T({open:n.value})},[d("span",La,V(r(Qe)(r(t))),1),Va],2)):(o(),l("button",{key:1,onClick:L},V(r(t).returnToTopLabel||"Return to top"),1)),b(he,{name:"flyout"},{default:h(()=>[n.value?(o(),l("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:_},[d("div",Ia,[d("a",{class:"top-link",href:"#",onClick:L},V(r(t).returnToTopLabel||"Return to top"),1)]),d("div",Na,[b(Fe,{headers:k.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Ca=g(Ta,[["__scopeId","data-v-bc9dc845"]]),wa=s=>(B("data-v-070ab83d"),s=s(),E(),s),Ma={class:"container"},Ba=["aria-expanded"],Ea=wa(()=>d("span",{class:"vpi-align-left menu-icon"},null,-1)),Qa={class:"menu-text"},Fa=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=O(),{headers:a}=Pa(),{y:i}=we(),u=I(0);K(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{a.value=ke(t.value.outline??e.value.outline)});const p=y(()=>a.value.length===0),v=y(()=>p.value&&!n.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:p.value,fixed:v.value}));return(L,k)=>r(t).layout!=="home"&&(!v.value||r(i)>=u.value)?(o(),l("div",{key:0,class:T(_.value)},[d("div",Ma,[r(n)?(o(),l("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=A=>L.$emit("open-menu"))},[Ea,d("span",Qa,V(r(e).sidebarMenuLabel||"Menu"),1)],8,Ba)):f("",!0),b(Ca,{headers:r(a),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ha=g(Fa,[["__scopeId","data-v-070ab83d"]]);function Wa(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",a)}function t(){s.value=!1,window.removeEventListener("resize",a)}function n(){s.value?t():e()}function a(){window.outerWidth>=768&&t()}const i=se();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const Da={},Oa={class:"VPSwitch",type:"button",role:"switch"},Ua={class:"check"},Ga={key:0,class:"icon"};function Ja(s,e){return o(),l("button",Oa,[d("span",Ua,[s.$slots.default?(o(),l("span",Ga,[c(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Ka=g(Da,[["render",Ja],["__scopeId","data-v-4a1c76db"]]),We=s=>(B("data-v-e40a8bb6"),s=s(),E(),s),ja=We(()=>d("span",{class:"vpi-sun sun"},null,-1)),za=We(()=>d("span",{class:"vpi-moon moon"},null,-1)),Ra=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=S(),n=Z("toggle-appearance",()=>{e.value=!e.value}),a=I("");return _e(()=>{a.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,u)=>(o(),$(Ka,{title:a.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:h(()=>[ja,za]),_:1},8,["title","aria-checked","onClick"]))}}),$e=g(Ra,[["__scopeId","data-v-e40a8bb6"]]),Za={key:0,class:"VPNavBarAppearance"},Ya=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=S();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(o(),l("div",Za,[b($e)])):f("",!0)}}),Xa=g(Ya,[["__scopeId","data-v-af096f4a"]]),ye=I();let De=!1,le=0;function qa(s){const e=I(!1);if(ae){!De&&xa(),le++;const t=D(ye,n=>{var a,i,u;n===s.el.value||(a=s.el.value)!=null&&a.contains(n)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(u=s.onBlur)==null||u.call(s))});me(()=>{t(),le--,le||en()})}return tt(e)}function xa(){document.addEventListener("focusin",Oe),De=!0,ye.value=document.activeElement}function en(){document.removeEventListener("focusin",Oe)}function Oe(){ye.value=document.activeElement}const tn={class:"VPMenuLink"},sn=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=S();return(t,n)=>(o(),l("div",tn,[b(F,{class:T({active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:h(()=>[H(V(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=g(sn,[["__scopeId","data-v-8b74d055"]]),an={class:"VPMenuGroup"},nn={key:0,class:"title"},on=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(o(),l("div",an,[e.text?(o(),l("p",nn,V(e.text),1)):f("",!0),(o(!0),l(C,null,Q(e.items,n=>(o(),l(C,null,["link"in n?(o(),$(ne,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),rn=g(on,[["__scopeId","data-v-48c802d0"]]),ln={class:"VPMenu"},cn={key:0,class:"items"},un=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(o(),l("div",ln,[e.items?(o(),l("div",cn,[(o(!0),l(C,null,Q(e.items,n=>(o(),l(C,{key:JSON.stringify(n)},["link"in n?(o(),$(ne,{key:0,item:n},null,8,["item"])):"component"in n?(o(),$(W(n.component),J({key:1,ref_for:!0},n.props),null,16)):(o(),$(rn,{key:2,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),dn=g(un,[["__scopeId","data-v-7dd3104a"]]),pn=s=>(B("data-v-e5380155"),s=s(),E(),s),vn=["aria-expanded","aria-label"],hn={key:0,class:"text"},fn=["innerHTML"],mn=pn(()=>d("span",{class:"vpi-chevron-down text-icon"},null,-1)),_n={key:1,class:"vpi-more-horizontal icon"},bn={class:"menu"},gn=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();qa({el:t,onBlur:n});function n(){e.value=!1}return(a,i)=>(o(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":a.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[a.button||a.icon?(o(),l("span",hn,[a.icon?(o(),l("span",{key:0,class:T([a.icon,"option-icon"])},null,2)):f("",!0),a.button?(o(),l("span",{key:1,innerHTML:a.button},null,8,fn)):f("",!0),mn])):(o(),l("span",_n))],8,vn),d("div",bn,[b(dn,{items:a.items},{default:h(()=>[c(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ae=g(gn,[["__scopeId","data-v-e5380155"]]),kn=["href","aria-label","innerHTML"],$n=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,a)=>(o(),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,kn))}}),yn=g($n,[["__scopeId","data-v-717b8b75"]]),An={class:"VPSocialLinks"},Pn=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(o(),l("div",An,[(o(!0),l(C,null,Q(e.links,({link:n,icon:a,ariaLabel:i})=>(o(),$(yn,{key:n,icon:a,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),oe=g(Pn,[["__scopeId","data-v-ee7a9424"]]),Sn={key:0,class:"group translations"},Ln={class:"trans-title"},Vn={key:1,class:"group"},In={class:"item appearance"},Nn={class:"label"},Tn={class:"appearance-action"},Cn={key:2,class:"group"},wn={class:"item social-links"},Mn=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=S(),{localeLinks:n,currentLang:a}=X({correspondingLink:!0}),i=y(()=>n.value.length&&a.value.label||e.value.appearance||t.value.socialLinks);return(u,p)=>i.value?(o(),$(Ae,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[r(n).length&&r(a).label?(o(),l("div",Sn,[d("p",Ln,V(r(a).label),1),(o(!0),l(C,null,Q(r(n),v=>(o(),$(ne,{key:v.link,item:v},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(o(),l("div",Vn,[d("div",In,[d("p",Nn,V(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Tn,[b($e)])])])):f("",!0),r(t).socialLinks?(o(),l("div",Cn,[d("div",wn,[b(oe,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Bn=g(Mn,[["__scopeId","data-v-925effce"]]),En=s=>(B("data-v-5dea55bf"),s=s(),E(),s),Qn=["aria-expanded"],Fn=En(()=>d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)),Hn=[Fn],Wn=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(o(),l("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Hn,10,Qn))}}),Dn=g(Wn,[["__scopeId","data-v-5dea55bf"]]),On=["innerHTML"],Un=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=S();return(t,n)=>(o(),$(F,{class:T({VPNavBarMenuLink:!0,active:r(z)(r(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:h(()=>[d("span",{innerHTML:t.item.text},null,8,On)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Gn=g(Un,[["__scopeId","data-v-ed5ac1f6"]]),Jn=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=S(),n=i=>"component"in i?!1:"link"in i?z(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),a=y(()=>n(e.item));return(i,u)=>(o(),$(Ae,{class:T({VPNavBarMenuGroup:!0,active:r(z)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||a.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Kn=s=>(B("data-v-e6d46098"),s=s(),E(),s),jn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},zn=Kn(()=>d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Rn=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=S();return(t,n)=>r(e).nav?(o(),l("nav",jn,[zn,(o(!0),l(C,null,Q(r(e).nav,a=>(o(),l(C,{key:JSON.stringify(a)},["link"in a?(o(),$(Gn,{key:0,item:a},null,8,["item"])):"component"in a?(o(),$(W(a.component),J({key:1,ref_for:!0},a.props),null,16)):(o(),$(Jn,{key:2,item:a},null,8,["item"]))],64))),128))])):f("",!0)}}),Zn=g(Rn,[["__scopeId","data-v-e6d46098"]]);function Yn(s){const{localeIndex:e,theme:t}=S();function n(a){var w,M,N;const i=a.split("."),u=(w=t.value.search)==null?void 0:w.options,p=u&&typeof u=="object",v=p&&((N=(M=u.locales)==null?void 0:M[e.value])==null?void 0:N.translations)||null,_=p&&u.translations||null;let L=v,k=_,A=s;const P=i.pop();for(const U of i){let G=null;const R=A==null?void 0:A[U];R&&(G=A=R);const re=k==null?void 0:k[U];re&&(G=k=re);const ie=L==null?void 0:L[U];ie&&(G=L=ie),R||(A=G),re||(k=G),ie||(L=G)}return(L==null?void 0:L[P])??(k==null?void 0:k[P])??(A==null?void 0:A[P])??""}return n}const Xn=["aria-label"],qn={class:"DocSearch-Button-Container"},xn=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),eo={class:"DocSearch-Button-Placeholder"},to=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Se=m({__name:"VPNavBarSearchButton",setup(s){const t=Yn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,a)=>(o(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",qn,[xn,d("span",eo,V(r(t)("button.buttonText")),1)]),to],8,Xn))}}),so={class:"VPNavBarSearch"},ao={id:"local-search"},no={key:1,id:"docsearch"},oo=m({__name:"VPNavBarSearch",setup(s){const e=st(()=>at(()=>import("./VPLocalSearchBox.CIQr89Xt.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=S(),a=I(!1),i=I(!1);K(()=>{});function u(){a.value||(a.value=!0,setTimeout(p,16))}function p(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function v(k){const A=k.target,P=A.tagName;return A.isContentEditable||P==="INPUT"||P==="SELECT"||P==="TEXTAREA"}const _=I(!1);ue("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),_.value=!0)}),ue("/",k=>{v(k)||(k.preventDefault(),_.value=!0)});const L="local";return(k,A)=>{var P;return o(),l("div",so,[r(L)==="local"?(o(),l(C,{key:0},[_.value?(o(),$(r(e),{key:0,onClose:A[0]||(A[0]=w=>_.value=!1)})):f("",!0),d("div",ao,[b(Se,{onClick:A[1]||(A[1]=w=>_.value=!0)})])],64)):r(L)==="algolia"?(o(),l(C,{key:1},[a.value?(o(),$(r(t),{key:0,algolia:((P=r(n).search)==null?void 0:P.options)??r(n).algolia,onVnodeBeforeMount:A[2]||(A[2]=w=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(o(),l("div",no,[b(Se,{onClick:u})]))],64)):f("",!0)])}}}),ro=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=S();return(t,n)=>r(e).socialLinks?(o(),$(oe,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),io=g(ro,[["__scopeId","data-v-164c457f"]]),lo=["href","rel","target"],co={key:1},uo={key:2},po=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=S(),{hasSidebar:n}=O(),{currentLang:a}=X(),i=y(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),u=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),p=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,_)=>(o(),l("div",{class:T(["VPNavBarTitle",{"has-sidebar":r(n)}])},[d("a",{class:"title",href:i.value??r(ge)(r(a).link),rel:u.value,target:p.value},[c(v.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(o(),$(x,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(o(),l("span",co,V(r(t).siteTitle),1)):r(t).siteTitle===void 0?(o(),l("span",uo,V(r(e).title),1)):f("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,lo)],2))}}),vo=g(po,[["__scopeId","data-v-28a961f9"]]),ho={class:"items"},fo={class:"title"},mo=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=S(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(a,i)=>r(t).length&&r(n).label?(o(),$(Ae,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:h(()=>[d("div",ho,[d("p",fo,V(r(n).label),1),(o(!0),l(C,null,Q(r(t),u=>(o(),$(ne,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),_o=g(mo,[["__scopeId","data-v-c80d9ad0"]]),bo=s=>(B("data-v-822684d1"),s=s(),E(),s),go={class:"wrapper"},ko={class:"container"},$o={class:"title"},yo={class:"content"},Ao={class:"content-body"},Po=bo(()=>d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1)),So=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=we(),{hasSidebar:n}=O(),{frontmatter:a}=S(),i=I({});return _e(()=>{i.value={"has-sidebar":n.value,home:a.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(u,p)=>(o(),l("div",{class:T(["VPNavBar",i.value])},[d("div",go,[d("div",ko,[d("div",$o,[b(vo,null,{"nav-bar-title-before":h(()=>[c(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",yo,[d("div",Ao,[c(u.$slots,"nav-bar-content-before",{},void 0,!0),b(oo,{class:"search"}),b(Zn,{class:"menu"}),b(_o,{class:"translations"}),b(Xa,{class:"appearance"}),b(io,{class:"social-links"}),b(Bn,{class:"extra"}),c(u.$slots,"nav-bar-content-after",{},void 0,!0),b(Dn,{class:"hamburger",active:u.isScreenOpen,onClick:p[0]||(p[0]=v=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),Po],2))}}),Lo=g(So,[["__scopeId","data-v-822684d1"]]),Vo={key:0,class:"VPNavScreenAppearance"},Io={class:"text"},No=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=S();return(n,a)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(o(),l("div",Vo,[d("p",Io,V(r(t).darkModeSwitchLabel||"Appearance"),1),b($e)])):f("",!0)}}),To=g(No,[["__scopeId","data-v-ffb44008"]]),Co=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=Z("close-screen");return(t,n)=>(o(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),wo=g(Co,[["__scopeId","data-v-27d04aeb"]]),Mo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=Z("close-screen");return(t,n)=>(o(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:h(()=>[H(V(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ue=g(Mo,[["__scopeId","data-v-7179dbb7"]]),Bo={class:"VPNavScreenMenuGroupSection"},Eo={key:0,class:"title"},Qo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(o(),l("div",Bo,[e.text?(o(),l("p",Eo,V(e.text),1)):f("",!0),(o(!0),l(C,null,Q(e.items,n=>(o(),$(Ue,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Fo=g(Qo,[["__scopeId","data-v-4b8941ac"]]),Ho=s=>(B("data-v-875057a5"),s=s(),E(),s),Wo=["aria-controls","aria-expanded"],Do=["innerHTML"],Oo=Ho(()=>d("span",{class:"vpi-plus button-icon"},null,-1)),Uo=["id"],Go={key:0,class:"item"},Jo={key:1,class:"item"},Ko={key:2,class:"group"},jo=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function a(){t.value=!t.value}return(i,u)=>(o(),l("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:a},[d("span",{class:"button-text",innerHTML:i.text},null,8,Do),Oo],8,Wo),d("div",{id:n.value,class:"items"},[(o(!0),l(C,null,Q(i.items,p=>(o(),l(C,{key:JSON.stringify(p)},["link"in p?(o(),l("div",Go,[b(Ue,{item:p},null,8,["item"])])):"component"in p?(o(),l("div",Jo,[(o(),$(W(p.component),J({ref_for:!0},p.props,{"screen-menu":""}),null,16))])):(o(),l("div",Ko,[b(Fo,{text:p.text,items:p.items},null,8,["text","items"])]))],64))),128))],8,Uo)],2))}}),zo=g(jo,[["__scopeId","data-v-875057a5"]]),Ro={key:0,class:"VPNavScreenMenu"},Zo=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=S();return(t,n)=>r(e).nav?(o(),l("nav",Ro,[(o(!0),l(C,null,Q(r(e).nav,a=>(o(),l(C,{key:JSON.stringify(a)},["link"in a?(o(),$(wo,{key:0,item:a},null,8,["item"])):"component"in a?(o(),$(W(a.component),J({key:1,ref_for:!0},a.props,{"screen-menu":""}),null,16)):(o(),$(zo,{key:2,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Yo=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=S();return(t,n)=>r(e).socialLinks?(o(),$(oe,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Ge=s=>(B("data-v-362991c2"),s=s(),E(),s),Xo=Ge(()=>d("span",{class:"vpi-languages icon lang"},null,-1)),qo=Ge(()=>d("span",{class:"vpi-chevron-down icon chevron"},null,-1)),xo={class:"list"},er=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=I(!1);function a(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(o(),l("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[d("button",{class:"title",onClick:a},[Xo,H(" "+V(r(t).label)+" ",1),qo]),d("ul",xo,[(o(!0),l(C,null,Q(r(e),p=>(o(),l("li",{key:p.link,class:"item"},[b(F,{class:"link",href:p.link},{default:h(()=>[H(V(p.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),tr=g(er,[["__scopeId","data-v-362991c2"]]),sr={class:"container"},ar=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Me(ae?document.body:null);return(n,a)=>(o(),$(he,{name:"fade",onEnter:a[0]||(a[0]=i=>t.value=!0),onAfterLeave:a[1]||(a[1]=i=>t.value=!1)},{default:h(()=>[n.open?(o(),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(Zo,{class:"menu"}),b(tr,{class:"translations"}),b(To,{class:"appearance"}),b(Yo,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),nr=g(ar,[["__scopeId","data-v-833aabba"]]),or={key:0,class:"VPNav"},rr=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Wa(),{frontmatter:a}=S(),i=y(()=>a.value.navbar!==!1);return be("close-screen",t),ee(()=>{ae&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,p)=>i.value?(o(),l("header",or,[b(Lo,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":h(()=>[c(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(nr,{open:r(e)},{"nav-screen-content-before":h(()=>[c(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),ir=g(rr,[["__scopeId","data-v-f1e365da"]]),Je=s=>(B("data-v-196b2e5f"),s=s(),E(),s),lr=["role","tabindex"],cr=Je(()=>d("div",{class:"indicator"},null,-1)),ur=Je(()=>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:a,isActiveLink:i,hasActiveLink:u,hasChildren:p,toggle:v}=Tt(y(()=>e.item)),_=y(()=>p.value?"section":"div"),L=y(()=>a.value?"a":"div"),k=y(()=>p.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),A=y(()=>a.value?void 0:"button"),P=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":a.value},{"is-active":i.value},{"has-active":u.value}]);function w(N){"key"in N&&N.key!=="Enter"||!e.item.link&&v()}function M(){e.item.link&&v()}return(N,U)=>{const G=j("VPSidebarItem",!0);return o(),$(W(_.value),{class:T(["VPSidebarItem",P.value])},{default:h(()=>[N.item.text?(o(),l("div",J({key:0,class:"item",role:A.value},nt(N.item.items?{click:w,keydown:w}:{},!0),{tabindex:N.item.items&&0}),[cr,N.item.link?(o(),$(F,{key:0,tag:L.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:h(()=>[(o(),$(W(k.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(o(),$(W(k.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(o(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:M,onKeydown:ot(M,["enter"]),tabindex:"0"},dr,32)):f("",!0)],16,lr)):f("",!0),N.item.items&&N.item.items.length?(o(),l("div",pr,[N.depth<5?(o(!0),l(C,{key:0},Q(N.item.items,R=>(o(),$(G,{key:R.text,item:R,depth:N.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),hr=g(vr,[["__scopeId","data-v-196b2e5f"]]),fr=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=I(!0);let t=null;return K(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),rt(()=>{t!=null&&(clearTimeout(t),t=null)}),(n,a)=>(o(!0),l(C,null,Q(n.items,i=>(o(),l("div",{key:i.text,class:T(["group",{"no-transition":e.value}])},[b(hr,{item:i,depth:0},null,8,["item"])],2))),128))}}),mr=g(fr,[["__scopeId","data-v-9e426adc"]]),Ke=s=>(B("data-v-18756405"),s=s(),E(),s),_r=Ke(()=>d("div",{class:"curtain"},null,-1)),br={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},gr=Ke(()=>d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),kr=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),n=s,a=I(null),i=Me(ae?document.body:null);D([n,a],()=>{var p;n.open?(i.value=!0,(p=a.value)==null||p.focus()):i.value=!1},{immediate:!0,flush:"post"});const u=I(0);return D(e,()=>{u.value+=1},{deep:!0}),(p,v)=>r(t)?(o(),l("aside",{key:0,class:T(["VPSidebar",{open:p.open}]),ref_key:"navEl",ref:a,onClick:v[0]||(v[0]=it(()=>{},["stop"]))},[_r,d("nav",br,[gr,c(p.$slots,"sidebar-nav-before",{},void 0,!0),(o(),$(mr,{items:r(e),key:u.value},null,8,["items"])),c(p.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),$r=g(kr,[["__scopeId","data-v-18756405"]]),yr=m({__name:"VPSkipLink",setup(s){const e=se(),t=I();D(()=>e.path,()=>t.value.focus());function n({target:a}){const i=document.getElementById(decodeURIComponent(a.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(a,i)=>(o(),l(C,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))}}),Ar=g(yr,[["__scopeId","data-v-c3508ec8"]]),Pr=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=O(),a=se();D(()=>a.path,n),Nt(e,n);const{frontmatter:i}=S(),u=Be(),p=y(()=>!!u["home-hero-image"]);return be("hero-image-slot-exists",p),(v,_)=>{const L=j("Content");return r(i).layout!==!1?(o(),l("div",{key:0,class:T(["Layout",r(i).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),b(Ar),b(ht,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),b(ir,null,{"nav-bar-title-before":h(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(Ha,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),b($r,{open:r(e)},{"sidebar-nav-before":h(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(ba,null,{"page-top":h(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(Aa),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(o(),$(L,{key:1}))}}}),Sr=g(Pr,[["__scopeId","data-v-a9a9e638"]]),Lr={},Vr={class:"VPTeamPage"};function Ir(s,e){return o(),l("div",Vr,[c(s.$slots,"default")])}const Ni=g(Lr,[["render",Ir],["__scopeId","data-v-c2f8e101"]]),Nr={},Tr={class:"VPTeamPageTitle"},Cr={key:0,class:"title"},wr={key:1,class:"lead"};function Mr(s,e){return o(),l("div",Tr,[s.$slots.title?(o(),l("h1",Cr,[c(s.$slots,"title",{},void 0,!0)])):f("",!0),s.$slots.lead?(o(),l("p",wr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0)])}const Ti=g(Nr,[["render",Mr],["__scopeId","data-v-e277e15c"]]),Br={},Er=s=>(B("data-v-d43bc49d"),s=s(),E(),s),Qr={class:"VPTeamPageSection"},Fr={class:"title"},Hr=Er(()=>d("div",{class:"title-line"},null,-1)),Wr={key:0,class:"title-text"},Dr={key:0,class:"lead"},Or={key:1,class:"members"};function Ur(s,e){return o(),l("section",Qr,[d("div",Fr,[Hr,s.$slots.title?(o(),l("h2",Wr,[c(s.$slots,"title",{},void 0,!0)])):f("",!0)]),s.$slots.lead?(o(),l("p",Dr,[c(s.$slots,"lead",{},void 0,!0)])):f("",!0),s.$slots.members?(o(),l("div",Or,[c(s.$slots,"members",{},void 0,!0)])):f("",!0)])}const Ci=g(Br,[["render",Ur],["__scopeId","data-v-d43bc49d"]]),Gr=s=>(B("data-v-f9987cb6"),s=s(),E(),s),Jr={class:"profile"},Kr={class:"avatar"},jr=["src","alt"],zr={class:"data"},Rr={class:"name"},Zr={key:0,class:"affiliation"},Yr={key:0,class:"title"},Xr={key:1,class:"at"},qr=["innerHTML"],xr={key:2,class:"links"},ei={key:0,class:"sp"},ti=Gr(()=>d("span",{class:"vpi-heart sp-icon"},null,-1)),si=m({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(s){return(e,t)=>(o(),l("article",{class:T(["VPTeamMembersItem",[e.size]])},[d("div",Jr,[d("figure",Kr,[d("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,jr)]),d("div",zr,[d("h1",Rr,V(e.member.name),1),e.member.title||e.member.org?(o(),l("p",Zr,[e.member.title?(o(),l("span",Yr,V(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(o(),l("span",Xr," @ ")):f("",!0),e.member.org?(o(),$(F,{key:2,class:T(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:h(()=>[H(V(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(o(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,qr)):f("",!0),e.member.links?(o(),l("div",xr,[b(oe,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(o(),l("div",ei,[b(F,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:h(()=>[ti,H(" "+V(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),ai=g(si,[["__scopeId","data-v-f9987cb6"]]),ni={class:"container"},oi=m({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(s){const e=s,t=y(()=>[e.size,`count-${e.members.length}`]);return(n,a)=>(o(),l("div",{class:T(["VPTeamMembers",t.value])},[d("div",ni,[(o(!0),l(C,null,Q(n.members,i=>(o(),l("div",{key:i.name,class:"item"},[b(ai,{size:n.size,member:i},null,8,["size","member"])]))),128))])],2))}}),wi=g(oi,[["__scopeId","data-v-fba19bad"]]),Le={Layout:Sr,enhanceApp:({app:s})=>{s.component("Badge",dt)}},ri={},ii=d("br",null,null,-1),li={style:{"text-align":"center"}},ci=lt('

Read n-d array like-data

DiskArrays.jl

Get your chunks!

Named Dimensions

DimensionalData.jl

Select & Index!

Out of memory data

Zarr.jl

Chunkerd, compressed !

Rasterized spatial data

Rasters.jl

Read and manipulate !

Array-oriented data

NetCDF.jl

Scientific binary data.

Raster and vector data

ArchGDAL.jl

GDAL in Julia.

An interface for

GeoInterface.jl

geospatial data in Julia.

A higher level interface

GRIBDatasets.jl

for reading GRIB files.

Array-oriented data

NCDatasets.jl

Scientific binary data.

',9);function ui(s,e){const t=j("font");return o(),l(C,null,[ii,d("h1",li,[d("strong",null,[b(t,{color:"orange"},{default:h(()=>[H(" Package Ecosystem")]),_:1})])]),ci],64)}const di=g(ri,[["render",ui]]),pi=s=>{if(typeof document>"u")return{stabilizeScrollPosition:a=>async(...i)=>a(...i)};const e=document.documentElement;return{stabilizeScrollPosition:n=>async(...a)=>{const i=n(...a),u=s.value;if(!u)return i;const p=u.offsetTop-e.scrollTop;return await Ce(),e.scrollTop=u.offsetTop-p,i}}},je="vitepress:tabSharedState",Y=typeof localStorage<"u"?localStorage:null,ze="vitepress:tabsSharedState",vi=()=>{const s=Y==null?void 0:Y.getItem(ze);if(s)try{return JSON.parse(s)}catch{}return{}},hi=s=>{Y&&Y.setItem(ze,JSON.stringify(s))},fi=s=>{const e=ct({});D(()=>e.content,(t,n)=>{t&&n&&hi(t)},{deep:!0}),s.provide(je,e)},mi=(s,e)=>{const t=Z(je);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");K(()=>{t.content||(t.content=vi())});const n=I(),a=y({get(){var v;const u=e.value,p=s.value;if(u){const _=(v=t.content)==null?void 0:v[u];if(_&&p.includes(_))return _}else{const _=n.value;if(_)return _}return p[0]},set(u){const p=e.value;p?t.content&&(t.content[p]=u):n.value=u}});return{selected:a,select:u=>{a.value=u}}};let Ve=0;const _i=()=>(Ve++,""+Ve);function bi(){const s=Be();return y(()=>{var n;const t=(n=s.default)==null?void 0:n.call(s);return t?t.filter(a=>typeof a.type=="object"&&"__name"in a.type&&a.type.__name==="PluginTabsTab"&&a.props).map(a=>{var i;return(i=a.props)==null?void 0:i.label}):[]})}const Re="vitepress:tabSingleState",gi=s=>{be(Re,s)},ki=()=>{const s=Z(Re);if(!s)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return s},$i={class:"plugin-tabs"},yi=["id","aria-selected","aria-controls","tabindex","onClick"],Ai=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(s){const e=s,t=bi(),{selected:n,select:a}=mi(t,ut(e,"sharedStateKey")),i=I(),{stabilizeScrollPosition:u}=pi(i),p=u(a),v=I([]),_=k=>{var w;const A=t.value.indexOf(n.value);let P;k.key==="ArrowLeft"?P=A>=1?A-1:t.value.length-1:k.key==="ArrowRight"&&(P=A(o(),l("div",$i,[d("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(o(!0),l(C,null,Q(r(t),P=>(o(),l("button",{id:`tab-${P}-${r(L)}`,ref_for:!0,ref_key:"buttonRefs",ref:v,key:P,role:"tab",class:"plugin-tabs--tab","aria-selected":P===r(n),"aria-controls":`panel-${P}-${r(L)}`,tabindex:P===r(n)?0:-1,onClick:()=>r(p)(P)},V(P),9,yi))),128))],544),c(k.$slots,"default")]))}}),Pi=["id","aria-labelledby"],Si=m({__name:"PluginTabsTab",props:{label:{}},setup(s){const{uid:e,selected:t}=ki();return(n,a)=>r(t)===n.label?(o(),l("div",{key:0,id:`panel-${n.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${n.label}-${r(e)}`},[c(n.$slots,"default",{},void 0,!0)],8,Pi)):f("",!0)}}),Li=g(Si,[["__scopeId","data-v-9b0d03d2"]]),Vi=s=>{fi(s),s.component("PluginTabs",Ai),s.component("PluginTabsTab",Li)},Mi={extends:Le,Layout(){return Pe(Le.Layout,null,{"aside-ads-before":()=>Pe(di)})},enhanceApp({app:s,router:e,siteData:t}){Vi(s)}};export{Mi as R,Ti as V,wi as a,Ci as b,Ni as c,Yn as d,S as u}; diff --git a/dev/assets/chunks/theme.o12TANz8.js b/dev/assets/chunks/theme.o12TANz8.js new file mode 100644 index 00000000..1c532229 --- /dev/null +++ b/dev/assets/chunks/theme.o12TANz8.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.tGRBlptZ.js","assets/chunks/framework.Bwkmg46C.js"])))=>i.map(i=>d[i]); +import{d as h,o,c as l,r as u,n as T,a as F,t as V,b as $,w as f,e as m,T as pe,_ as k,u as Ue,i as Ge,f as Je,g as ve,h as y,j as d,k as i,l as K,m as ie,p as I,q as W,s as q,v as G,x as fe,y as me,z as Ke,A as je,B as J,F as C,C as w,D as Se,E as x,G as b,H,I as Ve,J as ee,K as U,L as z,M as ze,N as Ie,O as le,P as Ne,Q as Te,R as te,S as Re,U as Ze,V as Ye,W as Ce,X as he,Y as Xe,Z as qe,$ as xe,a0 as et,a1 as Me,a2 as tt,a3 as st,a4 as nt,a5 as ye}from"./framework.Bwkmg46C.js";const at=h({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(a){return(e,t)=>(o(),l("span",{class:T(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[F(V(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},rt=h({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(a){return(e,t)=>(o(),$(pe,{name:"fade"},{default:f(()=>[e.show?(o(),l("div",ot)):m("",!0)]),_:1}))}}),it=k(rt,[["__scopeId","data-v-b06cdb19"]]),S=Ue;function lt(a,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(a,e):(a(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ce(a){return/^\//.test(a)?a:`/${a}`}function _e(a){const{pathname:e,search:t,hash:n,protocol:s}=new URL(a,"http://a.com");if(Ge(a)||a.startsWith("#")||!s.startsWith("http")||!Je(e))return a;const{site:r}=S(),c=e.endsWith("/")||e.endsWith(".html")?a:a.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return ve(c)}function Z({correspondingLink:a=!1}={}){const{site:e,localeIndex:t,page:n,theme:s,hash:r}=S(),c=y(()=>{var p,_;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,_])=>c.value.label===_.label?[]:{text:_.label,link:ct(_.link||(p==="root"?"/":`/${p}/`),s.value.i18nRouting!==!1&&a,n.value.relativePath.slice(c.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:c}}function ct(a,e,t,n){return e?a.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):a}const ut={class:"NotFound"},dt={class:"code"},pt={class:"title"},vt={class:"quote"},ft={class:"action"},mt=["href","aria-label"],ht=h({__name:"NotFound",setup(a){const{theme:e}=S(),{currentLang:t}=Z();return(n,s)=>{var r,c,v,p,_;return o(),l("div",ut,[d("p",dt,V(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),d("h1",pt,V(((c=i(e).notFound)==null?void 0:c.title)??"PAGE NOT FOUND"),1),s[0]||(s[0]=d("div",{class:"divider"},null,-1)),d("blockquote",vt,V(((v=i(e).notFound)==null?void 0:v.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",ft,[d("a",{class:"link",href:i(ve)(i(t).link),"aria-label":((p=i(e).notFound)==null?void 0:p.linkLabel)??"go to home"},V(((_=i(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,mt)])])}}}),_t=k(ht,[["__scopeId","data-v-951cab6c"]]);function Be(a,e){if(Array.isArray(a))return Y(a);if(a==null)return[];e=ce(e);const t=Object.keys(a).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>e.startsWith(ce(s))),n=t?a[t]:[];return Array.isArray(n)?Y(n):Y(n.items,n.base)}function bt(a){const e=[];let t=0;for(const n in a){const s=a[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function gt(a){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(a),e}function ue(a,e){return Array.isArray(e)?e.some(t=>ue(a,t)):K(a,e.link)?!0:e.items?ue(a,e.items):!1}function Y(a,e){return[...a].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Y(n.items,s)),n})}function D(){const{frontmatter:a,page:e,theme:t}=S(),n=ie("(min-width: 960px)"),s=I(!1),r=y(()=>{const B=t.value.sidebar,N=e.value.relativePath;return B?Be(B,N):[]}),c=I(r.value);W(r,(B,N)=>{JSON.stringify(B)!==JSON.stringify(N)&&(c.value=r.value)});const v=y(()=>a.value.sidebar!==!1&&c.value.length>0&&a.value.layout!=="home"),p=y(()=>_?a.value.aside==null?t.value.aside==="left":a.value.aside==="left":!1),_=y(()=>a.value.layout==="home"?!1:a.value.aside!=null?!!a.value.aside:t.value.aside!==!1),L=y(()=>v.value&&n.value),g=y(()=>v.value?bt(c.value):[]);function A(){s.value=!0}function P(){s.value=!1}function M(){s.value?P():A()}return{isOpen:s,sidebar:c,sidebarGroups:g,hasSidebar:v,hasAside:_,leftAside:p,isSidebarEnabled:L,open:A,close:P,toggle:M}}function kt(a,e){let t;q(()=>{t=a.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",n)}),fe(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&a.value&&(e(),t==null||t.focus())}}function $t(a){const{page:e,hash:t}=S(),n=I(!1),s=y(()=>a.value.collapsed!=null),r=y(()=>!!a.value.link),c=I(!1),v=()=>{c.value=K(e.value.relativePath,a.value.link)};W([e,a,t],v),G(v);const p=y(()=>c.value?!0:a.value.items?ue(e.value.relativePath,a.value.items):!1),_=y(()=>!!(a.value.items&&a.value.items.length));q(()=>{n.value=!!(s.value&&a.value.collapsed)}),me(()=>{(c.value||p.value)&&(n.value=!1)});function L(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:r,isActiveLink:c,hasActiveLink:p,hasChildren:_,toggle:L}}function yt(){const{hasSidebar:a}=D(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:a.value?t.value:e.value)}}const de=[];function we(a){return typeof a.outline=="object"&&!Array.isArray(a.outline)&&a.outline.label||a.outlineTitle||"On this page"}function be(a){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 Pt(e,a)}function At(a){let e="";for(const t of a.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 Pt(a,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;a=a.filter(c=>c.level>=n&&c.level<=s),de.length=0;for(const{element:c,link:v}of a)de.push({element:c,link:v});const r=[];e:for(let c=0;c=0;p--){const _=a[p];if(_.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ke(()=>{c(location.hash)}),fe(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const v=window.scrollY,p=window.innerHeight,_=document.body.offsetHeight,L=Math.abs(v+p-_)<1,g=de.map(({element:P,link:M})=>({link:M,top:St(P)})).filter(({top:P})=>!Number.isNaN(P)).sort((P,M)=>P.top-M.top);if(!g.length){c(null);return}if(v<1){c(null);return}if(L){c(g[g.length-1].link);return}let A=null;for(const{link:P,top:M}of g){if(M>v+je()+4)break;A=P}c(A)}function c(v){s&&s.classList.remove("active"),v==null?s=null:s=a.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const p=s;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 St(a){let e=0;for(;a!==document.body;){if(a===null)return NaN;e+=a.offsetTop,a=a.offsetParent}return e}const Vt=["href","title"],It=h({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(a){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=J("VPDocOutlineItem",!0);return o(),l("ul",{class:T(["VPDocOutlineItem",t.root?"root":"nested"])},[(o(!0),l(C,null,w(t.headers,({children:r,link:c,title:v})=>(o(),l("li",null,[d("a",{class:"outline-link",href:c,onClick:e,title:v},V(v),9,Vt),r!=null&&r.length?(o(),$(s,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}}),Ee=k(It,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},Tt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ct=h({__name:"VPDocAsideOutline",setup(a){const{frontmatter:e,theme:t}=S(),n=Se([]);x(()=>{n.value=be(e.value.outline??t.value.outline)});const s=I(),r=I();return Lt(s,r),(c,v)=>(o(),l("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s},[d("div",Nt,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",Tt,V(i(we)(i(t))),1),b(Ee,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Mt=k(Ct,[["__scopeId","data-v-b38bf2ff"]]),Bt={class:"VPDocAsideCarbonAds"},wt=h({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(a){const e=()=>null;return(t,n)=>(o(),l("div",Bt,[b(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Et={class:"VPDocAside"},Qt=h({__name:"VPDocAside",setup(a){const{theme:e}=S();return(t,n)=>(o(),l("div",Et,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),b(Mt),u(t.$slots,"aside-outline-after",{},void 0,!0),n[0]||(n[0]=d("div",{class:"spacer"},null,-1)),u(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(o(),$(wt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):m("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=k(Qt,[["__scopeId","data-v-6d7b3c46"]]);function Ht(){const{theme:a,page:e}=S();return y(()=>{const{text:t="Edit this page",pattern:n=""}=a.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Wt(){const{page:a,theme:e,frontmatter:t}=S();return y(()=>{var _,L,g,A,P,M,B,N;const n=Be(e.value.sidebar,a.value.relativePath),s=gt(n),r=Dt(s,E=>E.link.replace(/[?#].*$/,"")),c=r.findIndex(E=>K(a.value.relativePath,E.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((g=r[c-1])==null?void 0:g.docFooterText)??((A=r[c-1])==null?void 0:A.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((P=r[c-1])==null?void 0:P.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)??((M=r[c+1])==null?void 0:M.docFooterText)??((B=r[c+1])==null?void 0:B.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=r[c+1])==null?void 0:N.link)}}})}function Dt(a,e){const t=new Set;return a.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const Q=h({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(a){const e=a,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Ve.test(e.href)||e.target==="_blank");return(s,r)=>(o(),$(H(t.value),{class:T(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?i(_e)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:f(()=>[u(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ot={class:"VPLastUpdated"},Ut=["datetime"],Gt=h({__name:"VPDocFooterLastUpdated",setup(a){const{theme:e,page:t,lang:n}=S(),s=y(()=>new Date(t.value.lastUpdated)),r=y(()=>s.value.toISOString()),c=I("");return G(()=>{q(()=>{var v,p,_;c.value=new Intl.DateTimeFormat((p=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&p.forceLocale?n.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(s.value)})}),(v,p)=>{var _;return o(),l("p",Ot,[F(V(((_=i(e).lastUpdated)==null?void 0:_.text)||i(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:r.value},V(c.value),9,Ut)])}}}),Jt=k(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},jt={key:0,class:"edit-info"},zt={key:0,class:"edit-link"},Rt={key:1,class:"last-updated"},Zt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],qt=["innerHTML"],xt={class:"pager"},es=["innerHTML"],ts=["innerHTML"],ss=h({__name:"VPDocFooter",setup(a){const{theme:e,page:t,frontmatter:n}=S(),s=Ht(),r=Wt(),c=y(()=>e.value.editLink&&n.value.editLink!==!1),v=y(()=>t.value.lastUpdated),p=y(()=>c.value||v.value||r.value.prev||r.value.next);return(_,L)=>{var g,A,P,M;return p.value?(o(),l("footer",Kt,[u(_.$slots,"doc-footer-before",{},void 0,!0),c.value||v.value?(o(),l("div",jt,[c.value?(o(),l("div",zt,[b(Q,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:f(()=>[L[0]||(L[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),F(" "+V(i(s).text),1)]),_:1},8,["href"])])):m("",!0),v.value?(o(),l("div",Rt,[b(Jt)])):m("",!0)])):m("",!0),(g=i(r).prev)!=null&&g.link||(A=i(r).next)!=null&&A.link?(o(),l("nav",Zt,[L[1]||(L[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",Yt,[(P=i(r).prev)!=null&&P.link?(o(),$(Q,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:f(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,Xt),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,qt)]}),_:1},8,["href"])):m("",!0)]),d("div",xt,[(M=i(r).next)!=null&&M.link?(o(),$(Q,{key:0,class:"pager-link next",href:i(r).next.link},{default:f(()=>{var B;return[d("span",{class:"desc",innerHTML:((B=i(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,es),d("span",{class:"title",innerHTML:i(r).next.text},null,8,ts)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),ns=k(ss,[["__scopeId","data-v-4f9813fa"]]),as={class:"container"},os={class:"aside-container"},rs={class:"aside-content"},is={class:"content"},ls={class:"content-container"},cs={class:"main"},us=h({__name:"VPDoc",setup(a){const{theme:e}=S(),t=ee(),{hasSidebar:n,hasAside:s,leftAside:r}=D(),c=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,p)=>{const _=J("Content");return o(),l("div",{class:T(["VPDoc",{"has-sidebar":i(n),"has-aside":i(s)}])},[u(v.$slots,"doc-top",{},void 0,!0),d("div",as,[i(s)?(o(),l("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",os,[d("div",rs,[b(Ft,null,{"aside-top":f(()=>[u(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[u(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[u(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[u(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[u(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[u(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),d("div",is,[d("div",ls,[u(v.$slots,"doc-before",{},void 0,!0),d("main",cs,[b(_,{class:T(["vp-doc",[c.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(ns,null,{"doc-footer-before":f(()=>[u(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(v.$slots,"doc-after",{},void 0,!0)])])]),u(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ds=k(us,[["__scopeId","data-v-83890dd9"]]),ps=h({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(a){const e=a,t=y(()=>e.href&&Ve.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,r)=>(o(),$(H(n.value),{class:T(["VPButton",[s.size,s.theme]]),href:s.href?i(_e)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[F(V(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),vs=k(ps,[["__scopeId","data-v-14206e74"]]),fs=["src","alt"],ms=h({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(a){return(e,t)=>{const n=J("VPImage",!0);return e.image?(o(),l(C,{key:0},[typeof e.image=="string"||"src"in e.image?(o(),l("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fs)):(o(),l(C,{key:1},[b(n,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),b(n,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),X=k(ms,[["__scopeId","data-v-35a7d0b8"]]),hs={class:"container"},_s={class:"main"},bs={key:0,class:"name"},gs=["innerHTML"],ks=["innerHTML"],$s=["innerHTML"],ys={key:0,class:"actions"},As={key:0,class:"image"},Ps={class:"image-container"},Ls=h({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(a){const e=z("hero-image-slot-exists");return(t,n)=>(o(),l("div",{class:T(["VPHero",{"has-image":t.image||i(e)}])},[d("div",hs,[d("div",_s,[u(t.$slots,"home-hero-info-before",{},void 0,!0),u(t.$slots,"home-hero-info",{},()=>[t.name?(o(),l("h1",bs,[d("span",{innerHTML:t.name,class:"clip"},null,8,gs)])):m("",!0),t.text?(o(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,ks)):m("",!0),t.tagline?(o(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$s)):m("",!0)],!0),u(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(o(),l("div",ys,[(o(!0),l(C,null,w(t.actions,s=>(o(),l("div",{key:s.link,class:"action"},[b(vs,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),u(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(o(),l("div",As,[d("div",Ps,[n[0]||(n[0]=d("div",{class:"image-bg"},null,-1)),u(t.$slots,"home-hero-image",{},()=>[t.image?(o(),$(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),Ss=k(Ls,[["__scopeId","data-v-955009fc"]]),Vs=h({__name:"VPHomeHero",setup(a){const{frontmatter:e}=S();return(t,n)=>i(e).hero?(o(),$(Ss,{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":f(()=>[u(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[u(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[u(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[u(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),Is={class:"box"},Ns={key:0,class:"icon"},Ts=["innerHTML"],Cs=["innerHTML"],Ms=["innerHTML"],Bs={key:4,class:"link-text"},ws={class:"link-text-value"},Es=h({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(a){return(e,t)=>(o(),$(Q,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",Is,[typeof e.icon=="object"&&e.icon.wrap?(o(),l("div",Ns,[b(X,{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"?(o(),$(X,{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?(o(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Ts)):m("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Cs),e.details?(o(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,Ms)):m("",!0),e.linkText?(o(),l("div",Bs,[d("p",ws,[F(V(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Qs=k(Es,[["__scopeId","data-v-f5e9645b"]]),Fs={key:0,class:"VPFeatures"},Hs={class:"container"},Ws={class:"items"},Ds=h({__name:"VPFeatures",props:{features:{}},setup(a){const e=a,t=y(()=>{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,s)=>n.features?(o(),l("div",Fs,[d("div",Hs,[d("div",Ws,[(o(!0),l(C,null,w(n.features,r=>(o(),l("div",{key:r.title,class:T(["item",[t.value]])},[b(Qs,{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))])])])):m("",!0)}}),Os=k(Ds,[["__scopeId","data-v-d0a190d7"]]),Us=h({__name:"VPHomeFeatures",setup(a){const{frontmatter:e}=S();return(t,n)=>i(e).features?(o(),$(Os,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):m("",!0)}}),Gs=h({__name:"VPHomeContent",setup(a){const{width:e}=ze({initialWidth:0,includeScrollbar:!1});return(t,n)=>(o(),l("div",{class:"vp-doc container",style:Ie(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[u(t.$slots,"default",{},void 0,!0)],4))}}),Js=k(Gs,[["__scopeId","data-v-7a48a447"]]),Ks={class:"VPHome"},js=h({__name:"VPHome",setup(a){const{frontmatter:e}=S();return(t,n)=>{const s=J("Content");return o(),l("div",Ks,[u(t.$slots,"home-hero-before",{},void 0,!0),b(Vs,null,{"home-hero-info-before":f(()=>[u(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[u(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[u(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[u(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[u(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(t.$slots,"home-hero-after",{},void 0,!0),u(t.$slots,"home-features-before",{},void 0,!0),b(Us),u(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(o(),$(Js,{key:0},{default:f(()=>[b(s)]),_:1})):(o(),$(s,{key:1}))])}}}),zs=k(js,[["__scopeId","data-v-cbb6ec48"]]),Rs={},Zs={class:"VPPage"};function Ys(a,e){const t=J("Content");return o(),l("div",Zs,[u(a.$slots,"page-top"),b(t),u(a.$slots,"page-bottom")])}const Xs=k(Rs,[["render",Ys]]),qs=h({__name:"VPContent",setup(a){const{page:e,frontmatter:t}=S(),{hasSidebar:n}=D();return(s,r)=>(o(),l("div",{class:T(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?u(s.$slots,"not-found",{key:0},()=>[b(_t)],!0):i(t).layout==="page"?(o(),$(Xs,{key:1},{"page-top":f(()=>[u(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[u(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(o(),$(zs,{key:2},{"home-hero-before":f(()=>[u(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[u(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[u(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[u(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[u(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[u(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[u(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[u(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[u(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(o(),$(H(i(t).layout),{key:3})):(o(),$(ds,{key:4},{"doc-top":f(()=>[u(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[u(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[u(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[u(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[u(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[u(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[u(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[u(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[u(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[u(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[u(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xs=k(qs,[["__scopeId","data-v-91765379"]]),en={class:"container"},tn=["innerHTML"],sn=["innerHTML"],nn=h({__name:"VPFooter",setup(a){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=D();return(s,r)=>i(e).footer&&i(t).footer!==!1?(o(),l("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(n)}])},[d("div",en,[i(e).footer.message?(o(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,tn)):m("",!0),i(e).footer.copyright?(o(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,sn)):m("",!0)])],2)):m("",!0)}}),an=k(nn,[["__scopeId","data-v-c970a860"]]);function on(){const{theme:a,frontmatter:e}=S(),t=Se([]),n=y(()=>t.value.length>0);return x(()=>{t.value=be(e.value.outline??a.value.outline)}),{headers:t,hasLocalNav:n}}const rn={class:"menu-text"},ln={class:"header"},cn={class:"outline"},un=h({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(a){const e=a,{theme:t}=S(),n=I(!1),s=I(0),r=I(),c=I();function v(g){var A;(A=r.value)!=null&&A.contains(g.target)||(n.value=!1)}W(n,g=>{if(g){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),le("Escape",()=>{n.value=!1}),x(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(g){g.target.classList.contains("outline-link")&&(c.value&&(c.value.style.transition="none"),Ne(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,A)=>(o(),l("div",{class:"VPLocalNavOutlineDropdown",style:Ie({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[g.headers.length>0?(o(),l("button",{key:0,onClick:p,class:T({open:n.value})},[d("span",rn,V(i(we)(i(t))),1),A[0]||(A[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(o(),l("button",{key:1,onClick:L},V(i(t).returnToTopLabel||"Return to top"),1)),b(pe,{name:"flyout"},{default:f(()=>[n.value?(o(),l("div",{key:0,ref_key:"items",ref:c,class:"items",onClick:_},[d("div",ln,[d("a",{class:"top-link",href:"#",onClick:L},V(i(t).returnToTopLabel||"Return to top"),1)]),d("div",cn,[b(Ee,{headers:g.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),dn=k(un,[["__scopeId","data-v-bc9dc845"]]),pn={class:"container"},vn=["aria-expanded"],fn={class:"menu-text"},mn=h({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(a){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=D(),{headers:s}=on(),{y:r}=Te(),c=I(0);G(()=>{c.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{s.value=be(t.value.outline??e.value.outline)});const v=y(()=>s.value.length===0),p=y(()=>v.value&&!n.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:v.value,fixed:p.value}));return(L,g)=>i(t).layout!=="home"&&(!p.value||i(r)>=c.value)?(o(),l("div",{key:0,class:T(_.value)},[d("div",pn,[i(n)?(o(),l("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:g[0]||(g[0]=A=>L.$emit("open-menu"))},[g[1]||(g[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",fn,V(i(e).sidebarMenuLabel||"Menu"),1)],8,vn)):m("",!0),b(dn,{headers:i(s),navHeight:c.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),hn=k(mn,[["__scopeId","data-v-070ab83d"]]);function _n(){const a=I(!1);function e(){a.value=!0,window.addEventListener("resize",s)}function t(){a.value=!1,window.removeEventListener("resize",s)}function n(){a.value?t():e()}function s(){window.outerWidth>=768&&t()}const r=ee();return W(()=>r.path,t),{isScreenOpen:a,openScreen:e,closeScreen:t,toggleScreen:n}}const bn={},gn={class:"VPSwitch",type:"button",role:"switch"},kn={class:"check"},$n={key:0,class:"icon"};function yn(a,e){return o(),l("button",gn,[d("span",kn,[a.$slots.default?(o(),l("span",$n,[u(a.$slots,"default",{},void 0,!0)])):m("",!0)])])}const An=k(bn,[["render",yn],["__scopeId","data-v-4a1c76db"]]),Pn=h({__name:"VPSwitchAppearance",setup(a){const{isDark:e,theme:t}=S(),n=z("toggle-appearance",()=>{e.value=!e.value}),s=I("");return me(()=>{s.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,c)=>(o(),$(An,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:f(()=>c[0]||(c[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),ge=k(Pn,[["__scopeId","data-v-e40a8bb6"]]),Ln={key:0,class:"VPNavBarAppearance"},Sn=h({__name:"VPNavBarAppearance",setup(a){const{site:e}=S();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(o(),l("div",Ln,[b(ge)])):m("",!0)}}),Vn=k(Sn,[["__scopeId","data-v-af096f4a"]]),ke=I();let Qe=!1,re=0;function In(a){const e=I(!1);if(te){!Qe&&Nn(),re++;const t=W(ke,n=>{var s,r,c;n===a.el.value||(s=a.el.value)!=null&&s.contains(n)?(e.value=!0,(r=a.onFocus)==null||r.call(a)):(e.value=!1,(c=a.onBlur)==null||c.call(a))});fe(()=>{t(),re--,re||Tn()})}return Re(e)}function Nn(){document.addEventListener("focusin",Fe),Qe=!0,ke.value=document.activeElement}function Tn(){document.removeEventListener("focusin",Fe)}function Fe(){ke.value=document.activeElement}const Cn={class:"VPMenuLink"},Mn=h({__name:"VPMenuLink",props:{item:{}},setup(a){const{page:e}=S();return(t,n)=>(o(),l("div",Cn,[b(Q,{class:T({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:f(()=>[F(V(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=k(Mn,[["__scopeId","data-v-8b74d055"]]),Bn={class:"VPMenuGroup"},wn={key:0,class:"title"},En=h({__name:"VPMenuGroup",props:{text:{},items:{}},setup(a){return(e,t)=>(o(),l("div",Bn,[e.text?(o(),l("p",wn,V(e.text),1)):m("",!0),(o(!0),l(C,null,w(e.items,n=>(o(),l(C,null,["link"in n?(o(),$(se,{key:0,item:n},null,8,["item"])):m("",!0)],64))),256))]))}}),Qn=k(En,[["__scopeId","data-v-48c802d0"]]),Fn={class:"VPMenu"},Hn={key:0,class:"items"},Wn=h({__name:"VPMenu",props:{items:{}},setup(a){return(e,t)=>(o(),l("div",Fn,[e.items?(o(),l("div",Hn,[(o(!0),l(C,null,w(e.items,n=>(o(),l(C,{key:JSON.stringify(n)},["link"in n?(o(),$(se,{key:0,item:n},null,8,["item"])):"component"in n?(o(),$(H(n.component),U({key:1,ref_for:!0},n.props),null,16)):(o(),$(Qn,{key:2,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):m("",!0),u(e.$slots,"default",{},void 0,!0)]))}}),Dn=k(Wn,[["__scopeId","data-v-7dd3104a"]]),On=["aria-expanded","aria-label"],Un={key:0,class:"text"},Gn=["innerHTML"],Jn={key:1,class:"vpi-more-horizontal icon"},Kn={class:"menu"},jn=h({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(a){const e=I(!1),t=I();In({el:t,onBlur:n});function n(){e.value=!1}return(s,r)=>(o(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=c=>e.value=!0),onMouseleave:r[2]||(r[2]=c=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=c=>e.value=!e.value)},[s.button||s.icon?(o(),l("span",Un,[s.icon?(o(),l("span",{key:0,class:T([s.icon,"option-icon"])},null,2)):m("",!0),s.button?(o(),l("span",{key:1,innerHTML:s.button},null,8,Gn)):m("",!0),r[3]||(r[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(o(),l("span",Jn))],8,On),d("div",Kn,[b(Dn,{items:s.items},{default:f(()=>[u(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),$e=k(jn,[["__scopeId","data-v-e5380155"]]),zn=["href","aria-label","innerHTML"],Rn=h({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(a){const e=a,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(o(),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,zn))}}),Zn=k(Rn,[["__scopeId","data-v-717b8b75"]]),Yn={class:"VPSocialLinks"},Xn=h({__name:"VPSocialLinks",props:{links:{}},setup(a){return(e,t)=>(o(),l("div",Yn,[(o(!0),l(C,null,w(e.links,({link:n,icon:s,ariaLabel:r})=>(o(),$(Zn,{key:n,icon:s,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ne=k(Xn,[["__scopeId","data-v-ee7a9424"]]),qn={key:0,class:"group translations"},xn={class:"trans-title"},ea={key:1,class:"group"},ta={class:"item appearance"},sa={class:"label"},na={class:"appearance-action"},aa={key:2,class:"group"},oa={class:"item social-links"},ra=h({__name:"VPNavBarExtra",setup(a){const{site:e,theme:t}=S(),{localeLinks:n,currentLang:s}=Z({correspondingLink:!0}),r=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(c,v)=>r.value?(o(),$($e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[i(n).length&&i(s).label?(o(),l("div",qn,[d("p",xn,V(i(s).label),1),(o(!0),l(C,null,w(i(n),p=>(o(),$(se,{key:p.link,item:p},null,8,["item"]))),128))])):m("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(o(),l("div",ea,[d("div",ta,[d("p",sa,V(i(t).darkModeSwitchLabel||"Appearance"),1),d("div",na,[b(ge)])])])):m("",!0),i(t).socialLinks?(o(),l("div",aa,[d("div",oa,[b(ne,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),ia=k(ra,[["__scopeId","data-v-925effce"]]),la=["aria-expanded"],ca=h({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(a){return(e,t)=>(o(),l("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,la))}}),ua=k(ca,[["__scopeId","data-v-5dea55bf"]]),da=["innerHTML"],pa=h({__name:"VPNavBarMenuLink",props:{item:{}},setup(a){const{page:e}=S();return(t,n)=>(o(),$(Q,{class:T({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:f(()=>[d("span",{innerHTML:t.item.text},null,8,da)]),_:1},8,["class","href","noIcon","target","rel"]))}}),va=k(pa,[["__scopeId","data-v-ed5ac1f6"]]),fa=h({__name:"VPNavBarMenuGroup",props:{item:{}},setup(a){const e=a,{page:t}=S(),n=r=>"component"in r?!1:"link"in r?K(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),s=y(()=>n(e.item));return(r,c)=>(o(),$($e,{class:T({VPNavBarMenuGroup:!0,active:i(K)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||s.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),ma={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},ha=h({__name:"VPNavBarMenu",setup(a){const{theme:e}=S();return(t,n)=>i(e).nav?(o(),l("nav",ma,[n[0]||(n[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(o(!0),l(C,null,w(i(e).nav,s=>(o(),l(C,{key:JSON.stringify(s)},["link"in s?(o(),$(va,{key:0,item:s},null,8,["item"])):"component"in s?(o(),$(H(s.component),U({key:1,ref_for:!0},s.props),null,16)):(o(),$(fa,{key:2,item:s},null,8,["item"]))],64))),128))])):m("",!0)}}),_a=k(ha,[["__scopeId","data-v-e6d46098"]]);function ba(a){const{localeIndex:e,theme:t}=S();function n(s){var M,B,N;const r=s.split("."),c=(M=t.value.search)==null?void 0:M.options,v=c&&typeof c=="object",p=v&&((N=(B=c.locales)==null?void 0:B[e.value])==null?void 0:N.translations)||null,_=v&&c.translations||null;let L=p,g=_,A=a;const P=r.pop();for(const E of r){let O=null;const j=A==null?void 0:A[E];j&&(O=A=j);const ae=g==null?void 0:g[E];ae&&(O=g=ae);const oe=L==null?void 0:L[E];oe&&(O=L=oe),j||(A=O),ae||(g=O),oe||(L=O)}return(L==null?void 0:L[P])??(g==null?void 0:g[P])??(A==null?void 0:A[P])??""}return n}const ga=["aria-label"],ka={class:"DocSearch-Button-Container"},$a={class:"DocSearch-Button-Placeholder"},Ae=h({__name:"VPNavBarSearchButton",setup(a){const t=ba({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(o(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[d("span",ka,[s[0]||(s[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",$a,V(i(t)("button.buttonText")),1)]),s[1]||(s[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ga))}}),ya={class:"VPNavBarSearch"},Aa={id:"local-search"},Pa={key:1,id:"docsearch"},La=h({__name:"VPNavBarSearch",setup(a){const e=Ze(()=>Ye(()=>import("./VPLocalSearchBox.tGRBlptZ.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=S(),s=I(!1),r=I(!1);G(()=>{});function c(){s.value||(s.value=!0,setTimeout(v,16))}function v(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function p(g){const A=g.target,P=A.tagName;return A.isContentEditable||P==="INPUT"||P==="SELECT"||P==="TEXTAREA"}const _=I(!1);le("k",g=>{(g.ctrlKey||g.metaKey)&&(g.preventDefault(),_.value=!0)}),le("/",g=>{p(g)||(g.preventDefault(),_.value=!0)});const L="local";return(g,A)=>{var P;return o(),l("div",ya,[i(L)==="local"?(o(),l(C,{key:0},[_.value?(o(),$(i(e),{key:0,onClose:A[0]||(A[0]=M=>_.value=!1)})):m("",!0),d("div",Aa,[b(Ae,{onClick:A[1]||(A[1]=M=>_.value=!0)})])],64)):i(L)==="algolia"?(o(),l(C,{key:1},[s.value?(o(),$(i(t),{key:0,algolia:((P=i(n).search)==null?void 0:P.options)??i(n).algolia,onVnodeBeforeMount:A[2]||(A[2]=M=>r.value=!0)},null,8,["algolia"])):m("",!0),r.value?m("",!0):(o(),l("div",Pa,[b(Ae,{onClick:c})]))],64)):m("",!0)])}}}),Sa=h({__name:"VPNavBarSocialLinks",setup(a){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(o(),$(ne,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):m("",!0)}}),Va=k(Sa,[["__scopeId","data-v-164c457f"]]),Ia=["href","rel","target"],Na={key:1},Ta={key:2},Ca=h({__name:"VPNavBarTitle",setup(a){const{site:e,theme:t}=S(),{hasSidebar:n}=D(),{currentLang:s}=Z(),r=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),c=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),v=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,_)=>(o(),l("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(n)}])},[d("a",{class:"title",href:r.value??i(_e)(i(s).link),rel:c.value,target:v.value},[u(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(o(),$(X,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):m("",!0),i(t).siteTitle?(o(),l("span",Na,V(i(t).siteTitle),1)):i(t).siteTitle===void 0?(o(),l("span",Ta,V(i(e).title),1)):m("",!0),u(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Ia)],2))}}),Ma=k(Ca,[["__scopeId","data-v-28a961f9"]]),Ba={class:"items"},wa={class:"title"},Ea=h({__name:"VPNavBarTranslations",setup(a){const{theme:e}=S(),{localeLinks:t,currentLang:n}=Z({correspondingLink:!0});return(s,r)=>i(t).length&&i(n).label?(o(),$($e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ba,[d("p",wa,V(i(n).label),1),(o(!0),l(C,null,w(i(t),c=>(o(),$(se,{key:c.link,item:c},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),Qa=k(Ea,[["__scopeId","data-v-c80d9ad0"]]),Fa={class:"wrapper"},Ha={class:"container"},Wa={class:"title"},Da={class:"content"},Oa={class:"content-body"},Ua=h({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(a){const e=a,{y:t}=Te(),{hasSidebar:n}=D(),{frontmatter:s}=S(),r=I({});return me(()=>{r.value={"has-sidebar":n.value,home:s.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(c,v)=>(o(),l("div",{class:T(["VPNavBar",r.value])},[d("div",Fa,[d("div",Ha,[d("div",Wa,[b(Ma,null,{"nav-bar-title-before":f(()=>[u(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[u(c.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Da,[d("div",Oa,[u(c.$slots,"nav-bar-content-before",{},void 0,!0),b(La,{class:"search"}),b(_a,{class:"menu"}),b(Qa,{class:"translations"}),b(Vn,{class:"appearance"}),b(Va,{class:"social-links"}),b(ia,{class:"extra"}),u(c.$slots,"nav-bar-content-after",{},void 0,!0),b(ua,{class:"hamburger",active:c.isScreenOpen,onClick:v[0]||(v[0]=p=>c.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Ga=k(Ua,[["__scopeId","data-v-822684d1"]]),Ja={key:0,class:"VPNavScreenAppearance"},Ka={class:"text"},ja=h({__name:"VPNavScreenAppearance",setup(a){const{site:e,theme:t}=S();return(n,s)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(o(),l("div",Ja,[d("p",Ka,V(i(t).darkModeSwitchLabel||"Appearance"),1),b(ge)])):m("",!0)}}),za=k(ja,[["__scopeId","data-v-ffb44008"]]),Ra=h({__name:"VPNavScreenMenuLink",props:{item:{}},setup(a){const e=z("close-screen");return(t,n)=>(o(),$(Q,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Za=k(Ra,[["__scopeId","data-v-27d04aeb"]]),Ya=h({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(a){const e=z("close-screen");return(t,n)=>(o(),$(Q,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:f(()=>[F(V(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=k(Ya,[["__scopeId","data-v-7179dbb7"]]),Xa={class:"VPNavScreenMenuGroupSection"},qa={key:0,class:"title"},xa=h({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(a){return(e,t)=>(o(),l("div",Xa,[e.text?(o(),l("p",qa,V(e.text),1)):m("",!0),(o(!0),l(C,null,w(e.items,n=>(o(),$(He,{key:n.text,item:n},null,8,["item"]))),128))]))}}),eo=k(xa,[["__scopeId","data-v-4b8941ac"]]),to=["aria-controls","aria-expanded"],so=["innerHTML"],no=["id"],ao={key:0,class:"item"},oo={key:1,class:"item"},ro={key:2,class:"group"},io=h({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(a){const e=a,t=I(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(r,c)=>(o(),l("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[d("span",{class:"button-text",innerHTML:r.text},null,8,so),c[0]||(c[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,to),d("div",{id:n.value,class:"items"},[(o(!0),l(C,null,w(r.items,v=>(o(),l(C,{key:JSON.stringify(v)},["link"in v?(o(),l("div",ao,[b(He,{item:v},null,8,["item"])])):"component"in v?(o(),l("div",oo,[(o(),$(H(v.component),U({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(o(),l("div",ro,[b(eo,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,no)],2))}}),lo=k(io,[["__scopeId","data-v-875057a5"]]),co={key:0,class:"VPNavScreenMenu"},uo=h({__name:"VPNavScreenMenu",setup(a){const{theme:e}=S();return(t,n)=>i(e).nav?(o(),l("nav",co,[(o(!0),l(C,null,w(i(e).nav,s=>(o(),l(C,{key:JSON.stringify(s)},["link"in s?(o(),$(Za,{key:0,item:s},null,8,["item"])):"component"in s?(o(),$(H(s.component),U({key:1,ref_for:!0},s.props,{"screen-menu":""}),null,16)):(o(),$(lo,{key:2,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),po=h({__name:"VPNavScreenSocialLinks",setup(a){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(o(),$(ne,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):m("",!0)}}),vo={class:"list"},fo=h({__name:"VPNavScreenTranslations",setup(a){const{localeLinks:e,currentLang:t}=Z({correspondingLink:!0}),n=I(!1);function s(){n.value=!n.value}return(r,c)=>i(e).length&&i(t).label?(o(),l("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[d("button",{class:"title",onClick:s},[c[0]||(c[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),F(" "+V(i(t).label)+" ",1),c[1]||(c[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",vo,[(o(!0),l(C,null,w(i(e),v=>(o(),l("li",{key:v.link,class:"item"},[b(Q,{class:"link",href:v.link},{default:f(()=>[F(V(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),mo=k(fo,[["__scopeId","data-v-362991c2"]]),ho={class:"container"},_o=h({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(a){const e=I(null),t=Ce(te?document.body:null);return(n,s)=>(o(),$(pe,{name:"fade",onEnter:s[0]||(s[0]=r=>t.value=!0),onAfterLeave:s[1]||(s[1]=r=>t.value=!1)},{default:f(()=>[n.open?(o(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ho,[u(n.$slots,"nav-screen-content-before",{},void 0,!0),b(uo,{class:"menu"}),b(mo,{class:"translations"}),b(za,{class:"appearance"}),b(po,{class:"social-links"}),u(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),bo=k(_o,[["__scopeId","data-v-833aabba"]]),go={key:0,class:"VPNav"},ko=h({__name:"VPNav",setup(a){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=_n(),{frontmatter:s}=S(),r=y(()=>s.value.navbar!==!1);return he("close-screen",t),q(()=>{te&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(c,v)=>r.value?(o(),l("header",go,[b(Ga,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":f(()=>[u(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[u(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[u(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[u(c.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(bo,{open:i(e)},{"nav-screen-content-before":f(()=>[u(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[u(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),$o=k(ko,[["__scopeId","data-v-f1e365da"]]),yo=["role","tabindex"],Ao={key:1,class:"items"},Po=h({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(a){const e=a,{collapsed:t,collapsible:n,isLink:s,isActiveLink:r,hasActiveLink:c,hasChildren:v,toggle:p}=$t(y(()=>e.item)),_=y(()=>v.value?"section":"div"),L=y(()=>s.value?"a":"div"),g=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),A=y(()=>s.value?void 0:"button"),P=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":r.value},{"has-active":c.value}]);function M(N){"key"in N&&N.key!=="Enter"||!e.item.link&&p()}function B(){e.item.link&&p()}return(N,E)=>{const O=J("VPSidebarItem",!0);return o(),$(H(_.value),{class:T(["VPSidebarItem",P.value])},{default:f(()=>[N.item.text?(o(),l("div",U({key:0,class:"item",role:A.value},Xe(N.item.items?{click:M,keydown:M}:{},!0),{tabindex:N.item.items&&0}),[E[1]||(E[1]=d("div",{class:"indicator"},null,-1)),N.item.link?(o(),$(Q,{key:0,tag:L.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(o(),$(H(g.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(o(),$(H(g.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(o(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:qe(B,["enter"]),tabindex:"0"},E[0]||(E[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):m("",!0)],16,yo)):m("",!0),N.item.items&&N.item.items.length?(o(),l("div",Ao,[N.depth<5?(o(!0),l(C,{key:0},w(N.item.items,j=>(o(),$(O,{key:j.text,item:j,depth:N.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),Lo=k(Po,[["__scopeId","data-v-196b2e5f"]]),So=h({__name:"VPSidebarGroup",props:{items:{}},setup(a){const e=I(!0);let t=null;return G(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),xe(()=>{t!=null&&(clearTimeout(t),t=null)}),(n,s)=>(o(!0),l(C,null,w(n.items,r=>(o(),l("div",{key:r.text,class:T(["group",{"no-transition":e.value}])},[b(Lo,{item:r,depth:0},null,8,["item"])],2))),128))}}),Vo=k(So,[["__scopeId","data-v-9e426adc"]]),Io={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},No=h({__name:"VPSidebar",props:{open:{type:Boolean}},setup(a){const{sidebarGroups:e,hasSidebar:t}=D(),n=a,s=I(null),r=Ce(te?document.body:null);W([n,s],()=>{var v;n.open?(r.value=!0,(v=s.value)==null||v.focus()):r.value=!1},{immediate:!0,flush:"post"});const c=I(0);return W(e,()=>{c.value+=1},{deep:!0}),(v,p)=>i(t)?(o(),l("aside",{key:0,class:T(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:s,onClick:p[0]||(p[0]=et(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",Io,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),u(v.$slots,"sidebar-nav-before",{},void 0,!0),(o(),$(Vo,{items:i(e),key:c.value},null,8,["items"])),u(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),To=k(No,[["__scopeId","data-v-18756405"]]),Co=h({__name:"VPSkipLink",setup(a){const e=ee(),t=I();W(()=>e.path,()=>t.value.focus());function n({target:s}){const r=document.getElementById(decodeURIComponent(s.hash).slice(1));if(r){const c=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",c)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",c),r.focus(),window.scrollTo(0,0)}}return(s,r)=>(o(),l(C,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))}}),Mo=k(Co,[["__scopeId","data-v-c3508ec8"]]),Bo=h({__name:"Layout",setup(a){const{isOpen:e,open:t,close:n}=D(),s=ee();W(()=>s.path,n),kt(e,n);const{frontmatter:r}=S(),c=Me(),v=y(()=>!!c["home-hero-image"]);return he("hero-image-slot-exists",v),(p,_)=>{const L=J("Content");return i(r).layout!==!1?(o(),l("div",{key:0,class:T(["Layout",i(r).pageClass])},[u(p.$slots,"layout-top",{},void 0,!0),b(Mo),b(it,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),b($o,null,{"nav-bar-title-before":f(()=>[u(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[u(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[u(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[u(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[u(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[u(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(hn,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),b(To,{open:i(e)},{"sidebar-nav-before":f(()=>[u(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[u(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(xs,null,{"page-top":f(()=>[u(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[u(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[u(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[u(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[u(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[u(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[u(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[u(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[u(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[u(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[u(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[u(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[u(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[u(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[u(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[u(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[u(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[u(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[u(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[u(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[u(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[u(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[u(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(an),u(p.$slots,"layout-bottom",{},void 0,!0)],2)):(o(),$(L,{key:1}))}}}),wo=k(Bo,[["__scopeId","data-v-a9a9e638"]]),Eo={},Qo={class:"VPTeamPage"};function Fo(a,e){return o(),l("div",Qo,[u(a.$slots,"default")])}const Mr=k(Eo,[["render",Fo],["__scopeId","data-v-c2f8e101"]]),Ho={},Wo={class:"VPTeamPageTitle"},Do={key:0,class:"title"},Oo={key:1,class:"lead"};function Uo(a,e){return o(),l("div",Wo,[a.$slots.title?(o(),l("h1",Do,[u(a.$slots,"title",{},void 0,!0)])):m("",!0),a.$slots.lead?(o(),l("p",Oo,[u(a.$slots,"lead",{},void 0,!0)])):m("",!0)])}const Br=k(Ho,[["render",Uo],["__scopeId","data-v-e277e15c"]]),Go={},Jo={class:"VPTeamPageSection"},Ko={class:"title"},jo={key:0,class:"title-text"},zo={key:0,class:"lead"},Ro={key:1,class:"members"};function Zo(a,e){return o(),l("section",Jo,[d("div",Ko,[e[0]||(e[0]=d("div",{class:"title-line"},null,-1)),a.$slots.title?(o(),l("h2",jo,[u(a.$slots,"title",{},void 0,!0)])):m("",!0)]),a.$slots.lead?(o(),l("p",zo,[u(a.$slots,"lead",{},void 0,!0)])):m("",!0),a.$slots.members?(o(),l("div",Ro,[u(a.$slots,"members",{},void 0,!0)])):m("",!0)])}const wr=k(Go,[["render",Zo],["__scopeId","data-v-d43bc49d"]]),Yo={class:"profile"},Xo={class:"avatar"},qo=["src","alt"],xo={class:"data"},er={class:"name"},tr={key:0,class:"affiliation"},sr={key:0,class:"title"},nr={key:1,class:"at"},ar=["innerHTML"],or={key:2,class:"links"},rr={key:0,class:"sp"},ir=h({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(a){return(e,t)=>(o(),l("article",{class:T(["VPTeamMembersItem",[e.size]])},[d("div",Yo,[d("figure",Xo,[d("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,qo)]),d("div",xo,[d("h1",er,V(e.member.name),1),e.member.title||e.member.org?(o(),l("p",tr,[e.member.title?(o(),l("span",sr,V(e.member.title),1)):m("",!0),e.member.title&&e.member.org?(o(),l("span",nr," @ ")):m("",!0),e.member.org?(o(),$(Q,{key:2,class:T(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:f(()=>[F(V(e.member.org),1)]),_:1},8,["class","href"])):m("",!0)])):m("",!0),e.member.desc?(o(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,ar)):m("",!0),e.member.links?(o(),l("div",or,[b(ne,{links:e.member.links},null,8,["links"])])):m("",!0)])]),e.member.sponsor?(o(),l("div",rr,[b(Q,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:f(()=>[t[0]||(t[0]=d("span",{class:"vpi-heart sp-icon"},null,-1)),F(" "+V(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):m("",!0)],2))}}),lr=k(ir,[["__scopeId","data-v-f9987cb6"]]),cr={class:"container"},ur=h({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(a){const e=a,t=y(()=>[e.size,`count-${e.members.length}`]);return(n,s)=>(o(),l("div",{class:T(["VPTeamMembers",t.value])},[d("div",cr,[(o(!0),l(C,null,w(n.members,r=>(o(),l("div",{key:r.name,class:"item"},[b(lr,{size:n.size,member:r},null,8,["size","member"])]))),128))])],2))}}),Er=k(ur,[["__scopeId","data-v-fba19bad"]]),Pe={Layout:wo,enhanceApp:({app:a})=>{a.component("Badge",at)}},dr={},pr={style:{"text-align":"center"}};function vr(a,e){const t=J("font");return o(),l(C,null,[e[1]||(e[1]=d("br",null,null,-1)),d("h1",pr,[d("strong",null,[b(t,{color:"orange"},{default:f(()=>e[0]||(e[0]=[F(" Package Ecosystem")])),_:1})])]),e[2]||(e[2]=tt('

Read n-d array like-data

DiskArrays.jl

Get your chunks!

Named Dimensions

DimensionalData.jl

Select & Index!

Out of memory data

Zarr.jl

Chunkerd, compressed !

Rasterized spatial data

Rasters.jl

Read and manipulate !

Array-oriented data

NetCDF.jl

Scientific binary data.

Raster and vector data

ArchGDAL.jl

GDAL in Julia.

An interface for

GeoInterface.jl

geospatial data in Julia.

A higher level interface

GRIBDatasets.jl

for reading GRIB files.

Array-oriented data

NCDatasets.jl

Scientific binary data.

',9))],64)}const fr=k(dr,[["render",vr]]),mr=a=>{if(typeof document>"u")return{stabilizeScrollPosition:s=>async(...r)=>s(...r)};const e=document.documentElement;return{stabilizeScrollPosition:n=>async(...s)=>{const r=n(...s),c=a.value;if(!c)return r;const v=c.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=c.offsetTop-v,r}}},We="vitepress:tabSharedState",R=typeof localStorage<"u"?localStorage:null,De="vitepress:tabsSharedState",hr=()=>{const a=R==null?void 0:R.getItem(De);if(a)try{return JSON.parse(a)}catch{}return{}},_r=a=>{R&&R.setItem(De,JSON.stringify(a))},br=a=>{const e=st({});W(()=>e.content,(t,n)=>{t&&n&&_r(t)},{deep:!0}),a.provide(We,e)},gr=(a,e)=>{const t=z(We);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");G(()=>{t.content||(t.content=hr())});const n=I(),s=y({get(){var p;const c=e.value,v=a.value;if(c){const _=(p=t.content)==null?void 0:p[c];if(_&&v.includes(_))return _}else{const _=n.value;if(_)return _}return v[0]},set(c){const v=e.value;v?t.content&&(t.content[v]=c):n.value=c}});return{selected:s,select:c=>{s.value=c}}};let Le=0;const kr=()=>(Le++,""+Le);function $r(){const a=Me();return y(()=>{var n;const t=(n=a.default)==null?void 0:n.call(a);return t?t.filter(s=>typeof s.type=="object"&&"__name"in s.type&&s.type.__name==="PluginTabsTab"&&s.props).map(s=>{var r;return(r=s.props)==null?void 0:r.label}):[]})}const Oe="vitepress:tabSingleState",yr=a=>{he(Oe,a)},Ar=()=>{const a=z(Oe);if(!a)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return a},Pr={class:"plugin-tabs"},Lr=["id","aria-selected","aria-controls","tabindex","onClick"],Sr=h({__name:"PluginTabs",props:{sharedStateKey:{}},setup(a){const e=a,t=$r(),{selected:n,select:s}=gr(t,nt(e,"sharedStateKey")),r=I(),{stabilizeScrollPosition:c}=mr(r),v=c(s),p=I([]),_=g=>{var M;const A=t.value.indexOf(n.value);let P;g.key==="ArrowLeft"?P=A>=1?A-1:t.value.length-1:g.key==="ArrowRight"&&(P=A(o(),l("div",Pr,[d("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(o(!0),l(C,null,w(i(t),P=>(o(),l("button",{id:`tab-${P}-${i(L)}`,ref_for:!0,ref_key:"buttonRefs",ref:p,key:P,role:"tab",class:"plugin-tabs--tab","aria-selected":P===i(n),"aria-controls":`panel-${P}-${i(L)}`,tabindex:P===i(n)?0:-1,onClick:()=>i(v)(P)},V(P),9,Lr))),128))],544),u(g.$slots,"default")]))}}),Vr=["id","aria-labelledby"],Ir=h({__name:"PluginTabsTab",props:{label:{}},setup(a){const{uid:e,selected:t}=Ar();return(n,s)=>i(t)===n.label?(o(),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)}`},[u(n.$slots,"default",{},void 0,!0)],8,Vr)):m("",!0)}}),Nr=k(Ir,[["__scopeId","data-v-9b0d03d2"]]),Tr=a=>{br(a),a.component("PluginTabs",Sr),a.component("PluginTabsTab",Nr)},Qr={extends:Pe,Layout(){return ye(Pe.Layout,null,{"aside-ads-before":()=>ye(fr)})},enhanceApp({app:a,router:e,siteData:t}){Tr(a)}};export{Qr as R,Br as V,Er as a,wr as b,Mr as c,ba as d,S as u}; diff --git a/dev/assets/development_contribute.md.BjKHzE54.js b/dev/assets/development_contribute.md.BjKHzE54.js deleted file mode 100644 index 09b7f25a..00000000 --- a/dev/assets/development_contribute.md.BjKHzE54.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as e,c as s,o as t,a4 as a}from"./chunks/framework._h4tgM90.js";const b=JSON.parse('{"title":"Contribute to YAXArrays.jl","description":"","frontmatter":{},"headers":[],"relativePath":"development/contribute.md","filePath":"development/contribute.md","lastUpdated":null}'),i={name:"development/contribute.md"},l=a(`

Contribute to YAXArrays.jl

Pull requests and bug reports are always welcome at the YAXArrays.jl GitHub repository.

Contribute to Documentation

Contributing with examples can be done by first creating a new file example here

new file

  • your_new_file.md at docs/src/UserGuide/

Once this is done you need to add a new entry here at the appropriate level.

add entry to docs

Your new entry should look like:

  • { text: 'Your title example', link: '/UserGuide/your_new_file.md' }

Build docs locally

If you want to take a look at the docs locally before doing a PR follow the next steps:

Install the dependencies in your system, locate yourself at the docs level folder, then do

sh
npm i

Then simply go to your docs env and activate it, i.e.

sh
docs> julia
-julia> ]
-pkg> activate .

Next, run the scripts. Generate files and build docs by running:

sh
include("make.jl")

Now go to your terminal in the same path docs> and run:

sh
npm run docs:dev

This should ouput http://localhost:5173/YAXArrays.jl/, copy/paste this into your browser and you are all set.

`,18),o=[l];function n(r,p,d,h,c,u){return t(),s("div",null,o)}const y=e(i,[["render",n]]);export{b as __pageData,y as default}; diff --git a/dev/assets/development_contribute.md.BjKHzE54.lean.js b/dev/assets/development_contribute.md.BjKHzE54.lean.js deleted file mode 100644 index f77c2d56..00000000 --- a/dev/assets/development_contribute.md.BjKHzE54.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as s,o as t,a4 as a}from"./chunks/framework._h4tgM90.js";const b=JSON.parse('{"title":"Contribute to YAXArrays.jl","description":"","frontmatter":{},"headers":[],"relativePath":"development/contribute.md","filePath":"development/contribute.md","lastUpdated":null}'),i={name:"development/contribute.md"},l=a("",18),o=[l];function n(r,p,d,h,c,u){return t(),s("div",null,o)}const y=e(i,[["render",n]]);export{b as __pageData,y as default}; diff --git a/dev/assets/development_contribute.md.CPZprWRQ.js b/dev/assets/development_contribute.md.CPZprWRQ.js new file mode 100644 index 00000000..ec875108 --- /dev/null +++ b/dev/assets/development_contribute.md.CPZprWRQ.js @@ -0,0 +1,3 @@ +import{_ as s,c as t,a2 as a,o as i}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Contribute to YAXArrays.jl","description":"","frontmatter":{},"headers":[],"relativePath":"development/contribute.md","filePath":"development/contribute.md","lastUpdated":null}'),l={name:"development/contribute.md"};function o(n,e,r,p,d,h){return i(),t("div",null,e[0]||(e[0]=[a(`

Contribute to YAXArrays.jl

Pull requests and bug reports are always welcome at the YAXArrays.jl GitHub repository.

Contribute to Documentation

Contributing with examples can be done by first creating a new file example here

new file

  • your_new_file.md at docs/src/UserGuide/

Once this is done you need to add a new entry here at the appropriate level.

add entry to docs

Your new entry should look like:

  • { text: 'Your title example', link: '/UserGuide/your_new_file.md' }

Build docs locally

If you want to take a look at the docs locally before doing a PR follow the next steps:

Install the dependencies in your system, locate yourself at the docs level folder, then do

sh
npm i

Then simply go to your docs env and activate it, i.e.

sh
docs> julia
+julia> ]
+pkg> activate .

Next, run the scripts. Generate files and build docs by running:

sh
include("make.jl")

Now go to your terminal in the same path docs> and run:

sh
npm run docs:dev

This should ouput http://localhost:5173/YAXArrays.jl/, copy/paste this into your browser and you are all set.

`,18)]))}const k=s(l,[["render",o]]);export{u as __pageData,k as default}; diff --git a/dev/assets/development_contribute.md.CPZprWRQ.lean.js b/dev/assets/development_contribute.md.CPZprWRQ.lean.js new file mode 100644 index 00000000..ec875108 --- /dev/null +++ b/dev/assets/development_contribute.md.CPZprWRQ.lean.js @@ -0,0 +1,3 @@ +import{_ as s,c as t,a2 as a,o as i}from"./chunks/framework.Bwkmg46C.js";const u=JSON.parse('{"title":"Contribute to YAXArrays.jl","description":"","frontmatter":{},"headers":[],"relativePath":"development/contribute.md","filePath":"development/contribute.md","lastUpdated":null}'),l={name:"development/contribute.md"};function o(n,e,r,p,d,h){return i(),t("div",null,e[0]||(e[0]=[a(`

Contribute to YAXArrays.jl

Pull requests and bug reports are always welcome at the YAXArrays.jl GitHub repository.

Contribute to Documentation

Contributing with examples can be done by first creating a new file example here

new file

  • your_new_file.md at docs/src/UserGuide/

Once this is done you need to add a new entry here at the appropriate level.

add entry to docs

Your new entry should look like:

  • { text: 'Your title example', link: '/UserGuide/your_new_file.md' }

Build docs locally

If you want to take a look at the docs locally before doing a PR follow the next steps:

Install the dependencies in your system, locate yourself at the docs level folder, then do

sh
npm i

Then simply go to your docs env and activate it, i.e.

sh
docs> julia
+julia> ]
+pkg> activate .

Next, run the scripts. Generate files and build docs by running:

sh
include("make.jl")

Now go to your terminal in the same path docs> and run:

sh
npm run docs:dev

This should ouput http://localhost:5173/YAXArrays.jl/, copy/paste this into your browser and you are all set.

`,18)]))}const k=s(l,[["render",o]]);export{u as __pageData,k as default}; diff --git a/dev/assets/development_contributors.md.BTH2E-fs.js b/dev/assets/development_contributors.md.BTH2E-fs.js new file mode 100644 index 00000000..ab7a36c8 --- /dev/null +++ b/dev/assets/development_contributors.md.BTH2E-fs.js @@ -0,0 +1 @@ +import{V as u,a as l,b as m,c as g}from"./chunks/theme.o12TANz8.js";import{B as h,c,G as r,w as s,k as n,o as b,a as e,j as t}from"./chunks/framework.Bwkmg46C.js";const p={align:"justify"},z=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"development/contributors.md","filePath":"development/contributors.md","lastUpdated":null}'),v={name:"development/contributors.md"},j=Object.assign(v,{setup(f){const o=[{avatar:"https://www.bgc-jena.mpg.de/employee_images/121366-1667825290?t=eyJ3aWR0aCI6MjEzLCJoZWlnaHQiOjI3NCwiZml0IjoiY3JvcCIsImZpbGVfZXh0ZW5zaW9uIjoid2VicCIsInF1YWxpdHkiOjg2fQ%3D%3D--3e1d41ff4b1ea8928e6734bc473242a90f797dea",name:"Fabian Gans",title:"Geoscientific Programmer",links:[{icon:"github",link:"https://github.com/meggart"}]},{avatar:"https://avatars.githubusercontent.com/u/17124431?v=4",name:"Felix Cremer",title:"PhD Candidate in Remote Sensing",links:[{icon:"github",link:"https://github.com/felixcremer"}]},{avatar:"https://avatars.githubusercontent.com/u/2534009?v=4",name:"Rafael Schouten",title:"Spatial/ecological modelling",links:[{icon:"github",link:"https://github.com/rafaqz"}]},{avatar:"https://pbs.twimg.com/profile_images/1727075196962574336/zB09YH0s_400x400.jpg",name:"Lazaro Alonso",title:"Scientist. Data Visualization",links:[{icon:"github",link:"https://github.com/lazarusA"},{icon:"x",link:"https://twitter.com/LazarusAlon"},{icon:"linkedin",link:"https://www.linkedin.com/in/lazaro-alonso/"},{icon:"mastodon",link:"https://julialang.social/@LazaroAlonso"}]}];return(d,a)=>{const i=h("font");return b(),c("div",null,[r(n(g),null,{default:s(()=>[r(n(u),null,{title:s(()=>a[0]||(a[0]=[e("Contributors")])),lead:s(()=>[a[8]||(a[8]=t("strong",null,"Current core contributors ",-1)),a[9]||(a[9]=e()),a[10]||(a[10]=t("br",null,null,-1)),t("div",p,[a[4]||(a[4]=e(" They have taking the lead for the ongoing organizational maintenance and technical direction of ")),r(i,{color:"orange"},{default:s(()=>a[1]||(a[1]=[e("YAXArrays.jl")])),_:1}),a[5]||(a[5]=e(", ")),r(i,{color:"orange"},{default:s(()=>a[2]||(a[2]=[e("DiskArrays.jl")])),_:1}),a[6]||(a[6]=e(" and ")),r(i,{color:"orange"},{default:s(()=>a[3]||(a[3]=[e("DimensionalData.jl")])),_:1}),a[7]||(a[7]=e(". "))])]),_:1}),r(n(l),{size:"small",members:o}),r(n(m),null,{title:s(()=>a[11]||(a[11]=[e("Our valuable contributors")])),lead:s(()=>a[12]||(a[12]=[e(" We appreciate all contributions from the Julia community so that this ecosystem can thrive."),t("br",null,null,-1)])),members:s(()=>a[13]||(a[13]=[t("div",{class:"row"},[t("a",{href:"https://github.com/meggart",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2539563?v=4"})]),t("a",{href:"https://github.com/felixcremer",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/17124431?v=4"})]),t("a",{href:"https://github.com/lazarusA",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19525261?v=4"})]),t("a",{href:"https://github.com/gdkrmr",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/12512930?v=4"})]),t("a",{href:"https://github.com/apps/github-actions",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4"})]),t("a",{href:"https://github.com/pdimens",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19176506?v=4"})]),t("a",{href:"https://github.com/twinGu",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/29449917?v=4"})]),t("a",{href:"https://github.com/dpabon",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/13040959?v=4"})]),t("a",{href:"https://github.com/Qfl3x",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/20775896?v=4"})]),t("a",{href:"https://github.com/kongdd",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/9815742?v=4"})]),t("a",{href:"https://github.com/MartinuzziFrancesco",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10376688?v=4"})]),t("a",{href:"https://github.com/Sonicious",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/16307399?v=4"})]),t("a",{href:"https://github.com/rafaqz",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2534009?v=4"})]),t("a",{href:"https://github.com/danlooo",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/5780565?v=4"})]),t("a",{href:"https://github.com/MarkusZehner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/56972144?v=4"})]),t("a",{href:"https://github.com/Balinus",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/3630311?v=4"})]),t("a",{href:"https://github.com/singularitti",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/25192197?v=4"})]),t("a",{href:"https://github.com/ckrich",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/28727495?v=4"})]),t("a",{href:"https://github.com/apps/femtocleaner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/4123?v=4"})]),t("a",{href:"https://github.com/ikselven",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10441332?v=4"})]),t("a",{href:"https://github.com/linamaes",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/7131773?v=4"})])],-1)])),_:1})]),_:1})])}}});export{z as __pageData,j as default}; diff --git a/dev/assets/development_contributors.md.BTH2E-fs.lean.js b/dev/assets/development_contributors.md.BTH2E-fs.lean.js new file mode 100644 index 00000000..ab7a36c8 --- /dev/null +++ b/dev/assets/development_contributors.md.BTH2E-fs.lean.js @@ -0,0 +1 @@ +import{V as u,a as l,b as m,c as g}from"./chunks/theme.o12TANz8.js";import{B as h,c,G as r,w as s,k as n,o as b,a as e,j as t}from"./chunks/framework.Bwkmg46C.js";const p={align:"justify"},z=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"development/contributors.md","filePath":"development/contributors.md","lastUpdated":null}'),v={name:"development/contributors.md"},j=Object.assign(v,{setup(f){const o=[{avatar:"https://www.bgc-jena.mpg.de/employee_images/121366-1667825290?t=eyJ3aWR0aCI6MjEzLCJoZWlnaHQiOjI3NCwiZml0IjoiY3JvcCIsImZpbGVfZXh0ZW5zaW9uIjoid2VicCIsInF1YWxpdHkiOjg2fQ%3D%3D--3e1d41ff4b1ea8928e6734bc473242a90f797dea",name:"Fabian Gans",title:"Geoscientific Programmer",links:[{icon:"github",link:"https://github.com/meggart"}]},{avatar:"https://avatars.githubusercontent.com/u/17124431?v=4",name:"Felix Cremer",title:"PhD Candidate in Remote Sensing",links:[{icon:"github",link:"https://github.com/felixcremer"}]},{avatar:"https://avatars.githubusercontent.com/u/2534009?v=4",name:"Rafael Schouten",title:"Spatial/ecological modelling",links:[{icon:"github",link:"https://github.com/rafaqz"}]},{avatar:"https://pbs.twimg.com/profile_images/1727075196962574336/zB09YH0s_400x400.jpg",name:"Lazaro Alonso",title:"Scientist. Data Visualization",links:[{icon:"github",link:"https://github.com/lazarusA"},{icon:"x",link:"https://twitter.com/LazarusAlon"},{icon:"linkedin",link:"https://www.linkedin.com/in/lazaro-alonso/"},{icon:"mastodon",link:"https://julialang.social/@LazaroAlonso"}]}];return(d,a)=>{const i=h("font");return b(),c("div",null,[r(n(g),null,{default:s(()=>[r(n(u),null,{title:s(()=>a[0]||(a[0]=[e("Contributors")])),lead:s(()=>[a[8]||(a[8]=t("strong",null,"Current core contributors ",-1)),a[9]||(a[9]=e()),a[10]||(a[10]=t("br",null,null,-1)),t("div",p,[a[4]||(a[4]=e(" They have taking the lead for the ongoing organizational maintenance and technical direction of ")),r(i,{color:"orange"},{default:s(()=>a[1]||(a[1]=[e("YAXArrays.jl")])),_:1}),a[5]||(a[5]=e(", ")),r(i,{color:"orange"},{default:s(()=>a[2]||(a[2]=[e("DiskArrays.jl")])),_:1}),a[6]||(a[6]=e(" and ")),r(i,{color:"orange"},{default:s(()=>a[3]||(a[3]=[e("DimensionalData.jl")])),_:1}),a[7]||(a[7]=e(". "))])]),_:1}),r(n(l),{size:"small",members:o}),r(n(m),null,{title:s(()=>a[11]||(a[11]=[e("Our valuable contributors")])),lead:s(()=>a[12]||(a[12]=[e(" We appreciate all contributions from the Julia community so that this ecosystem can thrive."),t("br",null,null,-1)])),members:s(()=>a[13]||(a[13]=[t("div",{class:"row"},[t("a",{href:"https://github.com/meggart",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2539563?v=4"})]),t("a",{href:"https://github.com/felixcremer",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/17124431?v=4"})]),t("a",{href:"https://github.com/lazarusA",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19525261?v=4"})]),t("a",{href:"https://github.com/gdkrmr",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/12512930?v=4"})]),t("a",{href:"https://github.com/apps/github-actions",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4"})]),t("a",{href:"https://github.com/pdimens",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19176506?v=4"})]),t("a",{href:"https://github.com/twinGu",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/29449917?v=4"})]),t("a",{href:"https://github.com/dpabon",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/13040959?v=4"})]),t("a",{href:"https://github.com/Qfl3x",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/20775896?v=4"})]),t("a",{href:"https://github.com/kongdd",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/9815742?v=4"})]),t("a",{href:"https://github.com/MartinuzziFrancesco",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10376688?v=4"})]),t("a",{href:"https://github.com/Sonicious",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/16307399?v=4"})]),t("a",{href:"https://github.com/rafaqz",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2534009?v=4"})]),t("a",{href:"https://github.com/danlooo",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/5780565?v=4"})]),t("a",{href:"https://github.com/MarkusZehner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/56972144?v=4"})]),t("a",{href:"https://github.com/Balinus",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/3630311?v=4"})]),t("a",{href:"https://github.com/singularitti",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/25192197?v=4"})]),t("a",{href:"https://github.com/ckrich",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/28727495?v=4"})]),t("a",{href:"https://github.com/apps/femtocleaner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/4123?v=4"})]),t("a",{href:"https://github.com/ikselven",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10441332?v=4"})]),t("a",{href:"https://github.com/linamaes",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/7131773?v=4"})])],-1)])),_:1})]),_:1})])}}});export{z as __pageData,j as default}; diff --git a/dev/assets/development_contributors.md.Ce2z0IUh.js b/dev/assets/development_contributors.md.Ce2z0IUh.js deleted file mode 100644 index 570a178f..00000000 --- a/dev/assets/development_contributors.md.Ce2z0IUh.js +++ /dev/null @@ -1 +0,0 @@ -import{V as i,a as c,b as h,c as u}from"./chunks/theme.CwYulWfl.js";import{D as l,c as m,I as s,w as e,k as r,o as g,a,j as t}from"./chunks/framework._h4tgM90.js";const b=t("strong",null,"Current core contributors ",-1),p=t("br",null,null,-1),v={align:"justify"},_=t("br",null,null,-1),f=t("div",{class:"row"},[t("a",{href:"https://github.com/meggart",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2539563?v=4"})]),t("a",{href:"https://github.com/felixcremer",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/17124431?v=4"})]),t("a",{href:"https://github.com/lazarusA",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19525261?v=4"})]),t("a",{href:"https://github.com/gdkrmr",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/12512930?v=4"})]),t("a",{href:"https://github.com/apps/github-actions",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4"})]),t("a",{href:"https://github.com/pdimens",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19176506?v=4"})]),t("a",{href:"https://github.com/twinGu",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/29449917?v=4"})]),t("a",{href:"https://github.com/dpabon",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/13040959?v=4"})]),t("a",{href:"https://github.com/Qfl3x",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/20775896?v=4"})]),t("a",{href:"https://github.com/kongdd",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/9815742?v=4"})]),t("a",{href:"https://github.com/MartinuzziFrancesco",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10376688?v=4"})]),t("a",{href:"https://github.com/Sonicious",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/16307399?v=4"})]),t("a",{href:"https://github.com/rafaqz",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2534009?v=4"})]),t("a",{href:"https://github.com/danlooo",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/5780565?v=4"})]),t("a",{href:"https://github.com/MarkusZehner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/56972144?v=4"})]),t("a",{href:"https://github.com/Balinus",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/3630311?v=4"})]),t("a",{href:"https://github.com/singularitti",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/25192197?v=4"})]),t("a",{href:"https://github.com/ckrich",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/28727495?v=4"})]),t("a",{href:"https://github.com/apps/femtocleaner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/4123?v=4"})]),t("a",{href:"https://github.com/ikselven",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10441332?v=4"})]),t("a",{href:"https://github.com/linamaes",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/7131773?v=4"})])],-1),C=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"development/contributors.md","filePath":"development/contributors.md","lastUpdated":null}'),d={name:"development/contributors.md"},P=Object.assign(d,{setup(k){const o=[{avatar:"https://www.bgc-jena.mpg.de/employee_images/121366-1667825290?t=eyJ3aWR0aCI6MjEzLCJoZWlnaHQiOjI3NCwiZml0IjoiY3JvcCIsImZpbGVfZXh0ZW5zaW9uIjoid2VicCIsInF1YWxpdHkiOjg2fQ%3D%3D--3e1d41ff4b1ea8928e6734bc473242a90f797dea",name:"Fabian Gans",title:"Geoscientific Programmer",links:[{icon:"github",link:"https://github.com/meggart"}]},{avatar:"https://avatars.githubusercontent.com/u/17124431?v=4",name:"Felix Cremer",title:"PhD Candidate in Remote Sensing",links:[{icon:"github",link:"https://github.com/felixcremer"}]},{avatar:"https://avatars.githubusercontent.com/u/2534009?v=4",name:"Rafael Schouten",title:"Spatial/ecological modelling",links:[{icon:"github",link:"https://github.com/rafaqz"}]},{avatar:"https://pbs.twimg.com/profile_images/1727075196962574336/zB09YH0s_400x400.jpg",name:"Lazaro Alonso",title:"Scientist. Data Visualization",links:[{icon:"github",link:"https://github.com/lazarusA"},{icon:"x",link:"https://twitter.com/LazarusAlon"},{icon:"linkedin",link:"https://www.linkedin.com/in/lazaro-alonso/"},{icon:"mastodon",link:"https://julialang.social/@LazaroAlonso"}]}];return(z,j)=>{const n=l("font");return g(),m("div",null,[s(r(u),null,{default:e(()=>[s(r(i),null,{title:e(()=>[a("Contributors")]),lead:e(()=>[b,a(),p,t("div",v,[a(" They have taking the lead for the ongoing organizational maintenance and technical direction of "),s(n,{color:"orange"},{default:e(()=>[a("YAXArrays.jl")]),_:1}),a(", "),s(n,{color:"orange"},{default:e(()=>[a("DiskArrays.jl")]),_:1}),a(" and "),s(n,{color:"orange"},{default:e(()=>[a("DimensionalData.jl")]),_:1}),a(". ")])]),_:1}),s(r(c),{size:"small",members:o}),s(r(h),null,{title:e(()=>[a("Our valuable contributors")]),lead:e(()=>[a(" We appreciate all contributions from the Julia community so that this ecosystem can thrive."),_]),members:e(()=>[f]),_:1})]),_:1})])}}});export{C as __pageData,P as default}; diff --git a/dev/assets/development_contributors.md.Ce2z0IUh.lean.js b/dev/assets/development_contributors.md.Ce2z0IUh.lean.js deleted file mode 100644 index 570a178f..00000000 --- a/dev/assets/development_contributors.md.Ce2z0IUh.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{V as i,a as c,b as h,c as u}from"./chunks/theme.CwYulWfl.js";import{D as l,c as m,I as s,w as e,k as r,o as g,a,j as t}from"./chunks/framework._h4tgM90.js";const b=t("strong",null,"Current core contributors ",-1),p=t("br",null,null,-1),v={align:"justify"},_=t("br",null,null,-1),f=t("div",{class:"row"},[t("a",{href:"https://github.com/meggart",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2539563?v=4"})]),t("a",{href:"https://github.com/felixcremer",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/17124431?v=4"})]),t("a",{href:"https://github.com/lazarusA",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19525261?v=4"})]),t("a",{href:"https://github.com/gdkrmr",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/12512930?v=4"})]),t("a",{href:"https://github.com/apps/github-actions",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4"})]),t("a",{href:"https://github.com/pdimens",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/19176506?v=4"})]),t("a",{href:"https://github.com/twinGu",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/29449917?v=4"})]),t("a",{href:"https://github.com/dpabon",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/13040959?v=4"})]),t("a",{href:"https://github.com/Qfl3x",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/20775896?v=4"})]),t("a",{href:"https://github.com/kongdd",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/9815742?v=4"})]),t("a",{href:"https://github.com/MartinuzziFrancesco",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10376688?v=4"})]),t("a",{href:"https://github.com/Sonicious",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/16307399?v=4"})]),t("a",{href:"https://github.com/rafaqz",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/2534009?v=4"})]),t("a",{href:"https://github.com/danlooo",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/5780565?v=4"})]),t("a",{href:"https://github.com/MarkusZehner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/56972144?v=4"})]),t("a",{href:"https://github.com/Balinus",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/3630311?v=4"})]),t("a",{href:"https://github.com/singularitti",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/25192197?v=4"})]),t("a",{href:"https://github.com/ckrich",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/28727495?v=4"})]),t("a",{href:"https://github.com/apps/femtocleaner",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/in/4123?v=4"})]),t("a",{href:"https://github.com/ikselven",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/10441332?v=4"})]),t("a",{href:"https://github.com/linamaes",target:"_blank"},[t("img",{src:"https://avatars.githubusercontent.com/u/7131773?v=4"})])],-1),C=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"page"},"headers":[],"relativePath":"development/contributors.md","filePath":"development/contributors.md","lastUpdated":null}'),d={name:"development/contributors.md"},P=Object.assign(d,{setup(k){const o=[{avatar:"https://www.bgc-jena.mpg.de/employee_images/121366-1667825290?t=eyJ3aWR0aCI6MjEzLCJoZWlnaHQiOjI3NCwiZml0IjoiY3JvcCIsImZpbGVfZXh0ZW5zaW9uIjoid2VicCIsInF1YWxpdHkiOjg2fQ%3D%3D--3e1d41ff4b1ea8928e6734bc473242a90f797dea",name:"Fabian Gans",title:"Geoscientific Programmer",links:[{icon:"github",link:"https://github.com/meggart"}]},{avatar:"https://avatars.githubusercontent.com/u/17124431?v=4",name:"Felix Cremer",title:"PhD Candidate in Remote Sensing",links:[{icon:"github",link:"https://github.com/felixcremer"}]},{avatar:"https://avatars.githubusercontent.com/u/2534009?v=4",name:"Rafael Schouten",title:"Spatial/ecological modelling",links:[{icon:"github",link:"https://github.com/rafaqz"}]},{avatar:"https://pbs.twimg.com/profile_images/1727075196962574336/zB09YH0s_400x400.jpg",name:"Lazaro Alonso",title:"Scientist. Data Visualization",links:[{icon:"github",link:"https://github.com/lazarusA"},{icon:"x",link:"https://twitter.com/LazarusAlon"},{icon:"linkedin",link:"https://www.linkedin.com/in/lazaro-alonso/"},{icon:"mastodon",link:"https://julialang.social/@LazaroAlonso"}]}];return(z,j)=>{const n=l("font");return g(),m("div",null,[s(r(u),null,{default:e(()=>[s(r(i),null,{title:e(()=>[a("Contributors")]),lead:e(()=>[b,a(),p,t("div",v,[a(" They have taking the lead for the ongoing organizational maintenance and technical direction of "),s(n,{color:"orange"},{default:e(()=>[a("YAXArrays.jl")]),_:1}),a(", "),s(n,{color:"orange"},{default:e(()=>[a("DiskArrays.jl")]),_:1}),a(" and "),s(n,{color:"orange"},{default:e(()=>[a("DimensionalData.jl")]),_:1}),a(". ")])]),_:1}),s(r(c),{size:"small",members:o}),s(r(h),null,{title:e(()=>[a("Our valuable contributors")]),lead:e(()=>[a(" We appreciate all contributions from the Julia community so that this ecosystem can thrive."),_]),members:e(()=>[f]),_:1})]),_:1})])}}});export{C as __pageData,P as default}; diff --git a/dev/assets/fvajudo.CbmV3u64.jpeg b/dev/assets/fvajudo.CbmV3u64.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c84a7ba4423b7177524d7d25258219ffa427434c GIT binary patch literal 37944 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 Started

Installation

Install Julia v1.10 or above. YAXArrays.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

julia
pkg> add YAXArrays

Alternatively, you can also do

julia
import Pkg; Pkg.add("YAXArrays")

Quickstart

Create a simple array from random numbers given the size of each dimension or axis:

julia
using YAXArrays
+import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(e,s,h,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

Getting Started

Installation

Install Julia v1.10 or above. YAXArrays.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

julia
pkg> add YAXArrays

Alternatively, you can also do

julia
import Pkg; Pkg.add("YAXArrays")

Quickstart

Create a simple array from random numbers given the size of each dimension or axis:

julia
using YAXArrays
 
 a = YAXArray(rand(2,3))
╭─────────────────────────╮
 │ 2×3 YAXArray{Float64,2} │
@@ -44,13 +44,13 @@ import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 46.88 KB
 └──────────────────────────────────────────────────────────────────────────────┘

Get the temperature map at the first point in time:

julia
a2[variable=At("temperature"), time=1].data
10×15 view(::Array{Float64, 4}, 1, :, :, 1) with eltype Float64:
- 0.212529   0.687095  0.329389   0.322666  …  0.943401  0.0794068  0.124242
- 0.148317   0.255777  0.0451893  0.90528      0.932458  0.743448   0.50247
- 0.345306   0.817761  0.371764   0.77842      0.460725  0.346683   0.997411
- 0.11084    0.112418  0.595773   0.859691     0.85927   0.663178   0.979973
- 0.0714621  0.249736  0.759224   0.667162     0.259272  0.180714   0.550461
- 0.158962   0.709966  0.763967   0.343173  …  0.260239  0.410862   0.245069
- 0.287222   0.653128  0.0305119  0.354183     0.716081  0.965427   0.688638
- 0.821934   0.89118   0.885742   0.594211     0.768702  0.061001   0.953996
- 0.256631   0.996559  0.2551     0.763404     0.391745  0.835697   0.0833944
- 0.650262   0.579623  0.147435   0.494427     0.57022   0.344799   0.915389

Updates

TIP

The Julia Compiler is always improving. As such, we recommend using the latest stable version of Julia.

You may check the installed version with:

julia
pkg> st YAXArrays

INFO

With YAXArrays.jl 0.5 we switched the underlying data type to be a subtype of the DimensionalData.jl types. Therefore the indexing with named dimensions changed to the DimensionalData syntax. See the DimensionalData.jl docs.

`,21),e=[p];function l(h,k,r,d,o,g){return i(),a("div",null,e)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; + 0.917506 0.818381 0.568985 0.864111 … 0.831293 0.430697 0.914342 + 0.170553 0.416222 0.222088 0.231967 0.680628 0.535731 0.617046 + 0.997315 0.307643 0.695412 0.233097 0.173082 0.895866 0.997734 + 0.140123 0.558322 0.753357 0.437726 0.654983 0.154468 0.676268 + 0.460593 0.342506 0.228113 0.197427 0.448462 0.00520612 0.292358 + 0.417004 0.720753 0.398057 0.740896 … 0.209609 0.75727 0.209998 + 0.65235 0.948571 0.27538 0.830771 0.0164863 0.76584 0.552837 + 0.174313 0.984091 0.466392 0.744666 0.302653 0.26802 0.596946 + 0.982001 0.361453 0.560824 0.70521 0.140938 0.883224 0.599861 + 0.526898 0.691289 0.804233 0.127126 0.266098 0.644498 0.685735

Updates

TIP

The Julia Compiler is always improving. As such, we recommend using the latest stable version of Julia.

You may check the installed version with:

julia
pkg> st YAXArrays

INFO

With YAXArrays.jl 0.5 we switched the underlying data type to be a subtype of the DimensionalData.jl types. Therefore the indexing with named dimensions changed to the DimensionalData syntax. See the DimensionalData.jl docs.

`,21)]))}const E=a(p,[["render",l]]);export{g as __pageData,E as default}; diff --git a/dev/assets/get_started.md.2M_EpbbP.lean.js b/dev/assets/get_started.md.2M_EpbbP.lean.js new file mode 100644 index 00000000..25a16505 --- /dev/null +++ b/dev/assets/get_started.md.2M_EpbbP.lean.js @@ -0,0 +1,56 @@ +import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.Bwkmg46C.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),p={name:"get_started.md"};function l(e,s,h,k,r,d){return t(),i("div",null,s[0]||(s[0]=[n(`

Getting Started

Installation

Install Julia v1.10 or above. YAXArrays.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

julia
pkg> add YAXArrays

Alternatively, you can also do

julia
import Pkg; Pkg.add("YAXArrays")

Quickstart

Create a simple array from random numbers given the size of each dimension or axis:

julia
using YAXArrays
+
+a = YAXArray(rand(2,3))
╭─────────────────────────╮
+│ 2×3 YAXArray{Float64,2} │
+├─────────────────────────┴───────────────────────────────────── dims ┐
+  ↓ Dim_1 Sampled{Int64} Base.OneTo(2) ForwardOrdered Regular Points,
+  → Dim_2 Sampled{Int64} Base.OneTo(3) ForwardOrdered Regular Points
+├─────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├────────────────────────────────────────────────────────── file size ┤ 
+  file size: 48.0 bytes
+└─────────────────────────────────────────────────────────────────────┘

Assemble a more complex YAXArray with 4 dimensions, i.e. time, x, y and a variable type:

julia
using DimensionalData
+
+# axes or dimensions with name and tick values
+axlist = (
+    Dim{:time}(range(1, 20, length=20)),
+    X(range(1, 10, length=10)),
+    Y(range(1, 5, length=15)),
+    Dim{:variable}(["temperature", "precipitation"])
+)
+
+# the actual data matching the dimensions defined in axlist
+data = rand(20, 10, 15, 2)
+
+# metadata about the array
+props = Dict(
+    "origin" => "YAXArrays.jl example",
+    "x" => "longitude",
+    "y" => "latitude",
+);
+
+a2 = YAXArray(axlist, data, props)
╭────────────────────────────────╮
+│ 20×10×15×2 YAXArray{Float64,4} │
+├────────────────────────────────┴─────────────────────────────────────── dims ┐
+  ↓ time     Sampled{Float64} 1.0:1.0:20.0 ForwardOrdered Regular Points,
+  → X        Sampled{Float64} 1.0:1.0:10.0 ForwardOrdered Regular Points,
+  ↗ Y        Sampled{Float64} 1.0:0.2857142857142857:5.0 ForwardOrdered Regular Points,
+  ⬔ variable Categorical{String} ["temperature", "precipitation"] ReverseOrdered
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, String} with 3 entries:
+  "y"      => "latitude"
+  "x"      => "longitude"
+  "origin" => "YAXArrays.jl example"
+├─────────────────────────────────────────────────────────────────── file size ┤ 
+  file size: 46.88 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Get the temperature map at the first point in time:

julia
a2[variable=At("temperature"), time=1].data
10×15 view(::Array{Float64, 4}, 1, :, :, 1) with eltype Float64:
+ 0.917506  0.818381  0.568985  0.864111  …  0.831293   0.430697    0.914342
+ 0.170553  0.416222  0.222088  0.231967     0.680628   0.535731    0.617046
+ 0.997315  0.307643  0.695412  0.233097     0.173082   0.895866    0.997734
+ 0.140123  0.558322  0.753357  0.437726     0.654983   0.154468    0.676268
+ 0.460593  0.342506  0.228113  0.197427     0.448462   0.00520612  0.292358
+ 0.417004  0.720753  0.398057  0.740896  …  0.209609   0.75727     0.209998
+ 0.65235   0.948571  0.27538   0.830771     0.0164863  0.76584     0.552837
+ 0.174313  0.984091  0.466392  0.744666     0.302653   0.26802     0.596946
+ 0.982001  0.361453  0.560824  0.70521      0.140938   0.883224    0.599861
+ 0.526898  0.691289  0.804233  0.127126     0.266098   0.644498    0.685735

Updates

TIP

The Julia Compiler is always improving. As such, we recommend using the latest stable version of Julia.

You may check the installed version with:

julia
pkg> st YAXArrays

INFO

With YAXArrays.jl 0.5 we switched the underlying data type to be a subtype of the DimensionalData.jl types. Therefore the indexing with named dimensions changed to the DimensionalData syntax. See the DimensionalData.jl docs.

`,21)]))}const E=a(p,[["render",l]]);export{g as __pageData,E as default}; diff --git a/dev/assets/get_started.md.EFW7umcj.lean.js b/dev/assets/get_started.md.EFW7umcj.lean.js deleted file mode 100644 index 50ea4609..00000000 --- a/dev/assets/get_started.md.EFW7umcj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a4 as n}from"./chunks/framework._h4tgM90.js";const c=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"get_started.md","filePath":"get_started.md","lastUpdated":null}'),t={name:"get_started.md"},p=n("",21),e=[p];function l(h,k,r,d,o,g){return i(),a("div",null,e)}const y=s(t,[["render",l]]);export{c as __pageData,y as default}; diff --git a/dev/assets/gazrluv.xrZxBsPv.jpeg b/dev/assets/hkbjqfv.xrZxBsPv.jpeg similarity index 100% rename from dev/assets/gazrluv.xrZxBsPv.jpeg rename to dev/assets/hkbjqfv.xrZxBsPv.jpeg diff --git a/dev/assets/index.md.D-zmVfSn.js b/dev/assets/index.md.DU-mPNT1.js similarity index 96% rename from dev/assets/index.md.D-zmVfSn.js rename to dev/assets/index.md.DU-mPNT1.js index db8e4046..d8b44121 100644 --- a/dev/assets/index.md.D-zmVfSn.js +++ b/dev/assets/index.md.DU-mPNT1.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework._h4tgM90.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YAXArrays.jl","text":"Yet another xarray-like Julia package","tagline":"A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.","image":{"src":"/logo.png","alt":"VitePress"},"actions":[{"theme":"alt","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaDataCubes/YAXArrays.jl"},{"theme":"alt","text":"API reference","link":"/api"}]},"features":[{"title":"Flexible I/O capabilities","details":"Open and operate on NetCDF and Zarr datasets directly. Or bring in data from other sources with ArchGDAL.jl, GRIBDatasets.jl, GeoJSON.jl, HDF5.jl, Shapefile.jl, GeoParquet.jl, etc.","link":"/UserGuide/openZarr"},{"title":"Interoperability","details":"Well integrated with Julia's ecosystem, i.e., distributed operations are native. And plotting with Makie.jl is well supported."},{"title":"Named dimensions and GroupBy(in memory)","details":"Apply operations over named dimensions, select values by labels and integers as well as efficient split-apply-combine operations with groupby via DimensionalData.jl.","link":"/UserGuide/group_by"},{"title":"Efficiency","details":"Efficient mapslices(x) and mapCube operations on huge multiple arrays, optimized for high-latency data access (object storage, compressed datasets)."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const m=e(o,[["render",i]]);export{f as __pageData,m as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.Bwkmg46C.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YAXArrays.jl","text":"Yet another xarray-like Julia package","tagline":"A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.","image":{"src":"/logo.png","alt":"VitePress"},"actions":[{"theme":"alt","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaDataCubes/YAXArrays.jl"},{"theme":"alt","text":"API reference","link":"/api"}]},"features":[{"title":"Flexible I/O capabilities","details":"Open and operate on NetCDF and Zarr datasets directly. Or bring in data from other sources with ArchGDAL.jl, GRIBDatasets.jl, GeoJSON.jl, HDF5.jl, Shapefile.jl, GeoParquet.jl, etc.","link":"/UserGuide/openZarr"},{"title":"Interoperability","details":"Well integrated with Julia's ecosystem, i.e., distributed operations are native. And plotting with Makie.jl is well supported."},{"title":"Named dimensions and GroupBy(in memory)","details":"Apply operations over named dimensions, select values by labels and integers as well as efficient split-apply-combine operations with groupby via DimensionalData.jl.","link":"/UserGuide/group_by"},{"title":"Efficiency","details":"Efficient mapslices(x) and mapCube operations on huge multiple arrays, optimized for high-latency data access (object storage, compressed datasets)."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const m=e(o,[["render",i]]);export{f as __pageData,m as default}; diff --git a/dev/assets/index.md.D-zmVfSn.lean.js b/dev/assets/index.md.DU-mPNT1.lean.js similarity index 96% rename from dev/assets/index.md.D-zmVfSn.lean.js rename to dev/assets/index.md.DU-mPNT1.lean.js index db8e4046..d8b44121 100644 --- a/dev/assets/index.md.D-zmVfSn.lean.js +++ b/dev/assets/index.md.DU-mPNT1.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework._h4tgM90.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YAXArrays.jl","text":"Yet another xarray-like Julia package","tagline":"A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.","image":{"src":"/logo.png","alt":"VitePress"},"actions":[{"theme":"alt","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaDataCubes/YAXArrays.jl"},{"theme":"alt","text":"API reference","link":"/api"}]},"features":[{"title":"Flexible I/O capabilities","details":"Open and operate on NetCDF and Zarr datasets directly. Or bring in data from other sources with ArchGDAL.jl, GRIBDatasets.jl, GeoJSON.jl, HDF5.jl, Shapefile.jl, GeoParquet.jl, etc.","link":"/UserGuide/openZarr"},{"title":"Interoperability","details":"Well integrated with Julia's ecosystem, i.e., distributed operations are native. And plotting with Makie.jl is well supported."},{"title":"Named dimensions and GroupBy(in memory)","details":"Apply operations over named dimensions, select values by labels and integers as well as efficient split-apply-combine operations with groupby via DimensionalData.jl.","link":"/UserGuide/group_by"},{"title":"Efficiency","details":"Efficient mapslices(x) and mapCube operations on huge multiple arrays, optimized for high-latency data access (object storage, compressed datasets)."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const m=e(o,[["render",i]]);export{f as __pageData,m as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.Bwkmg46C.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YAXArrays.jl","text":"Yet another xarray-like Julia package","tagline":"A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.","image":{"src":"/logo.png","alt":"VitePress"},"actions":[{"theme":"alt","text":"Get Started","link":"/get_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaDataCubes/YAXArrays.jl"},{"theme":"alt","text":"API reference","link":"/api"}]},"features":[{"title":"Flexible I/O capabilities","details":"Open and operate on NetCDF and Zarr datasets directly. Or bring in data from other sources with ArchGDAL.jl, GRIBDatasets.jl, GeoJSON.jl, HDF5.jl, Shapefile.jl, GeoParquet.jl, etc.","link":"/UserGuide/openZarr"},{"title":"Interoperability","details":"Well integrated with Julia's ecosystem, i.e., distributed operations are native. And plotting with Makie.jl is well supported."},{"title":"Named dimensions and GroupBy(in memory)","details":"Apply operations over named dimensions, select values by labels and integers as well as efficient split-apply-combine operations with groupby via DimensionalData.jl.","link":"/UserGuide/group_by"},{"title":"Efficiency","details":"Efficient mapslices(x) and mapCube operations on huge multiple arrays, optimized for high-latency data access (object storage, compressed datasets)."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}`),o={name:"index.md"};function i(r,n,l,s,d,c){return a(),t("div")}const m=e(o,[["render",i]]);export{f as __pageData,m as default}; diff --git a/dev/assets/jthhtav.BmXbFoQB.png b/dev/assets/jthhtav.BmXbFoQB.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bd073a7a714f2f0a428c096d1de86b908b340a GIT binary patch literal 112271 zcmd?Rbx@U2)IO?!lyryGp+Oo!={R(^v^3Jv9SR5n0#X9fAl=M{qMg1;XBNUckjL8SiTPM-o;hbWCs4o%soZcT~Y)QsZrv2F3e|C z7(``NV*@cb=xfiqx}BmehNAaER=zn~$jl{lH9@}Qbcn(j5!7%nnZlAO3ES(QKEL|9 zqdBB}$*C_7XDo|3HXBX{;(bLA+!i1o2m-+)fGc$!Q*WR6Kkj|=Vf`@v_JgYP0hKUUqC=FO;Kmx za*)LN5b^5dYl`iBMoX+0wIT z6^e-d|8D*tzbyL7V(~xTp(70Aw`8#h18ryR8*hBB`rjx0pLaH%8jV;lD2gI`m>B+F ze#!s0kNiKMM%^^S{p^{Y^{271U+-&`=^`a7XPD6iJu7Vyz?znjpX?S<+2i4^o27{y z;%4>w-`34du^Qt%BM%z=@BzI6t#iB)8@$+;5f#`mxukNl_nsfZKa;j`eA-N5sC}&> zgaYz+_q<3DByhYI@Ohwj{3Qo%QZ=fXHEWw9>E*d&aFFRM|LhpNN4$6 zp*|hToiOm3)Q(T_vYiVa;X#fhJV)>%Zk`Q7kVv{1f$CfIW?t~BrA@oH7YFl+DJlAj ziV@M#V};t)-uE}#j&+jz)?Bl{-Y^KSc}%HVDUE6nm*G7`02;{Lo(N=uN6@@jgc&wb$d6- z)rN+KT8GVpnM%f^%=fR8xosDES(*!uA2(Wd*W>gB+|Rb!&;>(*W!iZ~+z3w091eE`Vs&Y&~0rgiYhx2s~t}-sLbeGjqP)C9!`aT<~Gan7vT9o~z`Ol$2D8 zfLDP!Bc_Ro$@$iBn-$mLVsmptgXi%|2YAy!cXu#nfHBx9iEz?J!^7KfUon$ssU49y zs#fq0vsRǬ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 %c?R>1&98CmEuq9)kYJ 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
)-PS5)s^CJJ2$OtV3<^1lgZelo@nb42}YgDSW9 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 diff --git a/dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.lean.js b/dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.lean.js deleted file mode 100644 index e011d22c..00000000 --- a/dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const h="/YAXArrays.jl/dev/assets/qrtcgza.B1F72mIS.png",l="/YAXArrays.jl/dev/assets/yrexdyf.Dk-HtvWS.png",o=JSON.parse('{"title":"Mean Seasonal Cycle for a single pixel","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/mean_seasonal_cycle.md","filePath":"tutorials/mean_seasonal_cycle.md","lastUpdated":null}'),k={name:"tutorials/mean_seasonal_cycle.md"},p=n("",21),t=[p];function e(E,d,r,g,y,c){return a(),i("div",null,t)}const C=s(k,[["render",e]]);export{o as __pageData,C as default}; diff --git a/dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.js b/dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.js similarity index 81% rename from dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.js rename to dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.js index 69bc185b..42c12f99 100644 --- a/dev/assets/tutorials_mean_seasonal_cycle.md.BCu3jBkO.js +++ b/dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const h="/YAXArrays.jl/dev/assets/qrtcgza.B1F72mIS.png",l="/YAXArrays.jl/dev/assets/yrexdyf.Dk-HtvWS.png",o=JSON.parse('{"title":"Mean Seasonal Cycle for a single pixel","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/mean_seasonal_cycle.md","filePath":"tutorials/mean_seasonal_cycle.md","lastUpdated":null}'),k={name:"tutorials/mean_seasonal_cycle.md"},p=n(`

Mean Seasonal Cycle for a single pixel

julia
using CairoMakie
+import{_ as i,c as a,a2 as n,o as h}from"./chunks/framework.Bwkmg46C.js";const l="/YAXArrays.jl/dev/assets/ulsahek.w0JksFmk.png",k="/YAXArrays.jl/dev/assets/jthhtav.BmXbFoQB.png",c=JSON.parse('{"title":"Mean Seasonal Cycle for a single pixel","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/mean_seasonal_cycle.md","filePath":"tutorials/mean_seasonal_cycle.md","lastUpdated":null}'),p={name:"tutorials/mean_seasonal_cycle.md"};function t(e,s,E,d,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Mean Seasonal Cycle for a single pixel

julia
using CairoMakie
 CairoMakie.activate!()
 using Dates
 using Statistics

We define the data span. For simplicity, three non-leap years were selected.

julia
t =  Date("2021-01-01"):Day(1):Date("2023-12-31")
@@ -9,9 +9,9 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const h
     )
 ax.xticklabelrotation = π / 4
 ax.xticklabelalign = (:right, :center)
-fig

Define the cube

julia
julia> using YAXArrays, DimensionalData
+fig

Define the cube

julia
julia> using YAXArrays, DimensionalData
 
-julia> axes = (Dim{:Time}(t),)
Time Date("2021-01-01"):Dates.Day(1):Date("2023-12-31")
julia
julia> c = YAXArray(axes, var)
╭──────────────────────────────────╮
+julia> axes = (Dim{:Time}(t),)
(Time Date("2021-01-01"):Dates.Day(1):Date("2023-12-31"))
julia
julia> c = YAXArray(axes, var)
╭──────────────────────────────────╮
 1095-element YAXArray{Float64,1}
 ├──────────────────────────────────┴───────────────────────────────────── dims ┐
 Time Sampled{Date} Date("2021-01-01"):Dates.Day(1):Date("2023-12-31") ForwardOrdered Regular Points
@@ -37,26 +37,26 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const h
 end
 
 msc = mean_seasonal_cycle(c);
365×1 Matrix{Float64}:
- -0.13291526713087612
- -0.05460756353473867
-  0.07204935956348457
- -0.05326101988982565
-  0.15868041606243408
-  0.11439100033904083
-  0.13930646027762436
-  0.08757811935252037
-  0.05341039407809093
-  0.18867824088012022
+ -0.02831455834460911
+  0.04453476627315919
+  0.035686570524083555
+  0.11722933412557059
+  0.036946732134505465
+  0.19277839017642331
+  0.07495148408717336
+  0.023101933734291022
+  0.2784376308132314
+  0.17321929531017177
 
- -0.17597786204903687
- -0.0803349435034534
- -0.11344554908666375
- -0.005146734261364652
- -0.054866954001569136
- -0.07512042630397335
- -0.06048141295750401
-  0.048565067687498124
-  0.04428068807380173

TODO: Apply the new groupby funtion from DD

Plot results: mean seasonal cycle

julia
fig, ax, obj = lines(1:365, var[1:365]; label="2021", color=:black,
+ -0.14858712445280844
+ -0.1058503173631838
+ -0.11471619358216052
+ -0.09915529827483704
+ -0.1388557751513135
+ -0.000924951522542868
+ -0.034309078782668714
+  0.03329805652756149
+ -0.050857935248364274

TODO: Apply the new groupby funtion from DD

Plot results: mean seasonal cycle

julia
fig, ax, obj = lines(1:365, var[1:365]; label="2021", color=:black,
     linewidth=2.0, linestyle=:dot,
     axis = (;  xlabel="Day of Year", ylabel="Variable"),
     figure=(; size = (600,400))
@@ -69,4 +69,4 @@ import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework._h4tgM90.js";const h
 ax.xticklabelrotation = π / 4
 ax.xticklabelalign = (:right, :center)
 fig
-current_figure()

',21),t=[p];function e(E,d,r,g,y,c){return a(),i("div",null,t)}const C=s(k,[["render",e]]);export{o as __pageData,C as default}; +current_figure()

',21)]))}const F=i(p,[["render",t]]);export{c as __pageData,F as default}; diff --git a/dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.lean.js b/dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.lean.js new file mode 100644 index 00000000..42c12f99 --- /dev/null +++ b/dev/assets/tutorials_mean_seasonal_cycle.md.DnEN9eOf.lean.js @@ -0,0 +1,72 @@ +import{_ as i,c as a,a2 as n,o as h}from"./chunks/framework.Bwkmg46C.js";const l="/YAXArrays.jl/dev/assets/ulsahek.w0JksFmk.png",k="/YAXArrays.jl/dev/assets/jthhtav.BmXbFoQB.png",c=JSON.parse('{"title":"Mean Seasonal Cycle for a single pixel","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/mean_seasonal_cycle.md","filePath":"tutorials/mean_seasonal_cycle.md","lastUpdated":null}'),p={name:"tutorials/mean_seasonal_cycle.md"};function t(e,s,E,d,r,g){return h(),a("div",null,s[0]||(s[0]=[n(`

Mean Seasonal Cycle for a single pixel

julia
using CairoMakie
+CairoMakie.activate!()
+using Dates
+using Statistics

We define the data span. For simplicity, three non-leap years were selected.

julia
t =  Date("2021-01-01"):Day(1):Date("2023-12-31")
+NpY = 3
3

and create some seasonal dummy data

julia
x = repeat(range(0, , length=365), NpY)
+var = @. sin(x) + 0.1 * randn()
julia
fig, ax, obj = lines(t, var; color = :purple, linewidth=1.25,
+    axis=(; xlabel="Time", ylabel="Variable"),
+    figure = (; size = (600,400))
+    )
+ax.xticklabelrotation = π / 4
+ax.xticklabelalign = (:right, :center)
+fig

Define the cube

julia
julia> using YAXArrays, DimensionalData
+
+julia> axes = (Dim{:Time}(t),)
(Time Date("2021-01-01"):Dates.Day(1):Date("2023-12-31"))
julia
julia> c = YAXArray(axes, var)
╭──────────────────────────────────╮
+1095-element YAXArray{Float64,1}
+├──────────────────────────────────┴───────────────────────────────────── dims ┐
+Time Sampled{Date} Date("2021-01-01"):Dates.Day(1):Date("2023-12-31") ForwardOrdered Regular Points
+├──────────────────────────────────────────────────────────────────── metadata ┤
+  Dict{String, Any}()
+├─────────────────────────────────────────────────────────────────── file size ┤
+  file size: 8.55 KB
+└──────────────────────────────────────────────────────────────────────────────┘

Let's calculate the mean seasonal cycle of our dummy variable 'var'

julia
function mean_seasonal_cycle(c; ndays = 365)
+    ## filterig by month-day
+    monthday = map(x->Dates.format(x, "u-d"), collect(c.Time))
+    datesid = unique(monthday)
+    ## number of years
+    NpY = Int(size(monthday,1)/ndays)
+    idx = Int.(zeros(ndays, NpY))
+    ## get the day-month indices for data subsetting
+    for i in 1:ndays
+        idx[i,:] = Int.(findall(x-> x == datesid[i], monthday))
+    end
+    ## compute the mean seasonal cycle
+    mscarray = map(x->var[x], idx)
+    msc = mapslices(mean, mscarray, dims=2)
+    return msc
+end
+
+msc = mean_seasonal_cycle(c);
365×1 Matrix{Float64}:
+ -0.02831455834460911
+  0.04453476627315919
+  0.035686570524083555
+  0.11722933412557059
+  0.036946732134505465
+  0.19277839017642331
+  0.07495148408717336
+  0.023101933734291022
+  0.2784376308132314
+  0.17321929531017177
+
+ -0.14858712445280844
+ -0.1058503173631838
+ -0.11471619358216052
+ -0.09915529827483704
+ -0.1388557751513135
+ -0.000924951522542868
+ -0.034309078782668714
+  0.03329805652756149
+ -0.050857935248364274

TODO: Apply the new groupby funtion from DD

Plot results: mean seasonal cycle

julia
fig, ax, obj = lines(1:365, var[1:365]; label="2021", color=:black,
+    linewidth=2.0, linestyle=:dot,
+    axis = (;  xlabel="Day of Year", ylabel="Variable"),
+    figure=(; size = (600,400))
+    )
+lines!(1:365, var[366:730], label="2022", color=:brown,
+    linewidth=1.5, linestyle=:dash
+    )
+lines!(1:365, msc[:,1]; label="MSC", color=:dodgerblue, linewidth=2.5)
+axislegend()
+ax.xticklabelrotation = π / 4
+ax.xticklabelalign = (:right, :center)
+fig
+current_figure()

',21)]))}const F=i(p,[["render",t]]);export{c as __pageData,F as default}; diff --git a/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.js b/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.js new file mode 100644 index 00000000..29143d3d --- /dev/null +++ b/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as r,o}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Other tutorials","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/other_tutorials.md","filePath":"tutorials/other_tutorials.md","lastUpdated":null}'),i={name:"tutorials/other_tutorials.md"};function l(s,e,n,h,u,f){return o(),a("div",null,e[0]||(e[0]=[r('

Other tutorials

If you are interested in learning how to work with YAXArrays for different use cases you can follow along one of the following tutorials.

  • Currently the overview tutorial is located at ESDLTutorials Repository

  • You can find further tutorial videos at the EO College. Beware that the syntax in the video tutorials might be slightly changed.

  • the other tutorials are still work in progress.

General overview of the functionality of YAXArrays

This tutorial provides a broad overview about the features of YAXArrays.

Table-style iteration over YAXArrays

Work in progress

Sometimes you want to combine the data that is represented in the data cube with other datasets, which are best described as a data frame. In this tutorial you will learn how to use the Tables.jl interface to iterate over the data in the YAXArray.

Combining multiple tiff files into a zarr based datacube

',9)]))}const b=t(i,[["render",l]]);export{c as __pageData,b as default}; diff --git a/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.lean.js b/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.lean.js new file mode 100644 index 00000000..29143d3d --- /dev/null +++ b/dev/assets/tutorials_other_tutorials.md.DMk6XJBb.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as r,o}from"./chunks/framework.Bwkmg46C.js";const c=JSON.parse('{"title":"Other tutorials","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/other_tutorials.md","filePath":"tutorials/other_tutorials.md","lastUpdated":null}'),i={name:"tutorials/other_tutorials.md"};function l(s,e,n,h,u,f){return o(),a("div",null,e[0]||(e[0]=[r('

Other tutorials

If you are interested in learning how to work with YAXArrays for different use cases you can follow along one of the following tutorials.

  • Currently the overview tutorial is located at ESDLTutorials Repository

  • You can find further tutorial videos at the EO College. Beware that the syntax in the video tutorials might be slightly changed.

  • the other tutorials are still work in progress.

General overview of the functionality of YAXArrays

This tutorial provides a broad overview about the features of YAXArrays.

Table-style iteration over YAXArrays

Work in progress

Sometimes you want to combine the data that is represented in the data cube with other datasets, which are best described as a data frame. In this tutorial you will learn how to use the Tables.jl interface to iterate over the data in the YAXArray.

Combining multiple tiff files into a zarr based datacube

',9)]))}const b=t(i,[["render",l]]);export{c as __pageData,b as default}; diff --git a/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.js b/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.js deleted file mode 100644 index 301df584..00000000 --- a/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a,a4 as r}from"./chunks/framework._h4tgM90.js";const p=JSON.parse('{"title":"Other tutorials","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/other_tutorials.md","filePath":"tutorials/other_tutorials.md","lastUpdated":null}'),o={name:"tutorials/other_tutorials.md"},i=r('

Other tutorials

If you are interested in learning how to work with YAXArrays for different use cases you can follow along one of the following tutorials.

  • Currently the overview tutorial is located at ESDLTutorials Repository

  • You can find further tutorial videos at the EO College. Beware that the syntax in the video tutorials might be slightly changed.

  • the other tutorials are still work in progress.

General overview of the functionality of YAXArrays

This tutorial provides a broad overview about the features of YAXArrays.

Table-style iteration over YAXArrays

Work in progress

Sometimes you want to combine the data that is represented in the data cube with other datasets, which are best described as a data frame. In this tutorial you will learn how to use the Tables.jl interface to iterate over the data in the YAXArray.

Combining multiple tiff files into a zarr based datacube

',9),l=[i];function s(n,h,u,f,d,c){return a(),t("div",null,l)}const _=e(o,[["render",s]]);export{p as __pageData,_ as default}; diff --git a/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.lean.js b/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.lean.js deleted file mode 100644 index 1eec65b3..00000000 --- a/dev/assets/tutorials_other_tutorials.md.DofrLRlZ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a,a4 as r}from"./chunks/framework._h4tgM90.js";const p=JSON.parse('{"title":"Other tutorials","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/other_tutorials.md","filePath":"tutorials/other_tutorials.md","lastUpdated":null}'),o={name:"tutorials/other_tutorials.md"},i=r("",9),l=[i];function s(n,h,u,f,d,c){return a(),t("div",null,l)}const _=e(o,[["render",s]]);export{p as __pageData,_ as default}; diff --git a/dev/assets/tutorials_plottingmaps.md._uyphNwM.js b/dev/assets/tutorials_plottingmaps.md.C_xuWMeL.js similarity index 93% rename from dev/assets/tutorials_plottingmaps.md._uyphNwM.js rename to dev/assets/tutorials_plottingmaps.md.C_xuWMeL.js index 8326a8d8..6d340652 100644 --- a/dev/assets/tutorials_plottingmaps.md._uyphNwM.js +++ b/dev/assets/tutorials_plottingmaps.md.C_xuWMeL.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework._h4tgM90.js";const n="/YAXArrays.jl/dev/assets/gazrluv.xrZxBsPv.jpeg",t="/YAXArrays.jl/dev/assets/ngaxsqo.B7KFIfDV.jpeg",k="/YAXArrays.jl/dev/assets/pcibivl.96k_BqPR.jpeg",C=JSON.parse('{"title":"Plotting maps","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plottingmaps.md","filePath":"tutorials/plottingmaps.md","lastUpdated":null}'),l={name:"tutorials/plottingmaps.md"},p=h(`

Plotting maps

As test data we use the CMIP6 Scenarios.

julia
using Zarr, YAXArrays, Dates
+import{_ as i,c as a,a2 as h,o as n}from"./chunks/framework.Bwkmg46C.js";const t="/YAXArrays.jl/dev/assets/hkbjqfv.xrZxBsPv.jpeg",k="/YAXArrays.jl/dev/assets/cgfvxvy.B7KFIfDV.jpeg",l="/YAXArrays.jl/dev/assets/vafryxt.96k_BqPR.jpeg",F=JSON.parse('{"title":"Plotting maps","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plottingmaps.md","filePath":"tutorials/plottingmaps.md","lastUpdated":null}'),p={name:"tutorials/plottingmaps.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`

Plotting maps

As test data we use the CMIP6 Scenarios.

julia
using Zarr, YAXArrays, Dates
 using DimensionalData
 using GLMakie, GeoMakie
 using GLMakie.GeometryBasics
@@ -9,9 +9,9 @@ import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework._h4tgM90.js";const n
 Variables:
 height
 tas
-lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  (lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
 lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
-Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points
+Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
 
 Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)
julia
julia> c = g["tas"];

Subset, first time step

julia
julia> ct1_slice = c[Ti = Near(Date("2015-01-01"))];

use lookup to get axis values

julia
lon = lookup(ct1_slice, :lon)
 lat = lookup(ct1_slice, :lat)
@@ -20,19 +20,19 @@ import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework._h4tgM90.js";const n
 fig, ax, plt = heatmap(ct1_slice; colormap = :seaborn_icefire_gradient,
     axis = (; aspect=DataAspect()),
     figure = (; size = (1200,600), fontsize=24))
-fig

Wintri Projection

Some transformations

julia
δlon = (lon[2]-lon[1])/2
+fig

Wintri Projection

Some transformations

julia
δlon = (lon[2]-lon[1])/2
 nlon = lon .- 180 .+ δlon
 ndata = circshift(data, (192,1))

and add Coastlines with GeoMakie.coastlines(),

julia
fig = Figure(;size=(1200,600))
 ax = GeoAxis(fig[1,1])
 surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
 cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
 translate!(cl, 0, 0, 1000)
-fig

Moll projection

julia
fig = Figure(; size=(1200,600))
+fig

Moll projection

julia
fig = Figure(; size=(1200,600))
 ax = GeoAxis(fig[1,1]; dest = "+proj=moll")
 surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
 cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
 translate!(cl, 0, 0, 1000)
-fig

3D sphere plot

julia
using Bonito, WGLMakie
+fig

3D sphere plot

julia
using Bonito, WGLMakie
 Page(exportable=true, offline=true)
 
 WGLMakie.activate!()
@@ -47,4 +47,4 @@ import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework._h4tgM90.js";const n
     colormap = :seaborn_icefire_gradient)
 zoom!(ax.scene, cameracontrols(ax.scene), 0.5)
 rotate!(ax.scene, 2.5)
-fig
`,25),e=[p];function E(r,d,g,y,o,F){return a(),i("div",null,e)}const u=s(l,[["render",E]]);export{C as __pageData,u as default}; +fig
`,25)]))}const c=i(p,[["render",e]]);export{F as __pageData,c as default}; diff --git a/dev/assets/tutorials_plottingmaps.md.C_xuWMeL.lean.js b/dev/assets/tutorials_plottingmaps.md.C_xuWMeL.lean.js new file mode 100644 index 00000000..6d340652 --- /dev/null +++ b/dev/assets/tutorials_plottingmaps.md.C_xuWMeL.lean.js @@ -0,0 +1,50 @@ +import{_ as i,c as a,a2 as h,o as n}from"./chunks/framework.Bwkmg46C.js";const t="/YAXArrays.jl/dev/assets/hkbjqfv.xrZxBsPv.jpeg",k="/YAXArrays.jl/dev/assets/cgfvxvy.B7KFIfDV.jpeg",l="/YAXArrays.jl/dev/assets/vafryxt.96k_BqPR.jpeg",F=JSON.parse('{"title":"Plotting maps","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plottingmaps.md","filePath":"tutorials/plottingmaps.md","lastUpdated":null}'),p={name:"tutorials/plottingmaps.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`

Plotting maps

As test data we use the CMIP6 Scenarios.

julia
using Zarr, YAXArrays, Dates
+using DimensionalData
+using GLMakie, GeoMakie
+using GLMakie.GeometryBasics
+
+store ="gs://cmip6/CMIP6/ScenarioMIP/DKRZ/MPI-ESM1-2-HR/ssp585/r1i1p1f1/3hr/tas/gn/v20190710/"
"gs://cmip6/CMIP6/ScenarioMIP/DKRZ/MPI-ESM1-2-HR/ssp585/r1i1p1f1/3hr/tas/gn/v20190710/"
julia
julia> g = open_dataset(zopen(store, consolidated=true))
YAXArray Dataset
+Shared Axes:
+()
+Variables:
+height
+tas
+  (lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
+Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
+
+Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)
julia
julia> c = g["tas"];

Subset, first time step

julia
julia> ct1_slice = c[Ti = Near(Date("2015-01-01"))];

use lookup to get axis values

julia
lon = lookup(ct1_slice, :lon)
+lat = lookup(ct1_slice, :lat)
+data = ct1_slice.data[:,:];

Heatmap plot

julia
GLMakie.activate!()
+
+fig, ax, plt = heatmap(ct1_slice; colormap = :seaborn_icefire_gradient,
+    axis = (; aspect=DataAspect()),
+    figure = (; size = (1200,600), fontsize=24))
+fig

Wintri Projection

Some transformations

julia
δlon = (lon[2]-lon[1])/2
+nlon = lon .- 180 .+ δlon
+ndata = circshift(data, (192,1))

and add Coastlines with GeoMakie.coastlines(),

julia
fig = Figure(;size=(1200,600))
+ax = GeoAxis(fig[1,1])
+surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
+cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
+translate!(cl, 0, 0, 1000)
+fig

Moll projection

julia
fig = Figure(; size=(1200,600))
+ax = GeoAxis(fig[1,1]; dest = "+proj=moll")
+surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
+cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
+translate!(cl, 0, 0, 1000)
+fig

3D sphere plot

julia
using Bonito, WGLMakie
+Page(exportable=true, offline=true)
+
+WGLMakie.activate!()
+Makie.inline!(true) # Make sure to inline plots into Documenter output!
+
+ds = replace(ndata, missing =>NaN)
+sphere = uv_normal_mesh(Tesselation(Sphere(Point3f(0), 1), 128))
+
+fig = Figure(backgroundcolor=:grey25, size=(500,500))
+ax = LScene(fig[1,1], show_axis=false)
+mesh!(ax, sphere; color = ds'[end:-1:1,:], shading=false,
+    colormap = :seaborn_icefire_gradient)
+zoom!(ax.scene, cameracontrols(ax.scene), 0.5)
+rotate!(ax.scene, 2.5)
+fig
`,25)]))}const c=i(p,[["render",e]]);export{F as __pageData,c as default}; diff --git a/dev/assets/tutorials_plottingmaps.md._uyphNwM.lean.js b/dev/assets/tutorials_plottingmaps.md._uyphNwM.lean.js deleted file mode 100644 index a619c42e..00000000 --- a/dev/assets/tutorials_plottingmaps.md._uyphNwM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework._h4tgM90.js";const n="/YAXArrays.jl/dev/assets/gazrluv.xrZxBsPv.jpeg",t="/YAXArrays.jl/dev/assets/ngaxsqo.B7KFIfDV.jpeg",k="/YAXArrays.jl/dev/assets/pcibivl.96k_BqPR.jpeg",C=JSON.parse('{"title":"Plotting maps","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/plottingmaps.md","filePath":"tutorials/plottingmaps.md","lastUpdated":null}'),l={name:"tutorials/plottingmaps.md"},p=h("",25),e=[p];function E(r,d,g,y,o,F){return a(),i("div",null,e)}const u=s(l,[["render",E]]);export{C as __pageData,u as default}; diff --git a/dev/assets/ulsahek.w0JksFmk.png b/dev/assets/ulsahek.w0JksFmk.png new file mode 100644 index 0000000000000000000000000000000000000000..fc47ef3883f419e13148bdb099d0b62d0a60bf28 GIT binary patch literal 82072 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 literal 0 HcmV?d00001 diff --git a/dev/assets/pcibivl.96k_BqPR.jpeg b/dev/assets/vafryxt.96k_BqPR.jpeg similarity index 100% rename from dev/assets/pcibivl.96k_BqPR.jpeg rename to dev/assets/vafryxt.96k_BqPR.jpeg diff --git a/dev/assets/yrexdyf.Dk-HtvWS.png b/dev/assets/yrexdyf.Dk-HtvWS.png deleted file mode 100644 index b17b98a93f750b8bfc07c9f0e44aa7f605353bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116734 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

*i;gkinJIWBOaVF&}MnO_Q^;nN;qYxH!QEQ@KUM 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 diff --git a/dev/assets/mzrclpj.CBBZcGwj.png b/dev/assets/zbtetzz.CBBZcGwj.png similarity index 100% rename from dev/assets/mzrclpj.CBBZcGwj.png rename to dev/assets/zbtetzz.CBBZcGwj.png diff --git a/dev/development/contribute.html b/dev/development/contribute.html index a07e05df..6eeef24b 100644 --- a/dev/development/contribute.html +++ b/dev/development/contribute.html @@ -8,19 +8,19 @@ - + - - - + + + -

Skip to content

Contribute to YAXArrays.jl

Pull requests and bug reports are always welcome at the YAXArrays.jl GitHub repository.

Contribute to Documentation

Contributing with examples can be done by first creating a new file example here

new file

  • your_new_file.md at docs/src/UserGuide/

Once this is done you need to add a new entry here at the appropriate level.

add entry to docs

Your new entry should look like:

  • { text: 'Your title example', link: '/UserGuide/your_new_file.md' }

Build docs locally

If you want to take a look at the docs locally before doing a PR follow the next steps:

Install the dependencies in your system, locate yourself at the docs level folder, then do

sh
npm i

Then simply go to your docs env and activate it, i.e.

sh
docs> julia
+    
Skip to content

Contribute to YAXArrays.jl

Pull requests and bug reports are always welcome at the YAXArrays.jl GitHub repository.

Contribute to Documentation

Contributing with examples can be done by first creating a new file example here

new file

  • your_new_file.md at docs/src/UserGuide/

Once this is done you need to add a new entry here at the appropriate level.

add entry to docs

Your new entry should look like:

  • { text: 'Your title example', link: '/UserGuide/your_new_file.md' }

Build docs locally

If you want to take a look at the docs locally before doing a PR follow the next steps:

Install the dependencies in your system, locate yourself at the docs level folder, then do

sh
npm i

Then simply go to your docs env and activate it, i.e.

sh
docs> julia
 julia> ]
 pkg> activate .

Next, run the scripts. Generate files and build docs by running:

sh
include("make.jl")

Now go to your terminal in the same path docs> and run:

sh
npm run docs:dev

This should ouput http://localhost:5173/YAXArrays.jl/, copy/paste this into your browser and you are all set.

- + \ No newline at end of file diff --git a/dev/development/contributors.html b/dev/development/contributors.html index 8bfd01b0..eb1b667a 100644 --- a/dev/development/contributors.html +++ b/dev/development/contributors.html @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content

Contributors

Current core contributors

They have taking the lead for the ongoing organizational maintenance and technical direction of , and .

Fabian Gans

Fabian Gans

Geoscientific Programmer

Felix Cremer

Felix Cremer

PhD Candidate in Remote Sensing

Rafael Schouten

Rafael Schouten

Spatial/ecological modelling

Lazaro Alonso

Lazaro Alonso

Scientist. Data Visualization

Our valuable contributors

We appreciate all contributions from the Julia community so that this ecosystem can thrive.

- +
Skip to content

Contributors

Current core contributors

They have taking the lead for the ongoing organizational maintenance and technical direction of , and .

Fabian Gans

Fabian Gans

Geoscientific Programmer

Felix Cremer

Felix Cremer

PhD Candidate in Remote Sensing

Rafael Schouten

Rafael Schouten

Spatial/ecological modelling

Lazaro Alonso

Lazaro Alonso

Scientist. Data Visualization

Our valuable contributors

We appreciate all contributions from the Julia community so that this ecosystem can thrive.

+ \ No newline at end of file diff --git a/dev/get_started.html b/dev/get_started.html index 40a07e49..912172de 100644 --- a/dev/get_started.html +++ b/dev/get_started.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Getting Started

Installation

Install Julia v1.10 or above. YAXArrays.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

julia
pkg> add YAXArrays

Alternatively, you can also do

julia
import Pkg; Pkg.add("YAXArrays")

Quickstart

Create a simple array from random numbers given the size of each dimension or axis:

julia
using YAXArrays
+    
Skip to content

Getting Started

Installation

Install Julia v1.10 or above. YAXArrays.jl is available through the Julia package manager. You can enter it by pressing ] in the REPL and then typing

julia
pkg> add YAXArrays

Alternatively, you can also do

julia
import Pkg; Pkg.add("YAXArrays")

Quickstart

Create a simple array from random numbers given the size of each dimension or axis:

julia
using YAXArrays
 
 a = YAXArray(rand(2,3))
╭─────────────────────────╮
 │ 2×3 YAXArray{Float64,2} │
@@ -63,17 +63,17 @@
 ├─────────────────────────────────────────────────────────────────── file size ┤ 
   file size: 46.88 KB
 └──────────────────────────────────────────────────────────────────────────────┘

Get the temperature map at the first point in time:

julia
a2[variable=At("temperature"), time=1].data
10×15 view(::Array{Float64, 4}, 1, :, :, 1) with eltype Float64:
- 0.212529   0.687095  0.329389   0.322666  …  0.943401  0.0794068  0.124242
- 0.148317   0.255777  0.0451893  0.90528      0.932458  0.743448   0.50247
- 0.345306   0.817761  0.371764   0.77842      0.460725  0.346683   0.997411
- 0.11084    0.112418  0.595773   0.859691     0.85927   0.663178   0.979973
- 0.0714621  0.249736  0.759224   0.667162     0.259272  0.180714   0.550461
- 0.158962   0.709966  0.763967   0.343173  …  0.260239  0.410862   0.245069
- 0.287222   0.653128  0.0305119  0.354183     0.716081  0.965427   0.688638
- 0.821934   0.89118   0.885742   0.594211     0.768702  0.061001   0.953996
- 0.256631   0.996559  0.2551     0.763404     0.391745  0.835697   0.0833944
- 0.650262   0.579623  0.147435   0.494427     0.57022   0.344799   0.915389

Updates

TIP

The Julia Compiler is always improving. As such, we recommend using the latest stable version of Julia.

You may check the installed version with:

julia
pkg> st YAXArrays

INFO

With YAXArrays.jl 0.5 we switched the underlying data type to be a subtype of the DimensionalData.jl types. Therefore the indexing with named dimensions changed to the DimensionalData syntax. See the DimensionalData.jl docs.

- + 0.917506 0.818381 0.568985 0.864111 … 0.831293 0.430697 0.914342 + 0.170553 0.416222 0.222088 0.231967 0.680628 0.535731 0.617046 + 0.997315 0.307643 0.695412 0.233097 0.173082 0.895866 0.997734 + 0.140123 0.558322 0.753357 0.437726 0.654983 0.154468 0.676268 + 0.460593 0.342506 0.228113 0.197427 0.448462 0.00520612 0.292358 + 0.417004 0.720753 0.398057 0.740896 … 0.209609 0.75727 0.209998 + 0.65235 0.948571 0.27538 0.830771 0.0164863 0.76584 0.552837 + 0.174313 0.984091 0.466392 0.744666 0.302653 0.26802 0.596946 + 0.982001 0.361453 0.560824 0.70521 0.140938 0.883224 0.599861 + 0.526898 0.691289 0.804233 0.127126 0.266098 0.644498 0.685735

Updates

TIP

The Julia Compiler is always improving. As such, we recommend using the latest stable version of Julia.

You may check the installed version with:

julia
pkg> st YAXArrays

INFO

With YAXArrays.jl 0.5 we switched the underlying data type to be a subtype of the DimensionalData.jl types. Therefore the indexing with named dimensions changed to the DimensionalData syntax. See the DimensionalData.jl docs.

+ \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index 7746a0e6..5afb1188 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"DU-CSbKR","development_contribute.md":"BjKHzE54","development_contributors.md":"Ce2z0IUh","get_started.md":"EFW7umcj","index.md":"D-zmVfSn","tutorials_mean_seasonal_cycle.md":"BCu3jBkO","tutorials_other_tutorials.md":"DofrLRlZ","tutorials_plottingmaps.md":"_uyphNwM","userguide_cache.md":"aYjxevW4","userguide_chunk.md":"DZgkcenL","userguide_combine.md":"CgXxcV_r","userguide_compute.md":"CLq4k1Y9","userguide_convert.md":"CSe_wnNP","userguide_create.md":"JoOy7H4V","userguide_faq.md":"CfSW0c59","userguide_group.md":"C3qv_f3u","userguide_read.md":"i_gnCx2-","userguide_select.md":"BWVJxXiv","userguide_types.md":"B2iGHzIZ","userguide_write.md":"C3OHkkA6"} +{"api.md":"DSVzzvyi","development_contribute.md":"CPZprWRQ","development_contributors.md":"BTH2E-fs","get_started.md":"2M_EpbbP","index.md":"DU-mPNT1","tutorials_mean_seasonal_cycle.md":"DnEN9eOf","tutorials_other_tutorials.md":"DMk6XJBb","tutorials_plottingmaps.md":"C_xuWMeL","userguide_cache.md":"BxJ3IRnF","userguide_chunk.md":"DQmK3Tmu","userguide_combine.md":"Bs3BBbp0","userguide_compute.md":"BPtHMXa2","userguide_convert.md":"D6pPrrfh","userguide_create.md":"D-fbNPyl","userguide_faq.md":"BZaTxhVy","userguide_group.md":"De_4u3Mq","userguide_read.md":"BCQMfZ77","userguide_select.md":"MJRJAz_y","userguide_types.md":"DAaXu8Uc","userguide_write.md":"BtDfDOfT"} diff --git a/dev/index.html b/dev/index.html index 86e19d9c..386bb400 100644 --- a/dev/index.html +++ b/dev/index.html @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content

YAXArrays.jl

Yet another xarray-like Julia package

A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.

VitePress
- +
Skip to content

YAXArrays.jl

Yet another xarray-like Julia package

A package for operating on out-of-core labeled arrays, based on stores like NetCDF, Zarr or GDAL.

VitePress
+ \ No newline at end of file diff --git a/dev/tutorials/mean_seasonal_cycle.html b/dev/tutorials/mean_seasonal_cycle.html index 08255d83..0c1fe005 100644 --- a/dev/tutorials/mean_seasonal_cycle.html +++ b/dev/tutorials/mean_seasonal_cycle.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Mean Seasonal Cycle for a single pixel

julia
using CairoMakie
+    
Skip to content

Mean Seasonal Cycle for a single pixel

julia
using CairoMakie
 CairoMakie.activate!()
 using Dates
 using Statistics

We define the data span. For simplicity, three non-leap years were selected.

julia
t =  Date("2021-01-01"):Day(1):Date("2023-12-31")
@@ -28,9 +28,9 @@
     )
 ax.xticklabelrotation = π / 4
 ax.xticklabelalign = (:right, :center)
-fig

Define the cube

julia
julia> using YAXArrays, DimensionalData
+fig

Define the cube

julia
julia> using YAXArrays, DimensionalData
 
-julia> axes = (Dim{:Time}(t),)
Time Date("2021-01-01"):Dates.Day(1):Date("2023-12-31")
julia
julia> c = YAXArray(axes, var)
╭──────────────────────────────────╮
+julia> axes = (Dim{:Time}(t),)
(Time Date("2021-01-01"):Dates.Day(1):Date("2023-12-31"))
julia
julia> c = YAXArray(axes, var)
╭──────────────────────────────────╮
 1095-element YAXArray{Float64,1}
 ├──────────────────────────────────┴───────────────────────────────────── dims ┐
 Time Sampled{Date} Date("2021-01-01"):Dates.Day(1):Date("2023-12-31") ForwardOrdered Regular Points
@@ -56,26 +56,26 @@
 end
 
 msc = mean_seasonal_cycle(c);
365×1 Matrix{Float64}:
- -0.13291526713087612
- -0.05460756353473867
-  0.07204935956348457
- -0.05326101988982565
-  0.15868041606243408
-  0.11439100033904083
-  0.13930646027762436
-  0.08757811935252037
-  0.05341039407809093
-  0.18867824088012022
+ -0.02831455834460911
+  0.04453476627315919
+  0.035686570524083555
+  0.11722933412557059
+  0.036946732134505465
+  0.19277839017642331
+  0.07495148408717336
+  0.023101933734291022
+  0.2784376308132314
+  0.17321929531017177
 
- -0.17597786204903687
- -0.0803349435034534
- -0.11344554908666375
- -0.005146734261364652
- -0.054866954001569136
- -0.07512042630397335
- -0.06048141295750401
-  0.048565067687498124
-  0.04428068807380173

TODO: Apply the new groupby funtion from DD

Plot results: mean seasonal cycle

julia
fig, ax, obj = lines(1:365, var[1:365]; label="2021", color=:black,
+ -0.14858712445280844
+ -0.1058503173631838
+ -0.11471619358216052
+ -0.09915529827483704
+ -0.1388557751513135
+ -0.000924951522542868
+ -0.034309078782668714
+  0.03329805652756149
+ -0.050857935248364274

TODO: Apply the new groupby funtion from DD

Plot results: mean seasonal cycle

julia
fig, ax, obj = lines(1:365, var[1:365]; label="2021", color=:black,
     linewidth=2.0, linestyle=:dot,
     axis = (;  xlabel="Day of Year", ylabel="Variable"),
     figure=(; size = (600,400))
@@ -88,8 +88,8 @@
 ax.xticklabelrotation = π / 4
 ax.xticklabelalign = (:right, :center)
 fig
-current_figure()

- +current_figure()

+ \ No newline at end of file diff --git a/dev/tutorials/other_tutorials.html b/dev/tutorials/other_tutorials.html index 710182f0..aa0f0719 100644 --- a/dev/tutorials/other_tutorials.html +++ b/dev/tutorials/other_tutorials.html @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content

Other tutorials

If you are interested in learning how to work with YAXArrays for different use cases you can follow along one of the following tutorials.

  • Currently the overview tutorial is located at ESDLTutorials Repository

  • You can find further tutorial videos at the EO College. Beware that the syntax in the video tutorials might be slightly changed.

  • the other tutorials are still work in progress.

General overview of the functionality of YAXArrays

This tutorial provides a broad overview about the features of YAXArrays.

Table-style iteration over YAXArrays

Work in progress

Sometimes you want to combine the data that is represented in the data cube with other datasets, which are best described as a data frame. In this tutorial you will learn how to use the Tables.jl interface to iterate over the data in the YAXArray.

Combining multiple tiff files into a zarr based datacube

- +
Skip to content

Other tutorials

If you are interested in learning how to work with YAXArrays for different use cases you can follow along one of the following tutorials.

  • Currently the overview tutorial is located at ESDLTutorials Repository

  • You can find further tutorial videos at the EO College. Beware that the syntax in the video tutorials might be slightly changed.

  • the other tutorials are still work in progress.

General overview of the functionality of YAXArrays

This tutorial provides a broad overview about the features of YAXArrays.

Table-style iteration over YAXArrays

Work in progress

Sometimes you want to combine the data that is represented in the data cube with other datasets, which are best described as a data frame. In this tutorial you will learn how to use the Tables.jl interface to iterate over the data in the YAXArray.

Combining multiple tiff files into a zarr based datacube

+ \ No newline at end of file diff --git a/dev/tutorials/plottingmaps.html b/dev/tutorials/plottingmaps.html index 52ce97d3..34ddf172 100644 --- a/dev/tutorials/plottingmaps.html +++ b/dev/tutorials/plottingmaps.html @@ -8,16 +8,16 @@ - + - - - + + + -
Skip to content

Plotting maps

As test data we use the CMIP6 Scenarios.

julia
using Zarr, YAXArrays, Dates
+    
Skip to content

Plotting maps

As test data we use the CMIP6 Scenarios.

julia
using Zarr, YAXArrays, Dates
 using DimensionalData
 using GLMakie, GeoMakie
 using GLMakie.GeometryBasics
@@ -28,9 +28,9 @@
 Variables:
 height
 tas
-lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
+  (lon Sampled{Float64} 0.0:0.9375:359.0625 ForwardOrdered Regular Points,
 lat Sampled{Float64} [-89.28422753251364, -88.35700351866494, …, 88.35700351866494, 89.28422753251364] ForwardOrdered Irregular Points,
-Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points
+Ti  Sampled{DateTime} [2015-01-01T03:00:00, …, 2101-01-01T00:00:00] ForwardOrdered Irregular Points)
 
 Properties: Dict{String, Any}("initialization_index" => 1, "realm" => "atmos", "variable_id" => "tas", "external_variables" => "areacella", "branch_time_in_child" => 60265.0, "data_specs_version" => "01.00.30", "history" => "2019-07-21T06:26:13Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.", "forcing_index" => 1, "parent_variant_label" => "r1i1p1f1", "table_id" => "3hr"…)
julia
julia> c = g["tas"];

Subset, first time step

julia
julia> ct1_slice = c[Ti = Near(Date("2015-01-01"))];

use lookup to get axis values

julia
lon = lookup(ct1_slice, :lon)
 lat = lookup(ct1_slice, :lat)
@@ -39,19 +39,19 @@
 fig, ax, plt = heatmap(ct1_slice; colormap = :seaborn_icefire_gradient,
     axis = (; aspect=DataAspect()),
     figure = (; size = (1200,600), fontsize=24))
-fig

Wintri Projection

Some transformations

julia
δlon = (lon[2]-lon[1])/2
+fig

Wintri Projection

Some transformations

julia
δlon = (lon[2]-lon[1])/2
 nlon = lon .- 180 .+ δlon
 ndata = circshift(data, (192,1))

and add Coastlines with GeoMakie.coastlines(),

julia
fig = Figure(;size=(1200,600))
 ax = GeoAxis(fig[1,1])
 surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
 cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
 translate!(cl, 0, 0, 1000)
-fig

Moll projection

julia
fig = Figure(; size=(1200,600))
+fig

Moll projection

julia
fig = Figure(; size=(1200,600))
 ax = GeoAxis(fig[1,1]; dest = "+proj=moll")
 surface!(ax, nlon, lat, ndata; colormap = :seaborn_icefire_gradient, shading=false)
 cl=lines!(ax, GeoMakie.coastlines(), color = :white, linewidth=0.85)
 translate!(cl, 0, 0, 1000)
-fig

3D sphere plot

julia
using Bonito, WGLMakie
+fig

3D sphere plot

julia
using Bonito, WGLMakie
 Page(exportable=true, offline=true)
 
 WGLMakie.activate!()
@@ -67,7 +67,7 @@
 zoom!(ax.scene, cameracontrols(ax.scene), 0.5)
 rotate!(ax.scene, 2.5)
 fig
- + \ No newline at end of file

wH&c0xFToUAQHu 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 qP+$Ka5OAkpBZZBpA*B literal 0 HcmV?d00001 diff --git a/dev/assets/qrtcgza.B1F72mIS.png b/dev/assets/qrtcgza.B1F72mIS.png deleted file mode 100644 index 9cfd29819e0ebac84faf20b32f9cb432c254c26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82626 zcmd?Rg;!Kx*gZ}dBNBt;&_fFdICSGs(hUOALn9&Gs3RTH4Fb|7ARrymjf6A;iZmkK z-^1s9-+$uwySkQlvGm?^&w0*s_OthX3{_K+!^5G#!N9=4lYcI)fq`-7GX@4W9Rv&f zr0FfLHu&S7nWCID#?9@okIe;f7#MUI^3u<=Jkz%qJkqJUQUv}M6g0BfM}23z{}v5p z&zAgv!Jt${AQ%xzaDP}3I(YW^Y0Ec%YQeTs{DOBpSi0mSa`L-F`(mIXMneI~yD4#)UY)C)}LOAK9R=|Bo+6 zKgt+Ga^pq7#d)tJ>R71SpyE}=wjBsYa;`pW1Wg!GOu;aNeC(-~DEZRgE4+Ot-*%FR zmSw4Y@?;PUhQL55on!6w$&`sMH=#Toh||DFwP#joSyvs^(ynv+bH(}Ep{g?X7%DF3 z*rk8j{RN@Sio*)K+na_Gm6r~+Hml+S%V`SY#P8_h}3ty!vc9hSCb~xD$9uA^tn@AcT=Aej8n)Yc5DtT<*mA!eIlY|jiq(m99MXALsB}mMavrD}Y`n==E z&yqAbz^C% z^)$7M_IfCo7mm(!NFRCZmJKQOWD+!m9g!~>ZKIR}%ZFb+Y+pf$Ft=g#ToqyF=cn6vSOli#_>-Ee;G0tLb-gUoXdBhAunp-@^AjZF)qtZZhY@UV<34X8U#k)xyg3GZ)ovWcvZ<}$#`!OOiCd&?fW)aZ%?{NE25p>sR zdDrvdc481C{`XO*%AADmyeuDDUk*Yo7a8A%zQ^z~kDFdP9_6Rku+S!h{+o4lRRRlF zjMs9SKqgY_{<%kAAv}0xdo4u90s{v|n(*dz5?F+8-0YbgM2dj3jt35g%8Ms#->k4G z4X6yv;zK<9u`pzZY{mE&s%$GIab3V1(B960PKhSU@)_<4!;VFeM2%7fF;gzaYCD@q z`@umsDGSZBN!B*Z;`RhE>AzXCC&*{3&jlDFMdS{qwoG*+vi7=-uB!Jm_u(N9TGIMs|$u-YPuHz0Lt1 zw7$lcSDn?*pOT*>I_wlMKT6Vp=(XYt=C1B9tPWIriHuw#JWF%k+jj8zI<$;WioxV~ zwX;QQwEuTiSIog>IJ~a;>u&Cr(baHCcY$mSoLKW}+6&7hqIC9SIf_@9oau?5{zslR z{7o$6lRUq={l*ji`HMQon^%{dM&Lhp+8VzLoL}ssO%98IZlh&pBQH&(|Gf_ z(b3rWlf>)Y8xh@;3Dz~Jz6FH##b3$KBGc!gQv{dm*bEnx82v9S=R!TBa81v@pxCBK zP|D-l80$o0P&vYVe~`(J+#o_aD*ezZwtlwYYfpjr60XuMRC zs$)R`{U?&MD^|(Fg|W&gMGlKlbC)d4`+~PL_p|8eaA!-gHQIFU!Eqa-lyz+(t^sM5 znluhKGQUnmdEAvjP?V>Fsm8=ZnC_7F$RLA9MfV}bF%*idHxYPZ9yM&6%oE2w!Ahu7 zNK$-iU&taYoxKZk z)zS(2K!zqLVEzEo3*opyLAg;pnwfMRH>A?+Bf|%w`(O{m;lYrs4~wL|r(d7Yy6;_o zbD(dqxOuY6c2aBXxLRY?Bv)vYnmFN#X}Y(&D9xxYlvib|Pl9(JEls?QQgQg#$ZGbfqr~-G z)Dvo#MS(vJy5-?_%`R)nw(jQxdE_cEX*3bR)*+~cUmXt;AE9Ds z(j+JLZ;AS;%?-s9m{laC(=)Yp(fHw zf1nfsp_PMBcQbsrB<3?oh(-Gsl-7~O6ROk*7B3z6D514r(HjX8>ahGe>2T&y*7>vt z5FQxv{+x=*DN&$&bb|FKCO-MZ2o}^DH0l$Im)#q;N37WD+lhem)fm&wS7}^G-L;t= zeQfeUi%>5VD*2I+H@eXS9-H~ zE^vK-$HI~}0_Tm7*u3Z5bhNm+F)7_CP{e`)c^?CT7P>sHYh9>!`P1ZeAiF<1=g_zl zEO80HaUMu~(t2~Xx7T`eEpfdc?Xou5x5S5Z$Y;uJXp%-`4&p$FW-#G|`>|u`Fl5Oq z7O;cpa<&iOZpTEj{Kd@{{DXwXfzlTQC1bQVMuCFE$x*Og}w7&UvTamAgK?tT?%ag*2LvHPVvp zh5p0OOTMa}b;rt3!3e4&17R;w{jDJJJ7bbGzJhG^rs6l}#T;d<4rzDEkXI}pw=37o zaW|DLx?NY8-({zl51mu^+P+tqc_(uDKY2$%R{4`gk(kf%yvLHCRl0L`41=8PKE9!$ zp~s>Z3*i%^CeQJF<&#C9y|TK+^X=-9Mdu!B=`XM5YJ+M01xLv6Y9pGPdrhPTUKg>$ zNCr$iogaoDc4jM&>nBZr@S4R0X(wXi4&!h@=Tc2`_)V`*VLcCetP~e6Awe^BA6@!} zK?>5AhmEv)$dMAYL0*@^Z3!XCLe7Z1|L4xONDtELo1^>gH>Ls=qnLsF?{KphTl_9m z#EvFj4EkoHf@!>d#i+4@awkqzT+h&ODEelu^=j@RSJU5aO2^A}If;hfi3Z)il|SP_ zc37M(Wh{Gvpdje#%9HjA`jGK~?+c9o0VG#Sef1eq47ZIt4R^VGY1ey&K{Z4!w(`@8 zc5gdXM=7o;>u^#ivX50#rSwd2F!5k6g} z`u%-F5G&ooPt*A8e$pw0-yMuq49x6IMtLxis}k<6t`TOiWUEZCpb(u3qh^zKtOZS7 zL$^sv$EHfhrIu!&lT6p|^5#wYPQ9+`uryrwgE(yY7jz;dsy2_6o4)PSSm{Xil0EMf zM`KvpBhcN&)c`aqIlzTQSq(t+6)YG^*+|tj4r8t0B2$uwUtX=$HGysp4h#d zEFBFBAQ1H!aIp^$mloWQ>5)LhNfJFfZ7xc=wMI`1FLV&^Z;gWB#cXZ);HbSOtw1qlon&7~RZLz0qGw=C|7+ zARNgOmWOyYqc>lZfvr3W1A}rz>|O6J&<>w2k7xO(D)FG<2SVtTg(=s$&_VZ>BBfs& zhg_I}ghR`(_)D z|GcixSIO|+o~}GTcE32Wv9lXEYqVbz?l!CR6r~C8>K3G};+2*P;WJC}XMl+f{ z*!L&em+MtxgofTjA5}?h1T1^c$xBo7k6Bl z`iq@@?RfEbPfU-0MmCT2^V<=C93o|zhAO0<6jhKGEK zC;b2pp_$Kjo<5td9# zi>@#dp#U-hab+%ZCns)l+!c|xA>NHXZgTYRVn!vOi$0>l36qL#_dmFKwj(zy^{%6q zsGaN7^O8AM5Neg{ZCYNY#ZXUDdO;IA<%hcE)REnI9u5Fws#i?@g@N`=GsGm2L z@v?^>KeDGPNTep-{q*RYP=E|KDK5+R$irR`87;N&c_JEbuI4D~k0PHp1kzHI_OCB>WWjjx6u({f6=xw0jO;aLXv%YR?#xD)iT#fa%jCzT!6r#0~@=kYNYhfT`< z1d7#0^tp5u<86$%y%4&r!V5(W**QW%ShDK?dQ()Bf}&%f?ob`4LfmHI!sN)KNX^!H#Dai|kX zP#`%HORC^1ejc_myxB(Oy)!ys?3)sDz3h0S=Al8Yp8vq5S>zDALUtEN!12dT<4Svdu??ywC_}>A7!4{`lc>|T1Bd>l~IQD{r02Y#*?+*H`hv=QoKwOpDhu;rg+0TCI zThr4S9{c{?%neBgRnx91E-uc_Zoei=$gB;XJ102&FHP1U9F~1RyHQHH2G!1 zWPDhga$D(w+84<$;1bHK&1*JMLk`2-X zc#fywuDTfi1yrG`lX=Qq9d-)=uIYpeX`h*gt3uTgiNtl4r29Lj)4YtU^uhdOKP3{+ z!fN&OVhocf$*?5*eh&1Jr%723skVs!Ep)J|lCvy{m^Hy0N2$ZCC>gQZSn22nTfGj} zD(}lh)9{H?;s;-xpLdSa?M;^xnB9E8l#R{6A{NLm*w&Vn34Jb1r{#UBJvv zrz9KKXRUGEyZv!ReOmD|0X)9`cxWfu@RS^ucru}p`Zba3n@CjOi>XBJ98hj$^rj|% zyZb2AdVP9y>SnP&U?Mg(-=_OL?@GI1BNDI({}7nj+0-zPdFq87rG3_V?2cUjN42i~ zFKPH6-X#}+Kn^NeTKqRBiZU`X_L>f&_GbVnsk~p1{<^=@NEc>W`4UB^Nw|rsw_T_u z(lMZMv)?dL)#latd@;rD(Xvvsk4r;CtQw9l!!Am~0o88W2!xhcN~I`v$HrWjYP_0a z&ABdghL0*qlGhDF|2fmvhDRLWn%=y*7T62W6wP7cm7lzij%h!f{5K?nsSum^9pUBk z4QgxIW7uLkcxnNO)<;2{vB5~EgPmT!bZWmVeVEjG*>yURb#rM&uc3X^bTFK@KEOt~ zfxE1hAHIP?sV{AOA;0q7P5d+6Yb~ScUA3Mc%zw)_8O}9!j=yLC^weR#oDo3e7Q@Nf zCacyCS zON(%>C$SNZLl=VX3ny%6W^#OSYFENcT=hQ2Yow$gXL-xHE&Xhr6Xp}q_cn9!Sls5qQKBK7C!T;%!^8E)l@oH<* ziJkiGCu{y%KOPxp6909m8Q+LOf3W5ecjSB4yG6QUn&*IJ)H30rP zOu1C-upz=)`A?@DEDGeUOr2bJK&Z}w@@09^Y3|#rraR2lg%Mqb+8$OD&WK=ceqvC) zGO)ochKM{~1gd|d>Zsh@*x1{p%(Y`Y=3)qAc@P-!NLD% zQWyIT2H^t0+P9eelcBSX{1OkZg7l+peg@8a-~NyZ>1A-h>YgaZ9m;%aLQNd%er8fS z%Ry|o;GR?$N}MM-UNXUyIj^Tz>i>)kdBtGJ3{9KQopiLg(HdHbYG%O)wGsUY^nRe> ze4!`F%oBs=grTO#$1fCZV@tD85H*TUIyL);z7(&{i? zIHg+|t<1)gn3kj%67^vYNL=bmM?vDoJ`LSrRE?CY<7g>I#jCSxCl;Mz?Zw3a|!RP*I#PsQSCZlv^tlNmPP61=);3{Hj}#(CsY;SqPukCl_r+O|qF zRuK8z7j$byM^MSfRsGOS2j7(URvh1*^F3r$_E{e@o$O4ze(23d5d-4)DFB+^*ejaM z0y>U&=E^c{U%h%|XXo=L!^3@hnh-zOY9!NdxBic}=(_4JqPWtSQK5HLdlX6Kz%m9C(+URHjI+YrN#_l98@5py_(sri0yBX%bOm2a0c5 zyzqWW=T$L&eyivz><+?&h}o>wvXjlIWYX@h#JU5qqzljV5@seCbd=dvV94#)_kOp1 zo%z^n_A^r-IH%DJ&`1uvP96eL1<14 z^1VmX=vE0{{Ils_FbIiW7r9ug;$1Ay+rpC)yj>?r0>Mi%_rsCqfux1`w+^Sg$ zgZ;;x+O*IHEiy{(*NEWJH3UYOI(@q5?_u4LUd@aYT02dIg7m)Hd_MeQa~w0fvA?V_ z?jLS;-SAdfjS}PR^DfQqr_|!#!*Jnkg>WfI*ApV>ampQZs8dJ4plVQgX5Fx&H0Pv+ z{#SbD6Tuqf@7%NmO}2t3S@}A}wt3gTFO9n5D7VQfD>W9@ju&@uBT!zvC75?|8U1Jkl;x)Ah5MybNEn5;I8gpR%0`o%u6p zDM3$%rgyt6Tit4H@W0aiv9&1?%DNfd0uH~5g^O9A0H0`D;<>lZp1cXqVfO`KT?K!I z4$RQt0l6VoQGcVK-`K7`1F_hRj|nHPlh!gu6o1>LZK%KRGLq%96aK^htT(BkBE4K> z$zYE!gQ!BMuqmnUB8kQ5bxD)E9HR;9cMN2xLkKUKjmUOnNou84^+YxcNq8 z@6XT>&H(h$*rL@*)qS(RLPkYR)wF(^5|Yi0EFr_X)`wYNtwBCLh=f40pVv4#SgB_{ zrTcZF<}53PNSr?y%mi7t4)FQ+qH!sfoc_d#CQ_ z;Qh|kY%uL61w`V62F2E|jRtQJ034X%n!2+cgotG*Q+hwDUM8FgVJqoNnm4<=pmE7Grz zxfU%Ys=_b~`(S&uyJzE>@3?4P`^vR%8Wds~DL7$e_A0HEAj@iqx>-^k{nWhQ#W!;O z3iIRtc>!YgQGl@*`LV;8V>6HsTl!mXkjZl;qlcMo$_l9d;+C;ecJl@*3<8T=#fuLG z$^Hr>OE8_+c5pW^lL~5RghXRURukGi@*WK9z>wj2 z9AGCPmQe{_T?}{7-y*dlPEtwvH~ODh)D4nV{`4K%U^w7P4d~Y{@U;ETAXrM!ANK** zadM2u)2u*K$HJT~ zc3HsikT09jZEtY0#oFXCqf!xn!`o>*#Ew3GF+)k z^Rma}1cHV1sF`D?qq?B#@Z;JRIsBL1EBPx-uKcID)TPFM(+tqaJU}B=29|Y9Y&Lcsix#LkL4u}~;eZk0izSk>w4r&7t)sKd8D zoXIt|Qv*xBXMb;~*X~ERx?N`6cm;FkpSU6D)nuJ2B&gsA|- zLz>VRA3^cRgT?Rfr$w>mOF75pq%x=Va#w-$>5rZyHOR6|^(QTiAhXj{PYl7o^h3k! zYPy2Vz~1b1-C2L_U$vs`8s2}a5uFk{+gmKAdMS$6d}=N;^d+iMSQ`8F*e@~uGaKyp zi;`cB-`T~x47R9+`B5(eXg{(>@JgL78oMZ+)X?8UbI#>+6F_W*zN)Z#tg$83c{rKPs^vXl4R;bSEhx9;_t^VZhCyok zZ1%YntLGOOGVPZ5@GSbLISbxpAuiw_Y53ycp)yI*Y=>jjYiT1m9e#l?5Qwh4UnKpX z*n2D7UgXq*8Od>jz_BC zSPY@nF})Oo+jiO=D=cthiV#H!ZJ0O|<^&Y6!Oi4RLqm;HAFC=!1EN{!sniRBf^vU< zzpG2{TI*~QW507I0BsWUga)DbH2gC+WFI~E8PlZn=2XZ#_@_d^TAK%{QH3mTE6QdJ z!j-Hbm4&#(ENMb$d>*twvtL}?xF{cueBw0!lZ{yQH-hdwug<9 zFD+#qkYN%NvQ)=1CNb7Cy61z>o+J-@D#e;lt%Ti?$n->4!kLe7NYsv5FDc@j!q2|r zb01ZQJ{LTgKxV)J-_$*5)Zh;vzAs>Lj=tEw4lJA5iZv{f4tv7JAkNOO?UCR!`_JYU zH+9c9{)$CaC`peesv5W+<*2Eyj}8O_AjkTM2c4QveR=SV-c~R>+rcO!F8n^L71-vG z&yHT^L8JLo@9(4YBQBs}Huu4CTz}W+l1aw}l2MA7t!o|W+rwfd?S4j;3m|SuzD{Mr zZ{aLRHN~mopcj{R#A}c!d;%q z0+ybiz|ymAm&Ml{ibX8W0z(317TF~)nVbN3mFIm)JKVzb+T8#obNv*2h~1xwT1SV1 zWe)Vy+idZS<1TJj&oUJKRi6Fw z0UnPW6E<9e-pPW@v|q8BtImIQ2jeGD#tF$S`U+(WE#Y&Yluni&u%QO5G@&gzGyVO#GXD9~;zv&kB`Aon*bjE|FTwV!R{knhy&O)|jrBD?9|{2*@X z4imH%nDC0|t|}X~rq}n-lRU*+Ym@ubf^s0~39x6H^X@2bF12$9JDuST%$V08BhPa= zh*2V}Y({xi^%{dv;j=~zoUm^~=qfq>Ct>p7V8{D2Uy;#x*pRp6cqV=^_NDz_?AVl@ zL0LH%WokaFG66+sog&cUBf#0iij_OF4sZ;G-NJvNqZ| zpxAa|RjR2L<`lhM8vI=Oh?vVfZSw4tht^SV_Fto2K#xDME{xhH=!2M(hH=@}%P=lN z><)8B8ireFS+7OLVQ-Y2(+98p15v$VVYQr9VzRlL1yB?PJ(o<@$f-$ zxtB8U+GfRgo&g?qi!dJ;YK~+E7xGK1Q_p10uSB9E5<_4g!%A( zNDmO(uklsZp!lut^s@nj^AZwM_NeJZ)#v2ehD)TQmeWH2Qoz;KyGNbwnzz z`+cc}?8I?{*VjgYeI55nU54SVvGBoo+k?4uRK2sc3dmCptd&*u-`VKENnk9NJFB_c zHwf>{L15qmqZ6{n(FBY-s*L)=cv{tdgXf#FLno|bI}K(m?lVEPD`j1Lu%mL_V+L$W zMk+k$+(maYEm%ibe%NGP1#^yOg?PfNwC>8N3hVwN&FOc5#z0^$|6QuNF4U&t?oO=s8K|FTJ9*pgU@->k)eJdY#1q{-s4XDXb8a$m76v{}WAA8vf4*bCv0+*R z?8$AQx?bMPPvdE0x%Y+Rm8l4Ch-}kNr!`r04+q7*c;c%K#}QBIN>lW{(eOU87ykPl^Emm&@KSN( zG=G)F|7T}~%}jCWtSWP0bpodz!`q?wkE8n`&vg;~TarpAQM4P~hYbBc|BF>kLy?Bp zAR|a@Iy%~c-*u@51l$|4alpiwgUB6#&W_$i@7fAvJ)i&bIh6KC?1r%WVv6|jRAuF* zQJ^!Z4&Ci{ruR>yu(t?83~2jy2ibCM-}k2_Xa{`=qOAC)EvZ~zGQa3uQOD^=Tesx? z_D17r+(y|6=T|e#o2S%Jd=K)shV2MDR*T( zq6MWj93YwO?i6n0 zQ#>Gj#4_%mc%>2RHc_V4%{eZ6o*Ob{zIta=<4=9ORvH9B7Q0n6XfDv_gbtgtD zDzc0#bcz{3l}q=8CwSBzE7oPe@x`v);Xb3hj^v9h5@^*W_6XFhf`=95JO4pqeQ|7v zMmo3(3wgb)+k`Vx_lE;Uy@#94C~wx=!^y$p`Kh6^;;vyI>$^Z`8x63kAz6+e$L%xj zokixL;`c1=IQ;s2`U-!=PM3NlHvZgmY$&W-(d;yx&2^;u9bKja8{&`(i^MVQsMJZ} zSsbW;BeK=~q}gHP`&MEV1H%goEqd`K8)?e%IW_jlxu}Jy%9>RxtE&hq6y%HwS!*gL zY5Ls)5*$VF{-R?$#3E?a3ix!R1J#D5J@Q$;aM;)^&2wIB&^k5j7!b%QN3sO_94C`9pK3?;-~w&FJ&%{OqV8;P? z{pWS}h*Zai;L_KaI4J+R5k z9CbGW)!YeVR@9ZYOzp8cKqLb4O-b;$k~i|i+x=+!WnEmz)O>w6*nYiUL261fzwOjv z`8o9~VOfURBB17-VK|U~w-GzW3Sthc0T(`}^p?=^DTu@p-0W%lgG9KNA%G*VR6e|n zZJed1j-Uv5e49S0*PzI3B1heoWZD5Jo6&og`ytQw@pPkL3bGb;FZuYI7n=IS(Px~n zyyY~~Mo~ai80;PKoh!*{Xww2mv(k5_TuYMdrbH1!dBK-j%v;aPWh@Xdq$wk7Gz>{; z7R%jSsKikXhwIZ5b1cxKbdKTx)AqIBT3AXjvm`>ez2uE6Q*P86G^dcVjTAg^z0-m8 zCM;mPqo<+PP5oFoJVbPohLpA6;ff9TDhc+UQ54`uDS`s@0fg&(SBA{*gr454k0_%O z1p(eV=FA}~r1+z(5JoBoC9eMF!ok1JPo)HNA~)oQ4F2G`e$w?Z3rPK1IHDc zqQg~xu7(q7BG@b;Lgx2YL7{9fSh?KX+H7^sTwj+VX@td0b@3v#+sF5{BfW4c?lQ2= zyzl!)6bC0JqnI3mGXnhAcKQ|WW0Jrbw@|g6$Q5w<8n~+xYnyJ3=%;r$*jDd28s8qt zjw~E(*d_#k02N-XB}&cTS1EWZ)l0LE)d4E)t5GhA!yh6y{r>66vFgtFaI18wub17w z`IieP*>Z&h*zS-^fRZscMXGSEAKDL`;fwwM0I?i)O6hh1eWU?ZYdeG?w_?@l_1&+k z4x<6jF0`{+plmGE?5?x(^`!^DVW0IB6_N~a;pV`-i<991K)wQ+NK{FKU90kWL{ej~ zEzs6z4&D+i;u-!ud3Z}9p|g8LUnj%0nsD@V{Xk0q&W8mmaV~5Mh2mk-+-jNmvnR z{HpuNA}KyZ;K@||uhsCB7@0cJ?u^n`rS&e#g#ub4B6jN&w*v?pa(@NfpEw_e*m8Z< zQ&6s+86=@f!J?(^Pz!?6?`!$t{TydKOp4de4+xKrj_zV%1_yLKhw-2rgwU&pKA7FT z;!2;uE~Nh88a~82Ha)O zL2_Q<-`@(z2`C)%!gS@WAFQU})@B4^p{fZ?b%MAv>FHH#ScHlBy3r)cB;84M>5H#} z-GhfJ_%oygpLPnNgRi~UJ#J1Log9;Cfj{)FVjV#?r|=^(bE0Ttr;)oQj>fMduvysY zCafS&Kr6u!+Nkk_ZyQwn^ni}QF$AUUQ$NWhgS6XoH>%&@0Tb4(hOy$PEVUm?L9DTI-Qw zV#$L$pM!Bh0LR6Sndk(K0t4K_CoFetJEIBT8C6coy@$00T(E@a$Lk)wP*Z$3F`YPW zOau#w(3ZGa`mI0(@QZsqsWxvK3gS|ns^ivP#}$Gv1DJpDu%zhsb;AY%1yN%7C-2=x za(W)z9q^|`I@3+ADdW_kwD{_SY5WdYebj_%5Yw<*@O5hg&mK@m*wz$A=mmX-7AEK! z;P*S|y_V-sva0WA1$kE0G^?l|gO&b*4?AQZ9lYG=E>wA!i}xU#G>|L2uF4kD&NPIyGP zUCBw8UP_s)zS+na}eTXVV#qZ$#mRPA1#sobyIyNr}LIp+^7n-vdp@e0_CHDAwEHh;t~(>!zYoDD@&-EVPxu`X8!#j&Ol4v@0JuZ1J^1kO7J3Ym zCB%qT6$m$;#6<%P&&-+1K|tM{|F=$h z9B2WFbVM}7j`ek=*#dU(e_q$`801v7TX4XY9x!li5K`#v&8O$6#I^FR^MwU*8_n$t z0eQBvo)31OXn)v9#f$wjl5IJVweFe?*SmO17M^QS$OnynEoWGRc61T}VkQ&OEu(|E zysjY2lH{z;dMooVD~}@{UsVpm(}5iYu%v)BTl1cnhuzkPym-8-7(V|Urez4*MEEZk zh?|cFnPt$25FKBCnXQ^KK;QW4Iso4~@Ep~N&6C1HN-r-J_T78wq##79b=KJ-K)`(& zwzaZn+_W~#7aefwEM6HL#v^4tFBdNbB0DY-ns1m~hR~mR*|*Da%zmQc-B&o=i$H^A zto<)?*kFA2BH22HoLx-yj8F0^|0$N6U?Xp}Zk$#|dCo2iidmb-uYPDYPB%U4V={C) zx!XX*4UQ(Ge5@gFeE1&?L$Kv1;!}z{i2>+2PrDvAgu=H+8|XwfG`Fzsl5#Q2SSn+M}wu>?6<8gE=G02PitR_rx>`shwJ zYTiBPgWg?q5o#0k@l^EyAt$}oKK1$z3S!!!Hw0H=(&&c9)QPvOjfW;>dM*kK+X?5{ zq;v7y0RM@Moc*UFX*QVrCNsr)w?-MUe$c3Y!q}l^ShxpntU72xOT@|1#-9GHuhpIR z^#$*9U)>z~$1pw%zP1zy%c9Sb*s3x zhn1=UH+w%wLji~)HTA?~w2v*HxE`nqEInTEQtcA!e*YG;U+>u$TMSB24?Lyg9f6W= zvgPKNmU9z6-7pQmU9se8##{BGNLBRcR6E*ZZ<{%s14i5X=T)ub8eQbug|}@%`g(y# zI{p_=iZ*oOvzNQdT~=tXv0$T5Go)Vdl*n#B_^L%V0tG(SN7sCB7urJ`bpqe&mU>vQ z(gMnIM*lnRMK@QXjD?b(;c}u}?Q|>Xv`jWJ3;O(LA@f!1;_>d@;?BZ?qNQR)>#{NJq8Kqv9|iNSiOA>JRwog>n28uZyj5papwrTu2Ub{w$Z9)oJC)+^;CAAgca zm)!ddUmOGyB|a4uDAzs>K)q3HW3gkBa&6b|lfkA?qI&m}@Z(Kk7S#xxV-ZvbioSK^ zQAdJ+bm;h$Ce`ckk#S;z7}NpViCrez>5n!vUV^TV^ftC!fYs7w*0LNHfffvOcOWVS z+^jG4U_EW=#?_?2G*w}Ry??;WFE4K6^tYFe@Q8L@Akz^S5-tFU8P3Us2umjH1?^oY zV{#WrHg_oA6e#LIMYin>^byLQ$KP*(LZ;0?0iinh0d2l>5hviG6C=bM&d0p=vIMra z^|pJ|fE_Uq7l0|r+H2pf?)w6d#;mUQczg%HlmGqv7-}Xdcu<<&$F-+tf}r>BA5qLx_CXmVkGURV1N zv2yF;=l9WFDR6uJX;(n9Pp?Y)G{np5SX4UFIfxJ*$$j%P1zIC$QbuE~NUVXXokhp@ zw=(S)98Y`Z18$30_!lmi->SsYx>sGnHTrz=ror2FkKm(uDjf7DRa~q$lv5jaA1DI; zyX1BHiZt)58D1c|pACX3>_E8@Sn%=1atO_5RE+ZHlUbB2yFJ#(w_+cLGv;WCz6U7e zzZZ9yQ!W%+=d;X}-eihri((-!aF=%_w#5(ov-L_W!O(mO(-^aO*CjSp(M0(MpW?q$ zAy<|}A7z}6XjYjjO;<;&@$)2N6_cwx{PG!wFtoTx%@+32%)$226@n; zRr*>%v?o(O3|A=$xQaFj>J-;&>P-sYLhQT0b{vY=mQ+zd!<3Bei?9F^u2fl+7OkNTkhWN@nXqfG_is)pOu9ahyTFC}klxPmi@Z`w zvx-#xu7_Vd@yj|%6P_kUge}Q{xXpfw2WhS`T5VrpN{le_+Aqy$ zx{G>6ZjY75*yex0;bJkQT;X%dxhAztAGP|Df=4B zoqL2IbVt2mR0OV^C^V;3?`LXh%zi2WY3caqRFdN(gx9^N2H92u)r=9gF}MAP$tDnp zo6`LP&>Tp(<7w8jCE>Y14rMm)yT-nfCf@AgVD4q1xpTa`LlO;SDa(SSsOX#h)gn~C zYYh3!lY$#PVEa5YP@X0z#)`jHgCqeBlAWmrnkZo*qt=SDWG^c}dh6E|bZZLKIlL?v z40vq`QN3C(0@#r<;EVbR(q06UXwVWjM-&@5zLx{udP`--;K_wNSF|aTR=Dh0_EWpS zqz;T(*%Ce4*&&Kf@|6_y7D!Z;Sm}%qOVFYo6C;}LT4WI zR#Xi^XQ2j#{##mKo?*~;bRVjzfzP_m^}i+#k0N%ogaB#ebI32?fh@M4-TN}a{fP(N zim>|%S)BZ04KfV3k17k*!K1uq`$_iR8-M-qTO&@+hv z4zss8lze1+Rvf}BK1OlXDlZ71GT(D6iBJebQ9#Yiy_25@8wq{c$X3=FNwf(XZT}fx z&H)-_$yrj~qpDhuV&JIG_wM9in73z%%nx}AplfECQ7d;bpddpzxhq}Ql1VGEjB$Y< zs0DUB){>=qv5DNB|o*i9l1dLnuWp3mAv=sz&5JExFur@iO zKxYL~o7*$v3rBiay0=N_hhP zACL|`KZ07iqeH^`LE9C`YK~&QTR_Hw-mbHSM5<9HCfqT(N{;kIfn-BC0|GHkC _ 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≪VO9ruL7&7AUbn*> zwt+1-1Y0%mmOt1do~KZgHV9F0WyI*4FA!xwiIW=t1@*)J!K=fgNxfjhs!O~mlbLOKudX9}&aH8EeLh3k-oFM2A zd7>(J;f7F<%Y>}+3N;-?PC?;=(5WBeyNKR1v0-!m4I7wQ2CFEVVc*O7m$Q)~TuH?C z*1gndE8GtS|6ZVyhK2^DH){Wq-3!srsGz1z?*|A+urI{wajan1TC-?*_cbp z&DsZ>0#h*$+EI!``|pjHIeXVnLk+%*^1W^)u4KfcmW1CktS~M2%F87v1D7~7l&^YV zDFTtzoO5zbBoX_9+r+8QzwuXMrwsHRg`RzX!Kq ze0{4@*!M})9pO_i56RVF(ZT{pmiQIRnsYIRy4hkn!K-33-4=FmbK4p^>rF8i`4fw^ z#1iZ9x1>i%n;yldPY>-$hhM_d(h`PvS#@Zkzd|EL5e^~^+&|UX*}4Dy`%<+0g1^7> z5O*-hov5G5qq!2}^>znXB0QggL3B+`O=e~$;~lY+{}sgxcrkeRVeDTVc>LGoT4K=< xKibiem?`||nq-P10^sNWKejjw|2`lK+^y2{MZ9e)SiU5Zp@A{ANZ%pyzW^{JVF3UD diff --git a/dev/assets/tlkgzfl.DA3FSb99.jpeg b/dev/assets/tlkgzfl.DA3FSb99.jpeg deleted file mode 100644 index 75ef011532478664b9b053dd77da68941c0c87f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39689 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