Ë
    ÷Q(h¿ý  ã                   ó  — d Z ddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZmZmZmZmZ g d¢Zd;d„Z	 d<d„Z edgdgddg eddh«      dgdœd¬«      dddœd„«       Z edgdgddg eeddd¬«      g eddh«      dgdœd¬«      ddddœd„«       Z  edgdgddg eddh«      dgdœd¬«      dddœd„«       Z! edgdgddg eddh«      dgdœd¬«      dddœd„«       Z" edgdgddg eddh«      dgdœd¬«      dddœd„«       Z# edgdgddg eddh«      dgdœd¬«      dddœd „«       Z$ edgdgddg eddh«      dgdœd¬«      dddœd!„«       Z% edgdg eddh«      dgddgd"œd¬«      ddd#œd$„«       Z&d%„ Z' edgdgddg eh d&£«      dgd'gd(œd¬«      dddd)œd*„«       Z( edgdgddg eh d&£«      ddgd'gd(œd¬«      dddd)œd+„«       Z) edgdgd,œd¬«      d-„ «       Z*d.„ Z+ edgdgddg eeddd/¬«       eeddd0¬«      gd1œd¬«      ddd2œd3„«       Z, edgdgddgd4œd¬«      dd5œd6„«       Z- edgdgddgd4œd¬«      dd5œd7„«       Z. edgdgddg eeddd/¬«       eeddd0¬«      gd1œd¬«      ddd2œd8„«       Z/ edgdgddg eeddd¬«      g eddh«      dgdœd¬«      ddddœd9„«       Z0 edgdgddg eddh«      dgdœd¬«      dddœd:„«       Z1y)=zòMetrics to assess performance on regression task.

Functions named as ``*_score`` return a scalar value to maximize: the higher
the better.

Function named as ``*_error`` or ``*_loss`` return a scalar value to minimize:
the lower the better.
é    N)ÚReal)Úxlogyé   )ÚUndefinedMetricWarning)Ú_averageÚ_find_matching_floating_dtypeÚget_namespaceÚget_namespace_and_deviceÚsize)ÚIntervalÚ
StrOptionsÚvalidate_params)Ú_weighted_percentile)Ú_check_sample_weightÚ_num_samplesÚcheck_arrayÚcheck_consistent_lengthÚcolumn_or_1d)Ú	max_errorÚmean_absolute_errorÚmean_squared_errorÚmean_squared_log_errorÚmedian_absolute_errorÚmean_absolute_percentage_errorÚmean_pinball_lossÚr2_scoreÚroot_mean_squared_log_errorÚroot_mean_squared_errorÚexplained_variance_scoreÚmean_tweedie_devianceÚmean_poisson_devianceÚmean_gamma_devianceÚd2_tweedie_scoreÚd2_pinball_scoreÚd2_absolute_error_scorec                 óà  — t        | |||¬«      \  }}t        | |«       t        | d|¬«      } t        |d|¬«      }| j                  dk(  r|j	                  | d«      } |j                  dk(  r|j	                  |d«      }| j
                  d   |j
                  d   k7  r5t        dj                  | j
                  d   |j
                  d   «      «      ‚| j
                  d   }d}t        |t        «      r||vrkt        dj                  ||«      «      ‚|�Nt        |d¬	«      }|dk(  rt        d
«      ‚||j
                  d   k7  rt        d|j
                  d   › d|› d�«      ‚|dk(  rdnd}|| ||fS )aY  Check that y_true and y_pred belong to the same regression task.

    To reduce redundancy when calling `_find_matching_floating_dtype`,
    please use `_check_reg_targets_with_floating_dtype` instead.

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    multioutput : array-like or string in ['raw_values', uniform_average',
        'variance_weighted'] or None
        None is accepted due to backward compatibility of r2_score().

    dtype : str or list, default="numeric"
        the dtype argument passed to check_array.

    xp : module, default=None
        Precomputed array namespace module. When passed, typically from a caller
        that has already performed inspection of its own inputs, skips array
        namespace inspection.

    Returns
    -------
    type_true : one of {'continuous', continuous-multioutput'}
        The type of the true target data, as output by
        'utils.multiclass.type_of_target'.

    y_true : array-like of shape (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples, n_outputs)
        Estimated target values.

    multioutput : array-like of shape (n_outputs) or string in ['raw_values',
        uniform_average', 'variance_weighted'] or None
        Custom output weights if ``multioutput`` is array-like or
        just the corresponding argument if ``multioutput`` is a
        correct keyword.
    ©ÚxpF)Ú	ensure_2dÚdtypeé   )éÿÿÿÿr+   z<y_true and y_pred have different number of output ({0}!={1}))Ú
raw_valuesÚuniform_averageÚvariance_weightedzIAllowed 'multioutput' string values are {}. You provided multioutput={!r})r)   z5Custom weights are useful only in multi-output cases.r   z+There must be equally many custom weights (z) as outputs (z).Ú
continuousúcontinuous-multioutput)
r	   r   r   ÚndimÚreshapeÚshapeÚ
ValueErrorÚformatÚ
isinstanceÚstr)	Úy_trueÚy_predÚmultioutputr*   r(   Ú_Ú	n_outputsÚallowed_multioutput_strÚy_types	            úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/_regression.pyÚ_check_reg_targetsrA   :   s’  € ôX ˜& &¨+¸"Ô=�E€Bˆä˜F FÔ+Ü˜¨5¸Ô>€FÜ˜¨5¸Ô>€Fà‡{�{�aÒØ—‘˜F GÓ,ˆà‡{�{�aÒØ—‘˜F GÓ,ˆà‡|�|�A�˜&Ÿ,™, q™/Ò)ÜØJ×QÑQØ—‘˜Q‘ §¡¨a¡óó
ð 	
ð —‘˜Q‘€IØTÐÜ�+œsÔ#ØÐ5Ñ5Üð0ß06±Ø+¨[ó1óð ð 
Ð	 Ü! +¸Ô?ˆØ˜Š>ÜÐTÓUÐUØ˜+×+Ñ+¨AÑ.Ò.ÜðØ×%Ñ% aÑ(Ð)¨¸	°{À"ðFóð ð '¨!š^‰\Ð1I€Fà�6˜6 ;Ð.Ð.ó    c                 ó‚   — t        | |||¬«      }t        | ||||¬«      \  }} }}|�|j                  ||¬«      }|| |||fS )a  Ensures that y_true, y_pred, and sample_weight correspond to the same
    regression task.

    Extends `_check_reg_targets` by automatically selecting a suitable floating-point
    data type for inputs using `_find_matching_floating_dtype`.

    Use this private method only when converting inputs to array API-compatibles.

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,)

    multioutput : array-like or string in ['raw_values', 'uniform_average',         'variance_weighted'] or None
        None is accepted due to backward compatibility of r2_score().

    xp : module, default=None
        Precomputed array namespace module. When passed, typically from a caller
        that has already performed inspection of its own inputs, skips array
        namespace inspection.

    Returns
    -------
    type_true : one of {'continuous', 'continuous-multioutput'}
        The type of the true target data, as output by
        'utils.multiclass.type_of_target'.

    y_true : array-like of shape (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : array-like of shape (n_outputs) or string in ['raw_values',         'uniform_average', 'variance_weighted'] or None
        Custom output weights if ``multioutput`` is array-like or
        just the corresponding argument if ``multioutput`` is a
        correct keyword.
    r'   )r*   r(   ©r*   )r   rA   Úasarray)r9   r:   Úsample_weightr;   r(   Ú
dtype_namer?   s          r@   Ú&_check_reg_targets_with_floating_dtyperH   ‘   s_   € ôf /¨v°v¸}ÐQSÔT€Jä*<Ø�˜¨:¸"ô+Ñ'€FˆF�F˜Kð Ð ØŸ
™
 =¸
˜
ÓCˆà�6˜6 =°+Ð=Ð=rB   z
array-liker-   r.   ©r9   r:   rF   r;   T)Úprefer_skip_nested_validation©rF   r;   c                ó  — t        | |||«      \  }}t        | ||||¬«      \  }} }}}t        | ||«       t        |j	                  || z
  «      |d|¬«      }t        |t        «      r|dk(  r|S |dk(  rd}t        ||¬«      }t        |«      S )a  Mean absolute error regression loss.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'}  or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or array of floats
        If multioutput is 'raw_values', then mean absolute error is returned
        for each output separately.
        If multioutput is 'uniform_average' or an ndarray of weights, then the
        weighted average of all output errors is returned.

        MAE output is non-negative floating point. The best value is 0.0.

    Examples
    --------
    >>> from sklearn.metrics import mean_absolute_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> mean_absolute_error(y_true, y_pred)
    0.5
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> mean_absolute_error(y_true, y_pred)
    0.75
    >>> mean_absolute_error(y_true, y_pred, multioutput='raw_values')
    array([0.5, 1. ])
    >>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
    0.85...
    r'   r   )ÚweightsÚaxisr(   r-   r.   N©rM   )r	   rH   r   r   Úabsr7   r8   Úfloat)r9   r:   rF   r;   r(   r<   Úoutput_errorsr   s           r@   r   r   Ò   s®   € ô@ ˜& &¨-¸ÓE�E€Bˆô 	/Ø�F˜M¨;¸2ô	
ñ 2€A€vˆv�} kô ˜F F¨MÔ:äØ
�‰ˆv˜‰Ó¨¸QÀ2ô€Mô �+œsÔ#Ø˜,Ò&Ø Ð ØÐ-Ò-àˆKô # =¸+ÔFÐäÐ$Ó%Ð%rB   r+   Úboth)Úclosed)r9   r:   rF   Úalphar;   ç      à?©rF   rU   r;   c                ón  — t        | ||«      \  }} }}t        | ||«       | |z
  }|dk\  j                  |j                  «      }||z  |z  d|z
  d|z
  z  |z  z
  }t	        j
                  ||d¬«      }	t        |t        «      r|dk(  r|	S t        |t        «      r|dk(  rd}t	        j
                  |	|¬«      S )a"  Pinball loss for quantile regression.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    alpha : float, slope of the pinball loss, default=0.5,
        This loss is equivalent to :ref:`mean_absolute_error` when `alpha=0.5`,
        `alpha=0.95` is minimized by estimators of the 95th percentile.

    multioutput : {'raw_values', 'uniform_average'}  or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or ndarray of floats
        If multioutput is 'raw_values', then mean absolute error is returned
        for each output separately.
        If multioutput is 'uniform_average' or an ndarray of weights, then the
        weighted average of all output errors is returned.

        The pinball loss output is a non-negative floating point. The best
        value is 0.0.

    Examples
    --------
    >>> from sklearn.metrics import mean_pinball_loss
    >>> y_true = [1, 2, 3]
    >>> mean_pinball_loss(y_true, [0, 2, 3], alpha=0.1)
    np.float64(0.03...)
    >>> mean_pinball_loss(y_true, [1, 2, 4], alpha=0.1)
    np.float64(0.3...)
    >>> mean_pinball_loss(y_true, [0, 2, 3], alpha=0.9)
    np.float64(0.3...)
    >>> mean_pinball_loss(y_true, [1, 2, 4], alpha=0.9)
    np.float64(0.03...)
    >>> mean_pinball_loss(y_true, y_true, alpha=0.1)
    np.float64(0.0)
    >>> mean_pinball_loss(y_true, y_true, alpha=0.9)
    np.float64(0.0)
    r   r+   ©rM   rN   r-   r.   NrO   )rA   r   Úastyper*   ÚnpÚaverager7   r8   )
r9   r:   rF   rU   r;   r?   ÚdiffÚsignÚlossrR   s
             r@   r   r   0  sÄ   € ôN +=Ø�˜ó+Ñ'€FˆF�F˜Kô ˜F F¨MÔ:Ø�F‰?€DØ�A‰I×Ñ˜dŸj™jÓ)€DØ�4‰<˜$Ñ ! e¡)°°D±Ñ!9¸DÑ!@Ñ@€DÜ—J‘J˜t¨]ÀÔC€Mä�+œsÔ#¨°|Ò(CØÐä�+œsÔ#¨Ð7HÒ(Hàˆä�:‰:�m¨[Ô9Ð9rB   c                óâ  — t        | |||«      \  }}t        | ||||¬«      \  }} }}}t        | ||«       |j                  |j	                  |j
                  «      j                  | j                  ¬«      }|j                  | «      }|j                  || z
  «      |j                  ||«      z  }t        ||d¬«      }	t        |t        «      r|dk(  r|	S |dk(  rd}t        |	|¬«      }
t        |
«      S )	a
  Mean absolute percentage error (MAPE) regression loss.

    Note that we are not using the common "percentage" definition: the percentage
    in the range [0, 100] is converted to a relative value in the range [0, 1]
    by dividing by 100. Thus, an error of 200% corresponds to a relative error of 2.

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

    .. versionadded:: 0.24

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.
        If input is list then the shape must be (n_outputs,).

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or ndarray of floats
        If multioutput is 'raw_values', then mean absolute percentage error
        is returned for each output separately.
        If multioutput is 'uniform_average' or an ndarray of weights, then the
        weighted average of all output errors is returned.

        MAPE output is non-negative floating point. The best value is 0.0.
        But note that bad predictions can lead to arbitrarily large
        MAPE values, especially if some `y_true` values are very close to zero.
        Note that we return a large value instead of `inf` when `y_true` is zero.

    Examples
    --------
    >>> from sklearn.metrics import mean_absolute_percentage_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> mean_absolute_percentage_error(y_true, y_pred)
    0.3273...
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> mean_absolute_percentage_error(y_true, y_pred)
    0.5515...
    >>> mean_absolute_percentage_error(y_true, y_pred, multioutput=[0.3, 0.7])
    0.6198...
    >>> # the value when some element of the y_true is zero is arbitrarily high because
    >>> # of the division by epsilon
    >>> y_true = [1., 0., 2.4, 7.]
    >>> y_pred = [1.2, 0.1, 2.4, 8.]
    >>> mean_absolute_percentage_error(y_true, y_pred)
    112589990684262.48
    r'   rD   r   rY   r-   r.   NrO   )r	   rH   r   rE   ÚfinfoÚfloat64Úepsr*   rP   Úmaximumr   r7   r8   rQ   )r9   r:   rF   r;   r(   r<   ÚepsilonÚ
y_true_absÚmaperR   r   s              r@   r   r   Š  sð   € ôZ ˜& &¨-¸ÓE�E€Bˆä.Ø�F˜M¨;¸2ô	
ñ 2€A€vˆv�} kô
 ˜F F¨MÔ:Ø�j‰j˜Ÿ™ "§*¡*Ó-×1Ñ1¸¿¹ˆjÓF€GØ—‘˜“€JØ�6‰6�&˜6‘/Ó" R§Z¡Z°
¸GÓ%DÑD€DÜ˜T¨=¸qÔA€MÜ�+œsÔ#Ø˜,Ò&Ø Ð ØÐ-Ò-àˆKô &.¨mÀ[Ô%QÐ"äÐ/Ó0Ð0rB   c                óþ   — t        | |||«      \  }}t        | ||||¬«      \  }} }}}t        | ||«       t        | |z
  dz  d|¬«      }t	        |t
        «      r|dk(  r|S |dk(  rd}t        ||¬«      }t        |«      S )	aZ  Mean squared error regression loss.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or array of floats
        A non-negative floating point value (the best value is 0.0), or an
        array of floating point values, one for each individual target.

    Examples
    --------
    >>> from sklearn.metrics import mean_squared_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> mean_squared_error(y_true, y_pred)
    0.375
    >>> y_true = [[0.5, 1],[-1, 1],[7, -6]]
    >>> y_pred = [[0, 2],[-1, 2],[8, -5]]
    >>> mean_squared_error(y_true, y_pred)
    0.708...
    >>> mean_squared_error(y_true, y_pred, multioutput='raw_values')
    array([0.41666667, 1.        ])
    >>> mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])
    0.825...
    r'   r   r   )rN   rM   r-   r.   NrO   )r	   rH   r   r   r7   r8   rQ   )r9   r:   rF   r;   r(   r<   rR   r   s           r@   r   r   ó  s¡   € ô@ ˜& &¨-¸ÓE�E€Bˆä.Ø�F˜M¨;¸2ô	
ñ 2€A€vˆv�} kô
 ˜F F¨MÔ:Ü˜f v™o°!Ñ3¸!À]ÔS€Mä�+œsÔ#Ø˜,Ò&Ø Ð ØÐ-Ò-àˆKô " -¸ÔEÐäÐ#Ó$Ð$rB   c                óÌ   — t        | |||«      \  }}|j                  t        | ||d¬«      «      }t        |t        «      r|dk(  r|S |dk(  rd}t        ||¬«      }t        |«      S )aÕ  Root mean squared error regression loss.

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

    .. versionadded:: 1.4

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or ndarray of floats
        A non-negative floating point value (the best value is 0.0), or an
        array of floating point values, one for each individual target.

    Examples
    --------
    >>> from sklearn.metrics import root_mean_squared_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> root_mean_squared_error(y_true, y_pred)
    0.612...
    >>> y_true = [[0.5, 1],[-1, 1],[7, -6]]
    >>> y_pred = [[0, 2],[-1, 2],[8, -5]]
    >>> root_mean_squared_error(y_true, y_pred)
    0.822...
    r-   rK   r.   NrO   )r	   Úsqrtr   r7   r8   r   rQ   )r9   r:   rF   r;   r(   r<   rR   r   s           r@   r   r   M  s{   € ôv ˜& &¨-¸ÓE�E€Bˆà—G‘GÜØ�F¨-À\ô	
ó€Mô �+œsÔ#Ø˜,Ò&Ø Ð ØÐ-Ò-àˆKô ' }¸kÔJÐäÐ(Ó)Ð)rB   c                ó  — t        | |«      \  }}t        | ||||¬«      \  }} }}}|j                  | dk  «      s|j                  |dk  «      rt        d«      ‚t	        |j                  | «      |j                  |«      ||¬«      S )aœ  Mean squared logarithmic error regression loss.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'

        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors when the input is of multioutput
            format.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or ndarray of floats
        A non-negative floating point value (the best value is 0.0), or an
        array of floating point values, one for each individual target.

    Examples
    --------
    >>> from sklearn.metrics import mean_squared_log_error
    >>> y_true = [3, 5, 2.5, 7]
    >>> y_pred = [2.5, 5, 4, 8]
    >>> mean_squared_log_error(y_true, y_pred)
    0.039...
    >>> y_true = [[0.5, 1], [1, 2], [7, 6]]
    >>> y_pred = [[0.5, 2], [1, 2.5], [8, 8]]
    >>> mean_squared_log_error(y_true, y_pred)
    0.044...
    >>> mean_squared_log_error(y_true, y_pred, multioutput='raw_values')
    array([0.00462428, 0.08377444])
    >>> mean_squared_log_error(y_true, y_pred, multioutput=[0.3, 0.7])
    0.060...
    r'   r,   zcMean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.rK   )r	   rH   Úanyr5   r   Úlog1p©r9   r:   rF   r;   r(   r<   s         r@   r   r   ¡  s•   € ôD ˜& &Ó)�E€BˆäDØ�˜ {°rôÑ€A€vˆv�q˜!ð 
‡v�vˆf˜‰lÔ˜rŸv™v f°¡lÔ3Üð?ó
ð 	
ô
 Ø
�‰�ÓØ
�‰�ÓØ#Øô	ð rB   c                ó  — t        | |«      \  }}t        | ||||¬«      \  }} }}}|j                  | dk  «      s|j                  |dk  «      rt        d«      ‚t	        |j                  | «      |j                  |«      ||¬«      S )ao  Root mean squared logarithmic error regression loss.

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

    .. versionadded:: 1.4

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'

        Defines aggregating of multiple output values.
        Array-like value defines weights used to average errors.

        'raw_values' :
            Returns a full set of errors when the input is of multioutput
            format.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    Returns
    -------
    loss : float or ndarray of floats
        A non-negative floating point value (the best value is 0.0), or an
        array of floating point values, one for each individual target.

    Examples
    --------
    >>> from sklearn.metrics import root_mean_squared_log_error
    >>> y_true = [3, 5, 2.5, 7]
    >>> y_pred = [2.5, 5, 4, 8]
    >>> root_mean_squared_log_error(y_true, y_pred)
    0.199...
    r'   r,   zhRoot Mean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.rK   )r	   rH   rl   r5   r   rm   rn   s         r@   r   r   ÷  s•   € ôp ˜& &Ó)�E€BˆäDØ�˜ {°rôÑ€A€vˆv�q˜!ð 
‡v�vˆf˜‰lÔ˜rŸv™v f°¡lÔ3Üð?ó
ð 	
ô
 #Ø
�‰�ÓØ
�‰�ÓØ#Øô	ð rB   )r9   r:   r;   rF   )r;   rF   c                óN  — t        | ||«      \  }} }}|€.t        j                  t        j                  || z
  «      d¬«      }n/t	        ||«      }t        t        j                  || z
  «      |¬«      }t        |t        «      r|dk(  r|S |dk(  rd}t        j                  ||¬«      S )aa  Median absolute error regression loss.

    Median absolute error output is non-negative floating point. The best value
    is 0.0. Read more in the :ref:`User Guide <median_absolute_error>`.

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values. Array-like value defines
        weights used to average errors.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Errors of all outputs are averaged with uniform weight.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

        .. versionadded:: 0.24

    Returns
    -------
    loss : float or ndarray of floats
        If multioutput is 'raw_values', then mean absolute error is returned
        for each output separately.
        If multioutput is 'uniform_average' or an ndarray of weights, then the
        weighted average of all output errors is returned.

    Examples
    --------
    >>> from sklearn.metrics import median_absolute_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> median_absolute_error(y_true, y_pred)
    np.float64(0.5)
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> median_absolute_error(y_true, y_pred)
    np.float64(0.75)
    >>> median_absolute_error(y_true, y_pred, multioutput='raw_values')
    array([0.5, 1. ])
    >>> median_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
    np.float64(0.85)
    Nr   ©rN   ©rF   r-   r.   rO   )	rA   r[   ÚmedianrP   r   r   r7   r8   r\   )r9   r:   r;   rF   r?   rR   s         r@   r   r   C  s¥   € ôB +=Ø�˜ó+Ñ'€FˆF�F˜Kð ÐÜŸ	™	¤"§&¡&¨°&©Ó"9ÀÔB‰ä,¨]¸FÓCˆÜ,Ü�F‰F�6˜F‘?Ó#°=ô
ˆô �+œsÔ#Ø˜,Ò&Ø Ð ØÐ-Ò-àˆKä�:‰:�m¨[Ô9Ð9rB   c                 ót  — | j                   }|dk7  }|s	d| |z  z
  }	n9| dk7  }
|j                  |g||¬«      }	||
z  }d| |   ||   z  z
  |	|<   d|	|
| z  <   t        |t        «      r*|dk(  r|	S |dk(  rd}n|dk(  r|}|j	                  |«      sd}n|}t        |	¬	«      }t        |«      dk(  rt        |«      S |S )
zCCommon part used by explained variance score and :math:`R^2` score.r   r+   )Údevicer*   ç        r-   r.   Nr/   rO   )r*   Úonesr7   r8   rl   r   r   rQ   )Ú	numeratorÚdenominatorr=   r;   Úforce_finiter(   ru   r*   Únonzero_denominatorÚoutput_scoresÚnonzero_numeratorÚvalid_scoreÚavg_weightsÚresults                 r@   Ú_assemble_r2_explained_variancer�   ˜  s  € ð �O‰O€Eà%¨Ñ*Ðáà˜Y¨Ñ4Ñ5‰à%¨™NÐð Ÿ™  °FÀ%˜ÓHˆà)Ð,=Ñ=ˆà%&Ø�kÑ" [°Ñ%=Ñ=ñ&
ˆ�kÑ"ð CFˆÐ'Ð+>Ð*>Ñ>Ñ?ä�+œsÔ#Ø˜,Ò&à Ð ØÐ-Ò-à‰KØÐ/Ò/Ø%ˆKØ—6‘6Ð-Ô.ð #‘à!ˆä�m¨[Ô9€FÜˆFƒ|�qÒÜ�V‹}ÐØ€MrB   >   r-   r.   r/   Úboolean)r9   r:   rF   r;   rz   )rF   r;   rz   c          
      óz  — t        | ||«      \  }} }}t        | ||«       t        j                  | |z
  |d¬«      }t        j                  | |z
  |z
  dz  |d¬«      }t        j                  | |d¬«      }t        j                  | |z
  dz  |d¬«      }	t	        ||	| j
                  d   ||t        | «      d   d¬«      S )a„  Explained variance regression score function.

    Best possible score is 1.0, lower values are worse.

    In the particular case when ``y_true`` is constant, the explained variance
    score is not finite: it is either ``NaN`` (perfect predictions) or
    ``-Inf`` (imperfect predictions). To prevent such non-finite numbers to
    pollute higher-level experiments such as a grid search cross-validation,
    by default these cases are replaced with 1.0 (perfect predictions) or 0.0
    (imperfect predictions) respectively. If ``force_finite``
    is set to ``False``, this score falls back on the original :math:`R^2`
    definition.

    .. note::
       The Explained Variance score is similar to the
       :func:`R^2 score <r2_score>`, with the notable difference that it
       does not account for systematic offsets in the prediction. Most often
       the :func:`R^2 score <r2_score>` should be preferred.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average', 'variance_weighted'} or             array-like of shape (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output scores.
        Array-like value defines weights used to average scores.

        'raw_values' :
            Returns a full set of scores in case of multioutput input.

        'uniform_average' :
            Scores of all outputs are averaged with uniform weight.

        'variance_weighted' :
            Scores of all outputs are averaged, weighted by the variances
            of each individual output.

    force_finite : bool, default=True
        Flag indicating if ``NaN`` and ``-Inf`` scores resulting from constant
        data should be replaced with real numbers (``1.0`` if prediction is
        perfect, ``0.0`` otherwise). Default is ``True``, a convenient setting
        for hyperparameters' search procedures (e.g. grid search
        cross-validation).

        .. versionadded:: 1.1

    Returns
    -------
    score : float or ndarray of floats
        The explained variance or ndarray if 'multioutput' is 'raw_values'.

    See Also
    --------
    r2_score :
        Similar metric, but accounting for systematic offsets in
        prediction.

    Notes
    -----
    This is not a symmetric function.

    Examples
    --------
    >>> from sklearn.metrics import explained_variance_score
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> explained_variance_score(y_true, y_pred)
    0.957...
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> explained_variance_score(y_true, y_pred, multioutput='uniform_average')
    0.983...
    >>> y_true = [-2, -2, -2]
    >>> y_pred = [-2, -2, -2]
    >>> explained_variance_score(y_true, y_pred)
    1.0
    >>> explained_variance_score(y_true, y_pred, force_finite=False)
    nan
    >>> y_true = [-2, -2, -2]
    >>> y_pred = [-2, -2, -2 + 1e-8]
    >>> explained_variance_score(y_true, y_pred)
    0.0
    >>> explained_variance_score(y_true, y_pred, force_finite=False)
    -inf
    r   rY   r   r+   N©rx   ry   r=   r;   rz   r(   ru   )rA   r   r[   r\   r�   r4   r	   )
r9   r:   rF   r;   rz   r?   Ú
y_diff_avgrx   Ú
y_true_avgry   s
             r@   r   r   Ê  sË   € ôh +=Ø�˜ó+Ñ'€FˆF�F˜Kô ˜F F¨MÔ:ä—‘˜F V™O°]ÈÔK€JÜ—
‘
Ø	�&‰˜:Ñ	%¨!Ñ+°]Èô€Iô —‘˜F¨MÀÔB€JÜ—*‘*˜f zÑ1°aÑ7ÀÐUVÔW€Kä*ØØØ—,‘,˜q‘/ØØ!Ü˜Ó  Ñ#àô	ð 	rB   c          
      óÐ  — t        | |||«      \  }}}t        | ||||¬«      \  }} }}}t        | ||«       t        |«      dk  r'd}t	        j
                  |t        «       t        d«      S |�t        |«      }|dd…df   }	nd}	|j                  |	| |z
  dz  z  d¬«      }
|j                  |	| t        | d||¬	«      z
  dz  z  d¬«      }t        |
|| j                  d
   ||||¬«      S )aX  :math:`R^2` (coefficient of determination) regression score function.

    Best possible score is 1.0 and it can be negative (because the
    model can be arbitrarily worse). In the general case when the true y is
    non-constant, a constant model that always predicts the average y
    disregarding the input features would get a :math:`R^2` score of 0.0.

    In the particular case when ``y_true`` is constant, the :math:`R^2` score
    is not finite: it is either ``NaN`` (perfect predictions) or ``-Inf``
    (imperfect predictions). To prevent such non-finite numbers to pollute
    higher-level experiments such as a grid search cross-validation, by default
    these cases are replaced with 1.0 (perfect predictions) or 0.0 (imperfect
    predictions) respectively. You can set ``force_finite`` to ``False`` to
    prevent this fix from happening.

    Note: when the prediction residuals have zero mean, the :math:`R^2` score
    is identical to the
    :func:`Explained Variance score <explained_variance_score>`.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average', 'variance_weighted'},             array-like of shape (n_outputs,) or None, default='uniform_average'

        Defines aggregating of multiple output scores.
        Array-like value defines weights used to average scores.
        Default is "uniform_average".

        'raw_values' :
            Returns a full set of scores in case of multioutput input.

        'uniform_average' :
            Scores of all outputs are averaged with uniform weight.

        'variance_weighted' :
            Scores of all outputs are averaged, weighted by the variances
            of each individual output.

        .. versionchanged:: 0.19
            Default value of multioutput is 'uniform_average'.

    force_finite : bool, default=True
        Flag indicating if ``NaN`` and ``-Inf`` scores resulting from constant
        data should be replaced with real numbers (``1.0`` if prediction is
        perfect, ``0.0`` otherwise). Default is ``True``, a convenient setting
        for hyperparameters' search procedures (e.g. grid search
        cross-validation).

        .. versionadded:: 1.1

    Returns
    -------
    z : float or ndarray of floats
        The :math:`R^2` score or ndarray of scores if 'multioutput' is
        'raw_values'.

    Notes
    -----
    This is not a symmetric function.

    Unlike most other scores, :math:`R^2` score may be negative (it need not
    actually be the square of a quantity R).

    This metric is not well-defined for single samples and will return a NaN
    value if n_samples is less than two.

    References
    ----------
    .. [1] `Wikipedia entry on the Coefficient of determination
            <https://en.wikipedia.org/wiki/Coefficient_of_determination>`_

    Examples
    --------
    >>> from sklearn.metrics import r2_score
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> r2_score(y_true, y_pred)
    0.948...
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> r2_score(y_true, y_pred,
    ...          multioutput='variance_weighted')
    0.938...
    >>> y_true = [1, 2, 3]
    >>> y_pred = [1, 2, 3]
    >>> r2_score(y_true, y_pred)
    1.0
    >>> y_true = [1, 2, 3]
    >>> y_pred = [2, 2, 2]
    >>> r2_score(y_true, y_pred)
    0.0
    >>> y_true = [1, 2, 3]
    >>> y_pred = [3, 2, 1]
    >>> r2_score(y_true, y_pred)
    -3.0
    >>> y_true = [-2, -2, -2]
    >>> y_pred = [-2, -2, -2]
    >>> r2_score(y_true, y_pred)
    1.0
    >>> r2_score(y_true, y_pred, force_finite=False)
    nan
    >>> y_true = [-2, -2, -2]
    >>> y_pred = [-2, -2, -2 + 1e-8]
    >>> r2_score(y_true, y_pred)
    0.0
    >>> r2_score(y_true, y_pred, force_finite=False)
    -inf
    r'   r   z9R^2 score is not well-defined with less than two samples.ÚnanNg      ð?r   rq   )rN   rM   r(   r+   r„   )r
   rH   r   r   ÚwarningsÚwarnr   rQ   r   Úsumr   r�   r4   )r9   r:   rF   r;   rz   r(   r<   Údevice_ÚmsgÚweightrx   ry   s               r@   r   r   W  s  € ôZ .Ø�˜ {ó�N€Bˆˆ7ô
 	/Ø�F˜M¨;¸2ô	
ñ 2€A€vˆv�} kô ˜F F¨MÔ:ä�FÓ˜aÒØIˆÜ�‰�cÔ1Ô2Ü�U‹|ÐàÐ Ü$ ]Ó3ˆØšq $˜wÑ'‰àˆà—‘�v ¨&¡°QÑ 6Ñ6¸Q�Ó?€IØ—&‘&Ø�&œ8 F°¸MÈbÔQÑQÐVWÑWÑWØð ó €Kô
 +ØØØ—,‘,˜q‘/ØØ!ØØôð rB   )r9   r:   c                 ó®   — t        | |«      \  }}t        | |d|¬«      \  }} }}|dk(  rt        d«      ‚|j                  |j	                  | |z
  «      «      S )al  
    The max_error metric calculates the maximum residual error.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,)
        Estimated target values.

    Returns
    -------
    max_error : float
        A positive floating point value (the best value is 0.0).

    Examples
    --------
    >>> from sklearn.metrics import max_error
    >>> y_true = [3, 2, 7, 1]
    >>> y_pred = [4, 2, 7, 1]
    >>> max_error(y_true, y_pred)
    np.int64(1)
    Nr'   r1   z&Multioutput not supported in max_error)r	   rA   r5   ÚmaxrP   )r9   r:   r(   r<   r?   s        r@   r   r     s_   € ôD ˜& &Ó)�E€BˆÜ 2°6¸6À4ÈBÔ OÑ€FˆF�F˜AØÐ)Ò)ÜÐAÓBÐBØ�6‰6�"—&‘&˜ &™Ó)Ó*Ð*rB   c           
      ó’  — t        | |«      \  }}|}|j                  d| j                  ¬«      }|dk  r¡d|j                  |j	                  | dkD  | |«      |j                  d|z
  «      «      d|z
  d|z
  z  z  | |j                  ||j                  d|z
  «      «      z  d|z
  z  z
  |j                  ||j                  d|z
  «      «      d|z
  z  z   z  }nÞ|dk(  r	| |z
  dz  }nÐ|dk(  rdt        | | |z  «      | z
  |z   z  }n²|dk(  r!d|j                  || z  «      | |z  z   dz
  z  }nŒd|j                  | |j                  d|z
  «      «      d|z
  d|z
  z  z  | |j                  ||j                  d|z
  «      «      z  d|z
  z  z
  |j                  ||j                  d|z
  «      «      d|z
  z  z   z  }t        t        ||¬«      «      S )z&Mean Tweedie deviance regression loss.r   rD   r   r+   rO   )	r	   rE   r*   ÚpowÚwherer   ÚlogrQ   r   )	r9   r:   rF   Úpowerr(   r<   ÚpÚzeroÚdevs	            r@   Ú_mean_tweedie_deviancer™   5  så  € ä˜& &Ó)�E€BˆØ€AØ�:‰:�a˜vŸ|™|ˆ:Ó,€DØˆ1‚uàØ�F‰F�2—8‘8˜F Q™J¨°Ó5°r·z±zÀ!ÀaÁ%Ó7HÓIØ�A‘˜!˜a™%Ñ ñ"à�r—v‘v˜f b§j¡j°°Q±Ó&7Ó8Ñ8¸AÀ¹EÑBñCð �f‰f�V˜RŸZ™Z¨¨A©Ó.Ó/°1°q±5Ñ9ñ:ñ
‰ð 
ˆaŠà˜‰ 1Ñ$‰Ø	
ˆaŠà”5˜ ¨&¡Ó1°FÑ:¸VÑCÑD‰Ø	
ˆaŠà�2—6‘6˜& 6™/Ó*¨V°f©_Ñ<¸qÑ@ÑA‰àØ�F‰F�6˜2Ÿ:™: a¨!¡eÓ,Ó-°!°a±%¸AÀ¹EÑ1BÑCØ�r—v‘v˜f b§j¡j°°Q±Ó&7Ó8Ñ8¸AÀ¹EÑBñCà�f‰f�V˜RŸZ™Z¨¨A©Ó.Ó/°1°q±5Ñ9ñ:ñ
ˆô
 ”˜# }Ô5Ó6Ð6rB   ÚrightÚleft)r9   r:   rF   r•   ©rF   r•   c                ó\  — t        | |«      \  }}t        | ||d|¬«      \  }} }}}|dk(  rt        d«      ‚t        | ||«       |�"t	        |«      }|dd…t
        j                  f   }d|› d�}|dk  r"|j                  |dk  «      r™t        |dz   «      ‚|dk(  rn…d	|cxk  rd
k  r9n n6|j                  | dk  «      s|j                  |dk  «      rOt        |dz   «      ‚|d
k\  r6|j                  | dk  «      s|j                  |dk  «      rt        |dz   «      ‚t        ‚t        | |||¬«      S )a[  Mean Tweedie deviance regression loss.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    power : float, default=0
        Tweedie power parameter. Either power <= 0 or power >= 1.

        The higher `p` the less weight is given to extreme
        deviations between true and predicted targets.

        - power < 0: Extreme stable distribution. Requires: y_pred > 0.
        - power = 0 : Normal distribution, output corresponds to
          mean_squared_error. y_true and y_pred can be any real numbers.
        - power = 1 : Poisson distribution. Requires: y_true >= 0 and
          y_pred > 0.
        - 1 < p < 2 : Compound Poisson distribution. Requires: y_true >= 0
          and y_pred > 0.
        - power = 2 : Gamma distribution. Requires: y_true > 0 and y_pred > 0.
        - power = 3 : Inverse Gaussian distribution. Requires: y_true > 0
          and y_pred > 0.
        - otherwise : Positive stable distribution. Requires: y_true > 0
          and y_pred > 0.

    Returns
    -------
    loss : float
        A non-negative floating point value (the best value is 0.0).

    Examples
    --------
    >>> from sklearn.metrics import mean_tweedie_deviance
    >>> y_true = [2, 0, 1, 4]
    >>> y_pred = [0.5, 0.5, 2., 2.]
    >>> mean_tweedie_deviance(y_true, y_pred, power=1)
    1.4260...
    N©r;   r(   r1   z2Multioutput not supported in mean_tweedie_deviancez'Mean Tweedie deviance error with power=z can only be used on r   zstrictly positive y_pred.r+   r   z,non-negative y and strictly positive y_pred.zstrictly positive y and y_pred.rœ   )	r	   rH   r5   r   r   r[   Únewaxisrl   r™   )r9   r:   rF   r•   r(   r<   r?   Úmessages           r@   r    r    T  sK  € ôx ˜& &Ó)�E€BˆÜ/UØ�˜°4¸Bô0Ñ,€FˆF�F˜M¨1ð Ð)Ò)ÜÐMÓNÐNÜ˜F F¨MÔ:àÐ Ü$ ]Ó3ˆØ%¢a¬¯© mÑ4ˆà7¸°wÐ>SÐT€GØˆq‚yà�6‰6�&˜A‘+ÔÜ˜WÐ'BÑBÓCÐCØ	�!ŠàØ	
ˆeŒ�a�à�6‰6�&˜1‘*Ô §¡¨°!©Ô!4Ü˜WÐ'UÑUÓVÐVØ	�!Šà�6‰6�&˜A‘+Ô "§&¡&¨°1©Ô"5Ü˜WÐ'HÑHÓIÐIô Ðä!Ø� m¸5ôð rB   ©r9   r:   rF   rr   c                ó    — t        | ||d¬«      S )ad  Mean Poisson deviance regression loss.

    Poisson deviance is equivalent to the Tweedie deviance with
    the power parameter `power=1`.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values. Requires y_true >= 0.

    y_pred : array-like of shape (n_samples,)
        Estimated target values. Requires y_pred > 0.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    Returns
    -------
    loss : float
        A non-negative floating point value (the best value is 0.0).

    Examples
    --------
    >>> from sklearn.metrics import mean_poisson_deviance
    >>> y_true = [2, 0, 1, 4]
    >>> y_pred = [0.5, 0.5, 2., 2.]
    >>> mean_poisson_deviance(y_true, y_pred)
    1.4260...
    r+   rœ   ©r    r¡   s      r@   r!   r!   µ  s   € ôP ! ¨¸}ÐTUÔVÐVrB   c                ó    — t        | ||d¬«      S )a²  Mean Gamma deviance regression loss.

    Gamma deviance is equivalent to the Tweedie deviance with
    the power parameter `power=2`. It is invariant to scaling of
    the target variable, and measures relative errors.

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

    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values. Requires y_true > 0.

    y_pred : array-like of shape (n_samples,)
        Estimated target values. Requires y_pred > 0.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    Returns
    -------
    loss : float
        A non-negative floating point value (the best value is 0.0).

    Examples
    --------
    >>> from sklearn.metrics import mean_gamma_deviance
    >>> y_true = [2, 0.5, 1, 4]
    >>> y_pred = [0.5, 0.5, 2., 2.]
    >>> mean_gamma_deviance(y_true, y_pred)
    1.0568...
    r   rœ   r£   r¡   s      r@   r"   r"   à  s   € ôR ! ¨¸}ÐTUÔVÐVrB   c                óŠ  — t        | |«      \  }}t        | ||d|¬«      \  }} }}}|dk(  rt        d«      ‚t        |«      dk  r'd}t	        j
                  |t        «       t        d«      S |j                  | d¬	«      |j                  |d¬	«      }} t        | |||¬
«      }t        | ||¬«      }	t        | |	||¬
«      }
d||
z  z
  S )a'
  
    :math:`D^2` regression score function, fraction of Tweedie deviance explained.

    Best possible score is 1.0 and it can be negative (because the model can be
    arbitrarily worse). A model that always uses the empirical mean of `y_true` as
    constant prediction, disregarding the input features, gets a D^2 score of 0.0.

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

    .. versionadded:: 1.0

    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    power : float, default=0
        Tweedie power parameter. Either power <= 0 or power >= 1.

        The higher `p` the less weight is given to extreme
        deviations between true and predicted targets.

        - power < 0: Extreme stable distribution. Requires: y_pred > 0.
        - power = 0 : Normal distribution, output corresponds to r2_score.
          y_true and y_pred can be any real numbers.
        - power = 1 : Poisson distribution. Requires: y_true >= 0 and
          y_pred > 0.
        - 1 < p < 2 : Compound Poisson distribution. Requires: y_true >= 0
          and y_pred > 0.
        - power = 2 : Gamma distribution. Requires: y_true > 0 and y_pred > 0.
        - power = 3 : Inverse Gaussian distribution. Requires: y_true > 0
          and y_pred > 0.
        - otherwise : Positive stable distribution. Requires: y_true > 0
          and y_pred > 0.

    Returns
    -------
    z : float or ndarray of floats
        The D^2 score.

    Notes
    -----
    This is not a symmetric function.

    Like R^2, D^2 score may be negative (it need not actually be the square of
    a quantity D).

    This metric is not well-defined for single samples and will return a NaN
    value if n_samples is less than two.

    References
    ----------
    .. [1] Eq. (3.11) of Hastie, Trevor J., Robert Tibshirani and Martin J.
           Wainwright. "Statistical Learning with Sparsity: The Lasso and
           Generalizations." (2015). https://hastie.su.domains/StatLearnSparsity/

    Examples
    --------
    >>> from sklearn.metrics import d2_tweedie_score
    >>> y_true = [0.5, 1, 2.5, 7]
    >>> y_pred = [1, 1, 5, 3.5]
    >>> d2_tweedie_score(y_true, y_pred)
    0.285...
    >>> d2_tweedie_score(y_true, y_pred, power=1)
    0.487...
    >>> d2_tweedie_score(y_true, y_pred, power=2)
    0.630...
    >>> d2_tweedie_score(y_true, y_true, power=2)
    1.0
    Nrž   r1   z-Multioutput not supported in d2_tweedie_scorer   ú9D^2 score is not well-defined with less than two samples.rˆ   r+   rq   rœ   )rM   r(   )r	   rH   r5   r   r‰   rŠ   r   rQ   Úsqueezer    r   r™   )r9   r:   rF   r•   r(   r<   r?   r�   rx   Úy_avgry   s              r@   r#   r#     sâ   € ôr ˜& &Ó)�E€Bˆä/UØ�˜°4¸Bô0Ñ,€FˆF�F˜M¨1ð Ð)Ò)ÜÐHÓIÐIä�FÓ˜aÒØIˆÜ�‰�cÔ1Ô2Ü�U‹|Ðà—Z‘Z ¨Q�ZÓ/°·±¸FÈ°Ó1KˆF€FÜ%Ø� m¸5ô€Iô �V ]°rÔ:€EÜ(Ø� ]¸%ô€Kð ˆy˜;Ñ&Ñ&Ð&rB   c                óØ  — t        | ||«      \  }} }}t        | ||«       t        |«      dk  r'd}t        j                  |t
        «       t        d«      S t        | |||d¬«      }|€;t        j                  t        j                  | |dz  d¬	«      t        | «      d
f«      }n<t        || «      }t        j                  t        | ||dz  ¬«      t        | «      d
f«      }t        | |||d¬«      }	|dk7  }
|	dk7  }|
|z  }t        j                  | j                  d
   «      }d
||   |	|   z  z
  ||<   d||
| z  <   t!        |t"        «      r
|dk(  r|S d}n|}t        j$                  ||¬«      S )uò
  
    :math:`D^2` regression score function, fraction of pinball loss explained.

    Best possible score is 1.0 and it can be negative (because the model can be
    arbitrarily worse). A model that always uses the empirical alpha-quantile of
    `y_true` as constant prediction, disregarding the input features,
    gets a :math:`D^2` score of 0.0.

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

    .. versionadded:: 1.1

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    alpha : float, default=0.5
        Slope of the pinball deviance. It determines the quantile level alpha
        for which the pinball deviance and also D2 are optimal.
        The default `alpha=0.5` is equivalent to `d2_absolute_error_score`.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average scores.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Scores of all outputs are averaged with uniform weight.

    Returns
    -------
    score : float or ndarray of floats
        The :math:`D^2` score with a pinball deviance
        or ndarray of scores if `multioutput='raw_values'`.

    Notes
    -----
    Like :math:`R^2`, :math:`D^2` score may be negative
    (it need not actually be the square of a quantity D).

    This metric is not well-defined for a single point and will return a NaN
    value if n_samples is less than two.

     References
    ----------
    .. [1] Eq. (7) of `Koenker, Roger; Machado, JosÃ© A. F. (1999).
           "Goodness of Fit and Related Inference Processes for Quantile Regression"
           <https://doi.org/10.1080/01621459.1999.10473882>`_
    .. [2] Eq. (3.11) of Hastie, Trevor J., Robert Tibshirani and Martin J.
           Wainwright. "Statistical Learning with Sparsity: The Lasso and
           Generalizations." (2015). https://hastie.su.domains/StatLearnSparsity/

    Examples
    --------
    >>> from sklearn.metrics import d2_pinball_score
    >>> y_true = [1, 2, 3]
    >>> y_pred = [1, 3, 3]
    >>> d2_pinball_score(y_true, y_pred)
    np.float64(0.5)
    >>> d2_pinball_score(y_true, y_pred, alpha=0.9)
    np.float64(0.772...)
    >>> d2_pinball_score(y_true, y_pred, alpha=0.1)
    np.float64(-1.045...)
    >>> d2_pinball_score(y_true, y_true, alpha=0.1)
    np.float64(1.0)
    r   r¦   rˆ   r-   rW   Néd   r   )ÚqrN   r+   )rF   Ú
percentilerv   rO   )rA   r   r   r‰   rŠ   r   rQ   r   r[   Útiler¬   Úlenr   r   rw   r4   r7   r8   r\   )r9   r:   rF   rU   r;   r?   r�   rx   Ú
y_quantilery   r}   r{   r~   r|   r   s                  r@   r$   r$     s�  € ôx +=Ø�˜ó+Ñ'€FˆF�F˜Kô ˜F F¨MÔ:ä�FÓ˜aÒØIˆÜ�‰�cÔ1Ô2Ü�U‹|Ðä!ØØØ#ØØ ô€Ið ÐÜ—W‘WÜ�M‰M˜& E¨C¡K°aÔ8¼3¸v»;ÈÐ:Jó
‰
ô -¨]¸FÓCˆÜ—W‘WÜ Ø mÀÈÁôô �‹[˜!Ðó	
ˆ
ô $ØØØ#ØØ ô€Kð " Q™ÐØ%¨Ñ*ÐØ#Ð&9Ñ9€KÜ—G‘G˜FŸL™L¨™OÓ,€Mà!" i°Ñ&<¸{È;Ñ?WÑ&WÑ!X€M�+ÑØ>A€MÐ#Ð':Ð&:Ñ:Ñ;ä�+œsÔ#Ø˜,Ò&à Ð ð ‰Kà!ˆä�:‰:�m¨[Ô9Ð9rB   c                ó"   — t        | ||d|¬«      S )a  
    :math:`D^2` regression score function, fraction of absolute error explained.

    Best possible score is 1.0 and it can be negative (because the model can be
    arbitrarily worse). A model that always uses the empirical median of `y_true`
    as constant prediction, disregarding the input features,
    gets a :math:`D^2` score of 0.0.

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

    .. versionadded:: 1.1

    Parameters
    ----------
    y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Ground truth (correct) target values.

    y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)
        Estimated target values.

    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.

    multioutput : {'raw_values', 'uniform_average'} or array-like of shape             (n_outputs,), default='uniform_average'
        Defines aggregating of multiple output values.
        Array-like value defines weights used to average scores.

        'raw_values' :
            Returns a full set of errors in case of multioutput input.

        'uniform_average' :
            Scores of all outputs are averaged with uniform weight.

    Returns
    -------
    score : float or ndarray of floats
        The :math:`D^2` score with an absolute error deviance
        or ndarray of scores if 'multioutput' is 'raw_values'.

    Notes
    -----
    Like :math:`R^2`, :math:`D^2` score may be negative
    (it need not actually be the square of a quantity D).

    This metric is not well-defined for single samples and will return a NaN
    value if n_samples is less than two.

     References
    ----------
    .. [1] Eq. (3.11) of Hastie, Trevor J., Robert Tibshirani and Martin J.
           Wainwright. "Statistical Learning with Sparsity: The Lasso and
           Generalizations." (2015). https://hastie.su.domains/StatLearnSparsity/

    Examples
    --------
    >>> from sklearn.metrics import d2_absolute_error_score
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> d2_absolute_error_score(y_true, y_pred)
    np.float64(0.764...)
    >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> d2_absolute_error_score(y_true, y_pred, multioutput='uniform_average')
    np.float64(0.691...)
    >>> d2_absolute_error_score(y_true, y_pred, multioutput='raw_values')
    array([0.8125    , 0.57142857])
    >>> y_true = [1, 2, 3]
    >>> y_pred = [1, 2, 3]
    >>> d2_absolute_error_score(y_true, y_pred)
    np.float64(1.0)
    >>> y_true = [1, 2, 3]
    >>> y_pred = [2, 2, 2]
    >>> d2_absolute_error_score(y_true, y_pred)
    np.float64(0.0)
    >>> y_true = [1, 2, 3]
    >>> y_pred = [3, 2, 1]
    >>> d2_absolute_error_score(y_true, y_pred)
    np.float64(-1.0)
    rV   rW   )r$   rI   s       r@   r%   r%     s   € ô~ Ø� m¸3ÈKôð rB   )ÚnumericN)N)2Ú__doc__r‰   Únumbersr   Únumpyr[   Úscipy.specialr   Ú
exceptionsr   Úutils._array_apir   r   r	   r
   r   Úutils._param_validationr   r   r   Úutils.statsr   Úutils.validationr   r   r   r   r   Ú__ALL__rA   rH   r   r   r   r   r   r   r   r   r�   r   r   r   r™   r    r!   r"   r#   r$   r%   © rB   r@   ú<module>r½      sê  ðñó Ý ã Ý å /÷õ ÷ LÑ KÝ .÷õ ò€ó*T/ðp 48ó>>ñB à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð &*Ð7HóR&óðR&ñj à�.Ø�.Ø&¨Ð-Ù˜4  A¨fÔ5Ð6Ù" LÐ2CÐ#DÓEÀ|ÐTñð #'ô	ð &*°ÐBSóM:ó	ðM:ñ` à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð &*Ð7Hó]1óð]1ñ@ à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð Ø!óN%óðN%ñb à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð &*Ð7HóH*óðH*ñV à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð Ø!óJóðJñZ à�.Ø�.Ø&¨Ð-Ù" LÐ2CÐ#DÓEÀ|ÐTñ	ð #'ôð &*Ð7Hó@óð@ñF à�.Ø�.Ù" LÐ2CÐ#DÓEÀ|ÐTØ&¨Ð-ñ	ð #'ôð $5ÀDóI:óðI:òX/ñd à�.Ø�.Ø&¨Ð-áÒMÓNØð
ð #˜ñ	ð #'ôð" Ø!Øó}óð}ñ@ à�.Ø�.Ø&¨Ð-áÒMÓNØØð
ð
 #˜ñ
ð #'ôð$ Ø!ØódóðdñN à�.Ø�.ñð #'ôñ+óð+òD7ñ> à�.Ø�.Ø&¨Ð-á�T˜4 ¨7Ô3Ù�T˜1˜d¨6Ô2ð
ñ	ð #'ôð <@Àqó RóðRñj à�.Ø�.Ø&¨Ð-ñð
 #'ôð <@ó  Wóð WñF à�.Ø�.Ø&¨Ð-ñð
 #'ôð :>ó !Wóð!WñH à�.Ø�.Ø&¨Ð-á�T˜4 ¨7Ô3Ù�T˜1˜d¨6Ô2ð
ñ	ð #'ôð 7;À!ó d'óðd'ñN à�.Ø�.Ø&¨Ð-Ù˜4  A¨fÔ5Ð6á˜Ð&7Ð8Ó9Øð
ñ	ð #'ôð &*°ÐBSóH:óðH:ñV à�.Ø�.Ø&¨Ð-á˜Ð&7Ð8Ó9Øð
ñ	ð #'ôð &*Ð7HóUóñUrB   