quasiben: I see this is  your first time contributing, welcome!

@thomasjpfan this looks really great! There is currently a test failure due to incompatibility with older versions of NumPy.  You can skip the skip the test like we do here:

https://github.com/dask/dask/blob/54deb7fa4cdbbf3e124be6834224272be27ace65/dask/array/tests/test_routines.py#L812-L814
thomasjpfan: Thank you for looking at this so quickly!

Updated PR with a `pytest.mark.skipif` in the `parametrize` to skip if the numpy version is not >1.17
quasiben: Thanks for updating so quickly!  As I'm not very familiar with the array side of dask I'm going to wait until tomorrow to merge giving other reviewers some time to comment
diff --git a/continuous_integration/appveyor/environment.yaml b/continuous_integration/appveyor/environment.yaml
index 6b0102296..7c1dd0b63 100644
--- a/continuous_integration/appveyor/environment.yaml
+++ b/continuous_integration/appveyor/environment.yaml
@@ -10,7 +10,6 @@ dependencies:
   - pytest
   - cloudpickle
   - distributed
-  - msgpack-python==0.6.2
   - toolz
   - bcolz
   - bokeh
diff --git a/continuous_integration/travis/travis-36.yaml b/continuous_integration/travis/travis-36.yaml
index e21d2c8d6..45078fffb 100644
--- a/continuous_integration/travis/travis-36.yaml
+++ b/continuous_integration/travis/travis-36.yaml
@@ -34,8 +34,7 @@ dependencies:
   - cloudpickle
   - crick
   - cytoolz
-  - distributed==2.0.1
-  - msgpack-python==0.6.2
+  - distributed
   - graphviz
   - ipython
   - lz4
diff --git a/continuous_integration/travis/travis-37.yaml b/continuous_integration/travis/travis-37.yaml
index 4a134554d..d6bcebef2 100644
--- a/continuous_integration/travis/travis-37.yaml
+++ b/continuous_integration/travis/travis-37.yaml
@@ -32,8 +32,7 @@ dependencies:
   - cloudpickle
   - crick
   - cytoolz
-  - distributed==2.0.1
-  - msgpack-python==0.6.2
+  - distributed
   - graphviz
   - ipython
   - lz4
diff --git a/continuous_integration/travis/travis-38-dev.yaml b/continuous_integration/travis/travis-38-dev.yaml
index 16fab121f..070f33d2e 100644
--- a/continuous_integration/travis/travis-38-dev.yaml
+++ b/continuous_integration/travis/travis-38-dev.yaml
@@ -32,7 +32,7 @@ dependencies:
   - cloudpickle
   - crick
   - cytoolz
-  - distributed==2.0.1
+  - distributed
   - graphviz
   - ipython
   - lz4
diff --git a/continuous_integration/travis/travis-38.yaml b/continuous_integration/travis/travis-38.yaml
index 86f32d5f8..34edf05b2 100644
--- a/continuous_integration/travis/travis-38.yaml
+++ b/continuous_integration/travis/travis-38.yaml
@@ -32,8 +32,7 @@ dependencies:
   - cloudpickle
   - crick
   - cytoolz
-  - distributed==2.0.1
-  - msgpack-python==0.6.2
+  - distributed
   - graphviz
   - ipython
   - lz4
diff --git a/dask/array/creation.py b/dask/array/creation.py
index 963056c7a..b53a16628 100644
--- a/dask/array/creation.py
+++ b/dask/array/creation.py
@@ -945,6 +945,11 @@ def pad_edge(array, pad_width, mode, *args):
                         zip(pad_arrays, end_values, pad_width[d], pad_chunks)
                     )
                 ]
+        elif mode == "empty":
+            pad_arrays = [
+                empty(s, dtype=array.dtype, chunks=c)
+                for s, c in zip(pad_shapes, pad_chunks)
+            ]
 
         result = concatenate([pad_arrays[0], result, pad_arrays[1]], axis=d)
 
@@ -1119,7 +1124,7 @@ def pad(array, pad_width, mode, **kwargs):
         kwargs.setdefault("end_values", 0)
     elif mode in ["reflect", "symmetric"]:
         kwargs.setdefault("reflect_type", "even")
-    elif mode in ["edge", "wrap"]:
+    elif mode in ["edge", "wrap", "empty"]:
         if kwargs:
             raise TypeError("Got unsupported keyword arguments.")
     elif callable(mode):
@@ -1132,7 +1137,7 @@ def pad(array, pad_width, mode, **kwargs):
 
     if mode in ["maximum", "mean", "median", "minimum"]:
         return pad_stats(array, pad_width, mode, *kwargs.values())
-    elif mode in ["constant", "edge", "linear_ramp"]:
+    elif mode in ["constant", "edge", "linear_ramp", "empty"]:
         return pad_edge(array, pad_width, mode, *kwargs.values())
     elif mode in ["reflect", "symmetric", "wrap"]:
         return pad_reuse(array, pad_width, mode, *kwargs.values())
diff --git a/dask/base.py b/dask/base.py
index 1612b8408..e3ac1e9d4 100644
--- a/dask/base.py
+++ b/dask/base.py
@@ -683,6 +683,11 @@ def normalize_literal(lit):
     return "literal", normalize_token(lit())
 
 
+@normalize_token.register(range)
+def normalize_range(r):
+    return list(map(normalize_token, [r.start, r.stop, r.step]))
+
+
 @normalize_token.register(object)
 def normalize_object(o):
     method = getattr(o, "__dask_tokenize__", None)
diff --git a/docs/source/dataframe-groupby.rst b/docs/source/dataframe-groupby.rst
index 46422b1c5..3156f3eed 100644
--- a/docs/source/dataframe-groupby.rst
+++ b/docs/source/dataframe-groupby.rst
@@ -207,3 +207,16 @@ Finally, we create and use the aggregation
    a
    a  2
    b  4
+
+Another example of a custom aggregation is the Dask DataFrame version of 
+Pandas' ``groupby('g').agg(list)``:
+
+.. code-block:: python
+
+   >>> import itertools as it
+   >>> collect_list = dd.Aggregation(
+   ...     name="collect_list",
+   ...     chunk=lambda s: s.apply(list),
+   ...     agg=lambda s0: s0.apply(lambda chunks: list(it.chain.from_iterable(chunks))),
+   ... )
+   >>> df.groupby('g').agg(collect_list)

Add "empty" mode for `da.pad`
NumPy 1.17.0 adds a new mode to `np.pad` called "empty", which pads the provided array with uninitialized arrays (like `np.empty`). Would be good to add this to `da.pad` as well.
diff --git a/dask/array/tests/test_creation.py b/dask/array/tests/test_creation.py
index 64eda3673..2f73f8405 100644
--- a/dask/array/tests/test_creation.py
+++ b/dask/array/tests/test_creation.py
@@ -640,6 +640,16 @@ skip_stat_length = pytest.mark.xfail(_numpy_117, reason="numpy-14061")
         ((10, 11), (4, 5), 0, "reflect", {}),
         ((10, 11), (4, 5), 0, "symmetric", {}),
         ((10, 11), (4, 5), 0, "wrap", {}),
+        pytest.param(
+            (10, 11),
+            (4, 5),
+            0,
+            "empty",
+            {},
+            marks=pytest.mark.skipif(
+                not _numpy_117, reason="requires NumPy>=1.17 for empty mode support"
+            ),
+        ),
     ],
 )
 def test_pad_0_width(shape, chunks, pad_width, mode, kwargs):
@@ -683,6 +693,16 @@ def test_pad_0_width(shape, chunks, pad_width, mode, kwargs):
         ((10,), (3,), ((2, 3)), "maximum", {"stat_length": (1, 2)}),
         ((10, 11), (4, 5), ((1, 4), (2, 3)), "mean", {"stat_length": ((3, 4), (2, 1))}),
         ((10,), (3,), ((2, 3)), "minimum", {"stat_length": (2, 3)}),
+        pytest.param(
+            (10,),
+            (3,),
+            1,
+            "empty",
+            {},
+            marks=pytest.mark.skipif(
+                not _numpy_117, reason="requires NumPy>=1.17 for empty mode support"
+            ),
+        ),
     ],
 )
 def test_pad(shape, chunks, pad_width, mode, kwargs):
@@ -692,7 +712,11 @@ def test_pad(shape, chunks, pad_width, mode, kwargs):
     np_r = np.pad(np_a, pad_width, mode, **kwargs)
     da_r = da.pad(da_a, pad_width, mode, **kwargs)
 
-    assert_eq(np_r, da_r)
+    if mode == "empty":
+        # empty pads lead to undefined values which may be different
+        assert_eq(np_r[pad_width:-pad_width], da_r[pad_width:-pad_width])
+    else:
+        assert_eq(np_r, da_r)
 
 
 @pytest.mark.parametrize("kwargs", [{}, {"scaler": 2}])
diff --git a/dask/tests/test_base.py b/dask/tests/test_base.py
index 663a77846..6f96e529d 100644
--- a/dask/tests/test_base.py
+++ b/dask/tests/test_base.py
@@ -394,6 +394,13 @@ def test_tokenize_ordered_dict():
     assert tokenize(a) != tokenize(c)
 
 
+def test_tokenize_range():
+    assert tokenize(range(5, 10, 2)) == tokenize(range(5, 10, 2))  # Identical ranges
+    assert tokenize(range(5, 10, 2)) != tokenize(range(1, 10, 2))  # Different start
+    assert tokenize(range(5, 10, 2)) != tokenize(range(5, 15, 2))  # Different stop
+    assert tokenize(range(5, 10, 2)) != tokenize(range(5, 10, 1))  # Different step
+
+
 @pytest.mark.skipif("not np")
 def test_tokenize_object_array_with_nans():
     a = np.array([u"foo", u"Jos\xe9", np.nan], dtype="O")
diff --git a/dask/tests/test_dot.py b/dask/tests/test_dot.py
index 0fb245d40..a069878cc 100644
--- a/dask/tests/test_dot.py
+++ b/dask/tests/test_dot.py
@@ -217,11 +217,10 @@ def test_dot_graph_defaults():
         ),
     ],
 )
-def test_filenames_and_formats(filename, format, target, expected_result_type):
-    result = dot_graph(dsk, filename=filename, format=format)
-    assert os.path.isfile(target)
+def test_filenames_and_formats(tmpdir, filename, format, target, expected_result_type):
+    result = dot_graph(dsk, filename=str(tmpdir.join(filename)), format=format)
+    assert tmpdir.join(target).exists()
     assert isinstance(result, expected_result_type)
-    ensure_not_exists(target)
 
 
 def test_delayed_kwargs_apply():

pip install -e .[complete]
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
bokeh==2.4.3
certifi @ file:///croot/certifi_1671487769961/work/certifi
click==8.1.8
cloudpickle==2.2.1
-e git+https://github.com/dask/dask.git@54deb7fa4cdbbf3e124be6834224272be27ace65#egg=dask
distributed==2.30.1
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
fsspec==2023.1.0
HeapDict==1.0.1
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==3.1.6
locket==1.0.0
MarkupSafe==2.1.5
msgpack==1.0.5
numpy==1.21.6
packaging @ file:///croot/packaging_1671697413597/work
pandas==1.3.5
partd==1.4.1
Pillow==9.5.0
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.1
six==1.17.0
sortedcontainers==2.4.0
tblib==2.0.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
toolz==0.12.1
tornado==6.2
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zict==2.2.0
zipp @ file:///croot/zipp_1672387121353/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=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - bokeh==2.4.3
      - click==8.1.8
      - cloudpickle==2.2.1
      - distributed==2.30.1
      - fsspec==2023.1.0
      - heapdict==1.0.1
      - jinja2==3.1.6
      - locket==1.0.0
      - markupsafe==2.1.5
      - msgpack==1.0.5
      - numpy==1.21.6
      - pandas==1.3.5
      - partd==1.4.1
      - pillow==9.5.0
      - psutil==7.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyyaml==6.0.1
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tblib==2.0.0
      - toolz==0.12.1
      - tornado==6.2
      - zict==2.2.0
prefix: /opt/conda/envs/dask

dask/array/tests/test_creation.py::test_pad_0_width[shape6-chunks6-0-empty-kwargs6] dask/array/tests/test_creation.py::test_pad[shape14-chunks14-1-empty-kwargs14] dask/tests/test_base.py::test_tokenize_range
dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-tuple-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-list-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-tuple-asarray-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-tuple-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-list-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-list-asarray-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-tuple-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-list-full] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-empty_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-empty] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-ones_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-ones] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-zeros_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-zeros] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-full_like] dask/array/tests/test_creation.py::test_arr_like[i4-shape0-chunks0-asarray-asarray-full] dask/array/tests/test_creation.py::test_linspace[True] dask/array/tests/test_creation.py::test_linspace[False] dask/array/tests/test_creation.py::test_arange dask/array/tests/test_creation.py::test_arange_dtypes[0-1-1-None] dask/array/tests/test_creation.py::test_arange_dtypes[1.5-2-1-None] dask/array/tests/test_creation.py::test_arange_dtypes[1-2.5-1-None] dask/array/tests/test_creation.py::test_arange_dtypes[1-2-0.5-None] dask/array/tests/test_creation.py::test_arange_dtypes[start4-stop4-step4-None] dask/array/tests/test_creation.py::test_arange_dtypes[start5-stop5-step5-None] dask/array/tests/test_creation.py::test_arange_dtypes[start6-stop6-step6-None] dask/array/tests/test_creation.py::test_arange_dtypes[start7-stop7-step7-None] dask/array/tests/test_creation.py::test_arange_dtypes[start8-stop8-step8-uint32] dask/array/tests/test_creation.py::test_arange_dtypes[start9-stop9-step9-uint64] dask/array/tests/test_creation.py::test_arange_float_step dask/array/tests/test_creation.py::test_indices_wrong_chunks dask/array/tests/test_creation.py::test_indices_dimensions_chunks dask/array/tests/test_creation.py::test_empty_indicies dask/array/tests/test_creation.py::test_indicies dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes0-chunks0] dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes1-chunks1] dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes2-chunks2] dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes3-chunks3] dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes4-chunks4] dask/array/tests/test_creation.py::test_meshgrid[False-ij-shapes5-chunks5] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes0-chunks0] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes1-chunks1] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes2-chunks2] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes3-chunks3] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes4-chunks4] dask/array/tests/test_creation.py::test_meshgrid[False-xy-shapes5-chunks5] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes0-chunks0] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes1-chunks1] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes2-chunks2] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes3-chunks3] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes4-chunks4] dask/array/tests/test_creation.py::test_meshgrid[True-ij-shapes5-chunks5] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes0-chunks0] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes1-chunks1] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes2-chunks2] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes3-chunks3] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes4-chunks4] dask/array/tests/test_creation.py::test_meshgrid[True-xy-shapes5-chunks5] dask/array/tests/test_creation.py::test_meshgrid_inputcoercion dask/array/tests/test_creation.py::test_tril_triu dask/array/tests/test_creation.py::test_tril_triu_errors dask/array/tests/test_creation.py::test_tril_triu_non_square_arrays dask/array/tests/test_creation.py::test_eye dask/array/tests/test_creation.py::test_diag dask/array/tests/test_creation.py::test_diagonal dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs0-None] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs0-f8] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs0-i8] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs1-None] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs1-f8] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs1-i8] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs2-None] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs2-f8] dask/array/tests/test_creation.py::test_fromfunction[<lambda>-kwargs2-i8] dask/array/tests/test_creation.py::test_repeat dask/array/tests/test_creation.py::test_tile_basic[2] dask/array/tests/test_creation.py::test_tile_basic[reps1] dask/array/tests/test_creation.py::test_tile_basic[reps2] dask/array/tests/test_creation.py::test_tile_basic[reps3] dask/array/tests/test_creation.py::test_tile_basic[reps4] dask/array/tests/test_creation.py::test_tile_chunks[0-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[0-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[1-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[1-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[2-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[2-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[3-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[3-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[5-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[5-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[reps5-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[reps5-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_chunks[reps6-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_chunks[reps6-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_neg_reps[-1-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_neg_reps[-1-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_neg_reps[-5-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_neg_reps[-5-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_zero_reps[0-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_zero_reps[0-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_zero_reps[reps1-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_zero_reps[reps1-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_zero_reps[reps2-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_zero_reps[reps2-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_zero_reps[reps3-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_zero_reps[reps3-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_empty_array[2-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_empty_array[2-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_empty_array[reps1-shape0-chunks0] dask/array/tests/test_creation.py::test_tile_empty_array[reps1-shape1-chunks1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps0-shape5] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps1-shape5] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps2-shape5] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps3-shape5] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps4-shape5] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape0] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape1] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape2] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape3] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape4] dask/array/tests/test_creation.py::test_tile_np_kroncompare_examples[reps5-shape5] dask/array/tests/test_creation.py::test_pad_0_width[shape0-chunks0-0-constant-kwargs0] dask/array/tests/test_creation.py::test_pad_0_width[shape1-chunks1-0-edge-kwargs1] dask/array/tests/test_creation.py::test_pad_0_width[shape2-chunks2-0-linear_ramp-kwargs2] dask/array/tests/test_creation.py::test_pad_0_width[shape3-chunks3-0-reflect-kwargs3] dask/array/tests/test_creation.py::test_pad_0_width[shape4-chunks4-0-symmetric-kwargs4] dask/array/tests/test_creation.py::test_pad_0_width[shape5-chunks5-0-wrap-kwargs5] dask/array/tests/test_creation.py::test_pad[shape0-chunks0-1-constant-kwargs0] dask/array/tests/test_creation.py::test_pad[shape1-chunks1-2-constant-kwargs1] dask/array/tests/test_creation.py::test_pad[shape2-chunks2-pad_width2-constant-kwargs2] dask/array/tests/test_creation.py::test_pad[shape3-chunks3-pad_width3-constant-kwargs3] dask/array/tests/test_creation.py::test_pad[shape4-chunks4-3-edge-kwargs4] dask/array/tests/test_creation.py::test_pad[shape5-chunks5-3-linear_ramp-kwargs5] dask/array/tests/test_creation.py::test_pad[shape6-chunks6-3-linear_ramp-kwargs6] dask/array/tests/test_creation.py::test_pad[shape7-chunks7-pad_width7-linear_ramp-kwargs7] dask/array/tests/test_creation.py::test_pad[shape8-chunks8-pad_width8-reflect-kwargs8] dask/array/tests/test_creation.py::test_pad[shape9-chunks9-pad_width9-symmetric-kwargs9] dask/array/tests/test_creation.py::test_pad[shape10-chunks10-pad_width10-wrap-kwargs10] dask/array/tests/test_creation.py::test_pad[shape11-chunks11-pad_width11-maximum-kwargs11] dask/array/tests/test_creation.py::test_pad[shape12-chunks12-pad_width12-mean-kwargs12] dask/array/tests/test_creation.py::test_pad[shape13-chunks13-pad_width13-minimum-kwargs13] dask/array/tests/test_creation.py::test_pad_udf[kwargs0] dask/array/tests/test_creation.py::test_pad_udf[kwargs1] dask/array/tests/test_creation.py::test_auto_chunks dask/tests/test_base.py::test_normalize_function dask/tests/test_base.py::test_tokenize dask/tests/test_base.py::test_tokenize_numpy_array_consistent_on_values dask/tests/test_base.py::test_tokenize_numpy_array_supports_uneven_sizes dask/tests/test_base.py::test_tokenize_discontiguous_numpy_array dask/tests/test_base.py::test_tokenize_numpy_datetime dask/tests/test_base.py::test_tokenize_numpy_scalar dask/tests/test_base.py::test_tokenize_numpy_scalar_string_rep dask/tests/test_base.py::test_tokenize_numpy_array_on_object_dtype dask/tests/test_base.py::test_tokenize_numpy_memmap_offset dask/tests/test_base.py::test_tokenize_numpy_memmap dask/tests/test_base.py::test_tokenize_numpy_memmap_no_filename dask/tests/test_base.py::test_tokenize_numpy_ufunc_consistent dask/tests/test_base.py::test_tokenize_partial_func_args_kwargs_consistent dask/tests/test_base.py::test_normalize_base dask/tests/test_base.py::test_tokenize_pandas dask/tests/test_base.py::test_tokenize_pandas_invalid_unicode dask/tests/test_base.py::test_tokenize_pandas_mixed_unicode_bytes dask/tests/test_base.py::test_tokenize_pandas_no_pickle dask/tests/test_base.py::test_tokenize_pandas_extension_array dask/tests/test_base.py::test_tokenize_pandas_index dask/tests/test_base.py::test_tokenize_kwargs dask/tests/test_base.py::test_tokenize_same_repr dask/tests/test_base.py::test_tokenize_method dask/tests/test_base.py::test_tokenize_sequences dask/tests/test_base.py::test_tokenize_dict dask/tests/test_base.py::test_tokenize_set dask/tests/test_base.py::test_tokenize_ordered_dict dask/tests/test_base.py::test_tokenize_object_array_with_nans dask/tests/test_base.py::test_tokenize_base_types[1] dask/tests/test_base.py::test_tokenize_base_types[True] dask/tests/test_base.py::test_tokenize_base_types[a0] dask/tests/test_base.py::test_tokenize_base_types[a1] dask/tests/test_base.py::test_tokenize_base_types[1.0] dask/tests/test_base.py::test_tokenize_base_types[1j0] dask/tests/test_base.py::test_tokenize_base_types[1j1] dask/tests/test_base.py::test_tokenize_base_types[x7] dask/tests/test_base.py::test_tokenize_base_types[x8] dask/tests/test_base.py::test_tokenize_base_types[x9] dask/tests/test_base.py::test_tokenize_base_types[None] dask/tests/test_base.py::test_tokenize_base_types[str] dask/tests/test_base.py::test_tokenize_base_types[int] dask/tests/test_base.py::test_tokenize_literal dask/tests/test_base.py::test_tokenize_numpy_matrix dask/tests/test_base.py::test_is_dask_collection dask/tests/test_base.py::test_unpack_collections dask/tests/test_base.py::test_custom_collection dask/tests/test_base.py::test_compute_no_opt dask/tests/test_base.py::test_compute_array dask/tests/test_base.py::test_persist_array dask/tests/test_base.py::test_compute_dataframe dask/tests/test_base.py::test_compute_array_dataframe dask/tests/test_base.py::test_compute_dataframe_valid_unicode_in_bytes dask/tests/test_base.py::test_compute_dataframe_invalid_unicode dask/tests/test_base.py::test_compute_array_bag dask/tests/test_base.py::test_compute_with_literal dask/tests/test_base.py::test_compute_nested dask/tests/test_base.py::test_use_cloudpickle_to_tokenize_functions_in__main__ dask/tests/test_base.py::test_optimizations_keyword dask/tests/test_base.py::test_optimize dask/tests/test_base.py::test_optimize_nested dask/tests/test_base.py::test_default_imports dask/tests/test_base.py::test_persist_literals dask/tests/test_base.py::test_persist_nested dask/tests/test_base.py::test_persist_delayed dask/tests/test_base.py::test_persist_array_bag dask/tests/test_base.py::test_normalize_function_limited_size dask/tests/test_base.py::test_optimize_globals dask/tests/test_base.py::test_optimize_None dask/tests/test_base.py::test_scheduler_keyword dask/tests/test_base.py::test_raise_get_keyword dask/tests/test_base.py::test_get_scheduler dask/tests/test_base.py::test_callable_scheduler dask/tests/test_base.py::test_num_workers_config[threads] dask/tests/test_base.py::test_num_workers_config[processes]
continuous_integration/travis/travis-38-dev.yaml continuous_integration/travis/travis-37.yaml continuous_integration/appveyor/environment.yaml continuous_integration/travis/travis-38.yaml dask/base.py continuous_integration/travis/travis-36.yaml docs/source/dataframe-groupby.rst dask/array/creation.py
continuous_integration/travis/travis-38-dev.yaml continuous_integration/travis/travis-37.yaml continuous_integration/appveyor/environment.yaml continuous_integration/travis/travis-38.yaml dask/base.py continuous_integration/travis/travis-36.yaml docs/source/dataframe-groupby.rst dask/array/creation.py