
    Ug?                     d    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  G d	 d
          ZdS )    )productN   )is_classifier)check_matplotlib_support)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dS )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                "    || _         || _        d S )Nr	   r   )selfr	   r   s      e/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/metrics/_plot/confusion_matrix.py__init__zConfusionMatrixDisplay.__init__M   s     0,    Tviridis
horizontal)include_valuescmapxticks_rotationvalues_formataxcolorbarim_kwtext_kwc                   t          d           ddlm}	 ||	                                \  }
}n|j        }
| j        }|j        d         }t          d|          }|pi }i ||}|pi } |j        |fi || _	        d| _
        | j	                            d          | j	                            d          }}|r=t          j        |t                    | _
        |                                |                                z   dz  }t#          t%          |          t%          |                    D ]\  }}|||f         |k     r|n|}|ct'          |||f         d	          }|j        j        d
k    r:t'          |||f         d          }t-          |          t-          |          k     r|}nt'          |||f         |          }t          dd|          }i ||} |j        |||fi || j
        ||f<   | j        t          j        |          }n| j        }|r|
                    | j	        |           |                    t          j        |          t          j        |          ||dd           |                    |dz
  df           |	                    |                                |           |
| _        || _         | 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dict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.plotQ   s   f 	!!>???'''''':llnnGC)C"HQK	94@@@*=*E*-R29R))5))
!X]]1--tx}}S/A/A( 	Ir888DJ ffhh)S0Fi 0 0%	2B2BCC I I1$&q!tHv$5$58 ($R1Xu55Gx}++!'1a4#!6!6v;;W55&,G$R1X}==G&*h85&Q&Q&Q#@!4@@#*271a#H#HK#H#H
1a4  &Yy11NN!0N 	*LLbL)))
9Y''9Y''&&$ 	 	
 	
 	
 	Y_d+,,,##%%@@@r   )labelssample_weight	normalizer   r   r   r   r   r   r   r   r   c                    | j          d}t          |           t          |          st          | d          |                    |          }|                     ||||||||||	|
|||          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)rX   rW   rY   r   r   r   r   r   r   r   r   r   )__name__r   r   
ValueErrorpredictfrom_predictions)cls	estimatorXyrW   rX   rY   r   r   r   r   r   r   r   r   r   method_namey_preds                     r   from_estimatorz%ConfusionMatrixDisplay.from_estimator   s    n 666 ---Y'' 	IGGGHHH""1%%##'))+' $ 
 
 	
r   c          
          t          | j         d           ||t          ||          }n|}t          |||||          } | ||          }|                    ||
|||	|||          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_predictionsN)rX   rW   rY   r   )r   r   r   r   r   r   r   r   )r   r[   r   r	   rV   )r_   y_truerd   rW   rX   rY   r   r   r   r   r   r   r   r   r   rJ   disps                    r   r^   z'ConfusionMatrixDisplay.from_predictionsS  s    h 	!CL!C!C!CDDD!~!.vv!>!>!''
 
 
 sB~FFFyy)+'  	
 	
 		
r   )	r[   
__module____qualname____doc__r   rV   classmethodre   r^    r   r   r   r      s       ? ?B <@ - - - - - $r r r r rh  $#K
 K
 K
 K
 [K
Z  $!N
 N
 N
 N
 [N
 N
 N
r   r   )	itertoolsr   numpyr7   baser   utils._optional_dependenciesr   utils.multiclassr    r	   r   rm   r   r   <module>rt      s              ! ! ! ! ! ! D D D D D D - - - - - -      W
 W
 W
 W
 W
 W
 W
 W
 W
 W
r   