a
    na                     @  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g d	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)legendZlegend_labelZlegend_fieldZlegend_groupc                   s>    fddt D }t|dkr:tdtt t| f |S )Nc                   s    i | ]}| v r|  |qS  )pop).0attrkwargsr   6lib/python3.9/site-packages/bokeh/plotting/_legends.py
<dictcomp>1       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)Z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| v rVt| dkrV| d } t| || qd| v rt| dkr| d } t| || qtd|  n<|j}|d urt	|dr| |j
v 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    
r1   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%   r3   appendr   r   r#   r   r!   r$   new_itemr   r   r   r,   g   s    

r,   c           
      C  s   t | tstd|j}|d u r(tdt|dr<| |jv 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#   r3   index)r)   r*   r   r.   r/   r(   datanpuniquezipr   r   r   r4   )
r#   r   r!   r0   columnZvalsZindsvalZindr6   r   r   r   _handle_legend_groupr   s    

r>   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 stringr2   )	r)   r*   r   r   r%   r3   r4   r   r   r5   r   r   r   r-      s    

r-   )Z
__future__r   ZloggingZ	getLogger__name__logZnumpyr9   Zcore.propertiesr   r   Zmodelsr   r   Zutil.deprecationr   Zutil.stringr	   __all__r   r
   r   r%   r   r1   r,   r>   r-   r   r   r   r   r   <module>   s,   



