
    Q3j%                        d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d Zd	 Zd
 Zej,                  j/                  dddg      d        Zd Zej,                  j4                  d        Zej,                  j9                  d      ej,                  j/                  dg d      d               Zej,                  j9                  d      ej,                  j/                  dddg      d               Zd Zej,                  j9                  d      ej,                  j/                  dddg      d               Z ej,                  j9                  d      ej,                  j/                  dddg      d               Z!d Z"d Z#ej,                  j/                  dddg      ej,                  j/                  d g d!      d"               Z$y)#    )MockN)assert_allcloseassert_array_almost_equalassert_equal)load_digits	load_iris
make_blobs)ClassicalMDS)_mds)euclidean_distancesc                      t        j                  g dg dg dg dg      } t        j                  ddgddgd	d
gddgg      }t        j                  | |ddd      \  }}t        j                  ddgddgddgddgg      }t	        ||d       y )Nr            r   r      r   r   r   r      r   r   r   r   /$ѿsh|?gw/?gT㥛 ?Mb?X9vο皙ɿS㥛?r   r   )initn_componentsmax_itern_initgp=
ףgS㥛gT㥛 ?gʡE?gZd;?gx&gʡEݿgL7A`?r   )decimal)nparraymdssmacofr   )simZX_X_trues        L/DATA/.local/lib/python3.12/site-packages/sklearn/manifold/tests/test_mds.pytest_smacofr,      s     ((L,lK
LC
66"UENUFOfe_UVA::cAaHDAqXX
&	E5>E6?VUOLF a3    c            	         t        d      \  } }t        |       }t        j                  j	                  d       t        j                  j                  | j                  d   df      }t        j                  ||dddd	      \  }}t        j                  ||ddddd
      \  }}||kD  sJ t        j                  |dz  d|dz  z   z        }||kD  sJ y )NT
return_X_y*   r   r   )size  r   )r   r   r   r    normalized_stressF)r   r   r   r    r4   metric)
r   r   r"   randomseednormalshaper$   r%   sqrt)r(   r)   r&   r'   stress1stress2stress1_rescaleds          r+   &test_nonmetric_lower_normalized_stressr>      s     %DAq
a
 CIINN2
		qwwqz1o.A!!d1PTJAw JAw W wwwzQ!^<=g%%%r-   c                     t        d      \  } }t        j                  j                  d      }|j	                  t        |       dd      }| |   } t        j                  dd	ddd
d      j                  |       }|j                  }t        j                  dd	ddd
d      j                  |       }|j                  }||kD  sJ y )NTr/   r1   )r7      F)r2   replacer   r   r6   )r   r    r   
metric_mdsr   random_stater   )
r   r"   r6   default_rngchoicelenr$   MDSfitstress_)r(   r)   rng
ind_subsetmds_eststress_after_2_iterstress_after_3_iters          r+   test_nonmetric_mds_optimizationrO   ;   s     $'DAq
))

R

(CCFe<J	*Agg 
c!f  "//gg 
c!f  "//!4444r-   rB   TFc           	          t        j                  ddgddgddgddgg      }t        j                  dddd| dd	
      j	                  |      }|j
                  }t        |dd       y )Nr   r   r   r   r   gV瞯<r3   r6   r1   )r   r    epsr   rB   r   rC   r   gư>)atol)r"   r#   r$   rG   rH   rI   r   )rB   r(   rL   stresss       r+   test_mds_recovers_true_datarT   Z   sq    
1a&1a&1a&1a&12Agg 
c!f  __FFAD)r-   c                     t        j                  g dg dg dg dg      } t        j                  t              5  t        j                  | d       d d d        t        j                  g dg dg dg      } t        j                  t              5  t        j                  | d       d d d        t        j                  g dg dg dg dg      } t        j                  dd	gd
dgddgg      }t        j                  t              5  t        j                  | |d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N)r   r   	   r   r   r   r   r   )r    r   r   r   r   r   r   r   )r   r    )r"   r#   pytestraises
ValueErrorr$   r%   )r&   r'   s     r+   test_smacof_errorrZ   j   s    
((L,lK
LC	z	"

3q! 
# ((L,=
>C	z	"

3q! 
# ((L,lK
LC
66"UFOfe_EFA	z	"

3Qq) 
#	" 
#	" 
#	" 
#	"s#   D,D8
E,D58EEc                      t        j                  g dg dg dg dg      } t        j                  ddddd	      }|j	                  |        y )
Nr   r   r   r   Fr   precomputedr6   )rB   n_jobsr    r5   r   )r"   r#   r$   rG   rH   )r&   mds_clfs     r+   test_MDSr_      sD    
((L,lK
LCggG KKr-   zignore::FutureWarningk)g      ?g      ?r   c                     t        j                  g dg dg dg dg      }t        j                  |ddd      \  }}t        j                  | |z  ddd      \  }}t	        ||d	
       t	        ||d	
       y)z>Test that non-metric MDS normalized stress is scale-invariant.r   r   r   r   Fr   r   )r5   r   rC   gh㈵>)rtolN)r"   r#   r$   r%   r   )r`   r&   X1r;   X2r<   s         r+   test_normed_stressre      sg     ((L,lK
LC**SKKB**QWUQQOKBGW40B&r-   r5   c                    t         j                  j                  d      }|j                  dd      }t	        |      }t        t        j                        }|j                  d|       t        j                  | d|      }|j                  |       |j                  d   d	   | k7  sJ t        j                  || d|       |j                  d   d	   | k7  sJ y )
Nr   r   r   )side_effectz$sklearn.manifold._mds._smacof_singleauto)r5   r4   rC   r   r4   )r"   r6   RandomStaterandnr   r   r$   _smacof_singlesetattrrG   fit_transform	call_argsr%   )r5   monkeypatchrJ   r(   distmockests          r+   test_normalized_stress_autors      s     ))


"C		!QAq!DC../D>E
''6
LCa>>!01V;;;JJtFf3O>>!01V;;;r-   c                      t        j                  g dg dg dg      } t        j                  ddgddgdd	gg      }t        j                  | |d
d       y )N)        LXz?LXz?)rv   ru         <)rw   rx   ru   gE/?g8$g?g"?grY؀-?g;
-?gd%?Fr   )r   r5   r    )r"   r#   r$   r%   )disr   s     r+   test_isotonic_outofboundsrz      sd     ((8;<	
C 88 "45!34!34	
D JJseA6r-   r4   c                    t        j                  ddgddgddgddgg      }t        |      }t        j                  dd|       j                  |      }|j                  }|j                  }t        |      }|j                         |j                         z
  dz  j                         dz  }| r:t        j                  ||j                         dz  j                         dz  z        }t        ||       y )Nr   r   r   r   r   r1   )r   rC   r4   )r"   r#   r   r$   rG   rH   
embedding_rI   ravelsumr:   r   )r4   r(   DrL   r'   rS   D_mdsstress_Zs           r+   test_returned_stressr      s    
 	1a&1a&1a&1a&12AAAgg+ 
c!f	  	A__F"E*q0557!;H778(:'?'?'AA'EFGFH%r-   c                    t        j                  ddgddgddgddgg      }t        j                  dd|       }|j	                  |dz         |j
                  }|j	                  |dz         |j
                  }t        ||       y )	Nr   r   r   r   r   r1   )r   rC   rB   d   )r"   r#   r$   rG   rH   n_iter_r   )rB   r(   rL   n_iter1n_iter2s        r+   )test_convergence_does_not_depend_on_scaler      s    
 	1a&1a&1a&1a&12AggG KKCooGKKCooG'"r-   c                     t        j                  ddgddgddgddgg      } t        j                  g dg dg dg dg      }t        j                  t        d	
      5  t        j                  ddd      j                  |       d d d        t        j                  t        d
      5  t        j                  ddd      j                  |        d d d        t        j                  t        d
      5  t        j                  ddd      j                  |        d d d        t        j                  t        d
      5  t        j                  dd      j                  |        d d d        t        j                  t        d
      5  t        j                  dddd      j                  |        d d d        y # 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   z`dissimilarity` parameter is)matchr\   r6   )dissimilarityr   r    zUse metric_mdsT)r5   r   r    FzThe default value of `init`	euclidean)r5   r    zprovided both `dissimilarity`cosine)r5   r   r   r    )
r"   r#   rW   warnsFutureWarningr$   rG   rH   rX   rY   )r(   r&   s     r+   #test_future_warning_init_and_metricr      sl   
1a&1a&1a&1a&12A
((L,lK
LC 
m+I	Jm(1EII#N 
K 
m+;	<t(1599!< 
= 
m+;	<u8A6::1= 
= 
m+H	I{1-11!4 
J 
z)H	I;Xa	

#a& 
J	I! 
K	J 
=	< 
=	< 
J	I 
J	Is<   (F;)(G4(G?'G 	)G,;GGG G),G5c                     t        d      \  } }t               }|j                  |       }t        j                  d      }|j                  |       }t        j                  d      }|j                  | |      }t        ||       y )NTr/   classical_mds)r   r6   )r   r
   rm   r$   rG   r   )r(   r)   cmdsZ_classicalmds1Z1mds2Z2s           r+   test_classical_mds_init_to_mdsr     sr    %DAq>D$$Q'K77(D			A	B77!D			AK		0BBr-   r   r6   r   r   )r   r   r   
   c                     t        d      \  }}t        j                  | |d      }|j                  |      }|j                  d   |k(  sJ y )Nr   )
n_featuresr   )r   r   r    )r	   r$   rG   rm   r9   )r   r   r(   r)   modelr'   s         r+   test_correct_n_componentsr      sJ     $DAqGGLCEAA771:%%%r-   )%unittest.mockr   numpyr"   rW   numpy.testingr   r   r   sklearn.datasetsr   r   r	   sklearn.manifoldr
   r   r$   sklearn.metricsr   r,   r>   rO   markparametrizerT   rZ   thread_unsafer_   filterwarningsre   rs   rz   r   r   r   r   r    r-   r+   <module>r      s      R R ? ? ) ( /	4&D5> e}5* 6**. 	 	 34m,' - 5' 34D%=1< 2 5< 7* 34,tUm<& = 5&2 34e}5# 6 5#*6 (O!<=7& 8 >&r-   