U
    f                     @   s   d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dlm	Z	 d	d
l
mZ ddlZddl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dd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdS ))   )LinearExplainer)KernelExplainer)SamplingExplainer)TreeExplainer)DeepExplainer)GradientExplainer)kmeans)other   )	KerasWrap    Nc                 C   s   t | |dddjS )z Linear SHAP (corr 1000)
    Zcorrelation  )feature_dependencensamplesr   shap_valuesmodeldata r   =/tmp/pip-target-lpfmz8o1/lib/python/shap/benchmark/methods.pylinear_shap_corr   s    r   c                 C   s   t | |ddjS )z Linear SHAP (ind)
    independentr   r   r   r   r   r   linear_shap_ind   s    r   c                 C   s   t | jS )z Coefficents
    )r	   ZCoefficentExplainerattributionsr   r   r   r   coef   s    r   c                 C   s
   t  jS )z6 Random
    color = #777777
    linestyle = solid
    )r	   ZRandomExplainerr   r   r   r   r   random   s    r   c                    s    fddS )zW Kernel SHAP 1000 mean ref.
    color = red_blue_circle(0.5)
    linestyle = solid
    c                    s   t jt dj| dddS )Nr
   r   r   )r   Zl1_reg)r   predictr   r   Xr   r   r   r   <lambda>(       z*kernel_shap_1000_meanref.<locals>.<lambda>r   r   r   r!   r   kernel_shap_1000_meanref#   s    r$   c                    s    fddS )zF IME 1000
    color = red_blue_circle(0.5)
    linestyle = dashed
    c                    s   t j j| ddS )Nr   r   )r   r   r   r   r!   r   r   r"   /   r#   z$sampling_shap_1000.<locals>.<lambda>r   r   r   r!   r   sampling_shap_1000*   s    r&   c                 C   s   t | ddjS )zH TreeExplainer
    color = red_blue_circle(0)
    linestyle = solid
    Ztree_path_dependentr   r   r   r   r   r   r   tree_shap_tree_path_dependent1   s    r(   c                 C   s0   t jj|dtd|jd dd}t| |ddjS )zW TreeExplainer (independent)
    color = red_blue_circle(0)
    linestyle = dashed
    F   r   )replaceZ	n_samplesZrandom_stater   r   )sklearnutilsZresampleminshaper   r   )r   r   Zdata_subsampler   r   r   tree_shap_independent_2008   s     r/   c                    s    fdd}|S )zS mean(|TreeExplainer|)
    color = red_blue_circle(0.25)
    linestyle = solid
    c                    sP   t  }t|tr* fdd|D S tt|d jd dfS d S )Nc                    s.   g | ]&}t t |d  jd  dfqS )r   r
   )nptileabsmeanr.   ).0svr   r   r   
<listcomp>H   s     z1mean_abs_tree_shap.<locals>.f.<locals>.<listcomp>r   r
   )	r   r   
isinstancelistr0   r1   r2   r3   r.   )r    vr   r   r   fE   s    
zmean_abs_tree_shap.<locals>.fr   r   r   r;   r   r:   r   mean_abs_tree_shap@   s    r=   c                    s    fddS )zB Saabas
    color = red_blue_circle(0)
    linestyle = dotted
    c                    s   t  j| ddS )NT)Zapproximater'   r   r:   r   r   r"   R   r#   zsaabas.<locals>.<lambda>r   r   r   r:   r   saabasM   s    r>   c                 C   s   t | jS )zS Gain/Gini Importance
    color = red_blue_circle(0.25)
    linestyle = dotted
    )r	   ZTreeGainExplainerr   r   r   r   r   	tree_gainT   s    r?   c                    s    fddS )z LIME Tabular 1000
    c                    s   t jj ddj| ddS )NZ
regression)moder   r%   )r	   ZLimeTabularExplainerr   r   r   r!   r   r   r"   ^   r#   z.lime_tabular_regression_1000.<locals>.<lambda>r   r   r   r!   r   lime_tabular_regression_1000[   s    rA   c                    s2   t | tr| j} t| t|dj  fdd}|S )z Deep SHAP (DeepLIFT)
    r
   c                    s2     | }t|tkr*t|dkr*|d S |S d S Nr
   r   r   typer8   lenr    phiZ	explainerr   r   r;   f   s    
zdeep_shap.<locals>.f)r7   r   r   r   r   r   r<   r   rH   r   	deep_shap`   s
    
rI   c                    s*   t | tr| j} t| |  fdd}|S )z Expected Gradients
    c                    s2     | }t|tkr*t|dkr*|d S |S d S rB   rC   rF   rH   r   r   r;   u   s    
zexpected_gradients.<locals>.f)r7   r   r   r   r<   r   rH   r   expected_gradientso   s
    

rJ   ) r   r   r   r   r   r   r   Z
explainersr	   modelsr   numpyr0   r+   r   r   r   r   r$   r&   r(   r/   r=   r>   r?   rA   rI   rJ   r   r   r   r   <module>   s0   