diff --git a/.doctrees/array-api.doctree b/.doctrees/array-api.doctree
index 73020a3f..85e7f792 100644
Binary files a/.doctrees/array-api.doctree and b/.doctrees/array-api.doctree differ
diff --git a/.doctrees/design.doctree b/.doctrees/design.doctree
index 83da4770..9d9726e5 100644
Binary files a/.doctrees/design.doctree and b/.doctrees/design.doctree differ
diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle
index 7b55d51a..8c9aac8a 100644
Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ
diff --git a/.doctrees/user-guide/index.doctree b/.doctrees/user-guide/index.doctree
index 1919b9cb..15be5a95 100644
Binary files a/.doctrees/user-guide/index.doctree and b/.doctrees/user-guide/index.doctree differ
diff --git a/.doctrees/user-guide/optimization.doctree b/.doctrees/user-guide/optimization.doctree
new file mode 100644
index 00000000..5542b3a4
Binary files /dev/null and b/.doctrees/user-guide/optimization.doctree differ
diff --git a/_images/optimization_map_fusion.svg b/_images/optimization_map_fusion.svg
new file mode 100644
index 00000000..fb8a03db
--- /dev/null
+++ b/_images/optimization_map_fusion.svg
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+num tasks: 5
+max projected memory: 100.0 MB
+total nbytes: 36 bytes
+optimized: True
+
+
+op-001
+
+
+op-001
+asarray
+
+
+
+
+
+array-001
+
+
+array-001
+a
+
+
+
+
+
+op-001->array-001
+
+
+
+
+
+op-003
+
+
+op-003
+astype
+tasks: 4
+
+
+
+
+
+array-001->op-003
+
+
+
+
+
+array-003
+
+
+array-003
+c
+
+
+
+
+
+op-003->array-003
+
+
+
+
+
+create-arrays
+
+
+create-arrays
+tasks: 1
+
+
+
+
+
+arrays
+
+
+arrays
+
+
+
+
+
+create-arrays->arrays
+
+
+
+
+
diff --git a/_images/optimization_multiple_inputs.svg b/_images/optimization_multiple_inputs.svg
new file mode 100644
index 00000000..b0da3e21
--- /dev/null
+++ b/_images/optimization_multiple_inputs.svg
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+num tasks: 5
+max projected memory: 100.0 MB
+total nbytes written: 72 bytes
+optimized: True
+
+
+op-004
+
+
+op-004
+ones
+
+
+
+
+
+array-004
+
+
+array-004
+a
+
+
+
+
+
+op-004->array-004
+
+
+
+
+
+op-008
+
+
+op-008
+add
+tasks: 4
+
+
+
+
+
+array-004->op-008
+
+
+
+
+
+op-005
+
+
+op-005
+ones
+
+
+
+
+
+array-005
+
+
+array-005
+b
+
+
+
+
+
+op-005->array-005
+
+
+
+
+
+array-005->op-008
+
+
+
+
+
+op-006
+
+
+op-006
+ones
+
+
+
+
+
+array-006
+
+
+array-006
+c
+
+
+
+
+
+op-006->array-006
+
+
+
+
+
+array-006->op-008
+
+
+
+
+
+array-008
+
+
+array-008
+e
+
+
+
+
+
+op-008->array-008
+
+
+
+
+
+create-arrays
+
+
+create-arrays
+tasks: 1
+
+
+
+
+
+arrays
+
+
+arrays
+
+
+
+
+
+create-arrays->arrays
+
+
+
+
+
diff --git a/_images/optimization_multiple_inputs_unoptimized.svg b/_images/optimization_multiple_inputs_unoptimized.svg
new file mode 100644
index 00000000..7eb2026e
--- /dev/null
+++ b/_images/optimization_multiple_inputs_unoptimized.svg
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+num tasks: 10
+max projected memory: 100.0 MB
+total nbytes written: 144 bytes
+optimized: False
+
+
+op-004
+
+
+op-004
+ones
+
+
+
+
+
+array-004
+
+
+array-004
+a
+
+
+
+
+
+op-004->array-004
+
+
+
+
+
+op-008
+
+
+op-008
+add
+tasks: 4
+
+
+
+
+
+array-004->op-008
+
+
+
+
+
+op-005
+
+
+op-005
+ones
+
+
+
+
+
+array-005
+
+
+array-005
+b
+
+
+
+
+
+op-005->array-005
+
+
+
+
+
+op-007
+
+
+op-007
+add
+tasks: 4
+
+
+
+
+
+array-005->op-007
+
+
+
+
+
+op-006
+
+
+op-006
+ones
+
+
+
+
+
+array-006
+
+
+array-006
+c
+
+
+
+
+
+op-006->array-006
+
+
+
+
+
+array-006->op-007
+
+
+
+
+
+array-007
+
+
+array-007
+d
+
+
+
+
+
+op-007->array-007
+
+
+
+
+
+array-007->op-008
+
+
+
+
+
+array-008
+
+
+array-008
+e
+
+
+
+
+
+op-008->array-008
+
+
+
+
+
+create-arrays
+
+
+create-arrays
+tasks: 2
+
+
+
+
+
+arrays
+
+
+arrays
+
+
+
+
+
+create-arrays->arrays
+
+
+
+
+
diff --git a/_images/optimization_turned_off.svg b/_images/optimization_turned_off.svg
new file mode 100644
index 00000000..3f83dae6
--- /dev/null
+++ b/_images/optimization_turned_off.svg
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+num tasks: 10
+max projected memory: 100.0 MB
+total nbytes: 108 bytes
+optimized: False
+
+
+op-001
+
+
+op-001
+asarray
+
+
+
+
+
+array-001
+
+
+array-001
+a
+
+
+
+
+
+op-001->array-001
+
+
+
+
+
+op-002
+
+
+op-002
+negative
+tasks: 4
+
+
+
+
+
+array-001->op-002
+
+
+
+
+
+array-002
+
+
+array-002
+b
+
+
+
+
+
+op-002->array-002
+
+
+
+
+
+op-003
+
+
+op-003
+astype
+tasks: 4
+
+
+
+
+
+array-002->op-003
+
+
+
+
+
+array-003
+
+
+array-003
+c
+
+
+
+
+
+op-003->array-003
+
+
+
+
+
+create-arrays
+
+
+create-arrays
+tasks: 2
+
+
+
+
+
+arrays
+
+
+arrays
+
+
+
+
+
+create-arrays->arrays
+
+
+
+
+
diff --git a/_sources/user-guide/index.md b/_sources/user-guide/index.md
index 22fe6a95..fb0738e6 100644
--- a/_sources/user-guide/index.md
+++ b/_sources/user-guide/index.md
@@ -10,6 +10,7 @@ executors
storage
memory
reliability
+optimization
scaling
diagnostics
```
diff --git a/_sources/user-guide/optimization.md b/_sources/user-guide/optimization.md
new file mode 100644
index 00000000..3844d581
--- /dev/null
+++ b/_sources/user-guide/optimization.md
@@ -0,0 +1,120 @@
+# Optimization
+
+Cubed will automatically optimize the computation graph before running it. This can reduce the number of tasks in the plan, and the amount of intermediate IO, both of which speed up the computation.
+
+## Map fusion
+
+The simplest kind of optimization is _map fusion_, where operations that have one preceding operation with the same number of tasks are fused together. This optimization is enabled by default.
+
+You can see the effect of optimization before running any computation by using the `visualize` method on a Cubed array, such as in the following small example. We start by specifying `optimize_graph=False` to turn off optimization so we can see what the unoptimized plan looks like.
+
+```python
+import cubed.array_api as xp
+
+a = xp.asarray([[1, 2, 3], [4, 5, 6], [7, 8, 9]], chunks=(2, 2))
+b = xp.negative(a)
+c = xp.astype(b, xp.float32)
+
+c.visualize("cubed-unoptimized", optimize_graph=False)
+```
+
+![Computation with optimization turned off](../images/optimization_turned_off.svg)
+
+Now we call `visualize` again, this time not setting `optimize_graph` so it picks up its default value of `True`.
+
+```python
+c.visualize()
+```
+
+![Map fusion optimization](../images/optimization_map_fusion.svg)
+
+Note that with optimization turned on, the array `b` is no longer written as an intermediate output since it will be computed in the same tasks that compute array `c`. The overall number of tasks is reduced from 10 to 5, and the intermediate data (total `nbytes`) is reduced too.
+
+Here we have just called `visualize` with the `optimize_graph` argument, but it's possible to use it when calling `compute` - which can be useful when debugging a computation.
+
+```python
+c.compute(optimize_graph=False)
+```
+
+## Multiple-input fusion
+
+Cubed supports more powerful optimizations, such as for when an array is created from multiple input arrays. Here is an example, shown first with optimization turned off.
+
+```python
+import cubed.array_api as xp
+
+a = xp.ones((3, 3), chunks=(2, 2))
+b = xp.ones((3, 3), chunks=(2, 2))
+c = xp.ones((3, 3), chunks=(2, 2))
+d = xp.add(b, c)
+e = xp.add(a, d)
+
+e.visualize("cubed-unoptimized", optimize_graph=False)
+```
+
+![Multiple inputs unoptimized](../images/optimization_multiple_inputs_unoptimized.svg)
+
+And with optimization turned on (the default):
+
+```python
+e.visualize()
+```
+
+![Multiple inputs optimized](../images/optimization_multiple_inputs.svg)
+
+Notice how the array `d` is fused away.
+
+## Debugging optimization
+
+Sometimes it can be difficult to understand why particular operations in a computation plan have been fused together - or more commonly, why they have *not* been fused. By enabling debug logging you can get detailed information from the optimize function to help you understand which operations are being fused - or not - and the reason in either case.
+
+Here's the previous example with logging enabled:
+
+```python
+import logging
+
+logging.basicConfig(level=logging.DEBUG)
+
+e.visualize()
+```
+
+The output explains which operations can or can't be fused, and why:
+
+```
+DEBUG:cubed.core.optimization:can't fuse op-001 since it is not a primitive operation, or it uses map_direct
+DEBUG:cubed.core.optimization:can't fuse op-002 since it is not a primitive operation, or it uses map_direct
+DEBUG:cubed.core.optimization:can't fuse op-003 since it is not a primitive operation, or it uses map_direct
+DEBUG:cubed.core.optimization:can't fuse op-004 since no predecessor ops can be fused
+DEBUG:cubed.primitive.blockwise:can fuse op-005 since num tasks of predecessor ops match
+```
+
+## Advanced settings
+
+There are limits to how many input arrays and input chunks reads are fused together. These are imposed so that the number of reads that an individual task must perform is not excessive, which would otherwise result in slow running tasks.
+
+In some cases you may want to change these limits, which we look at here.
+
+### Total number of source arrays
+
+Cubed will not fuse operations that result in more than 4 source arrays in the fused operation. In the previous example above the fused operation has three source arrays (`a`, `b`, and `c`), which is below the maximum default allowed. On the other hand, a computation with a higher "fan-in" that exceeds the maximum will not be fused, or operations will be fused in stages.
+
+To change this, we have to specify the `optimize_function` that Cubed should use: `multiple_inputs_optimize_dag`. In addition, we use `fuctools.partial` to set the `max_total_source_arrays` argument to 8 as follows:
+
+```python
+from functools import partial
+from cubed.core.optimization import multiple_inputs_optimize_dag
+
+opt_fn = partial(multiple_inputs_optimize_dag, max_total_source_arrays=8)
+e.visualize(optimize_function=opt_fn)
+```
+
+### Total number of input blocks
+
+The `max_total_num_input_blocks` argument to `multiple_inputs_optimize_dag` specifies the maximum number of input blocks (chunks) that are allowed in the fused operation.
+
+Again, this is to limit the number of reads that an individual task must perform. The default is `None`, which means that operations are fused only if they have the same number of tasks. If set to an integer, then this limitation is removed, and tasks with a different number of tasks will be fused - as long as the total number of input blocks does not exceed the maximum. This setting is useful for reductions, and can be set using `functools.partial`:
+
+```python
+opt_fn = partial(multiple_inputs_optimize_dag, max_total_num_input_blocks=10)
+e.visualize(optimize_function=opt_fn)
+```
diff --git a/_static/documentation_options.js b/_static/documentation_options.js
index 0c45ce89..35a002f2 100644
--- a/_static/documentation_options.js
+++ b/_static/documentation_options.js
@@ -1,5 +1,5 @@
const DOCUMENTATION_OPTIONS = {
- VERSION: '575eded',
+ VERSION: '2065794',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/api.html b/api.html
index 352e6f33..b3b0456c 100644
--- a/api.html
+++ b/api.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/array-api.html b/array-api.html
index 86c43579..f7858fa3 100644
--- a/array-api.html
+++ b/array-api.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/computation.html b/computation.html
index 1aa8ad75..72512606 100644
--- a/computation.html
+++ b/computation.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/configuration.html b/configuration.html
index 4f4d2576..0f605ed8 100644
--- a/configuration.html
+++ b/configuration.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/contributing.html b/contributing.html
index de0593b2..4029615b 100644
--- a/contributing.html
+++ b/contributing.html
@@ -36,7 +36,7 @@
-
+
@@ -159,6 +159,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/design.html b/design.html
index 67342d41..77964f3a 100644
--- a/design.html
+++ b/design.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Array.compute.html b/generated/cubed.Array.compute.html
index dfd97be3..161d757d 100644
--- a/generated/cubed.Array.compute.html
+++ b/generated/cubed.Array.compute.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Array.html b/generated/cubed.Array.html
index d62f601c..ef04af26 100644
--- a/generated/cubed.Array.html
+++ b/generated/cubed.Array.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Array.rechunk.html b/generated/cubed.Array.rechunk.html
index a7d2a545..909bf3b2 100644
--- a/generated/cubed.Array.rechunk.html
+++ b/generated/cubed.Array.rechunk.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Array.visualize.html b/generated/cubed.Array.visualize.html
index aec6c400..f1d322b9 100644
--- a/generated/cubed.Array.visualize.html
+++ b/generated/cubed.Array.visualize.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Callback.html b/generated/cubed.Callback.html
index 92abb968..c46f3742 100644
--- a/generated/cubed.Callback.html
+++ b/generated/cubed.Callback.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.Spec.html b/generated/cubed.Spec.html
index d0ea9b10..35d502b5 100644
--- a/generated/cubed.Spec.html
+++ b/generated/cubed.Spec.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.TaskEndEvent.html b/generated/cubed.TaskEndEvent.html
index 3dc838ac..1d348c69 100644
--- a/generated/cubed.TaskEndEvent.html
+++ b/generated/cubed.TaskEndEvent.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.apply_gufunc.html b/generated/cubed.apply_gufunc.html
index 4aa1e3bf..d2df690a 100644
--- a/generated/cubed.apply_gufunc.html
+++ b/generated/cubed.apply_gufunc.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.compute.html b/generated/cubed.compute.html
index 09e02a01..51f24df6 100644
--- a/generated/cubed.compute.html
+++ b/generated/cubed.compute.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.from_array.html b/generated/cubed.from_array.html
index 022d9ef3..7e90d0f1 100644
--- a/generated/cubed.from_array.html
+++ b/generated/cubed.from_array.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.from_zarr.html b/generated/cubed.from_zarr.html
index 0214d4af..413b42fd 100644
--- a/generated/cubed.from_zarr.html
+++ b/generated/cubed.from_zarr.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.map_blocks.html b/generated/cubed.map_blocks.html
index 8d84a5f0..ee4d8355 100644
--- a/generated/cubed.map_blocks.html
+++ b/generated/cubed.map_blocks.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.map_overlap.html b/generated/cubed.map_overlap.html
index 10b74635..6145fe4d 100644
--- a/generated/cubed.map_overlap.html
+++ b/generated/cubed.map_overlap.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.measure_reserved_mem.html b/generated/cubed.measure_reserved_mem.html
index 6bb52a9e..f547afa6 100644
--- a/generated/cubed.measure_reserved_mem.html
+++ b/generated/cubed.measure_reserved_mem.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.nanmean.html b/generated/cubed.nanmean.html
index 54681af9..7a212648 100644
--- a/generated/cubed.nanmean.html
+++ b/generated/cubed.nanmean.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.nansum.html b/generated/cubed.nansum.html
index e992819a..28c52035 100644
--- a/generated/cubed.nansum.html
+++ b/generated/cubed.nansum.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.pad.html b/generated/cubed.pad.html
index f39565c1..56b1807e 100644
--- a/generated/cubed.pad.html
+++ b/generated/cubed.pad.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.random.random.html b/generated/cubed.random.random.html
index 122aeb66..3fe67af8 100644
--- a/generated/cubed.random.random.html
+++ b/generated/cubed.random.random.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.store.html b/generated/cubed.store.html
index bd7bef3d..e9b6ece8 100644
--- a/generated/cubed.store.html
+++ b/generated/cubed.store.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.to_zarr.html b/generated/cubed.to_zarr.html
index bb918063..cfd2fb09 100644
--- a/generated/cubed.to_zarr.html
+++ b/generated/cubed.to_zarr.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/generated/cubed.visualize.html b/generated/cubed.visualize.html
index 85393774..515ea753 100644
--- a/generated/cubed.visualize.html
+++ b/generated/cubed.visualize.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/genindex.html b/genindex.html
index eb6bfab7..938533db 100644
--- a/genindex.html
+++ b/genindex.html
@@ -35,7 +35,7 @@
-
+
@@ -159,6 +159,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/getting-started/demo.html b/getting-started/demo.html
index af55b708..4b98e9de 100644
--- a/getting-started/demo.html
+++ b/getting-started/demo.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/getting-started/index.html b/getting-started/index.html
index eba48ab3..83b80617 100644
--- a/getting-started/index.html
+++ b/getting-started/index.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/getting-started/installation.html b/getting-started/installation.html
index b00a6931..124155ac 100644
--- a/getting-started/installation.html
+++ b/getting-started/installation.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/index.html b/index.html
index 79707894..ec3dd802 100644
--- a/index.html
+++ b/index.html
@@ -36,7 +36,7 @@
-
+
@@ -161,6 +161,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
@@ -395,6 +396,7 @@ Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/objects.inv b/objects.inv
index 207d9aaa..1c0487c5 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/operations.html b/operations.html
index fbb87c79..a8128647 100644
--- a/operations.html
+++ b/operations.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/related-projects.html b/related-projects.html
index e8b82f5c..363ae354 100644
--- a/related-projects.html
+++ b/related-projects.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/search.html b/search.html
index e9ecdfe8..bc94dcd5 100644
--- a/search.html
+++ b/search.html
@@ -34,7 +34,7 @@
-
+
@@ -161,6 +161,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/searchindex.js b/searchindex.js
index 57a87560..3453c9e0 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"API Reference": [[0, null]], "Allowed memory": [[36, "allowed-memory"]], "Array": [[0, "array"]], "Array API": [[5, "array-api"]], "Articles": [[30, "articles"]], "Bounded-memory serverless distributed N-dimensional array processing": [[30, "bounded-memory-serverless-distributed-n-dimensional-array-processing"]], "Callbacks": [[33, "callbacks"]], "Chunk sizes": [[36, "chunk-sizes"]], "Chunk-specific functions": [[0, "chunk-specific-functions"]], "Cloud storage": [[39, "cloud-storage"]], "Computation": [[2, null]], "Conda": [[29, "conda"]], "Configuration": [[3, null]], "Contributing": [[4, null]], "Core operations": [[5, "core-operations"]], "Cubed": [[30, null]], "Dask": [[32, "dask"]], "Deleting intermediate data": [[39, "deleting-intermediate-data"]], "Demo": [[27, null]], "Dependency Tree": [[31, "dependency-tree"]], "Design": [[5, null]], "Development": [[4, "development"]], "Diagnosing Performance": [[38, "diagnosing-performance"]], "Diagnostics": [[33, null]], "Differences between Cubed and the standard": [[1, "differences-between-cubed-and-the-standard"]], "Different Cloud Providers": [[38, "different-cloud-providers"]], "Different Executors": [[38, "different-executors"]], "Documentation": [[30, "documentation"]], "Environment variables": [[3, "environment-variables"]], "Examples in use": [[33, "examples-in-use"]], "Execution": [[2, "execution"]], "Executor options": [[3, "executor-options"]], "Executors": [[34, null]], "For developers": [[30, null]], "For users": [[30, null]], "Getting Started": [[28, null]], "History": [[33, "history"]], "IO": [[0, "io"]], "Installation": [[29, null]], "Local single-machine executors": [[34, "local-single-machine-executors"]], "Memory": [[2, "memory"], [36, null]], "Memray": [[33, "memray"]], "Multi-pipeline Calculation": [[38, "multi-pipeline-calculation"]], "Multi-step Calculation": [[38, "multi-step-calculation"]], "Non-standardised functions": [[0, "non-standardised-functions"]], "Operations": [[31, null]], "Optional dependencies": [[29, "optional-dependencies"]], "Other Performance Considerations": [[38, "other-performance-considerations"]], "Pip": [[29, "pip"]], "Plan": [[2, "plan"]], "Preface: Types of Scaling": [[38, "preface-types-of-scaling"]], "Previous work": [[32, "previous-work"]], "Primitive operations": [[5, "primitive-operations"]], "Progress bar": [[33, "progress-bar"]], "Projected memory": [[36, "projected-memory"]], "Python Array API": [[1, null]], "Random number generation": [[0, "random-number-generation"]], "Reference": [[3, "reference"]], "Related Projects": [[32, null]], "Reliability": [[37, null]], "Reserved memory": [[36, "reserved-memory"]], "Retries": [[37, "retries"]], "Runtime": [[0, "runtime"], [5, "runtime"]], "Scaling": [[38, null]], "Single-step Calculation": [[38, "single-step-calculation"]], "Spec object": [[3, "spec-object"]], "Spec options": [[3, "spec-options"]], "Specification": [[3, "specification"]], "Specifying an executor": [[34, "specifying-an-executor"]], "Storage": [[5, "storage"], [39, null]], "Stragglers": [[37, "stragglers"]], "Strong consistency": [[37, "strong-consistency"]], "Theoretical vs Practical Scaling of Cubed": [[38, "theoretical-vs-practical-scaling-of-cubed"]], "Timeline": [[33, "timeline"]], "Timeouts": [[37, "timeouts"]], "Tips": [[38, "tips"]], "User Guide": [[35, null]], "Visualize the computation plan": [[33, "visualize-the-computation-plan"]], "Which cloud service executor should I use?": [[34, "which-cloud-service-executor-should-i-use"]], "Why Cubed?": [[40, null]], "Xarray": [[32, "xarray"]], "YAML file": [[3, "yaml-file"]], "beam": [[3, "beam"]], "blockwise": [[31, "blockwise"]], "coiled": [[3, "coiled"]], "cubed.Array": [[6, null]], "cubed.Array.compute": [[7, null]], "cubed.Array.rechunk": [[8, null]], "cubed.Array.visualize": [[9, null]], "cubed.Callback": [[10, null]], "cubed.Spec": [[11, null]], "cubed.TaskEndEvent": [[12, null]], "cubed.apply_gufunc": [[13, null]], "cubed.compute": [[14, null]], "cubed.from_array": [[15, null]], "cubed.from_zarr": [[16, null]], "cubed.map_blocks": [[17, null]], "cubed.map_overlap": [[18, null]], "cubed.measure_reserved_mem": [[19, null]], "cubed.nanmean": [[20, null]], "cubed.nansum": [[21, null]], "cubed.pad": [[22, null]], "cubed.random.random": [[23, null]], "cubed.store": [[24, null]], "cubed.to_zarr": [[25, null]], "cubed.visualize": [[26, null]], "dask": [[3, "dask"]], "elemwise": [[31, "elemwise"]], "lithops": [[3, "lithops"]], "map_blocks": [[31, "map-blocks"]], "map_direct": [[31, "map-direct"]], "modal": [[3, "modal"]], "processes": [[3, "processes"]], "rechunk": [[31, "rechunk"]], "reduction and arg_reduction": [[31, "reduction-and-arg-reduction"]], "single-threaded": [[3, "single-threaded"]], "threads": [[3, "threads"]]}, "docnames": ["api", "array-api", "computation", "configuration", "contributing", "design", "generated/cubed.Array", "generated/cubed.Array.compute", "generated/cubed.Array.rechunk", "generated/cubed.Array.visualize", "generated/cubed.Callback", "generated/cubed.Spec", "generated/cubed.TaskEndEvent", "generated/cubed.apply_gufunc", "generated/cubed.compute", "generated/cubed.from_array", "generated/cubed.from_zarr", "generated/cubed.map_blocks", "generated/cubed.map_overlap", "generated/cubed.measure_reserved_mem", "generated/cubed.nanmean", "generated/cubed.nansum", "generated/cubed.pad", "generated/cubed.random.random", "generated/cubed.store", "generated/cubed.to_zarr", "generated/cubed.visualize", "getting-started/demo", "getting-started/index", "getting-started/installation", "index", "operations", "related-projects", "user-guide/diagnostics", "user-guide/executors", "user-guide/index", "user-guide/memory", "user-guide/reliability", "user-guide/scaling", "user-guide/storage", "why-cubed"], "envversion": {"sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["api.rst", "array-api.md", "computation.md", "configuration.md", "contributing.md", "design.md", "generated/cubed.Array.rst", "generated/cubed.Array.compute.rst", "generated/cubed.Array.rechunk.rst", "generated/cubed.Array.visualize.rst", "generated/cubed.Callback.rst", "generated/cubed.Spec.rst", "generated/cubed.TaskEndEvent.rst", "generated/cubed.apply_gufunc.rst", "generated/cubed.compute.rst", "generated/cubed.from_array.rst", "generated/cubed.from_zarr.rst", "generated/cubed.map_blocks.rst", "generated/cubed.map_overlap.rst", "generated/cubed.measure_reserved_mem.rst", "generated/cubed.nanmean.rst", "generated/cubed.nansum.rst", "generated/cubed.pad.rst", "generated/cubed.random.random.rst", "generated/cubed.store.rst", "generated/cubed.to_zarr.rst", "generated/cubed.visualize.rst", "getting-started/demo.md", "getting-started/index.md", "getting-started/installation.md", "index.md", "operations.md", "related-projects.md", "user-guide/diagnostics.md", "user-guide/executors.md", "user-guide/index.md", "user-guide/memory.md", "user-guide/reliability.md", "user-guide/scaling.md", "user-guide/storage.md", "why-cubed.md"], "indexentries": {"__init__() (cubed.array method)": [[6, "cubed.Array.__init__", false]], "__init__() (cubed.callback method)": [[10, "cubed.Callback.__init__", false]], "__init__() (cubed.spec method)": [[11, "cubed.Spec.__init__", false]], "__init__() (cubed.taskendevent method)": [[12, "cubed.TaskEndEvent.__init__", false]], "apply_gufunc() (in module cubed)": [[13, "cubed.apply_gufunc", false]], "arange() (in module cubed.array_api)": [[1, "cubed.array_api.arange", false]], "array (class in cubed)": [[6, "cubed.Array", false]], "asarray() (in module cubed.array_api)": [[1, "cubed.array_api.asarray", false]], "broadcast_to() (in module cubed.array_api)": [[1, "cubed.array_api.broadcast_to", false]], "callback (class in cubed)": [[10, "cubed.Callback", false]], "compute() (cubed.array method)": [[7, "cubed.Array.compute", false]], "compute() (in module cubed)": [[14, "cubed.compute", false]], "concat() (in module cubed.array_api)": [[1, "cubed.array_api.concat", false]], "empty() (in module cubed.array_api)": [[1, "cubed.array_api.empty", false]], "empty_like() (in module cubed.array_api)": [[1, "cubed.array_api.empty_like", false]], "eye() (in module cubed.array_api)": [[1, "cubed.array_api.eye", false]], "from_array() (in module cubed)": [[15, "cubed.from_array", false]], "from_zarr() (in module cubed)": [[16, "cubed.from_zarr", false]], "full() (in module cubed.array_api)": [[1, "cubed.array_api.full", false]], "full_like() (in module cubed.array_api)": [[1, "cubed.array_api.full_like", false]], "linspace() (in module cubed.array_api)": [[1, "cubed.array_api.linspace", false]], "map_blocks() (in module cubed)": [[17, "cubed.map_blocks", false]], "map_overlap() (in module cubed)": [[18, "cubed.map_overlap", false]], "measure_reserved_mem() (in module cubed)": [[19, "cubed.measure_reserved_mem", false]], "nanmean() (in module cubed)": [[20, "cubed.nanmean", false]], "nansum() (in module cubed)": [[21, "cubed.nansum", false]], "ones() (in module cubed.array_api)": [[1, "cubed.array_api.ones", false]], "ones_like() (in module cubed.array_api)": [[1, "cubed.array_api.ones_like", false]], "pad() (in module cubed)": [[22, "cubed.pad", false]], "random() (in module cubed.random)": [[23, "cubed.random.random", false]], "rechunk() (cubed.array method)": [[8, "cubed.Array.rechunk", false]], "spec (class in cubed)": [[11, "cubed.Spec", false]], "store() (in module cubed)": [[24, "cubed.store", false]], "taskendevent (class in cubed)": [[12, "cubed.TaskEndEvent", false]], "to_zarr() (in module cubed)": [[25, "cubed.to_zarr", false]], "visualize() (cubed.array method)": [[9, "cubed.Array.visualize", false]], "visualize() (in module cubed)": [[26, "cubed.visualize", false]], "zeros() (in module cubed.array_api)": [[1, "cubed.array_api.zeros", false]], "zeros_like() (in module cubed.array_api)": [[1, "cubed.array_api.zeros_like", false]]}, "objects": {"cubed": [[6, 0, 1, "", "Array"], [10, 0, 1, "", "Callback"], [11, 0, 1, "", "Spec"], [12, 0, 1, "", "TaskEndEvent"], [13, 2, 1, "", "apply_gufunc"], [14, 2, 1, "", "compute"], [15, 2, 1, "", "from_array"], [16, 2, 1, "", "from_zarr"], [17, 2, 1, "", "map_blocks"], [18, 2, 1, "", "map_overlap"], [19, 2, 1, "", "measure_reserved_mem"], [20, 2, 1, "", "nanmean"], [21, 2, 1, "", "nansum"], [22, 2, 1, "", "pad"], [24, 2, 1, "", "store"], [25, 2, 1, "", "to_zarr"], [26, 2, 1, "", "visualize"]], "cubed.Array": [[6, 1, 1, "", "__init__"], [7, 1, 1, "", "compute"], [8, 1, 1, "", "rechunk"], [9, 1, 1, "", "visualize"]], "cubed.Callback": [[10, 1, 1, "", "__init__"]], "cubed.Spec": [[11, 1, 1, "", "__init__"]], "cubed.TaskEndEvent": [[12, 1, 1, "", "__init__"]], "cubed.array_api": [[1, 2, 1, "", "arange"], [1, 2, 1, "", "asarray"], [1, 2, 1, "", "broadcast_to"], [1, 2, 1, "", "concat"], [1, 2, 1, "", "empty"], [1, 2, 1, "", "empty_like"], [1, 2, 1, "", "eye"], [1, 2, 1, "", "full"], [1, 2, 1, "", "full_like"], [1, 2, 1, "", "linspace"], [1, 2, 1, "", "ones"], [1, 2, 1, "", "ones_like"], [1, 2, 1, "", "zeros"], [1, 2, 1, "", "zeros_like"]], "cubed.random": [[23, 2, 1, "", "random"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:function"}, "terms": {"": [3, 5, 7, 30, 31, 32, 33, 34, 36, 38, 39, 40], "0": [1, 11, 23, 29, 33], "00": 33, "001": 33, "002": 33, "003": 33, "1": [1, 11, 12, 23, 27, 33, 34, 39], "10": [4, 27], "100": 33, "1000": 34, "10000": 33, "100kb": 27, "100mb": [3, 36, 38], "11": [3, 33], "12": 1, "180": 3, "2": [3, 11, 27, 29, 33, 34], "20": [34, 36], "2000": 3, "200mb": [3, 33], "2022": 1, "2023": 1, "2gb": [3, 34, 36, 38], "3": [3, 4, 27, 33], "300": 3, "4": [27, 33], "400mb": 33, "438": 1, "5": [27, 33], "5000": [3, 33], "50000": 3, "6": [27, 33], "7": [27, 29, 33], "8": [27, 33], "9": [27, 33], "A": [0, 2, 3, 34, 36, 37, 38, 40], "And": 32, "As": [2, 36], "At": 34, "By": [33, 39], "For": [2, 36, 37, 38, 39], "If": [3, 7, 9, 11, 14, 26, 33, 34, 36, 37, 39], "In": [24, 31, 32, 33, 36, 38, 39], "It": [3, 5, 19, 31, 32, 33, 34], "No": 31, "Not": 31, "On": 39, "One": [2, 3, 38], "Or": [2, 3], "The": [1, 2, 3, 5, 7, 8, 9, 11, 14, 16, 18, 19, 24, 25, 26, 31, 32, 33, 34, 36, 38, 39], "Then": 33, "There": [3, 5, 33, 36, 38], "These": [0, 3, 5], "To": [3, 29, 33, 37, 38, 39], "With": 38, "__init__": [6, 10, 11, 12], "abil": 36, "about": [12, 13, 32, 33], "abov": [33, 34], "abstract": [32, 40], "accept": 1, "access": 31, "account": 34, "accur": 36, "achiev": 38, "act": 37, "activ": 4, "actual": [3, 33, 36], "acycl": [2, 33], "ad": [2, 33, 38], "adapt": 33, "add": [3, 27, 31, 33, 38, 39], "addit": 33, "adjust": 38, "adopt": 40, "advantag": [2, 32, 38], "affect": [33, 38], "after": [8, 18, 33, 37, 39], "ag": 39, "again": 37, "aggregr": 31, "ahead": [2, 36], "aim": [28, 36, 38], "algorithm": [5, 31, 36], "all": [3, 5, 31, 33, 34, 38, 40], "alloc": [13, 33, 40], "allow": [31, 35, 37], "allow_rechunk": 13, "allowed_mem": [3, 11, 27, 34, 36, 38], "alon": 33, "along": [20, 31], "alreadi": [7, 14], "also": [2, 3, 27, 29, 34, 37, 38], "although": [31, 34], "alwai": [33, 40], "amazon": [34, 37], "amount": [13, 19, 33, 34, 36, 37, 38, 40], "an": [2, 3, 4, 8, 9, 11, 15, 16, 19, 22, 25, 26, 28, 31, 33, 35, 36, 37, 38, 40], "analys": 36, "ani": [3, 7, 11, 19, 33, 34, 38, 39], "annot": 33, "anoth": [2, 36, 37, 38, 40], "anyth": 3, "apach": [5, 29, 30, 40], "api": [6, 27, 30, 31, 32], "appli": [13, 17, 18, 31, 38], "applic": 5, "apply_gufunc": 30, "approach": [39, 40], "appropri": [3, 39], "ar": [0, 1, 2, 3, 4, 5, 9, 13, 26, 29, 31, 32, 33, 34, 36, 37, 38, 39, 40], "arang": 1, "arbitrari": 11, "arg": [13, 17, 18], "arg_reduct": 30, "argument": [1, 3, 18, 19, 33], "arithmet": 20, "around": [36, 38], "arrai": [2, 3, 10, 13, 14, 15, 16, 17, 18, 21, 22, 24, 25, 26, 27, 31, 32, 33, 34, 36, 38, 39, 40], "arrang": 31, "array_api": [1, 3, 27, 33], "arrow": 31, "asarrai": [1, 15, 27, 33], "assum": 13, "atom": 37, "attempt": [3, 37, 40], "attribut": [5, 6, 11, 12, 31], "auto": [1, 15], "automat": [3, 33, 34, 36, 38, 39], "avail": [3, 11, 27, 36, 37], "averag": 38, "avoid": [31, 40], "aw": [3, 29, 34, 38, 39], "awai": 40, "ax": [13, 31], "axi": [1, 13, 20, 21, 31], "b": [3, 27, 33], "back": [5, 6, 33, 34], "backup": [3, 37, 38], "bag": 32, "base": 38, "baselin": 36, "basi": 36, "basic": [3, 36], "batch": 3, "batch_siz": 3, "beam": [5, 29, 30, 32, 38, 40], "becaus": [34, 36], "been": [0, 3, 7, 11, 14, 27, 32, 33, 34, 37, 38, 40], "befor": [2, 3, 7, 9, 14, 26, 33, 34, 38, 39], "below": [3, 34, 36], "better": 32, "between": [30, 31, 40], "big": 38, "bin": 33, "block": [5, 17, 18, 31, 33, 38], "blockwis": [2, 30, 32], "blosc": 11, "blue": 5, "bool": [7, 9, 14, 18, 26], "both": [2, 32, 37, 38], "bottom": [5, 31], "bound": [32, 36, 38, 40], "boundari": [18, 31], "box": 33, "branch": 38, "break": 40, "bring": 37, "broadcast": 31, "broadcast_to": 1, "bucket": 39, "budget": 36, "buffer": 33, "build": [2, 34, 36], "built": [2, 5], "bulk": 40, "byte": [11, 13, 19], "c": [3, 27, 29, 33], "calcul": 36, "call": [2, 18, 31, 32, 33, 34, 37], "callabl": [7, 9, 14, 18, 26], "callback": [7, 12, 14, 35], "can": [0, 2, 3, 9, 11, 19, 26, 29, 32, 33, 34, 36, 37, 38, 39, 40], "cancel": 37, "cannot": 38, "carefulli": 40, "carri": 38, "case": [33, 36, 38, 39, 40], "cd": 33, "central": 40, "certain": [37, 39], "challeng": 40, "chang": [3, 8, 31, 32, 33, 38], "characterist": 38, "check": 36, "child": 3, "choic": 33, "choos": 2, "chosen": 5, "chunk": [1, 2, 3, 5, 6, 8, 15, 17, 18, 22, 23, 27, 30, 31, 32, 33, 34, 35, 37, 38, 40], "circumst": 37, "class": [6, 10, 11, 12], "clean": 39, "clear": 39, "clevel": 11, "click": 39, "client": [3, 29, 37], "cloud": [3, 5, 19, 27, 32, 35, 36, 37, 40], "cluster": [34, 38], "clutter": 31, "cname": 11, "code": 3, "coil": [29, 34], "coiled_kwarg": 3, "collect": [24, 33], "colour": 33, "come": [34, 38], "command": 39, "common": [36, 40], "compar": 34, "complet": [12, 29, 33, 37, 38], "complex": [36, 38], "compon": 32, "compos": [5, 31], "compress": [11, 33, 36], "compressor": 11, "comput": [3, 5, 9, 10, 11, 16, 19, 20, 24, 25, 26, 27, 30, 32, 34, 35, 36, 37, 38, 39, 40], "compute_arrays_in_parallel": [3, 38], "compute_kwarg": 3, "concat": [1, 31], "concept": 35, "concern": 32, "concurr": [3, 38], "conda": [4, 28], "confid": 36, "configur": [11, 30, 34, 36, 37, 38, 40], "conflict": 29, "conform": 6, "conserv": 36, "consid": [37, 38], "consider": 35, "consist": 35, "consol": 39, "constant": [18, 33], "constraint": 38, "construct": 3, "constructor": 3, "consult": 31, "contain": 36, "continu": 32, "contribut": 30, "control": 40, "conveni": 39, "convent": 27, "convert": [2, 32, 33, 38], "copi": 1, "core": [3, 27, 30, 31, 32, 34], "corearrai": [8, 14, 26], "corner": 33, "correspond": [17, 18, 31, 32], "cost": 39, "could": 38, "coupl": 3, "cov": 29, "cover": [3, 37], "coverag": 1, "cpu": 3, "creat": [0, 4, 15, 19, 31, 32, 33, 39], "creation": [0, 1, 3], "csv": 33, "cube": [0, 2, 3, 4, 5, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39], "cubed_config": 3, "cubed_spec__allowed_mem": 3, "cubed_spec__executor_nam": 3, "cubed_spec__executor_options__runtim": 3, "cubed_spec__executor_options__runtime_memori": 3, "cubed_spec__executor_options__use_backup": 3, "cubed_spec__work_dir": 3, "cumul": 38, "current": [3, 13, 18, 24, 33, 34, 37, 38], "cutdown": 13, "d": 33, "dag": [2, 33], "dai": 39, "dask": [5, 13, 27, 29, 30, 38, 40], "data": [3, 8, 11, 19, 33, 34, 35, 36, 40], "dataflow": [3, 32, 34, 40], "datafram": 32, "dataset": [34, 38], "daunt": 32, "debug": 33, "decompos": 32, "decompress": 36, "dedic": 39, "deeper": 38, "default": [3, 7, 9, 11, 14, 24, 25, 26, 27, 33, 34, 37, 38, 39], "defin": [5, 32, 38], "delai": [32, 38], "deleg": 5, "delet": 35, "deliber": [3, 40], "demo": [28, 30], "depend": [2, 7, 28, 30, 33, 37, 38], "deploi": 3, "depth": [18, 31], "describ": [27, 34, 37], "descript": 3, "design": [3, 30, 38, 40], "desir": 8, "detail": [2, 3, 31, 34], "determin": [33, 37], "develop": 33, "devic": 1, "diagaram": 36, "diagnos": 35, "diagnost": [29, 30, 35, 38], "diagram": 31, "dict": [3, 11, 18], "dictionari": 11, "differ": [3, 29, 30, 31, 37], "dill": 29, "dimens": 31, "dimension": 40, "dip": 33, "direct": [2, 33], "directli": [3, 31], "directori": [3, 11, 19, 33, 39], "disabl": 11, "disadvantag": [2, 38], "discuss": [2, 34, 36], "disk": [2, 5, 9, 26, 34], "displai": [9, 26, 33, 38], "disproportion": [37, 38, 40], "distribut": [2, 3, 29, 32, 34, 37, 38, 40], "do": [33, 37, 38, 40], "doc": 3, "document": 3, "doe": [34, 39], "doesn": [3, 9, 26, 34, 36], "don": [2, 3, 33, 34, 39], "done": [33, 38], "donfig": 3, "dot": [9, 26], "doubl": 3, "down": 37, "drop": 31, "drop_axi": 17, "dtype": [1, 2, 5, 17, 18, 21, 31, 36], "due": 29, "duplic": 37, "dure": [10, 36], "e": [4, 38], "each": [2, 3, 18, 31, 33, 36, 37, 38], "eager": [24, 25], "easi": 34, "easier": 32, "echo": 33, "edg": 2, "effici": [2, 36], "effort": 40, "element": [18, 21, 31, 38], "elementwis": 38, "elemwis": 30, "embarrassingli": 40, "empti": [1, 31], "empty_lik": 1, "enabl": [33, 37, 38], "encapsul": 3, "endpoint": 1, "engin": [2, 40], "enhanc": 38, "enough": 38, "ensur": [33, 36, 39], "enter": 39, "environ": [2, 4, 34, 38], "equal": 38, "equival": [3, 13], "error": 37, "eschew": 40, "especi": [29, 38], "essenti": 27, "estim": 36, "etc": [11, 30], "evalu": 27, "even": [37, 38, 40], "event": [7, 10, 14, 33], "everi": [2, 5, 18, 34, 38], "everyth": 40, "exampl": [2, 3, 5, 11, 27, 30, 31, 34, 36, 37, 38], "exce": 36, "except": [1, 3, 36, 37], "excess": 34, "exclud": 19, "execut": [30, 36, 38], "executor": [5, 7, 11, 14, 19, 24, 25, 27, 29, 30, 33, 35, 36, 37, 39], "executor_nam": [3, 11, 34], "executor_opt": [3, 11], "exist": 38, "expand": 3, "expect": [37, 38], "explain": 33, "explicitli": 2, "export": 3, "expos": 3, "express": 2, "extens": [5, 9, 26], "extent": 40, "extern": 5, "extra": [1, 18], "extra_projected_mem": 13, "ey": 1, "f": 33, "factor": [36, 38], "fail": [3, 37], "fals": [3, 7, 9, 14, 18, 20, 21, 26, 33, 37, 38], "far": [34, 38], "fashion": 37, "faster": 38, "fault": 37, "featur": [3, 33, 37, 38], "fee": 34, "feed": 38, "few": [1, 5, 37, 38, 40], "fewer": 38, "file": [9, 26, 33, 34, 37, 39], "filenam": [9, 26, 33], "filesystem": 39, "fill_valu": 1, "final": 31, "fine": 32, "first": [31, 33, 36, 38], "firstli": 38, "fit": 34, "five": 5, "fix": 38, "flame": 33, "flamegraph": 33, "flexibl": 32, "float": 23, "follow": [1, 3, 5, 11, 30, 31, 33, 36, 39], "forg": 29, "form": [11, 39], "format": [9, 26, 33], "formerli": 40, "four": [3, 36], "fourier": 1, "framework": 40, "free": 34, "from": [3, 5, 7, 14, 15, 16, 17, 18, 31, 33, 36, 37, 38, 40], "from_arrai": 0, "from_zarr": 0, "fsspec": [3, 11, 19, 39], "full": [1, 29, 38], "full_lik": 1, "func": [13, 17, 18], "function": [1, 2, 3, 5, 7, 9, 13, 14, 17, 18, 19, 26, 29, 30, 31, 33, 34, 36, 38], "function_end_tstamp": 12, "function_start_tstamp": 12, "functionexecutor": 3, "fundament": [31, 32], "further": [36, 40], "fuse": [33, 38], "fusion": [2, 7, 9, 14, 26], "futur": 3, "g": 38, "gain": 40, "gb": 11, "gc": 34, "gcf": 38, "gcp": [3, 29], "gcsf": 29, "gener": [5, 13, 30, 31, 33, 36, 38, 40], "get": [4, 30, 34, 35, 38, 39], "github": 4, "given": [3, 19, 21, 36, 38], "global": 37, "go": [5, 33, 40], "good": [3, 11, 36, 38], "googl": [3, 32, 34, 37, 38, 39, 40], "grain": 32, "graph": [2, 7, 9, 14, 26, 32, 33], "graphic": 33, "graphviz": 29, "greater": 36, "green": [5, 31], "group": [16, 25], "guarante": [30, 34, 38, 40], "guid": [19, 28, 30], "ha": [2, 3, 11, 27, 29, 31, 32, 33, 34, 36, 37, 38, 40], "had": 34, "hadoop": 40, "half": 23, "handi": 3, "handl": [18, 34, 38], "hard": 3, "have": [0, 2, 3, 7, 14, 28, 32, 33, 34, 36, 37, 38], "head": 4, "heavili": [5, 32], "help": [35, 36], "henc": [37, 38], "here": [3, 31, 33, 38, 40], "hidden": [9, 26], "high": [2, 28, 32, 36, 40], "higher": 32, "highest": [34, 36], "hist": 33, "historycallback": 33, "hold": 38, "horizont": [33, 38], "how": [2, 3, 18, 31, 33, 36, 38, 39, 40], "howev": [2, 13, 40], "html": 33, "i": [1, 2, 3, 5, 7, 9, 11, 13, 14, 18, 19, 24, 25, 26, 27, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40], "id": [11, 33], "ideal": [33, 38], "idempot": 37, "ident": 37, "ignor": 20, "illustr": 36, "imag": [3, 9, 26, 33], "immedi": [24, 25, 37], "implement": [1, 5, 19, 24, 27, 30, 31, 32, 40], "implicitli": 2, "import": [3, 9, 26, 27, 33, 34, 36, 38, 39], "importantli": 37, "improv": [33, 36, 38, 40], "includ": [0, 3, 5, 9, 11, 26, 32], "incur": 39, "independ": 38, "index": 31, "indic": 3, "individu": 3, "infinit": 38, "influenc": 32, "inform": [12, 13, 33, 36], "inherit": 5, "input": [3, 16, 17, 18, 31, 36, 38], "instal": [4, 19, 28, 30, 33], "instanc": [3, 38], "instanti": 3, "instead": 40, "instruct": 39, "int": [11, 18, 19], "integr": [30, 32], "intend": 34, "interact": 27, "interest": 40, "intermedi": [2, 3, 7, 11, 14, 19, 33, 35, 38], "intern": 33, "interv": 23, "interven": 32, "intro": 30, "introduc": 35, "introduct": 28, "invok": [2, 3], "involv": [2, 4, 33, 40], "io": [5, 30, 37], "ipython": [9, 26], "issu": [1, 33], "iter": 38, "its": [5, 8, 18, 31, 33, 36, 38], "itself": 36, "jinja2": 29, "job": 39, "jpeg": [9, 26], "jpg": [9, 26], "jupyt": 33, "just": [27, 31, 33], "k": 1, "kb": 11, "keepdim": [13, 20, 21], "kei": [3, 37], "keyword": [1, 3, 18, 19], "kill": 3, "known": [2, 36, 38, 40], "kwarg": [7, 13, 14, 17, 18, 19, 24, 25], "l": 33, "label": 33, "lambda": [34, 38], "larg": [34, 36, 37, 38, 40], "larger": [34, 38], "last": 40, "later": 33, "launch": 37, "layer": [5, 32], "lazi": [2, 27], "lead": [38, 40], "least": 36, "less": 32, "lesser": 40, "let": 5, "level": [2, 28, 32, 40], "librari": [30, 32], "lifecycl": 39, "like": [3, 5, 15, 24, 27, 31, 32, 34, 36, 39, 40], "lilac": 33, "limit": [13, 38], "line": 33, "linear": 38, "linspac": 1, "list": [1, 3, 7, 14, 18, 29], "lithop": [5, 19, 29, 30, 33, 34, 40], "live": 3, "ll": 27, "load": [16, 33], "local": [5, 11, 27, 33, 35, 36, 39], "locat": 3, "logic": 38, "long": [33, 38], "longer": [3, 33, 37, 38], "look": [3, 28, 31], "lot": [39, 40], "lz4": 11, "m": [29, 33], "machin": [27, 35, 36, 38], "made": [3, 40], "magic": 38, "mai": [2, 5, 18, 31, 34, 38, 39], "main": [2, 3], "mainli": 3, "maintain": 38, "major": 40, "make": [2, 32, 36, 38], "manag": [3, 36, 40], "mani": [29, 31], "manipul": 1, "manual": 39, "map": [2, 7, 9, 14, 18, 26, 31, 38], "map_block": [5, 30], "map_direct": 30, "map_overlap": 30, "mapreduc": 40, "mark": [9, 26], "match": [31, 38], "materi": [2, 33], "matplotlib": 29, "matur": [32, 34], "max_tasks_per_child": 3, "max_work": [3, 38], "maximum": [3, 30, 36, 38], "mb": 11, "mean": [3, 5, 20, 33, 36, 37, 38], "measur": [19, 36, 38], "measure_reserved_mem": [36, 38], "memori": [3, 11, 13, 19, 32, 33, 34, 35, 38, 40], "memrai": 35, "messag": 37, "method": [6, 10, 11, 12, 33], "middl": 31, "might": 38, "minim": 29, "minimum": 38, "minut": 34, "mitig": [3, 37], "mock": 29, "modal": [5, 19, 29, 30, 34, 38], "mode": 22, "model": [2, 5, 40], "monitor": 33, "more": [13, 27, 31, 32, 33, 34, 36, 37, 38], "most": [3, 34, 35, 40], "much": [33, 34, 36, 38], "multi": 27, "multipl": [2, 13, 14, 17, 18, 26, 30, 31, 33], "must": [3, 19, 24, 37], "n": [3, 40], "n_col": 1, "n_row": 1, "name": [4, 6, 9, 12, 26, 32, 39], "nan": [20, 21], "natur": [2, 32, 36], "necessari": 38, "need": [2, 5, 13, 31, 33, 36, 37, 38, 39], "neighbor": 18, "neither": 3, "nest": 3, "never": 36, "new": [5, 13, 32, 33, 36, 38], "new_axi": 17, "newer": 32, "next": 38, "node": [2, 33, 40], "non": [3, 11, 30, 36, 38], "none": [1, 3, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "note": [3, 18, 24, 25, 31, 33, 34, 37, 39], "notebook": [9, 26, 33], "noth": [27, 38], "notic": [3, 27], "np": 18, "num": 1, "num_task": 12, "number": [3, 5, 18, 30, 31, 33, 34, 37, 38], "numblock": 31, "numcodec": 11, "numpi": [2, 5, 27, 32], "numpy_groupi": 29, "o": 33, "obj": 1, "object": [2, 10, 15, 19, 24, 27, 39], "observ": 38, "off": [33, 37, 38], "offer": 38, "often": 40, "old": 39, "onc": [14, 33, 37], "one": [0, 2, 3, 18, 31, 33, 37, 38, 39, 40], "ones": [1, 32], "ones_lik": 1, "onli": [2, 3, 7, 9, 14, 18, 26, 31, 32, 33, 34, 37, 38, 40], "op": 33, "open": 23, "oper": [2, 9, 19, 24, 25, 26, 30, 32, 33, 36, 37, 38, 39, 40], "opportun": 2, "optim": [2, 7, 9, 14, 26, 30, 33, 38, 40], "optimize_funct": [7, 9, 14, 26], "optimize_graph": [7, 9, 14, 26, 33], "option": [7, 9, 11, 14, 16, 19, 24, 25, 26, 28, 33], "optional_depend": 29, "orang": [31, 33], "order": [31, 36, 38], "origin": 37, "other": [3, 5, 35], "otherwis": [7, 9, 14, 26], "out": [33, 34, 35, 38, 39], "outer": 31, "output": [2, 9, 13, 18, 25, 26, 31, 33, 36, 37, 38], "output_dtyp": 13, "output_s": 13, "outsid": 3, "over": [4, 18, 21, 31, 39], "overal": [33, 37, 38], "overhead": 34, "overlap": 18, "overview": 28, "own": 38, "packag": [3, 19, 29, 32], "pad_width": 22, "page": [1, 3, 31, 38], "pair": 2, "panda": 29, "paragraph": 37, "parallel": [2, 3, 32, 38, 40], "paramet": [7, 8, 9, 11, 13, 14, 16, 18, 19, 24, 25, 26, 38], "part": [31, 34, 38], "partial_reduc": 31, "particular": [3, 34, 36], "pass": [3, 11, 18, 19, 31, 33, 38, 40], "path": [3, 11, 16, 19, 25], "pdf": [9, 26], "peak": 19, "peak_measured_mem": 36, "peak_measured_mem_end": 12, "peak_measured_mem_start": 12, "per": [13, 38], "perfect": 33, "perform": [7, 9, 14, 26, 31, 33, 35, 36, 40], "period": 39, "persist": [38, 39, 40], "phase": 36, "pink": 31, "pip": [4, 28, 33], "plan": [6, 30, 32, 35, 36, 38], "pleas": 4, "plenti": 36, "plot": 33, "png": [9, 26], "possibl": [3, 28, 36, 38, 40], "potenti": 38, "practic": 35, "pre": 37, "precis": 36, "prefac": 35, "preserv": 31, "previou": [30, 37], "primit": [2, 30, 31, 32], "print": 27, "problem": [38, 40], "process": [2, 5, 19, 24, 25, 32, 33, 34, 36, 37, 38, 40], "processor": 38, "processpoolexecutor": 3, "produc": [9, 18, 26, 33, 36], "profil": 33, "program": [3, 40], "project": [5, 29, 30, 33, 35], "projected_mem": 36, "properli": 36, "properti": 3, "proportion": 38, "provid": [5, 9, 26, 33, 34, 36, 37, 40], "provis": 38, "public": 5, "purpos": 40, "put": [36, 40], "py": 33, "pydot": 29, "pyproject": 29, "pytest": 29, "python": [0, 3, 4, 5, 6, 13, 19, 24, 25, 27, 29, 30, 32, 33, 34, 36], "pywren": 40, "quickli": [28, 34, 37], "r": 4, "rais": 36, "ran": 36, "random": [3, 5, 30, 33], "rather": [31, 39], "re": 38, "read": [31, 32, 33, 36, 37, 38, 40], "readm": 27, "reason": [3, 32, 36, 38], "receiv": 10, "rechunk": [2, 5, 30, 32, 38, 40], "recommend": 34, "recomput": [7, 14], "red": 5, "reduc": [31, 38], "reduct": [30, 36, 38], "refer": [13, 30, 34, 38], "regard": 31, "region": [34, 39], "regular": 39, "rel": 34, "relat": 30, "reli": 37, "reliabl": [30, 34, 35], "remot": 34, "remov": 39, "render": [9, 26, 33], "report": [19, 36], "repres": [31, 33], "represent": [2, 38], "req": 29, "requir": [2, 4, 19, 33, 34, 36, 38, 40], "reserv": [3, 11, 19, 35], "reserved_mem": [3, 11, 19, 36], "resourc": [11, 27, 38], "restrict": 38, "result": [27, 31, 33], "resum": [7, 14], "retain": 33, "retri": [3, 35], "return": [8, 9, 16, 19, 21, 23, 26, 31], "reus": 3, "rich": [29, 33], "richprogressbar": 33, "right": 33, "rm": 39, "room": 36, "round": [31, 33], "rule": [36, 39], "run": [2, 3, 7, 11, 14, 19, 24, 25, 27, 29, 32, 33, 34, 36, 37, 38, 39, 40], "runner": 32, "runtim": [2, 3, 19, 24, 25, 30, 32, 34, 36, 39, 40], "runtime_memori": 3, "s3": [3, 34, 37, 39], "s3f": 29, "same": [3, 31, 38, 39], "save": [24, 25, 33], "scale": [2, 30, 33, 34, 35, 37, 40], "scenario": 38, "schema": 33, "seaborn": 29, "second": [3, 31, 34], "section": 37, "see": [2, 3, 27, 29, 33, 38], "select": [31, 39], "send": [7, 14], "sent": 31, "separ": [29, 33, 38, 39], "serverless": [2, 32, 38, 40], "servic": [35, 36, 38, 39, 40], "set": [2, 3, 7, 11, 13, 14, 19, 29, 34, 36, 37, 38, 39], "sever": 32, "shape": [1, 5, 8, 18, 31], "share": [3, 18], "short": 39, "should": [11, 18, 35, 36, 38, 39], "show": [9, 26, 31, 33, 34], "show_hidden": [9, 26], "shown": [31, 33], "shuffl": [2, 11, 38, 40], "side": 31, "sign": [34, 38], "signatur": 13, "signifi": 33, "signific": 38, "similar": [13, 32], "similarli": [31, 33], "simpl": [3, 27, 33, 34], "simplest": [31, 38], "simpli": 33, "simultan": 38, "sinc": [2, 3, 31, 32, 33, 34, 36, 37, 40], "singl": [27, 31, 32, 33, 35, 37], "size": [2, 23, 31, 33, 35, 38, 40], "slide": 30, "slow": [2, 37], "slowli": 38, "small": [33, 34], "smaller": 36, "so": [3, 27, 32, 33, 34, 36, 37, 38, 39], "solut": 38, "some": [18, 32, 36, 37, 38], "sometim": 34, "sourc": 24, "space": 39, "spark": 40, "spec": [1, 6, 7, 14, 15, 16, 17, 19, 23, 27, 33, 34, 36, 39], "specif": [11, 30, 38], "specifi": [3, 11, 18, 19, 20, 27, 35, 39], "specul": 37, "speed": 38, "spent": [33, 40], "split_everi": [20, 21], "squar": 33, "squeez": 31, "standard": [0, 6, 27, 30, 32], "standardis": 30, "start": [1, 27, 30, 34, 38, 40], "startup": [33, 34, 38], "stat": 33, "stateless": [5, 40], "statist": 33, "statu": 1, "step": [1, 33], "stick": 38, "stop": 1, "storag": [2, 6, 11, 16, 25, 30, 35, 37, 38, 40], "storage_opt": 11, "store": [3, 5, 11, 16, 19, 25, 33, 38, 39], "str": [9, 11, 19, 26], "straggler": [3, 33, 35, 38], "straightforward": [2, 34], "string": [16, 25], "strong": [35, 38], "structur": 31, "style": 3, "submit": 3, "subset": [5, 27], "success": 40, "suffici": 38, "suggest": 38, "suit": 33, "sum": [21, 36], "support": [1, 3, 13, 18, 31, 32], "sure": [38, 39], "svg": [9, 26, 33], "system": [5, 19, 37, 38, 39, 40], "t": [2, 3, 7, 9, 14, 26, 32, 33, 34, 36, 39], "tab": 39, "tail": 33, "take": [3, 33, 37, 38], "taken": 37, "target": [24, 40], "task": [2, 3, 5, 11, 12, 13, 19, 32, 33, 34, 36, 37, 38], "task_create_tstamp": 12, "task_result_tstamp": 12, "tb": 11, "tell": 13, "temp": [3, 34, 39], "tempor": 33, "temporari": [3, 39], "ten": 36, "terabyt": 38, "test": [3, 29, 33, 34], "test_mem_util": 33, "than": [3, 13, 31, 32, 36, 37, 38, 39], "thei": [3, 31, 32, 33, 36, 38], "them": [2, 31, 33, 37, 39], "theme": 40, "theoret": 35, "therebi": [38, 40], "therefor": 34, "thi": [2, 3, 5, 7, 8, 9, 11, 13, 18, 19, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], "thing": 3, "those": 38, "though": [38, 40], "thread": [34, 38], "threadpoolexecutor": 3, "three": [3, 31, 32, 33, 37], "through": [3, 5], "throughput": 38, "thumb": 36, "tightli": [36, 40], "time": [2, 3, 31, 33, 34, 36, 37, 38, 39, 40], "timeline_viz": 33, "timelinevisualizationcallback": 33, "timeout": [3, 35], "tini": [19, 33], "tip": 35, "tmp": 27, "tmpdir": 39, "to_zarr": 33, "togeth": 2, "toler": 37, "toml": 29, "tomwhit": [3, 34, 39], "too": 31, "took": 33, "tool": 33, "top": [5, 31], "total": [3, 11, 37, 38], "tqdm": [29, 33], "tqdmprogressbar": 33, "trace": 33, "track": [1, 33], "traction": 40, "transfer": 34, "transform": 1, "travers": 2, "treat": 21, "tree": 30, "tree_reduc": 31, "trigger": 2, "trim": 18, "trivial": [19, 38], "true": [1, 3, 7, 9, 14, 20, 21, 26, 38], "tune": [38, 40], "tupl": [8, 18], "turn": [3, 31, 33, 37, 38], "twice": 33, "two": [5, 31, 33, 38], "txt": 4, "type": [5, 8, 9, 16, 18, 19, 24, 25, 26, 33, 35], "typic": 39, "ufunc": 13, "under": [3, 33], "underli": 5, "underscor": 3, "understand": [32, 33, 38, 40], "undoubtedli": 40, "unit": [5, 11], "unnecessari": 39, "unpredict": 40, "until": 31, "up": [2, 3, 34, 36, 37, 38, 39], "updat": 37, "upgrad": 38, "upper": 36, "url": [3, 11, 19, 39], "us": [2, 3, 5, 7, 9, 11, 14, 16, 19, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 38, 39, 40], "usag": [13, 30, 36, 38, 40], "use_backup": [3, 37, 38], "use_new_impl": [20, 21], "user": [3, 32, 34, 40], "usual": 33, "util": [32, 36], "v": 35, "valu": [3, 11, 18, 31, 36], "vari": [19, 38], "varieti": [3, 32, 33, 34], "variou": 36, "vector": 13, "veri": [2, 4, 33, 34, 38, 40], "versa": 38, "version": [1, 13, 19], "versu": 38, "vertic": [33, 38], "via": [30, 40], "vice": 38, "view": 33, "violat": 38, "visual": [32, 35], "wa": [5, 32, 33], "wai": [3, 31, 33, 37, 38], "wait": 38, "want": 33, "wasn": 32, "we": [3, 27, 31, 33, 34, 36, 38], "weak": 38, "welcom": 4, "well": [5, 32, 33, 36], "what": [32, 33], "whatev": [31, 36], "when": [2, 3, 11, 19, 32, 33, 34, 36, 37, 38, 39], "where": [2, 11, 32, 38], "wherea": [32, 38], "whether": [3, 18], "which": [2, 3, 5, 9, 11, 26, 27, 29, 31, 32, 33, 35, 36, 38, 39, 40], "while": [2, 7, 14, 31, 33, 36, 38], "white": 31, "who": 38, "whole": 37, "why": 30, "widespread": 40, "within": [3, 36], "without": [8, 31, 38], "won": [7, 14], "word": 38, "work": [19, 30, 31, 33, 34, 36, 37, 39, 40], "work_dir": [3, 11, 19, 27, 34, 39], "worker": [3, 11, 33, 34, 36, 38, 40], "would": [33, 36, 38, 39], "write": [2, 9, 24, 26, 33, 34, 36, 37, 38, 39, 40], "written": [2, 33, 37], "x": [1, 15, 20, 21, 22, 24, 25], "xarrai": 30, "xp": [3, 27, 33], "yaml": 34, "year": [32, 40], "yet": [0, 27], "you": [3, 13, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39], "your": [3, 33, 34, 36, 38], "zappi": 32, "zarr": [2, 5, 6, 11, 16, 24, 25, 30, 33, 34, 36, 37, 38, 39, 40], "zarr_compressor": 11, "zarrai": 6, "zero": [1, 21], "zeros_lik": 1}, "titles": ["API Reference", "Python Array API", "Computation", "Configuration", "Contributing", "Design", "cubed.Array", "cubed.Array.compute", "cubed.Array.rechunk", "cubed.Array.visualize", "cubed.Callback", "cubed.Spec", "cubed.TaskEndEvent", "cubed.apply_gufunc", "cubed.compute", "cubed.from_array", "cubed.from_zarr", "cubed.map_blocks", "cubed.map_overlap", "cubed.measure_reserved_mem", "cubed.nanmean", "cubed.nansum", "cubed.pad", "cubed.random.random", "cubed.store", "cubed.to_zarr", "cubed.visualize", "Demo", "Getting Started", "Installation", "Cubed", "Operations", "Related Projects", "Diagnostics", "Executors", "User Guide", "Memory", "Reliability", "Scaling", "Storage", "Why Cubed?"], "titleterms": {"For": 30, "allow": 36, "an": 34, "api": [0, 1, 5], "apply_gufunc": 13, "arg_reduct": 31, "arrai": [0, 1, 5, 6, 7, 8, 9, 30], "articl": 30, "bar": 33, "beam": 3, "between": 1, "blockwis": 31, "bound": 30, "calcul": 38, "callback": [10, 33], "chunk": [0, 36], "cloud": [34, 38, 39], "coil": 3, "comput": [2, 7, 14, 33], "conda": 29, "configur": 3, "consider": 38, "consist": 37, "contribut": 4, "core": 5, "cube": [1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 38, 40], "dask": [3, 32], "data": 39, "delet": 39, "demo": 27, "depend": [29, 31], "design": 5, "develop": [4, 30], "diagnos": 38, "diagnost": 33, "differ": [1, 38], "dimension": 30, "distribut": 30, "document": 30, "elemwis": 31, "environ": 3, "exampl": 33, "execut": 2, "executor": [3, 34, 38], "file": 3, "from_arrai": 15, "from_zarr": 16, "function": 0, "gener": 0, "get": 28, "guid": 35, "histori": 33, "i": 34, "instal": 29, "intermedi": 39, "io": 0, "lithop": 3, "local": 34, "machin": 34, "map_block": [17, 31], "map_direct": 31, "map_overlap": 18, "measure_reserved_mem": 19, "memori": [2, 30, 36], "memrai": 33, "modal": 3, "multi": 38, "n": 30, "nanmean": 20, "nansum": 21, "non": 0, "number": 0, "object": 3, "oper": [5, 31], "option": [3, 29], "other": 38, "pad": 22, "perform": 38, "pip": 29, "pipelin": 38, "plan": [2, 33], "practic": 38, "prefac": 38, "previou": 32, "primit": 5, "process": [3, 30], "progress": 33, "project": [32, 36], "provid": 38, "python": 1, "random": [0, 23], "rechunk": [8, 31], "reduct": 31, "refer": [0, 3], "relat": 32, "reliabl": 37, "reserv": 36, "retri": 37, "runtim": [0, 5], "scale": 38, "serverless": 30, "servic": 34, "should": 34, "singl": [3, 34, 38], "size": 36, "spec": [3, 11], "specif": [0, 3], "specifi": 34, "standard": 1, "standardis": 0, "start": 28, "step": 38, "storag": [5, 39], "store": 24, "straggler": 37, "strong": 37, "taskendev": 12, "theoret": 38, "thread": 3, "timelin": 33, "timeout": 37, "tip": 38, "to_zarr": 25, "tree": 31, "type": 38, "us": [33, 34], "user": [30, 35], "v": 38, "variabl": 3, "visual": [9, 26, 33], "which": 34, "why": 40, "work": 32, "xarrai": 32, "yaml": 3}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"API Reference": [[0, null]], "Advanced settings": [[37, "advanced-settings"]], "Allowed memory": [[36, "allowed-memory"]], "Array": [[0, "array"]], "Array API": [[5, "array-api"]], "Articles": [[30, "articles"]], "Bounded-memory serverless distributed N-dimensional array processing": [[30, "bounded-memory-serverless-distributed-n-dimensional-array-processing"]], "Callbacks": [[33, "callbacks"]], "Chunk sizes": [[36, "chunk-sizes"]], "Chunk-specific functions": [[0, "chunk-specific-functions"]], "Cloud storage": [[40, "cloud-storage"]], "Computation": [[2, null]], "Conda": [[29, "conda"]], "Configuration": [[3, null]], "Contributing": [[4, null]], "Core operations": [[5, "core-operations"]], "Cubed": [[30, null]], "Dask": [[32, "dask"]], "Debugging optimization": [[37, "debugging-optimization"]], "Deleting intermediate data": [[40, "deleting-intermediate-data"]], "Demo": [[27, null]], "Dependency Tree": [[31, "dependency-tree"]], "Design": [[5, null]], "Development": [[4, "development"]], "Diagnosing Performance": [[39, "diagnosing-performance"]], "Diagnostics": [[33, null]], "Differences between Cubed and the standard": [[1, "differences-between-cubed-and-the-standard"]], "Different Cloud Providers": [[39, "different-cloud-providers"]], "Different Executors": [[39, "different-executors"]], "Documentation": [[30, "documentation"]], "Environment variables": [[3, "environment-variables"]], "Examples in use": [[33, "examples-in-use"]], "Execution": [[2, "execution"]], "Executor options": [[3, "executor-options"]], "Executors": [[34, null]], "For developers": [[30, null]], "For users": [[30, null]], "Getting Started": [[28, null]], "History": [[33, "history"]], "IO": [[0, "io"]], "Installation": [[29, null]], "Local single-machine executors": [[34, "local-single-machine-executors"]], "Map fusion": [[37, "map-fusion"]], "Memory": [[2, "memory"], [36, null]], "Memray": [[33, "memray"]], "Multi-pipeline Calculation": [[39, "multi-pipeline-calculation"]], "Multi-step Calculation": [[39, "multi-step-calculation"]], "Multiple-input fusion": [[37, "multiple-input-fusion"]], "Non-standardised functions": [[0, "non-standardised-functions"]], "Operations": [[31, null]], "Optimization": [[37, null]], "Optional dependencies": [[29, "optional-dependencies"]], "Other Performance Considerations": [[39, "other-performance-considerations"]], "Pip": [[29, "pip"]], "Plan": [[2, "plan"]], "Preface: Types of Scaling": [[39, "preface-types-of-scaling"]], "Previous work": [[32, "previous-work"]], "Primitive operations": [[5, "primitive-operations"]], "Progress bar": [[33, "progress-bar"]], "Projected memory": [[36, "projected-memory"]], "Python Array API": [[1, null]], "Random number generation": [[0, "random-number-generation"]], "Reference": [[3, "reference"]], "Related Projects": [[32, null]], "Reliability": [[38, null]], "Reserved memory": [[36, "reserved-memory"]], "Retries": [[38, "retries"]], "Runtime": [[0, "runtime"], [5, "runtime"]], "Scaling": [[39, null]], "Single-step Calculation": [[39, "single-step-calculation"]], "Spec object": [[3, "spec-object"]], "Spec options": [[3, "spec-options"]], "Specification": [[3, "specification"]], "Specifying an executor": [[34, "specifying-an-executor"]], "Storage": [[5, "storage"], [40, null]], "Stragglers": [[38, "stragglers"]], "Strong consistency": [[38, "strong-consistency"]], "Theoretical vs Practical Scaling of Cubed": [[39, "theoretical-vs-practical-scaling-of-cubed"]], "Timeline": [[33, "timeline"]], "Timeouts": [[38, "timeouts"]], "Tips": [[39, "tips"]], "Total number of input blocks": [[37, "total-number-of-input-blocks"]], "Total number of source arrays": [[37, "total-number-of-source-arrays"]], "User Guide": [[35, null]], "Visualize the computation plan": [[33, "visualize-the-computation-plan"]], "Which cloud service executor should I use?": [[34, "which-cloud-service-executor-should-i-use"]], "Why Cubed?": [[41, null]], "Xarray": [[32, "xarray"]], "YAML file": [[3, "yaml-file"]], "beam": [[3, "beam"]], "blockwise": [[31, "blockwise"]], "coiled": [[3, "coiled"]], "cubed.Array": [[6, null]], "cubed.Array.compute": [[7, null]], "cubed.Array.rechunk": [[8, null]], "cubed.Array.visualize": [[9, null]], "cubed.Callback": [[10, null]], "cubed.Spec": [[11, null]], "cubed.TaskEndEvent": [[12, null]], "cubed.apply_gufunc": [[13, null]], "cubed.compute": [[14, null]], "cubed.from_array": [[15, null]], "cubed.from_zarr": [[16, null]], "cubed.map_blocks": [[17, null]], "cubed.map_overlap": [[18, null]], "cubed.measure_reserved_mem": [[19, null]], "cubed.nanmean": [[20, null]], "cubed.nansum": [[21, null]], "cubed.pad": [[22, null]], "cubed.random.random": [[23, null]], "cubed.store": [[24, null]], "cubed.to_zarr": [[25, null]], "cubed.visualize": [[26, null]], "dask": [[3, "dask"]], "elemwise": [[31, "elemwise"]], "lithops": [[3, "lithops"]], "map_blocks": [[31, "map-blocks"]], "map_direct": [[31, "map-direct"]], "modal": [[3, "modal"]], "processes": [[3, "processes"]], "rechunk": [[31, "rechunk"]], "reduction and arg_reduction": [[31, "reduction-and-arg-reduction"]], "single-threaded": [[3, "single-threaded"]], "threads": [[3, "threads"]]}, "docnames": ["api", "array-api", "computation", "configuration", "contributing", "design", "generated/cubed.Array", "generated/cubed.Array.compute", "generated/cubed.Array.rechunk", "generated/cubed.Array.visualize", "generated/cubed.Callback", "generated/cubed.Spec", "generated/cubed.TaskEndEvent", "generated/cubed.apply_gufunc", "generated/cubed.compute", "generated/cubed.from_array", "generated/cubed.from_zarr", "generated/cubed.map_blocks", "generated/cubed.map_overlap", "generated/cubed.measure_reserved_mem", "generated/cubed.nanmean", "generated/cubed.nansum", "generated/cubed.pad", "generated/cubed.random.random", "generated/cubed.store", "generated/cubed.to_zarr", "generated/cubed.visualize", "getting-started/demo", "getting-started/index", "getting-started/installation", "index", "operations", "related-projects", "user-guide/diagnostics", "user-guide/executors", "user-guide/index", "user-guide/memory", "user-guide/optimization", "user-guide/reliability", "user-guide/scaling", "user-guide/storage", "why-cubed"], "envversion": {"sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["api.rst", "array-api.md", "computation.md", "configuration.md", "contributing.md", "design.md", "generated/cubed.Array.rst", "generated/cubed.Array.compute.rst", "generated/cubed.Array.rechunk.rst", "generated/cubed.Array.visualize.rst", "generated/cubed.Callback.rst", "generated/cubed.Spec.rst", "generated/cubed.TaskEndEvent.rst", "generated/cubed.apply_gufunc.rst", "generated/cubed.compute.rst", "generated/cubed.from_array.rst", "generated/cubed.from_zarr.rst", "generated/cubed.map_blocks.rst", "generated/cubed.map_overlap.rst", "generated/cubed.measure_reserved_mem.rst", "generated/cubed.nanmean.rst", "generated/cubed.nansum.rst", "generated/cubed.pad.rst", "generated/cubed.random.random.rst", "generated/cubed.store.rst", "generated/cubed.to_zarr.rst", "generated/cubed.visualize.rst", "getting-started/demo.md", "getting-started/index.md", "getting-started/installation.md", "index.md", "operations.md", "related-projects.md", "user-guide/diagnostics.md", "user-guide/executors.md", "user-guide/index.md", "user-guide/memory.md", "user-guide/optimization.md", "user-guide/reliability.md", "user-guide/scaling.md", "user-guide/storage.md", "why-cubed.md"], "indexentries": {"__init__() (cubed.array method)": [[6, "cubed.Array.__init__", false]], "__init__() (cubed.callback method)": [[10, "cubed.Callback.__init__", false]], "__init__() (cubed.spec method)": [[11, "cubed.Spec.__init__", false]], "__init__() (cubed.taskendevent method)": [[12, "cubed.TaskEndEvent.__init__", false]], "apply_gufunc() (in module cubed)": [[13, "cubed.apply_gufunc", false]], "arange() (in module cubed.array_api)": [[1, "cubed.array_api.arange", false]], "array (class in cubed)": [[6, "cubed.Array", false]], "asarray() (in module cubed.array_api)": [[1, "cubed.array_api.asarray", false]], "broadcast_to() (in module cubed.array_api)": [[1, "cubed.array_api.broadcast_to", false]], "callback (class in cubed)": [[10, "cubed.Callback", false]], "compute() (cubed.array method)": [[7, "cubed.Array.compute", false]], "compute() (in module cubed)": [[14, "cubed.compute", false]], "concat() (in module cubed.array_api)": [[1, "cubed.array_api.concat", false]], "empty() (in module cubed.array_api)": [[1, "cubed.array_api.empty", false]], "empty_like() (in module cubed.array_api)": [[1, "cubed.array_api.empty_like", false]], "eye() (in module cubed.array_api)": [[1, "cubed.array_api.eye", false]], "from_array() (in module cubed)": [[15, "cubed.from_array", false]], "from_zarr() (in module cubed)": [[16, "cubed.from_zarr", false]], "full() (in module cubed.array_api)": [[1, "cubed.array_api.full", false]], "full_like() (in module cubed.array_api)": [[1, "cubed.array_api.full_like", false]], "linspace() (in module cubed.array_api)": [[1, "cubed.array_api.linspace", false]], "map_blocks() (in module cubed)": [[17, "cubed.map_blocks", false]], "map_overlap() (in module cubed)": [[18, "cubed.map_overlap", false]], "measure_reserved_mem() (in module cubed)": [[19, "cubed.measure_reserved_mem", false]], "nanmean() (in module cubed)": [[20, "cubed.nanmean", false]], "nansum() (in module cubed)": [[21, "cubed.nansum", false]], "ones() (in module cubed.array_api)": [[1, "cubed.array_api.ones", false]], "ones_like() (in module cubed.array_api)": [[1, "cubed.array_api.ones_like", false]], "pad() (in module cubed)": [[22, "cubed.pad", false]], "random() (in module cubed.random)": [[23, "cubed.random.random", false]], "rechunk() (cubed.array method)": [[8, "cubed.Array.rechunk", false]], "spec (class in cubed)": [[11, "cubed.Spec", false]], "store() (in module cubed)": [[24, "cubed.store", false]], "taskendevent (class in cubed)": [[12, "cubed.TaskEndEvent", false]], "to_zarr() (in module cubed)": [[25, "cubed.to_zarr", false]], "visualize() (cubed.array method)": [[9, "cubed.Array.visualize", false]], "visualize() (in module cubed)": [[26, "cubed.visualize", false]], "zeros() (in module cubed.array_api)": [[1, "cubed.array_api.zeros", false]], "zeros_like() (in module cubed.array_api)": [[1, "cubed.array_api.zeros_like", false]]}, "objects": {"cubed": [[6, 0, 1, "", "Array"], [10, 0, 1, "", "Callback"], [11, 0, 1, "", "Spec"], [12, 0, 1, "", "TaskEndEvent"], [13, 2, 1, "", "apply_gufunc"], [14, 2, 1, "", "compute"], [15, 2, 1, "", "from_array"], [16, 2, 1, "", "from_zarr"], [17, 2, 1, "", "map_blocks"], [18, 2, 1, "", "map_overlap"], [19, 2, 1, "", "measure_reserved_mem"], [20, 2, 1, "", "nanmean"], [21, 2, 1, "", "nansum"], [22, 2, 1, "", "pad"], [24, 2, 1, "", "store"], [25, 2, 1, "", "to_zarr"], [26, 2, 1, "", "visualize"]], "cubed.Array": [[6, 1, 1, "", "__init__"], [7, 1, 1, "", "compute"], [8, 1, 1, "", "rechunk"], [9, 1, 1, "", "visualize"]], "cubed.Callback": [[10, 1, 1, "", "__init__"]], "cubed.Spec": [[11, 1, 1, "", "__init__"]], "cubed.TaskEndEvent": [[12, 1, 1, "", "__init__"]], "cubed.array_api": [[1, 2, 1, "", "arange"], [1, 2, 1, "", "asarray"], [1, 2, 1, "", "broadcast_to"], [1, 2, 1, "", "concat"], [1, 2, 1, "", "empty"], [1, 2, 1, "", "empty_like"], [1, 2, 1, "", "eye"], [1, 2, 1, "", "full"], [1, 2, 1, "", "full_like"], [1, 2, 1, "", "linspace"], [1, 2, 1, "", "ones"], [1, 2, 1, "", "ones_like"], [1, 2, 1, "", "zeros"], [1, 2, 1, "", "zeros_like"]], "cubed.random": [[23, 2, 1, "", "random"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:function"}, "terms": {"": [3, 5, 7, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41], "0": [1, 11, 23, 29, 33], "00": 33, "001": [33, 37], "002": [33, 37], "003": [33, 37], "004": 37, "005": 37, "1": [1, 11, 12, 23, 27, 33, 34, 37, 40], "10": [4, 27, 37], "100": 33, "1000": 34, "10000": 33, "100kb": 27, "100mb": [3, 36, 39], "11": [3, 33], "12": 1, "180": 3, "2": [3, 11, 27, 29, 33, 34, 37], "20": [34, 36], "2000": 3, "200mb": [3, 33], "2022": 1, "2023": 1, "2gb": [3, 34, 36, 39], "3": [3, 4, 27, 33, 37], "300": 3, "4": [27, 33, 37], "400mb": 33, "438": 1, "5": [27, 33, 37], "5000": [3, 33], "50000": 3, "6": [27, 33, 37], "7": [27, 29, 33, 37], "8": [27, 33, 37], "9": [27, 33, 37], "A": [0, 2, 3, 34, 36, 38, 39, 41], "And": [32, 37], "As": [2, 36], "At": 34, "By": [33, 37, 40], "For": [2, 36, 38, 39, 40], "If": [3, 7, 9, 11, 14, 26, 33, 34, 36, 37, 38, 40], "In": [24, 31, 32, 33, 36, 37, 39, 40], "It": [3, 5, 19, 31, 32, 33, 34], "No": 31, "Not": 31, "On": [37, 40], "One": [2, 3, 39], "Or": [2, 3], "The": [1, 2, 3, 5, 7, 8, 9, 11, 14, 16, 18, 19, 24, 25, 26, 31, 32, 33, 34, 36, 37, 39, 40], "Then": 33, "There": [3, 5, 33, 36, 37, 39], "These": [0, 3, 5, 37], "To": [3, 29, 33, 37, 38, 39, 40], "With": 39, "__init__": [6, 10, 11, 12], "abil": 36, "about": [12, 13, 32, 33], "abov": [33, 34, 37], "abstract": [32, 41], "accept": 1, "access": 31, "account": 34, "accur": 36, "achiev": 39, "act": 38, "activ": 4, "actual": [3, 33, 36], "acycl": [2, 33], "ad": [2, 33, 39], "adapt": 33, "add": [3, 27, 31, 33, 37, 39, 40], "addit": [33, 37], "adjust": 39, "adopt": 41, "advanc": 35, "advantag": [2, 32, 39], "affect": [33, 39], "after": [8, 18, 33, 38, 40], "ag": 40, "again": [37, 38], "aggregr": 31, "ahead": [2, 36], "aim": [28, 36, 39], "algorithm": [5, 31, 36], "all": [3, 5, 31, 33, 34, 39, 41], "alloc": [13, 33, 41], "allow": [31, 35, 37, 38], "allow_rechunk": 13, "allowed_mem": [3, 11, 27, 34, 36, 39], "alon": 33, "along": [20, 31], "alreadi": [7, 14], "also": [2, 3, 27, 29, 34, 38, 39], "although": [31, 34], "alwai": [33, 41], "amazon": [34, 38], "amount": [13, 19, 33, 34, 36, 37, 38, 39, 41], "an": [2, 3, 4, 8, 9, 11, 15, 16, 19, 22, 25, 26, 28, 31, 33, 35, 36, 37, 38, 39, 41], "analys": 36, "ani": [3, 7, 11, 19, 33, 34, 37, 39, 40], "annot": 33, "anoth": [2, 36, 38, 39, 41], "anyth": 3, "apach": [5, 29, 30, 41], "api": [6, 27, 30, 31, 32], "appli": [13, 17, 18, 31, 39], "applic": 5, "apply_gufunc": 30, "approach": [40, 41], "appropri": [3, 40], "ar": [0, 1, 2, 3, 4, 5, 9, 13, 26, 29, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41], "arang": 1, "arbitrari": 11, "arg": [13, 17, 18], "arg_reduct": 30, "argument": [1, 3, 18, 19, 33, 37], "arithmet": 20, "around": [36, 39], "arrai": [2, 3, 10, 13, 14, 15, 16, 17, 18, 21, 22, 24, 25, 26, 27, 31, 32, 33, 34, 36, 39, 40, 41], "arrang": 31, "array_api": [1, 3, 27, 33, 37], "arrow": 31, "asarrai": [1, 15, 27, 33, 37], "assum": 13, "astyp": 37, "atom": 38, "attempt": [3, 38, 41], "attribut": [5, 6, 11, 12, 31], "auto": [1, 15], "automat": [3, 33, 34, 36, 37, 39, 40], "avail": [3, 11, 27, 36, 38], "averag": 39, "avoid": [31, 41], "aw": [3, 29, 34, 39, 40], "awai": [37, 41], "ax": [13, 31], "axi": [1, 13, 20, 21, 31], "b": [3, 27, 33, 37], "back": [5, 6, 33, 34], "backup": [3, 38, 39], "bag": 32, "base": 39, "baselin": 36, "basi": 36, "basic": [3, 36], "basicconfig": 37, "batch": 3, "batch_siz": 3, "beam": [5, 29, 30, 32, 39, 41], "becaus": [34, 36], "been": [0, 3, 7, 11, 14, 27, 32, 33, 34, 37, 38, 39, 41], "befor": [2, 3, 7, 9, 14, 26, 33, 34, 37, 39, 40], "being": 37, "below": [3, 34, 36, 37], "better": 32, "between": [30, 31, 41], "big": 39, "bin": 33, "block": [5, 17, 18, 31, 33, 39], "blockwis": [2, 30, 32, 37], "blosc": 11, "blue": 5, "bool": [7, 9, 14, 18, 26], "both": [2, 32, 37, 38, 39], "bottom": [5, 31], "bound": [32, 36, 39, 41], "boundari": [18, 31], "box": 33, "branch": 39, "break": 41, "bring": 38, "broadcast": 31, "broadcast_to": 1, "bucket": 40, "budget": 36, "buffer": 33, "build": [2, 34, 36], "built": [2, 5], "bulk": 41, "byte": [11, 13, 19], "c": [3, 27, 29, 33, 37], "calcul": 36, "call": [2, 18, 31, 32, 33, 34, 37, 38], "callabl": [7, 9, 14, 18, 26], "callback": [7, 12, 14, 35], "can": [0, 2, 3, 9, 11, 19, 26, 29, 32, 33, 34, 36, 37, 38, 39, 40, 41], "cancel": 38, "cannot": 39, "carefulli": 41, "carri": 39, "case": [33, 36, 37, 39, 40, 41], "cd": 33, "central": 41, "certain": [38, 40], "challeng": 41, "chang": [3, 8, 31, 32, 33, 37, 39], "characterist": 39, "check": 36, "child": 3, "choic": 33, "choos": 2, "chosen": 5, "chunk": [1, 2, 3, 5, 6, 8, 15, 17, 18, 22, 23, 27, 30, 31, 32, 33, 34, 35, 37, 38, 39, 41], "circumst": 38, "class": [6, 10, 11, 12], "clean": 40, "clear": 40, "clevel": 11, "click": 40, "client": [3, 29, 38], "cloud": [3, 5, 19, 27, 32, 35, 36, 38, 41], "cluster": [34, 39], "clutter": 31, "cname": 11, "code": 3, "coil": [29, 34], "coiled_kwarg": 3, "collect": [24, 33], "colour": 33, "come": [34, 39], "command": 40, "common": [36, 41], "commonli": 37, "compar": 34, "complet": [12, 29, 33, 38, 39], "complex": [36, 39], "compon": 32, "compos": [5, 31], "compress": [11, 33, 36], "compressor": 11, "comput": [3, 5, 9, 10, 11, 16, 19, 20, 24, 25, 26, 27, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41], "compute_arrays_in_parallel": [3, 39], "compute_kwarg": 3, "concat": [1, 31], "concept": 35, "concern": 32, "concurr": [3, 39], "conda": [4, 28], "confid": 36, "configur": [11, 30, 34, 36, 38, 39, 41], "conflict": 29, "conform": 6, "conserv": 36, "consid": [38, 39], "consider": 35, "consist": 35, "consol": 40, "constant": [18, 33], "constraint": 39, "construct": 3, "constructor": 3, "consult": 31, "contain": 36, "continu": 32, "contribut": 30, "control": 41, "conveni": 40, "convent": 27, "convert": [2, 32, 33, 39], "copi": 1, "core": [3, 27, 30, 31, 32, 34, 37], "corearrai": [8, 14, 26], "corner": 33, "correspond": [17, 18, 31, 32], "cost": 40, "could": 39, "coupl": 3, "cov": 29, "cover": [3, 38], "coverag": 1, "cpu": 3, "creat": [0, 4, 15, 19, 31, 32, 33, 37, 40], "creation": [0, 1, 3], "csv": 33, "cube": [0, 2, 3, 4, 5, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40], "cubed_config": 3, "cubed_spec__allowed_mem": 3, "cubed_spec__executor_nam": 3, "cubed_spec__executor_options__runtim": 3, "cubed_spec__executor_options__runtime_memori": 3, "cubed_spec__executor_options__use_backup": 3, "cubed_spec__work_dir": 3, "cumul": 39, "current": [3, 13, 18, 24, 33, 34, 38, 39], "cutdown": 13, "d": [33, 37], "dag": [2, 33], "dai": 40, "dask": [5, 13, 27, 29, 30, 39, 41], "data": [3, 8, 11, 19, 33, 34, 35, 36, 37, 41], "dataflow": [3, 32, 34, 41], "datafram": 32, "dataset": [34, 39], "daunt": 32, "debug": [33, 35], "decompos": 32, "decompress": 36, "dedic": 40, "deeper": 39, "default": [3, 7, 9, 11, 14, 24, 25, 26, 27, 33, 34, 37, 38, 39, 40], "defin": [5, 32, 39], "delai": [32, 39], "deleg": 5, "delet": 35, "deliber": [3, 41], "demo": [28, 30], "depend": [2, 7, 28, 30, 33, 38, 39], "deploi": 3, "depth": [18, 31], "describ": [27, 34, 38], "descript": 3, "design": [3, 30, 39, 41], "desir": 8, "detail": [2, 3, 31, 34, 37], "determin": [33, 38], "develop": 33, "devic": 1, "diagaram": 36, "diagnos": 35, "diagnost": [29, 30, 35, 39], "diagram": 31, "dict": [3, 11, 18], "dictionari": 11, "differ": [3, 29, 30, 31, 37, 38], "difficult": 37, "dill": 29, "dimens": 31, "dimension": 41, "dip": 33, "direct": [2, 33], "directli": [3, 31], "directori": [3, 11, 19, 33, 40], "disabl": 11, "disadvantag": [2, 39], "discuss": [2, 34, 36], "disk": [2, 5, 9, 26, 34], "displai": [9, 26, 33, 39], "disproportion": [38, 39, 41], "distribut": [2, 3, 29, 32, 34, 38, 39, 41], "do": [33, 38, 39, 41], "doc": 3, "document": 3, "doe": [34, 37, 40], "doesn": [3, 9, 26, 34, 36], "don": [2, 3, 33, 34, 40], "done": [33, 39], "donfig": 3, "dot": [9, 26], "doubl": 3, "down": 38, "drop": 31, "drop_axi": 17, "dtype": [1, 2, 5, 17, 18, 21, 31, 36], "due": 29, "duplic": 38, "dure": [10, 36], "e": [4, 37, 39], "each": [2, 3, 18, 31, 33, 36, 38, 39], "eager": [24, 25], "easi": 34, "easier": 32, "echo": 33, "edg": 2, "effect": 37, "effici": [2, 36], "effort": 41, "either": 37, "element": [18, 21, 31, 39], "elementwis": 39, "elemwis": 30, "embarrassingli": 41, "empti": [1, 31], "empty_lik": 1, "enabl": [33, 37, 38, 39], "encapsul": 3, "endpoint": 1, "engin": [2, 41], "enhanc": 39, "enough": 39, "ensur": [33, 36, 40], "enter": 40, "environ": [2, 4, 34, 39], "equal": 39, "equival": [3, 13], "error": 38, "eschew": 41, "especi": [29, 39], "essenti": 27, "estim": 36, "etc": [11, 30], "evalu": 27, "even": [38, 39, 41], "event": [7, 10, 14, 33], "everi": [2, 5, 18, 34, 39], "everyth": 41, "exampl": [2, 3, 5, 11, 27, 30, 31, 34, 36, 37, 38, 39], "exce": [36, 37], "except": [1, 3, 36, 38], "excess": [34, 37], "exclud": 19, "execut": [30, 36, 39], "executor": [5, 7, 11, 14, 19, 24, 25, 27, 29, 30, 33, 35, 36, 38, 40], "executor_nam": [3, 11, 34], "executor_opt": [3, 11], "exist": 39, "expand": 3, "expect": [38, 39], "explain": [33, 37], "explicitli": 2, "export": 3, "expos": 3, "express": 2, "extens": [5, 9, 26], "extent": 41, "extern": 5, "extra": [1, 18], "extra_projected_mem": 13, "ey": 1, "f": 33, "factor": [36, 39], "fail": [3, 38], "fals": [3, 7, 9, 14, 18, 20, 21, 26, 33, 37, 38, 39], "fan": 37, "far": [34, 39], "fashion": 38, "faster": 39, "fault": 38, "featur": [3, 33, 38, 39], "fee": 34, "feed": 39, "few": [1, 5, 38, 39, 41], "fewer": 39, "file": [9, 26, 33, 34, 38, 40], "filenam": [9, 26, 33], "filesystem": 40, "fill_valu": 1, "final": 31, "fine": 32, "first": [31, 33, 36, 37, 39], "firstli": 39, "fit": 34, "five": 5, "fix": 39, "flame": 33, "flamegraph": 33, "flexibl": 32, "float": 23, "float32": 37, "follow": [1, 3, 5, 11, 30, 31, 33, 36, 37, 40], "forg": 29, "form": [11, 40], "format": [9, 26, 33], "formerli": 41, "four": [3, 36], "fourier": 1, "framework": 41, "free": 34, "from": [3, 5, 7, 14, 15, 16, 17, 18, 31, 33, 36, 37, 38, 39, 41], "from_arrai": 0, "from_zarr": 0, "fsspec": [3, 11, 19, 40], "fuctool": 37, "full": [1, 29, 39], "full_lik": 1, "func": [13, 17, 18], "function": [1, 2, 3, 5, 7, 9, 13, 14, 17, 18, 19, 26, 29, 30, 31, 33, 34, 36, 37, 39], "function_end_tstamp": 12, "function_start_tstamp": 12, "functionexecutor": 3, "functool": 37, "fundament": [31, 32], "further": [36, 41], "fuse": [33, 37, 39], "fusion": [2, 7, 9, 14, 26, 35], "futur": 3, "g": 39, "gain": 41, "gb": 11, "gc": 34, "gcf": 39, "gcp": [3, 29], "gcsf": 29, "gener": [5, 13, 30, 31, 33, 36, 39, 41], "get": [4, 30, 34, 35, 37, 39, 40], "github": 4, "given": [3, 19, 21, 36, 39], "global": 38, "go": [5, 33, 41], "good": [3, 11, 36, 39], "googl": [3, 32, 34, 38, 39, 40, 41], "grain": 32, "graph": [2, 7, 9, 14, 26, 32, 33, 37], "graphic": 33, "graphviz": 29, "greater": 36, "green": [5, 31], "group": [16, 25], "guarante": [30, 34, 39, 41], "guid": [19, 28, 30], "ha": [2, 3, 11, 27, 29, 31, 32, 33, 34, 36, 37, 38, 39, 41], "had": 34, "hadoop": 41, "half": 23, "hand": 37, "handi": 3, "handl": [18, 34, 39], "hard": 3, "have": [0, 2, 3, 7, 14, 28, 32, 33, 34, 36, 37, 38, 39], "head": 4, "heavili": [5, 32], "help": [35, 36, 37], "henc": [38, 39], "here": [3, 31, 33, 37, 39, 41], "hidden": [9, 26], "high": [2, 28, 32, 36, 41], "higher": [32, 37], "highest": [34, 36], "hist": 33, "historycallback": 33, "hold": 39, "horizont": [33, 39], "how": [2, 3, 18, 31, 33, 36, 37, 39, 40, 41], "howev": [2, 13, 41], "html": 33, "i": [1, 2, 3, 5, 7, 9, 11, 13, 14, 18, 19, 24, 25, 26, 27, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41], "id": [11, 33], "ideal": [33, 39], "idempot": 38, "ident": 38, "ignor": 20, "illustr": 36, "imag": [3, 9, 26, 33], "immedi": [24, 25, 38], "implement": [1, 5, 19, 24, 27, 30, 31, 32, 41], "implicitli": 2, "import": [3, 9, 26, 27, 33, 34, 36, 37, 39, 40], "importantli": 38, "impos": 37, "improv": [33, 36, 39, 41], "includ": [0, 3, 5, 9, 11, 26, 32], "incur": 40, "independ": 39, "index": 31, "indic": 3, "individu": [3, 37], "infinit": 39, "influenc": 32, "inform": [12, 13, 33, 36, 37], "inherit": 5, "input": [3, 16, 17, 18, 31, 35, 36, 39], "instal": [4, 19, 28, 30, 33], "instanc": [3, 39], "instanti": 3, "instead": 41, "instruct": 40, "int": [11, 18, 19], "integ": 37, "integr": [30, 32], "intend": 34, "interact": 27, "interest": 41, "intermedi": [2, 3, 7, 11, 14, 19, 33, 35, 37, 39], "intern": 33, "interv": 23, "interven": 32, "intro": 30, "introduc": 35, "introduct": 28, "invok": [2, 3], "involv": [2, 4, 33, 41], "io": [5, 30, 37, 38], "ipython": [9, 26], "issu": [1, 33], "iter": 39, "its": [5, 8, 18, 31, 33, 36, 37, 39], "itself": 36, "jinja2": 29, "job": 40, "jpeg": [9, 26], "jpg": [9, 26], "jupyt": 33, "just": [27, 31, 33, 37], "k": 1, "kb": 11, "keepdim": [13, 20, 21], "kei": [3, 38], "keyword": [1, 3, 18, 19], "kill": 3, "kind": 37, "known": [2, 36, 39, 41], "kwarg": [7, 13, 14, 17, 18, 19, 24, 25], "l": 33, "label": 33, "lambda": [34, 39], "larg": [34, 36, 38, 39, 41], "larger": [34, 39], "last": 41, "later": 33, "launch": 38, "layer": [5, 32], "lazi": [2, 27], "lead": [39, 41], "least": 36, "less": 32, "lesser": 41, "let": 5, "level": [2, 28, 32, 37, 41], "librari": [30, 32], "lifecycl": 40, "like": [3, 5, 15, 24, 27, 31, 32, 34, 36, 37, 40, 41], "lilac": 33, "limit": [13, 37, 39], "line": 33, "linear": 39, "linspac": 1, "list": [1, 3, 7, 14, 18, 29], "lithop": [5, 19, 29, 30, 33, 34, 41], "live": 3, "ll": 27, "load": [16, 33], "local": [5, 11, 27, 33, 35, 36, 40], "locat": 3, "log": 37, "logic": 39, "long": [33, 37, 39], "longer": [3, 33, 37, 38, 39], "look": [3, 28, 31, 37], "lot": [40, 41], "lz4": 11, "m": [29, 33], "machin": [27, 35, 36, 39], "made": [3, 41], "magic": 39, "mai": [2, 5, 18, 31, 34, 37, 39, 40], "main": [2, 3], "mainli": 3, "maintain": 39, "major": 41, "make": [2, 32, 36, 39], "manag": [3, 36, 41], "mani": [29, 31, 37], "manipul": 1, "manual": 40, "map": [2, 7, 9, 14, 18, 26, 31, 35, 39], "map_block": [5, 30], "map_direct": [30, 37], "map_overlap": 30, "mapreduc": 41, "mark": [9, 26], "match": [31, 37, 39], "materi": [2, 33], "matplotlib": 29, "matur": [32, 34], "max_tasks_per_child": 3, "max_total_num_input_block": 37, "max_total_source_arrai": 37, "max_work": [3, 39], "maximum": [3, 30, 36, 37, 39], "mb": 11, "mean": [3, 5, 20, 33, 36, 37, 38, 39], "measur": [19, 36, 39], "measure_reserved_mem": [36, 39], "memori": [3, 11, 13, 19, 32, 33, 34, 35, 39, 41], "memrai": 35, "messag": 38, "method": [6, 10, 11, 12, 33, 37], "middl": 31, "might": 39, "minim": 29, "minimum": 39, "minut": 34, "mitig": [3, 38], "mock": 29, "modal": [5, 19, 29, 30, 34, 39], "mode": 22, "model": [2, 5, 41], "monitor": 33, "more": [13, 27, 31, 32, 33, 34, 36, 37, 38, 39], "most": [3, 34, 35, 41], "much": [33, 34, 36, 39], "multi": 27, "multipl": [2, 13, 14, 17, 18, 26, 30, 31, 33, 35], "multiple_inputs_optimize_dag": 37, "must": [3, 19, 24, 37, 38], "n": [3, 41], "n_col": 1, "n_row": 1, "name": [4, 6, 9, 12, 26, 32, 40], "nan": [20, 21], "natur": [2, 32, 36], "nbyte": 37, "necessari": 39, "need": [2, 5, 13, 31, 33, 36, 38, 39, 40], "neg": 37, "neighbor": 18, "neither": 3, "nest": 3, "never": 36, "new": [5, 13, 32, 33, 36, 39], "new_axi": 17, "newer": 32, "next": 39, "node": [2, 33, 41], "non": [3, 11, 30, 36, 39], "none": [1, 3, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 37], "note": [3, 18, 24, 25, 31, 33, 34, 37, 38, 40], "notebook": [9, 26, 33], "noth": [27, 39], "notic": [3, 27, 37], "now": 37, "np": 18, "num": [1, 37], "num_task": 12, "number": [3, 5, 18, 30, 31, 33, 34, 38, 39], "numblock": 31, "numcodec": 11, "numpi": [2, 5, 27, 32], "numpy_groupi": 29, "o": 33, "obj": 1, "object": [2, 10, 15, 19, 24, 27, 40], "observ": 39, "off": [33, 37, 38, 39], "offer": 39, "often": 41, "old": 40, "onc": [14, 33, 38], "one": [0, 2, 3, 18, 31, 33, 37, 38, 39, 40, 41], "ones": [1, 32, 37], "ones_lik": 1, "onli": [2, 3, 7, 9, 14, 18, 26, 31, 32, 33, 34, 37, 38, 39, 41], "op": [33, 37], "open": 23, "oper": [2, 9, 19, 24, 25, 26, 30, 32, 33, 36, 37, 38, 39, 40, 41], "opportun": 2, "opt_fn": 37, "optim": [2, 7, 9, 14, 26, 30, 33, 35, 39, 41], "optimize_funct": [7, 9, 14, 26, 37], "optimize_graph": [7, 9, 14, 26, 33, 37], "option": [7, 9, 11, 14, 16, 19, 24, 25, 26, 28, 33], "optional_depend": 29, "orang": [31, 33], "order": [31, 36, 39], "origin": 38, "other": [3, 5, 35, 37], "otherwis": [7, 9, 14, 26, 37], "out": [33, 34, 35, 39, 40], "outer": 31, "output": [2, 9, 13, 18, 25, 26, 31, 33, 36, 37, 38, 39], "output_dtyp": 13, "output_s": 13, "outsid": 3, "over": [4, 18, 21, 31, 40], "overal": [33, 37, 38, 39], "overhead": 34, "overlap": 18, "overview": 28, "own": 39, "packag": [3, 19, 29, 32], "pad_width": 22, "page": [1, 3, 31, 39], "pair": 2, "panda": 29, "paragraph": 38, "parallel": [2, 3, 32, 39, 41], "paramet": [7, 8, 9, 11, 13, 14, 16, 18, 19, 24, 25, 26, 39], "part": [31, 34, 39], "partial": 37, "partial_reduc": 31, "particular": [3, 34, 36, 37], "pass": [3, 11, 18, 19, 31, 33, 39, 41], "path": [3, 11, 16, 19, 25], "pdf": [9, 26], "peak": 19, "peak_measured_mem": 36, "peak_measured_mem_end": 12, "peak_measured_mem_start": 12, "per": [13, 39], "perfect": 33, "perform": [7, 9, 14, 26, 31, 33, 35, 36, 37, 41], "period": 40, "persist": [39, 40, 41], "phase": 36, "pick": 37, "pink": 31, "pip": [4, 28, 33], "plan": [6, 30, 32, 35, 36, 37, 39], "pleas": 4, "plenti": 36, "plot": 33, "png": [9, 26], "possibl": [3, 28, 36, 37, 39, 41], "potenti": 39, "power": 37, "practic": 35, "pre": 38, "preced": 37, "precis": 36, "predecessor": 37, "prefac": 35, "preserv": 31, "previou": [30, 37, 38], "primit": [2, 30, 31, 32, 37], "print": 27, "problem": [39, 41], "process": [2, 5, 19, 24, 25, 32, 33, 34, 36, 38, 39, 41], "processor": 39, "processpoolexecutor": 3, "produc": [9, 18, 26, 33, 36], "profil": 33, "program": [3, 41], "project": [5, 29, 30, 33, 35], "projected_mem": 36, "properli": 36, "properti": 3, "proportion": 39, "provid": [5, 9, 26, 33, 34, 36, 38, 41], "provis": 39, "public": 5, "purpos": 41, "put": [36, 41], "py": 33, "pydot": 29, "pyproject": 29, "pytest": 29, "python": [0, 3, 4, 5, 6, 13, 19, 24, 25, 27, 29, 30, 32, 33, 34, 36], "pywren": 41, "quickli": [28, 34, 38], "r": 4, "rais": 36, "ran": 36, "random": [3, 5, 30, 33], "rather": [31, 40], "re": 39, "read": [31, 32, 33, 36, 37, 38, 39, 41], "readm": 27, "reason": [3, 32, 36, 37, 39], "receiv": 10, "rechunk": [2, 5, 30, 32, 39, 41], "recommend": 34, "recomput": [7, 14], "red": 5, "reduc": [31, 37, 39], "reduct": [30, 36, 37, 39], "refer": [13, 30, 34, 39], "regard": 31, "region": [34, 40], "regular": 40, "rel": 34, "relat": 30, "reli": 38, "reliabl": [30, 34, 35], "remot": 34, "remov": [37, 40], "render": [9, 26, 33], "report": [19, 36], "repres": [31, 33], "represent": [2, 39], "req": 29, "requir": [2, 4, 19, 33, 34, 36, 39, 41], "reserv": [3, 11, 19, 35], "reserved_mem": [3, 11, 19, 36], "resourc": [11, 27, 39], "restrict": 39, "result": [27, 31, 33, 37], "resum": [7, 14], "retain": 33, "retri": [3, 35], "return": [8, 9, 16, 19, 21, 23, 26, 31], "reus": 3, "rich": [29, 33], "richprogressbar": 33, "right": 33, "rm": 40, "room": 36, "round": [31, 33], "rule": [36, 40], "run": [2, 3, 7, 11, 14, 19, 24, 25, 27, 29, 32, 33, 34, 36, 37, 38, 39, 40, 41], "runner": 32, "runtim": [2, 3, 19, 24, 25, 30, 32, 34, 36, 40, 41], "runtime_memori": 3, "s3": [3, 34, 38, 40], "s3f": 29, "same": [3, 31, 37, 39, 40], "save": [24, 25, 33], "scale": [2, 30, 33, 34, 35, 38, 41], "scenario": 39, "schema": 33, "seaborn": 29, "second": [3, 31, 34], "section": 38, "see": [2, 3, 27, 29, 33, 37, 39], "select": [31, 40], "send": [7, 14], "sent": 31, "separ": [29, 33, 39, 40], "serverless": [2, 32, 39, 41], "servic": [35, 36, 39, 40, 41], "set": [2, 3, 7, 11, 13, 14, 19, 29, 34, 35, 36, 38, 39, 40], "sever": 32, "shape": [1, 5, 8, 18, 31], "share": [3, 18], "short": 40, "should": [11, 18, 35, 36, 37, 39, 40], "show": [9, 26, 31, 33, 34], "show_hidden": [9, 26], "shown": [31, 33, 37], "shuffl": [2, 11, 39, 41], "side": 31, "sign": [34, 39], "signatur": 13, "signifi": 33, "signific": 39, "similar": [13, 32], "similarli": [31, 33], "simpl": [3, 27, 33, 34], "simplest": [31, 37, 39], "simpli": 33, "simultan": 39, "sinc": [2, 3, 31, 32, 33, 34, 36, 37, 38, 41], "singl": [27, 31, 32, 33, 35, 38], "size": [2, 23, 31, 33, 35, 39, 41], "slide": 30, "slow": [2, 37, 38], "slowli": 39, "small": [33, 34, 37], "smaller": 36, "so": [3, 27, 32, 33, 34, 36, 37, 38, 39, 40], "solut": 39, "some": [18, 32, 36, 37, 38, 39], "sometim": [34, 37], "sourc": 24, "space": 40, "spark": 41, "spec": [1, 6, 7, 14, 15, 16, 17, 19, 23, 27, 33, 34, 36, 40], "specif": [11, 30, 39], "specifi": [3, 11, 18, 19, 20, 27, 35, 37, 40], "specul": 38, "speed": [37, 39], "spent": [33, 41], "split_everi": [20, 21], "squar": 33, "squeez": 31, "stage": 37, "standard": [0, 6, 27, 30, 32], "standardis": 30, "start": [1, 27, 30, 34, 37, 39, 41], "startup": [33, 34, 39], "stat": 33, "stateless": [5, 41], "statist": 33, "statu": 1, "step": [1, 33], "stick": 39, "stop": 1, "storag": [2, 6, 11, 16, 25, 30, 35, 38, 39, 41], "storage_opt": 11, "store": [3, 5, 11, 16, 19, 25, 33, 39, 40], "str": [9, 11, 19, 26], "straggler": [3, 33, 35, 39], "straightforward": [2, 34], "string": [16, 25], "strong": [35, 39], "structur": 31, "style": 3, "submit": 3, "subset": [5, 27], "success": 41, "suffici": 39, "suggest": 39, "suit": 33, "sum": [21, 36], "support": [1, 3, 13, 18, 31, 32, 37], "sure": [39, 40], "svg": [9, 26, 33], "system": [5, 19, 38, 39, 40, 41], "t": [2, 3, 7, 9, 14, 26, 32, 33, 34, 36, 37, 40], "tab": 40, "tail": 33, "take": [3, 33, 38, 39], "taken": 38, "target": [24, 41], "task": [2, 3, 5, 11, 12, 13, 19, 32, 33, 34, 36, 37, 38, 39], "task_create_tstamp": 12, "task_result_tstamp": 12, "tb": 11, "tell": 13, "temp": [3, 34, 40], "tempor": 33, "temporari": [3, 40], "ten": 36, "terabyt": 39, "test": [3, 29, 33, 34], "test_mem_util": 33, "than": [3, 13, 31, 32, 36, 37, 38, 39, 40], "thei": [3, 31, 32, 33, 36, 37, 39], "them": [2, 31, 33, 38, 40], "theme": 41, "theoret": 35, "therebi": [39, 41], "therefor": 34, "thi": [2, 3, 5, 7, 8, 9, 11, 13, 18, 19, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "thing": 3, "those": 39, "though": [39, 41], "thread": [34, 39], "threadpoolexecutor": 3, "three": [3, 31, 32, 33, 37, 38], "through": [3, 5], "throughput": 39, "thumb": 36, "tightli": [36, 41], "time": [2, 3, 31, 33, 34, 36, 37, 38, 39, 40, 41], "timeline_viz": 33, "timelinevisualizationcallback": 33, "timeout": [3, 35], "tini": [19, 33], "tip": 35, "tmp": 27, "tmpdir": 40, "to_zarr": 33, "togeth": [2, 37], "toler": 38, "toml": 29, "tomwhit": [3, 34, 40], "too": [31, 37], "took": 33, "tool": 33, "top": [5, 31], "total": [3, 11, 38, 39], "tqdm": [29, 33], "tqdmprogressbar": 33, "trace": 33, "track": [1, 33], "traction": 41, "transfer": 34, "transform": 1, "travers": 2, "treat": 21, "tree": 30, "tree_reduc": 31, "trigger": 2, "trim": 18, "trivial": [19, 39], "true": [1, 3, 7, 9, 14, 20, 21, 26, 37, 39], "tune": [39, 41], "tupl": [8, 18], "turn": [3, 31, 33, 37, 38, 39], "twice": 33, "two": [5, 31, 33, 39], "txt": 4, "type": [5, 8, 9, 16, 18, 19, 24, 25, 26, 33, 35], "typic": 40, "ufunc": 13, "under": [3, 33], "underli": 5, "underscor": 3, "understand": [32, 33, 37, 39, 41], "undoubtedli": 41, "unit": [5, 11], "unnecessari": 40, "unoptim": 37, "unpredict": 41, "until": 31, "up": [2, 3, 34, 36, 37, 38, 39, 40], "updat": 38, "upgrad": 39, "upper": 36, "url": [3, 11, 19, 40], "us": [2, 3, 5, 7, 9, 11, 14, 16, 19, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 39, 40, 41], "usag": [13, 30, 36, 39, 41], "use_backup": [3, 38, 39], "use_new_impl": [20, 21], "user": [3, 32, 34, 41], "usual": 33, "util": [32, 36], "v": 35, "valu": [3, 11, 18, 31, 36, 37], "vari": [19, 39], "varieti": [3, 32, 33, 34], "variou": 36, "vector": 13, "veri": [2, 4, 33, 34, 39, 41], "versa": 39, "version": [1, 13, 19], "versu": 39, "vertic": [33, 39], "via": [30, 41], "vice": 39, "view": 33, "violat": 39, "visual": [32, 35, 37], "wa": [5, 32, 33], "wai": [3, 31, 33, 38, 39], "wait": 39, "want": [33, 37], "wasn": 32, "we": [3, 27, 31, 33, 34, 36, 37, 39], "weak": 39, "welcom": 4, "well": [5, 32, 33, 36], "what": [32, 33, 37], "whatev": [31, 36], "when": [2, 3, 11, 19, 32, 33, 34, 36, 37, 38, 39, 40], "where": [2, 11, 32, 37, 39], "wherea": [32, 39], "whether": [3, 18], "which": [2, 3, 5, 9, 11, 26, 27, 29, 31, 32, 33, 35, 36, 37, 39, 40, 41], "while": [2, 7, 14, 31, 33, 36, 39], "white": 31, "who": 39, "whole": 38, "why": [30, 37], "widespread": 41, "within": [3, 36], "without": [8, 31, 39], "won": [7, 14], "word": 39, "work": [19, 30, 31, 33, 34, 36, 38, 40, 41], "work_dir": [3, 11, 19, 27, 34, 40], "worker": [3, 11, 33, 34, 36, 39, 41], "would": [33, 36, 37, 39, 40], "write": [2, 9, 24, 26, 33, 34, 36, 38, 39, 40, 41], "written": [2, 33, 37, 38], "x": [1, 15, 20, 21, 22, 24, 25], "xarrai": 30, "xp": [3, 27, 33, 37], "yaml": 34, "year": [32, 41], "yet": [0, 27], "you": [3, 13, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40], "your": [3, 33, 34, 36, 39], "zappi": 32, "zarr": [2, 5, 6, 11, 16, 24, 25, 30, 33, 34, 36, 38, 39, 40, 41], "zarr_compressor": 11, "zarrai": 6, "zero": [1, 21], "zeros_lik": 1}, "titles": ["API Reference", "Python Array API", "Computation", "Configuration", "Contributing", "Design", "cubed.Array", "cubed.Array.compute", "cubed.Array.rechunk", "cubed.Array.visualize", "cubed.Callback", "cubed.Spec", "cubed.TaskEndEvent", "cubed.apply_gufunc", "cubed.compute", "cubed.from_array", "cubed.from_zarr", "cubed.map_blocks", "cubed.map_overlap", "cubed.measure_reserved_mem", "cubed.nanmean", "cubed.nansum", "cubed.pad", "cubed.random.random", "cubed.store", "cubed.to_zarr", "cubed.visualize", "Demo", "Getting Started", "Installation", "Cubed", "Operations", "Related Projects", "Diagnostics", "Executors", "User Guide", "Memory", "Optimization", "Reliability", "Scaling", "Storage", "Why Cubed?"], "titleterms": {"For": 30, "advanc": 37, "allow": 36, "an": 34, "api": [0, 1, 5], "apply_gufunc": 13, "arg_reduct": 31, "arrai": [0, 1, 5, 6, 7, 8, 9, 30, 37], "articl": 30, "bar": 33, "beam": 3, "between": 1, "block": 37, "blockwis": 31, "bound": 30, "calcul": 39, "callback": [10, 33], "chunk": [0, 36], "cloud": [34, 39, 40], "coil": 3, "comput": [2, 7, 14, 33], "conda": 29, "configur": 3, "consider": 39, "consist": 38, "contribut": 4, "core": 5, "cube": [1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 39, 41], "dask": [3, 32], "data": 40, "debug": 37, "delet": 40, "demo": 27, "depend": [29, 31], "design": 5, "develop": [4, 30], "diagnos": 39, "diagnost": 33, "differ": [1, 39], "dimension": 30, "distribut": 30, "document": 30, "elemwis": 31, "environ": 3, "exampl": 33, "execut": 2, "executor": [3, 34, 39], "file": 3, "from_arrai": 15, "from_zarr": 16, "function": 0, "fusion": 37, "gener": 0, "get": 28, "guid": 35, "histori": 33, "i": 34, "input": 37, "instal": 29, "intermedi": 40, "io": 0, "lithop": 3, "local": 34, "machin": 34, "map": 37, "map_block": [17, 31], "map_direct": 31, "map_overlap": 18, "measure_reserved_mem": 19, "memori": [2, 30, 36], "memrai": 33, "modal": 3, "multi": 39, "multipl": 37, "n": 30, "nanmean": 20, "nansum": 21, "non": 0, "number": [0, 37], "object": 3, "oper": [5, 31], "optim": 37, "option": [3, 29], "other": 39, "pad": 22, "perform": 39, "pip": 29, "pipelin": 39, "plan": [2, 33], "practic": 39, "prefac": 39, "previou": 32, "primit": 5, "process": [3, 30], "progress": 33, "project": [32, 36], "provid": 39, "python": 1, "random": [0, 23], "rechunk": [8, 31], "reduct": 31, "refer": [0, 3], "relat": 32, "reliabl": 38, "reserv": 36, "retri": 38, "runtim": [0, 5], "scale": 39, "serverless": 30, "servic": 34, "set": 37, "should": 34, "singl": [3, 34, 39], "size": 36, "sourc": 37, "spec": [3, 11], "specif": [0, 3], "specifi": 34, "standard": 1, "standardis": 0, "start": 28, "step": 39, "storag": [5, 40], "store": 24, "straggler": 38, "strong": 38, "taskendev": 12, "theoret": 39, "thread": 3, "timelin": 33, "timeout": 38, "tip": 39, "to_zarr": 25, "total": 37, "tree": 31, "type": 39, "us": [33, 34], "user": [30, 35], "v": 39, "variabl": 3, "visual": [9, 26, 33], "which": 34, "why": 41, "work": 32, "xarrai": 32, "yaml": 3}})
\ No newline at end of file
diff --git a/user-guide/diagnostics.html b/user-guide/diagnostics.html
index 988ba399..03c7a75c 100644
--- a/user-guide/diagnostics.html
+++ b/user-guide/diagnostics.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/user-guide/executors.html b/user-guide/executors.html
index fb315d58..2e88f187 100644
--- a/user-guide/executors.html
+++ b/user-guide/executors.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/user-guide/index.html b/user-guide/index.html
index 1b248545..712b60ea 100644
--- a/user-guide/index.html
+++ b/user-guide/index.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
@@ -381,6 +382,13 @@ Optimization
+
Scaling
diff --git a/user-guide/optimization.html b/user-guide/optimization.html
new file mode 100644
index 00000000..e40779cb
--- /dev/null
+++ b/user-guide/optimization.html
@@ -0,0 +1,577 @@
+
+
+
+
+
+
+
+
+
+
+ Optimization — Cubed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Back to top
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Optimization
+Cubed will automatically optimize the computation graph before running it. This can reduce the number of tasks in the plan, and the amount of intermediate IO, both of which speed up the computation.
+
+Map fusion
+The simplest kind of optimization is map fusion , where operations that have one preceding operation with the same number of tasks are fused together. This optimization is enabled by default.
+You can see the effect of optimization before running any computation by using the visualize
method on a Cubed array, such as in the following small example. We start by specifying optimize_graph=False
to turn off optimization so we can see what the unoptimized plan looks like.
+import cubed.array_api as xp
+
+a = xp . asarray ([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]], chunks = ( 2 , 2 ))
+b = xp . negative ( a )
+c = xp . astype ( b , xp . float32 )
+
+c . visualize ( "cubed-unoptimized" , optimize_graph = False )
+
+
+
+Now we call visualize
again, this time not setting optimize_graph
so it picks up its default value of True
.
+
+
+Note that with optimization turned on, the array b
is no longer written as an intermediate output since it will be computed in the same tasks that compute array c
. The overall number of tasks is reduced from 10 to 5, and the intermediate data (total nbytes
) is reduced too.
+Here we have just called visualize
with the optimize_graph
argument, but it’s possible to use it when calling compute
- which can be useful when debugging a computation.
+c . compute ( optimize_graph = False )
+
+
+
+
+
+Debugging optimization
+Sometimes it can be difficult to understand why particular operations in a computation plan have been fused together - or more commonly, why they have not been fused. By enabling debug logging you can get detailed information from the optimize function to help you understand which operations are being fused - or not - and the reason in either case.
+Here’s the previous example with logging enabled:
+import logging
+
+logging . basicConfig ( level = logging . DEBUG )
+
+e . visualize ()
+
+
+The output explains which operations can or can’t be fused, and why:
+DEBUG : cubed . core . optimization : can 't fuse op-001 since it is not a primitive operation, or it uses map_direct
+DEBUG : cubed . core . optimization : can 't fuse op-002 since it is not a primitive operation, or it uses map_direct
+DEBUG : cubed . core . optimization : can 't fuse op-003 since it is not a primitive operation, or it uses map_direct
+DEBUG : cubed . core . optimization : can 't fuse op-004 since no predecessor ops can be fused
+DEBUG : cubed . primitive . blockwise : can fuse op - 005 since num tasks of predecessor ops match
+
+
+
+
+Advanced settings
+There are limits to how many input arrays and input chunks reads are fused together. These are imposed so that the number of reads that an individual task must perform is not excessive, which would otherwise result in slow running tasks.
+In some cases you may want to change these limits, which we look at here.
+
+Total number of source arrays
+Cubed will not fuse operations that result in more than 4 source arrays in the fused operation. In the previous example above the fused operation has three source arrays (a
, b
, and c
), which is below the maximum default allowed. On the other hand, a computation with a higher “fan-in” that exceeds the maximum will not be fused, or operations will be fused in stages.
+To change this, we have to specify the optimize_function
that Cubed should use: multiple_inputs_optimize_dag
. In addition, we use fuctools.partial
to set the max_total_source_arrays
argument to 8 as follows:
+from functools import partial
+from cubed.core.optimization import multiple_inputs_optimize_dag
+
+opt_fn = partial ( multiple_inputs_optimize_dag , max_total_source_arrays = 8 )
+e . visualize ( optimize_function = opt_fn )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-guide/reliability.html b/user-guide/reliability.html
index 69a71a27..e64c6889 100644
--- a/user-guide/reliability.html
+++ b/user-guide/reliability.html
@@ -36,14 +36,14 @@
-
+
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
@@ -410,11 +411,11 @@ Stragglers
diff --git a/user-guide/scaling.html b/user-guide/scaling.html
index 31b321d5..f26ffd79 100644
--- a/user-guide/scaling.html
+++ b/user-guide/scaling.html
@@ -36,7 +36,7 @@
-
+
@@ -44,7 +44,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
@@ -469,12 +470,12 @@ Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics
diff --git a/why-cubed.html b/why-cubed.html
index 8add96ab..e4d41b27 100644
--- a/why-cubed.html
+++ b/why-cubed.html
@@ -36,7 +36,7 @@
-
+
@@ -160,6 +160,7 @@
Storage
Memory
Reliability
+Optimization
Scaling
Diagnostics