U
    /e(                     @  s  d Z ddlmZ ddlZeeZddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZmZmZmZmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4 dZ5G dd de!Z6eG dd de!Z7G dd de7Z8eG dd de7Z9G dd de9Z:dd Z;dd Z<G d d! d!e9Z=eG d"d# d#e7Z>dS )$z\ Models (mostly base classes) for the various kinds of renderer
types that Bokeh supports.

    )annotationsN)get_close_matches   )RenderLevel)abstract)	AutoBoolEitherEnumFloatInstanceNullableOverrideString)error)BAD_COLUMN_NAMECDSVIEW_FILTERS_WITH_CONNECTEDCDSVIEW_SOURCE_DOESNT_MATCHMALFORMED_GRAPH_SOURCEMISSING_GLYPHNO_SOURCE_FOR_GLYPH)Model   )CoordinateMapping)CircleConnectedXYGlyphGlyph	MultiLine)GraphHitTestPolicyLayoutProvider	NodesOnly)CDSViewColumnDataSource
DataSourceWebDataSource)
TileSourceWMTSTileSource)DataRendererGlyphRendererGraphRendererGuideRendererRendererRendererGroupTileRendererc                   @  s   e Zd ZdZedddZdS )r,   z A collection of renderers.

    Tz6
    Makes all groupped renderers visible or not.
    defaulthelpN)__name__
__module____qualname____doc__r   visible r6   r6   :/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/models/renderers.pyr,   X   s   r,   c                   @  sX   e Zd ZdZeeddZedddZe	e
eZedddZedd	dZe	e
eZd
S )r+   z0An abstract base class for renderer types.

    z>
    Specifies the level in which to paint this renderer.
    r0   Tz"
    Is the renderer visible.
    r.   r/   z
    A particular (named) x-range to use for computing screen locations when
    rendering glyphs on the plot. If unset, use the default x-range.
    z
    A particular (named) y-range to use for computing screen locations when
    rendering glyphs on the plot. If unset, use the default y-range.
    N)r1   r2   r3   r4   r
   r   levelr   r5   r   r   r   Zcoordinatesr   Zx_range_nameZy_range_namer,   groupr6   r6   r6   r7   r+   a   s   r+   c                   @  sP   e Zd ZdZeedd ddZedddZe	d	d
dZ
e	d	ddZeddZdS )r-   

    c                   C  s   t  S N)r&   r6   r6   r6   r7   <lambda>       zTileRenderer.<lambda>E
    Local data source to use when rendering glyphs on the plot.
    r.   g      ?z 
    tile opacity 0.0 - 1.0
    r8   Tz8
    Enable image smoothing for the rendered tiles.
    zs
    Flag enable/disable drawing of parent tiles while waiting for new tiles to arrive. Default value is True.
    imager/   N)r1   r2   r3   r4   r   r%   Ztile_sourcer   alphar   Z	smoothingZrender_parentsr   r9   r6   r6   r6   r7   r-   }   s   r-   c                   @  s   e Zd ZdZeddZdS )r'   zb An abstract base class for data renderer types (e.g. ``GlyphRenderer``, ``GraphRenderer``).

    glyphrA   Nr1   r2   r3   r4   r   r9   r6   r6   r6   r7   r'      s   r'   c                      s   e Zd ZdZeedd Zeedd Zee	dd Z
eedd	 Zeed
d Zdd fddZeeddZeeddZeeddZeeeeedddZeeeeedddZeeeddZeeeeedddZedddZ  Z S )r(   r;   c                 C  s(   t | jtr$t| jjdkr$t| S d S )Nr   )
isinstancerC   r   lenviewfiltersstrselfr6   r6   r7   %_check_cdsview_filters_with_connected   s    z3GlyphRenderer._check_cdsview_filters_with_connectedc                 C  s   | j st| S d S r<   )rC   rI   rJ   r6   r6   r7   _check_missing_glyph   s     z"GlyphRenderer._check_missing_glyphc                 C  s   | j st| S d S r<   )data_sourcerI   rJ   r6   r6   r7   _check_no_source_for_glyph   s     z(GlyphRenderer._check_no_source_for_glyphc                 C  s   | j | jjk	rt| S d S r<   )rN   rG   sourcerI   rJ   r6   r6   r7   _check_cdsview_source   s     z#GlyphRenderer._check_cdsview_sourcec                   s    j s
d S  jsd S t jtr$d S t } j  } j jdd D ]V\}}||krXqFt|tsdqFt jt	srqFd|krF|d  jj
krF||d |f qF|rdd  fdd|D D }dd t||D }dd |D }d	d
t| f S d S )NF)Zinclude_defaultsfieldc                 S  s    g | ]}|rd |d  ndqS )z" (closest match: "%s")r   "r6   ).0sr6   r6   r7   
<listcomp>   s     z8GlyphRenderer._check_bad_column_name.<locals>.<listcomp>c                   s"   g | ]}t |d   jjddqS )r   r   )n)r   rN   column_names)rT   ZtermrJ   r6   r7   rV      s    c                 S  s*   g | ]"\}}d  |d |g|d fqS ) r   r   )join)rT   mrU   r6   r6   r7   rV      s     c                 S  s   g | ]\}}d ||f qS )zkey "%s" value "%sr6   )rT   vkr6   r6   r7   rV      s     z%s [renderer: %s]z, )rC   rN   rE   r$   setZ	dataspecsZproperties_with_valuesitemsdictr"   rX   addziprZ   sorted)rK   Zmissing_valuesspecsnameitemZsuggestionsmissingr6   rJ   r7   _check_bad_column_name   s0       
 
  
z$GlyphRenderer._check_bad_column_nameNone)returnc                   s0   t  jf | d|kr,d|kr,t| jd| _d S )NrG   rN   )rP   )super__init__r!   rN   rG   )rK   kwargs	__class__r6   r7   rl      s    zGlyphRenderer.__init__r?   r8   a  
    A view into the data source to use when rendering glyphs. A default view
    of the entire data source is created when a view is not passed in during
    initialization.

    .. note:
        Only the default (filterless) CDSView is compatible with glyphs that
        have connected topology, such as Line and Patch. Setting filters on
        views for these glyphs will result in a warning and undefined behavior.
    z[
    The glyph to render, in conjunction with the supplied data source
    and ranges.
    autoz"
    An optional glyph used for selected points.

    If set to "auto" then the standard glyph will be used for selected
    points.
    r.   a&  "
    An optional glyph used for explicitly non-selected points
    (i.e., non-selected when there are other points that are selected,
    but not when no points at all are selected.)

    If set to "auto" then a glyph with a low alpha value (0.1) will
    be used for non-selected points.
    zv
    An optional glyph used for inspected points, e.g., those that are
    being hovered over by a ``HoverTool``.
    z"
    Fz
    )!r1   r2   r3   r4   r   r   rL   r   rM   r   rO   r   rQ   r   rh   rl   r   r#   rN   r!   rG   r   rC   r   r	   r   Zselection_glyphZnonselection_glyphZhover_glyphZmuted_glyphr   Zmuted__classcell__r6   r6   rn   r7   r(      s(   




	r(   c                   C  s   t t ttg dddS )N)indexdatarC   rN   )r(   r   r"   r`   r6   r6   r6   r7   r=      s    r=   c                   C  s   t t ttg g dddS )N)startendrs   ru   )r(   r   r"   r`   r6   r6   r6   r7   r=      s    c                   @  sl   e Zd ZdZeedd ZeeddZ	ee
eddZee
eddZeed	d
 ddZeedd
 ddZdS )r)   r;   c                 C  sf   g }d| j jjkr|d d| jjjkr4|d d| jjjkrL|d |rbd|d|   S d S )	Nrr   zBColumn 'index' is missing in GraphSource.node_renderer.data_sourcerv   zBColumn 'start' is missing in GraphSource.edge_renderer.data_sourcerw   z@Column 'end' is missing in GraphSource.edge_renderer.data_sourcez ,z [%s])node_rendererrN   rX   appendedge_rendererrZ   )rK   rg   r6   r6   r7   _check_malformed_graph_source  s    


z+GraphRenderer._check_malformed_graph_sourcezs
    An instance of a ``LayoutProvider`` that supplies the layout of the network
    graph in cartesian space.
    r8   zq
    Instance of a ``GlyphRenderer`` containing an ``XYGlyph`` that will be rendered
    as the graph nodes.
    r.   zy
    Instance of a ``GlyphRenderer`` containing an ``MultiLine`` Glyph that will be
    rendered as the graph edges.
    c                   C  s   t  S r<   r    r6   r6   r6   r7   r=   "  r>   zGraphRenderer.<lambda>zp
    An instance of a ``GraphHitTestPolicy`` that provides the logic for selection
    of graph components.
    c                   C  s   t  S r<   r|   r6   r6   r6   r7   r=   '  r>   zq
    An instance of a ``GraphHitTestPolicy`` that provides the logic for inspection
    of graph components.
    N)r1   r2   r3   r4   r   r   r{   r   r   Zlayout_providerr(   _DEFAULT_NODE_RENDERERrx   _DEFAULT_EDGE_RENDERERrz   r   Zselection_policyZinspection_policyr6   r6   r6   r7   r)     s   
r)   c                   @  s   e Zd ZdZeddZdS )r*   zz A base class for all guide renderer types. ``GuideRenderer`` is
    not generally useful to instantiate on its own.

    ZguiderA   NrD   r6   r6   r6   r7   r*   ,  s   r*   )?r4   
__future__r   logging	getLoggerr1   logdifflibr   Z
core.enumsr   Zcore.has_propsr   Zcore.propertiesr   r   r	   r
   r   r   r   r   r   Zcore.validationr   Zcore.validation.errorsr   r   r   r   r   r   modelr   Zcanvasr   Zglyphsr   r   r   r   Zgraphsr   r   r    sourcesr!   r"   r#   r$   Ztilesr%   r&   __all__r,   r+   r-   r'   r(   r}   r~   r)   r*   r6   r6   r6   r7   <module>   s8   
, 	^*