`L iJddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z ddl mZddlmZmZmZddlmZddlmZmZddlmZmZmZmZdd lmZdd lm Z dd l!m"Z"m#Z#dd l$m%Z%dd l&m'Z'm(Z(e j Z)gdZ*d\Z+Z,e-e+e,Z.d}dZ/ej`jcde*ej`jcde2de)jfjhddZ5ej`jcdgdej`jcdgdej`jcde(e'zej`jcdddgej`jcdgddZ6ej`jcde(e'zdZ7ej`jcddd gej`jcde(e'zd!Z8ej`jcde(e'zd"Z9d#Z:ej`jcd$d%d&gej`jcd'e*d(Z;ej`jcd)e<e=e>e*d d*hz ej`jcd+d,d-gej`jcd.d&d%gej`jcd/d&d%gd0Z?ej`jcd1ejjdjd2d3e j"d2d3d4d5dejjdjd6d2ggd78ej`jcde*d9ZCej`jcdddgd:ZDej`jcde*d;ZEej`jcde*d<ZFej`jcde*d=ZGej`jcdgd>ej`jcd/d&d%gd?ZHej`jcd@ejgdAgdBgejgdAgdBgjgej`jcdCgdDdEZKej`jcdFd e-e)jfjhfde-e)jfjhdz fde-e)jfjhfgej`jcd@e)jfe)jfjgdGZLej`jcdd*d gdHZMej`jcdddgdIZNdJZOdKZPdLZQdMZRej`jcdNe)jfdOdPfe)jfdQdfejjdjdRdSdTdPfgdUZTej`jcde*dVZUdWZVej`jcde*dXZWej`jcdddgdYZXej`jcdd dgdZZYej`jcd[gd\d]ZZej`jcde*d^Z[ej`jcde*d_Z\d`Z]daZ^dbZ_dcZ`ddZadeZbdfZcdgZddhZediZfdjZgej`jcd$d%d&gdkZhdlZiej`jcdmee8ej`jcdne%eige 8ej`jcdoedPd pedPd d%qedrd d%qedPdpedPdd%qedPddsdtge 8duZjej`jcdmee8ej`jcdneige 8ej`jcdoedvd pge 8dwZkej`jejjdxdyk7dz{d|Zoy)~N)assert_array_equal)config_contextdatasets)clone) load_irismake_classificationmake_low_rank_matrix)PCA)_assess_dimension_infer_dimension)_atol_for_type_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinationsdevice)_get_check_estimator_ids)_array_api_for_testsassert_allclose) check_array_api_input_and_values)CSC_CONTAINERSCSR_CONTAINERS)fullcovariance_eigharpack randomizedauto)i,ct|j|j||t|j|j||t|j|j||t|j|j||t|j |j |||j |j k(sJ|j|jk(sJ|j|jk(sJy)Nrtolatol) r components_explained_variance_singular_values_mean_noise_variance_ n_components_ n_samples_n_features_in_)pca1pca2r!r"s j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_pca.py_check_fitted_pca_closer.'sD$$d&6&6TM   $":":DD))4+@+@tRVWDJJ DAD(($*>*>TPTU   !3!3 33 3 ??doo -- -   $"5"5 55 5 svd_solver n_componentsctj}t||}|j|j |}|j d|k(sJ|j |}t|||j |}t|||j}|j}ttj||tj|j ddy)Nr1r0r2-q=r") irisdatar fit transformshape fit_transformrget_covariance get_precisionnpdoteye)r0r1XpcaX_rX_r2cov precisions r-test_pcarH5s A UKr/density){Gz?皙?g333333?)r2 sparse_containerrrscale)r2rMdcd}d}tjj|}|tjjt t ||} |j| jd|z} | j| } t|||} | j| | j} t|||} | j| t| | ||tjjt t ||}|j}t| j|| j||t| j|| j||y)z?Check that the results are the same for sparse and dense input.r5绽|= random_staterIr2r1r0rTr6N)r?random default_rngspsparseSPARSE_MSPARSE_Nr;multiplyr r9toarrayr.rr:)global_random_seedr0rNr1rIrOr"transform_atolrTrB scale_vectorrCXdpcadX2X2ds r-test_pca_sparsereKsN DN99(();#>q#ABM7#4#4Q#78G%%b)+<+F+Fr+JKr/rrcJtjj|}|tjjt t |}td|}d|d}tjt|5|j|dddy#1swYyxYw)NrTr4zWPCA only support sparse inputs with the "arpack" and "covariance_eigh" solvers, while "z " was passedmatch) r?rV RandomStaterXrYrZr[r pytestraises TypeErrorr9)r^r0rNrTrBrCerror_msg_patterns r-test_sparse_pca_solver_errorrus99(();BB"cVtjj|}|tjjt t |}tddj|}tddj|}t|j|jdy) zHCheck that "auto" and "arpack" solvers are equivalent for sparse inputs.rlrMrr4r{Gzt?r!N) r?rVrprXrYrZr[r r9rr%)r^rNrTrB pca_arpackpca_autos r-7test_sparse_pca_auto_arpack_singluar_values_consistencyr{s 99(();>qAJv6::1=HJ//1J1JQUVr/cd}|dz}tjjdd||f}t|}t j 5t j dt|j|dddy#1swYyxYw)NrMrLr2sizer1error) r?rVuniformr warningscatch_warnings simplefilterRuntimeWarningr9)r1 n_featuresrBrCs r-test_no_empty_slice_warningrswL!J "a|Z&@AA < (C  "g~6  s ,BB copyTFsolverc tjjd}d}d}d}d}tj|j ||tjtj tj dd||j ||}|ddddfxxdzcc<|j||fk(sJ|jd jd kDsJ|j}t|d ||dd } | j|j} | j||fk(sJ| j|} t| | dt| jddtj|t| jd tj |d|j}t|d||j#|j} | j|} | j||fk(sJ| jd jt%j&ddk(sJy)NrrPPrm2g$@?axisgfffffE@T)r1whitenrr0rTiterated_powergMb@?rxr2ddofrr5r6F)r1rrr0gfffffR@rK)rel)r?rVrpr@randndiaglinspacer;stdrr r<r:ronesmeanzerosr9rqapprox) rrrng n_samplesrr1rankrBX_rC X_whitened X_whitened2 X_unwhiteneds r-test_whiteningrs  ))   "CIJL D  )T" rwwr{{4d34ciij6QR A a"fINI 77y*- -- - 55a5=    %% % B !   C""2779-J    <8 88 8--#KJ $7JNNN2BGGL4IJJOOO+RXXl-C%P B !%dv  c"'')n==$L   )\!: :: :     # ' ' )V]]4T-J JJ Jr/other_svd_solverr data_shapetallwiderank_deficientrc |dk(rd\}}nd\}}d}|r[tjj|} t||dz} | j ||z| f| j | |fz} nt ||z|d|} t||} | j |d } | d|| |d} } |tjk(rtd d }d }ntdd }d}i}|dk(rd}ddi}n!|dk(rtj||dz }nd}t|d|}td||||d|}|j| }tj|jsJ|j|k(sJ|j| }tj|jsJ|j|k(sJ|jdk\jsJt!|j|jfi|t!|j"|j"fi||j$}tj|jsJ|j$}tj|jsJ|j|kD}|j'dkDsJt!||||fi|t!|dd|f|dd|ffi||j)| }tj|jsJ|j|k(sJ|j)| }tj|jsJ|j|k(sJt!|dd|f|dd|ffi||j+|}tj|jsJ|j|k(sJ|j+|}tj|jsJ|j|k(sJ|j$j,d|j$j,dk(rt!|| fi|t!|| fi|y|j$j,d| kr-|jj|kDsJt!||fi|yt!|j)|dd|f|j)|dd|ffi|y)Nr)rPrm)rmrPrMrLr~?)rr tail_strengthrTFrgQ?h㈵>)r"r!rRr5rrrrr2rr1r0r)r1r0rrTr)r?rVrWminstandard_normalr astypefloat32dictminimumr r<isfinitealldtyper$rexplained_variance_ratio_r#sumr:inverse_transformr;)rrrrr^ global_dtyperrn_samples_testrrrBX_trainX_testtolsvariance_thresholdextra_other_kwargsr1pca_full pca_otherX_trans_full_trainX_trans_other_trainreference_componentsother_componentsstableX_trans_full_testX_trans_other_testX_recons_full_testX_recons_other_tests r-test_pca_solver_equivalencers-V ' : ' :Nii##$679j)Q.   n,d3    dJ%7  8 9 !.0!+  9j) E*A mQyz]VGrzz!D)!U+"<' .3 X %zz)Z81<   OH!#'   I"//8 ;;) * . . 00 0  # #| 33 3#11': ;;* + / / 11 1  $ $ 44 4  ( (A - 2 2 44 4H00)2O2OXSWX**++  $// ;;+ , 0 0 22 2 ,, ;;' ( , , .. . ) ),> >F ::r/c tjjd}d\}}|j||dz}|ddxxxtjgdz cccd|jd|ztjgdz}t d|j |j|}|tj|dzjz}ttj|ddd d y) NrrPrrKrMrr2rLr4rrwrx) r?rVrprarrayr r9r:rrrabs)r0rnprBXtYts r-test_pca_check_projectionrs ))   "C DAq !Q#AcrFbhhy!!F syyA )!4 4B ! 3 7 7 : D DR HB"''2q5++-  BBFF2a58$c5r/cddgddgg}td|d}|j|}|jsJdt|j ddt|j d d y) Nrgr2rrU)rLr2r5r6gQ?rwrx)r r<r;rrr)r0rBrCrs r-test_pca_check_projection_listrsi sc3Z A 1! DC"G == & =GLLNDu5GKKM4d3r/)rrrc:tjjd}d\}}|j||}|dddfxxdzcc<|gdz }t d||j |}|j |}|j|}t||d y) Nr)rrr2r)rrrrLrh㈵>rx) r?rVrprr r9r:rr) r0rrrrrBrCY Y_inverses r-test_pca_inversers ))   "C DAq !QAadGwGNA 1F C G G JC aA%%a(IAyt,r/r8)rr2r)r2rrz!svd_solver, n_components, err_msg))rr2must be between 1 and min\(n_samples, n_features\))rrr)rrLzmust be strictly less than min)rrzZn_components=3 must be between 0 and min\(n_samples, n_features\)=2 with svd_solver='full'cpd}t||}tjt|5|j |ddd|dk(rU|}dj ||}tjt|5t||j |dddyy#1swYdxYw#1swYyxYw)NrLr0rnrzgn_components={}L? must be strictly less than min\(n_samples, n_features\)={}L? with svd_solver='arpack')r rqrr ValueErrorr9format)r0r8r1err_msg smallest_d pca_fitteds r-test_pca_validationr s,J\j9J z 1tX!  ""(&z"B  ]]:W 5 ?   4 8 8 > ? ?  ? ?sB 9B, B),B5zsolver, n_components_c`t|}|j||j|k(sJy)Nr)r r9r()r8rr(rCs r-test_n_components_noner 4s-  CGGDM    -- -r/ctjjd}d\}}|j||}t d|}|j ||j dk(sJy)NriXrMmler4r2)r?rVrprr r9r()r0rrrrBrCs r-test_n_components_mlerCs] ))   "C#Iz )Z(A 5Z 8CGGAJ    !! !r/c.tjjd}d\}}|j||}t d|}dj |}t jt|5|j|dddy#1swYyxYw)Nrr r r4z:n_components='mle' cannot be a string with svd_solver='{}'rn) r?rVrprr rrqrrrr9)r0rrrrBrCrs r-test_n_components_mle_errorrNs ))   "C#Iz )Z(A 5Z 8CJQQG z 1  s 0B  Bc8tjjd}d\}}|j||dz}|ddxxxtjgdz ccct ddj |}|jdk(sJ|jd k(sJy) NrrPrrKrMrrrr2rLr rr4r2) r?rVrprrr r9r1r()rrrrBrCs r- test_pca_dimr]s ))   "C DAq !Q#AcrFbhh''F 5V 4 8 8 ;C   u $$ $    !! !r/c d\}}tjjd}|j||dz|j|dtjgdzztjgdz}t |d}|j ||j}tjtd|Dcgc]}t|||c}}|d|jd |zz kDsJycc}w) NrrrrKr2r)r2rrrrr4rJ) r?rVrprrr r9r$ranger max)rrrrBrCspectklls r-test_infer_dim_1rhs DAq ))   "C !Q# ))Aq/BHH_5 5 6 ((? # $ 1 0CGGAJ  # #E 5A;Ga$UAq1G HB a52668dQh& && &HsC>cxd\}}tjjd}|j||dz}|ddxxxtjgdz ccc|ddxxxtjgdz ccct |d }|j ||j}t||d kDsJy) NrrrKrMrrrrrLr}rr4r2 r?rVrprrr r9r$r rrrrBrCrs r-test_infer_dim_2r#ys DAq ))   "C !Q#AcrFbhh''FbH)**H 1 0CGGAJ  # #E E1 % )) )r/c d\}}tjjd}|j||dz}|ddxxxtjgdz ccc|ddxxxtjgdz ccc|dd xxxd tjgd zz ccct |d }|j ||j}t||d kDsJy)NrrrKrMrrr rm(rL)r}r2r}r2r}rr4r!r"s r-test_infer_dim_3r&s DAq ))   "C !Q#AcrFbhh''FbH)**HbHBHH/000H 1 0CGGAJ  # #E E1 % )) )r/z'X, n_components, n_components_validatedgffffff?rLrJrrrct|d}|j||jtj|k(sJ|j |k(sJy)Nrr4)r r9r1rqrr()rBr1n_components_validatedrCs r-$test_infer_dim_by_explained_variancer)sM *>?r/c ptjjd}|jdd}tjd}t dD]+}t d||}|j|d||ddf<-t|tj|dddfdjddy)NrrM)rrLrrLrU) r?rVrprandrrr r<rtilereshape)r0rrBriirCs r-test_pca_deterministic_outputrNs ))   "C RAHHW%M 2Y6qZcJ!//215 ad6M277=A+>#C#K#KBPQ#RSr/c2t||t|y)N)"check_pca_float_dtype_preservation$check_pca_int_dtype_upcast_to_double)r0r^s r-test_pca_dtype_preservationrRs&z3EF(4r/ctjj|jdd}|j tj d}|j tj }td||j|}td||j|}|jjtj k(sJ|jjtj k(sJ|j|jtj k(sJ|j|jtj k(sJt|j|jddy) NrrFrrrUgMbP?r ) r?rVrprJrfloat64rr r9r#rr:r)r0seedrB X_float64 X_float32pca_64pca_32s r-rPrP#s% d#((q1A%0I$I aJT J N NFaJT J N NF    # #rzz 11 1    # #rzz 11 1   I & , , :: :   I & , , :: : F&&(:(:DQr/ctjjdjddd}|j tj d}|j tj d}td|dj|}td|dj|}|jjtjk(sJ|jjtjk(sJ|j|jtjk(sJ|j|jtjk(sJt|j|jd y) Nrr)rrFrrrUg-C6?rx)r?rVrprandintrint64int32r r9r#rrTr:r)r0X_i64X_i32rXrYs r-rQrQ;s II ! !! $ , ,Qi @E LLL .E LLL .E aJQ G K KE RF aJQ G K KE RF    # #rzz 11 1    # #rzz 11 1   E " ( (BJJ 66 6   E " ( (BJJ 66 6F&&(:(:Fr/ctd\}}tj||}|jj d}t|j||}|j |j dk(sJy)NTr9rr2)rr r9rcumsumr(r;)rByr+r1r,s r-5test_pca_n_components_mostly_explained_variance_ratiordLso  %DAq 599Q?D1188:2>L L ) - -a 3D    ++ +r/ctjgd}d}dD]3}tjtd5t |||ddd5y#1swY@xYw)Nr2KH9rgrgrM)rrz"should be in \[1, n_features - 1\]rn)r?rrqrrrr )spectrumrrs r-test_assess_dimension_bad_rankriXsZxx01HI9 ]]:-R S 9 hi 8 9 99 9 9s AA ctjgd}t|ddtj kDsJdD]#}t||dtj k(r#Jt |ddk(sJy)Nrfr2rMrr)rLr)r?rr infr )rhrs r-test_small_eigenvalues_mlermasuxx01H XA <w FF F@ 44???@ Hb )Q .. .r/ctjdddddd\}}tdj|}|jdk(sJy)Nrr2*)rr n_repeated n_redundantn_clusters_per_classrTr r)rrr r9r(rBr<rCs r-test_mle_redundant_datarunsU  ' '  DAq 5 ! % %a (C    !! !r/ctjddd\}}tdd}tjt d 5|j |dddy#1swYyxYw) Nrrp)rrrTr rr4z?n_components='mle' is only supported if n_samples >= n_featuresrn)rrr rqrrrr9rts r-test_fit_mle_too_few_samplesrx}s]  ' '"RT UDAq 5V 4C O   s AA(cd\}}tjjdj||}tj|ddddfd|dddf<t dd}|j ||j|dz k(sJy) N)rrMrr}rr rrr2)r?rVrprrr r9r()rn_dimrBpca_skls r-test_mle_simple_caser|s Iu a &&y%8AwwqCRCyr*AaeH%F+G KKN  EAI -- -r/c~d\}}tj||f}tjj|d\}}}t |ddtj |dz dtj t|d|sJtd|D]#}t|||tj k(r#Jy) N) rT) full_matricesr2r5r6rkrL) r?rrsvdrrrr rrl)rrrBr<srs r-test_assess_dimesion_rank_oners Iz J'(AiimmATm2GAq!AabE288JN3%@ ;;(iH II Ia$@ D)4???@r/c0tjjd}d}|jd|}t dd|dj |}t ddj |}t dd d j |}t tj|jtj|jt tj|jtj|jy ) zCheck that exposing and setting `n_oversamples` will provide accurate results even when `X` as a large number of features. Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/20589 rrPrr2r)r1r0 n_oversamplesrTrr4rrUN) r?rVrprr r9rrr#)rrrBpca_randomizedrrys r-%test_pca_randomized_svd_n_oversamplesrs ))   "CJ %$A    c!f  f599!556z?U?U8VWr/ctdjtj}|j }t t dDcgc]}d| c}|ycc}w)z Check feature names out for PCA.rLrrCN)r r9r7r8get_feature_names_outrr)rCnamesrMs r-test_feature_names_outrsK 1  ! !$)) ,C  % % 'E584a#aS 4e<4s A!cVtjjd}|jdd}t j |}|j |jz }tj|ddj}tjj||y)z9Check the accuracy of PCA's internal variance calculationrrr4r2rN) r?rVrprr r9r$rrrtestingr)rrrBrCpca_vartrue_vars r-test_variance_correctnessrs| ))   "C $A %))A,C%%(E(EEGvvaaa(,,.HJJw1r/c t||}tjj|}|j ||}|j ||j }|j} |jdk(rdnd} td5t|j |} | j } | jdk(sJ| j|jk(sJtt| ||| t| | j} | jdk(sJ| j|jk(sJtt| || | t| dddy#1swYyxYw) Nrrg-C6*?gH׊>Tarray_api_dispatch)rrxpr )rr7r8rasarrayr9r>r=rrrr;rrr )name estimatorarray_namespacer dtype_nameriris_npiris_xp precision_np covariance_npr! estimator_xp precision_xp covariance_xps r-check_array_api_get_precisionrsV ov 6Biiz*Gjjj0G MM'**,L,,.M==I-44D 4 0 Y'++G4 #113 !!V+++!!W]]222 lr 2  +  %335 ""f,,,""gmm333 m 3  +  !   s CE11E:z#array_namespace, device, dtype_namecheckrr4rrKQR)r1r0power_iteration_normalizerrTcJ|jj}||||||y)Nrr) __class____name__)rrrrrrs r-test_pca_array_api_compliancers%<    ' 'D $ ?6jQr/r c|jj}||||||t||}td\}}|j |d}t |j } t|} |j||} |j||} | j||| j} | j}t| }td5|j| | |j}t|t| k(sJt|| }|j}t|t| k(sJt|| }dddj | j k(sJ|jd | jd k(sJj |j k(sJt!|jd | jd }t#|d||d|| |jd | jd k7r\|d }||d}||d}t%t'j(||z | ksJt%t'j(||z | ksJyy#1swYxYw)NrrprlFrrTrrr2rr6r})rrrrrr rrrr9r#r$r array_devicerr;rrrr?r)rrrrrrrrBrcr"estX_xpy_xp components_npexplained_variance_npest_xp components_xpcomponents_xp_npexplained_variance_xpexplained_variance_xp_npmin_componentsreference_varianceextra_variance_npextra_variance_xp_nps r-!test_pca_mle_array_api_compliancers{2    ' 'D $ ?6jQ ov 6B B /DAq %(A !'' "D  C ::a: 'D ::a: 'DGGAqMOOM33 3ZF 4 0S 4** M*l4.@@@@,]rB & : :12l46HHHH#45Jr#R S  ! !]%8%8 88 8  ! !! $ (;(;A(> >> > # ) )-B-H-H HH H)//2M4G4G4JKN .1o~. a M$7$7$::2261./B7H266+.@@ADHIII266.1CCDtKLLL ;3SSs A7I%%I/SCIPY_ARRAY_API1zSCIPY_ARRAY_API not set to 1.)reasonctjd}|jtj}t ddd}t jd}tjt|5td 5|j|dddddd|jd d t jd }tjt|5td 5|j|dddddd|jd d t jd}tjt|5td 5|j|ddddddy#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYBxYw#1swYyxYw)Narray_api_strictrLrrrUzCPCA with svd_solver='arpack' is not supported for Array API inputs.rnTrrLU)r0rz[Array API does not support LU factorization. Set `power_iteration_normalizer='QR'` instead.rzArray API does not support LU factorization, falling back to QR instead. Set `power_iteration_normalizer='QR'` explicitly to silence this warning.)rq importorskiprr7r8r reescaperrrrr9 set_paramswarns UserWarning)rrrC expected_msgs r-7test_array_api_error_and_warnings_on_unsupported_paramsrcs   / 0Bjj#G 1 BC99ML z 6 t 4  GGG  NNltNL99 6L z 6 t 4  GGG  NNlvNN99 QL k 6 t 4  GGG  #      sl3 FFF% F+2FF+ G$F76GF FFF( $F++F47G <GG )gHz>r5)posrrnumpyr?rqscipyrX numpy.testingrsklearnrr sklearn.basersklearn.datasetsrrr sklearn.decompositionr sklearn.decomposition._pcar r sklearn.utils._array_apir rrrrr-sklearn.utils._test_common.instance_generatorrsklearn.utils._testingrrsklearn.utils.estimator_checksrsklearn.utils.fixesrrr7 PCA_SOLVERSrZr[rSPARSE_MAX_COMPONENTSr.mark parametrizerr8r;rHrerjrur{rrrlistsetrrVrprrrrrrrrrArr rrrrr#r&rJr)r2r7r=r?rBrHrNrRrPrQrdrirmrurxr|rrrrrrrskipifenvirongetrrr/r-rs   ,,QQ%J <RH?xI (Hh/ 6{3q$))//!2D)EFLG4L($564+^n-LM2C'DE,/5Q0FN57 5Qp+^n-LMLNLB f'=>+^n-LMN?$+^n-LMWNW"$/;/1K001KjtC $47G$GHI'78)E4=9E4=1C 2:9 C L a &&sB/$$$S"BQOPQR a &&r3/ :{3I4I,'?@ VA V{3?4?:{3 64 6{3444'GHE4=1 -2I -  XRXXy), -xrxxI8N/O/Q/Q R'  ?!&?, TYY__%& 3tyy'!+, s499??+,$))TYY[[!9:.;. '78"9",'?@ A "'" * *- D! D!   q ! & &q" -sA677{34* {3H4H,'?@FAF '=>?*:  @ @{3T4T{3545 R0G" ,9 / " . @X4=$/202 D)-/'  %'DE   v. vd; = '89 '8F #'+   !"R#  6R)-/'  "#   62  ! 7M   ,7MtJJNN$%,5Tr/