U
    ^»{jW  ã                   @   sV  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d„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%ej& 'de
eef¡dd„ ƒZ(ej& 'deee	f¡dd„ ƒZ)ej& 'deee	e
f¡dd„ ƒZ*d d!„ Z+ej& 'de	eee
f¡ej& 'd"e+ƒ ¡d#d$„ ƒƒZ,ej& 'd%e
eee	f¡d&d'„ ƒZ-ej& 'd(d)d*g¡d+d,„ ƒZ.d-d.„ Z/d/d0„ Z0d1d2„ Z1d3d4„ Z2ej& 'd5eee	g¡d6d7„ ƒZ3ej& 'd8d9d:g¡ej& 'd5eee	g¡d;d<„ ƒƒZ4ej& 'd=e	e
eeg¡d>d?„ ƒZ5ej& 'd=e	e
eeg¡d@dA„ ƒZ6dBdC„ Z7dS )Dé    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                 C   s(   t  | j| ¡}t|t  t  |¡¡ƒ d S )N)ÚnpÚdotÚTr   Zdiag)ÚMÚK© r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/cross_decomposition/tests/test_pls.pyÚassert_matrix_orthogonal   s    r   c                  C   s(  t ƒ } | j}| j}t|jd d�}| ||¡ t|jƒ t|jƒ t|j	ƒ t|j
ƒ |j	}|j}|j
}|j}t| ¡ | ¡ dd�\}}	}
}}}t|t ||j¡ƒ t|	t ||j¡ƒ | |¡}t||j	ƒ | ||¡\}}t||j	ƒ t||j
ƒ | |¡}t||ƒ | ||¡\}}t||ƒ d S )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   Ú	transformZinverse_transform)ÚdÚXÚYÚplsr   ÚPÚUÚQZXcZYcZx_meanÚy_meanZx_stdZy_stdZXtZYtZX_backÚ_ZY_backr   r   r   Útest_pls_canonical_basics   s:    



  ÿ


r6   c                  C   s~  t ƒ } | j}| j}t|jd d�}| ||¡\}}t||jƒ t 	dddgdddgd	d
dgg¡}t 	dddgdddgdddgg¡}t 	dddgdddgdddgg¡}t 	dddgdddgdddgg¡}	t
t |j¡t |¡ƒ t
t |j¡t |¡ƒ t
t |j¡t |	¡ƒ t
t |j¡t |¡ƒ t |j| ¡}
t |j| ¡}t |j| ¡}t |j|	 ¡}t
|
|ƒ t
||ƒ d S )Nr   r   ç,œæ6 ã¿gbxôØù+r¿gºÂõNFé?ç¦;¦0çç¿gÌ&Ÿ¢—Ô¿gfé–_žâ¿çÛÓ@¹ŽmÐ¿g¤<-bLî?g�È£†üÔÈ¿gìHý¨«ã¿gîÿ©ÙtÏ¿gE`Õ å¿g¶tÜ[WmÂ¿gþ¦¨áø�à¿gLŠM3öð?gêŸÅÔ?g+Eú‰!Ó?gñ4Óœ@Ê?gËs¯YO)Û?g¢`{ Ôã?gA¬'ˆôºÈ?gþ«;Ô¾ÒÀ¿gàÒñÝÐ¿gÿý¸áÅ¿)r   r!   r"   r   r#   Úfit_transformr   Z	x_scores_r   Úarrayr   Úabsr)   r%   r*   r&   Úsign)r-   r.   r/   r0   ÚX_transr5   Ú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_flipr   r   r   Ú test_sanity_check_pls_regressionC   sP    ýÿýÿýÿýÿ
rG   c            
      C   sd  t ƒ } | j}| j}d|d d …df< t|jd d�}| ||¡ t dddgddd	gd
ddgg¡}t dddgddd	gdddgg¡}t dddgdddgdddgg¡}tt 	|¡t 	|j
¡ƒ tt 	|¡t 	|j¡ƒ tt 	|j¡t 	|¡ƒ tt 	|j¡t 	|¡ƒ t ||j ¡}t ||j
 ¡}t |dd … |jdd …  ¡}	t||ƒ t|dd … |	ƒ d S )Nr   r   r   gÍ�Oä¿gÀ(¡ñÍ}?g:Fëè?gìíàq›úç¿gqdvúgÄÑ¿g|�¯Nß<ã¿g¨1Æ, Ë¿gç¾7®È½î?g\ªÒ×øÆ¿gCgãÒBä¿g<&.ÁÌ¿g¯ÊBå¿gè5_/E¹¿g—žúQgà¿gç¯ër¥9ð?ç        g‰µø ãÛ?gXZ¡£°¦â?gh†C%dÖË?gV±�”îSÁ¿gù{sÉ‚ÓÏ¿gâ$(ÙE,Ç¿)r   r!   r"   r   r#   r$   r   r;   r   r<   r%   r)   r*   r&   r=   r   )
r-   r.   r/   r0   r?   r@   rB   rC   rD   rF   r   r   r   Ú2test_sanity_check_pls_regression_constant_column_Y‚   sB    ýÿýÿýÿ 
rI   c                  C   s–  t ƒ } | j}| j}t|jd d�}| ||¡ t dddgdddgd	d
dgg¡}t dddgdddgd	ddgg¡}t dddgdddgdddgg¡}t dddgdddgddd gg¡}tt 	|j
¡t 	|¡ƒ tt 	|j¡t 	|¡ƒ tt 	|j¡t 	|¡ƒ tt 	|j¡t 	|¡ƒ t |j
| ¡}t |j| ¡}	t |j| ¡}
t |j| ¡}t||	ƒ t|
|ƒ t|jƒ t|jƒ t|jƒ t|jƒ d S )!Nr   r   r7   gû{cçñdÐ?g£rÙ	«èç¿r8   g§š“öŠ¾?g¿>côîä?r9   gP,"P²î¿gÍº‘@¾¿gù«•CjžÚ?g#õžÊiïã¿g2�Ð©Ô?g‚úrÂè?g·o ê_Žì¿gè¼ç<:àÎ¿g©¨càâ?gD}ÜÈ†?é?gÞ5âüÅ?gâ¼ÍUÒ®è?g‹ºÞOð¡ã¿gÓ©eJo¨Å?g.a#ÿ‚“Î¿gbMá4º ¿gýÎþYVï?gÍ±¼«ðæ?gå¹[åK Ó?gÆ=m¿B§æ¿go·‡1§SÉ?gPŸ.œµ%l¿gq¶–Ñ!î?)r   r!   r"   r   r#   r$   r   r;   r   r<   Úx_rotations_r%   Zy_rotations_r&   r=   r   r'   r(   )r-   r.   r/   r0   r?   Zexpected_x_rotationsrA   Zexpected_y_rotationsZx_rotations_sign_fliprD   Zy_rotations_sign_fliprE   r   r   r   Útest_sanity_check_pls_canonical´   sV    ýÿýÿýÿýÿ




rK   c                  C   sV  d} d}d}t dƒ}|j| d�}|j| d�}t ||||g¡j}||jd|  d� | df¡ }||jd|  d� | df¡ }tj||j||  d� | |¡fdd�}tj||j||  d� | |¡fdd�}td	d
�}	|	 ||¡ t dddgdddgdddgdddgdddgdddgdddgd d!d"gd#d$d%gd&d'd(gd)d*d+gd,d-d.gd/d0d1gd2d3d4gg¡}
t d5d6d7gd8d9d:gd;d<d=gd>d?d@gdAdBdCgdDdEdFgdGdHdIgdJdKdLgdMdNdOgdPdQdRgdSdTdUgdVdWdXgdYdZd[gd\d]d^gg¡}t d_d`dagdbdcddgdedfdggdhdidjgdkdldmgdndodpgdqdrdsgdtdudvgdwdxdygg	¡}t dzd{d|gd}d~dgd€d�d‚gdƒd„d…gd†d‡dˆgd‰dŠd‹gdŒd�dŽgd�d�d‘gd’d“d”gg	¡}t	t 
|	j¡t 
|¡ƒ t	t 
|	j¡t 
|
¡ƒ t	t 
|	j¡t 
|¡ƒ t	t 
|	j¡t 
|¡ƒ t |	j| ¡}t |	j|
 ¡}t |	j| ¡}t |	j| ¡}t	||ƒ t	||ƒ t|	jƒ t|	jƒ t|	jƒ t|	jƒ d S )•Néô  é
   é   é   )Ú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   r;   r   ÚreshapeZconcatenater   r$   r   r<   r)   r%   r*   r&   r=   r   r'   r(   )ÚnZp_noiseZq_noiseÚrngÚl1Úl2Zlatentsr.   r/   r0   r?   r@   rA   rB   rC   rD   rE   rF   r   r   r   Ú&test_sanity_check_pls_canonical_randomò   sª    &&
òÿòÿ÷ÿ÷ÿ




r[   c               	   C   sJ   t ƒ } | j}| j}t|jd dd�}t t¡� | ||¡ W 5 Q R X d S )Nr   é   ©r   Zmax_iter)	r   r!   r"   r   r#   ÚpytestÚwarnsr   r$   )r-   r.   r/   Z
pls_nipalsr   r   r   Útest_convergence_failZ  s    r`   ÚEstc                    sR   t ƒ }|j}|j}d‰ | ˆ d�}| ||¡ t‡ fdd„|j|jfD ƒƒsNt‚d S )Nr\   r   c                 3   s   | ]}|j d  ˆ kV  qdS )r   N)r#   )Ú.0Úattrr   r   r   Ú	<genexpr>m  s    z(test_attibutes_shapes.<locals>.<genexpr>)r   r!   r"   r$   Úallr%   r&   ÚAssertionError)ra   r-   r.   r/   r0   r   r   r   Útest_attibutes_shapesd  s    

ÿrg   c                 C   sr   t ƒ }|j}|j}| dd�}| ||d d …df ¡j}| ||d d …d d…f ¡j}|j|jksdt‚t||ƒ d S )Nr   r   r   )r   r!   r"   r$   Úcoef_r#   rf   r   )ra   r-   r.   r/   ÚestZone_d_coeffZtwo_d_coeffr   r   r   Útest_univariate_equivalencer  s    
rj   c              	   C   s6  t ƒ }|j}|j}| ¡ }| dd� ||¡}t||ƒ t t¡�" | dd� ||¡ t	||ƒ W 5 Q R X | t
krtd S | ¡ }t t¡�" |j||dd�f t	||ƒ W 5 Q R X | ¡ }t t¡�  |j|dd�f t	||ƒ W 5 Q R X t	|j||dd�|j| ¡ | ¡ dd�ƒ t	|j|dd�|j| ¡ dd�ƒ d S )NT©r+   F)r   r!   r"   r+   r$   r   r^   Úraisesrf   r   r   r,   Úpredict)ra   r-   r.   r/   ZX_origr0   r   r   r   Ú	test_copy�  s6    
 ÿ ÿrn   c            	      c   s$  t j d¡} d}d}d}|  ||¡}|  ||¡}t  ||¡d|  ||¡  d }|d9 }||fV  tdd�\}}d	|d
d
…df< ||fV  t  ddd	gd	ddgdddgdddgg¡}t  ddgddgddgddgg¡}||fV  ddg}|D ]2}t j |¡} |  dd¡}|  dd¡}||fV  qìd
S )z-Generate dataset for test_scale_and_stabilityr   iè  rN   rM   r\   r   T©Ú
return_X_yg      ð?NéÿÿÿÿrH   g       @g      @g      @g      @gš™™™™™¹?gš™™™™™É¿gÍÌÌÌÌÌì?gš™™™™™ñ?gÍÌÌÌÌÌ@gš™™™™™@gÍÌÌÌÌÌ'@gš™™™™™(@i  iå  rQ   rT   )r   ÚrandomÚRandomStateÚrandnr   r   r;   )	rX   Ú	n_samplesÚ	n_targetsÚ
n_featuresr3   r/   r.   ZseedsÚseedr   r   r   Ú+_generate_test_scale_and_stability_datasets¨  s*     

*"
ry   zX, Yc           
      C   s\   t ||ƒ^}}}| dd� ||¡\}}| dd� ||¡\}}	t||dd� t|	|dd� dS )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?©ZatolN)r	   r:   r   )
ra   r.   r/   ZX_sZY_sr5   ZX_scoreZY_scoreZ	X_s_scoreZ	Y_s_scorer   r   r   Útest_scale_and_stabilityÈ  s
    r{   Ú	Estimatorc              	   C   s\   t j d¡}| dd¡}| dd¡}| dd�}d}tjt|d�� | ||¡ W 5 Q R X dS )	zICheck the validation of `n_components` upper bounds for `PLS` regressors.r   rM   rN   rT   r   zH`n_components` upper bound is .*. Got 10 instead. Reduce `n_components`.©ÚmatchN)r   rr   rs   rt   r^   rl   Ú
ValueErrorr$   )r|   rX   r.   r/   ri   Úerr_msgr   r   r   Útest_n_components_upper_bounds×  s    
r�   zn_samples, n_features)éd   rM   )r‚   éÈ   c                 C   s~   t | |d|d�\}}t||dd�\}}}t||ƒ\}}	t||ƒ t||	ƒ d}
t||| ¡ |
 d� t||	|	 ¡ |
 d� d S )NrN   ©rv   Úrandom_stateT)Znorm_y_weightsçü©ñÒMbP?rz   )r   r
   r   r   r   Úmax)ru   rw   Úglobal_random_seedr.   r/   Úu1Zv1r5   Úu2Zv2Úrtolr   r   r   Útest_singular_value_helpersã  s       ÿ


rŒ   c                 C   s�   t ddd| d�\}}tdd� ||¡ |¡}tdd� ||¡ |¡}tdd� ||¡ |¡}d}t||| ¡ | d� t||| ¡ | d� d S )	Nr‚   rM   rN   r„   r   r   r†   rz   )r   r   r$   r,   r   r   r   r‡   )rˆ   r.   r/   ZsvdÚregÚ	canonicalr‹   r   r   r   Útest_one_component_equivalenceõ  s    r�   c                  C   sˆ   t  dddg¡} t  dddg¡}t|  dd¡| dd¡ƒ\}}t| |ƒ t| | ¡ ƒ t| dddgƒ t|| ¡ ƒ t|dddgƒ d S )	Nr   éüÿÿÿr\   rT   rq   rQ   éþÿÿÿéýÿÿÿ)r   r;   r   rV   r   r   Zravel)ÚuÚvZ
u_expectedZ
v_expectedr   r   r   Útest_svd_flip_1d  s    
r•   c              	   C   sj   t ddd| d�\}}tddd�}t ¡ � t dt¡ | ||¡ W 5 Q R X t t 	|j
¡dk ¡sft‚d	S )
z8Test that CCA converges. Non-regression test for #19549.rƒ   é   )ru   rw   rv   r…   rM   rL   r]   Úerrorr   N)r   r   ÚwarningsÚcatch_warningsÚsimplefilterr   r$   r   re   r<   r)   rf   )rˆ   r.   ÚyZccar   r   r   Útest_loadings_converges  s       ÿ

rœ   c               	   C   sb   t j d¡} |  dd¡}t  d¡}tƒ }d}tjt|d�� | 	||¡ W 5 Q R X t
|jdƒ dS )zAChecks warning when y is constant. Non-regression test for #19831é*   r‚   rT   z#Y residual is constant at iterationr}   r   N)r   rr   rs   ZrandZzerosr   r^   r_   ÚUserWarningr$   r   rJ   )rX   Úxr›   r0   Úmsgr   r   r   Útest_pls_constant_y#  s    
r¡   ÚPLSEstimatorc                 C   sR   t ƒ }|j}|j}| dd� ||¡}|jd |jd  }}|jj||fksNt‚dS )z†Check the shape of `coef_` attribute.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/12410
    Trk   r   N)r   r!   r"   r$   r#   rh   rf   )r¢   r-   r.   r/   r0   rv   rw   r   r   r   Útest_pls_coef_shape2  s    r£   r    TFc           	      C   sŽ   t ƒ }|j}|j}| d|d� ||¡}|j|dd�}|jdd�}||jdd� }|rf||jddd� }t|j|ƒ t|||j	j
 |j ƒ dS )	z/Check the behaviour of the prediction function.T)r+   r    rk   r   rR   r   )rS   ZddofN)r   r!   r"   r$   rm   ZmeanZstdr   Z
intercept_rh   r   )	r¢   r    r-   r.   r/   r0   ZY_predr4   r>   r   r   r   Útest_pls_predictionC  s    r¤   ÚKlassc                    sd   t dd�\}}| ƒ  ||¡}| ¡ }| j ¡ ‰ tj‡ fdd„t|jj	d ƒD ƒt
d�}t||ƒ dS )z9Check `get_feature_names_out` cross_decomposition module.Tro   c                    s   g | ]}ˆ › |› �‘qS r   r   )rb   Úi©Zclass_name_lowerr   r   Ú
<listcomp>a  s     z.test_pls_feature_names_out.<locals>.<listcomp>r   )ZdtypeN)r   r$   Úget_feature_names_outÚ__name__Úlowerr   r;   Úranger%   r#   Úobjectr   )r¥   r.   r/   ri   Z	names_outZexpected_names_outr   r§   r   Útest_pls_feature_names_outW  s    
þr®   c                 C   st   t  d¡}tddd�\}}| ƒ jdd� ||¡}| ||¡\}}t|tjƒsPt	‚t||j
ƒs`t	‚t|j| ¡ ƒ dS )z1Check `set_output` in cross_decomposition module.ZpandasT)rp   Zas_frame)r,   N)r^   Zimportorskipr   Z
set_outputr$   r,   Ú
isinstancer   Zndarrayrf   Z	DataFramer   Úcolumnsr©   )r¥   Úpdr.   r/   ri   r>   Zy_transr   r   r   Útest_pls_set_outputg  s    
r²   c               	   C   sÆ   t  ddgddgddgddgddgd	d
gg¡} t  dd	ddddg¡}| ¡ }tƒ  | |¡}| | ¡}|j|jkstt‚tƒ  | |¡}t	d|fd|fgƒ}| | |¡ | ¡}|j|jks¸t‚t
||ƒ dS )zrCheck that when fitting with 1d `y`, prediction should also be 1d.

    Non-regression test for Issue #26549.
    r   r\   rQ   rT   é	   é   rN   é   é   é$   é   r–   é   r�   ÚlrÚplsrN)r   r;   r+   r   r$   rm   r#   rf   r   r   r   )r.   r›   Úexpectedr»   Zy_predrº   Zvrr   r   r   Útest_pls_regression_fit_1d_yt  s    .
r½   )8r˜   Únumpyr   r^   Znumpy.testingr   r   r   Zsklearn.cross_decompositionr   r   r   r   Z sklearn.cross_decomposition._plsr	   r
   r   r   Zsklearn.datasetsr   r   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.linear_modelr   Zsklearn.utilsr   Zsklearn.utils.extmathr   r   r6   rG   rI   rK   r[   r`   ÚmarkZparametrizerg   rj   rn   ry   r{   r�   rŒ   r�   r•   rœ   r¡   r£   r¤   r®   r²   r½   r   r   r   r   Ú<module>   s\   (?2>h



& 




