Source code for bokeh.models.expressions

''' Represent array expressions to be computed on the client (browser) side
by BokehJS.

Expression models are useful as ``DataSpec`` values when it is desired that
the array values be computed in the browser:

.. code-block:: python

    p.circle(x={'expr': some_expression}, ...)

or using the ``expr`` convenience function:

.. code-block:: python

    from bokeh.core.properties import expr

    p.circle(x=expr(some_expression), ...)

In this case, the values of the ``x`` coordinates will be computed in the
browser by the JavaScript implementation of ``some_expression`` using a
``ColumnDataSource`` as input.

'''
from __future__ import absolute_import

from ..core.has_props import abstract
from ..core.properties import Seq, String
from ..model import Model

@abstract
[docs]class Expression(Model): ''' Base class for ``Expression`` models that represent a computation to be carried out on the client-side. JavaScript implementations should implement the following methods: .. code-block: coffeescript v_compute: (source) -> # compute an array of values Note that the result of this call will be automatically saved and re-used for each ``source`` that is passed in. If a ``source`` is changed, then the saved value for that source is discarded, and the next call will re-compute (and save) a new value. If you wish to prevent this caching, you may implement ``_v_compute: (source)`` instead. ''' pass
[docs]class Stack(Expression): ''' An expression for generating arrays by summing different columns from a ``ColumnDataSource``. This expression is useful for implementing stacked bar charts at a low level. ''' fields = Seq(String, help=""" A sequence of fields from a ``ColumnDataSource`` to sum (elementwise). For example: .. code-block:: python Stack(fields=['sales', 'marketing']) Will compute an array of values (in the browser) by adding the elements of the ``'sales'`` and ``'marketing'`` columns of a data source. """)