o
    .ѹgDA                  	   @   s  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
 		dXddZe
 dd Ze
 dd Ze
 dd Ze
 dd Ze
 dYd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(i dDedEedFedGedHedIedJedKedLedMedNe(dOedPedQedRedSedTeeee e!e"e$e#dUZ)dVZ*e#dWe(dNiZ+dS )Z    )print_functionN)normCc                 C   s@   t | }t t jdt jd|dd  |d d kf}|| S )N   Zdtype)npsortconcatenateZonesZbool_)Zarrauxflag r   O/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/umap/sparse.py
arr_unique   s   
.r   c                 C   s6   | j d dkr	|S |j d dkr| S tt| |f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rQ|| ||  }|dkrH|	||< |||< |d7 }|d7 }|d7 }n5|	|
k rn|| }|dkri|	||< |||< |d7 }|d7 }n|| }|dkr|
||< |||< |d7 }|d7 }|| jd k r||jd k s$|| jd k r|| }|dkr| | ||< |||< |d7 }|d7 }|| jd k s||jd k r|| }|dkr|| ||< |||< |d7 }|d7 }||jd k s|d | }|d | }||fS Nr   r   r   )r   r   zerosr   float32ind1data1ind2data2Z
result_indZresult_datai1i2Znnzj1j2valr   r   r   
sparse_sum-   sb   


	r#   c                 C   s   t | ||| S )N)r#   )r   r   r   r   r   r   r   sparse_diffj   s   r$   c                 C   s   t | |}tj|jd tjd}d}d}d}|| jd k rl||jd k rl| | }	|| }
|	|
krQ|| ||  }|dkrH|	||< |||< |d7 }|d7 }|d7 }n|	|
k rZ|d7 }n|d7 }|| jd k rl||jd k s$|d | }|d | }||fS r   )r   r   r   r   r   r   r   r   r   
sparse_mulo   s.   


r%   F      ?c                 C   s<  t | d d}|	rtt d|  d dd}ntt | d dd}t|jd D ]n}|| }|| }|}t| | | |d  D ]}|| |krP|| }qD|}t|| ||d  D ]}|| |krs|	rod||  }q^|| }q^||ks|||kr|
dk r|t||
d|
   ||< q-t|d|
 |
 | ||< q-d S )N       @:0yE>      ?g-C6?r   r   r&   )maxminranger   pow)indptr1indices1r   indptr2indices2r   
result_row
result_col
result_valZright_complementZ
mix_weightleft_min	right_minidxijleft_valk	right_valr   r   r   general_sset_intersection   s@   r=   c	                 C   s   t | d d}	t | d d}
t|jd D ]H}|| }|| }|	}t| | | |d  D ]}|| |kr<|| }q0|
}t|| ||d  D ]}|| |krV|| }qJ|| ||  ||< qd S )Nr'   r(   r   r   )r*   r+   r,   r   )r.   r/   r   r0   r1   r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r   r   general_sset_union   s"   r>   c                 C   sD   t | |||\}}d}t|jd D ]
}||| d 7 }qt|S )N        r      )r$   r,   r   r   sqrtr   r   r   r   aux_indsaux_dataresultr8   r   r   r   sparse_euclidean   s
   
rF   c                 C   s@   t | |||\}}d}t|jd D ]}|t|| 7 }q|S Nr?   r   r$   r,   r   r   absrB   r   r   r   sparse_manhattan   s
   rJ   c                 C   sB   t | |||\}}d}t|jd D ]}t|t|| }q|S rG   )r$   r,   r   r*   r   rI   rB   r   r   r   sparse_chebyshev   s
   rK   r'   c           	      C   sL   t | |||\}}d}t|jd D ]}|t|| | 7 }q|d|  S Nr?   r   r)   rH   )	r   r   r   r   prC   rD   rE   r8   r   r   r   sparse_minkowski  s
   rN   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   rR   c                 C   sf   t |}t |}t| |||\}}d| }t| |||\}}	t |	}	t||	||\}
}t |S )Nr)   )r   rI   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   



rX   c           
      C   sv   t | |||\}}t|}|jd dkrdS t|}|dkr"dS t| |||\}}t|}t|}	t|	| S Nr   r?   )r#   r   rI   r   rS   r$   rO   )
r   r   r   r   rT   rU   denominatorrV   rW   	numeratorr   r   r   sparse_bray_curtis"  s   



r\   c                 C   s<   t | |jd }t| |jd }|dkrdS t|| | S rY   )r   r   r   rO   )r   r   r   r   num_non_zeroZ	num_equalr   r   r   sparse_jaccard7  s
   r^   c                 C   s4   t | |jd }t| |jd }|| }t|| S r   r   r   r   rO   r   r   r   r   rP   num_true_truer]   rQ   r   r   r   sparse_matchingB  s   rb   c                 C   D   t | |jd }t| |jd }|| }|dkrdS |d| |  S )Nr   r?   r'   r   r   r   r   r   r   r   ra   r]   rQ   r   r   r   sparse_diceK     rf   c                 C   sL   t | |jd }t| |jd }|| }|dkrdS t|| | ||  S rY   r_   r`   r   r   r   sparse_kulsinskiW  s   rh   c                 C   8   t | |jd }t| |jd }|| }d| ||  S Nr   r'   rd   r`   r   r   r   sparse_rogers_tanimotoe     rk   c                 C   sn   | 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 rY   )r   r   allr   rS   rO   )r   r   r   r   rP   ra   r   r   r   sparse_russellraon  s   "$rn   c                 C   ri   rj   rd   r`   r   r   r   sparse_sokal_michener{  rl   ro   c                 C   rc   )Nr   r?   r&   rd   re   r   r   r   sparse_sokal_sneath  rg   rp   c           
      C   s~   t | |||\}}d}t|}t|}t|jd D ]}	|||	 7 }q|dkr-|dkr-dS |dks5|dkr7dS d|||   S rL   )r%   r   r,   r   )
r   r   r   r   rC   rD   rE   norm1norm2r8   r   r   r   sparse_cosine  s   rs   c                 C   s   t | |||\}}d}t|}t|}t|| }	t|jd D ]}
|t||
 7 }q#|dkr9|dkr9dS |dksA|dkrCdS ||	krIdS td||	  S rL   )r%   r   rS   rA   r,   r   )r   r   r   r   rC   rD   rE   rq   rr   Zsqrt_norm_prodr8   r   r   r   sparse_hellinger  s   

rt   c                 C   sT  d}d}d}| j d dkr|j d dkrdS | j d dks$|j d dkr&dS t|j d D ]}||| 7 }q-t|j d D ]}||| 7 }q=|| }|| }tj|j d tjd}	tj|j d tjd}
t|j d D ]
}|| | |	|< qkt|j d D ]
}|| | |
|< q}tt|	d || j d  |d   }tt|
d ||j d  |d   }t| |	||
\}}t|}t|j d D ]}||| 7 }qt| j d D ]}| | |vr||	| | 8 }qt|j d D ]}|| |vr||
| | 8 }qt	| |}||| ||j d   7 }|dkr|dkrdS |dkr"dS d|||   S )Nr?   r   r)   r   r@   )
r   r,   r   emptyr   rA   r   r%   setr   )r   r   r   r   rP   Zmu_xZmu_yZdot_productr8   Zshifted_data1Zshifted_data2rq   rr   Zdot_prod_indsZdot_prod_dataZcommon_indicesZall_indicesr   r   r   sparse_correlation  sX     

rw   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   sx   t | |}t| |}|dk r.t| }tdt|D ]}|t|t||  7 }q|S t| t| t| |  S )N   r   )r+   r*   r   ry   r,   intr}   )r|   yabvaluer8   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      ?rx   r{   r   r   r   log_single_beta  s   4r   c                 C   sl  t |}t |}|dkr|dkrdS |dks|dkrdS d}d}d}|| jd k rw||jd k rw| | }	|| }
|	|
kr\|| ||  dkrS|t|| || 7 }|d7 }|d7 }n|	|
k re|d7 }n|d7 }|| jd k rw||jd k s2d}|D ]}|t|7 }q{d}|D ]}|t|7 }qt d| |t|| |t|   d| |t|| |t|    S )Nr   r?   g    חAr   r)   )r   rS   r   r   r   rA   )r   r   r   r   Zn1Zn2Zlog_br   r   r    r!   Zself_denom1Zd1Zself_denom2Zd2r   r   r   sparse_ll_dirichlet  s@   



  r   Z	euclideanZ	manhattanl1ZtaxicabZ	chebyshevZlinfZlinftyZ	linfinityZ	minkowskiZcanberraZll_dirichletZ
braycurtishammingZjaccardZdicematching	kulsinski)rogerstanimoto
russellraosokalmichenerZsokalsneathZcosinecorrelation	hellinger)r   r   r   r   r   r   r   r   )Fr&   )r'   ),
__future__r   localeZnumbaZnumpyr   Z
umap.utilsr   	setlocale
LC_NUMERICZnjitr   r   r   r#   r$   r%   r=   r>   rF   rJ   rK   rN   rR   rX   r\   r^   rb   rf   rh   rk   rn   ro   rp   rs   rt   rw   r}   r   r   r   Zsparse_named_distancesZsparse_need_n_featuresZSPARSE_SPECIAL_METRICSr   r   r   r   <module>   s   



<

!6
!








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

*	
