U
    f                     @   sZ   d dl Zd dlZzd dlmZ W n ek
r>   ed Y nX ddlm	Z	 d
dd	Z
dS )    Nzmatplotlib could not be loaded!   )colorsT   皙?c              
      s  d}t  tkrd} g |dk	rx|jd  d jd ksBtd|rb|jd t ksxtdnt|jdksxtd|dkri nd	|i}	td
t d  d|jd d  g}
|
d |kr|
||
d  9 }
tj|jd t d |
d\}}t|jdkr|	d|j
}t|jd D ]V}||  }t|jd
krd|jd dkrd|	|jdd }| dkrz|d }t|jd
kr|jd d
krd|dddddf  d|dddddf   d|dddddf   }n|}||df j|tdd ||df d t d | jdkr\t fddtt D d }n&t fddtt D d }t|d}tt D ]}|dk	r|||d f j|||f f|	 t | | jdkr | | n | | d}|||d f j|tddd|jd |jd dfd |||d f j|tj| |d}|||d f d qq|dkr|  n|j|d |j|t| dd |
d | d!}|jd |rt  dS )"z) Plots SHAP values for image inputs.
    TFNr   z6Labels must have same row count as shap_values arrays!r   z9Labels must have a column for each output in shap_values!z6Labels must be a vector for single output shap_values.pad   g      @)ZnrowsZncolsZfigsize   g     o@gŏ1w-!?gbX9?gv/?gray)cmapoffc                    s   g | ]}t  | qS  )npabs.0ishap_valuesr   7/tmp/pip-target-lpfmz8o1/lib/python/shap/plots/image.py
<listcomp>6   s     zimage_plot.<locals>.<listcomp>c                    s    g | ]}t  | d qS ))r   r   sumr   r   r   r   r   8   s     gX@r   g333333?)r
   alphaZextent)r
   ZvminZvmaxauto)hspacez
SHAP value
horizontal)ZaxlabelZorientationaspect) typelistshapeAssertionErrorlenr   arrayplZsubplotsZreshapesizerangecopymaxZimshowZget_cmapZaxisstackflattenZnanpercentile	set_titler   r   Zred_transparent_blueZtight_layoutZsubplots_adjustZcolorbarZraveltolistoutlineZset_visibleshow)r   xlabelsr.   widthr   r   ZlabelpadZmulti_outputZlabel_kwargsZfig_sizeZfigZaxesrowZx_currZx_curr_grayZabs_valsZmax_valr   svZimcbr   r   r   
image_plot
   sZ     ("  P(&
"68"

&r5   )NTr   r   r   N)numpyr   warningsZmatplotlib.pyplotZpyplotr$   ImportErrorwarn r   r5   r   r   r   r   <module>   s   
