def test_Dispatcher(): foo = Dispatcher() foo.register(int, lambda a, b, c=1: a + b + c) foo.register(float, lambda a, b, c=1: a - b + c) foo.register(object, lambda a, b, c=1: 10) class Bar(object): pass b = Bar() assert foo(1, 2) == 4 assert foo(1, 2.0, 3.0) == 6.0 assert foo(1.0, 2.0, 3.0) == 2.0 assert foo(b, 2) == 10
from collections import OrderedDict from datashader.compiler import compile_components from datashader.utils import Dispatcher from datashader.glyphs.quadmesh import (QuadMeshRaster, QuadMeshRectilinear, QuadMeshCurvilinear, build_scale_translate) from datashader.compatibility import apply import dask import numpy as np import xarray as xr from dask.base import tokenize, compute from dask.array.overlap import overlap dask_glyph_dispatch = Dispatcher() def dask_xarray_pipeline(glyph, xr_ds, schema, canvas, summary, cuda): dsk, name = dask_glyph_dispatch(glyph, xr_ds, schema, canvas, summary, cuda=cuda) # Get user configured scheduler (if any), or fall back to default # scheduler for dask DataFrame scheduler = dask.base.get_scheduler() or xr_ds.__dask_scheduler__ keys = xr_ds.__dask_keys__() optimize = xr_ds.__dask_optimize__ graph = xr_ds.__dask_graph__() dsk.update(optimize(graph, keys))
from __future__ import absolute_import from datashader.glyphs.quadmesh import _QuadMeshLike from datashader.data_libraries.pandas import default from datashader.core import bypixel import xarray as xr from datashader.utils import Dispatcher try: import cupy except Exception: cupy = None glyph_dispatch = Dispatcher() @bypixel.pipeline.register(xr.Dataset) def xarray_pipeline(xr_ds, schema, canvas, glyph, summary): cuda = cupy and isinstance(xr_ds[glyph.name].data, cupy.ndarray) if not xr_ds.chunks: return glyph_dispatch(glyph, xr_ds, schema, canvas, summary, cuda) else: from datashader.data_libraries.dask_xarray import dask_xarray_pipeline return dask_xarray_pipeline(glyph, xr_ds, schema, canvas, summary, cuda) # Default to default pandas implementation glyph_dispatch.register(_QuadMeshLike)(default)
from datashader.core import bypixel from datashader.compiler import compile_components from datashader.glyphs.points import _PointLike from datashader.glyphs.area import _AreaToLineLike from datashader.utils import Dispatcher from collections import OrderedDict __all__ = () @bypixel.pipeline.register(pd.DataFrame) def pandas_pipeline(df, schema, canvas, glyph, summary): return glyph_dispatch(glyph, df, schema, canvas, summary) glyph_dispatch = Dispatcher() @glyph_dispatch.register(_PointLike) @glyph_dispatch.register(_AreaToLineLike) def default(glyph, source, schema, canvas, summary): create, info, append, _, finalize = compile_components( summary, schema, glyph) x_mapper = canvas.x_axis.mapper y_mapper = canvas.y_axis.mapper extend = glyph._build_extend(x_mapper, y_mapper, info, append) x_range = canvas.x_range or glyph.compute_x_bounds(source) y_range = canvas.y_range or glyph.compute_y_bounds(source) width = canvas.plot_width