
    rh-                        d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ 	 ddl m!Z! dZ" ejH                  ddgddgddgg      dz   Z% edde%ddd      \  Z&Z'ejP                  jS                  de      ejP                  jS                  dd      ejP                  jS                  dd      d                      Z*ejP                  jS                  de      ejP                  jS                  dd      d               Z+d  Z,d! Z-d" Z.d# Z/ejP                  jS                  de      ejP                  jS                  d$g d%      d&               Z0d' Z1d( Z2ejP                  jS                  dd      d)        Z3d* Z4d+ Z5y# e#$ r dZ"Y Xw xY w),z'Testing for Spectral Clustering methods    NLinAlgError)SpectralClusteringspectral_clustering)
cluster_qr
discretize)
make_blobs)img_to_graph)adjusted_rand_score)kernel_metrics
rbf_kernel)NearestNeighbors)check_random_state)assert_array_equal)COO_CONTAINERSCSR_CONTAINERS)smoothed_aggregation_solverTF   
   <      g?)	n_samples
n_featurescenterscluster_stdshufflerandom_statecsr_containereigen_solver)arpacklobpcgassign_labels)kmeansr   r   c           
         t        j                  g dg dg dg dg dg dg dg      }| ||      fD ]  }t        |dd| |      j                  |      }|j                  }|d   dk(  rd|z
  }t        |g d	      dk(  sJ t        j                  t        j                  |            }|j                  |j                  k(  sJ |j                  |j                  k(  sJ t        |j                  |j                          y )
N)      ?r&   r&   皙?        r(   r(   )r'   r'   r'   r&   r&   r&   r&   )r(   r(   r(   r&   r&   r&   r&   r   precomputed)r   
n_clustersaffinityr    r#   r   r   )r   r   r   r   r   r   r   )nparrayr   fitlabels_r   pickleloadsdumpsr*   r    r   )	r    r#   r   global_random_seedSmatmodellabels
model_copys	            v/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clusteringr:   '   s    	///////	

	A =#$ >"+"%'
 #c( 	 !9>ZF"6+@AQFFF\\&,,u"56
$$(8(8888&&%*<*<<<<:--u}}=#>    coo_containerc                    t        d|ddgddggd      \  }}t        |d      }t        j                  |dz
  d      } ||      }t	        |d	d
|       j                  |      j                  }t        ||      dk(  sJ y )N   r   r   {Gz?r   r   r   r   )gammag-C6?r   r   r)   )r   r*   r+   r#   )r	   r   r,   maximumr   r.   r/   r   )r#   r<   r3   Xyr4   r7   s          r9   test_spectral_clustering_sparserE   M   s     'Q"b"	DAq 	1AA


1t8QAaA 	+"'		
 
Q	  q&)Q...r;   c                 B   t        d| g dg dgd      \  }}d}g }dD ]l  }t        ||z         j                  |      }|j                  |d	
      }t	        | dd|      j                  |      j
                  }|j                  |       n t        |d   |d          y )N   )r   r   r   )r   r   r   r?   r@   r   )r   r   )n_neighborsdistance)modeprecomputed_nearest_neighbors)r   r*   r+   rH   r   r   )r	   r   r.   kneighbors_graphr   r/   appendr   )	r3   rC   rD   rH   resultsadditional_neighborsnngraphr7   s	            r9   ,test_precomputed_nearest_neighbors_filteringrR   h   s    'L)	DAq KG ' +8L*LMQQRST##AJ#7/8'	 SZW 	 	v wqz71:.r;   c                    t        ddddgddggd      \  }}t        ddd	      }t        j                  t        d
      5  |j                  |       d d d        t        ||j                        dk(  sJ t        dd|       }|j                  |      j                  }t        ||      dk(  sJ t        d      j                  dd      dz  }t               }|D ]P  }|dk7  s	t        d|d	      }|j                  |      j                  }|j                  d   f|j                  k(  rPJ  t        dd d	      }|j                  |      j                  }|j                  d   f|j                  k(  sJ d }t        d|d	      }|j                  |      j                  }|j                  d   f|j                  k(  sJ y # 1 sw Y   qxY w)Nr>   r   r   r   r?   r@   r   nearest_neighbors)r*   r+   r   znot fully connectedmatch)r*   rA   r   r      additive_chi2c                      y)Nr    )xrD   s     r9   <lambda>z!test_affinities.<locals>.<lambda>   s    r;   c                 X    |i k(  sJ t        j                  | |      j                         S N)r,   minimumsum)r[   rD   kwargss      r9   	histogramz"test_affinities.<locals>.histogram   s(    ||zz!Q##%%r;   )r	   r   pytestwarnsUserWarningr.   r   r/   r   randr   shape)r3   rC   rD   spr7   kernels_availablekernrb   s           r9   test_affinitiesrk      s    11vBx.@dDAq 
q3FUV	WB	k)>	? 
q	q"**-222	q@R	SBVVAYFq&)Q...2##B*R/A&(! 1 ?"#q4aPBVVAY&&FGGAJ=FLL0001 
q>PQ	RBVVAYFGGAJ=FLL(((&
 
q91	MBVVAYFGGAJ=FLL(((= s   GGc                    t         j                  j                  |       }d\  }}|j                  ||      }t	        |j                  t         j                              }|j                  |fk(  sJ t        j                  t        j                  |      t        j                  |            sJ t	        |j                  t         j                              }t        j                  ||      sJ y )Nseed)r   rW   )r,   randomRandomStaterandnr   astypefloat64rg   array_equaluniquearangefloat32)r3   r   r   n_componentsdatalabels_float64labels_float32s          r9   test_cluster_qrr|      s    
 99((.@(AL#I|i6DBJJ 78NI<///>>"))N3RYY|5LMMMBJJ 78N>>..999r;   c                     t         j                  j                  |       }d\  }}|j                  ||      }|j	                  |      }t        j
                  t        |      |   t        ||               sJ y )Nrm   )d   rW   )r,   ro   rp   rq   permutationrt   r   )r3   r   r   rx   ry   perms         r9   &test_cluster_qr_permutation_invariancer      su    99((.@(AL$I|i6D##I.D>>44:  r;   r   )2   r~      i  c                    t         j                  j                  |      }t        dd      D ]  }|j	                  d|dz   |       }t        j
                  |t              } |t        j                  |       t        j                  |       |ff| |dz   f      }|j                         d|j                  | |dz         z  z   }t        ||      }t        ||      d	kD  rJ  y )
Nrm   r   r   r   r   )rg   g?)r   g?)r,   ro   rp   rangerandintr-   floatonesrv   toarrayrq   r   r   )	r   r<   r3   r   n_classy_truey_indicatory_true_noisyy_preds	            r9   test_discretizer      s     99((.@(ALB< 9%%a1i@&%(#WWY"))I"6!?@gk*
 #**,s\5G5Gw{6
 0
 
 L|D"662S8889r;   c                    t        j                  d      \  }}d\  }}d\  }}||d   z
  dz  ||d   z
  dz  z   |dz  k  }||d   z
  dz  ||d   z
  dz  z   |dz  k  }||z  }	|	j                         }
|	j                  t              }t        ||
      }t        j                  |j                   |j                  j                         z        |_        t        |dd| 	      }t        t        j                  |            dk(  sJ t        r!t        |dd
| 	      }t        ||      dk(  sJ y t        j                  t               5  t        |dd
d	       d d d        y # 1 sw Y   y xY w)N)(   r   ))      )r>      )      r   r   r   )maskr!   )r*   r    r   amg)r,   indicescopyrr   r   r
   expry   stdr   lenru   
amg_loadedr   rc   raises
ValueError)r3   r[   rD   center1center2radius1radius2circle1circle2circlesr   imgrQ   labels_arpack
labels_amgs                  r9   0test_spectral_clustering_with_arpack_amg_solversr      sm   
 ::hDAq)GWGW71:~!#q71:~!&;;gqjHG71:~!#q71:~!&;;gqjHGG<<>D
..
C4(Eejjnn&667EJ'!(ASM ryy'(A---(aeBT

 #=*=BBB]]:& 	Y!%VWX	Y 	Y 	Ys   EE(c                 f   t        d| ddgddggd      \  }}t        d|       }|j                  |      j                  }t        dd|       j                  |      j                  }t	        ||       t        d| 	      j                  |      j                  }t        j                  ||      rJ y )
Nr>   r   r   r?   r@   r   )r*   r   )r*   rx   r   )rx   r   )r	   r   r.   r/   r   r,   rt   )r3   rC   rD   rh   r7   labels_same_ncomplabels_diff_ncomps          r9   test_n_componentsr     s     'Q"b"	DAq 
q7I	JBVVAYF 	q7I	
 
Q	  v01
 	8JK	Q	 
 ~~f&78888r;   c                 f   t        ddddgddggd      \  }}t        ddd	      j                  |       |j                         }t	        j
                  d
|j                        sJ | dk(  rEt	        j
                  d|j                        sJ t	        j
                  d|j                        sJ y y )Nr>   r   r   r   r?   r@   r   *   )r*   r   verbosez Computing label assignment usingr$   zInitialization completezIteration [0-9]+, inertia)r	   r   r.   
readouterrresearchout)r#   capsysrC   rD   captureds        r9   test_verboser   &  s     11vBx.@dDAq !"a@DDQG  "H998(,,GGG yy3X\\BBByy5x||DDD !r;   c                      t        j                  ddgddgg      } d}t        j                  t        |      5  t        |        ddd       y# 1 sw Y   yxY w)zbCheck that spectral_clustering raises an informative error when passed
    a np.matrix. See #10993r(   g       @z<np\.matrix is not supported. Please convert to a numpy arrayrU   N)r,   matrixrc   r   	TypeErrorr   )rC   msgs     r9   )test_spectral_clustering_np_matrix_raisesr   8  sO     			C:Sz*+A
IC	y	, A  s   AAc                     d }|j                  t        j                  d|       t        j                  d      }t	        j
                  t        d      5  t        |       ddd       y# 1 sw Y   yxY w)zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                      t               r^   r   )argsra   s     r9   new_svdz;test_spectral_clustering_not_infinite_loop.<locals>.new_svdH  s
    mr;   svd)r      zSVD did not convergerU   N)setattrr,   linalgr   rc   r   r   r   )r   monkeypatchr   vectorss       r9   *test_spectral_clustering_not_infinite_loopr   B  sY     		5'2gggG	{*@	A 7  s   A**A3)6__doc__r0   r   numpyr,   rc   scipy.linalgr   sklearn.clusterr   r   sklearn.cluster._spectralr   r   sklearn.datasetsr	   sklearn.feature_extractionr
   sklearn.metricsr   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.utilsr   sklearn.utils._testingr   sklearn.utils.fixesr   r   pyamgr   r   ImportErrorr-   r   rC   _markparametrizer:   rE   rR   rk   r|   r   r   r   r   r   r   r   rZ   r;   r9   <module>r      s   -  	   $ C < ' 3 / ? . , 5 >1J "((QFRHq"g.
/"
41 .9)=>*PQ > R ? : >F .9*PQ/ R :/2/:')T:$	 .9&9:9 ; :9&!YH9@ *PQE RE"S	  Js   F4 4F?>F?