o
    XεiDA                  	   @   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   dtype)npsortconcatenateonesbool_)arrauxflag r   ?/home/ubuntu/.local/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data2
result_indresult_datai1i2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_valright_complement
mix_weightleft_min	right_minidxijleft_valk	right_valr   r   r   general_sset_intersection   s@   rF   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   )r1   r2   r3   r   )r5   r6   r   r7   r8   r!   r9   r:   r;   r>   r?   r@   rA   rB   rC   rD   rE   r   r   r   general_sset_union   s"   rG   c                 C   sD   t | |||\}}d}t|jd D ]
}||| d 7 }qt|S )N        r      )r+   r3   r   r	   sqrtr   r   r    r!   aux_indsaux_dataresultrA   r   r   r   sparse_euclidean   s
   
rO   c                 C   s@   t | |||\}}d}t|jd D ]}|t|| 7 }q|S NrH   r   r+   r3   r   r	   absrK   r   r   r   sparse_manhattan   s
   rS   c                 C   sB   t | |||\}}d}t|jd D ]}t|t|| }q|S rP   )r+   r3   r   r1   r	   rR   rK   r   r   r   sparse_chebyshev   s
   rT   r.   c           	      C   sL   t | |||\}}d}t|jd D ]}|t|| | 7 }q|d|  S NrH   r   r0   rQ   )	r   r   r    r!   prL   rM   rN   rA   r   r   r   sparse_minkowski  s
   rW   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   r[   c                 C   sf   t |}t |}t| |||\}}d| }t| |||\}}	t |	}	t||	||\}
}t |S )Nr0   )r	   rR   r*   r+   r,   sum)r   r   r    r!   	abs_data1	abs_data2
denom_inds
denom_data
numer_inds
numer_dataval_indsval_datar   r   r   sparse_canberra  s   



re   c           
      C   sv   t | |||\}}t|}|jd dkrdS t|}|dkr"dS t| |||\}}t|}t|}	t|	| S Nr   rH   )r*   r	   rR   r   r\   r+   rX   )
r   r   r    r!   r_   r`   denominatorra   rb   	numeratorr   r   r   sparse_bray_curtis"  s   



ri   c                 C   s<   t | |jd }t| |jd }|dkrdS t|| | S rf   )r   r   r   rX   )r   r   r    r!   num_non_zero	num_equalr   r   r   sparse_jaccard7  s
   rl   c                 C   s4   t | |jd }t| |jd }|| }t|| S r   r   r   r   rX   r   r   r    r!   rY   num_true_truerj   rZ   r   r   r   sparse_matchingB  s   rp   c                 C   D   t | |jd }t| |jd }|| }|dkrdS |d| |  S )Nr   rH   r.   r   r   r   r   r   r    r!   ro   rj   rZ   r   r   r   sparse_diceK     rt   c                 C   sL   t | |jd }t| |jd }|| }|dkrdS t|| | ||  S rf   rm   rn   r   r   r   sparse_kulsinskiW  s   rv   c                 C   8   t | |jd }t| |jd }|| }d| ||  S Nr   r.   rr   rn   r   r   r   sparse_rogers_tanimotoe     ry   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 rf   )r   r	   allr   r\   rX   )r   r   r    r!   rY   ro   r   r   r   sparse_russellraon  s   "$r|   c                 C   rw   rx   rr   rn   r   r   r   sparse_sokal_michener{  rz   r}   c                 C   rq   )Nr   rH   r-   rr   rs   r   r   r   sparse_sokal_sneath  ru   r~   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 rU   )r,   r   r3   r   )
r   r   r    r!   rL   rM   rN   norm1norm2rA   r   r   r   sparse_cosine  s   r   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 rU   )r,   r	   r\   rJ   r3   r   )r   r   r    r!   rL   rM   rN   r   r   sqrt_norm_prodrA   r   r   r   sparse_hellinger  s   

r   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 )NrH   r   r0   r   rI   )
r   r3   r	   emptyr   rJ   r   r,   setr   )r   r   r    r!   rY   mu_xmu_ydot_productrA   shifted_data1shifted_data2r   r   dot_prod_indsdot_prod_datacommon_indicesall_indicesr   r   r   sparse_correlation  sX     

r   c                 C   sB   | dkrdS | t |  |  dt dt j |    d| d   S )Nr   r   r-   r.   r0   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   )r2   r1   r	   r   r3   intr   )r   yabvaluerA   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   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   rH   g    חAr   r0   )r	   r\   r   r   r   rJ   )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   )Fr-   )r.   ),
__future__r   localenumbanumpyr	   
umap.utilsr   	setlocale
LC_NUMERICnjitr   r   r   r*   r+   r,   rF   rG   rO   rS   rT   rW   r[   re   ri   rl   rp   rt   rv   ry   r|   r}   r~   r   r   r   r   r   r   r   sparse_named_distancessparse_need_n_featuresSPARSE_SPECIAL_METRICSr   r   r   r   <module>   s   



<

!6
!








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

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