Ë
    ÷Q(h¤@  ã                   óh   — d dl mZ d dlZddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ  G d
„ d«      Zy)é    )ÚproductNé   )Úis_classifier)Úcheck_matplotlib_support)Ú_validate_style_kwargs)Úunique_labelsé   )Úconfusion_matrixc                   óŽ   — e Zd ZdZddœd„Zdddddddddœd	„Zeddddddddddddd
œd„«       Zeddddddddddddd
œd„«       Zy)ÚConfusionMatrixDisplaya	  Confusion Matrix visualization.

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

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

    Parameters
    ----------
    confusion_matrix : ndarray of shape (n_classes, n_classes)
        Confusion matrix.

    display_labels : ndarray of shape (n_classes,), default=None
        Display labels for plot. If None, display labels are set from 0 to
        `n_classes - 1`.

    Attributes
    ----------
    im_ : matplotlib AxesImage
        Image representing the confusion matrix.

    text_ : ndarray of shape (n_classes, n_classes), dtype=matplotlib Text,             or None
        Array of matplotlib axes. `None` if `include_values` is false.

    ax_ : matplotlib Axes
        Axes with confusion matrix.

    figure_ : matplotlib Figure
        Figure containing the confusion matrix.

    See Also
    --------
    confusion_matrix : Compute Confusion Matrix to evaluate the accuracy of a
        classification.
    ConfusionMatrixDisplay.from_estimator : Plot the confusion matrix
        given an estimator, the data, and the label.
    ConfusionMatrixDisplay.from_predictions : Plot the confusion matrix
        given the true and predicted labels.

    Examples
    --------
    >>> import matplotlib.pyplot as plt
    >>> from sklearn.datasets import make_classification
    >>> from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
    >>> 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)
    >>> cm = confusion_matrix(y_test, predictions, labels=clf.classes_)
    >>> disp = ConfusionMatrixDisplay(confusion_matrix=cm,
    ...                               display_labels=clf.classes_)
    >>> disp.plot()
    <...>
    >>> plt.show()
    N)Údisplay_labelsc                ó    — || _         || _        y )N©r
   r   )Úselfr
   r   s      úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/_plot/confusion_matrix.pyÚ__init__zConfusionMatrixDisplay.__init__Q   s   € Ø 0ˆÔØ,ˆÕó    TÚviridisÚ
horizontal)Úinclude_valuesÚcmapÚxticks_rotationÚvalues_formatÚaxÚcolorbarÚim_kwÚtext_kwc                óv  — t        d«       ddlm}	 |€|	j                  «       \  }
}n|j                  }
| j
                  }|j                  d   }t        d|¬«      }|xs i }t        ||«      }|xs i } |j                  |fi |¤Ž| _
        d| _        | j                  j                  d«      | j                  j                  d«      }}|�rt        j                  |t        ¬«      | _        |j!                  «       |j#                  «       z   dz  }t%        t'        |«      t'        |«      «      D ]¹  \  }}|||f   |k  r|n|}|€Ut)        |||f   d	«      }|j*                  j,                  d
k7  r<t)        |||f   d«      }t/        |«      t/        |«      k  r|}nt)        |||f   |«      }t        dd|¬«      }t        ||«      } |j0                  |||fi |¤Ž| j                  ||f<   Œ» | j2                  €t        j4                  |«      }n| j2                  }|r|
j7                  | j                  |¬«       |j9                  t        j4                  |«      t        j4                  |«      ||dd¬«       |j;                  |dz
  df«       |	j=                  |j?                  «       |¬«       |
| _         || _!        | S )aL  Plot visualization.

        Parameters
        ----------
        include_values : bool, default=True
            Includes values in confusion matrix.

        cmap : str or matplotlib Colormap, default='viridis'
            Colormap recognized by matplotlib.

        xticks_rotation : {'vertical', 'horizontal'} or float,                          default='horizontal'
            Rotation of xtick labels.

        values_format : str, default=None
            Format specification for values in confusion matrix. If `None`,
            the format specification is 'd' or '.2g' whichever is shorter.

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

        colorbar : bool, default=True
            Whether or not to add a colorbar to the plot.

        im_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.imshow` call.

        text_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.text` call.

            .. versionadded:: 1.2

        Returns
        -------
        display : :class:`~sklearn.metrics.ConfusionMatrixDisplay`
            Returns a :class:`~sklearn.metrics.ConfusionMatrixDisplay` instance
            that contains all the information to plot the confusion matrix.
        zConfusionMatrixDisplay.plotr   NÚnearest)Úinterpolationr   g      ð?)Údtypeg       @z.2gÚfÚdÚcenter)ÚhaÚvaÚcolor)r   z
True labelzPredicted label)ÚxticksÚyticksÚxticklabelsÚyticklabelsÚylabelÚxlabelg      à?g      à¿)Úrotation)"r   Úmatplotlib.pyplotÚpyplotÚsubplotsÚfigurer
   ÚshapeÚdictr   ÚimshowÚim_Útext_r   ÚnpÚ
empty_likeÚobjectÚmaxÚminr   ÚrangeÚformatr!   ÚkindÚlenÚtextr   Úaranger   ÚsetÚset_ylimÚsetpÚget_xticklabelsÚfigure_Úax_)r   r   r   r   r   r   r   r   r   ÚpltÚfigÚcmÚ	n_classesÚdefault_im_kwÚcmap_minÚcmap_maxÚthreshÚiÚjr'   Útext_cmÚtext_dÚdefault_text_kwargsÚtext_kwargsr   s                            r   ÚplotzConfusionMatrixDisplay.plotU   s~  € ôf 	!Ð!>Ô?Ý'àˆ:Ø—l‘l“n‰GˆC‘à—)‘)ˆCà×"Ñ"ˆØ—H‘H˜Q‘Kˆ	ä¨9¸4Ô@ˆØ’˜ˆÜ& }°eÓ<ˆØ’-˜Rˆà�2—9‘9˜RÑ) 5Ñ)ˆŒØˆŒ
Ø!ŸX™XŸ]™]¨1Ó-¨t¯x©x¯}©}¸SÓ/A�(ˆâÜŸ™ r´Ô8ˆDŒJð —f‘f“h §¡£Ñ)¨SÑ0ˆFä¤ iÓ 0´%¸	Ó2BÓCò I‘��1Ø$& q¨! t¡H¨vÒ$5™¸8�à Ð(Ü$ R¨¨1¨¡X¨uÓ5�GØ—x‘x—}‘}¨Ò+Ü!'¨¨1¨a¨4©°#Ó!6˜Ü˜v›;¬¨W«Ò5Ø&,™Gä$ R¨¨1¨¡X¨}Ó=�Gä&*¨h¸8È5Ô&QÐ#Ü4Ð5HÈ'ÓR�à#* 2§7¡7¨1¨a°Ñ#H¸KÑ#H�—
‘
˜1˜a˜4Ò ðIð" ×ÑÐ&ÜŸY™Y yÓ1‰Nà!×0Ñ0ˆNÙØ�L‰L˜Ÿ™ bˆLÔ)Ø
�‰Ü—9‘9˜YÓ'Ü—9‘9˜YÓ'Ø&Ø&ØØ$ð 	ô 	
ð 	�‰�Y ‘_ dÐ+Ô,Ø�‰�×#Ñ#Ó%°ˆÔ@àˆŒØˆŒØˆr   )ÚlabelsÚsample_weightÚ	normalizer   r   r   r   r   r   r   r   r   c                óÈ   — | j                   › d�}t        |«       t        |«      st        |› d�«      ‚|j	                  |«      }| j                  ||||||||||	|
|||¬«      S )a­  Plot Confusion Matrix given an estimator and some data.

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

        .. versionadded:: 1.0

        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.

        labels : array-like of shape (n_classes,), default=None
            List of labels to index the confusion matrix. This may be used to
            reorder or select a subset of labels. If `None` is given, those
            that appear at least once in `y_true` or `y_pred` are used in
            sorted order.

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

        normalize : {'true', 'pred', 'all'}, default=None
            Either to normalize the counts display in the matrix:

            - if `'true'`, the confusion matrix is normalized over the true
              conditions (e.g. rows);
            - if `'pred'`, the confusion matrix is normalized over the
              predicted conditions (e.g. columns);
            - if `'all'`, the confusion matrix is normalized by the total
              number of samples;
            - if `None` (default), the confusion matrix will not be normalized.

        display_labels : array-like of shape (n_classes,), default=None
            Target names used for plotting. By default, `labels` will be used
            if it is defined, otherwise the unique labels of `y_true` and
            `y_pred` will be used.

        include_values : bool, default=True
            Includes values in confusion matrix.

        xticks_rotation : {'vertical', 'horizontal'} or float,                 default='horizontal'
            Rotation of xtick labels.

        values_format : str, default=None
            Format specification for values in confusion matrix. If `None`, the
            format specification is 'd' or '.2g' whichever is shorter.

        cmap : str or matplotlib Colormap, default='viridis'
            Colormap recognized by matplotlib.

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

        colorbar : bool, default=True
            Whether or not to add a colorbar to the plot.

        im_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.imshow` call.

        text_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.text` call.

            .. versionadded:: 1.2

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

        See Also
        --------
        ConfusionMatrixDisplay.from_predictions : Plot the confusion matrix
            given the true and predicted labels.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import make_classification
        >>> from sklearn.metrics import ConfusionMatrixDisplay
        >>> 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)
        >>> ConfusionMatrixDisplay.from_estimator(
        ...     clf, X_test, y_test)
        <...>
        >>> plt.show()
        z.from_estimatorz only supports classifiers)rY   rX   rZ   r   r   r   r   r   r   r   r   r   )Ú__name__r   r   Ú
ValueErrorÚpredictÚfrom_predictions)ÚclsÚ	estimatorÚXÚyrX   rY   rZ   r   r   r   r   r   r   r   r   r   Úmethod_nameÚy_preds                     r   Úfrom_estimatorz%ConfusionMatrixDisplay.from_estimatorÉ   sŠ   € ðn Ÿ™˜ oÐ6ˆÜ  Ô-Ü˜YÔ'Ü ˜}Ð,FÐGÓHÐHØ×"Ñ" 1Ó%ˆà×#Ñ#ØØØ'ØØØ)Ø)ØØØ+Ø'ØØØð $ó 
ð 	
r   c          
      ó¾   — t        | j                  › d�«       |€|€t        ||«      }n|}t        |||||¬«      } | ||¬«      }|j	                  ||
|||	|||¬«      S )aW  Plot Confusion Matrix given true and predicted labels.

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

        .. versionadded:: 1.0

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

        y_pred : array-like of shape (n_samples,)
            The predicted labels given by the method `predict` of an
            classifier.

        labels : array-like of shape (n_classes,), default=None
            List of labels to index the confusion matrix. This may be used to
            reorder or select a subset of labels. If `None` is given, those
            that appear at least once in `y_true` or `y_pred` are used in
            sorted order.

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

        normalize : {'true', 'pred', 'all'}, default=None
            Either to normalize the counts display in the matrix:

            - if `'true'`, the confusion matrix is normalized over the true
              conditions (e.g. rows);
            - if `'pred'`, the confusion matrix is normalized over the
              predicted conditions (e.g. columns);
            - if `'all'`, the confusion matrix is normalized by the total
              number of samples;
            - if `None` (default), the confusion matrix will not be normalized.

        display_labels : array-like of shape (n_classes,), default=None
            Target names used for plotting. By default, `labels` will be used
            if it is defined, otherwise the unique labels of `y_true` and
            `y_pred` will be used.

        include_values : bool, default=True
            Includes values in confusion matrix.

        xticks_rotation : {'vertical', 'horizontal'} or float,                 default='horizontal'
            Rotation of xtick labels.

        values_format : str, default=None
            Format specification for values in confusion matrix. If `None`, the
            format specification is 'd' or '.2g' whichever is shorter.

        cmap : str or matplotlib Colormap, default='viridis'
            Colormap recognized by matplotlib.

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

        colorbar : bool, default=True
            Whether or not to add a colorbar to the plot.

        im_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.imshow` call.

        text_kw : dict, default=None
            Dict with keywords passed to `matplotlib.pyplot.text` call.

            .. versionadded:: 1.2

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

        See Also
        --------
        ConfusionMatrixDisplay.from_estimator : Plot the confusion matrix
            given an estimator, the data, and the label.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import make_classification
        >>> from sklearn.metrics import ConfusionMatrixDisplay
        >>> 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)
        >>> y_pred = clf.predict(X_test)
        >>> ConfusionMatrixDisplay.from_predictions(
        ...    y_test, y_pred)
        <...>
        >>> plt.show()
        z.from_predictions)rY   rX   rZ   r   )r   r   r   r   r   r   r   r   )r   r\   r   r
   rW   )r`   Úy_truere   rX   rY   rZ   r   r   r   r   r   r   r   r   r   rK   Údisps                    r   r_   z'ConfusionMatrixDisplay.from_predictionsW  sŠ   € ôh 	! C§L¡L >Ð1BÐ!CÔDàÐ!Øˆ~Ü!.¨v°vÓ!>‘à!'�äØØØ'ØØô
ˆñ  B°~ÔFˆà�y‰yØ)ØØØ+Ø'ØØØð ó 	
ð 		
r   )	r\   Ú
__module__Ú__qualname__Ú__doc__r   rW   Úclassmethodrf   r_   © r   r   r   r      s­   „ ñ?ðB <@ô -ð ØØ$ØØØØØôrðh ð ØØØØØ$ØØØØØØó#K
ó ðK
ðZ ð ØØØØØ$ØØØØØØó!N
ó ñN
r   r   )Ú	itertoolsr   Únumpyr8   Úbaser   Úutils._optional_dependenciesr   Úutils._plottingr   Úutils.multiclassr   Ú r
   r   rn   r   r   ú<module>rv      s(   ðõ ã å !Ý DÝ 5Ý -Ý ÷W
ò W
r   