U
    /e                     @  s   d dl mZ d dlZeeZd dlZddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ dZd	d
ddgZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZeeeedZdS )    )annotationsN   )fieldvalue)Legend
LegendItem)
deprecated)	nice_join)pop_legend_kwargupdate_legendlegendlegend_labellegend_fieldlegend_groupc                   s>    fddt D }t|dkr:tdtt t| f |S )Nc                   s    i | ]}| kr|  |qS  )pop).0attrkwargsr   ;/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/plotting/_legends.py
<dictcomp>1   s       z$pop_legend_kwarg.<locals>.<dictcomp>   z'Only one of %s may be provided, got: %s)LEGEND_ARGSlen
ValueErrorr	   keys)r   resultr   r   r   r
   0   s    r
   c                 C  s0   t | }t| d \}}t| ||| d S )Nr   )_get_or_create_legendlistitems_LEGEND_KWARG_HANDLERS)plotZlegend_kwargglyph_rendererr   kwargr   r   r   r   r   6   s    r   c                 C  s"   |j D ]}|j| kr|  S qd S )N)r    label)r%   r   itemr   r   r   _find_legend_item@   s    


r'   c                 C  sH   | j td}|s$t }| | |S t|dkr8|d S td|  d S )N)typer   r   z`Plot %s configured with more than one legend renderer, cannot use legend_* convenience arguments)selectr   Z
add_layoutr   RuntimeError)r"   Zlegendsr   r   r   r   r   F   s    
r   c                 C  s   t d t| ttfs"td|  t| trd| krVt| dkrV| d } t| || qd| krt| dkr| d } t| || qtd|  n<|j}|d k	rt	|dr| |j
krt| || nt| || d S )Nzo'legend' keyword is deprecated, use explicit 'legend_label', 'legend_field', or 'legend_group' keywords insteadz Bad 'legend' parameter value: %sr   r   r   column_names)r   
isinstancestrdictr   r   _handle_legend_field_handle_legend_labeldata_sourcehasattrr+   )r%   r   r#   sourcer   r   r   _handle_legend_deprecatedP   s    
r4   c                 C  sT   t | tstdt| } t| |}|r6|j| nt| |gd}|j| d S )Nz#legend_field value must be a stringr%   	renderers)	r,   r-   r   r   r'   r6   appendr   r    r%   r   r#   r&   new_itemr   r   r   r/   g   s    

r/   c           
      C  s   t | tstd|j}|d kr(tdt|dr<| |jksDtd|j|  }tj|dd\}}t	||D ]0\}}t
t|} t| |g|d}	|j|	 qjd S )Nz#legend_group value must be a stringzMCannot use 'legend_group' on a glyph without a data source already configuredr+   z8Column to be grouped does not exist in glyph data sourcer   )Zreturn_index)r%   r6   index)r,   r-   r   r1   r2   r+   datanpuniquezipr   r   r    r7   )
r%   r   r#   r3   columnvalsZindsvalindr9   r   r   r   _handle_legend_groupr   s    

rC   c                 C  sT   t | tstdt| } t| |}|r6|j| nt| |gd}|j| d S )Nz#legend_label value must be a stringr5   )	r,   r-   r   r   r'   r6   r7   r   r    r8   r   r   r   r0      s    

r0   )r   r   r   r   )
__future__r   logging	getLogger__name__logZnumpyr<   Zcore.propertiesr   r   modelsr   r   Zutil.deprecationr   Zutil.stringr	   __all__r   r
   r   r'   r   r4   r/   rC   r0   r!   r   r   r   r   <module>   s,   



