Ë
    ÷Q(hþd  ã                   ó^  — d dl 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mZ d dlmZmZ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 d d
lmZ d„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%ejL                  jO                  de
eef«      d„ «       Z(ejL                  jO                  deee	f«      d„ «       Z)ejL                  jO                  deee	e
f«      d„ «       Z*d„ Z+ejL                  jO                  de	eee
f«      ejL                  jO                  d e+«       «      d„ «       «       Z,ejL                  jO                  de
eee	f«      d„ «       Z-d„ Z.ejL                  jO                  dddg«      d„ «       Z/d „ Z0d!„ Z1d"„ Z2d#„ Z3ejL                  jO                  d$eee	g«      d%„ «       Z4ejL                  jO                  d&d'd(g«      ejL                  jO                  d$eee	g«      d)„ «       «       Z5ejL                  jO                  d*e	e
eeg«      d+„ «       Z6ejL                  jO                  d*e	e
eeg«      d,„ «       Z7d-„ Z8d.„ Z9ejL                  jO                  d*ee	e
eg«      d/„ «       Z:ejL                  jO                  d*ee	e
eg«      d0„ «       Z;ejL                  jO                  d*ee	eg«      d1„ «       Z<y)2é    N)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)ÚCCAÚPLSSVDÚPLSCanonicalÚPLSRegression)Ú_center_scale_xyÚ(_get_first_singular_vectors_power_methodÚ_get_first_singular_vectors_svdÚ_svd_flip_1d)Úload_linnerudÚmake_regression)ÚVotingRegressor)ÚConvergenceWarning)ÚLinearRegression)Úcheck_random_state)Úsvd_flipc                 ó¨   — t        j                  | j                  | «      }t        |t        j                  t        j                  |«      «      «       y )N)ÚnpÚdotÚTr   Údiag)ÚMÚKs     úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cross_decomposition/tests/test_pls.pyÚassert_matrix_orthogonalr      s0   € Ü
�‰ˆq�s‰s�A‹€AÜ˜a¤§¡¬¯©°«Ó!4Õ5ó    c                  óü  — t        «       } | j                  }| j                  }t        |j                  d   ¬«      }|j                  ||«       t        |j                  «       t        |j                  «       t        |j                  «       t        |j                  «       |j                  }|j                  }|j                  }|j                  }t        |j                  «       |j                  «       d¬«      \  }}	}
}}}t        |t!        j"                  ||j$                  «      «       t        |	t!        j"                  ||j$                  «      «       |j'                  |«      }t        ||j                  «       |j'                  ||«      \  }}t        ||j                  «       t        ||j                  «       |j)                  |«      }t        ||«       |j)                  ||«      \  }}t        ||«       y )Né   ©Ún_componentsT©Úscale)r   ÚdataÚtargetr   ÚshapeÚfitr   Ú
x_weights_Ú
y_weights_Ú	_x_scoresÚ	_y_scoresÚx_loadings_Úy_loadings_r
   Úcopyr   r   r   r   Ú	transformÚinverse_transform)ÚdÚXÚYÚplsr   ÚPÚUÚQÚXcÚYcÚx_meanÚy_meanÚx_stdÚy_stdÚXtÚYtÚX_backÚ_ÚY_backs                      r   Útest_pls_canonical_basicsrD      sv  € ä‹€AØ	�‰€AØ	�‰€Aä
 A§G¡G¨A¡JÔ
/€CØ‡G�GˆAˆq„Mä˜SŸ^™^Ô,Ü˜SŸ^™^Ô,Ü˜SŸ]™]Ô+Ü˜SŸ]™]Ô+ð 	�‰€AØ�‰€AØ�‰€AØ�‰€Aä+;Ø	�‰‹�!—&‘&“( $ô,Ñ(€BˆˆF�F˜E 5ô ˜b¤"§&¡&¨¨A¯C©C£.Ô1Ü˜b¤"§&¡&¨¨A¯C©C£.Ô1ð 
�‰�qÓ	€BÜ˜b #§-¡-Ô0Ø�]‰]˜1˜aÓ �F€BˆÜ˜b #§-¡-Ô0Ü˜b #§-¡-Ô0ð ×"Ñ" 2Ó&€FÜ˜f aÔ(Ø×%Ñ% b¨"Ó-�I€A€vÜ˜f aÕ(r   c                  óà  — t        «       } | j                  }| j                  }t        |j                  d   ¬«      }|j                  ||«      \  }}t        ||j                  «       t        j                  g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d¢g«      }t        j                  g d	¢g d
¢g d¢g«      }t        j                  g d	¢g d
¢g d¢g«      }	t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |	«      «       t        t        j                  |j                  «      t        j                  |«      «       t        j                   |j                  |z  «      }
t        j                   |j                  |z  «      }t        j                   |j                  |z  «      }t        j                   |j                  |	z  «      }t        |
|«       t        ||«       y )Nr    r!   )ç,œæ6 ã¿gbxôØù+r¿çºÂõNFé?)ç¦;¦0çç¿gÌ&Ÿ¢—Ô¿çfé–_žâ¿)çÛÓ@¹ŽmÐ¿g¤<-bLî?ç�È£†üÔÈ¿)gìHý¨«ã¿gîÿ©ÙtÏ¿rG   )gE`Õ å¿g¶tÜ[WmÂ¿rI   )gþ¦¨áø�à¿gLŠM3öð?rK   )gêŸÅÔ?g+Eú‰!Ó?gñ4Óœ@Ê?)gËs¯YO)Û?g¢`{ Ôã?gA¬'ˆôºÈ?)gþ«;Ô¾ÒÀ¿gàÒñÝÐ¿gÿý¸áÅ¿)r   r%   r&   r	   r'   Úfit_transformr   Ú	x_scores_r   Úarrayr   Úabsr-   r)   r.   r*   Úsign)r2   r3   r4   r5   ÚX_transrB   Úexpected_x_weightsÚexpected_x_loadingsÚexpected_y_weightsÚexpected_y_loadingsÚx_loadings_sign_flipÚx_weights_sign_flipÚy_weights_sign_flipÚy_loadings_sign_flips                 r   Ú test_sanity_check_pls_regressionrZ   C   sÓ  € ô 	‹€AØ	�‰€AØ	�‰€Aä
 Q§W¡W¨Q¡ZÔ
0€CØ×"Ñ" 1 aÓ(�J€GˆQô
 �G˜SŸ]™]Ô+äŸ™â2Ú3Ú2ð	
óÐô Ÿ(™(â2Ú3Ú2ð	
óÐô Ÿ™â1Ú1Ú3ð	
óÐô Ÿ(™(â1Ú1Ú3ð	
óÐô œbŸf™f S§_¡_Ó5´r·v±vÐ>QÓ7RÔSÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQÜœbŸf™f S§_¡_Ó5´r·v±vÐ>QÓ7RÔSÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQô Ÿ7™7 3§?¡?Ð5HÑ#HÓIÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜŸ7™7 3§?¡?Ð5HÑ#HÓIÐÜÐ2Ð4GÔHÜÐ2Ð4GÕHr   c                  óR  — t        «       } | j                  }| j                  }d|d d …df<   t        |j                  d   ¬«      }|j                  ||«       t        j                  g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d	¢g«      }t        j                  g d
¢g d¢g d¢g«      }t        t        j                  |«      t        j                  |j                  «      «       t        t        j                  |«      t        j                  |j                  «      «       t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |«      «       t        j                  ||j                  z  «      }t        j                  ||j                  z  «      }t        j                  |dd  |j                  dd  z  «      }	t        ||«       t        |dd  |	«       y )Nr    r   r!   )gÍ�Oä¿gÀ(¡ñÍ}?ç:Fëè?)gìíàq›úç¿gqdvúgÄÑ¿ç|�¯Nß<ã¿)g¨1Æ, Ë¿gç¾7®È½î?ç\ªÒ×øÆ¿)gCgãÒBä¿g<&.ÁÌ¿r\   )g¯ÊBå¿gè5_/E¹¿r]   )g—žúQgà¿gç¯ër¥9ð?r^   )ç        r_   r_   )g‰µø ãÛ?gXZ¡£°¦â?gh†C%dÖË?)gV±�”îSÁ¿gù{sÉ‚ÓÏ¿gâ$(ÙE,Ç¿)r   r%   r&   r	   r'   r(   r   rN   r   rO   r)   r-   r.   r*   rP   r   )
r2   r3   r4   r5   rR   rS   rU   rV   rW   rY   s
             r   Ú2test_sanity_check_pls_regression_constant_column_Yr`   ‚   s¢  € ô 	‹€AØ	�‰€AØ	�‰€AØ€A‚aˆ€d�GÜ
 Q§W¡W¨Q¡ZÔ
0€CØ‡G�GˆAˆq„MäŸ™â0Ú2Ú1ð	
óÐô Ÿ(™(â0Ú1Ú0ð	
óÐô Ÿ(™(â-Ú-Ú0ð	
óÐô œbŸf™fÐ%7Ó8¼"¿&¹&ÀÇÁÓ:PÔQÜœbŸf™fÐ%8Ó9¼2¿6¹6À#Ç/Á/Ó;RÔSäœbŸf™f S§_¡_Ó5´r·v±vÐ>QÓ7RÔSÜœbŸf™f S§^¡^Ó4´b·f±fÐ=PÓ6QÔRäŸ7™7Ð#6¸¿¹Ñ#HÓIÐÜŸ'™'Ð"4°s·~±~Ñ"EÓFÐäŸ7™7Ð#6°q°rÐ#:¸S¿_¹_ÈQÈRÐ=PÑ#PÓQÐäÐ+Ð-@ÔAÜÐ+¨A¨BÐ/Ð1EÕFr   c                  óV  — t        «       } | j                  }| j                  }t        |j                  d   ¬«      }|j                  ||«       t        j                  g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d¢g«      }t        j                  g d	¢g d
¢g d¢g«      }t        j                  g d¢g d¢g d¢g«      }t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |«      «       t        t        j                  |j                  «      t        j                  |«      «       t        j                  |j                  |z  «      }t        j                  |j                  |z  «      }	t        j                  |j                  |z  «      }
t        j                  |j                  |z  «      }t        ||	«       t        |
|«       t        |j                  «       t        |j                  «       t        |j                   «       t        |j"                  «       y )Nr    r!   )rF   gû{cçñdÐ?g£rÙ	«èç¿)rH   g§š“öŠ¾?g¿>côîä?)rJ   gP,"P²î¿gÍº‘@¾¿)rF   gù«•CjžÚ?g#õžÊiïã¿)rH   g2�Ð©Ô?g‚úrÂè?)rJ   g·o ê_Žì¿gè¼ç<:àÎ¿)ç©¨càâ?gD}ÜÈ†?é?gÞ5âüÅ?)çâ¼ÍUÒ®è?g‹ºÞOð¡ã¿gÓ©eJo¨Å?)ç.a#ÿ‚“Î¿gbMá4º ¿gýÎþYVï?)rb   gÍ±¼«ðæ?gå¹[åK Ó?)rc   gÆ=m¿B§æ¿go·‡1§SÉ?)rd   gPŸ.œµ%l¿gq¶–Ñ!î?)r   r%   r&   r   r'   r(   r   rN   r   rO   Úx_rotations_r)   Úy_rotations_r*   rP   r   r+   r,   )r2   r3   r4   r5   rR   Úexpected_x_rotationsrT   Úexpected_y_rotationsÚx_rotations_sign_fliprW   Úy_rotations_sign_fliprX   s               r   Útest_sanity_check_pls_canonicalrk   ´   sð  € ô 	‹€AØ	�‰€AØ	�‰€Aä
 A§G¡G¨A¡JÔ
/€CØ‡G�GˆAˆq„MäŸ™â2Ú1Ú3ð	
óÐô Ÿ8™8â2Ú1Ú3ð	
óÐô Ÿ™â/Ú2Ú2ð	
óÐô Ÿ8™8â0Ú2Ú2ð	
óÐô œbŸf™f S×%5Ñ%5Ó6¼¿¹Ð?SÓ8TÔUÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQÜœbŸf™f S×%5Ñ%5Ó6¼¿¹Ð?SÓ8TÔUÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQäŸG™G C×$4Ñ$4Ð7KÑ$KÓLÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜŸG™G C×$4Ñ$4Ð7KÑ$KÓLÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜÐ3Ð5HÔIÜÐ3Ð5HÔIä˜SŸ^™^Ô,Ü˜SŸ^™^Ô,ä˜SŸ]™]Ô+Ü˜SŸ]™]Õ+r   c                  ó  — d} d}d}t        d«      }|j                  | ¬«      }|j                  | ¬«      }t        j                  ||||g«      j                  }||j                  d| z  ¬«      j                  | df«      z   }||j                  d| z  ¬«      j                  | df«      z   }t        j                  ||j                  || z  ¬«      j                  | |«      fd¬«      }t        j                  ||j                  || z  ¬«      j                  | |«      fd¬«      }t        d	¬
«      }	|	j                  ||«       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 d¢g d¢g«      }
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 d%¢g d&¢g«      }t        j                  g d'¢g d(¢g d)¢g d*¢g d+¢g d,¢g d-¢g d.¢g d/¢g	«      }t        j                  g d0¢g d1¢g d2¢g d3¢g d4¢g d5¢g d6¢g d7¢g d8¢g	«      }t        t        j                  |	j                  «      t        j                  |«      «       t        t        j                  |	j                  «      t        j                  |
«      «       t        t        j                  |	j                  «      t        j                  |«      «       t        t        j                  |	j                  «      t        j                  |«      «       t        j                  |	j                  |z  «      }t        j                  |	j                  |
z  «      }t        j                  |	j                  |z  «      }t        j                  |	j                  |z  «      }t        ||«       t        ||«       t!        |	j                  «       t!        |	j                  «       t!        |	j"                  «       t!        |	j$                  «       y )9Néô  é
   é   é   ©Úsizeé   r    ©Úaxisé   r!   )gqAS¤å?g¸Ì§–Æ’È?g°š¾	KÝË?)gô²ÜˆÝmæ?gr[ÏÎqÁ?gÖŽ  £®Ã¿)gÕ¸qjëPÁ?gÛø—Í±öå¿g«‡Sƒ¼Á?)g$—$è’Å?gŽ('¹G_å¿gš.›k^ö¿¿)g²á~ú®Œ ¿gƒèÿºs¥¿g¶·¬
Ú?)gæ‚éjáh½?gÃÏfr½¯¸¿g>u¬Rz¦Ä?)gþ$Â¯&‰¨?g	¦	l˜¿gpO/üÅ?)g•}Wÿ[±¿g~¶�­‘¿g®ülÃ¬ÀÇ¿)gWˆX>Þe¿gj8ŸH@Z¿gË”½Br¾?)g´).ùe�¿gw4Dº³¿gˆoP^Ä?)gvãzgöqƒ¿g1õGZž¿gë }r5.Ö?)gÒzÏ³J¢¿g¥¬•¿1¸?g®¹£ÿåÚÕ?)gŸíMãI˜¬?g,)˜­ÌÆ”¿gŠùâ [uâ¿)gÚùeÍi­?gòâŠ¬±[Ž¿gQ¿É>áOÆ¿)gmÆ«¤üå?g¬Eú£^¦Ç?g0Öõç‹Ã?)gB +ø
žå?g,¦©Ð�Ã?gé°i­�·¿)gÆiˆ*ü™È?gŒ_í(®å¿gbå#k4¶?)g¯*Vh{OË?g×�oÖ}så¿gø+Klž¶¿)gˆ‰Ý©F ¿gJ,c")±¿g°#'váÅÛ?)g,aŽš†Ä?g9�qb›Á¿gÐSLRWÊ?)g]î@[Ö¡?gÑçO~£¿gõÄkE¹?)gògpB¾¯¿gã¡R™ ò�?g¹§«;È¿)g-ôûÝ¿¢p?g§;O<gx¿g†¥GtKÅ?)g$†U\¨n¿gE	Œ³ñ­¿g§²ÅÁçÈ?)g@~_ñÏV?g¥,…8½(…¿g.¡í^¢Ô?)g)^D_j«¿g2Ðéi¸?gs›6CmÔ?)g³.f2¹¤¤?gð­£Ã”¿gRÝu™Ûä¿)gð9Mòeš¯?g½ðX¦ã°¿g <ïÛ¿¿)gÄONz 'å?gsÑVFŸæÇ?gul-a§7Í?)gžÍú0æ?g]”4¢Ç?go¢Ð‘à¶Î¿)g:“ô8%ƒÂ?g!¨¿Hå¿g—”Ôl’ÝÅ?)g�¯£»5zÌ?g·yã¤0/æ¿gof‘y&,¹¿)g˜ì
C²?gÍ¢ÔÌA}?g_ª%_³å?)g±žÞµá³?gHÖ†/¸‹…¿g»‚L¶ª:Ü¿)gc½IºÈ‚¿g¢$Eà!¦?gâfD«‹Â¹?)gº§Ï«�“¿g35èÏ§¯?g`"Ä•sÒ?)gþ¿$tý‘?g¶W“e�¨?gY)¶ÝŸÔ?)gâ#bJ$ñå?gtd˜nÅ?gx/RƒÄÑ¸?)g�
Jn æ?g�×·ÁÊ?gÿÊ�SÏ½¿)g½= �°û½?g–N¹üfÆå¿g7ÇjN¹¾?)g]wˆ¹ƒÜÆ?g¡á(Ô.Áå¿g^i×Œ%ª¿)g}ç�P
°?g¹O3IÑoœ¿gD”'÷Øéç?)gh³E-(g·?g§0„Ö¢‰p?g†µçè§nà¿)g×Ðz¶–¿gþIñT4Œ¿g‡7Æ©1|¸?)gOñ�)åÖ ¿gkp2ÜF$·?gAÌ-ÆcÔ?)gÿ &áßó¥?gÜèk¯hçª?g!L¼ÉÐÑ?)r   Únormalr   rN   r   ÚreshapeÚconcatenater   r(   r   rO   r-   r)   r.   r*   rP   r   r+   r,   )ÚnÚp_noiseÚq_noiseÚrngÚl1Úl2Úlatentsr3   r4   r5   rR   rS   rT   rU   rV   rW   rX   rY   s                     r   Ú&test_sanity_check_pls_canonical_randomr�   ò   s7  € ð 	€AØ€GØ€Gä
˜RÓ
 €CØ	�‰˜ˆÓ	€BØ	�‰˜ˆÓ	€BÜ�h‰h˜˜B  BÐ'Ó(×*Ñ*€GØ�#—*‘* ! a¡%�*Ó(×0Ñ0°!°Q°Ó8Ñ8€AØ�#—*‘* ! a¡%�*Ó(×0Ñ0°!°Q°Ó8Ñ8€AÜ
�‰˜˜3Ÿ:™:¨7°Q©;˜:Ó7×?Ñ?ÀÀ7ÓKÐLÐSTÔU€AÜ
�‰˜˜3Ÿ:™:¨7°Q©;˜:Ó7×?Ñ?ÀÀ7ÓKÐLÐSTÔU€Aä
 AÔ
&€CØ‡G�GˆAˆq„MäŸ™â0Ú0Ú1Ú2Ú2Ú/Ú1Ú0Ú2Ú1Ú2Ú/Ú2Ú2ð	
óÐô& Ÿ(™(â/Ú1Ú1Ú1Ú2Ú1Ú1Ú1Ú1Ú2Ú1Ú0Ú2Ú1ð	
óÐô& Ÿ™â0Ú1Ú1Ú1Ú0Ú1Ú1Ú1Ú0ð
	
óÐô Ÿ(™(â.Ú0Ú1Ú1Ú0Ú/Ú2Ú1Ú0ð
	
óÐô œbŸf™f S§_¡_Ó5´r·v±vÐ>QÓ7RÔSÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQÜœbŸf™f S§_¡_Ó5´r·v±vÐ>QÓ7RÔSÜœbŸf™f S§^¡^Ó4´b·f±fÐ=OÓ6PÔQäŸ7™7 3§?¡?Ð5HÑ#HÓIÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜŸ'™' #§.¡.Ð3EÑ"EÓFÐÜŸ7™7 3§?¡?Ð5HÑ#HÓIÐÜÐ2Ð4GÔHÜÐ2Ð4GÔHä˜SŸ^™^Ô,Ü˜SŸ^™^Ô,ä˜SŸ]™]Ô+Ü˜SŸ]™]Õ+r   c                  óü   — t        «       } | j                  }| j                  }t        |j                  d   d¬«      }t        j                  t        «      5  |j                  ||«       d d d «       y # 1 sw Y   y xY w)Nr    é   ©r"   Úmax_iter)	r   r%   r&   r   r'   ÚpytestÚwarnsr   r(   )r2   r3   r4   Ú
pls_nipalss       r   Útest_convergence_failr‰   Z  s_   € ä‹€AØ	�‰€AØ	�‰€AÜ¨1¯7©7°1©:ÀÔB€JÜ	�‰Ô(Ó	)ñ Ø�‰�q˜!Ô÷÷ ñ ús   ÁA2Á2A;ÚEstc                 óÜ   ‡— t        «       }|j                  }|j                  }dŠ | ‰¬«      }|j                  ||«       t	        ˆfd„|j
                  |j                  fD «       «      sJ ‚y )Nrƒ   r!   c              3   óB   •K  — | ]  }|j                   d    ‰k(  –— Œ y­w)r    N)r'   )Ú.0Úattrr"   s     €r   ú	<genexpr>z(test_attibutes_shapes.<locals>.<genexpr>m  s#   øè ø€ ò Ø*.ˆ�
‰
�1‰˜Õ%ñùs   ƒ)r   r%   r&   r(   Úallr)   r*   )rŠ   r2   r3   r4   r5   r"   s        @r   Útest_attibutes_shapesr‘   d  sf   ø€ ô 	‹€AØ	�‰€AØ	�‰€AØ€LÙ
˜<Ô
(€CØ‡G�GˆAˆq„MÜó Ø36·>±>À3Ç>Á>Ð2Rôô ð ñ r   c                 ó8  — t        «       }|j                  }|j                  } | d¬«      }|j                  ||d d …df   «      j                  }|j                  ||d d …d d…f   «      j                  }|j
                  |j
                  k(  sJ ‚t        ||«       y )Nr    r!   r   )r   r%   r&   r(   Úcoef_r'   r   )rŠ   r2   r3   r4   ÚestÚone_d_coeffÚtwo_d_coeffs          r   Útest_univariate_equivalencer—   r  s‹   € ô 	‹€AØ	�‰€AØ	�‰€Aá
˜1Ô
€CØ—'‘'˜!˜Qšq !˜t™WÓ%×+Ñ+€KØ—'‘'˜!˜Qšq " 1 "˜u™XÓ&×,Ñ,€Kà×Ñ × 1Ñ 1Ò1Ð1Ð1Ü˜k¨;Õ7r   c                 óö  — t        «       }|j                  }|j                  }|j                  «       } | d¬«      j	                  ||«      }t        ||«       t        j                  t        «      5   | d¬«      j	                  ||«       t        ||«       d d d «       | t        u ry |j                  «       }t        j                  t        «      5  |j                  ||d¬«      f t        ||«       d d d «       |j                  «       }t        j                  t        «      5  |j                  |d¬«      f t        ||«       d d d «       t        |j                  ||d¬«      |j                  |j                  «       |j                  «       d¬«      «       t        |j                  |d¬«      |j                  |j                  «       d¬«      «       y # 1 sw Y   �ŒAxY w# 1 sw Y   ŒñxY w# 1 sw Y   Œ«xY w)NT©r/   F)r   r%   r&   r/   r(   r   r†   ÚraisesÚAssertionErrorr   r   r0   Úpredict)rŠ   r2   r3   r4   ÚX_origr5   s         r   Ú	test_copyrž   �  s•  € ô 	‹€AØ	�‰€AØ	�‰€AØ�V‰V‹X€Fñ �4Œ.×
Ñ
˜Q Ó
"€CÜ�q˜&Ô!ô 
�‰”~Ó	&ñ -Ù�Œ×Ñ˜A˜qÔ!Ü! ! VÔ,÷-ð Œf�}Øà�V‰V‹X€FÜ	�‰”~Ó	&ñ -Ø�‰�a˜ ˆÓ'Ñ(Ü! ! VÔ,÷-ð �V‰V‹X€FÜ	�‰”~Ó	&ñ -Ø�‰�A˜EˆÓ"Ñ#Ü! ! VÔ,÷-ô
 Ø�‰�a˜ ˆÓ&¨¯©°a·f±f³hÀÇÁÃÈu¨Ó(Uôô Ø�‰�A˜DˆÓ! 3§;¡;¨q¯v©v«x¸e ;Ó#Dõ÷+-ñ -ú÷-ð -ú÷
-ð -ús$   Á1&GÃ"G#Ä$!G/ÇG Ç#G,Ç/G8c               #   ó†  K  — t         j                  j                  d«      } d}d}d}| j                  ||«      }| j                  ||«      }t        j                  ||«      d| j                  ||«      z  z   dz   }|dz  }||f–— t        d¬«      \  }}d	|d
d
…df<   ||f–— 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«      }||f–— ddg}|D ]K  }t         j                  j                  |«      } | j                  dd«      }| j                  dd«      }||f–— ŒM y
­w)z-Generate dataset for test_scale_and_stabilityr   iè  ro   rn   rƒ   r    T©Ú
return_X_yç      ð?Néÿÿÿÿ)r_   r_   r¢   )r¢   r_   r_   )ç       @r¤   r¤   )g      @g      @g      @gš™™™™™¹?gš™™™™™É¿gÍÌÌÌÌÌì?gš™™™™™ñ?gÍÌÌÌÌÌ@gš™™™™™@gÍÌÌÌÌÌ'@gš™™™™™(@i  iå  rs   rv   )r   ÚrandomÚRandomStateÚrandnr   r   rN   )	r}   Ú	n_samplesÚ	n_targetsÚ
n_featuresr8   r4   r3   ÚseedsÚseeds	            r   Ú+_generate_test_scale_and_stability_datasetsr­   ¨  sH  è ø€ ô �)‰)×
Ñ
 Ó
"€CØ€IØ€IØ€JØ�	‰	�)˜ZÓ(€AØ�	‰	�)˜YÓ'€AÜ
�‰ˆq�!‹�q˜3Ÿ9™9 Y°
Ó;Ñ;Ñ;¸aÑ?€AØˆ�I€AØ
ˆQˆ$‚Jô  DÔ)�D€A€qà€A‚aˆ€e�HØ
ˆQˆ$‚Jä
�‰’/¢?²OÂ_ÐUÓV€AÜ
�‰�3˜�+  S˜z¨C°¨:¸¸d°|ÐDÓE€AØ
ˆQˆ$‚Jð �#ˆJ€EØò ˆÜ�i‰i×#Ñ# DÓ)ˆØ�I‰I�a˜‹OˆØ�I‰I�a˜‹OˆØ�ˆd‹
ñ	ùs   ‚D?EzX, Yc                 óÊ   — t        ||«      ^}}} | d¬«      j                  ||«      \  }} | d¬«      j                  ||«      \  }}	t        ||d¬«       t        |	|d¬«       y)zƒscale=True is equivalent to scale=False on centered/scaled data
    This allows to check numerical stability over platforms as wellTr#   Fg-Cëâ6?©ÚatolN)r
   rL   r   )
rŠ   r3   r4   ÚX_sÚY_srB   ÚX_scoreÚY_scoreÚ	X_s_scoreÚ	Y_s_scores
             r   Útest_scale_and_stabilityr·   È  se   € ô $ A qÓ)€L€Cˆˆqá ”×4Ñ4°Q¸Ó:Ñ€GˆWÙ UÔ+×9Ñ9¸#¸sÓCÑ€Iˆyä�I˜w¨TÕ2Ü�I˜w¨TÖ2r   Ú	Estimatorc                 ó$  — t         j                  j                  d«      }|j                  dd«      }|j                  dd«      } | d¬«      }d}t	        j
                  t        |¬«      5  |j                  ||«       ddd«       y# 1 sw Y   yxY w)	zICheck the validation of `n_components` upper bounds for `PLS` regressors.r   rn   ro   rv   r!   zH`n_components` upper bound is .*. Got 10 instead. Reduce `n_components`.©ÚmatchN)r   r¥   r¦   r§   r†   rš   Ú
ValueErrorr(   )r¸   r}   r3   r4   r”   Úerr_msgs         r   Útest_n_components_upper_boundsr¾   ×  sw   € ô �)‰)×
Ñ
 Ó
"€CØ�	‰	�"�aÓ€AØ�	‰	�"�aÓ€AÙ
 Ô
$€CØX€GÜ	�‰”z¨Ô	1ñ Ø�‰��1Œ÷÷ ñ ús   Á*BÂBc                  ó*  — t         j                  j                  d«      } | j                  dd«      }| j                  dd«      }t	        d¬«      }d}t        j                  t        |¬«      5  |j                  ||«       d	d	d	«       y	# 1 sw Y   y	xY w)
zFCheck the validation of `n_components` upper bounds for PLSRegression.r   é   é@   rv   é   r!   zH`n_components` upper bound is 20. Got 30 instead. Reduce `n_components`.rº   N)	r   r¥   r¦   r§   r	   r†   rš   r¼   r(   )r}   r3   r4   r”   r½   s        r   Ú%test_n_components_upper_PLSRegressionrÃ   ã  su   € ä
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�bÓ€AØ�	‰	�"�aÓ€AÜ
 RÔ
(€CØX€GÜ	�‰”z¨Ô	1ñ Ø�‰��1Œ÷÷ ñ ús   Á-B	Â	Bzn_samples, n_features)éd   rn   )rÄ   éÈ   c                 ó  — t        | |d|¬«      \  }}t        ||d¬«      \  }}}t        ||«      \  }}	t        ||«       t        ||	«       d}
t	        |||j                  «       |
z  ¬«       t	        ||	|	j                  «       |
z  ¬«       y )Nro   ©r©   Úrandom_stateT)Únorm_y_weightsçü©ñÒMbP?r¯   )r   r   r   r   r   Úmax)r¨   rª   Úglobal_random_seedr3   r4   Úu1Úv1rB   Úu2Úv2Úrtols              r   Útest_singular_value_helpersrÒ   î  s‡   € ô Ø�:¨Ð9Kô�D€A€qô 9¸¸AÈdÔS�I€BˆˆAÜ,¨Q°Ó2�F€Bˆä��RÔÜ��RÔà€Dä�B˜ §¡£¨D¡Õ1Ü�B˜ §¡£¨D¡Ö1r   c                 óª  — t        ddd| ¬«      \  }}t        d¬«      j                  ||«      j                  |«      }t	        d¬«      j                  ||«      j                  |«      }t        d¬«      j                  ||«      j                  |«      }d}t        |||j                  «       |z  ¬«       t        |||j                  «       |z  ¬«       y )	NrÄ   rn   ro   rÇ   r    r!   rÊ   r¯   )r   r   r(   r0   r	   r   r   rË   )rÌ   r3   r4   ÚsvdÚregÚ	canonicalrÑ   s          r   Útest_one_component_equivalencer×      s²   € ô ˜3 ¨aÐ>PÔQ�D€A€qÜ
˜aÔ
 ×
$Ñ
$ Q¨Ó
*×
4Ñ
4°QÓ
7€CÜ
 QÔ
'×
+Ñ
+¨A¨qÓ
1×
;Ñ
;¸AÓ
>€CÜ¨!Ô,×0Ñ0°°AÓ6×@Ñ@ÀÓC€Ià€Dä�C˜ 3§7¡7£9¨tÑ#3Õ4Ü�C˜¨¯©«¸4Ñ)?Ö@r   c                  óv  — t        j                  g d¢«      } t        j                  g d¢«      }t        | j                  dd«      |j                  dd«      «      \  }}t	        | |«       t        | |j                  «       «       t        | g d¢«       t        ||j                  «       «       t        |g d¢«       y )N)r    éüÿÿÿrƒ   )r    rƒ   rv   r£   r    )r£   rs   éþÿÿÿ)r£   rÚ   éýÿÿÿ)r   rN   r   rx   r   r   Úravel)ÚuÚvÚ
u_expectedÚ
v_expecteds       r   Útest_svd_flip_1drá     s‰   € ä
�‰’Ó€AÜ
�‰’Ó€Aä% a§i¡i°°AÓ&6¸¿	¹	À!ÀRÓ8HÓIÑ€J�
Ü��AÔä�A�z×'Ñ'Ó)Ô*Ü�A’{Ô#ä�A�z×'Ñ'Ó)Ô*Ü�A’|Õ$r   c                 óZ  — t        ddd| ¬«      \  }}t        dd¬«      }t        j                  «       5  t        j                  dt
        «       |j                  ||«       ddd«       t        j                  t        j                  |j                  «      d	k  «      sJ ‚y# 1 sw Y   ŒAxY w)
z8Test that CCA converges. Non-regression test for #19549.rÅ   rÀ   )r¨   rª   r©   rÈ   rn   rm   r„   ÚerrorNr    )r   r   ÚwarningsÚcatch_warningsÚsimplefilterr   r(   r   r�   rO   r-   )rÌ   r3   ÚyÚccas       r   Útest_loadings_convergesré     s�   € äØ "°ÐASô�D€A€qô ˜2¨Ô
,€Cä	×	 Ñ	 Ó	"ñ Ü×Ñ˜gÔ'9Ô:à�‰��1Œ÷ô �6‰6”"—&‘&˜Ÿ™Ó)¨AÑ-Ô.Ð.Ñ.÷ð ús   ´-B!Â!B*c                  óX  — t         j                  j                  d«      } | j                  dd«      }t        j                  d«      }t        «       }d}t        j                  t        |¬«      5  |j                  ||«       ddd«       t        |j                  d«       y# 1 sw Y   Œ xY w)zAChecks warning when y is constant. Non-regression test for #19831é*   rÄ   rv   z#y residual is constant at iterationrº   Nr   )r   r¥   r¦   ÚrandÚzerosr	   r†   r‡   ÚUserWarningr(   r   re   )r}   Úxrç   r5   Úmsgs        r   Útest_pls_constant_yrñ   .  s�   € ä
�)‰)×
Ñ
 Ó
#€CØ�‰��aÓ€AÜ
�‰�‹€Aä
‹/€Cà
/€CÜ	�‰”k¨Ô	-ñ Ø�‰��1Œ÷ô �C×$Ñ$ aÕ(÷ð ús   Á.B Â B)ÚPLSEstimatorc                 óð   — t        «       }|j                  }|j                  } | d¬«      j                  ||«      }|j                  d   |j                  d   }}|j
                  j                  ||fk(  sJ ‚y)z†Check the shape of `coef_` attribute.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/12410
    Tr™   r    N)r   r%   r&   r(   r'   r“   )rò   r2   r3   r4   r5   r©   rª   s          r   Útest_pls_coef_shaperô   =  sh   € ô 	‹€AØ	�‰€AØ	�‰€Aá
˜DÔ
!×
%Ñ
% a¨Ó
+€CàŸG™G A™J¨¯©°©
ˆz€IØ�9‰9�?‰?˜y¨*Ð5Ò5Ð5Ñ5r   r$   TFc                 ó|  — t        «       }|j                  }|j                  } | d|¬«      j                  ||«      }|j	                  |d¬«      }|j                  d¬«      }||j                  d¬«      z
  }t        |j                  |«       t        |||j                  j                  z  |j                  z   «       y)z/Check the behaviour of the prediction function.T)r/   r$   r™   r   rt   N)
r   r%   r&   r(   rœ   Úmeanr   Ú
intercept_r“   r   )	rò   r$   r2   r3   r4   r5   ÚY_predr<   rQ   s	            r   Útest_pls_predictionrù   N  s™   € ô 	‹€AØ	�‰€AØ	�‰€Aá
˜D¨Ô
.×
2Ñ
2°1°aÓ
8€CØ�[‰[˜ ˆ[Ó&€Fà�V‰V˜ˆV‹^€FØ�!—&‘&˜a�&“.Ñ €Gä�C—N‘N FÔ+Ü�F˜G c§i¡i§k¡kÑ1°C·N±NÑBÕCr   ÚKlassc                 ó`  — t        d¬«      \  }} | «       j                  ||«      }|j                  «       }| j                  j	                  «       }t        j                  t        |j                  j                  d   «      D �cg c]  }|› |› �‘Œ
 c}t        ¬«      }t        ||«       yc c}w )z9Check `get_feature_names_out` cross_decomposition module.Tr    r    )ÚdtypeN)r   r(   Úget_feature_names_outÚ__name__Úlowerr   rN   Úranger)   r'   Úobjectr   )rú   r3   r4   r”   Ú	names_outÚclass_name_lowerÚiÚexpected_names_outs           r   Útest_pls_feature_names_outr  `  s—   € ô  DÔ)�D€A€qá
‹'�+‰+�a˜Ó
€CØ×)Ñ)Ó+€Ià—~‘~×+Ñ+Ó-ÐÜŸ™Ü+0°·±×1EÑ1EÀaÑ1HÓ+IÖJ aÐÐ˜a˜SÒ	!ÒJÜôÐô �yÐ"4Õ5ùò 	Ks   ÂB+c                 óv  — t        j                  d«      }t        dd¬«      \  }} | «       j                  d¬«      j	                  ||«      }|j                  ||«      \  }}t        |t        j                  «      sJ ‚t        ||j                  «      sJ ‚t        |j                  |j                  «       «       y)z1Check `set_output` in cross_decomposition module.ÚpandasT)r¡   Úas_frame)r0   N)r†   Úimportorskipr   Ú
set_outputr(   r0   Ú
isinstancer   ÚndarrayÚ	DataFramer   Úcolumnsrý   )rú   Úpdr3   r4   r”   rQ   Úy_transs          r   Útest_pls_set_outputr  p  sš   € ô 
×	Ñ	˜XÓ	&€BÜ D°4Ô8�D€A€qá
‹'×
Ñ
 xÐ
Ó
0×
4Ñ
4°Q¸Ó
:€CØ—}‘} Q¨Ó*Ñ€GˆWÜ�gœrŸz™zÔ*Ð*Ð*Ü�g˜rŸ|™|Ô,Ð,Ð,Ü�w—‘¨×(AÑ(AÓ(CÕDr   c            	      ó  — t        j                  ddgddgddgddgddgd	d
gg«      } t        j                  g d¢«      }|j                  «       }t        «       j	                  | |«      }|j                  | «      }|j                  |j                  k(  sJ ‚t        «       j	                  | |«      }t        d|fd|fg«      }|j	                  | |«      j                  | «      }|j                  |j                  k(  sJ ‚t        ||«       y)zrCheck that when fitting with 1d `y`, prediction should also be 1d.

    Non-regression test for Issue #26549.
    r    rƒ   rs   rv   é	   é   ro   é   é   é$   )rƒ   r  é   rÀ   rÂ   rë   ÚlrÚplsrN)
r   rN   r/   r	   r(   rœ   r'   r   r   r   )r3   rç   Úexpectedr  Úy_predr  Úvrs          r   Útest_pls_regression_fit_1d_yr  }  sð   € ô
 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨b¨'°A°r°7¸QÀ¸GÐDÓE€AÜ
�‰Ò'Ó(€AØ�v‰v‹x€Hä‹?×Ñ˜q !Ó$€DØ�\‰\˜!‹_€FØ�<‰<˜8Ÿ>™>Ò)Ð)Ð)ô 
Ó	×	Ñ	  1Ó	%€BÜ	˜4 ˜* v¨t nÐ5Ó	6€BØ�V‰V�A�q‹\×!Ñ! !Ó$€FØ�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü�F˜HÕ%r   c                  óF  — t         j                  j                  d«      } | j                  d¬«      }| j	                  dd¬«      }||j
                  z  }t        dd¬	«      j                  ||«      }t        |j                  |«       t        |j                  |«      |«       y
)zÈCheck that when using `scale=True`, the coefficients are using the std. dev. from
    both `X` and `Y`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27964
    r   )rv   ro   rq   rn   )rÂ   ro   )r$   rr   ro   T)r"   r$   N)r   r¥   r¦   Úuniformrw   r   r	   r(   r   r“   rœ   )r}   Úcoefr3   r4   r5   s        r   Ú test_pls_regression_scaling_coefr#  ’  s„   € ô �)‰)×
Ñ
 Ó
"€CØ�;‰;˜Fˆ;Ó#€DØ�
‰
˜ 'ˆ
Ó*€AØ	ˆD�F‰F‰
€Aô  Q¨dÔ
3×
7Ñ
7¸¸1Ó
=€CÜ�C—I‘I˜tÔ$ô �C—K‘K “N AÕ&r   c                 óx  — t        «       }|j                  }|j                  }|j                  }d}t        j                  t
        |¬«      5   | «       j                  ||¬«       d d d «       d}t        j                  t
        |¬«      5  t        j                  t        |¬«      5   | «       j                  |||«       d d d «       d d d «       d}t        j                  t        |¬«      5   | «       j                  |«       d d d «       y # 1 sw Y   Œ¨xY w# 1 sw Y   ŒZxY w# 1 sw Y   Œ^xY w# 1 sw Y   y xY w)NúE`Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.rº   ©r3   r4   ú?Cannot use both `y` and `Y`. Use only `y` as `Y` is deprecated.zy is required.)	r   r%   r&   r†   r‡   ÚFutureWarningr(   rš   r¼   )rú   r2   r3   r4   rç   rð   Úerr_msg1Úerr_msg2s           r   Ú-test_pls_fit_warning_on_deprecated_Y_argumentr+  ©  sþ   € ô 	‹€AØ	�‰€AØ	�‰€AØ	�‰€Aà
Q€CÜ	�‰”m¨3Ô	/ñ Ù‹�‰�a˜1ˆÔ÷ð Q€Hä�‰”]¨#Ô.ñä�‰”j¨Ô1ññ 	‹�‰�A�q˜!Ô÷	÷ ð  €HÜ	�‰”z¨Ô	2ñ Ù‹�‰�AŒ÷ð ÷ð ú÷ð ú÷ ð ú÷ð ús<   ÁDÂ
D$Â&DÂ?D$Ã,D0ÄDÄD!	ÄD$Ä$D-Ä0D9c                 ó  — t        «       }|j                  }|j                  }|j                  } | «       j                  ||«      }d}t	        j
                  t        |¬«      5  |j                  ||¬«       d d d «       d}t	        j
                  t        |¬«      5  t	        j                  t        |¬«      5  |j                  |||«       d d d «       d d d «       y # 1 sw Y   Œgx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(   r†   r‡   r(  r0   rš   r¼   )rú   r2   r3   r4   rç   r  rð   r)  s           r   Ú3test_pls_transform_warning_on_deprecated_Y_argumentr-  Ã  sÕ   € ô 	‹€AØ	�‰€AØ	�‰€AØ	�‰€Aá‹7�;‰;�q˜!Ó€DØ
Q€CÜ	�‰”m¨3Ô	/ñ !Ø�‰˜˜aˆÔ ÷!ð Q€Hä�‰”]¨#Ô.ñ ä�‰”j¨Ô1ñ ð 	�‰�q˜!˜QÔ÷	 ÷  ð  ÷	!ð !ú÷ ð  ú÷  ð  ús0   Á#CÂC5Â8C)ÃC5ÃC&Ã)C2	Ã.C5Ã5C>c                 ó  — t        «       }|j                  }|j                  } | «       j                  ||«      }|j	                  ||«      \  }}d}t        j                  t        |¬«      5  |j                  ||¬«       d d d «       d}t        j                  t        |¬«      5  t        j                  t        |¬«      5  |j                  |||¬«       d d d «       d d d «       y # 1 sw Y   ŒhxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr%  rº   r&  r'  )r3   rç   r4   )r   r%   r&   r(   r0   r†   r‡   r(  r1   rš   r¼   )	rú   r2   r3   rç   r  ÚX_transformedÚy_transformedrð   r)  s	            r   Ú;test_pls_inverse_transform_warning_on_deprecated_Y_argumentr1  Ú  sö   € ô 	‹€AØ	�‰€AØ	�‰€Aá‹7�;‰;�q˜!Ó€DØ#'§>¡>°!°QÓ#7Ñ €M�=à
Q€CÜ	�‰”m¨3Ô	/ñ AØ×Ñ °-ÐÔ@÷Að Q€Hä�‰”]¨#Ô.ñRä�‰”j¨Ô1ñRð 	×Ñ °-À=ÐÔQ÷	R÷ Rð R÷	Að Aú÷Rð Rú÷ Rð Rús0   Á,C'Â%C?ÃC3ÃC?Ã'C0Ã3C<	Ã8C?Ã?D)=rä   Únumpyr   r†   Únumpy.testingr   r   r   Úsklearn.cross_decompositionr   r   r   r	   Ú sklearn.cross_decomposition._plsr
   r   r   r   Úsklearn.datasetsr   r   Úsklearn.ensembler   Úsklearn.exceptionsr   Úsklearn.linear_modelr   Úsklearn.utilsr   Úsklearn.utils.extmathr   r   rD   rZ   r`   rk   r�   r‰   ÚmarkÚparametrizer‘   r—   rž   r­   r·   r¾   rÃ   rÒ   r×   rá   ré   rñ   rô   rù   r  r  r  r#  r+  r-  r1  © r   r   ú<module>r?     s%  ðÛ ã Û ß XÑ Xç PÓ P÷ó ÷ <Ý ,Ý 1Ý 1Ý ,Ý *ò6ò
%)òP<Iò~/Gòd;,ò|e,òPð ‡�×Ñ˜ ¨¸Ð EÓFñ
ó Gð
ð ‡�×Ñ˜ °¸cÐ BÓCñ8ó Dð8ð ‡�×Ñ˜ °¸cÀ6Ð JÓKñ#ó Lð#òLð@ ‡�×Ñ˜  l°MÀ6Ð JÓKØ‡�×Ñ˜Ñ!LÓ!NÓOñ
3ó Pó Lð
3ð ‡�×Ñ˜ v¨}¸lÈCÐ&PÓQñó Rðòð ‡�×ÑÐ0°9¸jÐ2IÓJñ2ó Kð2ò"Aò%ò/ò")ð ‡�×Ñ˜¨-¸ÀsÐ)KÓLñ6ó Mð6ð  ‡�×Ñ˜ 4¨ -Ó0Ø‡�×Ñ˜¨-¸ÀsÐ)KÓLñDó Mó 1ðDð  ‡�×Ñ˜ 3¨°¸|Ð"LÓMñ6ó Nð6ð ‡�×Ñ˜ 3¨°¸|Ð"LÓMñ	Eó Nð	Eò&ò*'ð. ‡�×Ñ˜ =°#°v¸|Ð"LÓMñó Nðð2 ‡�×Ñ˜ =°#°v¸|Ð"LÓMñ ó Nð ð, ‡�×Ñ˜ =°#°|Ð"DÓEñRó FñRr   