U
    ֽ|eGA                     @   sl  d dl mZ d dlZd dlZd dlZd dlmZ eej	d e
 dd Ze
 dd Ze
 d	d
 Ze
 dd Ze
 dd Ze
 dd Ze
 dHddZe
 dd Ze
 dd Ze
 dd Ze
 dd Ze
 dIddZe
 d d! Ze
 d"d# Ze
 d$d% Ze
 d&d' Ze
 d(d) Ze
 d*d+ Ze
 d,d- Ze
 d.d/ Ze
 d0d1 Ze
 d2d3 Z e
 d4d5 Z!e
 d6d7 Z"e
 d8d9 Z#e
 d:d; Z$e
 d<d= Z%e
 d>d? Z&e
 d@dA Z'e
 dBdC Z(eeeeeeeeeee(eeeeeeeee e!e"e$e#dDZ)dEZ*e#dFe(dGiZ+dS )J    )print_functionN)normCc                 C   s@   t | }t t jdt jd|dd  |d d kf}|| S )N   dtype)npsortconcatenateonesbool_)arrauxflag r   H/var/www/website-v5/atlas_env/lib/python3.8/site-packages/umap/sparse.py
arr_unique   s    
.r   c                 C   s:   | j d dkr|S |j d dkr$| S tt| |fS d S Nr   )shaper   r	   r   )ar1ar2r   r   r   	arr_union   s
    r   c                 C   s:   t | |f}|  |d d |dd  |d d k S )Nr   r   )r	   r   r
   )r   r   r   r   r   r   arr_intersect%   s    r   c                 C   s  t | |}tj|jd tjd}d}d}d}|| jd k r||jd k r| | }	|| }
|	|
kr|| ||  }|dkr|	||< |||< |d7 }|d7 }|d7 }q,|	|
k r|| }|dkr|	||< |||< |d7 }|d7 }q,|| }|dkr
|
||< |||< |d7 }|d7 }q,|| jd k r^|| }|dkrR| | ||< |||< |d7 }|d7 }q||jd k r|| }|dkr|| ||< |||< |d7 }|d7 }q^|d | }|d | }||fS Nr   r   r   )r   r	   zerosr   float32ind1data1ind2data2Z
result_indZresult_datai1i2nnzj1j2valr   r   r   
sparse_sum,   s\    
 





r(   c                 C   s   t | ||| S )N)r(   )r   r   r    r!   r   r   r   sparse_diffi   s    r)   c                 C   s   t | |}tj|jd tjd}d}d}d}|| jd k r||jd k r| | }	|| }
|	|
kr|| ||  }|dkr|	||< |||< |d7 }|d7 }|d7 }q,|	|
k r|d7 }q,|d7 }q,|d | }|d | }||fS r   )r   r	   r   r   r   r   r   r   r   
sparse_muln   s,    



r*   F      ?c                 C   s>  t | d d}|	r4tt d|  d dd}ntt | d dd}t|jd D ]}|| }|| }|}t| | | |d  D ]}|| |kr|| }q|}t|| ||d  D ]*}|| |kr|	rd||  }q|| }q||ks||krZ|
dk r|t||
d|
   ||< qZt|d|
 |
 | ||< qZd S )N       @:0yE>      ?g-C6?r   r   r+   )maxminranger   pow)indptr1indices1r   indptr2indices2r!   
result_row
result_col
result_valright_complement
mix_weightleft_min	right_minidxijleft_valk	right_valr   r   r   general_sset_intersection   s@      


 
rD   c	                 C   s   t | d d}	t | d d}
t|jd D ]}|| }|| }|	}t| | | |d  D ]}|| |kr`|| }q`|
}t|| ||d  D ]}|| |kr|| }q|| ||  ||< q2d S )Nr,   r-   r   r   )r/   r0   r1   r   )r3   r4   r   r5   r6   r!   r7   r8   r9   r<   r=   r>   r?   r@   rA   rB   rC   r   r   r   general_sset_union   s    

rE   c                 C   sD   t | |||\}}d}t|jd D ]}||| d 7 }q$t|S )N        r      )r)   r1   r   r	   sqrtr   r   r    r!   aux_indsaux_dataresultr?   r   r   r   sparse_euclidean   s
    rM   c                 C   s@   t | |||\}}d}t|jd D ]}|t|| 7 }q$|S NrF   r   r)   r1   r   r	   absrI   r   r   r   sparse_manhattan   s
    rQ   c                 C   sB   t | |||\}}d}t|jd D ]}t|t|| }q$|S rN   )r)   r1   r   r/   r	   rP   rI   r   r   r   sparse_chebyshev   s
    rR   r,   c           	      C   sL   t | |||\}}d}t|jd D ]}|t|| | 7 }q$|d|  S NrF   r   r.   rO   )	r   r   r    r!   prJ   rK   rL   r?   r   r   r   sparse_minkowski  s
    rU   c                 C   s$   t | |||d jd }t|| S r   )r)   r   float)r   r   r    r!   
n_featuresnum_not_equalr   r   r   sparse_hamming  s    rY   c                 C   sf   t |}t |}t| |||\}}d| }t| |||\}}	t |	}	t||	||\}
}t |S )Nr.   )r	   rP   r(   r)   r*   sum)r   r   r    r!   Z	abs_data1Z	abs_data2
denom_inds
denom_data
numer_inds
numer_dataZval_indsZval_datar   r   r   sparse_canberra  s    


r_   c           
      C   sv   t | |||\}}t|}|jd dkr.dS t|}|dkrDdS t| |||\}}t|}t|}	t|	| S Nr   rF   )r(   r	   rP   r   rZ   r)   rV   )
r   r   r    r!   r[   r\   denominatorr]   r^   	numeratorr   r   r   sparse_bray_curtis!  s    



rc   c                 C   s@   t | |jd }t| |jd }|dkr,dS t|| | S d S r`   )r   r   r   rV   )r   r   r    r!   num_non_zero	num_equalr   r   r   sparse_jaccard6  s
    rf   c                 C   s4   t | |jd }t| |jd }|| }t|| S r   r   r   r   rV   r   r   r    r!   rW   num_true_truerd   rX   r   r   r   sparse_matchingA  s    rj   c                 C   sH   t | |jd }t| |jd }|| }|dkr4dS |d| |  S d S )Nr   rF   r,   r   r   r   r   r   r    r!   ri   rd   rX   r   r   r   sparse_diceJ  s    rm   c                 C   sP   t | |jd }t| |jd }|| }|dkr4dS t|| | ||  S d S r`   rg   rh   r   r   r   sparse_kulsinskiV  s    rn   c                 C   s8   t | |jd }t| |jd }|| }d| ||  S Nr   r,   rk   rh   r   r   r   sparse_rogers_tanimotod  s    rp   c                 C   sr   | j d |j d kr&t| |kr&dS t| |j d }|t|dkkr^|t|dkkr^dS t|| | S d S r`   )r   r	   allr   rZ   rV   )r   r   r    r!   rW   ri   r   r   r   sparse_russellraom  s    "$rr   c                 C   s8   t | |jd }t| |jd }|| }d| ||  S ro   rk   rh   r   r   r   sparse_sokal_michenerz  s    rs   c                 C   sH   t | |jd }t| |jd }|| }|dkr4dS |d| |  S d S )Nr   rF   r+   rk   rl   r   r   r   sparse_sokal_sneath  s    rt   c           
      C   s   t | |||\}}d}t|}t|}t|jd D ]}	|||	 7 }q4|dkrZ|dkrZdS |dksj|dkrndS d|||   S d S rS   )r*   r   r1   r   )
r   r   r    r!   rJ   rK   rL   norm1norm2r?   r   r   r   sparse_cosine  s    rw   c                 C   s   t | |||\}}d}t|}t|}t|| }	t|jd D ]}
|t||
 7 }qF|dkrr|dkrrdS |dks|dkrdS ||	krdS td||	  S d S rS   )r*   r	   rZ   rH   r1   r   )r   r   r    r!   rJ   rK   rL   ru   rv   Zsqrt_norm_prodr?   r   r   r   sparse_hellinger  s    

rx   c                 C   sb  d}d}d}| j d dkr,|j d dkr,dS | j d dksH|j d dkrLdS t|j d D ]}||| 7 }qZt|j d D ]}||| 7 }qz|| }|| }tj|j d tjd}	tj|j d tjd}
t|j d D ]}|| | |	|< qt|j d D ]}|| | |
|< qtt|	d || j d  |d   }tt|
d ||j d  |d   }t| |	||
\}}t|}t|j d D ]}||| 7 }qt| j d D ]$}| | |kr||	| | 8 }qt|j d D ]$}|| |kr||
| | 8 }qt	| |}||| ||j d   7 }|dkr@|dkr@dS |dkrNdS d|||   S d S )NrF   r   r.   r   rG   )
r   r1   r	   emptyr   rH   r   r*   setr   )r   r   r    r!   rW   mu_xmu_ydot_productr?   Zshifted_data1Zshifted_data2ru   rv   Zdot_prod_indsZdot_prod_dataZcommon_indicesZall_indicesr   r   r   sparse_correlation  sT      

r~   c                 C   sB   | dkrdS | t |  |  dt dt j |    d| d   S )Nr   r   r+   r,   r.   g      (@r	   logpixr   r   r   approx_log_Gamma  s    4r   c                 C   s|   t | |}t| |}|dk r\t| }tdt|D ] }|t|t||  7 }q6|S t| t| t| |  S d S )N   r   )r0   r/   r	   r   r1   intr   )r   yabvaluer?   r   r   r   log_beta  s    

r   c                 C   s6   t dd|  d  dt dt j |    d|   S )Nr,   g       r+   g      ?r   r   r   r   r   log_single_beta  s    4r   c                 C   sR  t |}t |}|dkr(|dkr(dS |dks8|dkr<dS d}d}d}|| jd k r||jd k r| | }	|| }
|	|
kr|| ||  dkr|t|| || 7 }|d7 }|d7 }qH|	|
k r|d7 }qH|d7 }qHd}|D ]}|t|7 }qd}|D ]}|t|7 }qt d| |t|| |t|   d| |t|| |t|    S )Nr   rF   g    חAr   r.   )r	   rZ   r   r   r   rH   )r   r   r    r!   n1n2log_br"   r#   r%   r&   self_denom1d1self_denom2d2r   r   r   sparse_ll_dirichlet  s>    




  r   )	euclidean	manhattanl1taxicab	chebyshevlinflinfty	linfinity	minkowskicanberrall_dirichlet
braycurtishammingjaccarddicematching	kulsinskirogerstanimoto
russellraosokalmichenersokalsneathcosinecorrelation	hellinger)r   r   r   r   r   r   r   r   r   )Fr+   )r,   ),
__future__r   localenumbanumpyr	   
umap.utilsr   	setlocale
LC_NUMERICnjitr   r   r   r(   r)   r*   rD   rE   rM   rQ   rR   rU   rY   r_   rc   rf   rj   rm   rn   rp   rr   rs   rt   rw   rx   r~   r   r   r   r   sparse_named_distancesZsparse_need_n_featuresZSPARSE_SPECIAL_METRICSr   r   r   r   <module>   s   



<

!  6
!

















<




,  