§
    §éUgøš  ã            
       óÊ  — d Z ddlZddlmZmZ ddlmZmZ ddlZ	ddl
mZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZmZ ddl m!Z!m"Z" g d¢Z#e ed¦  «        k    rddl
m$Z% nddl
m%Z% d„ Z&	 d)d„Z'd„ Z(d*d„Z)d„ Z*d„ Z+d„ Z, G d„ deeeeee¬ ¦  «        Z- G d!„ d"e-¦  «        Z. G d#„ d$e-¦  «        Z/ G d%„ d&e-¦  «        Z0 G d'„ d(eee¦  «        Z1dS )+zG
The :mod:`sklearn.pls` module implements Partial Least Squares (PLS).
é    N)ÚABCMetaÚabstractmethod)ÚIntegralÚReal)Úsvdé   )ÚBaseEstimatorÚClassNamePrefixFeaturesOutMixinÚMultiOutputMixinÚRegressorMixinÚTransformerMixinÚ_fit_context)ÚConvergenceWarning)Úcheck_arrayÚcheck_consistent_length)ÚIntervalÚ
StrOptions)Úsvd_flip)Úparse_versionÚ
sp_version)ÚFLOAT_DTYPESÚcheck_is_fitted)ÚPLSCanonicalÚPLSRegressionÚPLSSVDz1.7)Úpinv)Úpinv2c           
      óÊ  — t          | dd¬¦  «        \  }}}|j        j                             ¦   «         }dddœ}t	          j        |¦  «        ||         z  t	          j        |¦  «        j        z  }t	          j        ||k    ¦  «        }|d d …d |…f         }||d |…         z  }t	          j	        t	          j
        t	          j        ||d |…         ¦  «        ¦  «        ¦  «        S )NF)Úfull_matricesÚcheck_finiteg     @�@g    €„.A)ÚfÚd)r   ÚdtypeÚcharÚlowerÚnpÚmaxÚfinfoÚepsÚsumÚ	transposeÚ	conjugateÚdot)ÚaÚuÚsÚvhÚtÚfactorÚcondÚranks           ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/cross_decomposition/_pls.pyÚ
_pinv2_oldr7   )   sÌ   € õ �1 E¸Ð>Ñ>Ô>�H€A€qˆ"à	ŒŒ×ÒÑÔ€AØ˜SÐ!Ð!€FÝŒ6�!‰9Œ9�v˜a”yÑ ¥2¤8¨A¡;¤;¤?Ñ2€DÝŒ6�!�d’(ÑÔ€Dà	ˆ!ˆ!ˆ!ˆUˆdˆUˆ(Œ€AØˆˆ5ˆDˆ5Œ�M€AÝŒ<�œ¥R¤V¨A¨r°%°4°%¬yÑ%9Ô%9Ñ:Ô:Ñ;Ô;Ð;ó    ÚAéô  ç�íµ ÷Æ°>Fc                 ón  ‡— t          j        | j        ¦  «        j        Š	 t	          ˆfd„|j        D ¦   «         ¦  «        }n"# t          $ r}t          d¦  «        |‚d}~ww xY wd}|dk    rt          | ¦  «        t          |¦  «        }
}	t          |¦  «        D �]r}|dk    rt          j	        |	|¦  «        }n0t          j	        | j        |¦  «        t          j	        ||¦  «        z  }|t          j
        t          j	        ||¦  «        ¦  «        ‰z   z  }t          j	        | |¦  «        }|dk    rt          j	        |
|¦  «        }n5t          j	        |j        |¦  «        t          j	        |j        |¦  «        z  }|r-|t          j
        t          j	        ||¦  «        ¦  «        ‰z   z  }t          j	        ||¦  «        t          j	        ||¦  «        ‰z   z  }||z
  }t          j	        ||¦  «        |k     s|j        d         dk    r n|}�Œt|dz   }||k    rt          j        dt          ¦  «         |||fS )a?  Return the first left and right singular vectors of X'Y.

    Provides an alternative to the svd(X'Y) and uses the power method instead.
    With norm_y_weights to True and in mode A, this corresponds to the
    algorithm section 11.3 of the Wegelin's review, except this starts at the
    "update saliences" part.
    c              3   óp   •K  — | ]0}t          j        t          j        |¦  «        ‰k    ¦  «        ¯,|V — Œ1d S ©N)r&   ÚanyÚabs)Ú.0Úcolr)   s     €r6   ú	<genexpr>z;_get_first_singular_vectors_power_method.<locals>.<genexpr>H   s?   øè è € ÐGÐG˜s­R¬VµB´F¸3±K´KÀ#Ò4EÑ-FÔ-FÐG�sÐGÐGÐGÐGÐGÐGr8   úy residual is constantNéd   ÚBé   z$Maximum number of iterations reached)r&   r(   r#   r)   ÚnextÚTÚStopIterationr7   Úranger-   ÚsqrtÚshapeÚwarningsÚwarnr   )ÚXÚYÚmodeÚmax_iterÚtolÚnorm_y_weightsÚy_scoreÚeÚx_weights_oldÚX_pinvÚY_pinvÚiÚ	x_weightsÚx_scoreÚ	y_weightsÚx_weights_diffÚn_iterr)   s                    @r6   Ú(_get_first_singular_vectors_power_methodra   ;   s-  ø€ õ Œ(�1”7Ñ
Ô
Ô
€Cð=ÝÐGÐGÐGÐG a¤cÐGÑGÔGÑGÔGˆˆøÝð =ð =ð =ÝÐ4Ñ5Ô5¸1Ð<øøøøð=øøøð €Màˆs‚{€{õ $ A™œ­
°1©¬�ˆå�8‰_Œ_ð "ñ "ˆØ�3Š;ˆ;Ýœ˜v wÑ/Ô/ˆIˆIåœ˜qœs GÑ,Ô,­r¬v°g¸wÑ/GÔ/GÑGˆIà•R”W�RœV I¨yÑ9Ô9Ñ:Ô:¸SÑ@Ñ@ˆ	Ý”&˜˜IÑ&Ô&ˆà�3Š;ˆ;Ýœ˜v wÑ/Ô/ˆIˆIåœ˜qœs GÑ,Ô,­r¬v°g´iÀÑ/IÔ/IÑIˆIàð 	EØ�œ¥¤¨	°9Ñ!=Ô!=Ñ>Ô>ÀÑDÑDˆIå”&˜˜IÑ&Ô&­"¬&°¸IÑ*FÔ*FÈÑ*LÑMˆà" ]Ñ2ˆÝŒ6�. .Ñ1Ô1°CÒ7Ð7¸1¼7À1¼:Èº?¸?ØˆEØ!ˆ‰à�‰U€FØ�ÒÐÝŒÐ<Õ>PÑQÔQÐQà�i Ð'Ð's   ¡ A Á
A!ÁAÁA!c                 ó�   — t          j        | j        |¦  «        }t          |d¬¦  «        \  }}}|dd…df         |ddd…f         fS )zbReturn the first left and right singular vectors of X'Y.

    Here the whole SVD is computed.
    F©r   Nr   )r&   r-   rI   r   )rP   rQ   ÚCÚUÚ_ÚVts         r6   Ú_get_first_singular_vectors_svdrh   v   sP   € õ
 	ŒˆqŒs�A‰Œ€AÝ�1 EÐ*Ñ*Ô*�H€A€qˆ"ØˆQˆQˆQ�ˆTŒ7�B�q˜!˜!˜!�t”HÐÐr8   Tc                 ó”  — |                       d¬¦  «        }| |z  } |                      d¬¦  «        }||z  }|rK|                      dd¬¦  «        }d||dk    <   | |z  } |                     dd¬¦  «        }d||dk    <   ||z  }n>t          j        | j        d         ¦  «        }t          j        |j        d         ¦  «        }| |||||fS )z{Center X, Y and scale if the scale parameter==True

    Returns
    -------
        X, Y, x_mean, y_mean, x_std, y_std
    r   ©ÚaxisrG   )rk   Úddofg      ð?ç        )ÚmeanÚstdr&   ÚonesrM   )rP   rQ   ÚscaleÚx_meanÚy_meanÚx_stdÚy_stds          r6   Ú_center_scale_xyrv   €   s×   € ð �VŠV˜ˆV‰^Œ^€FØˆ�K€AØ�VŠV˜ˆV‰^Œ^€FØˆ�K€Aàð 	$Ø—’˜1 1�Ñ%Ô%ˆØ!ˆˆe�sŠlÑØ	ˆU‰
ˆØ—’˜1 1�Ñ%Ô%ˆØ!ˆˆe�sŠlÑØ	ˆU‰
ˆˆå”˜œ œ
Ñ#Ô#ˆÝ”˜œ œ
Ñ#Ô#ˆØˆa�˜ ¨Ð-Ð-r8   c                 óš   — t          j        t          j        | ¦  «        ¦  «        }t          j        | |         ¦  «        }| |z  } ||z  }dS )z7Same as svd_flip but works on 1d arrays, and is inplaceN)r&   Úargmaxr@   Úsign)r/   ÚvÚbiggest_abs_val_idxry   s       r6   Ú_svd_flip_1dr|   š   sG   € õ œ)¥B¤F¨1¡I¤IÑ.Ô.ÐÝŒ7�1Ð(Ô)Ñ*Ô*€DØˆ�I€AØˆ�I€A€A€Ar8   c                 ód   — |�-t          j        dt          ¦  «         | �t          d¦  «        ‚|S | S )NzE`Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.z?Cannot use both `y` and `Y`. Use only `y` as `Y` is deprecated.)rN   rO   ÚFutureWarningÚ
ValueError©ÚyrQ   s     r6   Ú_deprecate_Y_when_optionalr‚   ¥   sI   € Ø€}ÝŒØSÝñ	
ô 	
ð 	
ð ˆ=ÝØQñô ð ð ˆØ€Hr8   c                 óH   — | €|€t          d¦  «        ‚t          | |¦  «        S )Nzy is required.)r   r‚   r€   s     r6   Ú_deprecate_Y_when_requiredr„   ´   s*   € Ø€y�Q�YÝÐ)Ñ*Ô*Ð*Ý% a¨Ñ+Ô+Ð+r8   c                   óR  — e Zd ZU dZ eeddd¬¦  «        gdg eddh¦  «        g ed	d
h¦  «        g eddh¦  «        g eeddd¬¦  «        g eeddd¬¦  «        gdgdœZe	e
d<   e	 dddd	dddddœd„¦   «         Z ed¬¦  «        dd„¦   «         Zdd„Zdd„Zd d„Zd!d„Zd„ ZdS )"Ú_PLSa  Partial Least Squares (PLS)

    This class implements the generic PLS algorithm.

    Main ref: Wegelin, a survey of Partial Least Squares (PLS) methods,
    with emphasis on the two-block case
    https://stat.uw.edu/sites/default/files/files/reports/2000/tr371.pdf
    rG   NÚleft©ÚclosedÚbooleanÚ
regressionÚ	canonicalr9   rF   r   Únipalsr   ©Ún_componentsrq   Údeflation_moderR   Ú	algorithmrS   rT   ÚcopyÚ_parameter_constraintsr   Tr:   r;   )rq   r�   rR   r‘   rS   rT   r’   c                óv   — || _         || _        || _        || _        || _        || _        || _        || _        d S r>   )r�   r�   rR   rq   r‘   rS   rT   r’   )	Úselfr�   rq   r�   rR   r‘   rS   rT   r’   s	            r6   Ú__init__z_PLS.__init__Ö   sB   € ð )ˆÔØ,ˆÔØˆŒ	ØˆŒ
Ø"ˆŒØ ˆŒØˆŒØˆŒ	ˆ	ˆ	r8   ©Úprefer_skip_nested_validationc           	      óX  — t          ||¦  «        }t          ||¦  «         |                      |t          j        d| j        d¬¦  «        }t          |dt          j        d| j        d¬¦  «        }|j        dk    rd| _        | 	                    dd¦  «        }nd| _        |j
        d	         }|j
        d         }|j
        d         }| j        }| j        d
k    r|nt          |||¦  «        }||k    rt          d|› d|› d�¦  «        ‚| j        dk    | _        | j        }	t!          ||| j        ¦  «        \  }
}| _        | _        | _        | _        t          j        ||f¦  «        | _        t          j        ||f¦  «        | _        t          j        ||f¦  «        | _        t          j        ||f¦  «        | _        t          j        ||f¦  «        | _        t          j        ||f¦  «        | _        g | _        t          j        |j        ¦  «        j         }tC          |¦  «        D �]w}| j"        dk    rÁt          j#        t          j$        |¦  «        d|z  k     d	¬¦  «        }d|dd…|f<   	 tK          |
|| j&        | j'        | j(        |	¬¦  «        \  }}}nD# tR          $ r7}tU          |¦  «        dk    r‚ tW          j,        d|› �¦  «         Y d}~ �nÍd}~ww xY w| j         -                    |¦  «         n| j"        dk    rt]          |
|¦  «        \  }}t_          ||¦  «         t          j0        |
|¦  «        }|	rd}nt          j0        ||¦  «        }t          j0        ||¦  «        |z  }t          j0        ||
¦  «        t          j0        ||¦  «        z  }|
t          j1        ||¦  «        z  }
| j        dk    rCt          j0        ||¦  «        t          j0        ||¦  «        z  }|t          j1        ||¦  «        z  }| j        d
k    rCt          j0        ||¦  «        t          j0        ||¦  «        z  }|t          j1        ||¦  «        z  }|| j        dd…|f<   || j        dd…|f<   || j        dd…|f<   || j        dd…|f<   || j        dd…|f<   || j        dd…|f<   �Œyt          j0        | j        te          t          j0        | j        j3        | j        ¦  «        d¬¦  «        ¦  «        | _4        t          j0        | j        te          t          j0        | j        j3        | j        ¦  «        d¬¦  «        ¦  «        | _5        t          j0        | j4        | j        j3        ¦  «        | _6        | j6        | j        z  j3        | j        z  | _6        | j        | _7        | j4        j
        d         | _8        | S )ád  Fit model to data.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Training vectors, where `n_samples` is the number of samples and
            `n_features` is the number of predictors.

        y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Target vectors, where `n_samples` is the number of samples and
            `n_targets` is the number of response variables.

        Y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Target vectors, where `n_samples` is the number of samples and
            `n_targets` is the number of response variables.

            .. deprecated:: 1.5
               `Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.

        Returns
        -------
        self : object
            Fitted model.
        Tr   ©r#   Úforce_writeabler’   Úensure_min_samplesr�   F©Ú
input_namer#   rœ   r’   Ú	ensure_2drG   éÿÿÿÿr   r‹   ú`n_components` upper bound is ú. Got ú  instead. Reduce `n_components`.rŒ   r�   é
   rj   rm   N)rR   rS   rT   rU   rD   z$y residual is constant at iteration r   )r    )9r„   r   Ú_validate_datar&   Úfloat64r’   r   ÚndimÚ_predict_1dÚreshaperM   r�   r�   Úminr   Ú_norm_y_weightsrv   rq   Ú_x_meanÚ_y_meanÚ_x_stdÚ_y_stdÚzerosÚ
x_weights_Ú
y_weights_Ú	_x_scoresÚ	_y_scoresÚx_loadings_Úy_loadings_Ún_iter_r(   r#   r)   rK   r‘   Úallr@   ra   rR   rS   rT   rJ   ÚstrrN   rO   Úappendrh   r|   r-   Úouterr   rI   Úx_rotations_Úy_rotations_Úcoef_Ú
intercept_Ú_n_features_out)r•   rP   r�   rQ   ÚnÚpÚqr�   Úrank_upper_boundrU   ÚXkÚykÚy_epsÚkÚyk_maskr\   r^   r¸   rW   Úx_scoresÚy_ssÚy_scoresÚ
x_loadingsÚ
y_loadingss                           r6   Úfitz_PLS.fitì   sá  € õ4 ' q¨!Ñ,Ô,ˆå  1Ñ%Ô%Ð%Ø×ÒØÝ”*Ø Ø”Ø ð  ñ 
ô 
ˆõ ØØÝ”*Ø Ø”Øð
ñ 
ô 
ˆð Œ6�QŠ;ˆ;Ø#ˆDÔØ—	’	˜"˜aÑ Ô ˆAˆAà$ˆDÔàŒG�AŒJˆØŒG�AŒJˆØŒG�AŒJˆàÔ(ˆð !%Ô 3°|Ò CÐ C˜1˜1ÍÈQÐPQÐSTÉÌÐØÐ*Ò*Ð*ÝðFÐ1Að Fð FØ#ðFð Fð Fñô ð ð
  $Ô2°kÒAˆÔØÔ-ˆõ HXØˆq�$”*ñH
ô H
ÑDˆˆB�”˜dœl¨D¬K¸¼õ œ( A |Ð#4Ñ5Ô5ˆŒÝœ( A |Ð#4Ñ5Ô5ˆŒÝœ 1 lÐ"3Ñ4Ô4ˆŒÝœ 1 lÐ"3Ñ4Ô4ˆŒÝœ8 Q¨Ð$5Ñ6Ô6ˆÔÝœ8 Q¨Ð$5Ñ6Ô6ˆÔØˆŒõ
 ”˜œÑ"Ô"Ô&ˆÝ�|Ñ$Ô$ð =	0ñ =	0ˆAð Œ~ Ò)Ð)åœ&¥¤¨¡¤¨b°5©jÒ!8¸qÐAÑAÔA�Ø!$��1�1�1�g�:‘ðõ
 AØØØ!œYØ!%¤Ø œHØ'5ðñ ô ñ	Ø!Ø!Ø˜øõ %ð ð ð Ý˜1‘v”vÐ!9Ò9Ð9ØÝ”MÐ"LÈÐ"LÐ"LÑMÔMÐMØ�E�E�E�E‘Eøøøøð	øøøð ”×#Ò# GÑ,Ô,Ð,Ð,à” 5Ò(Ð(Ý'FÀrÈ2Ñ'NÔ'NÑ$�	˜9õ ˜ IÑ.Ô.Ð.õ ”v˜b )Ñ,Ô,ˆHØð 4Ø��å”v˜i¨Ñ3Ô3�Ý”v˜b )Ñ,Ô,¨tÑ3ˆHõ œ ¨"Ñ-Ô-µ´°xÀÑ0JÔ0JÑJˆJØ•"”(˜8 ZÑ0Ô0Ñ0ˆBàÔ" kÒ1Ð1åœV H¨bÑ1Ô1µB´F¸8ÀXÑ4NÔ4NÑN�
Ø•b”h˜x¨Ñ4Ô4Ñ4�ØÔ" lÒ2Ð2åœV H¨bÑ1Ô1µB´F¸8ÀXÑ4NÔ4NÑN�
Ø•b”h˜x¨Ñ4Ô4Ñ4�à$-ˆDŒO˜A˜A˜A˜q˜DÑ!Ø$-ˆDŒO˜A˜A˜A˜q˜DÑ!Ø#+ˆDŒN˜1˜1˜1˜a˜4Ñ Ø#+ˆDŒN˜1˜1˜1˜a˜4Ñ Ø%/ˆDÔ˜Q˜Q˜Q ˜TÑ"Ø%/ˆDÔ˜Q˜Q˜Q ˜TÑ"Ñ"õ œFØŒOÝ•"”&˜Ô)Ô+¨T¬_Ñ=Ô=ÈEÐRÑRÔRñ
ô 
ˆÔõ œFØŒOÝ•"”&˜Ô)Ô+¨T¬_Ñ=Ô=ÈEÐRÑRÔRñ
ô 
ˆÔõ ”V˜DÔ-¨tÔ/?Ô/AÑBÔBˆŒ
Ø”j 4¤;Ñ.Ô1°D´KÑ?ˆŒ
Øœ,ˆŒØ#Ô0Ô6°qÔ9ˆÔØˆs   É+(JÊ
KÊ+KËKc                 ó¸  — t          ||¦  «        }t          | ¦  «         |                      ||t          d¬¦  «        }|| j        z  }|| j        z  }t          j        || j        ¦  «        }|�lt          |dd|t          ¬¦  «        }|j
        dk    r|                     dd¦  «        }|| j        z  }|| j        z  }t          j        || j        ¦  «        }||fS |S )a  Apply the dimension reduction.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Samples to transform.

        y : array-like of shape (n_samples, n_targets), default=None
            Target vectors.

        Y : array-like of shape (n_samples, n_targets), default=None
            Target vectors.

            .. deprecated:: 1.5
               `Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.

        copy : bool, default=True
            Whether to copy `X` and `Y`, or perform in-place normalization.

        Returns
        -------
        x_scores, y_scores : array-like or tuple of array-like
            Return `x_scores` if `Y` is not given, `(x_scores, y_scores)` otherwise.
        F©r’   r#   ÚresetNr�   )rŸ   r    r’   r#   rG   r¡   )r‚   r   r¦   r   r­   r¯   r&   r-   r½   r   r¨   rª   r®   r°   r¾   )r•   rP   r�   rQ   r’   rË   rÍ   s          r6   Ú	transformz_PLS.transform•  sé   € õ2 ' q¨!Ñ,Ô,ˆå˜ÑÔÐØ×Ò ¨µLÈÐÑNÔNˆà	ˆTŒ\ÑˆØ	ˆTŒ[Ñˆå”6˜!˜TÔ.Ñ/Ô/ˆØˆ=ÝØ˜c¨U¸Å\ðñ ô ˆAð Œv˜Š{ˆ{Ø—I’I˜b !Ñ$Ô$�Ø�”ÑˆAØ�”ÑˆAÝ”v˜a Ô!2Ñ3Ô3ˆHØ˜XÐ%Ð%àˆr8   c                 óx  — t          ||¦  «        }t          | ¦  «         t          |dt          ¬¦  «        }t	          j        || j        j        ¦  «        }|| j        z  }|| j	        z  }|�Nt          |dt          ¬¦  «        }t	          j        || j
        j        ¦  «        }|| j        z  }|| j        z  }||fS |S )a©  Transform data back to its original space.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_components)
            New data, where `n_samples` is the number of samples
            and `n_components` is the number of pls components.

        y : array-like of shape (n_samples,) or (n_samples, n_components)
            New target, where `n_samples` is the number of samples
            and `n_components` is the number of pls components.

        Y : array-like of shape (n_samples, n_components)
            New target, where `n_samples` is the number of samples
            and `n_components` is the number of pls components.

            .. deprecated:: 1.5
               `Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.

        Returns
        -------
        X_reconstructed : ndarray of shape (n_samples, n_features)
            Return the reconstructed `X` data.

        y_reconstructed : ndarray of shape (n_samples, n_targets)
            Return the reconstructed `X` target. Only returned when `y` is given.

        Notes
        -----
        This transformation will only be exact if `n_components=n_features`.
        rP   )rŸ   r#   Nr�   )r‚   r   r   r   r&   Úmatmulr¶   rI   r¯   r­   r·   r°   r®   )r•   rP   r�   rQ   ÚX_reconstructedÚy_reconstructeds         r6   Úinverse_transformz_PLS.inverse_transformÄ  s¾   € õ@ ' q¨!Ñ,Ô,ˆå˜ÑÔÐÝ˜ cµÐ>Ñ>Ô>ˆåœ) A tÔ'7Ô'9Ñ:Ô:ˆà˜4œ;Ñ&ˆØ˜4œ<Ñ'ˆàˆ=Ý˜A¨#µ\ÐBÑBÔBˆAå œi¨¨4Ô+;Ô+=Ñ>Ô>ˆOà˜tœ{Ñ*ˆOØ˜tœ|Ñ+ˆOØ" OÐ3Ð3àÐr8   c                 óØ   — t          | ¦  «         |                      ||t          d¬¦  «        }|| j        z  }|| j        j        z  | j        z   }| j        r|                     ¦   «         n|S )aU  Predict targets of given samples.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Samples.

        copy : bool, default=True
            Whether to copy `X` and `Y`, or perform in-place normalization.

        Returns
        -------
        y_pred : ndarray of shape (n_samples,) or (n_samples, n_targets)
            Returns predicted values.

        Notes
        -----
        This call requires the estimation of a matrix of shape
        `(n_features, n_targets)`, which may be an issue in high dimensional
        space.
        FrÒ   )	r   r¦   r   r­   r¿   rI   rÀ   r©   Úravel)r•   rP   r’   ÚYpreds       r6   Úpredictz_PLS.predictù  si   € õ, 	˜ÑÔÐØ×Ò ¨µLÈÐÑNÔNˆà	ˆTŒ\ÑˆØ�D”J”LÑ  4¤?Ñ2ˆØ $Ô 0Ð;ˆu�{Š{‰}Œ}ˆ}°eÐ;r8   c                 óV   — |                       ||¦  «                             ||¦  «        S )a£  Learn and apply the dimension reduction on the train data.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Training vectors, where `n_samples` is the number of samples and
            `n_features` is the number of predictors.

        y : array-like of shape (n_samples, n_targets), default=None
            Target vectors, where `n_samples` is the number of samples and
            `n_targets` is the number of response variables.

        Returns
        -------
        self : ndarray of shape (n_samples, n_components)
            Return `x_scores` if `Y` is not given, `(x_scores, y_scores)` otherwise.
        ©rÐ   rÔ   ©r•   rP   r�   s      r6   Úfit_transformz_PLS.fit_transform  ó&   € ð$ �xŠx˜˜1‰~Œ~×'Ò'¨¨1Ñ-Ô-Ð-r8   c                 ó   — dddœS )NTF)Ú
poor_scoreÚ
requires_y© )r•   s    r6   Ú
_more_tagsz_PLS._more_tags*  s   € Ø"°%Ð8Ð8Ð8r8   ©r   ©NN)NNT©Tr>   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r“   ÚdictÚ__annotations__r   r–   r   rÐ   rÔ   rÙ   rÝ   rá   rç   ræ   r8   r6   r†   r†   º   s­  € € € € € € ðð ð "˜ (¨A¨t¸FÐCÑCÔCÐDØ�Ø%˜: |°[Ð&AÑBÔBÐCØ�˜S #˜JÑ'Ô'Ð(Ø �j %¨Ð!2Ñ3Ô3Ð4Ø�X˜h¨¨4¸Ð?Ñ?Ô?Ð@Ø�˜˜q $¨vÐ6Ñ6Ô6Ð7Ø�ð	$ð 	$Ð˜Dð 	ð 	ñ 	ð ð ðð Ø#ØØØØØðð ð ð ñ „^ðð* €\°Ð5Ñ5Ô5ðfð fð fñ 6Ô5ðfðP-ð -ð -ð -ð^3ð 3ð 3ð 3ðj<ð <ð <ð <ð:.ð .ð .ð .ð(9ð 9ð 9ð 9ð 9r8   r†   )Ú	metaclassc                   ó�   ‡ — e Zd ZU dZi ej        ¥Zeed<   dD ]Ze 	                    e¦  «         Œ	 ddddddœˆ fd	„Z
dˆ fd„	Zˆ xZS )r   aÏ  PLS regression.

    PLSRegression is also known as PLS2 or PLS1, depending on the number of
    targets.

    For a comparison between other cross decomposition algorithms, see
    :ref:`sphx_glr_auto_examples_cross_decomposition_plot_compare_cross_decomposition.py`.

    Read more in the :ref:`User Guide <cross_decomposition>`.

    .. versionadded:: 0.8

    Parameters
    ----------
    n_components : int, default=2
        Number of components to keep. Should be in `[1, n_features]`.

    scale : bool, default=True
        Whether to scale `X` and `Y`.

    max_iter : int, default=500
        The maximum number of iterations of the power method when
        `algorithm='nipals'`. Ignored otherwise.

    tol : float, default=1e-06
        The tolerance used as convergence criteria in the power method: the
        algorithm stops whenever the squared norm of `u_i - u_{i-1}` is less
        than `tol`, where `u` corresponds to the left singular vector.

    copy : bool, default=True
        Whether to copy `X` and `Y` in :term:`fit` before applying centering,
        and potentially scaling. If `False`, these operations will be done
        inplace, modifying both arrays.

    Attributes
    ----------
    x_weights_ : ndarray of shape (n_features, n_components)
        The left singular vectors of the cross-covariance matrices of each
        iteration.

    y_weights_ : ndarray of shape (n_targets, n_components)
        The right singular vectors of the cross-covariance matrices of each
        iteration.

    x_loadings_ : ndarray of shape (n_features, n_components)
        The loadings of `X`.

    y_loadings_ : ndarray of shape (n_targets, n_components)
        The loadings of `Y`.

    x_scores_ : ndarray of shape (n_samples, n_components)
        The transformed training samples.

    y_scores_ : ndarray of shape (n_samples, n_components)
        The transformed training targets.

    x_rotations_ : ndarray of shape (n_features, n_components)
        The projection matrix used to transform `X`.

    y_rotations_ : ndarray of shape (n_targets, n_components)
        The projection matrix used to transform `Y`.

    coef_ : ndarray of shape (n_target, n_features)
        The coefficients of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

    intercept_ : ndarray of shape (n_targets,)
        The intercepts of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

        .. versionadded:: 1.1

    n_iter_ : list of shape (n_components,)
        Number of iterations of the power method, for each
        component.

    n_features_in_ : int
        Number of features seen during :term:`fit`.

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    PLSCanonical : Partial Least Squares transformer and regressor.

    Examples
    --------
    >>> from sklearn.cross_decomposition import PLSRegression
    >>> X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [2.,5.,4.]]
    >>> y = [[0.1, -0.2], [0.9, 1.1], [6.2, 5.9], [11.9, 12.3]]
    >>> pls2 = PLSRegression(n_components=2)
    >>> pls2.fit(X, y)
    PLSRegression()
    >>> Y_pred = pls2.predict(X)

    For a comparison between PLS Regression and :class:`~sklearn.decomposition.PCA`, see
    :ref:`sphx_glr_auto_examples_cross_decomposition_plot_pcr_vs_pls.py`.
    r“   ©r�   rR   r‘   r   Tr:   r;   ©rq   rS   rT   r’   c          
      óZ   •— t          ¦   «                              ||ddd|||¬¦  «         d S )Nr‹   r9   r�   rŽ   ©Úsuperr–   ©r•   r�   rq   rS   rT   r’   Ú	__class__s         €r6   r–   zPLSRegression.__init__   sH   ø€ õ 	‰Œ×ÒØ%ØØ'ØØØØØð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r8   Nc                 óœ   •— t          ||¦  «        }t          ¦   «                              ||¦  «         | j        | _        | j        | _        | S )rš   )r„   r÷   rÐ   r´   Ú	x_scores_rµ   Ú	y_scores_)r•   rP   r�   rQ   rù   s       €r6   rÐ   zPLSRegression.fit®  sC   ø€ õ2 ' q¨!Ñ,Ô,ˆå‰Œ�Š�A�qÑÔÐàœˆŒØœˆŒØˆr8   rè   ré   )rë   rì   rí   rî   r†   r“   rï   rð   ÚparamÚpopr–   rÐ   Ú__classcell__©rù   s   @r6   r   r   .  sÄ   ø€ € € € € € ðeð eðN $C dÔ&AÐ#BÐ˜DÐBÐBÑBØ8ð *ð *ˆØ×"Ò" 5Ñ)Ô)Ð)Ð)ð ð
Ø'+°c¸uÈ4ð
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð ð r8   r   c                   ó†   ‡ — e Zd ZU dZi ej        ¥Zeed<   dD ]Ze 	                    e¦  «         Œ	 ddddddd	œˆ fd
„Z
ˆ xZS )r   a^  Partial Least Squares transformer and regressor.

    For a comparison between other cross decomposition algorithms, see
    :ref:`sphx_glr_auto_examples_cross_decomposition_plot_compare_cross_decomposition.py`.

    Read more in the :ref:`User Guide <cross_decomposition>`.

    .. versionadded:: 0.8

    Parameters
    ----------
    n_components : int, default=2
        Number of components to keep. Should be in `[1, min(n_samples,
        n_features, n_targets)]`.

    scale : bool, default=True
        Whether to scale `X` and `Y`.

    algorithm : {'nipals', 'svd'}, default='nipals'
        The algorithm used to estimate the first singular vectors of the
        cross-covariance matrix. 'nipals' uses the power method while 'svd'
        will compute the whole SVD.

    max_iter : int, default=500
        The maximum number of iterations of the power method when
        `algorithm='nipals'`. Ignored otherwise.

    tol : float, default=1e-06
        The tolerance used as convergence criteria in the power method: the
        algorithm stops whenever the squared norm of `u_i - u_{i-1}` is less
        than `tol`, where `u` corresponds to the left singular vector.

    copy : bool, default=True
        Whether to copy `X` and `Y` in fit before applying centering, and
        potentially scaling. If False, these operations will be done inplace,
        modifying both arrays.

    Attributes
    ----------
    x_weights_ : ndarray of shape (n_features, n_components)
        The left singular vectors of the cross-covariance matrices of each
        iteration.

    y_weights_ : ndarray of shape (n_targets, n_components)
        The right singular vectors of the cross-covariance matrices of each
        iteration.

    x_loadings_ : ndarray of shape (n_features, n_components)
        The loadings of `X`.

    y_loadings_ : ndarray of shape (n_targets, n_components)
        The loadings of `Y`.

    x_rotations_ : ndarray of shape (n_features, n_components)
        The projection matrix used to transform `X`.

    y_rotations_ : ndarray of shape (n_targets, n_components)
        The projection matrix used to transform `Y`.

    coef_ : ndarray of shape (n_targets, n_features)
        The coefficients of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

    intercept_ : ndarray of shape (n_targets,)
        The intercepts of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

        .. versionadded:: 1.1

    n_iter_ : list of shape (n_components,)
        Number of iterations of the power method, for each
        component. Empty if `algorithm='svd'`.

    n_features_in_ : int
        Number of features seen during :term:`fit`.

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    CCA : Canonical Correlation Analysis.
    PLSSVD : Partial Least Square SVD.

    Examples
    --------
    >>> from sklearn.cross_decomposition import PLSCanonical
    >>> X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [2.,5.,4.]]
    >>> y = [[0.1, -0.2], [0.9, 1.1], [6.2, 5.9], [11.9, 12.3]]
    >>> plsca = PLSCanonical(n_components=2)
    >>> plsca.fit(X, y)
    PLSCanonical()
    >>> X_c, y_c = plsca.transform(X, y)
    r“   )r�   rR   r   Tr�   r:   r;   )rq   r‘   rS   rT   r’   c          
      óZ   •— t          ¦   «                              ||dd||||¬¦  «         d S )NrŒ   r9   rŽ   rö   )r•   r�   rq   r‘   rS   rT   r’   rù   s          €r6   r–   zPLSCanonical.__init__?  sH   ø€ õ 	‰Œ×ÒØ%ØØ&ØØØØØð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r8   rè   ©rë   rì   rí   rî   r†   r“   rï   rð   rý   rþ   r–   rÿ   r   s   @r6   r   r   Ð  s®   ø€ € € € € € ð`ð `ðD $C dÔ&AÐ#BÐ˜DÐBÐBÑBØ+ð *ð *ˆØ×"Ò" 5Ñ)Ô)Ð)Ð)ð ð
ð ØØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   r   c                   ó„   ‡ — e Zd ZU dZi ej        ¥Zeed<   dD ]Ze 	                    e¦  «         Œ	 d
dddddœˆ fd	„Z
ˆ xZS )ÚCCAa  Canonical Correlation Analysis, also known as "Mode B" PLS.

    For a comparison between other cross decomposition algorithms, see
    :ref:`sphx_glr_auto_examples_cross_decomposition_plot_compare_cross_decomposition.py`.

    Read more in the :ref:`User Guide <cross_decomposition>`.

    Parameters
    ----------
    n_components : int, default=2
        Number of components to keep. Should be in `[1, min(n_samples,
        n_features, n_targets)]`.

    scale : bool, default=True
        Whether to scale `X` and `Y`.

    max_iter : int, default=500
        The maximum number of iterations of the power method.

    tol : float, default=1e-06
        The tolerance used as convergence criteria in the power method: the
        algorithm stops whenever the squared norm of `u_i - u_{i-1}` is less
        than `tol`, where `u` corresponds to the left singular vector.

    copy : bool, default=True
        Whether to copy `X` and `Y` in fit before applying centering, and
        potentially scaling. If False, these operations will be done inplace,
        modifying both arrays.

    Attributes
    ----------
    x_weights_ : ndarray of shape (n_features, n_components)
        The left singular vectors of the cross-covariance matrices of each
        iteration.

    y_weights_ : ndarray of shape (n_targets, n_components)
        The right singular vectors of the cross-covariance matrices of each
        iteration.

    x_loadings_ : ndarray of shape (n_features, n_components)
        The loadings of `X`.

    y_loadings_ : ndarray of shape (n_targets, n_components)
        The loadings of `Y`.

    x_rotations_ : ndarray of shape (n_features, n_components)
        The projection matrix used to transform `X`.

    y_rotations_ : ndarray of shape (n_targets, n_components)
        The projection matrix used to transform `Y`.

    coef_ : ndarray of shape (n_targets, n_features)
        The coefficients of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

    intercept_ : ndarray of shape (n_targets,)
        The intercepts of the linear model such that `Y` is approximated as
        `Y = X @ coef_.T + intercept_`.

        .. versionadded:: 1.1

    n_iter_ : list of shape (n_components,)
        Number of iterations of the power method, for each
        component.

    n_features_in_ : int
        Number of features seen during :term:`fit`.

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    PLSCanonical : Partial Least Squares transformer and regressor.
    PLSSVD : Partial Least Square SVD.

    Examples
    --------
    >>> from sklearn.cross_decomposition import CCA
    >>> X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [3.,5.,4.]]
    >>> y = [[0.1, -0.2], [0.9, 1.1], [6.2, 5.9], [11.9, 12.3]]
    >>> cca = CCA(n_components=1)
    >>> cca.fit(X, y)
    CCA(n_components=1)
    >>> X_c, Y_c = cca.transform(X, y)
    r“   ró   r   Tr:   r;   rô   c          
      óZ   •— t          ¦   «                              ||ddd|||¬¦  «         d S )NrŒ   rF   r�   rŽ   rö   rø   s         €r6   r–   zCCA.__init__´  sH   ø€ õ 	‰Œ×ÒØ%ØØ&ØØØØØð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r8   rè   r  r   s   @r6   r  r  U  s¦   ø€ € € € € € ðXð Xðt $C dÔ&AÐ#BÐ˜DÐBÐBÑBØ8ð *ð *ˆØ×"Ò" 5Ñ)Ô)Ð)Ð)ð ð
Ø'+°c¸uÈ4ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   r  c                   ó–   — e Zd ZU dZ eeddd¬¦  «        gdgdgdœZeed<   dd
d
dœd„Z	 e
d
¬¦  «        dd„¦   «         Zdd„Zdd„ZdS )r   a¹  Partial Least Square SVD.

    This transformer simply performs a SVD on the cross-covariance matrix
    `X'Y`. It is able to project both the training data `X` and the targets
    `Y`. The training data `X` is projected on the left singular vectors, while
    the targets are projected on the right singular vectors.

    Read more in the :ref:`User Guide <cross_decomposition>`.

    .. versionadded:: 0.8

    Parameters
    ----------
    n_components : int, default=2
        The number of components to keep. Should be in `[1,
        min(n_samples, n_features, n_targets)]`.

    scale : bool, default=True
        Whether to scale `X` and `Y`.

    copy : bool, default=True
        Whether to copy `X` and `Y` in fit before applying centering, and
        potentially scaling. If `False`, these operations will be done inplace,
        modifying both arrays.

    Attributes
    ----------
    x_weights_ : ndarray of shape (n_features, n_components)
        The left singular vectors of the SVD of the cross-covariance matrix.
        Used to project `X` in :meth:`transform`.

    y_weights_ : ndarray of (n_targets, n_components)
        The right singular vectors of the SVD of the cross-covariance matrix.
        Used to project `X` in :meth:`transform`.

    n_features_in_ : int
        Number of features seen during :term:`fit`.

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    PLSCanonical : Partial Least Squares transformer and regressor.
    CCA : Canonical Correlation Analysis.

    Examples
    --------
    >>> import numpy as np
    >>> from sklearn.cross_decomposition import PLSSVD
    >>> X = np.array([[0., 0., 1.],
    ...               [1., 0., 0.],
    ...               [2., 2., 2.],
    ...               [2., 5., 4.]])
    >>> y = np.array([[0.1, -0.2],
    ...               [0.9, 1.1],
    ...               [6.2, 5.9],
    ...               [11.9, 12.3]])
    >>> pls = PLSSVD(n_components=2).fit(X, y)
    >>> X_c, y_c = pls.transform(X, y)
    >>> X_c.shape, y_c.shape
    ((4, 2), (4, 2))
    rG   Nr‡   rˆ   rŠ   ©r�   rq   r’   r“   r   T)rq   r’   c                ó0   — || _         || _        || _        d S r>   r  )r•   r�   rq   r’   s       r6   r–   zPLSSVD.__init__  s   € Ø(ˆÔØˆŒ
ØˆŒ	ˆ	ˆ	r8   r—   c                 ó:  — t          ||¦  «        }t          ||¦  «         |                      |t          j        d| j        d¬¦  «        }t          |dt          j        d| j        d¬¦  «        }|j        dk    r|                     dd¦  «        }| j	        }t          |j        d	         |j        d         |j        d         ¦  «        }||k    rt          d
|› d|› d�¦  «        ‚t          ||| j        ¦  «        \  }}| _        | _        | _        | _        t          j        |j        |¦  «        }t+          |d¬¦  «        \  }}}	|dd…d|…f         }|	d|…         }	t-          ||	¦  «        \  }}	|	j        }
|| _        |
| _        | j        j        d         | _        | S )a  Fit model to data.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Training samples.

        y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Targets.

        Y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Targets.

            .. deprecated:: 1.5
               `Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.

        Returns
        -------
        self : object
            Fitted estimator.
        Tr   r›   r�   Frž   rG   r¡   r   r¢   r£   r¤   rc   N)r„   r   r¦   r&   r§   r’   r   r¨   rª   r�   r«   rM   r   rv   rq   r­   r®   r¯   r°   r-   rI   r   r   r²   r³   rÁ   )r•   rP   r�   rQ   r�   rÅ   rd   re   r0   rg   ÚVs              r6   rÐ   z
PLSSVD.fit  sÒ  € õ. ' q¨!Ñ,Ô,ˆÝ  1Ñ%Ô%Ð%Ø×ÒØÝ”*Ø Ø”Ø ð  ñ 
ô 
ˆõ ØØÝ”*Ø Ø”Øð
ñ 
ô 
ˆð Œ6�QŠ;ˆ;Ø—	’	˜"˜aÑ Ô ˆAð
 Ô(ˆÝ˜qœw qœz¨1¬7°1¬:°q´w¸q´zÑBÔBÐØÐ*Ò*Ð*ÝðFÐ1Að Fð FØ#ðFð Fð Fñô ð õ
 FVØˆq�$”*ñF
ô F
ÑBˆˆ1ˆdŒl˜DœL¨$¬+°t´{õ
 ŒF�1”3˜‰NŒNˆÝ�q¨Ð.Ñ.Ô.‰ˆˆ1ˆbØˆaˆaˆa��,�ÐÔˆØ���ÔˆÝ˜˜B‘”‰ˆˆ2ØŒDˆàˆŒØˆŒØ#œÔ4°QÔ7ˆÔØˆr8   c                 óÀ  — t          ||¦  «        }t          | ¦  «         |                      |t          j        d¬¦  «        }|| j        z
  | j        z  }t          j        || j        ¦  «        }|�nt          |ddt          j        ¬¦  «        }|j
        dk    r|                     dd¦  «        }|| j        z
  | j        z  }t          j        || j        ¦  «        }||fS |S )aú  
        Apply the dimensionality reduction.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Samples to be transformed.

        y : array-like of shape (n_samples,) or (n_samples, n_targets),                 default=None
            Targets.

        Y : array-like of shape (n_samples,) or (n_samples, n_targets),                 default=None
            Targets.

            .. deprecated:: 1.5
               `Y` is deprecated in 1.5 and will be removed in 1.7. Use `y` instead.

        Returns
        -------
        x_scores : array-like or tuple of array-like
            The transformed data `X_transformed` if `Y is not None`,
            `(X_transformed, Y_transformed)` otherwise.
        F)r#   rÓ   Nr�   )rŸ   r    r#   rG   r¡   )r‚   r   r¦   r&   r§   r­   r¯   r-   r²   r   r¨   rª   r®   r°   r³   )r•   rP   r�   rQ   ÚXrrË   ÚyrrÍ   s           r6   rÔ   zPLSSVD.transformY  sÔ   € õ4 ' q¨!Ñ,Ô,ˆÝ˜ÑÔÐØ×Ò ­¬¸5ÐÑAÔAˆØ�$”,Ñ $¤+Ñ-ˆÝ”6˜"˜dœoÑ.Ô.ˆØˆ=Ý˜A¨#¸ÅbÄjÐQÑQÔQˆAØŒv˜Š{ˆ{Ø—I’I˜b !Ñ$Ô$�Ø�d”lÑ" d¤kÑ1ˆBÝ”v˜b $¤/Ñ2Ô2ˆHØ˜XÐ%Ð%Øˆr8   c                 óV   — |                       ||¦  «                             ||¦  «        S )aü  Learn and apply the dimensionality reduction.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Training samples.

        y : array-like of shape (n_samples,) or (n_samples, n_targets),                 default=None
            Targets.

        Returns
        -------
        out : array-like or tuple of array-like
            The transformed data `X_transformed` if `Y is not None`,
            `(X_transformed, Y_transformed)` otherwise.
        rß   rà   s      r6   rá   zPLSSVD.fit_transform�  râ   r8   rè   ré   r>   )rë   rì   rí   rî   r   r   r“   rï   rð   r–   r   rÐ   rÔ   rá   ræ   r8   r6   r   r   Ã  sä   € € € € € € ðAð AðH "˜ (¨A¨t¸FÐCÑCÔCÐDØ�Ø�ð$ð $Ð˜Dð ð ñ ð°¸4ð ð ð ð ð ð
 €\°Ð5Ñ5Ô5ðDð Dð Dñ 6Ô5ðDðL&ð &ð &ð &ðP.ð .ð .ð .ð .ð .r8   r   )r9   r:   r;   Frê   )2rî   rN   Úabcr   r   Únumbersr   r   Únumpyr&   Úscipy.linalgr   Úbaser	   r
   r   r   r   r   Ú
exceptionsr   Úutilsr   r   Úutils._param_validationr   r   Úutils.extmathr   Úutils.fixesr   r   Úutils.validationr   r   Ú__all__r   r   r7   ra   rh   rv   r|   r‚   r„   r†   r   r   r  r   ræ   r8   r6   ú<module>r     s)  ððð ð €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø $Ð $Ð $Ð $Ð $Ð $Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à
5Ð
5Ð
5€ð ��˜uÑ%Ô%Ò%Ð%ð +Ð*Ð*Ð*Ð*Ð*Ð*à"Ð"Ð"Ð"Ð"Ð"ð<ð <ð <ð& =Bð8(ð 8(ð 8(ð 8(ðvð ð ð.ð .ð .ð .ð4ð ð ðð ð ð,ð ,ð ,ðq9ð q9ð q9ð q9ð q9Ø#ØØØØØðq9ñ q9ô q9ð q9ðh_ð _ð _ð _ð _�Dñ _ô _ð _ðDB
ð B
ð B
ð B
ð B
�4ñ B
ô B
ð B
ðJk
ð k
ð k
ð k
ð k
ˆ$ñ k
ô k
ð k
ð\P.ð P.ð P.ð P.ð P.Ð,Ð.>Àñ P.ô P.ð P.ð P.ð P.r8   