
    Wi                         d dl Z d dlZd dl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mZmZmZmZmZmZ  ej*                  ej,                        j.                  Zd Z	 	 d
dZd Zdd	Zy)    N)
coo_matrix)connected_components)combinations)rejection_sample	make_heapdeheap_sortsimple_heap_pushhas_been_visitedmark_visitedc                    t         j                  t         j                  | j                  | j                  j
                  | j                  j                  | j                  t        j                  ddi dt        j                  j                  d d d   dt        j                  j                  dt        j                  j                  dt        j                  j                  d d d   dt        j                  j                  d d d   dt        j                  j                  d	t        j                  j                  d
t        j                  j                  dt        j                  j                  dt        j                  j                  d d d   dt        j                  j                  d d d   dt        j                  j                  d d d   dt        j                  j                  d d d d df   dt        j                  j                  dt        j                  j                  dt        j                  j                  dt        j                  j                        fd       }|S )NTcurrent_query   ijheap_prioritiesheap_indices	candidatevertexdd_vertexvisitedindicesindptrdata	heap_sizedistance_scaledistance_bound
seed_scale)fastmathnogillocalsc                 j   t        | j                  d   |      }d|z   }t        | j                  d         D ]  }d|d d  k(  sk(  r8t        j                  | |   dz  j                               }|dkD  r	| |   |z  }	nK| |   }	|d   |   }
|d   |   }t        d      D cg c]:  }t        j                  t        j                        t        j                  d      f< }}|j                  d   }t        |      D ]X  }t        j                  ||         } |   |	      }t        |
|||       t        j                  |||f       t        ||       Z ||
d   z  }t        j                  |      \  }}||k  sJt        |   |dz            D ]c  }|   }t        ||      dk(  st        ||        |   |	      }||k  s6t        |
|||       t        j                  |||f       ||
d   z  }e t        |      dk(  rt        j                  |      \  }}||k  r |S c c}w )Nr   g      ?           r   )r   shaperangenpsqrtsumfloat32infint32r	   heapqheappushr   heappopr
   len)query_pointscandidate_indiceskepsilonr   resultr   r   normr   r   r   r   seed_setn_initial_pointsr   r   r   r   r   alternative_cosinealternative_dotr   distr   r   s                       c/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/pynndescent/graph_utils.pycustom_search_closurez6create_component_search.<locals>.custom_search_closure!   s^   0 <--a0!4w|))!,- 7	?AGAJ&$2D*DwwQ1 499;<#:$0Od$:M ,Q$QilO!!9Q<LDI!HMqBFF+RXXb\:MHM  166q9+, 1HH%6q%9:	i-8 ,9Mx!Y8Wi01 ,oa.@@N  %}}X6Hf^+vf~vfqj/AB QA '
I';q@$Wi8 i-@~-, /q) "NN8a^D-;oa>P-PNQ$ x=A%',}}X'>$Hf/ ^+A7	?r Y Ns   %?H0)
pynnd_distr;   r:   	_raw_data_search_graphr   r   _distance_funcnumbanjittypesr+   uint32r-   uint8int16)indexr>   r:   r;   r   r<   r   r   s     @@@@@@r=   create_component_searchrJ      s9    00O#66??D  ''F!!))GD
ZZ
U[[0015
##
 ##
 u{{223Q37	

 EKK--cc2
 **
 ekk''
 $$
 ++
 u{{((1-
 u{{((1-
 ekk''!,
 EKK''3Q3/
 **
 ekk11
  ekk11!
" %++--#
.= =/.=~ !     c                    t        d      D cg c]'  }t        j                  dt        j                        ) }	}| t	        t        j                  |      | j
                  d   |         |	d<   |t	        t        j                  |      |j
                  d   |         |	d<   d}
||	|
      }|	d|
z
     j                         }ddg}t        j                  }|	d   d   |	d   d   f}|d   s|d   r
 ||||||      \  }}}t        ||      \  }}t        |j
                  d         D ]@  }t        |j
                  d         D ]#  }|||f   |k  s|||f   }|	|
   |   |||f   f}% B |	|
   }t        j                  |d d df         }|	d|
z
     j
                  d   |j
                  d   k(  r$t        j                  |	d|
z
     |k7        |d|
z
  <   ||	d|
z
  <   ||	d|
z
        }d|
z
  }
|d   r|d   r
|d   |d   |fS c c}w )Nr#   r   dtyper   T)r'   r(   zerosint64r   r&   copyr,   r   uniqueany)
component1
component2search_closureraw_datar   	rng_statesearch_sizer5   r   r   
query_sider2   r3   changed	best_dist	best_edgeindsdists_r   new_indicess                        r=   find_component_connection_edgerb   {   sW    5:!H=qrxx*=G=+.
0@0@0CYOGAJ +.
0@0@0CYOGAJ JGJ/0LJ/446TlGIA
1.I
!*
'+['7
eQ "$.eu{{1~& 	EA5;;q>* EA;* %adI!(!4Q!7ad DIE	E
 $J/iiQT
+1z>"((+{/@/@/CC&(ffWQ^-D-S&TGA
N#"-JJ 78^
! !*
$ Q<1y00A >s   ,Hc                 >   t        | j                  d   | j                  d   ft        j                        }t        ||dk(  <   t        j
                  t        j                  | j                  d   t        j                        | j                  d         |_        | j                         |_
        |j                         |_        |j                         }d|j                  |j                  dk(  <   |j                          |j                  |j                         }|S )Nr   rM   r$   r   r%   )r   r&   r(   r+   FLOAT32_EPSrepeataranger-   rowravelcolr   tocsrr   eliminate_zerosmaximumT)neighbor_indicesneighbor_distancesr6   s      r=   adjacency_matrix_representationrp      s    				"$4$:$:1$=>bjjF
 5@)S01
		"((+288<>N>T>TUV>WFJ "'')FJ$**,FK \\^F(+FKK"$%
 ^^FHH%FMrK   c                 P  
 t              t        |       \  }
| j                         }
j                     

fd t	        j
                  |d      fdt        t        |      d      D              }|D ]  \  }}}	|	|||f<   |	|||f<    |j                         S )Nc           	      X   t        j                  | k(        d   }t        j                  |k(        d   }t        ||	j                  j                  j
                  
      \  }}}j                  j                  |      }j                  |   }j                  |   }|||fS )Nr   )rY   )r(   whererb   r@   _visitedrX   _distance_correction_vertex_order)c1c2rT   rU   r   r   r   component_idsrI   rV   rY   s          r=   new_edgezconnect_graph.<locals>.new_edge   s    XXmr1215
XXmr1215
0OONNOO#
1a %%1**1-A ""!QwrK   threads)n_jobspreferc              3   \   K   | ]#  \  }} t        j                        ||       % y w)N)joblibdelayed).0rw   rx   rz   s      r=   	<genexpr>z connect_graph.<locals>.<genexpr>   s1      AB 	!x R(As   ),r#   )	rJ   r   tolilrv   r   Parallelr   r'   rj   )graphrI   rY   r|   n_componentsr6   	new_edgesr   r   r   ry   rz   rV   s    ``       @@@r=   connect_graphr      s    ,U3N"6u"=L-[[]F "%"5"56M0 Avi@ A"5#6:A I
  1aq!tq!t <<>rK   )
   r$   )r   N)rC   numpyr(   r.   scipy.sparser   scipy.sparse.csgraphr   	itertoolsr   pynndescent.distances	distancesr?   r   pynndescent.utilsr   r   r   r	   r
   r   finfor+   epsrd   rJ   rb   rp   r    rK   r=   <module>r      sb       # 5 " *   bhhrzz"&&_!T *1Z2*rK   