mrocklin: Merging tomorrow if there are no further comments
diff --git a/dask/array/core.py b/dask/array/core.py
index 6f132e1ad..a4990fe95 100644
--- a/dask/array/core.py
+++ b/dask/array/core.py
@@ -1754,9 +1754,9 @@ class Array(Base):
         return cumprod(self, axis, dtype, out=out)
 
     @derived_from(np.ndarray)
-    def squeeze(self):
+    def squeeze(self, axis=None):
         from .routines import squeeze
-        return squeeze(self)
+        return squeeze(self, axis)
 
     def rechunk(self, chunks, threshold=None, block_size_limit=None):
         """ See da.rechunk for docstring """
diff --git a/dask/array/routines.py b/dask/array/routines.py
index 8f1ea653a..da414204b 100644
--- a/dask/array/routines.py
+++ b/dask/array/routines.py
@@ -5,7 +5,6 @@ import warnings
 from collections import Iterable
 from distutils.version import LooseVersion
 from functools import wraps, partial
-from itertools import product
 from numbers import Integral
 from operator import getitem
 
@@ -836,20 +835,23 @@ def ravel(array):
 
 @wraps(np.squeeze)
 def squeeze(a, axis=None):
-    if 1 not in a.shape:
-        return a
     if axis is None:
         axis = tuple(i for i, d in enumerate(a.shape) if d == 1)
-    b = a.map_blocks(partial(np.squeeze, axis=axis), dtype=a.dtype)
-    chunks = tuple(bd for bd in b.chunks if bd != (1,))
+    elif not isinstance(axis, tuple):
+        axis = (axis,)
+
+    if any(a.shape[i] != 1 for i in axis):
+        raise ValueError("cannot squeeze axis with size other than one")
+
+    for i in axis:
+        if not (-a.ndim <= i < a.ndim):
+            raise ValueError("%i out of bounds for %i-D array" % (i, a.ndim))
 
-    name = 'squeeze-' + tokenize(a, axis)
-    old_keys = list(product([b.name], *[range(len(bd)) for bd in b.chunks]))
-    new_keys = list(product([name], *[range(len(bd)) for bd in chunks]))
+    axis = tuple(i % a.ndim for i in axis)
 
-    dsk = {n: b.dask[o] for o, n in zip(old_keys, new_keys)}
+    sl = tuple(0 if i in axis else slice(None) for i, s in enumerate(a.shape))
 
-    return Array(sharedict.merge(b.dask, (name, dsk)), name, chunks, dtype=a.dtype)
+    return a[sl]
 
 
 def topk(k, x):
diff --git a/dask/bag/core.py b/dask/bag/core.py
index 9ad1ff047..3b30bebf8 100644
--- a/dask/bag/core.py
+++ b/dask/bag/core.py
@@ -918,21 +918,65 @@ class Bag(Base):
     def join(self, other, on_self, on_other=None):
         """ Joins collection with another collection.
 
-        Other collection must be an Iterable, and not a Bag.
+        Other collection must be one of the following:
 
+        1.  An iterable.  We recommend tuples over lists for internal
+            performance reasons.
+        2.  A delayed object, pointing to a tuple.  This is recommended if the
+            other collection is sizable and you're using the distributed
+            scheduler.  Dask is able to pass around data wrapped in delayed
+            objects with greater sophistication.
+        3.  A Bag with a single partition
+
+        You might also consider Dask Dataframe, whose join operations are much
+        more heavily optimized.
+
+        Parameters
+        ----------
+        other: Iterable, Delayed, Bag
+            Other collection on which to join
+        on_self: callable
+            Function to call on elements in this collection to determine a
+            match
+        on_other: callable (defaults to on_self)
+            Function to call on elements in the other collection to determine a
+            match
+
+        Examples
+        --------
         >>> people = from_sequence(['Alice', 'Bob', 'Charlie'])
         >>> fruit = ['Apple', 'Apricot', 'Banana']
         >>> list(people.join(fruit, lambda x: x[0]))  # doctest: +SKIP
         [('Apple', 'Alice'), ('Apricot', 'Alice'), ('Banana', 'Bob')]
         """
-        assert isinstance(other, Iterable)
-        assert not isinstance(other, Bag)
+        name = 'join-' + tokenize(self, other, on_self, on_other)
+        dsk = {}
+        if isinstance(other, Bag):
+            if other.npartitions == 1:
+                dsk.update(other.dask)
+                dsk['join-%s-other' % name] = (list, other._keys()[0])
+                other = other._keys()[0]
+            else:
+                msg = ("Multi-bag joins are not implemented. "
+                       "We recommend Dask dataframe if appropriate")
+                raise NotImplementedError(msg)
+        elif isinstance(other, Delayed):
+            dsk.update(other.dask)
+            other = other._key
+        elif isinstance(other, Iterable):
+            other = other
+        else:
+            msg = ("Joined argument must be single-partition Bag, "
+                   " delayed object, or Iterable, got %s" %
+                   type(other).__name)
+            raise TypeError(msg)
+
         if on_other is None:
             on_other = on_self
-        name = 'join-' + tokenize(self, other, on_self, on_other)
-        dsk = dict(((name, i), (list, (join, on_other, other,
-                                       on_self, (self.name, i))))
-                   for i in range(self.npartitions))
+
+        dsk.update({(name, i): (list, (join, on_other, other,
+                                       on_self, (self.name, i)))
+                   for i in range(self.npartitions)})
         return type(self)(merge(self.dask, dsk), name, self.npartitions)
 
     def product(self, other):
diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst
index 12a4cda26..56632fa08 100644
--- a/docs/source/changelog.rst
+++ b/docs/source/changelog.rst
@@ -19,10 +19,10 @@ DataFrame
 - Add ``dd.tseries.Resampler.agg`` (:pr:`3202`) `Richard Postelnik`_
 - Support operations that mix dataframes and arrays (:pr:`3230`) `Matthew Rocklin`_
 
-
 Bag
 +++
 
+- Support joining against single-partitioned bags and delayed objects (:pr:`3254`) `Matthew Rocklin`_
 
 Core
 ++++
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 3edb01201..a045f7771 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -190,7 +190,7 @@ distributed memory clusters.
    scheduling.rst
    distributed.rst
 
-**Diagnosing Perofmrance**
+**Diagnosing Performance**
 
 Parallel code can be tricky to debug and profile. Dask provides a several tools
 to help make debugging and profiling graph execution easier.

dask.Bag slow and very large memory consumption with join
In a certain application I am passing a (moderately) large argument to Bag.join. But I am encountering a few issues:
- The graph does not appear in the diagnostics page (presumably the graph is being communicated)
- The client consumes GB of memory

I suspect this has to do with the fact that tasks are serialized individually and this large argument gets serialized multiple times.

This is the code to reproduce the issue: 

```
import dask, distributed
from dask.distributed import Client
from dask.sizeof import sizeof
import dask.bag as db
import time

dask.__version__
# '0.17.1'
distributed.__version__
# '1.21.0'
c = Client()
data = list(range(1000000))
sizeof(data) # 37 Mb

start = time.time()
bag = db.from_sequence(range(100000), npartitions=100).join(data, lambda x: x)
print("Graph creation time", time.time() - start)
# Graph creation time 1.0362498760223389

start = time.time()
bag.count().compute()
print("Graph computation time", time.time() - start)

# This consumes GB of memory
```
diff --git a/dask/array/tests/test_routines.py b/dask/array/tests/test_routines.py
index f37b9f817..f084adbd2 100644
--- a/dask/array/tests/test_routines.py
+++ b/dask/array/tests/test_routines.py
@@ -710,13 +710,35 @@ def test_ravel():
     assert_eq(np.ravel(x), da.ravel(a))
 
 
-def test_squeeze():
-    x = da.ones((10, 1), chunks=(3, 1))
+@pytest.mark.parametrize('is_func', [True, False])
+@pytest.mark.parametrize('axis', [None, 0, -1, (0, -1)])
+def test_squeeze(is_func, axis):
+    a = np.arange(10)[None, :, None, None]
+    d = da.from_array(a, chunks=(1, 3, 1, 1))
+
+    if is_func:
+        a_s = np.squeeze(a, axis=axis)
+        d_s = da.squeeze(d, axis=axis)
+    else:
+        a_s = a.squeeze(axis=axis)
+        d_s = d.squeeze(axis=axis)
+
+    assert_eq(d_s, a_s)
+    assert same_keys(d_s, da.squeeze(d, axis=axis))
 
-    assert_eq(x.squeeze(), x.compute().squeeze())
+    if axis is None:
+        axis = tuple(range(a.ndim))
+    else:
+        axis = axis if isinstance(axis, tuple) else (axis,)
+        axis = tuple(i % a.ndim for i in axis)
+    axis = tuple(
+        i for i, c in enumerate(d.chunks) if i in axis and len(c) == 1
+    )
 
-    assert x.squeeze().chunks == ((3, 3, 3, 1),)
-    assert same_keys(x.squeeze(), x.squeeze())
+    exp_d_s_chunks = tuple(
+        c for i, c in enumerate(d.chunks) if i not in axis
+    )
+    assert d_s.chunks == exp_d_s_chunks
 
 
 def test_vstack():
diff --git a/dask/bag/tests/test_bag.py b/dask/bag/tests/test_bag.py
index 004139fba..cd9bf68d2 100644
--- a/dask/bag/tests/test_bag.py
+++ b/dask/bag/tests/test_bag.py
@@ -32,6 +32,15 @@ L = list(range(5)) * 3
 b = Bag(dsk, 'x', 3)
 
 
+def assert_eq(a, b):
+    if hasattr(a, 'compute'):
+        a = a.compute(get=dask.local.get_sync)
+    if hasattr(b, 'compute'):
+        b = b.compute(get=dask.local.get_sync)
+
+    assert a == b
+
+
 def iseven(x):
     return x % 2 == 0
 
@@ -353,12 +362,18 @@ def test_var():
     assert float(b.var()) == 2.0
 
 
-def test_join():
-    c = b.join([1, 2, 3], on_self=isodd, on_other=iseven)
-    assert list(c) == list(join(iseven, [1, 2, 3], isodd, list(b)))
-    assert (list(b.join([1, 2, 3], isodd)) ==
-            list(join(isodd, [1, 2, 3], isodd, list(b))))
-    assert c.name == b.join([1, 2, 3], on_self=isodd, on_other=iseven).name
+@pytest.mark.parametrize('transform', [
+    identity,
+    dask.delayed,
+    lambda x: db.from_sequence(x, npartitions=1)
+])
+def test_join(transform):
+    other = transform([1, 2, 3])
+    c = b.join(other, on_self=isodd, on_other=iseven)
+    assert_eq(c, list(join(iseven, [1, 2, 3], isodd, list(b))))
+    assert_eq(b.join(other, isodd),
+              list(join(isodd, [1, 2, 3], isodd, list(b))))
+    assert c.name == b.join(other, on_self=isodd, on_other=iseven).name
 
 
 def test_foldby():

pip install -e .[complete]
parse_log_pytest
pytest
pytest
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
certifi==2021.5.30
click==8.0.4
cloudpickle==2.2.1
-e git+https://github.com/dask/dask.git@cc9f8db12e4c43b61fb79bb74bbd71b3cd8ba1f7#egg=dask
distributed==1.21.8
HeapDict==1.0.1
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
locket==1.0.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
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
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
python-dateutil==2.9.0.post0
pytz==2025.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
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=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:
      - click==8.0.4
      - cloudpickle==2.2.1
      - distributed==1.21.8
      - heapdict==1.0.1
      - locket==1.0.0
      - msgpack==1.0.5
      - numpy==1.19.5
      - pandas==1.1.5
      - partd==1.2.0
      - psutil==7.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tblib==1.7.0
      - toolz==0.12.0
      - tornado==6.1
      - zict==2.1.0
prefix: /opt/conda/envs/dask

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/bag/tests/test_bag.py::test_join[delayed] dask/bag/tests/test_bag.py::test_join[<lambda>]
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_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_topk dask/array/tests/test_routines.py::test_topk_k_bigger_than_chunk 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_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_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_squeeze[None-True] 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_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_isclose dask/array/tests/test_routines.py::test_allclose dask/array/tests/test_routines.py::test_choose 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_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/bag/tests/test_bag.py::test_Bag dask/bag/tests/test_bag.py::test_keys dask/bag/tests/test_bag.py::test_bag_map dask/bag/tests/test_bag.py::test_map_method dask/bag/tests/test_bag.py::test_starmap dask/bag/tests/test_bag.py::test_filter dask/bag/tests/test_bag.py::test_remove dask/bag/tests/test_bag.py::test_iter dask/bag/tests/test_bag.py::test_repr[str] dask/bag/tests/test_bag.py::test_repr[repr] dask/bag/tests/test_bag.py::test_pluck dask/bag/tests/test_bag.py::test_pluck_with_default dask/bag/tests/test_bag.py::test_unzip dask/bag/tests/test_bag.py::test_fold dask/bag/tests/test_bag.py::test_distinct dask/bag/tests/test_bag.py::test_frequencies dask/bag/tests/test_bag.py::test_topk dask/bag/tests/test_bag.py::test_topk_with_non_callable_key[1] dask/bag/tests/test_bag.py::test_topk_with_non_callable_key[2] dask/bag/tests/test_bag.py::test_topk_with_multiarg_lambda dask/bag/tests/test_bag.py::test_lambdas dask/bag/tests/test_bag.py::test_reductions dask/bag/tests/test_bag.py::test_reduction_names dask/bag/tests/test_bag.py::test_tree_reductions dask/bag/tests/test_bag.py::test_aggregation[1] dask/bag/tests/test_bag.py::test_aggregation[3] dask/bag/tests/test_bag.py::test_aggregation[4] dask/bag/tests/test_bag.py::test_non_splittable_reductions[1] dask/bag/tests/test_bag.py::test_non_splittable_reductions[10] dask/bag/tests/test_bag.py::test_std dask/bag/tests/test_bag.py::test_var dask/bag/tests/test_bag.py::test_join[identity] dask/bag/tests/test_bag.py::test_foldby dask/bag/tests/test_bag.py::test_foldby_tree_reduction dask/bag/tests/test_bag.py::test_map_partitions dask/bag/tests/test_bag.py::test_map_partitions_args_kwargs dask/bag/tests/test_bag.py::test_random_sample_size dask/bag/tests/test_bag.py::test_random_sample_prob_range dask/bag/tests/test_bag.py::test_random_sample_repeated_computation dask/bag/tests/test_bag.py::test_random_sample_different_definitions dask/bag/tests/test_bag.py::test_random_sample_random_state dask/bag/tests/test_bag.py::test_lazify_task dask/bag/tests/test_bag.py::test_lazify dask/bag/tests/test_bag.py::test_inline_singleton_lists dask/bag/tests/test_bag.py::test_take dask/bag/tests/test_bag.py::test_take_npartitions dask/bag/tests/test_bag.py::test_take_npartitions_warn dask/bag/tests/test_bag.py::test_map_is_lazy dask/bag/tests/test_bag.py::test_can_use_dict_to_make_concrete dask/bag/tests/test_bag.py::test_read_text dask/bag/tests/test_bag.py::test_read_text_large dask/bag/tests/test_bag.py::test_read_text_encoding dask/bag/tests/test_bag.py::test_read_text_large_gzip dask/bag/tests/test_bag.py::test_from_sequence dask/bag/tests/test_bag.py::test_from_long_sequence dask/bag/tests/test_bag.py::test_product dask/bag/tests/test_bag.py::test_partition_collect dask/bag/tests/test_bag.py::test_groupby dask/bag/tests/test_bag.py::test_groupby_with_indexer dask/bag/tests/test_bag.py::test_groupby_with_npartitions_changed dask/bag/tests/test_bag.py::test_concat dask/bag/tests/test_bag.py::test_flatten dask/bag/tests/test_bag.py::test_concat_after_map dask/bag/tests/test_bag.py::test_args dask/bag/tests/test_bag.py::test_to_dataframe dask/bag/tests/test_bag.py::test_to_textfiles[gz-GzipFile] dask/bag/tests/test_bag.py::test_to_textfiles[-open] dask/bag/tests/test_bag.py::test_to_textfiles[bz2-BZ2File] dask/bag/tests/test_bag.py::test_to_textfiles_name_function_preserves_order dask/bag/tests/test_bag.py::test_to_textfiles_name_function_warn dask/bag/tests/test_bag.py::test_to_textfiles_encoding dask/bag/tests/test_bag.py::test_to_textfiles_inputs dask/bag/tests/test_bag.py::test_to_textfiles_endlines dask/bag/tests/test_bag.py::test_string_namespace dask/bag/tests/test_bag.py::test_string_namespace_with_unicode dask/bag/tests/test_bag.py::test_str_empty_split dask/bag/tests/test_bag.py::test_map_with_iterator_function dask/bag/tests/test_bag.py::test_ensure_compute_output_is_concrete dask/bag/tests/test_bag.py::test_bag_class_extend dask/bag/tests/test_bag.py::test_gh715 dask/bag/tests/test_bag.py::test_bag_compute_forward_kwargs dask/bag/tests/test_bag.py::test_to_delayed dask/bag/tests/test_bag.py::test_to_delayed_optimize_graph dask/bag/tests/test_bag.py::test_from_delayed dask/bag/tests/test_bag.py::test_from_delayed_iterator dask/bag/tests/test_bag.py::test_range dask/bag/tests/test_bag.py::test_zip[1] dask/bag/tests/test_bag.py::test_zip[7] dask/bag/tests/test_bag.py::test_zip[10] dask/bag/tests/test_bag.py::test_zip[28] dask/bag/tests/test_bag.py::test_repartition[1-1] dask/bag/tests/test_bag.py::test_repartition[1-2] dask/bag/tests/test_bag.py::test_repartition[1-7] dask/bag/tests/test_bag.py::test_repartition[1-11] dask/bag/tests/test_bag.py::test_repartition[1-23] dask/bag/tests/test_bag.py::test_repartition[2-1] dask/bag/tests/test_bag.py::test_repartition[2-2] dask/bag/tests/test_bag.py::test_repartition[2-7] dask/bag/tests/test_bag.py::test_repartition[2-11] dask/bag/tests/test_bag.py::test_repartition[2-23] dask/bag/tests/test_bag.py::test_repartition[5-1] dask/bag/tests/test_bag.py::test_repartition[5-2] dask/bag/tests/test_bag.py::test_repartition[5-7] dask/bag/tests/test_bag.py::test_repartition[5-11] dask/bag/tests/test_bag.py::test_repartition[5-23] dask/bag/tests/test_bag.py::test_repartition[12-1] dask/bag/tests/test_bag.py::test_repartition[12-2] dask/bag/tests/test_bag.py::test_repartition[12-7] dask/bag/tests/test_bag.py::test_repartition[12-11] dask/bag/tests/test_bag.py::test_repartition[12-23] dask/bag/tests/test_bag.py::test_repartition[23-1] dask/bag/tests/test_bag.py::test_repartition[23-2] dask/bag/tests/test_bag.py::test_repartition[23-7] dask/bag/tests/test_bag.py::test_repartition[23-11] dask/bag/tests/test_bag.py::test_repartition[23-23] dask/bag/tests/test_bag.py::test_repartition_names dask/bag/tests/test_bag.py::test_accumulate dask/bag/tests/test_bag.py::test_groupby_tasks dask/bag/tests/test_bag.py::test_groupby_tasks_names dask/bag/tests/test_bag.py::test_groupby_tasks_2[1000-20-100] dask/bag/tests/test_bag.py::test_groupby_tasks_2[12345-234-1042] dask/bag/tests/test_bag.py::test_groupby_tasks_3 dask/bag/tests/test_bag.py::test_to_textfiles_empty_partitions dask/bag/tests/test_bag.py::test_reduction_empty dask/bag/tests/test_bag.py::test_reduction_empty_aggregate[1] dask/bag/tests/test_bag.py::test_reduction_empty_aggregate[2] dask/bag/tests/test_bag.py::test_reduction_empty_aggregate[4] dask/bag/tests/test_bag.py::test_reduction_with_non_comparable_objects dask/bag/tests/test_bag.py::test_empty dask/bag/tests/test_bag.py::test_bag_picklable dask/bag/tests/test_bag.py::test_msgpack_unicode dask/bag/tests/test_bag.py::test_bag_with_single_callable dask/bag/tests/test_bag.py::test_optimize_fuse_keys dask/bag/tests/test_bag.py::test_reductions_are_lazy dask/bag/tests/test_bag.py::test_repeated_groupby dask/bag/tests/test_bag.py::test_temporary_directory dask/bag/tests/test_bag.py::test_empty_bag dask/bag/tests/test_bag.py::test_bag_paths
dask/bag/core.py dask/array/routines.py docs/source/index.rst dask/array/core.py docs/source/changelog.rst
dask/bag/core.py dask/array/routines.py docs/source/index.rst dask/array/core.py docs/source/changelog.rst