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¼|	rÞd||  }q¼|| }q¼||ksø||krZ|
dk �r|t||
d|
  ƒ ||< qZt|d|
 |
 ƒ| ||< qZd S )Nç       @ç:Œ0âŽyE>ç      ð?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r†dS ||	kr’d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 ]}|| | |	|< qÖt|j d ƒD ]}|| | |
|< qút t|	ƒd || j d  |d   ¡}t t|
ƒd ||j d  |d   ¡}t| |	||
ƒ\}}t|ƒ}t|j d ƒD ]}||| 7 }�qˆt| j d ƒD ]$}| | |k�rª||	| | 8 }�qªt|j d ƒD ]$}|| |k�rÞ||
| | 8 }�qÞt	| |ƒ}||| ||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    4ÿr„   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    4ÿrŒ   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 }qÜd}|D ]}|t|ƒ7 }qöt  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
!







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


,å  þ