§
    rŠtj#S  ã                   óÖ   — d Z ddlZddlmZ ddlmZ ddlZddlm	Z	 ddl
mZmZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
„Zdd„ZeeedœZddœd„Zd„ Zd„ Zd„ Zdd„Zdd„Zdd„Zd„ Z dS )zAUtilities to handle multiclass/multioutput target in classifiers.é    N)ÚSequence)Úchain)Úissparse)Ú_is_numpy_namespaceÚget_namespace)Úattach_uniqueÚcached_unique)ÚVisibleDeprecationWarning)Ú_assert_all_finiteÚ_num_samplesÚcheck_arrayc                 ó´   — t          | |¬¦  «        \  }}t          | d¦  «        s|r$t          |                     | ¦  «        |¬¦  «        S t	          | ¦  «        S )N©ÚxpÚ	__array__)r   Úhasattrr	   ÚasarrayÚset©Úyr   Úis_array_api_compliants      úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/utils/multiclass.pyÚ_unique_multiclassr      s\   € Ý!.¨q°RÐ!8Ñ!8Ô!8Ñ€BÐÝˆq�+ÑÔð Ð"8ð Ý˜RŸZšZ¨™]œ]¨rÐ2Ñ2Ô2Ð2å�1‰vŒvˆó    c                 óŽ   — t          | |¬¦  «        \  }}|                     t          | dg d¢¬¦  «        j        d         ¦  «        S )Nr   r   ©ÚcsrÚcscÚcoo)Ú
input_nameÚaccept_sparseé   )r   Úaranger   Úshape)r   r   Ú_s      r   Ú_unique_indicatorr&      sP   € Ý˜! Ð#Ñ#Ô#�E€BˆØ�9Š9Ý�A #Ð5JÐ5JÐ5JÐKÑKÔKÔQÐRSÔTñô ð r   )ÚbinaryÚ
multiclassúmultilabel-indicator)Úys_typesc                 ó$  ‡‡— t          |ddiŽ}t          |Ž \  Š}t          |¦  «        dk    rt          d¦  «        ‚| €$t	          d„ |D ¦   «         ¦  «        } | ddhk    rdh} t          | ¦  «        d	k    rt          d
| z  ¦  «        ‚|                      ¦   «         }|dk    r9t          t	          d„ |D ¦   «         ¦  «        ¦  «        d	k    rt          d¦  «        ‚t                               |d¦  «        Š‰st          dt          |¦  «        z  ¦  «        ‚|rFt          ‰¦  «        s7‰ 
                    ˆˆfd„|D ¦   «         ¦  «        }‰                     |¦  «        S t	          t          j        ˆˆfd„|D ¦   «         ¦  «        ¦  «        }t          t	          d„ |D ¦   «         ¦  «        ¦  «        d	k    r9dd                     ˆfd„|D ¦   «         ¦  «        z   dz   }t          d|› �¦  «        ‚‰                     t!          |¦  «        ¦  «        S )aC  Extract an ordered array of unique labels.

    We don't allow:
        - mix of multilabel and multiclass (single label) targets
        - mix of label indicator matrix and anything else
          (because there are no explicit labels)
        - mix of label indicator matrices of different sizes
        - mix of string and integer labels

    At the moment, we also don't allow "multiclass-multioutput" input type.

    Parameters
    ----------
    *ys : array-likes
        Label values.

    ys_types : set, default=None
        Set of target types of `ys` (as determined by `type_of_target`),
        with `{"binary", "multiclass"}` being amended to `{"multiclass"}`.

    Returns
    -------
    out : ndarray of shape (n_unique_labels,)
        An ordered array of unique labels.

    Examples
    --------
    >>> from sklearn.utils.multiclass import unique_labels
    >>> unique_labels([3, 5, 5, 5, 7, 7])
    array([3, 5, 7])
    >>> unique_labels([1, 2, 3, 4], [2, 2, 3, 4])
    array([1, 2, 3, 4])
    >>> unique_labels([1, 2, 10], [5, 11])
    array([ 1,  2,  5, 10, 11])
    Úreturn_tupleTr   zNo argument has been passed.Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Útype_of_target)Ú.0Úxs     r   ú	<genexpr>z unique_labels.<locals>.<genexpr>S   s*   è è € Ð5Ð5¨Q•~ aÑ(Ô(Ð5Ð5Ð5Ð5Ð5Ð5r   r'   r(   r"   z'Mix type of y not allowed, got types %sr)   c              3   óR   K  — | ]"}t          |g d ¢¬¦  «        j        d         V — Œ#dS )r   )r!   r"   N)r   r$   )r0   r   s     r   r2   z unique_labels.<locals>.<genexpr>b   sO   è è € ð ð ØQR•˜AÐ-BÐ-BÐ-BÐCÑCÔCÔIÈ!ÔLðð ð ð ð ð r   zCMulti-label binary indicator input with different numbers of labelszUnknown label type: %sc                 ó*   •— g | ]} ‰|‰¬ ¦  «        ‘ŒS )r   © ©r0   r   Ú_unique_labelsr   s     €€r   ú
<listcomp>z!unique_labels.<locals>.<listcomp>s   s(   ø€ ÐDÐDÐD¸A˜~˜~¨a°BÐ7Ñ7Ô7ÐDÐDÐDr   c              3   óF   •K  — | ]}d „  ‰|‰¬¦  «        D ¦   «         V — ŒdS )c              3   ó   K  — | ]}|V — Œd S r.   r5   )r0   Úis     r   r2   z*unique_labels.<locals>.<genexpr>.<genexpr>w   s"   è è € ÐAÐA 1˜QÐAÐAÐAÐAÐAÐAr   r   Nr5   r6   s     €€r   r2   z unique_labels.<locals>.<genexpr>w   sA   øè è € ÐNÐNÀaÐAÐA¨¨°q¸RÐ(@Ñ(@Ô(@ÐAÑAÔAÐNÐNÐNÐNÐNÐNr   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r.   )Ú
isinstanceÚstr)r0   Úlabels     r   r2   z unique_labels.<locals>.<genexpr>z   s,   è è € Ð=Ð=¨%�z˜%¥Ñ%Ô%Ð=Ð=Ð=Ð=Ð=Ð=r   zGot z and c                 ó<   •— g | ]}‰                      |¦  «        › ‘ŒS r5   )Úunique_values)r0   r   r   s     €r   r8   z!unique_labels.<locals>.<listcomp>|   s*   ø€ Ð"HÐ"HÐ"HÀ b×&6Ò&6°qÑ&9Ô&9Ð#;Ð"HÐ"HÐ"Hr   ú.z.Mix of label input types (string and number); )r   r   ÚlenÚ
ValueErrorr   ÚpopÚ_FN_UNIQUE_LABELSÚgetÚreprr   ÚconcatrA   r   Úfrom_iterableÚjoinr   Úsorted)	r*   Úysr   Ú
label_typeÚ	unique_ysÚ	ys_labelsÚmsg_detailsr7   r   s	          @@r   Úunique_labelsrR   )   su  øø€ õH 
˜Ð	.¨Ð	.Ð	.€BÝ!.°Ð!3Ñ€BÐÝ
ˆ2�w„w�!‚|€|ÝÐ7Ñ8Ô8Ð8àÐÝÐ5Ð5°"Ð5Ñ5Ô5Ñ5Ô5ˆØ˜ ,Ð/Ò/Ð/Ø$�~ˆHõ ˆ8�}„}�qÒÐÝÐBÀXÑMÑNÔNÐNð —’‘”€Jð 	Ð,Ò,Ð,ÝÝð ð ØVXðñ ô ñ ô ñ
ô 
ð
 òð õ ØQñ
ô 
ð 	
õ
 '×*Ò*¨:°tÑ<Ô<€NØð >ÝÐ1µD¸±H´HÑ<Ñ=Ô=Ð=àð +Õ&9¸"Ñ&=Ô&=ð +à—I’IÐDÐDÐDÐDÐDÀÐDÑDÔDÑEÔEˆ	Ø×Ò 	Ñ*Ô*Ð*åÝÔÐNÐNÐNÐNÐNÈ2ÐNÑNÔNÑNÔNñô €Iõ �3Ð=Ð=°9Ð=Ñ=Ô=Ñ=Ô=Ñ>Ô>ÀÒBÐBà�W—\’\Ð"HÐ"HÐ"HÐ"HÀRÐ"HÑ"HÔ"HÑIÔIÑIÈCÑOð 	õ ÐWÈ+ÐWÐWÑXÔXÐXà�:Š:•f˜YÑ'Ô'Ñ(Ô(Ð(r   c           
      ó  — t          | ¦  «        \  }}|                     | j        d¦  «        oWt          |                     |                     |                     | |j        ¦  «        | j        ¦  «        | k    ¦  «        ¦  «        S )Núreal floating)r   ÚisdtypeÚdtypeÚboolÚallÚastypeÚint64r   s      r   Ú_is_integral_floatr[   ƒ   sr   € Ý!.¨qÑ!1Ô!1Ñ€BÐØ�:Š:�a”g˜Ñ/Ô/ð µDØ
�Šˆr�yŠy˜"Ÿ)š) A r¤xÑ0Ô0°1´7Ñ;Ô;¸qÒ@ÑAÔAñ5ô 5ð r   c                 ó  — t          | ¦  «        \  }}t          | d¦  «        st          | t          ¦  «        s|rÀt	          dddddd¬¦  «        }t          j        ¦   «         5  t          j        dt          ¦  «         	 t          | fddi|¤Ž} nU# t          t          f$ rA}t          |¦  «                             d	¦  «        r‚ t          | fdt          i|¤Ž} Y d}~nd}~ww xY wddd¦  «         n# 1 swxY w Y   t          | d
¦  «        r| j        dk    r| j        d         dk    sdS t!          | ¦  «        r†| j        dv r|                      ¦   «         } |                     | j        ¦  «        }t+          | j        ¦  «        dk    p6|j        dk    s|j        dk    o d|v o| j        j        dv pt3          |¦  «        S t5          | |¬¦  «        }|j        d         dk     o)|                     | j        d¦  «        pt3          |¦  «        S )a}  Check if ``y`` is in a multilabel format.

    Parameters
    ----------
    y : ndarray of shape (n_samples,)
        Target values.

    Returns
    -------
    out : bool
        Return ``True``, if ``y`` is in a multilabel format, else ``False``.

    Examples
    --------
    >>> import numpy as np
    >>> from sklearn.utils.multiclass import is_multilabel
    >>> is_multilabel([0, 1, 0, 1])
    False
    >>> is_multilabel([[1], [0, 2], []])
    False
    >>> is_multilabel(np.array([[1, 0], [0, 0]]))
    True
    >>> is_multilabel(np.array([[1], [0], [0]]))
    False
    >>> is_multilabel(np.array([[1, 0, 0]]))
    True
    r   TFr   ©r!   Úallow_ndÚensure_all_finiteÚ	ensure_2dÚensure_min_samplesÚensure_min_featuresÚerrorrV   NúComplex data not supportedr$   é   r"   )ÚdokÚlilÚbiur   é   )rW   zsigned integerzunsigned integer)r   r   r=   r   ÚdictÚwarningsÚcatch_warningsÚsimplefilterr
   r   rD   r>   Ú
startswithÚobjectÚndimr$   r   ÚformatÚtocsrrA   ÚdatarC   ÚsizerV   Úkindr[   r	   rU   )r   r   r   Úcheck_y_kwargsÚeÚlabelss         r   Úis_multilabelry   Š   sŸ  € õ8 "/¨qÑ!1Ô!1Ñ€BÐÝˆq�+ÑÔð C¥*¨QµÑ"9Ô"9ð CÐ=Sð Cõ ØØØ#ØØ Ø !ð
ñ 
ô 
ˆõ Ô$Ñ&Ô&ð 
	Cð 
	CÝÔ! 'Õ+DÑEÔEÐEðCÝ Ð@Ð@¨Ð@°Ð@Ð@��øÝ-­zÐ:ð Cð Cð CÝ�q‘6”6×$Ò$Ð%AÑBÔBð Øõ   ÐBÐB­ÐB°>ÐBÐB������øøøøðCøøøð	
	Cð 
	Cð 
	Cñ 
	Cô 
	Cð 
	Cð 
	Cð 
	Cð 
	Cð 
	Cð 
	Cøøøð 
	Cð 
	Cð 
	Cð 
	Cõ �A�wÑÔð  A¤F¨a¢K K°A´G¸A´JÀ²N°NØˆuå��{„{ð 
ØŒ8�~Ð%Ð%Ø—’‘	”	ˆAØ×!Ò! !¤&Ñ)Ô)ˆÝ�1”6‰{Œ{˜aÒð 
ØŒ[˜AÒÐG 6¤;°!Ò#3Ð"F¸!¸v¸+ð FØ”” Ð&ÐDÕ*<¸VÑ*DÔ*Dð	
õ
 ˜q RÐ(Ñ(Ô(ˆàŒ|˜AŒ Ò"ð 
Ø�JŠJ�q”wÐ NÑOÔOð *Ý! &Ñ)Ô)ð	
s<   Á"C/Á>BÂC/ÂC Â7CÃC/ÃC Ã C/Ã/C3Ã6C3c                 ó(  — t          | d¬¦  «        }|dvrt          d|› d�¦  «        ‚d|v rat          | ¦  «        }|dk    rNt          | ¦  «        j        d         t          d	|z  ¦  «        k    r"t          j        d
t          d¬¦  «         dS dS dS dS )aA  Ensure that target y is of a non-regression type.

    Only the following target types (as defined in type_of_target) are allowed:
        'binary', 'multiclass', 'multiclass-multioutput',
        'multilabel-indicator', 'multilabel-sequences'

    Parameters
    ----------
    y : array-like
        Target values.
    r   ©r    )r'   r(   zmulticlass-multioutputr)   zmultilabel-sequenceszUnknown label type: zy. Maybe you are trying to fit a classifier, which expects discrete classes on a regression target with continuous values.r(   é   r   g      à?z’The number of unique classes is greater than 50% of the number of samples. `y` could represent a regression problem, not a classification problem.re   )Ú
stacklevelN)	r/   rD   r   r	   r$   Úroundrk   ÚwarnÚUserWarning)r   Úy_typeÚ	n_sampless      r   Úcheck_classification_targetsrƒ   Ò   sÜ   € õ ˜A¨#Ð.Ñ.Ô.€FØð ð ð õ ð8 6ð 8ð 8ð 8ñ
ô 
ð 	
ð �vÐÐÝ  ‘O”Oˆ	Ø�rŠ>ˆ>�m¨AÑ.Ô.Ô4°QÔ7½%ÀÀiÁÑ:PÔ:PÒPÐPåŒMð*õ Øðñ ô ð ð ð ð	 Ðàˆ>ÐPÐPr   Ú Fc                 ól  ‡ ‡‡— t          ‰ ¦  «        \  }}ˆˆˆ fd„}t          ‰ t          ¦  «        st          ‰ ¦  «        st	          ‰ d¦  «        ot          ‰ t
          ¦  «         p|}|st          d‰ z  ¦  «        ‚‰ j        j        dv }|rt          d¦  «        ‚t          ‰ ¦  «        rdS t          ddddd	d	¬
¦  «        }t          j        ¦   «         5  t          j        dt          ¦  «         t          ‰ ¦  «        sf	 t          ‰ fddi|¤ŽŠ nU# t          t          f$ rA}	t          |	¦  «                             d¦  «        r‚ t          ‰ fdt"          i|¤ŽŠ Y d}	~	nd}	~	ww xY wddd¦  «         n# 1 swxY w Y   	 t          ‰ ¦  «        r‰ d	gdd…f         n‰ d	         }
t          |
t$          ¦  «        rt'          d¦  «        ‚t	          |
d¦  «        s9t          |
t          ¦  «        r$t          |
t
          ¦  «        st          d¦  «        ‚n# t(          $ r Y nw xY w‰ j        dvr
 |¦   «         S t-          ‰ j        ¦  «        s‰ j        dk    rdS  |¦   «         S t          ‰ ¦  «        s:‰ j        t"          k    r*t          ‰ j        d	         t
          ¦  «        s
 |¦   «         S ‰ j        dk    r‰ j        d         dk    rd}nd}|                     ‰ j        d¦  «        r{t          ‰ ¦  «        r‰ j        n‰ }|                     ||j        ¦  «        }|                     ||                     |‰ j        ¦  «        k    ¦  «        rt?          |‰¬¦  «         d|z   S t          |
¦  «        r|
j        }
tA          ‰ ¦  «        j        d	         dk    s‰ j        dk    rtC          |
¦  «        dk    rd|z   S dS )aÊ
  Determine the type of data indicated by the target.

    Note that this type is the most specific type that can be inferred.
    For example:

    * ``binary`` is more specific but compatible with ``multiclass``.
    * ``multiclass`` of integers is more specific but compatible with ``continuous``.
    * ``multilabel-indicator`` is more specific but compatible with
      ``multiclass-multioutput``.

    Parameters
    ----------
    y : {array-like, sparse matrix}
        Target values. If a sparse matrix, `y` is expected to be a
        CSR/CSC matrix.

    input_name : str, default=""
        The data name used to construct the error message.

        .. versionadded:: 1.1.0

    raise_unknown : bool, default=False
        If `True`, raise an error when the type of target returned by
        :func:`~sklearn.utils.multiclass.type_of_target` is `"unknown"`.

        .. versionadded:: 1.6

    Returns
    -------
    target_type : str
        One of:

        * 'continuous': `y` is an array-like of floats that are not all
          integers, and is 1d or a column vector.
        * 'continuous-multioutput': `y` is a 2d array of floats that are
          not all integers, and both dimensions are of size > 1.
        * 'binary': `y` contains <= 2 discrete values and is 1d or a column
          vector.
        * 'multiclass': `y` contains more than two discrete values, is not a
          sequence of sequences, and is 1d or a column vector.
        * 'multiclass-multioutput': `y` is a 2d array that contains more
          than two discrete values, is not a sequence of sequences, and both
          dimensions are of size > 1.
        * 'multilabel-indicator': `y` is a label indicator matrix, an array
          of two dimensions with at least two columns, and at most 2 unique
          values.
        * 'unknown': `y` is array-like but none of the above, such as a 3d
          array, sequence of sequences, or an array of non-sequence objects.

    Examples
    --------
    >>> from sklearn.utils.multiclass import type_of_target
    >>> import numpy as np
    >>> type_of_target([0.1, 0.6])
    'continuous'
    >>> type_of_target([1, -1, -1, 1])
    'binary'
    >>> type_of_target(['a', 'b', 'a'])
    'binary'
    >>> type_of_target([1.0, 2.0])
    'binary'
    >>> type_of_target([1, 0, 2])
    'multiclass'
    >>> type_of_target([1.0, 0.0, 3.0])
    'multiclass'
    >>> type_of_target(['a', 'b', 'c'])
    'multiclass'
    >>> type_of_target(np.array([[1, 2], [3, 1]]))
    'multiclass-multioutput'
    >>> type_of_target([[1, 2]])
    'multilabel-indicator'
    >>> type_of_target(np.array([[1.5, 2.0], [3.0, 1.6]]))
    'continuous-multioutput'
    >>> type_of_target(np.array([[0, 1], [1, 1]]))
    'multilabel-indicator'
    c                  óB   •— ‰r‰r‰nd} t          d| › d‰›�¦  «        ‚dS )zdDepending on the value of raise_unknown, either raise an error or return
        'unknown'.
        rs   zUnknown label type for z: Úunknown)rD   )Úinputr    Úraise_unknownr   s    €€€r   Ú_raise_or_returnz(type_of_target.<locals>._raise_or_returnH  s?   ø€ ð ð 	Ø",Ð8�J�J°&ˆEÝÐE°uÐEÐEÀÐEÐEÑFÔFÐFà�9r   r   z:Expected array-like (array or non-string sequence), got %r)ÚSparseSeriesÚSparseArrayz1y cannot be class 'SparseSeries' or 'SparseArray'r)   TFr   r]   rc   rV   Nrd   zkSupport for labels represented as bytes is not supported. Convert the labels to a string or integer format.zÝYou appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead - the MultiLabelBinarizer transformer can convert to this format.)r"   re   r"   r'   re   z-multioutputr„   rT   r{   Ú
continuousr(   )"r   r=   r   r   r   r>   rD   Ú	__class__Ú__name__ry   rj   rk   rl   rm   r
   r   rn   ro   ÚbytesÚ	TypeErrorÚ
IndexErrorrp   Úminr$   rV   ÚflatrU   rs   rY   rZ   Úanyr   r	   rC   )r   r    r‰   r   r   rŠ   ÚvalidÚsparse_pandasrv   rw   Úfirst_row_or_valÚsuffixrs   Úintegral_datas   ```           r   r/   r/   ù   sµ  øøø€ õZ "/¨qÑ!1Ô!1Ñ€BÐðð ð ð ð ð ð õ 
�A•xÑ	 Ô	 Ð	J¥H¨Q¡K¤KÐ	Jµ7¸1¸kÑ3JÔ3Jð 	#Ý˜1�cÑ"Ô"Ð"ð ð 
 ð 
ð
 ð 
ÝØHÈ1ÑLñ
ô 
ð 	
ð ”KÔ(Ð,KÐK€MØð NÝÐLÑMÔMÐMå�QÑÔð &Ø%Ð%õ ØØØØØØðñ ô €Nõ 
Ô	 Ñ	"Ô	"ð Cð CÝÔ˜gÕ'@ÑAÔAÐAÝ˜‰{Œ{ð 		CðCÝ Ð@Ð@¨Ð@°Ð@Ð@��øÝ-­zÐ:ð Cð Cð CÝ�q‘6”6×$Ò$Ð%AÑBÔBð Øõ   ÐBÐB­ÐB°>ÐBÐB������øøøøðCøøøðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð CðÝ(0°©¬Ð=˜1˜a˜S ! ! !˜Vœ9˜9¸¸1¼ÐåÐ&­Ñ.Ô.ð 	Ýð<ñô ð õ Ð(¨+Ñ6Ô6ð	åÐ+­XÑ6Ô6ð	õ Ð/µÑ5Ô5ð	õ
 ð;ñô ð øøõ ð ð ð Øˆðøøøð 	„v�VÐÐàÐÑ!Ô!Ð!ÝˆqŒw‰<Œ<ð "àŒ6�QŠ;ˆ;à�8àÐÑ!Ô!Ð!Ý�A‰;Œ;ð "˜1œ7¥fÒ,Ð,µZÀÄÀqÄ	Í3Ñ5OÔ5OÐ,àÐÑ!Ô!Ð!ð 	„v�‚{€{�q”w˜q”z A’~�~Øˆˆàˆð 
‡z‚z�!”'˜?Ñ+Ô+ð 	)å! !™œÐ+ˆqŒvˆv¨!ˆØŸ	š	 $¨¬Ñ1Ô1ˆð �6Š6�$˜"Ÿ)š) M°1´7Ñ;Ô;Ò;Ñ<Ô<ð 	)Ý˜t°
Ð;Ñ;Ô;Ð;Ø &Ñ(Ð(õ Ð Ñ!Ô!ð 1Ø+Ô0ÐÝ�QÑÔÔ˜aÔ  1Ò$Ð$¨¬°1ª¨½Ð=MÑ9NÔ9NÐQRÒ9RÐ9Rà˜fÑ$Ð$àˆxsO   Ã*E1Ä DÄE1ÄE"Ä!7EÅE1ÅE"Å"E1Å1E5Å8E5Å=BH È
HÈHc                 ó   — t          | dd¦  «        €|€t          d¦  «        ‚|�it          | dd¦  «        �Bt          j        | j        t          |¦  «        ¦  «        st          d|›d| j        ›�¦  «        ‚nt          |¦  «        | _        dS dS )a"  Private helper function for factorizing common classes param logic.

    Estimators that implement the ``partial_fit`` API need to be provided with
    the list of possible classes at the first call to partial_fit.

    Subsequent calls to partial_fit should check that ``classes`` is still
    consistent with a previous value of ``clf.classes_`` when provided.

    This function returns True if it detects that this was the first call to
    ``partial_fit`` on ``clf``. In that case the ``classes_`` attribute is also
    set on ``clf``.

    Úclasses_Nz8classes must be passed on the first call to partial_fit.z	`classes=z7` is not the same as on last call to partial_fit, was: TF)ÚgetattrrD   ÚnpÚarray_equalrœ   rR   )ÚclfÚclassess     r   Ú_check_partial_fit_first_callr¢   À  s¨   € õ ˆs�J Ñ%Ô%Ð-°'°/ÝÐSÑTÔTÐTà	Ð	Ý�3˜
 DÑ)Ô)Ð5Ý”> #¤,µ¸gÑ0FÔ0FÑGÔGð Ý �jà18°°¸#¼,¸,ðHñô ð ðõ )¨Ñ1Ô1ˆCŒLØ�4ð ˆ5r   c                 ó^  — g }g }g }| j         \  }}|�t          j        |¦  «        }t          | ¦  «        �rÉ|                      ¦   «         } t          j        | j        ¦  «        }t          |¦  «        D �]Š}| j        | j        |         | j        |dz            …         }	|�2||	         }
t          j	        |¦  «        t          j	        |
¦  «        z
  }nd}
| j         d         ||         z
  }t          j
        | j        | j        |         | j        |dz            …         d¬¦  «        \  }}t          j        ||
¬¦  «        }d|v r||dk    xx         |z  cc<   d|vrC||         | j         d         k     r,t          j        |dd¦  «        }t          j        |d|¦  «        }|                     |¦  «         |                     |j         d         ¦  «         |                     || 	                    ¦   «         z  ¦  «         �ŒŒnªt          |¦  «        D ]š}t          j
        | dd…|f         d¬¦  «        \  }}|                     |¦  «         |                     |j         d         ¦  «         t          j        ||¬¦  «        }|                     || 	                    ¦   «         z  ¦  «         Œ›|||fS )az  Compute class priors from multioutput-multiclass target data.

    Parameters
    ----------
    y : {array-like, sparse matrix} of size (n_samples, n_outputs)
        The labels for each example.

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

    Returns
    -------
    classes : list of size n_outputs of ndarray of size (n_classes,)
        List of classes for each column.

    n_classes : list of int of size n_outputs
        Number of classes in each column.

    class_prior : list of size n_outputs of ndarray of size (n_classes,)
        Class distribution of each column.
    Nr"   r   T)Úreturn_inverse)Úweights)r$   rž   r   r   ÚtocscÚdiffÚindptrÚrangeÚindicesÚsumÚuniquers   ÚbincountÚinsertÚappend)r   Úsample_weightr¡   Ú	n_classesÚclass_priorr‚   Ú	n_outputsÚy_nnzÚkÚcol_nonzeroÚnz_samp_weightÚzeros_samp_weight_sumÚ	classes_kÚy_kÚclass_prior_ks                  r   Úclass_distributionr¼   ã  s¼  € ð, €GØ€IØ€Kàœ7Ñ€IˆyØÐ Ýœ
 =Ñ1Ô1ˆå��{„{ñ 'DØ�GŠG‰IŒIˆÝ”˜œÑ!Ô!ˆå�yÑ!Ô!ð 	Dñ 	DˆAØœ) A¤H¨Q¤K°!´(¸1¸q¹5´/Ð$AÔBˆKàÐ(Ø!.¨{Ô!;�Ý(*¬¨}Ñ(=Ô(=ÅÄÀ~Ñ@VÔ@VÑ(VÐ%Ð%à!%�Ø()¬°¬
°U¸1´XÑ(=Ð%åœYØ”�q”x ”{ Q¤X¨a°!©e¤_Ð4Ô5Àdðñ ô ‰NˆI�sõ œK¨°^ÐDÑDÔDˆMð �Iˆ~ˆ~Ø˜i¨1šnÐ-Ð-Ô-Ð1FÑFÐ-Ð-Ñ-ð ˜	Ð!Ð! e¨A¤h°´¸´Ò&;Ð&;ÝœI i°°AÑ6Ô6�	Ý "¤	¨-¸Ð<QÑ RÔ R�à�NŠN˜9Ñ%Ô%Ð%Ø×Ò˜Yœ_¨QÔ/Ñ0Ô0Ð0Ø×Ò˜}¨}×/@Ò/@Ñ/BÔ/BÑBÑCÔCÐCÑCð9	Dõ< �yÑ!Ô!ð 	Dð 	DˆAÝœY q¨¨¨¨A¨¤w¸tÐDÑDÔD‰NˆI�sØ�NŠN˜9Ñ%Ô%Ð%Ø×Ò˜Yœ_¨QÔ/Ñ0Ô0Ð0ÝœK¨°]ÐCÑCÔCˆMØ×Ò˜}¨}×/@Ò/@Ñ/BÔ/BÑBÑCÔCÐCÐCà�Y Ð,Ð,r   c                 ó  — | j         d         }t          j        ||f¦  «        }t          j        ||f¦  «        }d}t          |¦  «        D ]™}t          |dz   |¦  «        D ]ƒ}|dd…|fxx         |dd…|f         z  cc<   |dd…|fxx         |dd…|f         z  cc<   || dd…|f         dk    |fxx         dz  cc<   || dd…|f         dk    |fxx         dz  cc<   |dz  }Œ„Œš|dt          j        |¦  «        dz   z  z  }	||	z   S )ay  Compute a continuous, tie-breaking OvR decision function from OvO.

    It is important to include a continuous value, not only votes,
    to make computing AUC or calibration meaningful.

    Parameters
    ----------
    predictions : array-like of shape (n_samples, n_classifiers)
        Predicted classes for each binary classifier.

    confidences : array-like of shape (n_samples, n_classifiers)
        Decision functions or predicted probabilities for positive class
        for each binary classifier.

    n_classes : int
        Number of classes. n_classifiers must be
        ``n_classes * (n_classes - 1 ) / 2``.
    r   r"   Nri   )r$   rž   Úzerosr©   Úabs)
ÚpredictionsÚconfidencesr±   r‚   ÚvotesÚsum_of_confidencesrµ   r;   ÚjÚtransformed_confidencess
             r   Ú_ovr_decision_functionrÆ   -  s~  € ð& Ô! !Ô$€IÝŒH�i Ð+Ñ,Ô,€EÝœ 9¨iÐ"8Ñ9Ô9Ðà	€AÝ�9ÑÔð ð ˆÝ�q˜1‘u˜iÑ(Ô(ð 	ð 	ˆAØ˜q˜q˜q !˜tÐ$Ð$Ô$¨°A°A°A°q°DÔ(9Ñ9Ð$Ð$Ñ$Ø˜q˜q˜q !˜tÐ$Ð$Ô$¨°A°A°A°q°DÔ(9Ñ9Ð$Ð$Ñ$Ø�+˜a˜a˜a ˜dÔ# qÒ(¨!Ð+Ð,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ø�+˜a˜a˜a ˜dÔ# qÒ(¨!Ð+Ð,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ø�‰FˆAˆAð	ð 1Ø	�RŒVÐ&Ñ'Ô'¨!Ñ+Ñ,ñÐð Ð*Ñ*Ð*r   r.   )r„   F)!Ú__doc__rk   Úcollections.abcr   Ú	itertoolsr   Únumpyrž   Úscipy.sparser   Úsklearn.utils._array_apir   r   Úsklearn.utils._uniquer   r	   Úsklearn.utils.fixesr
   Úsklearn.utils.validationr   r   r   r   r&   rF   rR   r[   ry   rƒ   r/   r¢   r¼   rÆ   r5   r   r   ú<module>rÐ      s®  ðØ GÐ Gð
 €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rðð ð ð ðð ð ð ð !Ø$Ø-ðð Ð ð !%ð W)ð W)ð W)ð W)ð W)ðtð ð ðE
ð E
ð E
ðP$ð $ð $ðNDð Dð Dð DðN ð  ð  ð  ðFG-ð G-ð G-ð G-ðT*+ð *+ð *+ð *+ð *+r   