Ë
    êÿæi.�  ã            
       óž  — d dl Z d dlZd dl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mZmZmZmZ d d
lmZ d dlmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ejv                  jy                  de5e6z   e7z   e9z   «      d„ «       Z=d„ Z>d„ Z?ejv                  jy                  dej€                  ej‚                  ej„                  ej†                  f«      d„ «       ZDejv                  jy                  dej€                  ej‚                  ej„                  ej†                  f«      d„ «       ZEejv                  jy                  dd«      d„ «       ZFejv                  jy                  dg d¢«      d„ «       ZGejv                  jy                  dej„                  ej†                  f«      ejv                  jy                  de7«      d„ «       «       ZHd„ ZId„ ZJd„ ZKd „ ZLejv                  jy                  de8e9z   «      d!„ «       ZMd"„ ZNejv                  jy                  d#d$d%g«      d&„ «       ZOd'„ ZPd(„ ZQejv                  jy                  d)g d*¢«      ejv                  jy                  d+g d*¢«      ejv                  jy                  dg d,¢«      ejv                  jy                  d- eRd.«      «      d/„ «       «       «       «       ZSd0„ ZTejv                  jy                  d1 ejª                  g d2¢ej€                  ¬3«       ejª                  d4d.gej‚                  ¬3«      g ej¬                  ej‚                  «      f ejª                  g d2¢ej€                  ¬3«       ejª                  d4d.gej†                  ¬3«      g ej¬                  ej†                  «      f ejª                  g d2¢ej€                  ¬3«       ejª                  d5d6geW¬3«      g ej¬                  eW«      fg«      d7„ «       ZXejv                  jy                  dej„                  ej†                  g«      ejv                  jy                  d8d9«      d:„ «       «       ZYejv                  jy                  d; e«       e¬<«      d=„ «       ZZejv                  jy                  d>g d?¢«      ejv                  jy                  d@g dA¢«      ejv                  jy                  dBg dC¢«      dD„ «       «       «       Z[ejv                  jy                  dej„                  ej†                  g«      dE„ «       Z\dF„ Z]dG„ Z^e#dH„ «       Z_dI„ Z`dJ„ ZadK„ ZbdL„ Zcejv                  jy                  dMejª                  ge7¢dNge7D � cg c]  } | jÈ                  ‘Œ c} z   ¬<«      ejv                  jy                  dOejª                  ge7¢dNge7D � cg c]  } | jÈ                  ‘Œ c} z   ¬<«      dP„ «       «       Zeejv                  jy                  de7«      dQ„ «       Zfejv                  jy                  dRejª                  ge7¢dNge7D � cg c]  } | jÈ                  ‘Œ c} z   ¬<«      dS„ «       Zgejv                  jy                  dTdUdVg«      dW„ «       ZhdX„ Ziejv                  jy                  d; e«       e¬<«      dY„ «       Zjejv                  jy                  d; e«       e¬<«      dZ„ «       Zkyc c} w c c} w c c} w )[é    N)ÚlinalgÚsparse)Úeigh)Úeigsh)Úconfig_context)Úmake_low_rank_matrixÚmake_sparse_spd_matrix)Úgen_batches)Ú_init_arpack_v0)Ú_convert_to_numpyÚ_get_namespace_device_dtype_idsÚ_max_precision_float_dtypeÚget_namespaceÚ)yield_namespace_device_dtype_combinations©Údevice)Ú_array_api_for_testsÚassert_allcloseÚassert_allclose_dense_sparseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚskip_if_32bit)Ú_approximate_modeÚ_deterministic_vector_sign_flipÚ_incremental_mean_and_varÚ_randomized_eigshÚ_safe_accumulator_opÚ	cartesianÚdensityÚrandomized_range_finderÚrandomized_svdÚ	row_normsÚsafe_sparse_dotÚsoftmaxÚstable_cumsumÚsvd_flipÚweighted_mode)ÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERSÚDOK_CONTAINERSÚLIL_CONTAINERSÚ_modeÚsparse_containerc                 óº   — t         j                  j                  d«      }|j                  dd¬«      }d|d<   d|d<   t	         | |«      «      t	        |«      k(  sJ ‚y )Nr   é
   ©r1   é   ©Úsize)é   é   )r3   é   )ÚnpÚrandomÚRandomStateÚrandintr    )r/   ÚrngÚXs      úu/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sklearn/utils/tests/test_extmath.pyÚtest_densityr@   >   sY   € ô
 �)‰)×
Ñ
 Ó
"€CØ�‰�B˜WˆÓ%€AØ€A€d�GØ€A€d�GäÑ# AÓ&Ó'¬7°1«:Ò5Ð5Ñ5ó    c                  ó$  — t         j                  j                  d«      } | j                  dd¬«      }t        j                  |j
                  «      }dD ]:  }t        ||«      \  }}t        |||¬«      \  }}t        ||«       t        ||«       Œ< y )Nr   r1   r2   r4   )Nr   r6   ©Úaxis)	r9   r:   r;   r<   ÚonesÚshaper.   r(   r   )r=   ÚxÚweightsrD   ÚmodeÚscoreÚmode2Úscore2s           r?   Útest_uniform_weightsrM   K   sy   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰�B˜WˆÓ%€AÜ�g‰g�a—g‘gÓ€GãˆÜ˜A˜t“n‰ˆˆeÜ% a¨°tÔ<‰ˆˆvä˜4 Ô'Ü˜5 &Õ)ñ rA   c                  ó|  — d} t         j                  j                  d«      }|j                  | d¬«      }|j	                  |j
                  «      }| |d d …d d…f<   |d d …d d…fxx   dz  cc<   t        ||d¬«      \  }}t        || «       t        |j                  «       |d d …d d…f   j                  d«      «       y )Né   r   ©éd   r1   r4   r3   r6   rC   )r9   r:   r;   r<   Úrandom_samplerF   r(   r   r   ÚravelÚsum)Úmode_resultr=   rG   ÚwrI   rJ   s         r?   Útest_random_weightsrW   Y   s©   € ð €Kä
�)‰)×
Ñ
 Ó
"€CØ�‰�K iˆÓ0€AØ×Ñ˜!Ÿ'™'Ó"€Aà€A‚aˆˆ!ˆ€e�HØ‚aˆˆ!ˆ€eƒH��MƒHä  1¨1Ô-�K€Dˆ%ä�t˜[Ô)Ü˜eŸk™k›m¨Qªq°"°1°"¨u©X¯\©\¸!«_Õ=rA   Údtypec           
      ó®  — d}d}d}d}| t         j                  k(  rdnd}t        j                  | «      } t        |||dd¬«      j	                  | d	¬
«      }|j
                  ||fk(  sJ ‚t        j                  |d	¬«      \  }}}	|j	                  | d	¬
«      }|j	                  | d	¬
«      }|	j	                  | d	¬
«      }	dD �]  }
t        |||
d¬«      \  }}}| j                  dk(  r3|j                  | k(  sJ ‚|j                  | k(  sJ ‚|j                  | k(  s_J ‚|j                  t         j                  k(  sJ ‚|j                  t         j                  k(  sJ ‚|j                  t         j                  k(  sJ ‚|j
                  ||fk(  sJ ‚|j
                  |fk(  sJ ‚|j
                  ||fk(  sJ ‚t        |d | ||¬«       t        t        j                  |d d …d |…f   |	d |…d d …f   «      t        j                  ||«      |¬«       t        D ]Ä  } ||«      }t        |||
d¬«      \  }}}| j                  dk(  r3|j                  | k(  sJ ‚|j                  | k(  sJ ‚|j                  | k(  sSJ ‚|j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚t        |d | |d | |¬«       ŒÆ �Œ y )NrQ   éô  r3   r1   é   ç        r   ©Ú	n_samplesÚ
n_featuresÚeffective_rankÚtail_strengthÚrandom_stateF©Úcopy©Úfull_matrices)ÚautoÚLUÚQR©Úpower_iteration_normalizerrb   Úf©Údecimal)r9   Úfloat32rX   r   ÚastyperF   r   Úsvdr"   ÚkindÚfloat64r   Údotr+   )rX   r^   r_   ÚrankÚkrn   r>   ÚUÚsÚVtÚ
normalizerÚUaÚsaÚVaÚcsr_containers                  r?   Ú'test_randomized_svd_low_rank_all_dtypesr   k   sÙ  € ð €IØ€JØ€DØ
€AØœBŸJ™JÒ&‰a¨A€GÜ�H‰H�U‹O€Eô 	ØØØØØô	÷ �fˆU˜€fÓð ð �7‰7�y *Ð-Ò-Ð-Ð-ô �z‰z˜!¨5Ô1�H€A€qˆ"ð 	
�‰�˜UˆÓ#€AØ	�‰�˜UˆÓ#€AØ	�‰�5˜uˆÓ	%€Bä*ˆ
ä#Øˆq¨ZÀaô
‰
ˆˆB�ð �:‰:˜ÒØ—8‘8˜uÒ$Ð$Ð$Ø—8‘8˜uÒ$Ð$Ð$Ø—8‘8˜uÒ$Ð$Ð$à—8‘8œrŸz™zÒ)Ð)Ð)Ø—8‘8œrŸz™zÒ)Ð)Ð)Ø—8‘8œrŸz™zÒ)Ð)Ð)à�x‰x˜I q˜>Ò)Ð)Ð)Ø�x‰x˜A˜4ÒÐÐØ�x‰x˜A˜z˜?Ò*Ð*Ð*ô 	˜A˜b˜q˜E 2¨wÕ7ô 	Ü�F‰F�1’Q˜˜˜�U‘8˜R   ¢A ™YÓ'¬¯©°°B«Àõ	
÷
 ,ˆMÙ˜aÓ ˆAô (Ø�1°È!ô‰JˆB��Bð �z‰z˜SÒ Ø—x‘x 5Ò(Ð(Ð(Ø—x‘x 5Ò(Ð(Ð(Ø—x‘x 5Ò(Ð(Ð(à—x‘x—}‘}¨Ò+Ð+Ð+Ø—x‘x—}‘}¨Ò+Ð+Ð+Ø—x‘x—}‘}¨Ò+Ð+Ð+ä  % 4 ¨"¨U¨d¨)¸WÖEò! ,ñA +rA   c                 ó0  — t         j                  j                  d«      }t        j                  t        j                  g d¢| ¬«      «      }t         j
                  j                  |j                  |j                  ¬«      «      d   }||z  |j                  z  }t        |dd¬«      \  }}|j                  d	k(  sJ ‚t        |d
dg«       |j                  dk(  sJ ‚t        j                  t        «      5  t        |dd¬«       ddd«       y# 1 sw Y   yxY w)z@Test that `_randomized_eigsh` returns the appropriate componentsé*   )ç      ð?ç       Àr\   ç      @©rX   r4   r   r7   Úmodule)Ún_componentsÚ	selection)r7   r„   rƒ   )é   r7   ÚvalueN)r9   r:   r;   ÚdiagÚarrayr   ÚqrÚnormalrF   ÚTr   r   ÚpytestÚraisesÚNotImplementedError)rX   r=   r>   Úrand_rotÚeigvalsÚeigvecss         r?   Útest_randomized_eigshr–   »   sØ   € ô �)‰)×
Ñ
 Ó
#€CÜ
�‰”—‘Ò.°eÔ<Ó=€Aä�y‰y�|‰|˜CŸJ™J¨A¯G©G˜JÓ4Ó5°aÑ8€HØ�1‰�x—z‘zÑ!€Aô )¨¸ÀhÔOÑ€GˆWà�=‰=˜DÒ Ð Ð Ü˜g¨¨T {Ô3à�=‰=˜FÒ"Ð"Ð"ô 
�‰Ô*Õ	+Ü˜!¨!°wÕ?÷ 
,×	+Ñ	+ús   Ã4DÄDrv   )r1   é2   rQ   éÇ   éÈ   c           	      ó(  — d}t        |d¬«      }t        || ddd¬«      \  }}t        || ddddd¬	«      \  }}t        ||| z
  |d
z
  f¬«      \  }}|j                  «       ddd…   }	||	   }|dd…|	f   }|j                  | fk(  sJ ‚t        ||d¬«       t        ||d¬«       |j                  || fk(  sJ ‚t        j                  |«      j                  }
t        ||
«      \  }}t        ||
«      \  }}t        ||
«      \  }}t        ||d¬«       t        ||d¬«       | |k  rqt        |d¬«      }t        || ddd|¬«      \  }}|j                  «       ddd…   }	||	   }t        ||d¬«       |dd…|	f   }t        ||
«      \  }}t        ||d¬«       yy)a&  Check that `_randomized_eigsh` is similar to other `eigsh`

    Tests that for a random PSD matrix, `_randomized_eigsh` provides results
    comparable to LAPACK (scipy.linalg.eigh) and ARPACK
    (scipy.sparse.linalg.eigsh).

    Note: some versions of ARPACK do not support k=n_features.
    r™   r   ©rb   r†   é   )r‡   rˆ   Ún_iterrb   é   ri   )r‡   r�   Ún_oversamplesrb   rk   rˆ   r6   )Úsubset_by_indexNéÿÿÿÿrO   rm   r‰   ÚLA)ÚwhichÚtolÚmaxiterÚv0r1   é   )r	   r   r   ÚargsortrF   r   r9   Ú
zeros_liker�   r'   r   r   )rv   r_   r>   r”   r•   Ú
eigvals_qrÚ
eigvecs_qrÚeigvals_lapackÚeigvecs_lapackÚindicesÚ
dummy_vecsÚ_r¦   Úeigvals_arpackÚeigvecs_arpacks                  r?   Ú(test_randomized_eigsh_compared_to_othersr³   Ò   sâ  € ð €JÜ˜z¸Ô:€Aô )Ø	˜ X°bÀqôÑ€GˆWô /Ø	ØØØØØ#'ØôÑ€J�
ô &*Ø	˜J¨™N¨J¸©NÐ;ô&Ñ"€N�Nð ×$Ñ$Ó&¡t¨ tÑ,€GØ# GÑ,€NØ#¢A w JÑ/€Nð ×Ñ A 4Ò'Ð'Ð'ä˜g ~¸qÕAÜ˜j¨.À!ÕDð ×Ñ J° ?Ò2Ð2Ð2ä—‘˜wÓ'×)Ñ)€JÜ˜' :Ó.�J€GˆQÜ˜Z¨Ó4�M€J�Ü  °Ó<Ñ€N�AÜ˜g ~¸qÕAÜ˜j¨.À!ÕDð 	ˆ:‚~Ü˜Z°aÔ8ˆä).Øˆq˜ !¨T°bô*
Ñ&ˆ˜ð !×(Ñ(Ó*©4¨R¨4Ñ0ˆà'¨Ñ0ˆÜ! .°.È"ÕMà'ª¨7¨
Ñ3ˆÜ$ ^°ZÓ@Ñˆ˜Ü! .°.È!ÖLð rA   zn,rank))r1   r[   rP   )rQ   éP   )rZ   r1   )rZ   éú   )rZ   i�  c                 ó<  — || k  sJ ‚t         j                  j                  d«      }|j                  | |«      }||j                  z  }t        |||¬«      \  }}t        t         j                  j                  |d¬«      t        j                  |j                  «      «       t        |j                  |z  t        j                  t        j                  |j                  «      «      «       |t        j                  |«      z  |j                  z  }t        ||d¬«       y)a  Check that randomized_eigsh is able to reconstruct a low rank psd matrix

    Tests that the decomposition provided by `_randomized_eigsh` leads to
    orthonormal eigenvectors, and that a low rank PSD matrix can be effectively
    reconstructed with good accuracy using it.
    éE   )r‡   rb   r   rC   rO   rm   N)r9   r:   r;   Úrandnr�   r   r   r   ÚnormrE   rF   r‹   )Únru   r=   r>   ÚAÚSÚVÚA_reconstructs           r?   Ú&test_randomized_eigsh_reconst_low_rankr¿     sÎ   € ð$ �!Š8€Oˆ8ô �)‰)×
Ñ
 Ó
#€CØ�	‰	�!�TÓ€AØ	ˆA�C‰C‰€Aô ˜Q¨TÀÔD�D€A€qäœbŸi™iŸn™n¨Q°Q˜nÓ7¼¿¹ÀÇÁÓ9IÔJÜ˜aŸc™c A™g¤r§w¡w¬r¯w©w°q·w±wÓ/?Ó'@ÔAàœŸ™ ›
‘N Q§S¡SÑ(€Mô ˜m¨Q¸Ö:rA   r~   c                 óZ  — t         j                  j                  d«      j                  dd«      }| t         j                  u rd}nd}|j                  | d¬«      }|dz  j                  d¬	«      }t        |t        |d
¬«      |«       t        t        j                  |«      t        |«      |«       t         j                  t         j                  fD ]Ù  } ||| ¬«      }|t         j                  u rD|j                  j                  |d¬«      |_        |j                  j                  |d¬«      |_        |j                  j                  |k(  sJ ‚|j                  j                  |k(  sJ ‚t        |t        |d
¬«      |«       t        t        j                  |«      t        |«      |«       ŒÛ y )Nr�   rQ   r‰   r3   Frc   r7   r6   rC   T)Úsquaredr…   )r9   r:   r;   r¸   ro   rp   rT   r   r#   ÚsqrtÚint32Úint64Úindptrr®   rX   )rX   r~   r>   Ú	precisionÚsq_normÚcsr_index_dtypeÚXcsrs          r?   Útest_row_normsrÊ   ?  sP  € ô 	�	‰	×Ñ˜bÓ!×'Ñ'¨¨SÓ1€AØ”—
‘
ÑØ‰	àˆ	à	�‰�˜UˆÓ#€AØ�!‰t�j‰j˜aˆjÓ €Gä˜g¤y°¸DÔ'AÀ9ÔMÜœbŸg™g gÓ.´	¸!³¸iÔHäŸH™H¤b§h¡hÓ/ˆÙ˜Q eÔ,ˆð œbŸh™hÑ&ØŸ+™+×,Ñ,¨_À5Ð,ÓIˆDŒKØŸ<™<×.Ñ.¨ÀUÐ.ÓKˆDŒLØ�|‰|×!Ñ! _Ò4Ð4Ð4Ø�{‰{× Ñ  OÒ3Ð3Ð3Ü! '¬9°TÀ4Ô+HÈ)ÔTÜ!¤"§'¡'¨'Ó"2´I¸d³OÀYÕOñ 0rA   c                  ój  — d} d}d}d}t        | ||dd¬«      }|j                  | |fk(  sJ ‚t        j                  |d¬	«      \  }}}d
D ]h  }t	        ||d|d¬«      \  }}}t        j                  |d | |z
  «      j                  «       dkD  sJ ‚t	        |||d¬«      \  }}	}t        |d | |	d¬«       Œj y )NrQ   rZ   r3   r1   çš™™™™™¹?r   r]   Fre   ©rg   Únonerh   ri   ©r�   rk   rb   g{®Gáz„?rj   r8   rm   ©	r   rF   r   rq   r"   r9   ÚabsÚmaxr   ©
r^   r_   ru   rv   r>   r°   rx   rz   r|   Úsaps
             r?   Ú'test_randomized_svd_low_rank_with_noiserÕ   [  så   € à€IØ€JØ€DØ
€Aô 	ØØØØØô	€Að �7‰7�y *Ð-Ò-Ð-Ð-ô �j‰j˜¨%Ô0�G€A€qˆ!ã2ˆ
ô "Øˆq˜°zÐPQô
‰ˆˆ2ˆqô
 �v‰v�a˜˜�e˜b‘jÓ!×%Ñ%Ó'¨$Ò.Ð.Ð.ô #Øˆq¨ZÀaô
‰	ˆˆ3�ô
 	˜A˜b˜q˜E 3°Ö2ñ# 3rA   c                  ól  — d} d}d}d}t        | ||dd¬«      }|j                  | |fk(  sJ ‚t        j                  |d¬	«      \  }}}d
D ]i  }t	        ||d|d¬«      \  }}}t        j                  |d | |z
  «      j                  «       dkD  sJ ‚t	        ||d|d¬«      \  }}	}t        |d | |	d¬«       Œk y )NrQ   rZ   r3   r1   r‚   r   r]   Fre   rÍ   rÏ   rÌ   r8   rm   rÐ   rÓ   s
             r?   Ú!test_randomized_svd_infinite_rankr×   „  sè   € à€IØ€JØ€DØ
€Aô 	ØØØØØô	€Að �7‰7�y *Ð-Ò-Ð-Ð-ô �j‰j˜¨%Ô0�G€A€qˆ!Û2ˆ
ô "Øˆq˜°zÐPQô
‰ˆˆ2ˆqô
 �v‰v�a˜˜�e˜b‘jÓ!×%Ñ%Ó'¨#Ò-Ð-Ð-ô #Øˆq˜°zÐPQô
‰	ˆˆ3�ô 	˜A˜b˜q˜E 3°Ö2ñ% 3rA   c            
      ó¦  — d} d}d}d}t        | ||dd¬«      }|j                  | |fk(  sJ ‚t        ||dd	d¬
«      \  }}}t        ||ddd¬
«      \  }}	}
t        ||ddd¬
«      \  }}}t        j                  |d	¬«      \  }}}t        ||d | d¬«       t        |	|d | d¬«       t        ||d | d¬«       t        t        j                  ||«      t        j                  |d d …d |…f   |d |…d d …f   «      d¬«       t        t        j                  ||
«      t        j                  |d d …d |…f   |d |…d d …f   «      d¬«       t        |	|«       y )NrQ   rZ   r‰   r1   g      à?r   r]   r8   F)r�   Ú	transposerb   Trg   re   rm   r7   )r   rF   r"   r   rq   r   r9   rt   )r^   r_   ru   rv   r>   ÚU1Ús1ÚV1ÚU2Ús2ÚV2ÚU3Ús3ÚV3ÚU4Ús4ÚV4s                    r?   Ú)test_randomized_svd_transpose_consistencyræ   ­  sZ  € à€IØ€JØ€DØ
€AäØØØØØô	€Að �7‰7�y *Ð-Ò-Ð-Ð-ä  1¨Q¸%ÈaÔP�J€BˆˆBÜ  1¨Q¸$ÈQÔO�J€BˆˆBÜ  1¨Q¸&ÈqÔQ�J€BˆˆBÜ—‘˜A¨UÔ3�J€BˆˆBä˜˜B˜r ˜F¨AÕ.Ü˜˜B˜r ˜F¨AÕ.Ü˜˜B˜r ˜F¨AÕ.äœŸ™˜r 2›¬¯©¨r²!°R°a°R°%©y¸"¸R¸a¸RÂ¸U¹)Ó(DÈaÕPÜœŸ™˜r 2›¬¯©¨r²!°R°a°R°%©y¸"¸R¸a¸RÂ¸U¹)Ó(DÈaÕPô ˜˜BÕrA   c            	      óD  — t         j                  j                  d«      } t        ddd| ¬«      }|d| j	                  dd|j
                  ¬	«      z  z  }d}t        ||dd
d¬«      \  }}}||j                  t        j                  |«      j                  |«      «      z
  }t        j                  |d¬«      }t        ||dd
d¬«      \  }}}||j                  t        j                  |«      j                  |«      «      z
  }t        j                  |d¬«      }t        j                  ||z
  «      dkD  sJ ‚dD ]è  }	t        ||d|	d¬«      \  }}}||j                  t        j                  |«      j                  |«      «      z
  }t        j                  |d¬«      }dD ]€  }
t        |||
|	d¬«      \  }}}||j                  t        j                  |«      j                  |«      «      z
  }t        j                  |d¬«      }dt        j                  ||z
  «      kD  rŒ€J ‚ Œê y )Nr�   rQ   rZ   r—   ©r`   rb   r8   r   r7   r4   rÎ   rÏ   Úfro)Úordrž   )rh   ri   rg   )r3   r1   r—   é   )r9   r:   r;   r   r<   rF   r"   rt   r‹   r   r¹   rÑ   )r=   r>   r‡   rw   rx   ry   r»   Úerror_2Úerror_20rz   ÚiÚerrors               r?   Ú.test_randomized_svd_power_iteration_normalizerrð   Í  sê  € ô �)‰)×
Ñ
 Ó
#€CÜ˜S #°bÀsÔK€AØˆˆS�[‰[˜˜A A§G¡Gˆ[Ó,Ñ	,Ñ,€AØ€Lô Ø	ˆ< ¸fÐSTô�H€A€qˆ"ð 	
ˆA�E‰E”"—'‘'˜!“*—.‘. Ó$Ó%Ñ%€AÜ�k‰k˜! Ô'€GÜØ	ˆ< ¸vÐTUô�H€A€qˆ"ð 	
ˆA�E‰E”"—'‘'˜!“*—.‘. Ó$Ó%Ñ%€AÜ�{‰{˜1 %Ô(€HÜ�6‰6�'˜HÑ$Ó%¨Ò+Ð+Ð+ã*ˆ
Ü!ØØØØ'1Øô
‰ˆˆ1ˆbð �—‘”b—g‘g˜a“j—n‘n RÓ(Ó)Ñ)ˆÜ—+‘+˜a UÔ+ˆãˆAÜ%ØØØØ+5Øô‰HˆAˆq�"ð �A—E‘Eœ"Ÿ'™' !›*Ÿ.™.¨Ó,Ó-Ñ-ˆAÜ—K‘K  uÔ-ˆEØœŸ™˜w¨™Ó/Ó/Ð/Ð/ñ ñ +rA   c                 ó<  — t         j                  j                  d«      }t        ddd|¬«      }d} | |«      }dj	                  | j
                  «      }t        j                  t        j                  |¬«      5  t        ||d	d
¬«       d d d «       y # 1 sw Y   y xY w)Nr�   r—   rž   r1   rè   r3   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.©Úmatchr6   rÎ   )r�   rk   )r9   r:   r;   r   ÚformatÚ__name__r�   Úwarnsr   ÚSparseEfficiencyWarningr"   )r/   r=   r>   r‡   Úwarn_msgs        r?   Ú#test_randomized_svd_sparse_warningsrù   ú  s„   € ô �)‰)×
Ñ
 Ó
#€CÜ˜R °BÀSÔI€AØ€Lá˜Ó€AàM×TÑTØ×%Ñ%ó	
ð ô
 
�‰”f×4Ñ4¸HÖ	EÜ�q˜,¨qÈVÕT÷ 
F×	EÑ	Eús   Á9BÂBc                  ó¢  — t         j                  j                  d«      } d}d}| j                  ||«      }t	        j
                  |d¬«      \  }}}t        ||d¬«      \  }}t        t        j                  ||z  |«      |d¬«       |j                  }	t	        j
                  |	d¬«      \  }}}t        ||d	¬«      \  }
}t        t        j                  |
|z  |«      |	d¬«       t        ||d	¬«      \  }}t        t        j                  ||z  |«      |	d¬«       t        ||d¬«      \  }}t        t        j                  ||z  |«      |	d¬«       y )
NéÏ  rž   r1   Fre   ©Úu_based_decisionrO   rm   T)
r9   r:   r;   r¸   r   rq   r'   r   rt   r�   )Úrsr^   r_   r>   rw   r¼   ry   rÚ   rÜ   ÚXTrÝ   rß   ÚU_flip1ÚV_flip1ÚU_flip2ÚV_flip2s                   r?   Útest_svd_flipr    s!  € ä	�‰×	Ñ	˜tÓ	$€BØ€IØ€JØ
�‰�˜JÓ'€Aô �z‰z˜!¨5Ô1�H€A€qˆ"Ü�a˜¨eÔ4�F€BˆÜœŸ™˜r A™v rÓ*¨A°qÕ9ð 
�‰€BÜ�z‰z˜"¨EÔ2�H€A€qˆ"Ü�a˜¨dÔ3�F€BˆÜœŸ™˜r A™v rÓ*¨B¸Õ:ô    2¸Ô=Ñ€GˆWÜœŸ™˜w¨™{¨GÓ4°bÀ!ÕDÜ  2¸Ô>Ñ€GˆWÜœŸ™˜w¨™{¨GÓ4°bÀ!ÖDrA   zn_samples, n_features)r8   r‰   )r‰   r8   c                 óp  — t         j                  j                  |«      }|j                  | |«      }t	        j
                  |d¬«      \  }}}t        ||d¬«      \  }}t        j                  t        j                  |«      d¬«      }	||	t        j                  |j                  d   «      f   dk\  j                  «       sJ ‚t        ||d¬«      \  }}
t        j                  t        j                  |
«      d¬«      }|
t        j                  |
j                  d   «      |f   dk\  j                  «       sJ ‚y )NFre   Trü   r   rC   r6   )r9   r:   r;   r¸   r   rq   r'   ÚargmaxrÑ   ÚarangerF   Úall)r^   r_   Úglobal_random_seedrþ   r>   rw   r°   ry   rÚ   Úmax_abs_U1_row_idx_for_colrß   Úmax_abs_V2_col_idx_for_rows               r?   Útest_svd_flip_max_abs_colsr  $  sù   € ä	�‰×	Ñ	Ð1Ó	2€BØ
�‰�˜JÓ'€AÜ�z‰z˜!¨5Ô1�H€A€qˆ"ä�Q˜¨TÔ2�E€BˆÜ!#§¡¬2¯6©6°"«:¸AÔ!>ÐØÐ)¬2¯9©9°R·X±X¸a±[Ó+AÐAÑBÀaÑG×LÑLÔNÐNÐNä�Q˜¨UÔ3�E€A€rÜ!#§¡¬2¯6©6°"«:¸AÔ!>ÐØŒr�y‰y˜Ÿ™ !™Ó%Ð'AÐAÑBÀaÑG×LÑLÔNÐNÑNrA   c                  ó  — t        j                  ddgddgg«      } t        | ddd¬«      \  }}}t        d«      D ]Ê  }t        | dd|¬«      \  }}}t	        ||«       t	        ||«       t	        t        j
                  ||z  |«      | «       t	        t        j
                  |j                  |«      t        j                  d«      «       t	        t        j
                  |j                  |«      t        j                  d«      «       ŒÌ y )	Ng       @r\   r‚   r7   Té)   ©Ú	flip_signrb   r1   )r9   rŒ   r"   Úranger   rt   r�   Úeye)ÚaÚu1rÛ   Úv1ÚseedÚu2rÞ   Úv2s           r?   Útest_randomized_svd_sign_flipr  3  sÆ   € Ü
�‰�3˜�*˜s C˜jÐ)Ó*€AÜ  1°À2ÔF�J€BˆˆBÜ�b–	ˆÜ# A q°DÀtÔL‰
ˆˆB�Ü˜B Ô#Ü˜B Ô#ÜœBŸF™F 2¨¡7¨BÓ/°Ô3ÜœBŸF™F 2§4¡4¨Ó,¬b¯f©f°Q«iÔ8ÜœBŸF™F 2§4¡4¨Ó,¬b¯f©f°Q«iÕ8ñ rA   c                  óò   — d„ } t        j                  d«      j                  dd«      }t        |ddd¬«      \  }}} | ||«      \  }}|sJ ‚|rJ ‚t        |dddd¬	«      \  }}} | ||«      \  }}|sJ ‚|rJ ‚y )
Nc                 ó"  — t        j                  | «      j                  d¬«      | j                  d¬«      k(  j                  «       }t        j                  |«      j                  d¬«      |j                  d¬«      k(  j                  «       }||fS )z˜
        returns bool tuple indicating if the values maximising np.abs
        are positive across all rows for u and across all columns for v.
        r   rC   r6   )r9   rÑ   rÒ   r  )ÚuÚvÚu_basedÚv_baseds       r?   Úmax_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiveD  so   € ô
 —6‘6˜!“9—=‘= a�=Ó(¨A¯E©E°q¨E«MÑ9×>Ñ>Ó@ˆÜ—6‘6˜!“9—=‘= a�=Ó(¨A¯E©E°q¨E«MÑ9×>Ñ>Ó@ˆØ˜ÐÐrA   r´   r1   r¡   r8   Tr   r  )r  rÙ   rb   )r9   r  Úreshaper"   )	r   ÚmatÚ	u_flippedr°   Ú	v_flippedr  r  Úu_flipped_with_transposeÚv_flipped_with_transposes	            r?   Ú,test_randomized_svd_sign_flip_with_transposer'  ?  s©   € ò
 ô �)‰)�FÓ
×
#Ñ
# B¨Ó
+€Cô -¨S°!¸tÐRSÔTÑ€Iˆq�)Ù.¨y¸)ÓDÑ€GˆWÙ€Nˆ7ÙÐˆ;ô =KØˆQ˜$¨$¸Qô=Ñ9Ð˜aÐ!9ñ /Ø Ð":óÑ€GˆWñ €Nˆ7ÙÐˆ;ˆwrA   rº   )r—   rQ   é,  Úm)r1   rž   r—   r  r3   c                 ó®  — t         j                  j                  |«      }|j                  | |«      }t	        ||dd¬«      \  }}}t	        ||dd¬«      \  }	}
}|j
                  |	j
                  k(  sJ ‚t        ||	dd¬«       |j
                  |
j
                  k(  sJ ‚t        ||
dd¬«       |j
                  |j
                  k(  sJ ‚t        ||dd¬«       y )NÚgesddr   )Úsvd_lapack_driverrb   Úgesvdgü©ñÒMbP?)ÚatolÚrtol)r9   r:   r;   Úrandr"   rF   r   )rº   r)  rv   r  r=   r>   r  rÛ   Úvt1r  rÞ   Úvt2s               r?   Ú!test_randomized_svd_lapack_driverr3  `  sÃ   € ô �)‰)×
Ñ
 Ó
%€CØ�‰��A‹€Aô !  A¸ÈqÔQ�K€BˆˆCÜ   A¸ÈqÔQ�K€BˆˆCð �8‰8�r—x‘xÒÐÐÜ�B˜ ¨Õ.à�8‰8�r—x‘xÒÐÐÜ�B˜ ¨Õ.à�9‰9˜Ÿ	™	Ò!Ð!Ð!Ü�C˜ 1¨4Ö0rA   c                  ó¬  — t        j                  g d¢«      t        j                  ddg«      t        j                  ddg«      f} t        j                  g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      }t        | «      }t        ||«       t        j                  d«      }t        |d d …t         j
                  f   t        |f«      «       y )N©r6   r7   r8   r‰   r3   rO   r[   )r6   r‰   rO   )r6   r‰   r[   )r6   r3   rO   )r6   r3   r[   )r7   r‰   rO   )r7   r‰   r[   )r7   r3   rO   )r7   r3   r[   )r8   r‰   rO   )r8   r‰   r[   )r8   r3   rO   )r8   r3   r[   r8   )r9   rŒ   r   r   r  Únewaxis)ÚaxesÚtrue_outÚoutrG   s       r?   Útest_cartesianr:  z  s«   € ô �H‰H’YÓ¤§¡¨1¨a¨&Ó!1´2·8±8¸QÀ¸FÓ3CÐD€Dä�x‰xâÚÚÚÚÚÚÚÚÚÚÚð	
ó€Hô" �D‹/€CÜ�x Ô%ô 	�	‰	�!‹€AÜ�qšœBŸJ™J˜Ñ'¬°A°4«Õ9rA   zarrays, output_dtyper5  r…   r‰   rG   Úyc                 ó<   — t        | «      }|j                  |k(  sJ ‚y)z8Check that the cartesian product works with mixed types.N)r   rX   )ÚarraysÚoutput_dtypeÚoutputs      r?   Útest_cartesian_mix_typesr@  ˜  s    € ô& �vÓ€Fà�<‰<˜<Ò'Ð'Ñ'rA   Úas_list)TFc                 óÂ  — t         j                  j                  d«      }d}|j                  dd«      j	                  | «      |z  }|j                  |j
                  d   «      |z  }|r|j                  «       n|}t        |ddd|¬«      \  }}}	t        j                  ||d¬«      }
t        j                  |dz  |d¬«      |
dz  z
  }t        ||
«       t        ||«       y )	Nr�   r1   éè  rž   r   ©Úsample_weight©rH   rD   r7   )
r9   r:   r;   r0  rp   rF   Útolistr   Úaverager   )rX   rA  r=   Úmultr>   rE  ÚX1ÚmeanÚvarr°   Úexpected_meanÚexpected_vars               r?   Ú2test_incremental_weighted_mean_and_variance_simplerO  °  sÆ   € ô �)‰)×
Ñ
 Ó
#€CØ€DØ�‰��rÓ×!Ñ! %Ó(¨4Ñ/€AØ—H‘H˜QŸW™W Q™ZÓ(¨4Ñ/€MÙˆ�‰Œ A€BÜ,¨R°°A°qÈÔV�L€Dˆ#ˆqä—J‘J˜q¨-¸aÔ@€MÜ—:‘:˜a ™d¨MÀÔBÀ]ÐTUÑEUÑU€LÜ˜˜mÔ,Ü˜˜\Õ*rA   zarray_namespace, device, dtype)Úidsc                 ó  — t        | |«      }t        j                  j                  d«      }d}|j	                  dd«      j                  |«      |z  }|j	                  |j                  d   «      j                  |«      |z  }t        |ddd|¬«      \  }}	}
|j                  ||¬«      }|j                  ||¬«      }t        d¬	«      5  t        |ddd|¬«      \  }}}
d d d «       t        «      t        |«      k(  sJ ‚|j                  t        ||¬«      k(  sJ ‚t        «      t        |«      k(  sJ ‚|j                  t        ||¬«      k(  sJ ‚t        ||¬
«      }t        ||¬
«      }t        ||«       t        |	|«       y # 1 sw Y   Œ¦xY w)Nr�   r1   rC  rž   r   rD  r   T©Úarray_api_dispatch)Úxp)r   r9   r:   r;   r0  rp   rF   r   Úasarrayr   Úarray_devicerX   r   r   r   )Úarray_namespacer   rX   rT  r=   rI  r>   rE  rK  rL  r°   ÚX_xpÚsample_weight_xpÚmean_xpÚvar_xps                  r?   Ú5test_incremental_weighted_mean_and_variance_array_apir\  À  sq  € ô 
˜o¨vÓ	6€BÜ
�)‰)×
Ñ
 Ó
#€CØ€DØ�‰��rÓ×!Ñ! %Ó(¨4Ñ/€AØ—H‘H˜QŸW™W Q™ZÓ(×/Ñ/°Ó6¸Ñ=€MÜ,¨Q°°1°aÀ}ÔU�L€Dˆ#ˆqà�:‰:�a ˆ:Ó'€DØ—z‘z -¸�zÓ?Ðä	¨4Ö	0Ü6Ø�!�Q˜Ð)9ô
Ñˆ�˜÷ 
1ô ˜Ó ¤L°Ó$6Ò6Ð6Ð6Ø�=‰=Ô6°rÀ&ÔIÒIÐIÐIÜ˜Ó¤<°Ó#5Ò5Ð5Ð5Ø�<‰<Ô5°bÀÔHÒHÐHÐHä ¨BÔ/€GÜ˜v¨"Ô-€Fä�D˜'Ô"Ü�C˜Õ ÷! 
1Ð	0ús   ÃFÆFrK  )r   ç    ÐcAg    ÐcÁrL  )r6   ç:Œ0âŽyE>g     jø@zweight_loc, weight_scale))r   r6   )r   r^  )r6   r^  )r1   r6   )r]  r6   c                 ó  — t         j                  j                  d«      }d„ }d}|j                  |||d   ¬«      }|j                  | ||¬«      }t	        t         j
                  ||d¬«      }	t	        t         j
                  ||	z
  dz  |d¬«      }
 ||||	|
«       |j                  | ||¬«      }t        j                  |d   «      }t	        t         j                  |d¬«      }	t	        t         j                  |d¬«      }
 ||||	|
«       y )	Nr�   c           
      óô   — | j                   d   }d|dz  dz   |dz  dz   |dz  dz   |fD ]M  }d\  }}}t        ||«      D ]  }	t        | |	   |||||	   ¬«      \  }}}Œ t        ||«       t        ||d¬	«       ŒO y )
Nr   r6   r1   r‰   r7   )r   r   r   rD  ç�íµ ÷Æ°>©r.  )rF   r
   r   r   )
r>   rE  rM  rN  rº   Ú
chunk_sizeÚ	last_meanÚlast_weight_sumÚlast_varÚbatchs
             r?   Ú_assertz<test_incremental_weighted_mean_and_variance.<locals>._assertî  s›   € Ø�G‰G�A‰JˆØ˜a 2™g¨™k¨1°©6°A©:°q¸A±vÀ±zÀ1ÓEˆJØ3:Ñ0ˆI�¨Ü$ Q¨
Ö3�Ü7PØ�e‘HØØØ#Ø"/°Ñ"6ô8Ñ4�	˜8¡_ð 4ô ˜I }Ô5Ü˜H l¸Ö>ñ FrA   )rQ   rž   r   )ÚlocÚscaler5   rF  r7   rC   )	r9   r:   r;   rŽ   r   rH  rE   rK  rL  )rK  rL  Ú
weight_locÚweight_scaler=   rh  r5   Úweightr>   rM  rN  Úones_weights               r?   Ú+test_incremental_weighted_mean_and_variancero  å  sñ   € ô �)‰)×
Ñ
 Ó
#€Cò?ð €DØ�Z‰Z˜J¨lÀÀaÁˆZÓI€Fð 	�
‰
�t 3¨Tˆ
Ó2€AÜ(¬¯©°QÀÈQÔO€MÜ'Ü
�
‰
�Q˜Ñ&¨1Ñ,°fÀ1ô€Lñ ˆAˆv�} lÔ3ð 	�
‰
�t 3¨Tˆ
Ó2€AÜ—'‘'˜$˜q™'Ó"€KÜ(¬¯©°!¸!Ô<€MÜ'¬¯©°¸Ô:€LÙˆAˆ{˜M¨<Õ8rA   c           	      óÔ  — t        j                  g d¢«      }t        j                  g d¢«      }t        j                  g d¢t         j                  ¬«      }t        j                  d«      }t        j                  d«      }t        j                  g d¢g d¢g d	¢g«      j	                  | «      }t        j                  d
t         j
                  d
d
gt         j
                  d
ddgddt         j
                  dgdddt         j
                  gg«      j	                  | «      }t        |||||¬«      \  }}	}
t        |||||¬«      \  }}}t        ||«       t        ||	«       t        ||
«       y )N©ç     ¸€@rr  rr  rr  ©ç     �°@rt  rt  rt  ©r7   r7   r7   r7   r…   r8   r‰   ©éª   rw  rw  rw  ©é®  ry  ry  ry  ©r(  r(  r(  r(  rw  ry  r(  rD  )r9   rŒ   rÃ   rE   rp   Únanr   r   )rX   Ú	old_meansÚold_variancesÚold_weight_sumÚsample_weights_XÚsample_weights_X_nanr>   ÚX_nanÚX_meansÚX_variancesÚX_countÚX_nan_meansÚX_nan_variancesÚX_nan_counts                 r?   Ú6test_incremental_weighted_mean_and_variance_ignore_nanrˆ    s;  € ä—‘Ò5Ó6€IÜ—H‘HÒ=Ó>€MÜ—X‘Xšl´"·(±(Ô;€NÜ—w‘w˜q“zÐÜŸ7™7 1›:Ðä
�‰Ú	Ò3Ò5IÐJó	ç�fˆUƒmð ô �H‰Hà”"—&‘&˜#˜sÐ#Ü�V‰V�S˜#˜sÐ#Ø�#”r—v‘v˜sÐ#Ø�#�sœBŸF™FÐ#ð		
ó÷ �fˆUƒmð 
ô %>Ø	ˆ9�m ^ÐCSô%Ñ!€Gˆ[˜'ô 1JØØØØØ*ô1Ñ-€K� +ô �K Ô)Ü�O [Ô1Ü�K Õ)rA   c                  ó  — t        j                  g d¢g d¢g d¢g d¢g«      j                  } d}| d |…d d …f   }| |d …d d …f   }|j                  d¬«      }|j	                  d¬«      }t        j
                  |j                  d   |j                  d   t         j                  ¬«      }t        ||||«      \  }}}	t        || j                  d¬«      d«       t        || j	                  d¬«      d«       t        |	| j                  d   «       y )N)iX  iÖ  rw  ry  r(  r7   r   rC   r6   r…   rO   )
r9   rŒ   r�   rK  rL  ÚfullrF   rÃ   r   r   )
r»   ÚidxrJ  ÚX2r|  r}  Úold_sample_countÚfinal_meansÚfinal_variancesÚfinal_counts
             r?   Ú)test_incremental_variance_update_formulasr‘  5  sô   € ô 	�‰â%Ú%Ú%Ú%ð		
ó	÷ �að ð €CØ	
ˆ4ˆCˆ4’ˆ7‰€BØ	
ˆ3‰4’ˆ7‰€Bà—‘˜Q�“€IØ—F‘F �F“N€MÜ—w‘w˜rŸx™x¨™{¨B¯H©H°Q©K¼r¿x¹xÔHÐÜ0IØ
ˆI�}Ð&6ó1Ñ-€K� +ô ˜ Q§V¡V° V£^°QÔ7Ü˜¨¯©°A¨«¸Ô:Ü˜ Q§W¡W¨Q¡ZÕ0rA   c            	      ó<  — t        j                  g d¢«      } t        j                  g d¢«      }t        j                  g d¢t         j                  ¬«      }t        j                  g d¢g d¢g d¢g«      }t        j                  dt         j                  ddgt         j                  dd	d	gd	d	t         j                  d
gd
d
d
t         j                  gg«      }t	        || ||«      \  }}}t	        || ||«      \  }}	}
t        ||«       t        |	|«       t        |
|«       y )Nrq  rs  ru  r…   rv  rx  rz  rw  ry  r(  )r9   rŒ   rÃ   r{  r   r   )r|  r}  r�  r>   r�  r‚  rƒ  r„  r…  r†  r‡  s              r?   Ú-test_incremental_mean_and_variance_ignore_nanr“  O  sû   € Ü—‘Ò5Ó6€IÜ—H‘HÒ=Ó>€MÜ—x‘x¢´B·H±HÔ=Ðä
�‰Ò&Ò(<Ò>RÐSÓT€Aä�H‰Hà”"—&‘&˜#˜sÐ#Ü�V‰V�S˜#˜sÐ#Ø�#”r—v‘v˜sÐ#Ø�#�sœBŸF™FÐ#ð		
ó€Eô %>Ø	ˆ9�mÐ%5ó%Ñ!€Gˆ[˜'ô 1JØˆy˜-Ð)9ó1Ñ-€K� +ô �K Ô)Ü�O [Ô1Ü�K Õ)rA   c                  ó²  — d„ } d„ }d„ }d„ }d}d}d}t        j                  dt         j                  ¬	«      }t        j                  d
t         j                  ¬	«      }t        j                  |dz  |f|t         j                  ¬	«      }	t        j                  |dz  |f|t         j                  ¬	«      }
t        j
                  |	|
f«      }t        j                   | |«       ||«      z
  «      j                  «       |kD  sJ ‚|	dd d …f   t        j                  |«      |dz  }}}t        |
j                  d   «      D ]  } ||
|d d …f   |||«      \  }}}Œ ||j                  d   k(  sJ ‚t        j                  |j                  d¬«      |z
  «      j                  «       dkD  sJ ‚t        j                   | |«      |z
  «      j                  «       |kD  sJ ‚|	dd d …f   t        j                  |«      }}t        j                  ||dz  t         j                  ¬	«      }t        |
j                  d   «      D ]9  }t        |
|d d …f   j                  d|
j                  d   f«      |||«      \  }}}Œ; t        ||j                  d   «       t!        |j                  d¬«      |«       |t        j                   | |«      |z
  «      j                  «       kD  sJ ‚y )Nc                 ó&   — | j                  d¬«      S )Nr   rC   )rL  )r»   s    r?   Únp_varz=test_incremental_variance_numerical_stability.<locals>.np_varo  s   € Ø�u‰u˜!ˆu‹}ÐrA   c                 óŠ   — | j                   d   }| dz  j                  d¬«      |z  }| j                  d¬«      |z  dz  }||z
  S )Nr   r7   rC   )rF   rT   )r>   rº   Úexp_x2Úexpx_2s       r?   Úone_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_vart  sK   € Ø�G‰G�A‰JˆØ�Q‘$—‘ �Ó# aÑ'ˆØ—%‘%˜Q�%“- !Ñ#¨Ñ)ˆØ˜‰ÐrA   c                 ó€   — | j                  d¬«      }| j                  «       }t        j                   ||z
  dz  d¬«      S )Nr   rC   r7   )rK  rd   r9   )r>   rK  ÚYs      r?   Útwo_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_var}  s5   € Ø�v‰v˜1ˆv‹~ˆØ�F‰F‹HˆÜ�w‰w˜˜D™ Q‘¨QÔ/Ð/rA   c                 óp   — |dz   }|t        |«      z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr6   )Úfloat)rG   rd  Úlast_varianceÚlast_sample_countÚupdated_sample_countÚsamples_ratioÚupdated_meanÚupdated_variances           r?   Únaive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_update…  sm   € Ø0°1Ñ4ÐØ)¬EÐ2FÓ,GÑGˆØÐ/Ñ/°)¸mÑ2KÑKˆà˜MÑ)Ø�9‰}  \Ñ!1Ñ2Ð5IÑIñJð 	ð Ð-Ð/CÐCÐCrA   r™   r7   i'  g    „×—Ar…   çñhãˆµøä>r   rC   ra  r6   )r9   rŒ   rs   ÚlogrŠ  ÚvstackrÑ   rÒ   Úzerosr  rF   rK  rÃ   r   r!  r   r   )r–  rš  r�  r¦  r¤   r_   r^   Úx1Úx2ÚA0ÚA1r»   rK  rL  rº   rî   s                   r?   Ú-test_incremental_variance_numerical_stabilityr¯  k  si  € òò
ò0òDð €CØ€JØ€IÜ	�‰�#œRŸZ™ZÔ	(€BÜ	�‰�œBŸJ™JÔ	'€BÜ	�‰�)˜q‘. *Ð-¨r¼¿¹Ô	D€BÜ	�‰�)˜q‘. *Ð-¨r¼¿¹Ô	D€BÜ
�	‰	�2�r�(Ó€Aô �6‰6‘&˜“)™l¨1›oÑ-Ó.×2Ñ2Ó4°sÒ:Ð:Ð:ð
 �aš�d‘8œRŸX™X jÓ1°9À±>ˆqˆ#€DÜ�2—8‘8˜A‘;ÖˆÙ1°"°Qº°T±(¸DÀ#ÀqÓI‰ˆˆc‘1ð  à�—‘˜‘
Š?Ðˆ?ä�6‰6�!—&‘&˜a�&“. 4Ñ'Ó(×,Ñ,Ó.°Ò5Ð5Ð5Ü�6‰6‘&˜“)˜c‘/Ó"×&Ñ&Ó(¨3Ò.Ð.Ð.ð �1’a�4‘œ"Ÿ(™( :Ó.ˆ#€DÜ
�‰�
˜I¨™N´"·(±(Ô;€AÜ�2—8‘8˜A‘;ÖˆÜ0Øˆq’!ˆt‰H×Ñ˜a §¡¨!¡Ð-Ó.°°c¸1ó
‰ˆˆc‘1ð  ô �q˜!Ÿ'™' !™*Ô%Ü˜aŸf™f¨!˜f›n¨dÔ3Ø”—‘™˜q›	 C™Ó(×,Ñ,Ó.Ò.Ð.Ñ.rA   c                  ó|  — t         j                  j                  d«      } | j                  dd«      }|j                  \  }}dD �]v  }t        j
                  d|j                  d   |«      }|d   |j                  d   k7  rt        j                  ||g«      }t        j                  |«      D �]
  \  }}|||…d d …f   }|dk(  rt|j                  d¬«      }	|j                  d¬«      }
|j                  d   }t        j                  |j                  d   |j                  d   t         j                  ¬	«      }n&t        |	
«      }|\  }	}
}||j                  d   z  }t        j                  |d | d¬«      }t        j                  |d | d¬«      }t        |	|d
«       t        |
|d
«       t        ||«       �Œ �Œy y )Nrû   r—   r1   )é   rž   é%   r   r¡   rC   r6   r…   rO   )r9   r:   r;   r¸   rF   r  ÚhstackÚ	itertoolsÚpairwiserK  rL  rŠ  rÃ   r   r   r   )r=   r>   r^   r_   Ú
batch_sizeÚstepsrî   Újrg  Úincremental_meansÚincremental_variancesÚincremental_countÚsample_countÚresultÚcalculated_meansÚcalculated_variancess                   r?   Útest_incremental_variance_ddofrÀ  ´  s•  € ä
�)‰)×
Ñ
 Ó
%€CØ�	‰	�"�bÓ€AØŸG™GÑ€IˆzÜ"ˆ
Ü—	‘	˜!˜QŸW™W Q™Z¨Ó4ˆØ�‰9˜Ÿ™ ™
Ò"Ü—I‘I˜u iÐ0Ó1ˆEä×&Ñ& u×-‰DˆAˆqØ�a˜�cš1�f‘IˆEØ�AŠvØ$)§J¡J°A JÓ$6Ð!Ø(-¯	©	°q¨	Ó(9Ð%à$)§K¡K°¡NÐ!Ü!Ÿw™w u§{¡{°1¡~°u·{±{À1±~ÌRÏXÉXÔV‘ä2ØÐ,Ð.CÀ\ó�ð QWÑMÐ"Ð$9Ð;LØ §¡¨A¡Ñ.�ä!Ÿw™w q¨¨! u°1Ô5ÐÜ#%§6¡6¨!¨B¨Q¨%°aÔ#8Ð ÜÐ 1Ð3CÀQÔGÜÐ 5Ð7KÈQÔOÜÐ0°,Ö?ò' .ñ #rA   c                  óº  — t         j                  j                  d«      j                  dd«      } t        j                  t        j
                  | «      d¬«      }t        | «      }t        j                  |d¬«      }t        ||«       t        j                  | t        | j                  d   «      |f   «      }t        | ||d d …t         j                  f   z  «       y )Né$   r3   r6   rC   r   )r9   r:   r;   r¸   r  rÑ   r   r   Úsignr  rF   r6  )ÚdataÚmax_abs_rowsÚdata_flippedÚmax_rowsÚsignss        r?   Útest_vector_sign_fliprÉ  Ô  s    € ä�9‰9× Ñ  Ó$×*Ñ*¨1¨aÓ0€DÜ—9‘9œRŸV™V D›\°Ô2€LÜ2°4Ó8€LÜ�y‰y˜¨AÔ.€HÜ�| XÔ.Ü�G‰G�Dœ˜tŸz™z¨!™}Ó-¨|Ð;Ñ<Ó=€EÜ�t˜\¨E²!´R·Z±Z°-Ñ,@Ñ@ÕArA   c                  ó  — t         j                  j                  d«      } | j                  dd«      }t        j                  |«      }t        j
                  |d¬«      j                  d«      }t        t        |«      ||z  «       y )Nr   r8   r3   r6   rC   )r¡   r6   )	r9   r:   r;   r¸   ÚexprT   r!  r   r%   )r=   r>   Úexp_XÚ	sum_exp_Xs       r?   Útest_softmaxrÎ  ß  s`   € Ü
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�Q‹€AÜ�F‰F�1‹I€EÜ—‘�u 1Ô%×-Ñ-¨gÓ6€IÜœg a›j¨%°)Ñ*;Õ<rA   c                  ó~   — t        j                  t        d¬«      5  t        g d¢«       d d d «       y # 1 sw Y   y xY w)Nzstable_cumsum.+is deprecatedrò   r5  )r�   rö   ÚFutureWarningr&   © rA   r?   Útest_stable_cumsum_deprecationrÒ  ç  s&   € Ü	�‰”mÐ+IÖ	JÜ’iÔ ÷ 
K×	JÑ	Jús   œ3³<ÚA_containerÚdenseÚB_containerc                 ó  — t         j                  j                  d«      }|j                  d«      }|j                  d«      }t        j                  ||«      } | |«      } ||«      }t        ||d¬«      }t        ||«       y )Nr   ©é   r1   )r1   rž   T©Údense_output©r9   r:   r;   rR   rt   r$   r   )rÓ  rÕ  r=   r»   ÚBÚexpectedÚactuals          r?   Útest_safe_sparse_dot_2drß  ì  sq   € ô �)‰)×
Ñ
 Ó
"€Cà×Ñ˜(Ó#€AØ×Ñ˜(Ó#€AÜ�v‰v�a˜‹|€Há�A‹€AÙ�A‹€AÜ˜Q °Ô5€Fä�F˜HÕ%rA   c                 ó¢  — t         j                  j                  d«      }|j                  d«      }|j                  d«      }t        j                  ||«      } | |«      }t        ||«      }t        ||«       |j                  d«      }|j                  d«      }t        j                  ||«      } | |«      }t        ||«      }t        ||«       y )Nr   )r7   r8   r‰   r3   rO   )rO   r[   )r7   r8   )r‰   r3   r8   rO   rÛ  )r~   r=   r»   rÜ  rÝ  rÞ  s         r?   Útest_safe_sparse_dot_ndrá    s¸   € ä
�)‰)×
Ñ
 Ó
"€Cð 	×Ñ˜/Ó*€AØ×Ñ˜&Ó!€AÜ�v‰v�a˜‹|€HÙ�aÓ€AÜ˜Q Ó"€FÜ�F˜HÔ%ð 	×Ñ˜&Ó!€AØ×Ñ˜,Ó'€AÜ�v‰v�a˜‹|€HÙ�aÓ€AÜ˜Q Ó"€FÜ�F˜HÕ%rA   Ú	containerc                 óx  — t         j                  j                  d«      }|j                  d«      }|j                  d«      }t        j                  ||«      }t         | |«      |«      }t        ||«       |j                  d«      }t        j                  ||«      }t        | | |«      «      }t        ||«       y )Nr   r1   r×  )r1   rØ  rÛ  )râ  r=   rÜ  r»   rÝ  rÞ  s         r?   Útest_safe_sparse_dot_2d_1drä    sž   € ô �)‰)×
Ñ
 Ó
"€CØ×Ñ˜2Ó€Að 	×Ñ˜(Ó#€AÜ�v‰v�a˜‹|€HÜ™Y q›\¨1Ó-€FÜ�F˜HÔ%ð 	×Ñ˜(Ó#€AÜ�v‰v�a˜‹|€HÜ˜Q¡	¨!£Ó-€FÜ�F˜HÕ%rA   rÚ  TFc                 óV  — t         j                  j                  d«      }t        j                  ddd|¬«      }t        j                  ddd|¬«      }|j	                  |«      }t        ||| ¬«      }t        j                  |«      |  k(  sJ ‚| r|j                  «       }t        ||«       y )Nr   rØ  r1   rÌ   )r    rb   rž   rÙ  )	r9   r:   r;   r   rt   r$   ÚissparseÚtoarrayr   )rÚ  r=   r»   rÜ  rÝ  rÞ  s         r?   Ú!test_safe_sparse_dot_dense_outputrè  /  sŽ   € ä
�)‰)×
Ñ
 Ó
"€Cä�‰�b˜" c¸Ô<€AÜ�‰�b˜" c¸Ô<€Aà�u‰u�Q‹x€HÜ˜Q °Ô=€Fä�?‰?˜6Ó"¨<Ð'7Ò8Ð8Ð8áØ×#Ñ#Ó%ˆÜ  ¨Õ2rA   c                  óŠ   — t        j                  ddgt         j                  ¬«      } t        | dd¬«      }t	        |ddg«       y	)
a  Make sure sklearn.utils.extmath._approximate_mode returns valid
    results for cases where "class_counts * n_draws" is enough
    to overflow 32-bit signed integer.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i¸‚ rC  r…   i¨a  r   )Úclass_countsÚn_drawsr=   i®`  rµ   N)r9   rŒ   rÃ   r   r   )r>   Úrets     r?   Útest_approximate_moderí  @  s:   € ô 	�‰�%˜�¤b§h¡hÔ/€AÜ
¨°E¸qÔ
A€Cô
 �s˜U C˜LÕ)rA   c                 óÜ  — t        | |«      }t        j                  j                  d«      }|j	                  d¬«      j                  |«      }|j                  ||¬«      }d}|dk(  rdnd}t        d¬	«      5  t        ||d¬
«      \  }	}
}t        ||d¬
«      \  }}}t        |«      d   j                  |j                  k(  sJ ‚t        |«      d   j                  |j                  k(  sJ ‚t        |«      d   j                  |j                  k(  sJ ‚t        t        ||«      |	|¬«       t        t        ||«      |
|¬«       t        t        ||«      ||¬«       d d d «       y # 1 sw Y   y xY w)Nr   r×  r4   r   r3   ro   r§  TrR  r›   rb  )r   r9   r:   r;   rŽ   rp   rU  r   r"   r   rõ   r   r   )rW  r   rX   rT  r=   r>   rX  r‡   r.  Úu_npÚs_npÚvt_npÚu_xpÚs_xpÚvt_xps                  r?   Ú(test_randomized_svd_array_api_compliancerõ  Q  sD  € ô 
˜o¨vÓ	6€Bä
�)‰)×
Ñ
 Ó
"€CØ�
‰
˜ˆ
Ó!×(Ñ(¨Ó/€AØ�:‰:�a ˆ:Ó'€DØ€LØ˜IÒ%‰4¨1€Dä	¨4Ö	0Ü*¨1¨lÈÔKÑˆˆd�EÜ*¨4°ÈAÔNÑˆˆd�Eä˜TÓ" 1Ñ%×.Ñ.°"·+±+Ò=Ð=Ð=Ü˜TÓ" 1Ñ%×.Ñ.°"·+±+Ò=Ð=Ð=Ü˜UÓ# AÑ&×/Ñ/°2·;±;Ò>Ð>Ð>äÔ)¨$°Ó3°TÀÕEÜÔ)¨$°Ó3°TÀÕEÜÔ)¨%°Ó4°eÀ$ÕG÷ 
1×	0Ñ	0ús   Á7C"E"Å"E+c                 óØ  — t        | |«      }t        j                  j                  d«      }|j	                  d¬«      j                  |«      }|j                  ||¬«      }d}d}|dk(  rdnd}	t        d	¬
«      5  t        |||d¬«      }
t        |||d¬«      }t        |«      d   j                  |j                  k(  sJ ‚t        t        ||«      |
|	¬«       d d d «       y # 1 sw Y   y xY w)Nr   r×  r4   r   r3   r1   ro   r§  TrR  )r5   r�   rb   rb  )r   r9   r:   r;   rŽ   rp   rU  r   r!   r   rõ   r   r   )rW  r   rX   rT  r=   r>   rX  r5   r�   r.  ÚQ_npÚQ_xps               r?   Ú1test_randomized_range_finder_array_api_compliancerù  l  sÕ   € ô 
˜o¨vÓ	6€Bä
�)‰)×
Ñ
 Ó
"€CØ�
‰
˜ˆ
Ó!×(Ñ(¨Ó/€AØ�:‰:�a ˆ:Ó'€DØ€DØ€FØ˜IÒ%‰4¨1€Dä	¨4Ö	0Ü& q¨t¸FÐQRÔSˆÜ& t°$¸vÐTUÔVˆä˜TÓ" 1Ñ%×.Ñ.°"·+±+Ò=Ð=Ð=ÜÔ)¨$°Ó3°TÀÕE÷ 
1×	0Ñ	0ús   Á9AC Ã C))lr´  Únumpyr9   r�   Úscipyr   r   Úscipy.linalgr   Úscipy.sparse.linalgr   Úsklearnr   Úsklearn.datasetsr   r	   Úsklearn.utilsr
   Úsklearn.utils._arpackr   Úsklearn.utils._array_apir   r   r   r   r   r   rV  Úsklearn.utils._testingr   r   r   r   r   r   r   Úsklearn.utils.extmathr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úsklearn.utils.fixesr)   r*   r+   r,   r-   r.   ÚmarkÚparametrizer@   rM   rW   rÃ   rÄ   ro   rs   r   r–   r³   r¿   rÊ   rÕ   r×   ræ   rð   rù   r  r  r  r'  r  r3  r:  rŒ   rX   Úobjectr@  rO  r\  ro  rˆ  r‘  r“  r¯  rÀ  rÉ  rÎ  rÒ  rõ   rß  rá  rä  rè  rí  rõ  rù  )râ  s   0r?   Ú<module>r	     sá  ðó ã Û ß  Ý Ý %å "ß IÝ %Ý 1÷õ õ÷÷ ñ ÷÷ ÷ ÷ ñ ÷"÷ ð ‡�×ÑØØ�^Ñ# nÑ4°~ÑEóñ6ó	ð6ò*ò>ð$ ‡�×Ñ˜ 2§8¡8¨R¯X©X°r·z±zÀ2Ç:Á:Ð"NÓOñLFó PðLFð^ ‡�×Ñ˜ 2§8¡8¨R¯X©X°r·z±zÀ2Ç:Á:Ð"NÓOñ@ó Pð@ð, ‡�×Ñ˜Ð5Ó6ñDMó 7ðDMðN ‡�×ÑØòó
ñ;ó
ð;ð4 ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜¨.Ó9ñPó :ó <ðPò4&3òR&3òR ò@*0ðZ ‡�×ÑÐ+¨^¸nÑ-LÓMñUó NðUò Eð2 ‡�×ÑÐ0°6¸6Ð2BÓCñOó DðOò	9òðB ‡�×Ñ˜šnÓ-Ø‡�×Ñ˜šnÓ-Ø‡�×Ñ˜šlÓ+Ø‡�×Ñ˜¡ q£Ó*ñ1ó +ó ,ó .ó .ð1ò,:ð< ‡�×ÑØð ˆR�X‰X’i r§x¡xÔ0°(°"·(±(¸A¸q¸6ÈÏÉÔ2RÐSØˆB�H‰H�R—X‘XÓð	
ð
 ˆR�X‰X’i r§x¡xÔ0°(°"·(±(¸A¸q¸6ÈÏÉÔ2TÐUØˆB�H‰H�R—Z‘ZÓ ð	
ð
 ˆR�X‰X’i r§x¡xÔ0°(°"·(±(¸CÀ¸:ÈVÔ2TÐUØˆB�H‰H�VÓð	
ðóñ"(ó#ð"(ð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜ MÓ2ñ+ó 3ó <ð+ð ‡�×ÑØ$Ù-Ó/Ø'ð ó ñ
!óð
!ð@ ‡�×Ñ˜¢Ó0Ø‡�×Ñ˜¢Ó/Ø‡�×ÑØÒ Qóñ#9óó 0ó 1ð
#9ðL ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ!*ó <ð!*òH1ò4*ð8 ñE/ó ðE/òP@ò@Bò=ò!ð
 ‡�×ÑØØ‡X�XÐ�ÐØ	ˆ	¹ÓH¹¨I�Y×'Ó'¸ÑHÑHð ó ð
 ‡�×ÑØØ‡X�XÐ�ÐØ	ˆ	¹ÓH¹¨I�Y×'Ó'¸ÑHÑHð ó ñ
&óóð&ð ‡�×Ñ˜¨.Ó9ñ&ó :ð&ð( ‡�×ÑØØ‡X�XÐ�ÐØ	ˆ	¹ÓH¹¨I�Y×'Ó'¸ÑHÑHð ó ñ
&óð
&ð" ‡�×Ñ˜¨$°¨Ó7ñ3ó 8ð3ò *ð" ‡�×ÑØ$Ù-Ó/Ø'ð ó ñ
Hóð
Hð, ‡�×ÑØ$Ù-Ó/Ø'ð ó ñ
Fóñ
FùòE Iùò
 IùòP Is   Õ*[ Ö0[Ø#[
