jcmgray: cc @mrocklin. 

The [test failure](https://travis-ci.org/dask/dask/jobs/468464613) seems to be an unrelated envinronmental problem?
diff --git a/dask/array/routines.py b/dask/array/routines.py
index efb24d563..269c7c9e9 100644
--- a/dask/array/routines.py
+++ b/dask/array/routines.py
@@ -226,8 +226,8 @@ def tensordot(lhs, rhs, axes=2):
 
     dt = np.promote_types(lhs.dtype, rhs.dtype)
 
-    left_index = list(alphabet[:lhs.ndim])
-    right_index = list(ALPHABET[:rhs.ndim])
+    left_index = list(range(lhs.ndim))
+    right_index = list(range(lhs.ndim, lhs.ndim + rhs.ndim))
     out_index = left_index + right_index
 
     for l, r in zip(left_axes, right_axes):
diff --git a/docs/source/optimize.rst b/docs/source/optimize.rst
index e443fddab..17a303a34 100644
--- a/docs/source/optimize.rst
+++ b/docs/source/optimize.rst
@@ -2,19 +2,19 @@ Optimization
 ============
 
 Performance can be significantly improved in different contexts by making
-small optimizations on the dask graph before calling the scheduler.
+small optimizations on the Dask graph before calling the scheduler.
 
 The ``dask.optimization`` module contains several functions to transform graphs
 in a variety of useful ways. In most cases, users won't need to interact with
 these functions directly, as specialized subsets of these transforms are done
-automatically in the dask collections (``dask.array``, ``dask.bag``, and
+automatically in the Dask collections (``dask.array``, ``dask.bag``, and
 ``dask.dataframe``). However, users working with custom graphs or computations
 may find that applying these methods results in substantial speedups.
 
 In general, there are two goals when doing graph optimizations:
 
 1. Simplify computation
-2. Improve parallelism.
+2. Improve parallelism
 
 Simplifying computation can be done on a graph level by removing unnecessary
 tasks (``cull``), or on a task level by replacing expensive operations with
@@ -30,7 +30,7 @@ a task graph.
 Example
 -------
 
-Suppose you had a custom dask graph for doing a word counting task:
+Suppose you had a custom Dask graph for doing a word counting task:
 
 .. code-block:: python
 
@@ -63,11 +63,11 @@ Suppose you had a custom dask graph for doing a word counting task:
    :width: 65 %
    :alt: The original dask graph
 
-Here we're counting the occurrence of the words ``'orange``, ``'apple'``, and
+Here we are counting the occurrence of the words ``'orange``, ``'apple'``, and
 ``'pear'`` in the list of words, formatting an output string reporting the
-results, printing the output, then returning the output string.
+results, printing the output, and then returning the output string.
 
-To perform the computation, we pass the dask graph and the desired output keys
+To perform the computation, we pass the Dask graph and the desired output keys
 to a scheduler ``get`` function:
 
 .. code-block:: python
@@ -100,7 +100,7 @@ later steps:
    :alt: After culling
 
 Looking at the task graph above, there are multiple accesses to constants such
-as ``'val1'`` or ``'val2'`` in the dask graph. These can be inlined into the
+as ``'val1'`` or ``'val2'`` in the Dask graph. These can be inlined into the
 tasks to improve efficiency using the ``inline`` function. For example:
 
 .. code-block:: python
@@ -172,13 +172,13 @@ Putting it all together:
 
 In summary, the above operations accomplish the following:
 
-1. Removed tasks unnecessary for the desired output using ``cull``.
-2. Inlined constants using ``inline``.
-3. Inlined cheap computations using ``inline_functions``, improving parallelism.
-4. Fused linear tasks together to ensure they run on the same worker using ``fuse``.
+1. Removed tasks unnecessary for the desired output using ``cull``
+2. Inlined constants using ``inline``
+3. Inlined cheap computations using ``inline_functions``, improving parallelism
+4. Fused linear tasks together to ensure they run on the same worker using ``fuse``
 
 As stated previously, these optimizations are already performed automatically
-in the dask collections. Users not working with custom graphs or computations
+in the Dask collections. Users not working with custom graphs or computations
 should rarely need to directly interact with them.
 
 These are just a few of the optimizations provided in ``dask.optimization``. For
@@ -190,7 +190,7 @@ Rewrite Rules
 
 For context based optimizations, ``dask.rewrite`` provides functionality for
 pattern matching and term rewriting. This is useful for replacing expensive
-computations with equivalent, cheaper computations. For example, ``dask.array``
+computations with equivalent, cheaper computations. For example, Dask Array
 uses the rewrite functionality to replace series of array slicing operations
 with a more efficient single slice.
 
@@ -272,7 +272,7 @@ Keyword Arguments
 
 Some optimizations take optional keyword arguments.  To pass keywords from the
 compute call down to the right optimization, prepend the keyword with the name
-of the optimization.  For example to send a ``keys=`` keyword argument to the
+of the optimization.  For example, to send a ``keys=`` keyword argument to the
 ``fuse`` optimization from a compute call, use the ``fuse_keys=`` keyword:
 
 .. code-block:: python
@@ -287,11 +287,11 @@ Customizing Optimization
 ------------------------
 
 Dask defines a default optimization strategy for each collection type (Array,
-Bag, DataFrame, Delayed).  However different applications may have different
+Bag, DataFrame, Delayed).  However, different applications may have different
 needs.  To address this variability of needs, you can construct your own custom
 optimization function and use it instead of the default.  An optimization
 function takes in a task graph and list of desired keys and returns a new
-task graph.
+task graph:
 
 .. code-block:: python
 
@@ -300,7 +300,7 @@ task graph.
        return new_dsk
 
 You can then register this optimization class against whichever collection type
-you prefer and it will be used instead of the default scheme.
+you prefer and it will be used instead of the default scheme:
 
 .. code-block:: python
 
@@ -309,7 +309,7 @@ you prefer and it will be used instead of the default scheme.
 
 You can register separate optimization functions for different collections, or
 you can register ``None`` if you do not want particular types of collections to
-be optimized.
+be optimized:
 
 .. code-block:: python
 
@@ -318,7 +318,7 @@ be optimized.
                         delayed_optimize=my_other_optimize_function):
        ...
 
-You need not specify all collections.  Collections will default to their
+You do not need to specify all collections.  Collections will default to their
 standard optimization scheme (which is usually a good choice).
 
 

tensordot cannot handle >26 dimensions
Currently ``tensordot`` is limited to tensors with 26 or fewer dimensions. Reproducing example:

```python
>>> import dask.array as da

>>> x = da.random.random([2]*26, chunks=-1)
>>> da.tensordot(x, x, 26)  # works fine
dask.array<sum-aggregate, shape=(), dtype=float64, chunksize=()>

>>> x = da.random.random([2]*27, chunks=-1)
>>> da.tensordot(x, x, 27)  # errors
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/johnnie/conda/lib/python3.6/site-packages/dask/array/routines.py", line 235, in tensordot
    right_index[r] = left_index[l]
IndexError: list index out of range
```

The culprit is these lines in ``dask/array/routines.py::tensordot``
```python
    ...
    left_index = list(alphabet[:lhs.ndim])
    right_index = list(ALPHABET[:rhs.ndim])
    ...
```
Which silently slices too few characters, which are then supplied to ``atop``.

I know this sounds like quite an niche use-case! But it would actually be super useful to support this (e.g. in quantum physics where such arrays appear often) as this is the exact kind of size where memory limitations make dask's array chunking attractive/necessary.

diff --git a/dask/array/tests/test_routines.py b/dask/array/tests/test_routines.py
index 84fefe41c..65c0032ad 100644
--- a/dask/array/tests/test_routines.py
+++ b/dask/array/tests/test_routines.py
@@ -287,6 +287,13 @@ def test_tensordot_2(axes):
               np.tensordot(x, x, axes=axes))
 
 
+def test_tensordot_more_than_26_dims():
+    ndim = 27
+    x = np.broadcast_to(1, [2] * ndim)
+    dx = da.from_array(x, chunks=-1)
+    assert_eq(da.tensordot(dx, dx, ndim), np.array(2**ndim))
+
+
 def test_dot_method():
     x = np.arange(400).reshape((20, 20))
     a = da.from_array(x, chunks=(5, 5))

pip install -e .[complete]
parse_log_pytest
pytest
flake8 pytest-xdist moto pytest
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
boto3==1.23.10
botocore==1.26.10
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
click==8.0.4
cloudpickle==2.2.1
cryptography==40.0.2
-e git+https://github.com/dask/dask.git@193e61403ccb3e1a13451a338f42018fe6cc9250#egg=dask
dataclasses==0.8
distributed==1.28.1
execnet==1.9.0
flake8==5.0.4
HeapDict==1.0.1
idna==3.10
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==3.0.3
jmespath==0.10.0
locket==1.0.0
MarkupSafe==2.0.1
mccabe==0.7.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
moto==4.0.13
msgpack==1.0.5
numpy==1.19.5
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pandas==1.1.5
partd==1.2.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-xdist==3.0.2
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.1
requests==2.27.1
responses==0.17.0
s3transfer==0.5.2
six==1.17.0
sortedcontainers==2.4.0
tblib==1.7.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
toolz==0.12.0
tornado==6.1
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
Werkzeug==2.0.3
xmltodict==0.14.2
zict==2.1.0
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: dask
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - boto3==1.23.10
      - botocore==1.26.10
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - click==8.0.4
      - cloudpickle==2.2.1
      - cryptography==40.0.2
      - dataclasses==0.8
      - distributed==1.28.1
      - execnet==1.9.0
      - flake8==5.0.4
      - heapdict==1.0.1
      - idna==3.10
      - importlib-metadata==4.2.0
      - jinja2==3.0.3
      - jmespath==0.10.0
      - locket==1.0.0
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - moto==4.0.13
      - msgpack==1.0.5
      - numpy==1.19.5
      - pandas==1.1.5
      - partd==1.2.0
      - psutil==7.0.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pytest-xdist==3.0.2
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyyaml==6.0.1
      - requests==2.27.1
      - responses==0.17.0
      - s3transfer==0.5.2
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tblib==1.7.0
      - toolz==0.12.0
      - tornado==6.1
      - urllib3==1.26.20
      - werkzeug==2.0.3
      - xmltodict==0.14.2
      - zict==2.1.0
prefix: /opt/conda/envs/dask

dask/array/tests/test_routines.py::test_tensordot_more_than_26_dims
dask/array/tests/test_routines.py::test_array dask/array/tests/test_routines.py::test_atleast_nd_no_args[atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_no_args[atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_no_args[atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape0-chunks0-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape0-chunks0-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape0-chunks0-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape1-chunks1-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape1-chunks1-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape1-chunks1-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape2-chunks2-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape2-chunks2-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape2-chunks2-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape3-chunks3-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape3-chunks3-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape3-chunks3-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape4-chunks4-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape4-chunks4-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_one_arg[shape4-chunks4-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape10-shape20-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape10-shape20-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape10-shape20-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape11-shape21-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape11-shape21-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape11-shape21-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape12-shape22-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape12-shape22-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape12-shape22-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape13-shape23-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape13-shape23-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape13-shape23-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape14-shape24-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape14-shape24-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape14-shape24-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape15-shape25-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape15-shape25-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape15-shape25-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape16-shape26-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape16-shape26-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape16-shape26-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape17-shape27-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape17-shape27-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape17-shape27-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape18-shape28-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape18-shape28-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape18-shape28-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape19-shape29-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape19-shape29-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape19-shape29-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape110-shape210-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape110-shape210-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape110-shape210-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape111-shape211-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape111-shape211-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape111-shape211-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape112-shape212-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape112-shape212-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape112-shape212-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape113-shape213-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape113-shape213-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape113-shape213-atleast_3d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape114-shape214-atleast_1d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape114-shape214-atleast_2d] dask/array/tests/test_routines.py::test_atleast_nd_two_args[shape114-shape214-atleast_3d] dask/array/tests/test_routines.py::test_transpose dask/array/tests/test_routines.py::test_transpose_negative_axes dask/array/tests/test_routines.py::test_swapaxes dask/array/tests/test_routines.py::test_flip[shape0-flipud-kwargs0] dask/array/tests/test_routines.py::test_flip[shape0-fliplr-kwargs1] dask/array/tests/test_routines.py::test_flip[shape0-flip-kwargs2] dask/array/tests/test_routines.py::test_flip[shape0-flip-kwargs3] dask/array/tests/test_routines.py::test_flip[shape0-flip-kwargs4] dask/array/tests/test_routines.py::test_flip[shape0-flip-kwargs5] dask/array/tests/test_routines.py::test_flip[shape1-flipud-kwargs0] dask/array/tests/test_routines.py::test_flip[shape1-fliplr-kwargs1] dask/array/tests/test_routines.py::test_flip[shape1-flip-kwargs2] dask/array/tests/test_routines.py::test_flip[shape1-flip-kwargs3] dask/array/tests/test_routines.py::test_flip[shape1-flip-kwargs4] dask/array/tests/test_routines.py::test_flip[shape1-flip-kwargs5] dask/array/tests/test_routines.py::test_flip[shape2-flipud-kwargs0] dask/array/tests/test_routines.py::test_flip[shape2-fliplr-kwargs1] dask/array/tests/test_routines.py::test_flip[shape2-flip-kwargs2] dask/array/tests/test_routines.py::test_flip[shape2-flip-kwargs3] dask/array/tests/test_routines.py::test_flip[shape2-flip-kwargs4] dask/array/tests/test_routines.py::test_flip[shape2-flip-kwargs5] dask/array/tests/test_routines.py::test_flip[shape3-flipud-kwargs0] dask/array/tests/test_routines.py::test_flip[shape3-fliplr-kwargs1] dask/array/tests/test_routines.py::test_flip[shape3-flip-kwargs2] dask/array/tests/test_routines.py::test_flip[shape3-flip-kwargs3] dask/array/tests/test_routines.py::test_flip[shape3-flip-kwargs4] dask/array/tests/test_routines.py::test_flip[shape3-flip-kwargs5] dask/array/tests/test_routines.py::test_flip[shape4-flipud-kwargs0] dask/array/tests/test_routines.py::test_flip[shape4-fliplr-kwargs1] dask/array/tests/test_routines.py::test_flip[shape4-flip-kwargs2] dask/array/tests/test_routines.py::test_flip[shape4-flip-kwargs3] dask/array/tests/test_routines.py::test_flip[shape4-flip-kwargs4] dask/array/tests/test_routines.py::test_flip[shape4-flip-kwargs5] dask/array/tests/test_routines.py::test_matmul[x_shape0-y_shape0] dask/array/tests/test_routines.py::test_matmul[x_shape1-y_shape1] dask/array/tests/test_routines.py::test_matmul[x_shape2-y_shape2] dask/array/tests/test_routines.py::test_matmul[x_shape3-y_shape3] dask/array/tests/test_routines.py::test_matmul[x_shape4-y_shape4] dask/array/tests/test_routines.py::test_matmul[x_shape5-y_shape5] dask/array/tests/test_routines.py::test_matmul[x_shape6-y_shape6] dask/array/tests/test_routines.py::test_matmul[x_shape7-y_shape7] dask/array/tests/test_routines.py::test_matmul[x_shape8-y_shape8] dask/array/tests/test_routines.py::test_matmul[x_shape9-y_shape9] dask/array/tests/test_routines.py::test_matmul[x_shape10-y_shape10] dask/array/tests/test_routines.py::test_matmul[x_shape11-y_shape11] dask/array/tests/test_routines.py::test_matmul[x_shape12-y_shape12] dask/array/tests/test_routines.py::test_matmul[x_shape13-y_shape13] dask/array/tests/test_routines.py::test_matmul[x_shape14-y_shape14] dask/array/tests/test_routines.py::test_matmul[x_shape15-y_shape15] dask/array/tests/test_routines.py::test_matmul[x_shape16-y_shape16] dask/array/tests/test_routines.py::test_matmul[x_shape17-y_shape17] dask/array/tests/test_routines.py::test_matmul[x_shape18-y_shape18] dask/array/tests/test_routines.py::test_matmul[x_shape19-y_shape19] dask/array/tests/test_routines.py::test_matmul[x_shape20-y_shape20] dask/array/tests/test_routines.py::test_matmul[x_shape21-y_shape21] dask/array/tests/test_routines.py::test_matmul[x_shape22-y_shape22] dask/array/tests/test_routines.py::test_matmul[x_shape23-y_shape23] dask/array/tests/test_routines.py::test_matmul[x_shape24-y_shape24] dask/array/tests/test_routines.py::test_tensordot dask/array/tests/test_routines.py::test_tensordot_2[0] dask/array/tests/test_routines.py::test_tensordot_2[1] dask/array/tests/test_routines.py::test_tensordot_2[axes2] dask/array/tests/test_routines.py::test_tensordot_2[axes3] dask/array/tests/test_routines.py::test_tensordot_2[axes4] dask/array/tests/test_routines.py::test_tensordot_2[axes5] dask/array/tests/test_routines.py::test_tensordot_2[axes6] dask/array/tests/test_routines.py::test_dot_method dask/array/tests/test_routines.py::test_vdot[shape0-chunks0] dask/array/tests/test_routines.py::test_vdot[shape1-chunks1] dask/array/tests/test_routines.py::test_inner[shape10-shape20] dask/array/tests/test_routines.py::test_inner[shape11-shape21] dask/array/tests/test_routines.py::test_apply_along_axis[shape0-0-ndim-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape0-0-sum-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape0-0-range-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape0-0-range2-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape1-1-ndim-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape1-1-sum-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape1-1-range-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape1-1-range2-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape2-2-ndim-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape2-2-sum-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape2-2-range-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape2-2-range2-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape3--1-ndim-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape3--1-sum-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape3--1-range-<lambda>] dask/array/tests/test_routines.py::test_apply_along_axis[shape3--1-range2-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape0-axes0-sum0-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape0-axes0-sum1-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape0-axes0-range-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape1-0-sum0-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape1-0-sum1-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape1-0-range-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape2-axes2-sum0-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape2-axes2-sum1-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape2-axes2-range-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape3-axes3-sum0-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape3-axes3-sum1-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape3-axes3-range-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape4-axes4-sum0-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape4-axes4-sum1-<lambda>] dask/array/tests/test_routines.py::test_apply_over_axes[shape4-axes4-range-<lambda>] dask/array/tests/test_routines.py::test_ptp[shape0-None] dask/array/tests/test_routines.py::test_ptp[shape1-0] dask/array/tests/test_routines.py::test_ptp[shape2-1] dask/array/tests/test_routines.py::test_ptp[shape3-2] dask/array/tests/test_routines.py::test_ptp[shape4--1] dask/array/tests/test_routines.py::test_diff[0-shape0-0] dask/array/tests/test_routines.py::test_diff[0-shape1-1] dask/array/tests/test_routines.py::test_diff[0-shape2-2] dask/array/tests/test_routines.py::test_diff[0-shape3--1] dask/array/tests/test_routines.py::test_diff[1-shape0-0] dask/array/tests/test_routines.py::test_diff[1-shape1-1] dask/array/tests/test_routines.py::test_diff[1-shape2-2] dask/array/tests/test_routines.py::test_diff[1-shape3--1] dask/array/tests/test_routines.py::test_diff[2-shape0-0] dask/array/tests/test_routines.py::test_diff[2-shape1-1] dask/array/tests/test_routines.py::test_diff[2-shape2-2] dask/array/tests/test_routines.py::test_diff[2-shape3--1] dask/array/tests/test_routines.py::test_ediff1d[None-None-shape0] dask/array/tests/test_routines.py::test_ediff1d[None-None-shape1] dask/array/tests/test_routines.py::test_ediff1d[0-0-shape0] dask/array/tests/test_routines.py::test_ediff1d[0-0-shape1] dask/array/tests/test_routines.py::test_ediff1d[to_end2-to_begin2-shape0] dask/array/tests/test_routines.py::test_ediff1d[to_end2-to_begin2-shape1] dask/array/tests/test_routines.py::test_gradient[1-shape0-varargs0-None] dask/array/tests/test_routines.py::test_gradient[1-shape1-varargs1-None] dask/array/tests/test_routines.py::test_gradient[1-shape2-varargs2-None] dask/array/tests/test_routines.py::test_gradient[1-shape3-varargs3-0] dask/array/tests/test_routines.py::test_gradient[1-shape4-varargs4-1] dask/array/tests/test_routines.py::test_gradient[1-shape5-varargs5-2] dask/array/tests/test_routines.py::test_gradient[1-shape6-varargs6--1] dask/array/tests/test_routines.py::test_gradient[1-shape7-varargs7-axis7] dask/array/tests/test_routines.py::test_gradient[1-shape8-varargs8-axis8] dask/array/tests/test_routines.py::test_gradient[1-shape9-varargs9-axis9] dask/array/tests/test_routines.py::test_gradient[1-shape10-varargs10--1] dask/array/tests/test_routines.py::test_gradient[2-shape0-varargs0-None] dask/array/tests/test_routines.py::test_gradient[2-shape1-varargs1-None] dask/array/tests/test_routines.py::test_gradient[2-shape2-varargs2-None] dask/array/tests/test_routines.py::test_gradient[2-shape3-varargs3-0] dask/array/tests/test_routines.py::test_gradient[2-shape4-varargs4-1] dask/array/tests/test_routines.py::test_gradient[2-shape5-varargs5-2] dask/array/tests/test_routines.py::test_gradient[2-shape6-varargs6--1] dask/array/tests/test_routines.py::test_gradient[2-shape7-varargs7-axis7] dask/array/tests/test_routines.py::test_gradient[2-shape8-varargs8-axis8] dask/array/tests/test_routines.py::test_gradient[2-shape9-varargs9-axis9] dask/array/tests/test_routines.py::test_gradient[2-shape10-varargs10--1] dask/array/tests/test_routines.py::test_bincount dask/array/tests/test_routines.py::test_bincount_with_weights dask/array/tests/test_routines.py::test_bincount_raises_informative_error_on_missing_minlength_kwarg dask/array/tests/test_routines.py::test_digitize dask/array/tests/test_routines.py::test_histogram dask/array/tests/test_routines.py::test_histogram_alternative_bins_range dask/array/tests/test_routines.py::test_histogram_bins_range_with_nan_array dask/array/tests/test_routines.py::test_histogram_return_type dask/array/tests/test_routines.py::test_histogram_extra_args_and_shapes dask/array/tests/test_routines.py::test_cov dask/array/tests/test_routines.py::test_corrcoef dask/array/tests/test_routines.py::test_round dask/array/tests/test_routines.py::test_unique_kwargs[False-False-False] dask/array/tests/test_routines.py::test_unique_kwargs[False-False-True] dask/array/tests/test_routines.py::test_unique_kwargs[False-True-False] dask/array/tests/test_routines.py::test_unique_kwargs[False-True-True] dask/array/tests/test_routines.py::test_unique_kwargs[True-False-False] dask/array/tests/test_routines.py::test_unique_kwargs[True-False-True] dask/array/tests/test_routines.py::test_unique_kwargs[True-True-False] dask/array/tests/test_routines.py::test_unique_kwargs[True-True-True] dask/array/tests/test_routines.py::test_unique_rand[shape0-chunks0-0-10-23] dask/array/tests/test_routines.py::test_unique_rand[shape0-chunks0-0-10-796] dask/array/tests/test_routines.py::test_unique_rand[shape1-chunks1-0-10-23] dask/array/tests/test_routines.py::test_unique_rand[shape1-chunks1-0-10-796] dask/array/tests/test_routines.py::test_unique_rand[shape2-chunks2-0-10-23] dask/array/tests/test_routines.py::test_unique_rand[shape2-chunks2-0-10-796] dask/array/tests/test_routines.py::test_unique_rand[shape3-chunks3-0-10-23] dask/array/tests/test_routines.py::test_unique_rand[shape3-chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape0-test_chunks0-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape1-test_chunks1-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape2-test_chunks2-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[True-test_shape3-test_chunks3-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape0-test_chunks0-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape1-test_chunks1-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape2-test_chunks2-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape0-elements_chunks0-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape0-elements_chunks0-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape1-elements_chunks1-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape1-elements_chunks1-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape2-elements_chunks2-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape2-elements_chunks2-0-10-796] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape3-elements_chunks3-0-10-23] dask/array/tests/test_routines.py::test_isin_rand[False-test_shape3-test_chunks3-elements_shape3-elements_chunks3-0-10-796] dask/array/tests/test_routines.py::test_isin_assume_unique[True] dask/array/tests/test_routines.py::test_isin_assume_unique[False] dask/array/tests/test_routines.py::test_roll[None-3-chunks0] dask/array/tests/test_routines.py::test_roll[None-3-chunks1] dask/array/tests/test_routines.py::test_roll[None-7-chunks0] dask/array/tests/test_routines.py::test_roll[None-7-chunks1] dask/array/tests/test_routines.py::test_roll[None-9-chunks0] dask/array/tests/test_routines.py::test_roll[None-9-chunks1] dask/array/tests/test_routines.py::test_roll[None-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[None-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[None-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[None-shift4-chunks1] dask/array/tests/test_routines.py::test_roll[0-3-chunks0] dask/array/tests/test_routines.py::test_roll[0-3-chunks1] dask/array/tests/test_routines.py::test_roll[0-7-chunks0] dask/array/tests/test_routines.py::test_roll[0-7-chunks1] dask/array/tests/test_routines.py::test_roll[0-9-chunks0] dask/array/tests/test_routines.py::test_roll[0-9-chunks1] dask/array/tests/test_routines.py::test_roll[0-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[0-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[0-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[0-shift4-chunks1] dask/array/tests/test_routines.py::test_roll[1-3-chunks0] dask/array/tests/test_routines.py::test_roll[1-3-chunks1] dask/array/tests/test_routines.py::test_roll[1-7-chunks0] dask/array/tests/test_routines.py::test_roll[1-7-chunks1] dask/array/tests/test_routines.py::test_roll[1-9-chunks0] dask/array/tests/test_routines.py::test_roll[1-9-chunks1] dask/array/tests/test_routines.py::test_roll[1-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[1-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[1-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[1-shift4-chunks1] dask/array/tests/test_routines.py::test_roll[-1-3-chunks0] dask/array/tests/test_routines.py::test_roll[-1-3-chunks1] dask/array/tests/test_routines.py::test_roll[-1-7-chunks0] dask/array/tests/test_routines.py::test_roll[-1-7-chunks1] dask/array/tests/test_routines.py::test_roll[-1-9-chunks0] dask/array/tests/test_routines.py::test_roll[-1-9-chunks1] dask/array/tests/test_routines.py::test_roll[-1-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[-1-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[-1-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[-1-shift4-chunks1] dask/array/tests/test_routines.py::test_roll[axis4-3-chunks0] dask/array/tests/test_routines.py::test_roll[axis4-3-chunks1] dask/array/tests/test_routines.py::test_roll[axis4-7-chunks0] dask/array/tests/test_routines.py::test_roll[axis4-7-chunks1] dask/array/tests/test_routines.py::test_roll[axis4-9-chunks0] dask/array/tests/test_routines.py::test_roll[axis4-9-chunks1] dask/array/tests/test_routines.py::test_roll[axis4-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[axis4-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[axis4-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[axis4-shift4-chunks1] dask/array/tests/test_routines.py::test_roll[axis5-3-chunks0] dask/array/tests/test_routines.py::test_roll[axis5-3-chunks1] dask/array/tests/test_routines.py::test_roll[axis5-7-chunks0] dask/array/tests/test_routines.py::test_roll[axis5-7-chunks1] dask/array/tests/test_routines.py::test_roll[axis5-9-chunks0] dask/array/tests/test_routines.py::test_roll[axis5-9-chunks1] dask/array/tests/test_routines.py::test_roll[axis5-shift3-chunks0] dask/array/tests/test_routines.py::test_roll[axis5-shift3-chunks1] dask/array/tests/test_routines.py::test_roll[axis5-shift4-chunks0] dask/array/tests/test_routines.py::test_roll[axis5-shift4-chunks1] dask/array/tests/test_routines.py::test_ravel dask/array/tests/test_routines.py::test_ravel_1D_no_op dask/array/tests/test_routines.py::test_squeeze[None-True] dask/array/tests/test_routines.py::test_squeeze[None-False] dask/array/tests/test_routines.py::test_squeeze[0-True] dask/array/tests/test_routines.py::test_squeeze[0-False] dask/array/tests/test_routines.py::test_squeeze[-1-True] dask/array/tests/test_routines.py::test_squeeze[-1-False] dask/array/tests/test_routines.py::test_squeeze[axis3-True] dask/array/tests/test_routines.py::test_squeeze[axis3-False] dask/array/tests/test_routines.py::test_vstack dask/array/tests/test_routines.py::test_hstack dask/array/tests/test_routines.py::test_dstack dask/array/tests/test_routines.py::test_stack_unknown_chunk_sizes[hstack-hstack-0] dask/array/tests/test_routines.py::test_stack_unknown_chunk_sizes[dstack-dstack-1] dask/array/tests/test_routines.py::test_stack_unknown_chunk_sizes[vstack-vstack-2] dask/array/tests/test_routines.py::test_take dask/array/tests/test_routines.py::test_take_dask_from_numpy dask/array/tests/test_routines.py::test_compress dask/array/tests/test_routines.py::test_extract dask/array/tests/test_routines.py::test_isnull dask/array/tests/test_routines.py::test_isnull_result_is_an_array dask/array/tests/test_routines.py::test_isclose dask/array/tests/test_routines.py::test_allclose dask/array/tests/test_routines.py::test_choose dask/array/tests/test_routines.py::test_piecewise dask/array/tests/test_routines.py::test_piecewise_otherwise dask/array/tests/test_routines.py::test_argwhere dask/array/tests/test_routines.py::test_argwhere_obj dask/array/tests/test_routines.py::test_argwhere_str dask/array/tests/test_routines.py::test_where dask/array/tests/test_routines.py::test_where_scalar_dtype dask/array/tests/test_routines.py::test_where_bool_optimization dask/array/tests/test_routines.py::test_where_nonzero dask/array/tests/test_routines.py::test_where_incorrect_args dask/array/tests/test_routines.py::test_count_nonzero dask/array/tests/test_routines.py::test_count_nonzero_axis[None] dask/array/tests/test_routines.py::test_count_nonzero_axis[0] dask/array/tests/test_routines.py::test_count_nonzero_axis[axis2] dask/array/tests/test_routines.py::test_count_nonzero_axis[axis3] dask/array/tests/test_routines.py::test_count_nonzero_obj dask/array/tests/test_routines.py::test_count_nonzero_obj_axis[None] dask/array/tests/test_routines.py::test_count_nonzero_obj_axis[0] dask/array/tests/test_routines.py::test_count_nonzero_obj_axis[axis2] dask/array/tests/test_routines.py::test_count_nonzero_obj_axis[axis3] dask/array/tests/test_routines.py::test_count_nonzero_str dask/array/tests/test_routines.py::test_flatnonzero dask/array/tests/test_routines.py::test_nonzero dask/array/tests/test_routines.py::test_nonzero_method dask/array/tests/test_routines.py::test_unravel_index_empty dask/array/tests/test_routines.py::test_unravel_index dask/array/tests/test_routines.py::test_coarsen dask/array/tests/test_routines.py::test_coarsen_with_excess dask/array/tests/test_routines.py::test_insert dask/array/tests/test_routines.py::test_multi_insert dask/array/tests/test_routines.py::test_result_type dask/array/tests/test_routines.py::test_einsum[abc,bad->abcd] dask/array/tests/test_routines.py::test_einsum[abcdef,bcdfg->abcdeg] dask/array/tests/test_routines.py::test_einsum[ea,fb,abcd,gc,hd->efgh] dask/array/tests/test_routines.py::test_einsum[ab,b] dask/array/tests/test_routines.py::test_einsum[aa] dask/array/tests/test_routines.py::test_einsum[a,a->] dask/array/tests/test_routines.py::test_einsum[a,a->a] dask/array/tests/test_routines.py::test_einsum[a,a] dask/array/tests/test_routines.py::test_einsum[a,b] dask/array/tests/test_routines.py::test_einsum[a,b,c] dask/array/tests/test_routines.py::test_einsum[a] dask/array/tests/test_routines.py::test_einsum[ba,b] dask/array/tests/test_routines.py::test_einsum[ba,b->] dask/array/tests/test_routines.py::test_einsum[defab,fedbc->defac] dask/array/tests/test_routines.py::test_einsum[ab...,bc...->ac...] dask/array/tests/test_routines.py::test_einsum[a...a] dask/array/tests/test_routines.py::test_einsum[abc...->cba...] dask/array/tests/test_routines.py::test_einsum[...ab->...a] dask/array/tests/test_routines.py::test_einsum[a...a->a...] dask/array/tests/test_routines.py::test_einsum[...abc,...abcd->...d] dask/array/tests/test_routines.py::test_einsum[ab...,b->ab...] dask/array/tests/test_routines.py::test_einsum[aa->a] dask/array/tests/test_routines.py::test_einsum[ab,ab,c->c] dask/array/tests/test_routines.py::test_einsum[aab,bc->ac] dask/array/tests/test_routines.py::test_einsum[aab,bcc->ac] dask/array/tests/test_routines.py::test_einsum[fdf,cdd,ccd,afe->ae] dask/array/tests/test_routines.py::test_einsum[fff,fae,bef,def->abd] dask/array/tests/test_routines.py::test_einsum_optimize[optimize_opts0] dask/array/tests/test_routines.py::test_einsum_optimize[optimize_opts1] dask/array/tests/test_routines.py::test_einsum_optimize[optimize_opts2] dask/array/tests/test_routines.py::test_einsum_order[C] dask/array/tests/test_routines.py::test_einsum_order[F] dask/array/tests/test_routines.py::test_einsum_order[A] dask/array/tests/test_routines.py::test_einsum_order[K] dask/array/tests/test_routines.py::test_einsum_casting[no] dask/array/tests/test_routines.py::test_einsum_casting[equiv] dask/array/tests/test_routines.py::test_einsum_casting[safe] dask/array/tests/test_routines.py::test_einsum_casting[same_kind] dask/array/tests/test_routines.py::test_einsum_casting[unsafe] dask/array/tests/test_routines.py::test_einsum_split_every[None] dask/array/tests/test_routines.py::test_einsum_split_every[2] dask/array/tests/test_routines.py::test_einsum_invalid_args dask/array/tests/test_routines.py::test_einsum_broadcasting_contraction dask/array/tests/test_routines.py::test_einsum_broadcasting_contraction2 dask/array/tests/test_routines.py::test_einsum_broadcasting_contraction3 dask/array/tests/test_routines.py::test_average[True-a0] dask/array/tests/test_routines.py::test_average[True-a1] dask/array/tests/test_routines.py::test_average[False-a0] dask/array/tests/test_routines.py::test_average[False-a1] dask/array/tests/test_routines.py::test_average_weights dask/array/tests/test_routines.py::test_average_raises
docs/source/optimize.rst dask/array/routines.py
docs/source/optimize.rst dask/array/routines.py