ó
    Ñ]j.P  ã                   óR   • S SK Jr  S SKJrJr  S SKJrJrJrJ	r	J
r
   " S S\5      rg)é    )ÚCounter)Úaverage_precision_scoreÚprecision_recall_curve)Ú"_BinaryClassifierCurveDisplayMixinÚ_deprecate_estimator_nameÚ_deprecate_y_pred_parameterÚ_despineÚ_validate_style_kwargsc                   óž   • \ rS rSrSrSSSSSS.S jr SSSSSS.S	 jjr\SSS
SSSSSSS.	S j5       r\ SSSSSSSSSSS.	S jj5       r	Sr
g)ÚPrecisionRecallDisplayé   aC  Precision Recall visualization.

It is recommended 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.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

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

recall : ndarray
    Recall values.

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

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

    .. versionchanged:: 1.8
        `estimator_name` was deprecated in favor of `name`.

pos_label : int, float, bool or str, default=None
    The class considered the positive class when precision and recall metrics
    computed. If not `None`, this value is displayed in the x- and y-axes labels.

    .. 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

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

    .. deprecated:: 1.8
        `estimator_name` is deprecated and will be removed in 1.10. Use `name`
        instead.

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Ú
deprecated)Úaverage_precisionÚnameÚ	pos_labelÚprevalence_pos_labelÚestimator_namec                ób   • [        XtS5      U l        Xl        X l        X0l        XPl        X`l        g )Nú1.8)r   r   Ú	precisionÚrecallr   r   r   )Úselfr   r   r   r   r   r   r   s           Úi/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sklearn/metrics/_plot/precision_recall_curve.pyÚ__init__ÚPrecisionRecallDisplay.__init__~   s-   € ô .¨nÀEÓJˆŒ	Ø"ŒØŒØ!2ÔØ"ŒØ$8Õ!ó    F)r   Úplot_chance_levelÚchance_level_kwÚdespinec                óŒ  • U R                  XS9u  U l        U l        nSS0nU R                  b  Ub  U SU R                  S S3US'   O(U R                  b  S	U R                  S 3US'   OUb  X'S'   [	        Xv5      nU R                  R
                  " U R                  U R                  40 UD6u  U l        U R                  b  S
U R                   S3OSn	SU	-   n
SU	-   nU R                  R                  U
SUSSS9  U(       ay  U R                  c  [        S5      eSU R                  S S3SSS.nUc  0 n[	        XÄ5      nU R                  R
                  " SU R                  U R                  440 UD6u  U l        OSU l        U(       a  [        U R                  5        SU;   d  U(       a  U R                  R                  SS9  U $ )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
    `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   r6   ÚPrecisionRecallDisplay.plot�   s  € ðz (,×'AÑ'AÀRÐ'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Ø,ó$Ð ð %)§H¡H§M¢MØØ×*Ñ*¨D×,EÑ,EÐFñ%ð 'ñ%Ñ!ˆTÕð "&ˆDÔæÜ�T—X‘XÔà�kÓ!Ö%6Ø�H‰H�O‰O ˆOÑ-àˆr   Úauto)	Úsample_weightÚdrop_intermediateÚresponse_methodr   r   r!   r   r   r   c       	         ój   • U R                  UUUUUUS9u  pçnU R                  " UU4UUUUU	U
UUS.UD6$ )a
  Plot precision-recall curve given an estimator and some data.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

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.

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.

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.

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()
)rF   r   r   )rD   r   r   rE   r!   r   r   r   )Ú!_validate_and_get_response_valuesÚfrom_predictions)ÚclsÚ	estimatorÚXÚyrD   rE   rF   r   r   r!   r   r   r   r<   Úy_scores                  r   Úfrom_estimatorÚ%PrecisionRecallDisplay.from_estimator  sv   € ðx $'×#HÑ#HØØØØ+ØØð $Ið $
Ñ ˆ˜Dð ×#Ò#ØØð
ð (ØØØ/ØØ/Ø+Øñ
ð ñ
ð 	
r   )	rD   rE   r   r   r!   r   r   r   Úy_predc       	   	      ó  • [        X+S5      nU R                  XX5US9u  pV[        UUUUUS9u  pÞn[        XXSS9n[	        U5      nUU   [        UR                  5       5      -  nU " UUUUUUS9nUR                  " SUUUU	U
S.UD6$ )a³  Plot precision-recall curve given binary class predictions.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

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

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

    .. versionadded:: 1.8
        `y_pred` has been renamed to `y_score`.

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

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

pos_label : int, float, bool or str, default=None
    The class considered as the positive class when computing the
    precision and recall metrics. When `pos_label=None`, if `y_true` is
    in {-1, 1} or {0, 1}, `pos_label` is set to 1, otherwise an error
    will be raised.

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

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

    .. deprecated:: 1.8
        `y_pred` is deprecated and will be removed in 1.10. Use
        `y_score` instead.

**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_score = clf.predict_proba(X_test)[:, 1]
>>> PrecisionRecallDisplay.from_predictions(
...    y_test, y_score)
<...>
>>> plt.show()
r   )rD   r   r   )r   rD   rE   )r   rD   )r   r   r   r   r   r   )r!   r   r   r   r   © )r   Ú!_validate_from_predictions_paramsr   r   r   ÚsumÚvaluesr6   )rJ   Úy_truerN   rD   rE   r   r   r!   r   r   r   rQ   r<   r   r   Ú_r   Úclass_countr   Úvizs                       r   rI   Ú'PrecisionRecallDisplay.from_predictions¦  sÙ   € ôz .¨g¸uÓEˆØ×?Ñ?Ø¨=ÐTXð @ð 
‰ˆ	ô  6ØØØØ'Ø/ñ 
Ñˆ	˜1ô 4Ø yñ
Ðô ˜f“oˆØ*¨9Ñ5¼¸K×<NÑ<NÓ<PÓ8QÑQÐáØØØ/ØØØ!5ñ
ˆð �xŠxð 
ØØØ/Ø+Øñ
ð ñ
ð 	
r   )
r   r4   r:   r5   r7   r   r   r   r   r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r6   ÚclassmethodrO   rI   Ú__static_attributes__rS   r   r   r   r      s±   † ñkðd ØØØ!Ø#õ9ð( ðAð ØØØöAðF ð ØØØØØØØØôP
ó ðP
ðd ð ð_
ð
 ØØØØØØØØõ_
ó ó_
r   r   N)Úcollectionsr   Úsklearn.metrics._rankingr   r   Úsklearn.utils._plottingr   r   r   r	   r
   r   rS   r   r   Ú<module>rf      s&   ðõ  ç T÷õ ôv
Ð?õ v
r   