Ë
    ÷Q(hÙH  ã                   óJ   — d dl mZ ddlmZmZmZ ddlmZmZ  G d„ de«      Z	y)	é    )ÚCounteré   )Ú"_BinaryClassifierCurveDisplayMixinÚ_despineÚ_validate_style_kwargsé   )Úaverage_precision_scoreÚprecision_recall_curvec                   ó‚   — e Zd ZdZdddddœd„Z	 ddddddœd„Zedddddddddd	œ	d
„«       Zedddddddddœd„«       Zy)ÚPrecisionRecallDisplayaG  Precision Recall visualization.

    It is recommend to use
    :func:`~sklearn.metrics.PrecisionRecallDisplay.from_estimator` or
    :func:`~sklearn.metrics.PrecisionRecallDisplay.from_predictions` to create
    a :class:`~sklearn.metrics.PrecisionRecallDisplay`. All parameters are
    stored as attributes.

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

    Parameters
    ----------
    precision : ndarray
        Precision values.

    recall : ndarray
        Recall values.

    average_precision : float, default=None
        Average precision. If None, the average precision is not shown.

    estimator_name : str, default=None
        Name of estimator. If None, then the estimator name is not shown.

    pos_label : int, float, bool or str, default=None
        The class considered as the positive class. If None, the class will not
        be shown in the legend.

        .. versionadded:: 0.24

    prevalence_pos_label : float, default=None
        The prevalence of the positive label. It is used for plotting the
        chance level line. If None, the chance level line will not be plotted
        even if `plot_chance_level` is set to True when plotting.

        .. versionadded:: 1.3

    Attributes
    ----------
    line_ : matplotlib Artist
        Precision recall curve.

    chance_level_ : matplotlib Artist or None
        The chance level line. It is `None` if the chance level is not plotted.

        .. versionadded:: 1.3

    ax_ : matplotlib Axes
        Axes with precision recall curve.

    figure_ : matplotlib Figure
        Figure containing the curve.

    See Also
    --------
    precision_recall_curve : Compute precision-recall pairs for different
        probability thresholds.
    PrecisionRecallDisplay.from_estimator : Plot Precision Recall Curve given
        a binary classifier.
    PrecisionRecallDisplay.from_predictions : Plot Precision Recall Curve
        using predictions from a binary classifier.

    Notes
    -----
    The average precision (cf. :func:`~sklearn.metrics.average_precision_score`) in
    scikit-learn is computed without any interpolation. To be consistent with
    this metric, the precision-recall curve is plotted without any
    interpolation as well (step-wise style).

    You can change this style by passing the keyword argument
    `drawstyle="default"` in :meth:`plot`, :meth:`from_estimator`, or
    :meth:`from_predictions`. However, the curve will not be strictly
    consistent with the reported average precision.

    Examples
    --------
    >>> import matplotlib.pyplot as plt
    >>> from sklearn.datasets import make_classification
    >>> from sklearn.metrics import (precision_recall_curve,
    ...                              PrecisionRecallDisplay)
    >>> from sklearn.model_selection import train_test_split
    >>> from sklearn.svm import SVC
    >>> X, y = make_classification(random_state=0)
    >>> X_train, X_test, y_train, y_test = train_test_split(X, y,
    ...                                                     random_state=0)
    >>> clf = SVC(random_state=0)
    >>> clf.fit(X_train, y_train)
    SVC(random_state=0)
    >>> predictions = clf.predict(X_test)
    >>> precision, recall, _ = precision_recall_curve(y_test, predictions)
    >>> disp = PrecisionRecallDisplay(precision=precision, recall=recall)
    >>> disp.plot()
    <...>
    >>> plt.show()
    N)Úaverage_precisionÚestimator_nameÚ	pos_labelÚprevalence_pos_labelc                óX   — || _         || _        || _        || _        || _        || _        y ©N)r   Ú	precisionÚrecallr   r   r   )Úselfr   r   r   r   r   r   s          új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/_plot/precision_recall_curve.pyÚ__init__zPrecisionRecallDisplay.__init__o   s1   € ð -ˆÔØ"ˆŒØˆŒØ!2ˆÔØ"ˆŒØ$8ˆÕ!ó    F)ÚnameÚplot_chance_levelÚchance_level_kwÚdespinec                óv  — | j                  ||¬«      \  | _        | _        }ddi}| j                  �|�|› d| j                  d›d�|d<   n'| j                  �d	| j                  d›�|d<   n|�||d<   t	        ||«      } | j                  j
                  | j                  | j                  fi |¤Ž\  | _        | j                  �d
| j                  › d�nd}	d|	z   }
d|	z   }| j                  j                  |
d|dd¬«       |rx| j                  €t        d«      ‚d| j                  d›d�dddœ}|€i }t	        ||«      } | j                  j
                  d| j                  | j                  ffi |¤Ž\  | _        nd| _        |rt        | j                  «       d|v s|r| j                  j                  d¬«       | S )a?  Plot visualization.

        Extra keyword arguments will be passed to matplotlib's `plot`.

        Parameters
        ----------
        ax : Matplotlib Axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is
            created.

        name : str, default=None
            Name of precision recall curve for labeling. If `None`, use
            `estimator_name` if not `None`, otherwise no labeling is shown.

        plot_chance_level : bool, default=False
            Whether to plot the chance level. The chance level is the prevalence
            of the positive label computed from the data passed during
            :meth:`from_estimator` or :meth:`from_predictions` call.

            .. versionadded:: 1.3

        chance_level_kw : dict, default=None
            Keyword arguments to be passed to matplotlib's `plot` for rendering
            the chance level line.

            .. versionadded:: 1.3

        despine : bool, default=False
            Whether to remove the top and right spines from the plot.

            .. versionadded:: 1.6

        **kwargs : dict
            Keyword arguments to be passed to matplotlib's `plot`.

        Returns
        -------
        display : :class:`~sklearn.metrics.PrecisionRecallDisplay`
            Object that stores computed values.

        Notes
        -----
        The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
        in scikit-learn is computed without any interpolation. To be consistent
        with this metric, the precision-recall curve is plotted without any
        interpolation as well (step-wise style).

        You can change this style by passing the keyword argument
        `drawstyle="default"`. However, the curve will not be strictly
        consistent with the reported average precision.
        )Úaxr   Ú	drawstylez
steps-postNz (AP = z0.2fú)ÚlabelzAP = z (Positive label: Ú ÚRecallÚ	Precision)g{®Gáz„¿g)\�Âõ(ð?Úequal)ÚxlabelÚxlimÚylabelÚylimÚaspecta  You must provide prevalence_pos_label when constructing the PrecisionRecallDisplay object in order to plot the chance level line. Alternatively, you may use PrecisionRecallDisplay.from_estimator or PrecisionRecallDisplay.from_predictions to automatically set prevalence_pos_labelzChance level (AP = Úkz--)r!   ÚcolorÚ	linestyle)r   é   z
lower left)Úloc)Ú_validate_plot_paramsÚax_Úfigure_r   r   Úplotr   r   Úline_r   Úsetr   Ú
ValueErrorÚchance_level_r   Úlegend)r   r   r   r   r   r   ÚkwargsÚdefault_line_kwargsÚline_kwargsÚinfo_pos_labelr&   r(   Údefault_chance_level_line_kwÚchance_level_line_kws                 r   r3   zPrecisionRecallDisplay.plot€   s  € ðz (,×'AÑ'AÀRÈdÐ'AÓ'SÑ$ˆŒ�$”, à*¨LÐ9ÐØ×!Ñ!Ð-°$Ð2Bà�&˜ × 6Ñ 6°tÐ<¸AÐ>ð   Ò(ð ×#Ñ#Ð/Ø-2°4×3IÑ3IÈ$Ð2OÐ+PÐ Ò(ØÐØ+/Ð Ñ(ä,Ð-@À&ÓIˆà%˜Ÿ™Ÿ™ d§k¡k°4·>±>ÑQÀ[ÑQ‰ˆŒð 7;·n±nÐ6PÐ  §¡Ð 0°Ñ2ÐVXð 	ð ˜NÑ*ˆØ˜~Ñ-ˆØ�‰�‰ØØØØØð 	ô 	
ñ Ø×(Ñ(Ð0Ü ð@óð ð /¨t×/HÑ/HÈÐ.NÈaÐPØØ!ñ,Ð(ð Ð&Ø"$�ä#9Ø,¨oó$Ð ð %2 D§H¡H§M¡MØØ×*Ñ*¨D×,EÑ,EÐFñ%ð 'ñ%Ñ!ˆTÕð "&ˆDÔáÜ�T—X‘XÔà�kÑ!Ñ%6Ø�H‰H�O‰O ˆOÔ-àˆr   Úauto)	Úsample_weightr   Údrop_intermediateÚresponse_methodr   r   r   r   r   c       	         ór   — | j                  ||||||¬«      \  }}} | j                  ||f|||||	|
||dœ|¤ŽS )a{  Plot precision-recall curve given an estimator and some data.

        Parameters
        ----------
        estimator : estimator instance
            Fitted classifier or a fitted :class:`~sklearn.pipeline.Pipeline`
            in which the last estimator is a classifier.

        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            Input values.

        y : array-like of shape (n_samples,)
            Target values.

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

        pos_label : int, float, bool or str, default=None
            The class considered as the positive class when computing the
            precision and recall metrics. By default, `estimators.classes_[1]`
            is considered as the positive class.

        drop_intermediate : bool, default=False
            Whether to drop some suboptimal thresholds which would not appear
            on a plotted precision-recall curve. This is useful in order to
            create lighter precision-recall curves.

            .. versionadded:: 1.3

        response_method : {'predict_proba', 'decision_function', 'auto'},             default='auto'
            Specifies whether to use :term:`predict_proba` or
            :term:`decision_function` as the target response. If set to 'auto',
            :term:`predict_proba` is tried first and if it does not exist
            :term:`decision_function` is tried next.

        name : str, default=None
            Name for labeling curve. If `None`, no name is used.

        ax : matplotlib axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is created.

        plot_chance_level : bool, default=False
            Whether to plot the chance level. The chance level is the prevalence
            of the positive label computed from the data passed during
            :meth:`from_estimator` or :meth:`from_predictions` call.

            .. versionadded:: 1.3

        chance_level_kw : dict, default=None
            Keyword arguments to be passed to matplotlib's `plot` for rendering
            the chance level line.

            .. versionadded:: 1.3

        despine : bool, default=False
            Whether to remove the top and right spines from the plot.

            .. versionadded:: 1.6

        **kwargs : dict
            Keyword arguments to be passed to matplotlib's `plot`.

        Returns
        -------
        display : :class:`~sklearn.metrics.PrecisionRecallDisplay`

        See Also
        --------
        PrecisionRecallDisplay.from_predictions : Plot precision-recall curve
            using estimated probabilities or output of decision function.

        Notes
        -----
        The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
        in scikit-learn is computed without any interpolation. To be consistent
        with this metric, the precision-recall curve is plotted without any
        interpolation as well (step-wise style).

        You can change this style by passing the keyword argument
        `drawstyle="default"`. However, the curve will not be strictly
        consistent with the reported average precision.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import make_classification
        >>> from sklearn.metrics import PrecisionRecallDisplay
        >>> from sklearn.model_selection import train_test_split
        >>> from sklearn.linear_model import LogisticRegression
        >>> X, y = make_classification(random_state=0)
        >>> X_train, X_test, y_train, y_test = train_test_split(
        ...         X, y, random_state=0)
        >>> clf = LogisticRegression()
        >>> clf.fit(X_train, y_train)
        LogisticRegression()
        >>> PrecisionRecallDisplay.from_estimator(
        ...    clf, X_test, y_test)
        <...>
        >>> plt.show()
        )rB   r   r   )r@   r   r   rA   r   r   r   r   )Ú!_validate_and_get_response_valuesÚfrom_predictions)ÚclsÚ	estimatorÚXÚyr@   r   rA   rB   r   r   r   r   r   r9   Úy_preds                  r   Úfrom_estimatorz%PrecisionRecallDisplay.from_estimator  sz   € ðn #&×"GÑ"GØØØØ+ØØð #Hó #
Ñˆ�	˜4ð $ˆs×#Ñ#ØØð
ð (ØØØ/ØØ/Ø+Øñ
ð ñ
ð 	
r   )r@   r   rA   r   r   r   r   r   c          	      ó  — | j                  |||||¬«      \  }}t        |||||¬«      \  }}}t        ||||¬«      }t        |«      }||   t	        |j                  «       «      z  } | ||||||¬«      } |j                  d||||	|
dœ|¤ŽS )aC  Plot precision-recall curve given binary class predictions.

        Parameters
        ----------
        y_true : array-like of shape (n_samples,)
            True binary labels.

        y_pred : array-like of shape (n_samples,)
            Estimated probabilities or output of decision function.

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

        pos_label : int, float, bool or str, default=None
            The class considered as the positive class when computing the
            precision and recall metrics.

        drop_intermediate : bool, default=False
            Whether to drop some suboptimal thresholds which would not appear
            on a plotted precision-recall curve. This is useful in order to
            create lighter precision-recall curves.

            .. versionadded:: 1.3

        name : str, default=None
            Name for labeling curve. If `None`, name will be set to
            `"Classifier"`.

        ax : matplotlib axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is created.

        plot_chance_level : bool, default=False
            Whether to plot the chance level. The chance level is the prevalence
            of the positive label computed from the data passed during
            :meth:`from_estimator` or :meth:`from_predictions` call.

            .. versionadded:: 1.3

        chance_level_kw : dict, default=None
            Keyword arguments to be passed to matplotlib's `plot` for rendering
            the chance level line.

            .. versionadded:: 1.3

        despine : bool, default=False
            Whether to remove the top and right spines from the plot.

            .. versionadded:: 1.6

        **kwargs : dict
            Keyword arguments to be passed to matplotlib's `plot`.

        Returns
        -------
        display : :class:`~sklearn.metrics.PrecisionRecallDisplay`

        See Also
        --------
        PrecisionRecallDisplay.from_estimator : Plot precision-recall curve
            using an estimator.

        Notes
        -----
        The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
        in scikit-learn is computed without any interpolation. To be consistent
        with this metric, the precision-recall curve is plotted without any
        interpolation as well (step-wise style).

        You can change this style by passing the keyword argument
        `drawstyle="default"`. However, the curve will not be strictly
        consistent with the reported average precision.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import make_classification
        >>> from sklearn.metrics import PrecisionRecallDisplay
        >>> from sklearn.model_selection import train_test_split
        >>> from sklearn.linear_model import LogisticRegression
        >>> X, y = make_classification(random_state=0)
        >>> X_train, X_test, y_train, y_test = train_test_split(
        ...         X, y, random_state=0)
        >>> clf = LogisticRegression()
        >>> clf.fit(X_train, y_train)
        LogisticRegression()
        >>> y_pred = clf.predict_proba(X_test)[:, 1]
        >>> PrecisionRecallDisplay.from_predictions(
        ...    y_test, y_pred)
        <...>
        >>> plt.show()
        )r@   r   r   )r   r@   rA   )r   r@   )r   r   r   r   r   r   )r   r   r   r   r   © )Ú!_validate_from_predictions_paramsr
   r	   r   ÚsumÚvaluesr3   )rF   Úy_truerJ   r@   r   rA   r   r   r   r   r   r9   r   r   Ú_r   Úclass_countr   Úvizs                      r   rE   z'PrecisionRecallDisplay.from_predictions‘  sÛ   € ðV ×?Ñ?Ø�F¨-À9ÐSWð @ó 
‰ˆ	�4ô  6ØØØØ'Ø/ô 
Ñˆ	�6˜1ô 4Ø�F i¸}ô
Ðô ˜f“oˆØ*¨9Ñ5¼¸K×<NÑ<NÓ<PÓ8QÑQÐáØØØ/ØØØ!5ô
ˆð ˆs�x‰xð 
ØØØ/Ø+Øñ
ð ñ
ð 	
r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r3   ÚclassmethodrK   rE   rM   r   r   r   r      s    „ ñ^ðJ ØØØ!ô9ð& ðAð ØØØôAðF ð ØØØØØØØØóK
ó ðK
ðZ ð ØØØØØØØóL
ó ñL
r   r   N)
Úcollectionsr   Úutils._plottingr   r   r   Ú_rankingr	   r
   r   rM   r   r   ú<module>r]      s)   ðõ  ÷ñ ÷
 GôP
Ð?õ P
r   